var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __typeError = (msg) => { throw TypeError(msg); }; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to2, from2, except, desc) => { if (from2 && typeof from2 === "object" || typeof from2 === "function") { for (let key of __getOwnPropNames(from2)) if (!__hasOwnProp.call(to2, key) && key !== except) __defProp(to2, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc(from2, key)) || desc.enumerable }); } return to2; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value); var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value); var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method); // node_modules/.pnpm/moment@2.30.1/node_modules/moment/moment.js var require_moment = __commonJS({ "node_modules/.pnpm/moment@2.30.1/node_modules/moment/moment.js"(exports2, module2) { (function(global2, factory) { typeof exports2 === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global2.moment = factory(); })(exports2, function() { "use strict"; var hookCallback; function hooks() { return hookCallback.apply(null, arguments); } function setHookCallback(callback2) { hookCallback = callback2; } function isArray2(input) { return input instanceof Array || Object.prototype.toString.call(input) === "[object Array]"; } function isObject2(input) { return input != null && Object.prototype.toString.call(input) === "[object Object]"; } function hasOwnProp(a, b) { return Object.prototype.hasOwnProperty.call(a, b); } function isObjectEmpty(obj) { if (Object.getOwnPropertyNames) { return Object.getOwnPropertyNames(obj).length === 0; } else { var k; for (k in obj) { if (hasOwnProp(obj, k)) { return false; } } return true; } } function isUndefined(input) { return input === void 0; } function isNumber2(input) { return typeof input === "number" || Object.prototype.toString.call(input) === "[object Number]"; } function isDate(input) { return input instanceof Date || Object.prototype.toString.call(input) === "[object Date]"; } function map3(arr, fn) { var res = [], i, arrLen = arr.length; for (i = 0; i < arrLen; ++i) { res.push(fn(arr[i], i)); } return res; } function extend(a, b) { for (var i in b) { if (hasOwnProp(b, i)) { a[i] = b[i]; } } if (hasOwnProp(b, "toString")) { a.toString = b.toString; } if (hasOwnProp(b, "valueOf")) { a.valueOf = b.valueOf; } return a; } function createUTC(input, format2, locale3, strict) { return createLocalOrUTC(input, format2, locale3, strict, true).utc(); } function defaultParsingFlags() { return { empty: false, unusedTokens: [], unusedInput: [], overflow: -2, charsLeftOver: 0, nullInput: false, invalidEra: null, invalidMonth: null, invalidFormat: false, userInvalidated: false, iso: false, parsedDateParts: [], era: null, meridiem: null, rfc2822: false, weekdayMismatch: false }; } function getParsingFlags(m) { if (m._pf == null) { m._pf = defaultParsingFlags(); } return m._pf; } var some; if (Array.prototype.some) { some = Array.prototype.some; } else { some = function(fun) { var t2 = Object(this), len = t2.length >>> 0, i; for (i = 0; i < len; i++) { if (i in t2 && fun.call(this, t2[i], i, t2)) { return true; } } return false; }; } function isValid(m) { var flags = null, parsedParts = false, isNowValid = m._d && !isNaN(m._d.getTime()); if (isNowValid) { flags = getParsingFlags(m); parsedParts = some.call(flags.parsedDateParts, function(i) { return i != null; }); isNowValid = flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts); if (m._strict) { isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === void 0; } } if (Object.isFrozen == null || !Object.isFrozen(m)) { m._isValid = isNowValid; } else { return isNowValid; } return m._isValid; } function createInvalid(flags) { var m = createUTC(NaN); if (flags != null) { extend(getParsingFlags(m), flags); } else { getParsingFlags(m).userInvalidated = true; } return m; } var momentProperties = hooks.momentProperties = [], updateInProgress = false; function copyConfig(to3, from3) { var i, prop, val, momentPropertiesLen = momentProperties.length; if (!isUndefined(from3._isAMomentObject)) { to3._isAMomentObject = from3._isAMomentObject; } if (!isUndefined(from3._i)) { to3._i = from3._i; } if (!isUndefined(from3._f)) { to3._f = from3._f; } if (!isUndefined(from3._l)) { to3._l = from3._l; } if (!isUndefined(from3._strict)) { to3._strict = from3._strict; } if (!isUndefined(from3._tzm)) { to3._tzm = from3._tzm; } if (!isUndefined(from3._isUTC)) { to3._isUTC = from3._isUTC; } if (!isUndefined(from3._offset)) { to3._offset = from3._offset; } if (!isUndefined(from3._pf)) { to3._pf = getParsingFlags(from3); } if (!isUndefined(from3._locale)) { to3._locale = from3._locale; } if (momentPropertiesLen > 0) { for (i = 0; i < momentPropertiesLen; i++) { prop = momentProperties[i]; val = from3[prop]; if (!isUndefined(val)) { to3[prop] = val; } } } return to3; } function Moment3(config) { copyConfig(this, config); this._d = new Date(config._d != null ? config._d.getTime() : NaN); if (!this.isValid()) { this._d = /* @__PURE__ */ new Date(NaN); } if (updateInProgress === false) { updateInProgress = true; hooks.updateOffset(this); updateInProgress = false; } } function isMoment(obj) { return obj instanceof Moment3 || obj != null && obj._isAMomentObject != null; } function warn(msg) { if (hooks.suppressDeprecationWarnings === false && typeof console !== "undefined" && console.warn) { console.warn("Deprecation warning: " + msg); } } function deprecate(msg, fn) { var firstTime = true; return extend(function() { if (hooks.deprecationHandler != null) { hooks.deprecationHandler(null, msg); } if (firstTime) { var args = [], arg, i, key, argLen = arguments.length; for (i = 0; i < argLen; i++) { arg = ""; if (typeof arguments[i] === "object") { arg += "\n[" + i + "] "; for (key in arguments[0]) { if (hasOwnProp(arguments[0], key)) { arg += key + ": " + arguments[0][key] + ", "; } } arg = arg.slice(0, -2); } else { arg = arguments[i]; } args.push(arg); } warn( msg + "\nArguments: " + Array.prototype.slice.call(args).join("") + "\n" + new Error().stack ); firstTime = false; } return fn.apply(this, arguments); }, fn); } var deprecations = {}; function deprecateSimple(name, msg) { if (hooks.deprecationHandler != null) { hooks.deprecationHandler(name, msg); } if (!deprecations[name]) { warn(msg); deprecations[name] = true; } } hooks.suppressDeprecationWarnings = false; hooks.deprecationHandler = null; function isFunction2(input) { return typeof Function !== "undefined" && input instanceof Function || Object.prototype.toString.call(input) === "[object Function]"; } function set2(config) { var prop, i; for (i in config) { if (hasOwnProp(config, i)) { prop = config[i]; if (isFunction2(prop)) { this[i] = prop; } else { this["_" + i] = prop; } } } this._config = config; this._dayOfMonthOrdinalParseLenient = new RegExp( (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + "|" + /\d{1,2}/.source ); } function mergeConfigs(parentConfig, childConfig) { var res = extend({}, parentConfig), prop; for (prop in childConfig) { if (hasOwnProp(childConfig, prop)) { if (isObject2(parentConfig[prop]) && isObject2(childConfig[prop])) { res[prop] = {}; extend(res[prop], parentConfig[prop]); extend(res[prop], childConfig[prop]); } else if (childConfig[prop] != null) { res[prop] = childConfig[prop]; } else { delete res[prop]; } } } for (prop in parentConfig) { if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject2(parentConfig[prop])) { res[prop] = extend({}, res[prop]); } } return res; } function Locale(config) { if (config != null) { this.set(config); } } var keys; if (Object.keys) { keys = Object.keys; } else { keys = function(obj) { var i, res = []; for (i in obj) { if (hasOwnProp(obj, i)) { res.push(i); } } return res; }; } var defaultCalendar = { sameDay: "[Today at] LT", nextDay: "[Tomorrow at] LT", nextWeek: "dddd [at] LT", lastDay: "[Yesterday at] LT", lastWeek: "[Last] dddd [at] LT", sameElse: "L" }; function calendar(key, mom, now3) { var output = this._calendar[key] || this._calendar["sameElse"]; return isFunction2(output) ? output.call(mom, now3) : output; } function zeroFill(number, targetLength, forceSign) { var absNumber = "" + Math.abs(number), zerosToFill = targetLength - absNumber.length, sign3 = number >= 0; return (sign3 ? forceSign ? "+" : "" : "-") + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; } var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, formatFunctions = {}, formatTokenFunctions = {}; function addFormatToken(token2, padded, ordinal2, callback2) { var func = callback2; if (typeof callback2 === "string") { func = function() { return this[callback2](); }; } if (token2) { formatTokenFunctions[token2] = func; } if (padded) { formatTokenFunctions[padded[0]] = function() { return zeroFill(func.apply(this, arguments), padded[1], padded[2]); }; } if (ordinal2) { formatTokenFunctions[ordinal2] = function() { return this.localeData().ordinal( func.apply(this, arguments), token2 ); }; } } function removeFormattingTokens(input) { if (input.match(/\[[\s\S]/)) { return input.replace(/^\[|\]$/g, ""); } return input.replace(/\\/g, ""); } function makeFormatFunction(format2) { var array = format2.match(formattingTokens), i, length; for (i = 0, length = array.length; i < length; i++) { if (formatTokenFunctions[array[i]]) { array[i] = formatTokenFunctions[array[i]]; } else { array[i] = removeFormattingTokens(array[i]); } } return function(mom) { var output = "", i2; for (i2 = 0; i2 < length; i2++) { output += isFunction2(array[i2]) ? array[i2].call(mom, format2) : array[i2]; } return output; }; } function formatMoment(m, format2) { if (!m.isValid()) { return m.localeData().invalidDate(); } format2 = expandFormat(format2, m.localeData()); formatFunctions[format2] = formatFunctions[format2] || makeFormatFunction(format2); return formatFunctions[format2](m); } function expandFormat(format2, locale3) { var i = 5; function replaceLongDateFormatTokens(input) { return locale3.longDateFormat(input) || input; } localFormattingTokens.lastIndex = 0; while (i >= 0 && localFormattingTokens.test(format2)) { format2 = format2.replace( localFormattingTokens, replaceLongDateFormatTokens ); localFormattingTokens.lastIndex = 0; i -= 1; } return format2; } var defaultLongDateFormat = { LTS: "h:mm:ss A", LT: "h:mm A", L: "MM/DD/YYYY", LL: "MMMM D, YYYY", LLL: "MMMM D, YYYY h:mm A", LLLL: "dddd, MMMM D, YYYY h:mm A" }; function longDateFormat(key) { var format2 = this._longDateFormat[key], formatUpper = this._longDateFormat[key.toUpperCase()]; if (format2 || !formatUpper) { return format2; } this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function(tok) { if (tok === "MMMM" || tok === "MM" || tok === "DD" || tok === "dddd") { return tok.slice(1); } return tok; }).join(""); return this._longDateFormat[key]; } var defaultInvalidDate = "Invalid date"; function invalidDate() { return this._invalidDate; } var defaultOrdinal = "%d", defaultDayOfMonthOrdinalParse = /\d{1,2}/; function ordinal(number) { return this._ordinal.replace("%d", number); } var defaultRelativeTime = { future: "in %s", past: "%s ago", s: "a few seconds", ss: "%d seconds", m: "a minute", mm: "%d minutes", h: "an hour", hh: "%d hours", d: "a day", dd: "%d days", w: "a week", ww: "%d weeks", M: "a month", MM: "%d months", y: "a year", yy: "%d years" }; function relativeTime(number, withoutSuffix, string, isFuture) { var output = this._relativeTime[string]; return isFunction2(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number); } function pastFuture(diff2, output) { var format2 = this._relativeTime[diff2 > 0 ? "future" : "past"]; return isFunction2(format2) ? format2(output) : format2.replace(/%s/i, output); } var aliases = { D: "date", dates: "date", date: "date", d: "day", days: "day", day: "day", e: "weekday", weekdays: "weekday", weekday: "weekday", E: "isoWeekday", isoweekdays: "isoWeekday", isoweekday: "isoWeekday", DDD: "dayOfYear", dayofyears: "dayOfYear", dayofyear: "dayOfYear", h: "hour", hours: "hour", hour: "hour", ms: "millisecond", milliseconds: "millisecond", millisecond: "millisecond", m: "minute", minutes: "minute", minute: "minute", M: "month", months: "month", month: "month", Q: "quarter", quarters: "quarter", quarter: "quarter", s: "second", seconds: "second", second: "second", gg: "weekYear", weekyears: "weekYear", weekyear: "weekYear", GG: "isoWeekYear", isoweekyears: "isoWeekYear", isoweekyear: "isoWeekYear", w: "week", weeks: "week", week: "week", W: "isoWeek", isoweeks: "isoWeek", isoweek: "isoWeek", y: "year", years: "year", year: "year" }; function normalizeUnits(units) { return typeof units === "string" ? aliases[units] || aliases[units.toLowerCase()] : void 0; } function normalizeObjectUnits(inputObject) { var normalizedInput = {}, normalizedProp, prop; for (prop in inputObject) { if (hasOwnProp(inputObject, prop)) { normalizedProp = normalizeUnits(prop); if (normalizedProp) { normalizedInput[normalizedProp] = inputObject[prop]; } } } return normalizedInput; } var priorities = { date: 9, day: 11, weekday: 11, isoWeekday: 11, dayOfYear: 4, hour: 13, millisecond: 16, minute: 14, month: 8, quarter: 7, second: 15, weekYear: 1, isoWeekYear: 1, week: 5, isoWeek: 5, year: 1 }; function getPrioritizedUnits(unitsObj) { var units = [], u; for (u in unitsObj) { if (hasOwnProp(unitsObj, u)) { units.push({ unit: u, priority: priorities[u] }); } } units.sort(function(a, b) { return a.priority - b.priority; }); return units; } var match1 = /\d/, match2 = /\d\d/, match3 = /\d{3}/, match4 = /\d{4}/, match6 = /[+-]?\d{6}/, match1to2 = /\d\d?/, match3to4 = /\d\d\d\d?/, match5to6 = /\d\d\d\d\d\d?/, match1to3 = /\d{1,3}/, match1to4 = /\d{1,4}/, match1to6 = /[+-]?\d{1,6}/, matchUnsigned = /\d+/, matchSigned = /[+-]?\d+/, matchOffset = /Z|[+-]\d\d:?\d\d/gi, matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, match1to2NoLeadingZero = /^[1-9]\d?/, match1to2HasZero = /^([1-9]\d|\d)/, regexes; regexes = {}; function addRegexToken(token2, regex, strictRegex) { regexes[token2] = isFunction2(regex) ? regex : function(isStrict, localeData2) { return isStrict && strictRegex ? strictRegex : regex; }; } function getParseRegexForToken(token2, config) { if (!hasOwnProp(regexes, token2)) { return new RegExp(unescapeFormat(token2)); } return regexes[token2](config._strict, config._locale); } function unescapeFormat(s) { return regexEscape( s.replace("\\", "").replace( /\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function(matched, p1, p2, p3, p4) { return p1 || p2 || p3 || p4; } ) ); } function regexEscape(s) { return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"); } function absFloor(number) { if (number < 0) { return Math.ceil(number) || 0; } else { return Math.floor(number); } } function toInt(argumentForCoercion) { var coercedNumber = +argumentForCoercion, value = 0; if (coercedNumber !== 0 && isFinite(coercedNumber)) { value = absFloor(coercedNumber); } return value; } var tokens = {}; function addParseToken(token2, callback2) { var i, func = callback2, tokenLen; if (typeof token2 === "string") { token2 = [token2]; } if (isNumber2(callback2)) { func = function(input, array) { array[callback2] = toInt(input); }; } tokenLen = token2.length; for (i = 0; i < tokenLen; i++) { tokens[token2[i]] = func; } } function addWeekParseToken(token2, callback2) { addParseToken(token2, function(input, array, config, token3) { config._w = config._w || {}; callback2(input, config._w, config, token3); }); } function addTimeToArrayFromToken(token2, input, config) { if (input != null && hasOwnProp(tokens, token2)) { tokens[token2](input, config._a, config, token2); } } function isLeapYear(year) { return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; } var YEAR = 0, MONTH = 1, DATE = 2, HOUR = 3, MINUTE = 4, SECOND = 5, MILLISECOND = 6, WEEK = 7, WEEKDAY = 8; addFormatToken("Y", 0, 0, function() { var y = this.year(); return y <= 9999 ? zeroFill(y, 4) : "+" + y; }); addFormatToken(0, ["YY", 2], 0, function() { return this.year() % 100; }); addFormatToken(0, ["YYYY", 4], 0, "year"); addFormatToken(0, ["YYYYY", 5], 0, "year"); addFormatToken(0, ["YYYYYY", 6, true], 0, "year"); addRegexToken("Y", matchSigned); addRegexToken("YY", match1to2, match2); addRegexToken("YYYY", match1to4, match4); addRegexToken("YYYYY", match1to6, match6); addRegexToken("YYYYYY", match1to6, match6); addParseToken(["YYYYY", "YYYYYY"], YEAR); addParseToken("YYYY", function(input, array) { array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); }); addParseToken("YY", function(input, array) { array[YEAR] = hooks.parseTwoDigitYear(input); }); addParseToken("Y", function(input, array) { array[YEAR] = parseInt(input, 10); }); function daysInYear(year) { return isLeapYear(year) ? 366 : 365; } hooks.parseTwoDigitYear = function(input) { return toInt(input) + (toInt(input) > 68 ? 1900 : 2e3); }; var getSetYear = makeGetSet("FullYear", true); function getIsLeapYear() { return isLeapYear(this.year()); } function makeGetSet(unit, keepTime) { return function(value) { if (value != null) { set$1(this, unit, value); hooks.updateOffset(this, keepTime); return this; } else { return get(this, unit); } }; } function get(mom, unit) { if (!mom.isValid()) { return NaN; } var d = mom._d, isUTC = mom._isUTC; switch (unit) { case "Milliseconds": return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds(); case "Seconds": return isUTC ? d.getUTCSeconds() : d.getSeconds(); case "Minutes": return isUTC ? d.getUTCMinutes() : d.getMinutes(); case "Hours": return isUTC ? d.getUTCHours() : d.getHours(); case "Date": return isUTC ? d.getUTCDate() : d.getDate(); case "Day": return isUTC ? d.getUTCDay() : d.getDay(); case "Month": return isUTC ? d.getUTCMonth() : d.getMonth(); case "FullYear": return isUTC ? d.getUTCFullYear() : d.getFullYear(); default: return NaN; } } function set$1(mom, unit, value) { var d, isUTC, year, month, date; if (!mom.isValid() || isNaN(value)) { return; } d = mom._d; isUTC = mom._isUTC; switch (unit) { case "Milliseconds": return void (isUTC ? d.setUTCMilliseconds(value) : d.setMilliseconds(value)); case "Seconds": return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value)); case "Minutes": return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value)); case "Hours": return void (isUTC ? d.setUTCHours(value) : d.setHours(value)); case "Date": return void (isUTC ? d.setUTCDate(value) : d.setDate(value)); // case 'Day': // Not real // return void (isUTC ? d.setUTCDay(value) : d.setDay(value)); // case 'Month': // Not used because we need to pass two variables // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value)); case "FullYear": break; // See below ... default: return; } year = value; month = mom.month(); date = mom.date(); date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date; void (isUTC ? d.setUTCFullYear(year, month, date) : d.setFullYear(year, month, date)); } function stringGet(units) { units = normalizeUnits(units); if (isFunction2(this[units])) { return this[units](); } return this; } function stringSet(units, value) { if (typeof units === "object") { units = normalizeObjectUnits(units); var prioritized = getPrioritizedUnits(units), i, prioritizedLen = prioritized.length; for (i = 0; i < prioritizedLen; i++) { this[prioritized[i].unit](units[prioritized[i].unit]); } } else { units = normalizeUnits(units); if (isFunction2(this[units])) { return this[units](value); } } return this; } function mod(n, x) { return (n % x + x) % x; } var indexOf; if (Array.prototype.indexOf) { indexOf = Array.prototype.indexOf; } else { indexOf = function(o) { var i; for (i = 0; i < this.length; ++i) { if (this[i] === o) { return i; } } return -1; }; } function daysInMonth(year, month) { if (isNaN(year) || isNaN(month)) { return NaN; } var modMonth = mod(month, 12); year += (month - modMonth) / 12; return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2; } addFormatToken("M", ["MM", 2], "Mo", function() { return this.month() + 1; }); addFormatToken("MMM", 0, 0, function(format2) { return this.localeData().monthsShort(this, format2); }); addFormatToken("MMMM", 0, 0, function(format2) { return this.localeData().months(this, format2); }); addRegexToken("M", match1to2, match1to2NoLeadingZero); addRegexToken("MM", match1to2, match2); addRegexToken("MMM", function(isStrict, locale3) { return locale3.monthsShortRegex(isStrict); }); addRegexToken("MMMM", function(isStrict, locale3) { return locale3.monthsRegex(isStrict); }); addParseToken(["M", "MM"], function(input, array) { array[MONTH] = toInt(input) - 1; }); addParseToken(["MMM", "MMMM"], function(input, array, config, token2) { var month = config._locale.monthsParse(input, token2, config._strict); if (month != null) { array[MONTH] = month; } else { getParsingFlags(config).invalidMonth = input; } }); var defaultLocaleMonths = "January_February_March_April_May_June_July_August_September_October_November_December".split( "_" ), defaultLocaleMonthsShort = "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, defaultMonthsShortRegex = matchWord, defaultMonthsRegex = matchWord; function localeMonths(m, format2) { if (!m) { return isArray2(this._months) ? this._months : this._months["standalone"]; } return isArray2(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format2) ? "format" : "standalone"][m.month()]; } function localeMonthsShort(m, format2) { if (!m) { return isArray2(this._monthsShort) ? this._monthsShort : this._monthsShort["standalone"]; } return isArray2(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format2) ? "format" : "standalone"][m.month()]; } function handleStrictParse(monthName, format2, strict) { var i, ii, mom, llc = monthName.toLocaleLowerCase(); if (!this._monthsParse) { this._monthsParse = []; this._longMonthsParse = []; this._shortMonthsParse = []; for (i = 0; i < 12; ++i) { mom = createUTC([2e3, i]); this._shortMonthsParse[i] = this.monthsShort( mom, "" ).toLocaleLowerCase(); this._longMonthsParse[i] = this.months(mom, "").toLocaleLowerCase(); } } if (strict) { if (format2 === "MMM") { ii = indexOf.call(this._shortMonthsParse, llc); return ii !== -1 ? ii : null; } else { ii = indexOf.call(this._longMonthsParse, llc); return ii !== -1 ? ii : null; } } else { if (format2 === "MMM") { ii = indexOf.call(this._shortMonthsParse, llc); if (ii !== -1) { return ii; } ii = indexOf.call(this._longMonthsParse, llc); return ii !== -1 ? ii : null; } else { ii = indexOf.call(this._longMonthsParse, llc); if (ii !== -1) { return ii; } ii = indexOf.call(this._shortMonthsParse, llc); return ii !== -1 ? ii : null; } } } function localeMonthsParse(monthName, format2, strict) { var i, mom, regex; if (this._monthsParseExact) { return handleStrictParse.call(this, monthName, format2, strict); } if (!this._monthsParse) { this._monthsParse = []; this._longMonthsParse = []; this._shortMonthsParse = []; } for (i = 0; i < 12; i++) { mom = createUTC([2e3, i]); if (strict && !this._longMonthsParse[i]) { this._longMonthsParse[i] = new RegExp( "^" + this.months(mom, "").replace(".", "") + "$", "i" ); this._shortMonthsParse[i] = new RegExp( "^" + this.monthsShort(mom, "").replace(".", "") + "$", "i" ); } if (!strict && !this._monthsParse[i]) { regex = "^" + this.months(mom, "") + "|^" + this.monthsShort(mom, ""); this._monthsParse[i] = new RegExp(regex.replace(".", ""), "i"); } if (strict && format2 === "MMMM" && this._longMonthsParse[i].test(monthName)) { return i; } else if (strict && format2 === "MMM" && this._shortMonthsParse[i].test(monthName)) { return i; } else if (!strict && this._monthsParse[i].test(monthName)) { return i; } } } function setMonth(mom, value) { if (!mom.isValid()) { return mom; } if (typeof value === "string") { if (/^\d+$/.test(value)) { value = toInt(value); } else { value = mom.localeData().monthsParse(value); if (!isNumber2(value)) { return mom; } } } var month = value, date = mom.date(); date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month)); void (mom._isUTC ? mom._d.setUTCMonth(month, date) : mom._d.setMonth(month, date)); return mom; } function getSetMonth(value) { if (value != null) { setMonth(this, value); hooks.updateOffset(this, true); return this; } else { return get(this, "Month"); } } function getDaysInMonth() { return daysInMonth(this.year(), this.month()); } function monthsShortRegex(isStrict) { if (this._monthsParseExact) { if (!hasOwnProp(this, "_monthsRegex")) { computeMonthsParse.call(this); } if (isStrict) { return this._monthsShortStrictRegex; } else { return this._monthsShortRegex; } } else { if (!hasOwnProp(this, "_monthsShortRegex")) { this._monthsShortRegex = defaultMonthsShortRegex; } return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex; } } function monthsRegex(isStrict) { if (this._monthsParseExact) { if (!hasOwnProp(this, "_monthsRegex")) { computeMonthsParse.call(this); } if (isStrict) { return this._monthsStrictRegex; } else { return this._monthsRegex; } } else { if (!hasOwnProp(this, "_monthsRegex")) { this._monthsRegex = defaultMonthsRegex; } return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex; } } function computeMonthsParse() { function cmpLenRev(a, b) { return b.length - a.length; } var shortPieces = [], longPieces = [], mixedPieces = [], i, mom, shortP, longP; for (i = 0; i < 12; i++) { mom = createUTC([2e3, i]); shortP = regexEscape(this.monthsShort(mom, "")); longP = regexEscape(this.months(mom, "")); shortPieces.push(shortP); longPieces.push(longP); mixedPieces.push(longP); mixedPieces.push(shortP); } shortPieces.sort(cmpLenRev); longPieces.sort(cmpLenRev); mixedPieces.sort(cmpLenRev); this._monthsRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i"); this._monthsShortRegex = this._monthsRegex; this._monthsStrictRegex = new RegExp( "^(" + longPieces.join("|") + ")", "i" ); this._monthsShortStrictRegex = new RegExp( "^(" + shortPieces.join("|") + ")", "i" ); } function createDate(y, m, d, h4, M, s, ms) { var date; if (y < 100 && y >= 0) { date = new Date(y + 400, m, d, h4, M, s, ms); if (isFinite(date.getFullYear())) { date.setFullYear(y); } } else { date = new Date(y, m, d, h4, M, s, ms); } return date; } function createUTCDate(y) { var date, args; if (y < 100 && y >= 0) { args = Array.prototype.slice.call(arguments); args[0] = y + 400; date = new Date(Date.UTC.apply(null, args)); if (isFinite(date.getUTCFullYear())) { date.setUTCFullYear(y); } } else { date = new Date(Date.UTC.apply(null, arguments)); } return date; } function firstWeekOffset(year, dow, doy) { var fwd = 7 + dow - doy, fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; return -fwdlw + fwd - 1; } function dayOfYearFromWeeks(year, week, weekday, dow, doy) { var localWeekday = (7 + weekday - dow) % 7, weekOffset = firstWeekOffset(year, dow, doy), dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, resYear, resDayOfYear; if (dayOfYear <= 0) { resYear = year - 1; resDayOfYear = daysInYear(resYear) + dayOfYear; } else if (dayOfYear > daysInYear(year)) { resYear = year + 1; resDayOfYear = dayOfYear - daysInYear(year); } else { resYear = year; resDayOfYear = dayOfYear; } return { year: resYear, dayOfYear: resDayOfYear }; } function weekOfYear(mom, dow, doy) { var weekOffset = firstWeekOffset(mom.year(), dow, doy), week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, resWeek, resYear; if (week < 1) { resYear = mom.year() - 1; resWeek = week + weeksInYear(resYear, dow, doy); } else if (week > weeksInYear(mom.year(), dow, doy)) { resWeek = week - weeksInYear(mom.year(), dow, doy); resYear = mom.year() + 1; } else { resYear = mom.year(); resWeek = week; } return { week: resWeek, year: resYear }; } function weeksInYear(year, dow, doy) { var weekOffset = firstWeekOffset(year, dow, doy), weekOffsetNext = firstWeekOffset(year + 1, dow, doy); return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; } addFormatToken("w", ["ww", 2], "wo", "week"); addFormatToken("W", ["WW", 2], "Wo", "isoWeek"); addRegexToken("w", match1to2, match1to2NoLeadingZero); addRegexToken("ww", match1to2, match2); addRegexToken("W", match1to2, match1to2NoLeadingZero); addRegexToken("WW", match1to2, match2); addWeekParseToken( ["w", "ww", "W", "WW"], function(input, week, config, token2) { week[token2.substr(0, 1)] = toInt(input); } ); function localeWeek(mom) { return weekOfYear(mom, this._week.dow, this._week.doy).week; } var defaultLocaleWeek = { dow: 0, // Sunday is the first day of the week. doy: 6 // The week that contains Jan 6th is the first week of the year. }; function localeFirstDayOfWeek() { return this._week.dow; } function localeFirstDayOfYear() { return this._week.doy; } function getSetWeek(input) { var week = this.localeData().week(this); return input == null ? week : this.add((input - week) * 7, "d"); } function getSetISOWeek(input) { var week = weekOfYear(this, 1, 4).week; return input == null ? week : this.add((input - week) * 7, "d"); } addFormatToken("d", 0, "do", "day"); addFormatToken("dd", 0, 0, function(format2) { return this.localeData().weekdaysMin(this, format2); }); addFormatToken("ddd", 0, 0, function(format2) { return this.localeData().weekdaysShort(this, format2); }); addFormatToken("dddd", 0, 0, function(format2) { return this.localeData().weekdays(this, format2); }); addFormatToken("e", 0, 0, "weekday"); addFormatToken("E", 0, 0, "isoWeekday"); addRegexToken("d", match1to2); addRegexToken("e", match1to2); addRegexToken("E", match1to2); addRegexToken("dd", function(isStrict, locale3) { return locale3.weekdaysMinRegex(isStrict); }); addRegexToken("ddd", function(isStrict, locale3) { return locale3.weekdaysShortRegex(isStrict); }); addRegexToken("dddd", function(isStrict, locale3) { return locale3.weekdaysRegex(isStrict); }); addWeekParseToken(["dd", "ddd", "dddd"], function(input, week, config, token2) { var weekday = config._locale.weekdaysParse(input, token2, config._strict); if (weekday != null) { week.d = weekday; } else { getParsingFlags(config).invalidWeekday = input; } }); addWeekParseToken(["d", "e", "E"], function(input, week, config, token2) { week[token2] = toInt(input); }); function parseWeekday(input, locale3) { if (typeof input !== "string") { return input; } if (!isNaN(input)) { return parseInt(input, 10); } input = locale3.weekdaysParse(input); if (typeof input === "number") { return input; } return null; } function parseIsoWeekday(input, locale3) { if (typeof input === "string") { return locale3.weekdaysParse(input) % 7 || 7; } return isNaN(input) ? null : input; } function shiftWeekdays(ws, n) { return ws.slice(n, 7).concat(ws.slice(0, n)); } var defaultLocaleWeekdays = "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), defaultLocaleWeekdaysShort = "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), defaultLocaleWeekdaysMin = "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), defaultWeekdaysRegex = matchWord, defaultWeekdaysShortRegex = matchWord, defaultWeekdaysMinRegex = matchWord; function localeWeekdays(m, format2) { var weekdays = isArray2(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format2) ? "format" : "standalone"]; return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays; } function localeWeekdaysShort(m) { return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort; } function localeWeekdaysMin(m) { return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin; } function handleStrictParse$1(weekdayName, format2, strict) { var i, ii, mom, llc = weekdayName.toLocaleLowerCase(); if (!this._weekdaysParse) { this._weekdaysParse = []; this._shortWeekdaysParse = []; this._minWeekdaysParse = []; for (i = 0; i < 7; ++i) { mom = createUTC([2e3, 1]).day(i); this._minWeekdaysParse[i] = this.weekdaysMin( mom, "" ).toLocaleLowerCase(); this._shortWeekdaysParse[i] = this.weekdaysShort( mom, "" ).toLocaleLowerCase(); this._weekdaysParse[i] = this.weekdays(mom, "").toLocaleLowerCase(); } } if (strict) { if (format2 === "dddd") { ii = indexOf.call(this._weekdaysParse, llc); return ii !== -1 ? ii : null; } else if (format2 === "ddd") { ii = indexOf.call(this._shortWeekdaysParse, llc); return ii !== -1 ? ii : null; } else { ii = indexOf.call(this._minWeekdaysParse, llc); return ii !== -1 ? ii : null; } } else { if (format2 === "dddd") { ii = indexOf.call(this._weekdaysParse, llc); if (ii !== -1) { return ii; } ii = indexOf.call(this._shortWeekdaysParse, llc); if (ii !== -1) { return ii; } ii = indexOf.call(this._minWeekdaysParse, llc); return ii !== -1 ? ii : null; } else if (format2 === "ddd") { ii = indexOf.call(this._shortWeekdaysParse, llc); if (ii !== -1) { return ii; } ii = indexOf.call(this._weekdaysParse, llc); if (ii !== -1) { return ii; } ii = indexOf.call(this._minWeekdaysParse, llc); return ii !== -1 ? ii : null; } else { ii = indexOf.call(this._minWeekdaysParse, llc); if (ii !== -1) { return ii; } ii = indexOf.call(this._weekdaysParse, llc); if (ii !== -1) { return ii; } ii = indexOf.call(this._shortWeekdaysParse, llc); return ii !== -1 ? ii : null; } } } function localeWeekdaysParse(weekdayName, format2, strict) { var i, mom, regex; if (this._weekdaysParseExact) { return handleStrictParse$1.call(this, weekdayName, format2, strict); } if (!this._weekdaysParse) { this._weekdaysParse = []; this._minWeekdaysParse = []; this._shortWeekdaysParse = []; this._fullWeekdaysParse = []; } for (i = 0; i < 7; i++) { mom = createUTC([2e3, 1]).day(i); if (strict && !this._fullWeekdaysParse[i]) { this._fullWeekdaysParse[i] = new RegExp( "^" + this.weekdays(mom, "").replace(".", "\\.?") + "$", "i" ); this._shortWeekdaysParse[i] = new RegExp( "^" + this.weekdaysShort(mom, "").replace(".", "\\.?") + "$", "i" ); this._minWeekdaysParse[i] = new RegExp( "^" + this.weekdaysMin(mom, "").replace(".", "\\.?") + "$", "i" ); } if (!this._weekdaysParse[i]) { regex = "^" + this.weekdays(mom, "") + "|^" + this.weekdaysShort(mom, "") + "|^" + this.weekdaysMin(mom, ""); this._weekdaysParse[i] = new RegExp(regex.replace(".", ""), "i"); } if (strict && format2 === "dddd" && this._fullWeekdaysParse[i].test(weekdayName)) { return i; } else if (strict && format2 === "ddd" && this._shortWeekdaysParse[i].test(weekdayName)) { return i; } else if (strict && format2 === "dd" && this._minWeekdaysParse[i].test(weekdayName)) { return i; } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { return i; } } } function getSetDayOfWeek(input) { if (!this.isValid()) { return input != null ? this : NaN; } var day = get(this, "Day"); if (input != null) { input = parseWeekday(input, this.localeData()); return this.add(input - day, "d"); } else { return day; } } function getSetLocaleDayOfWeek(input) { if (!this.isValid()) { return input != null ? this : NaN; } var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; return input == null ? weekday : this.add(input - weekday, "d"); } function getSetISODayOfWeek(input) { if (!this.isValid()) { return input != null ? this : NaN; } if (input != null) { var weekday = parseIsoWeekday(input, this.localeData()); return this.day(this.day() % 7 ? weekday : weekday - 7); } else { return this.day() || 7; } } function weekdaysRegex(isStrict) { if (this._weekdaysParseExact) { if (!hasOwnProp(this, "_weekdaysRegex")) { computeWeekdaysParse.call(this); } if (isStrict) { return this._weekdaysStrictRegex; } else { return this._weekdaysRegex; } } else { if (!hasOwnProp(this, "_weekdaysRegex")) { this._weekdaysRegex = defaultWeekdaysRegex; } return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex; } } function weekdaysShortRegex(isStrict) { if (this._weekdaysParseExact) { if (!hasOwnProp(this, "_weekdaysRegex")) { computeWeekdaysParse.call(this); } if (isStrict) { return this._weekdaysShortStrictRegex; } else { return this._weekdaysShortRegex; } } else { if (!hasOwnProp(this, "_weekdaysShortRegex")) { this._weekdaysShortRegex = defaultWeekdaysShortRegex; } return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex; } } function weekdaysMinRegex(isStrict) { if (this._weekdaysParseExact) { if (!hasOwnProp(this, "_weekdaysRegex")) { computeWeekdaysParse.call(this); } if (isStrict) { return this._weekdaysMinStrictRegex; } else { return this._weekdaysMinRegex; } } else { if (!hasOwnProp(this, "_weekdaysMinRegex")) { this._weekdaysMinRegex = defaultWeekdaysMinRegex; } return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex; } } function computeWeekdaysParse() { function cmpLenRev(a, b) { return b.length - a.length; } var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], i, mom, minp, shortp, longp; for (i = 0; i < 7; i++) { mom = createUTC([2e3, 1]).day(i); minp = regexEscape(this.weekdaysMin(mom, "")); shortp = regexEscape(this.weekdaysShort(mom, "")); longp = regexEscape(this.weekdays(mom, "")); minPieces.push(minp); shortPieces.push(shortp); longPieces.push(longp); mixedPieces.push(minp); mixedPieces.push(shortp); mixedPieces.push(longp); } minPieces.sort(cmpLenRev); shortPieces.sort(cmpLenRev); longPieces.sort(cmpLenRev); mixedPieces.sort(cmpLenRev); this._weekdaysRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i"); this._weekdaysShortRegex = this._weekdaysRegex; this._weekdaysMinRegex = this._weekdaysRegex; this._weekdaysStrictRegex = new RegExp( "^(" + longPieces.join("|") + ")", "i" ); this._weekdaysShortStrictRegex = new RegExp( "^(" + shortPieces.join("|") + ")", "i" ); this._weekdaysMinStrictRegex = new RegExp( "^(" + minPieces.join("|") + ")", "i" ); } function hFormat() { return this.hours() % 12 || 12; } function kFormat() { return this.hours() || 24; } addFormatToken("H", ["HH", 2], 0, "hour"); addFormatToken("h", ["hh", 2], 0, hFormat); addFormatToken("k", ["kk", 2], 0, kFormat); addFormatToken("hmm", 0, 0, function() { return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2); }); addFormatToken("hmmss", 0, 0, function() { return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2); }); addFormatToken("Hmm", 0, 0, function() { return "" + this.hours() + zeroFill(this.minutes(), 2); }); addFormatToken("Hmmss", 0, 0, function() { return "" + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2); }); function meridiem(token2, lowercase) { addFormatToken(token2, 0, 0, function() { return this.localeData().meridiem( this.hours(), this.minutes(), lowercase ); }); } meridiem("a", true); meridiem("A", false); function matchMeridiem(isStrict, locale3) { return locale3._meridiemParse; } addRegexToken("a", matchMeridiem); addRegexToken("A", matchMeridiem); addRegexToken("H", match1to2, match1to2HasZero); addRegexToken("h", match1to2, match1to2NoLeadingZero); addRegexToken("k", match1to2, match1to2NoLeadingZero); addRegexToken("HH", match1to2, match2); addRegexToken("hh", match1to2, match2); addRegexToken("kk", match1to2, match2); addRegexToken("hmm", match3to4); addRegexToken("hmmss", match5to6); addRegexToken("Hmm", match3to4); addRegexToken("Hmmss", match5to6); addParseToken(["H", "HH"], HOUR); addParseToken(["k", "kk"], function(input, array, config) { var kInput = toInt(input); array[HOUR] = kInput === 24 ? 0 : kInput; }); addParseToken(["a", "A"], function(input, array, config) { config._isPm = config._locale.isPM(input); config._meridiem = input; }); addParseToken(["h", "hh"], function(input, array, config) { array[HOUR] = toInt(input); getParsingFlags(config).bigHour = true; }); addParseToken("hmm", function(input, array, config) { var pos = input.length - 2; array[HOUR] = toInt(input.substr(0, pos)); array[MINUTE] = toInt(input.substr(pos)); getParsingFlags(config).bigHour = true; }); addParseToken("hmmss", function(input, array, config) { var pos1 = input.length - 4, pos2 = input.length - 2; array[HOUR] = toInt(input.substr(0, pos1)); array[MINUTE] = toInt(input.substr(pos1, 2)); array[SECOND] = toInt(input.substr(pos2)); getParsingFlags(config).bigHour = true; }); addParseToken("Hmm", function(input, array, config) { var pos = input.length - 2; array[HOUR] = toInt(input.substr(0, pos)); array[MINUTE] = toInt(input.substr(pos)); }); addParseToken("Hmmss", function(input, array, config) { var pos1 = input.length - 4, pos2 = input.length - 2; array[HOUR] = toInt(input.substr(0, pos1)); array[MINUTE] = toInt(input.substr(pos1, 2)); array[SECOND] = toInt(input.substr(pos2)); }); function localeIsPM(input) { return (input + "").toLowerCase().charAt(0) === "p"; } var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, getSetHour = makeGetSet("Hours", true); function localeMeridiem(hours2, minutes2, isLower) { if (hours2 > 11) { return isLower ? "pm" : "PM"; } else { return isLower ? "am" : "AM"; } } var baseConfig = { calendar: defaultCalendar, longDateFormat: defaultLongDateFormat, invalidDate: defaultInvalidDate, ordinal: defaultOrdinal, dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, relativeTime: defaultRelativeTime, months: defaultLocaleMonths, monthsShort: defaultLocaleMonthsShort, week: defaultLocaleWeek, weekdays: defaultLocaleWeekdays, weekdaysMin: defaultLocaleWeekdaysMin, weekdaysShort: defaultLocaleWeekdaysShort, meridiemParse: defaultLocaleMeridiemParse }; var locales = {}, localeFamilies = {}, globalLocale; function commonPrefix(arr1, arr2) { var i, minl = Math.min(arr1.length, arr2.length); for (i = 0; i < minl; i += 1) { if (arr1[i] !== arr2[i]) { return i; } } return minl; } function normalizeLocale(key) { return key ? key.toLowerCase().replace("_", "-") : key; } function chooseLocale(names2) { var i = 0, j, next, locale3, split; while (i < names2.length) { split = normalizeLocale(names2[i]).split("-"); j = split.length; next = normalizeLocale(names2[i + 1]); next = next ? next.split("-") : null; while (j > 0) { locale3 = loadLocale(split.slice(0, j).join("-")); if (locale3) { return locale3; } if (next && next.length >= j && commonPrefix(split, next) >= j - 1) { break; } j--; } i++; } return globalLocale; } function isLocaleNameSane(name) { return !!(name && name.match("^[^/\\\\]*$")); } function loadLocale(name) { var oldLocale = null, aliasedRequire; if (locales[name] === void 0 && typeof module2 !== "undefined" && module2 && module2.exports && isLocaleNameSane(name)) { try { oldLocale = globalLocale._abbr; aliasedRequire = require; aliasedRequire("./locale/" + name); getSetGlobalLocale(oldLocale); } catch (e) { locales[name] = null; } } return locales[name]; } function getSetGlobalLocale(key, values) { var data; if (key) { if (isUndefined(values)) { data = getLocale(key); } else { data = defineLocale(key, values); } if (data) { globalLocale = data; } else { if (typeof console !== "undefined" && console.warn) { console.warn( "Locale " + key + " not found. Did you forget to load it?" ); } } } return globalLocale._abbr; } function defineLocale(name, config) { if (config !== null) { var locale3, parentConfig = baseConfig; config.abbr = name; if (locales[name] != null) { deprecateSimple( "defineLocaleOverride", "use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info." ); parentConfig = locales[name]._config; } else if (config.parentLocale != null) { if (locales[config.parentLocale] != null) { parentConfig = locales[config.parentLocale]._config; } else { locale3 = loadLocale(config.parentLocale); if (locale3 != null) { parentConfig = locale3._config; } else { if (!localeFamilies[config.parentLocale]) { localeFamilies[config.parentLocale] = []; } localeFamilies[config.parentLocale].push({ name, config }); return null; } } } locales[name] = new Locale(mergeConfigs(parentConfig, config)); if (localeFamilies[name]) { localeFamilies[name].forEach(function(x) { defineLocale(x.name, x.config); }); } getSetGlobalLocale(name); return locales[name]; } else { delete locales[name]; return null; } } function updateLocale(name, config) { if (config != null) { var locale3, tmpLocale, parentConfig = baseConfig; if (locales[name] != null && locales[name].parentLocale != null) { locales[name].set(mergeConfigs(locales[name]._config, config)); } else { tmpLocale = loadLocale(name); if (tmpLocale != null) { parentConfig = tmpLocale._config; } config = mergeConfigs(parentConfig, config); if (tmpLocale == null) { config.abbr = name; } locale3 = new Locale(config); locale3.parentLocale = locales[name]; locales[name] = locale3; } getSetGlobalLocale(name); } else { if (locales[name] != null) { if (locales[name].parentLocale != null) { locales[name] = locales[name].parentLocale; if (name === getSetGlobalLocale()) { getSetGlobalLocale(name); } } else if (locales[name] != null) { delete locales[name]; } } } return locales[name]; } function getLocale(key) { var locale3; if (key && key._locale && key._locale._abbr) { key = key._locale._abbr; } if (!key) { return globalLocale; } if (!isArray2(key)) { locale3 = loadLocale(key); if (locale3) { return locale3; } key = [key]; } return chooseLocale(key); } function listLocales() { return keys(locales); } function checkOverflow(m) { var overflow, a = m._a; if (a && getParsingFlags(m).overflow === -2) { overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1; if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { overflow = DATE; } if (getParsingFlags(m)._overflowWeeks && overflow === -1) { overflow = WEEK; } if (getParsingFlags(m)._overflowWeekday && overflow === -1) { overflow = WEEKDAY; } getParsingFlags(m).overflow = overflow; } return m; } var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, isoDates = [ ["YYYYYY-MM-DD", /[+-]\d{6}-\d\d-\d\d/], ["YYYY-MM-DD", /\d{4}-\d\d-\d\d/], ["GGGG-[W]WW-E", /\d{4}-W\d\d-\d/], ["GGGG-[W]WW", /\d{4}-W\d\d/, false], ["YYYY-DDD", /\d{4}-\d{3}/], ["YYYY-MM", /\d{4}-\d\d/, false], ["YYYYYYMMDD", /[+-]\d{10}/], ["YYYYMMDD", /\d{8}/], ["GGGG[W]WWE", /\d{4}W\d{3}/], ["GGGG[W]WW", /\d{4}W\d{2}/, false], ["YYYYDDD", /\d{7}/], ["YYYYMM", /\d{6}/, false], ["YYYY", /\d{4}/, false] ], isoTimes = [ ["HH:mm:ss.SSSS", /\d\d:\d\d:\d\d\.\d+/], ["HH:mm:ss,SSSS", /\d\d:\d\d:\d\d,\d+/], ["HH:mm:ss", /\d\d:\d\d:\d\d/], ["HH:mm", /\d\d:\d\d/], ["HHmmss.SSSS", /\d\d\d\d\d\d\.\d+/], ["HHmmss,SSSS", /\d\d\d\d\d\d,\d+/], ["HHmmss", /\d\d\d\d\d\d/], ["HHmm", /\d\d\d\d/], ["HH", /\d\d/] ], aspNetJsonRegex = /^\/?Date\((-?\d+)/i, rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, obsOffsets = { UT: 0, GMT: 0, EDT: -4 * 60, EST: -5 * 60, CDT: -5 * 60, CST: -6 * 60, MDT: -6 * 60, MST: -7 * 60, PDT: -7 * 60, PST: -8 * 60 }; function configFromISO(config) { var i, l, string = config._i, match5 = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), allowTime, dateFormat, timeFormat, tzFormat, isoDatesLen = isoDates.length, isoTimesLen = isoTimes.length; if (match5) { getParsingFlags(config).iso = true; for (i = 0, l = isoDatesLen; i < l; i++) { if (isoDates[i][1].exec(match5[1])) { dateFormat = isoDates[i][0]; allowTime = isoDates[i][2] !== false; break; } } if (dateFormat == null) { config._isValid = false; return; } if (match5[3]) { for (i = 0, l = isoTimesLen; i < l; i++) { if (isoTimes[i][1].exec(match5[3])) { timeFormat = (match5[2] || " ") + isoTimes[i][0]; break; } } if (timeFormat == null) { config._isValid = false; return; } } if (!allowTime && timeFormat != null) { config._isValid = false; return; } if (match5[4]) { if (tzRegex.exec(match5[4])) { tzFormat = "Z"; } else { config._isValid = false; return; } } config._f = dateFormat + (timeFormat || "") + (tzFormat || ""); configFromStringAndFormat(config); } else { config._isValid = false; } } function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { var result = [ untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10) ]; if (secondStr) { result.push(parseInt(secondStr, 10)); } return result; } function untruncateYear(yearStr) { var year = parseInt(yearStr, 10); if (year <= 49) { return 2e3 + year; } else if (year <= 999) { return 1900 + year; } return year; } function preprocessRFC2822(s) { return s.replace(/\([^()]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").replace(/^\s\s*/, "").replace(/\s\s*$/, ""); } function checkWeekday(weekdayStr, parsedInput, config) { if (weekdayStr) { var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), weekdayActual = new Date( parsedInput[0], parsedInput[1], parsedInput[2] ).getDay(); if (weekdayProvided !== weekdayActual) { getParsingFlags(config).weekdayMismatch = true; config._isValid = false; return false; } } return true; } function calculateOffset(obsOffset, militaryOffset, numOffset) { if (obsOffset) { return obsOffsets[obsOffset]; } else if (militaryOffset) { return 0; } else { var hm = parseInt(numOffset, 10), m = hm % 100, h4 = (hm - m) / 100; return h4 * 60 + m; } } function configFromRFC2822(config) { var match5 = rfc2822.exec(preprocessRFC2822(config._i)), parsedArray; if (match5) { parsedArray = extractFromRFC2822Strings( match5[4], match5[3], match5[2], match5[5], match5[6], match5[7] ); if (!checkWeekday(match5[1], parsedArray, config)) { return; } config._a = parsedArray; config._tzm = calculateOffset(match5[8], match5[9], match5[10]); config._d = createUTCDate.apply(null, config._a); config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); getParsingFlags(config).rfc2822 = true; } else { config._isValid = false; } } function configFromString(config) { var matched = aspNetJsonRegex.exec(config._i); if (matched !== null) { config._d = /* @__PURE__ */ new Date(+matched[1]); return; } configFromISO(config); if (config._isValid === false) { delete config._isValid; } else { return; } configFromRFC2822(config); if (config._isValid === false) { delete config._isValid; } else { return; } if (config._strict) { config._isValid = false; } else { hooks.createFromInputFallback(config); } } hooks.createFromInputFallback = deprecate( "value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.", function(config) { config._d = /* @__PURE__ */ new Date(config._i + (config._useUTC ? " UTC" : "")); } ); function defaults3(a, b, c) { if (a != null) { return a; } if (b != null) { return b; } return c; } function currentDateArray(config) { var nowValue = new Date(hooks.now()); if (config._useUTC) { return [ nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate() ]; } return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; } function configFromArray(config) { var i, date, input = [], currentDate, expectedWeekday, yearToUse; if (config._d) { return; } currentDate = currentDateArray(config); if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { dayOfYearFromWeekInfo(config); } if (config._dayOfYear != null) { yearToUse = defaults3(config._a[YEAR], currentDate[YEAR]); if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) { getParsingFlags(config)._overflowDayOfYear = true; } date = createUTCDate(yearToUse, 0, config._dayOfYear); config._a[MONTH] = date.getUTCMonth(); config._a[DATE] = date.getUTCDate(); } for (i = 0; i < 3 && config._a[i] == null; ++i) { config._a[i] = input[i] = currentDate[i]; } for (; i < 7; i++) { config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i]; } if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) { config._nextDay = true; config._a[HOUR] = 0; } config._d = (config._useUTC ? createUTCDate : createDate).apply( null, input ); expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay(); if (config._tzm != null) { config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); } if (config._nextDay) { config._a[HOUR] = 24; } if (config._w && typeof config._w.d !== "undefined" && config._w.d !== expectedWeekday) { getParsingFlags(config).weekdayMismatch = true; } } function dayOfYearFromWeekInfo(config) { var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek; w = config._w; if (w.GG != null || w.W != null || w.E != null) { dow = 1; doy = 4; weekYear = defaults3( w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year ); week = defaults3(w.W, 1); weekday = defaults3(w.E, 1); if (weekday < 1 || weekday > 7) { weekdayOverflow = true; } } else { dow = config._locale._week.dow; doy = config._locale._week.doy; curWeek = weekOfYear(createLocal(), dow, doy); weekYear = defaults3(w.gg, config._a[YEAR], curWeek.year); week = defaults3(w.w, curWeek.week); if (w.d != null) { weekday = w.d; if (weekday < 0 || weekday > 6) { weekdayOverflow = true; } } else if (w.e != null) { weekday = w.e + dow; if (w.e < 0 || w.e > 6) { weekdayOverflow = true; } } else { weekday = dow; } } if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { getParsingFlags(config)._overflowWeeks = true; } else if (weekdayOverflow != null) { getParsingFlags(config)._overflowWeekday = true; } else { temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); config._a[YEAR] = temp.year; config._dayOfYear = temp.dayOfYear; } } hooks.ISO_8601 = function() { }; hooks.RFC_2822 = function() { }; function configFromStringAndFormat(config) { if (config._f === hooks.ISO_8601) { configFromISO(config); return; } if (config._f === hooks.RFC_2822) { configFromRFC2822(config); return; } config._a = []; getParsingFlags(config).empty = true; var string = "" + config._i, i, parsedInput, tokens2, token2, skipped, stringLength = string.length, totalParsedInputLength = 0, era, tokenLen; tokens2 = expandFormat(config._f, config._locale).match(formattingTokens) || []; tokenLen = tokens2.length; for (i = 0; i < tokenLen; i++) { token2 = tokens2[i]; parsedInput = (string.match(getParseRegexForToken(token2, config)) || [])[0]; if (parsedInput) { skipped = string.substr(0, string.indexOf(parsedInput)); if (skipped.length > 0) { getParsingFlags(config).unusedInput.push(skipped); } string = string.slice( string.indexOf(parsedInput) + parsedInput.length ); totalParsedInputLength += parsedInput.length; } if (formatTokenFunctions[token2]) { if (parsedInput) { getParsingFlags(config).empty = false; } else { getParsingFlags(config).unusedTokens.push(token2); } addTimeToArrayFromToken(token2, parsedInput, config); } else if (config._strict && !parsedInput) { getParsingFlags(config).unusedTokens.push(token2); } } getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; if (string.length > 0) { getParsingFlags(config).unusedInput.push(string); } if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) { getParsingFlags(config).bigHour = void 0; } getParsingFlags(config).parsedDateParts = config._a.slice(0); getParsingFlags(config).meridiem = config._meridiem; config._a[HOUR] = meridiemFixWrap( config._locale, config._a[HOUR], config._meridiem ); era = getParsingFlags(config).era; if (era !== null) { config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]); } configFromArray(config); checkOverflow(config); } function meridiemFixWrap(locale3, hour, meridiem2) { var isPm; if (meridiem2 == null) { return hour; } if (locale3.meridiemHour != null) { return locale3.meridiemHour(hour, meridiem2); } else if (locale3.isPM != null) { isPm = locale3.isPM(meridiem2); if (isPm && hour < 12) { hour += 12; } if (!isPm && hour === 12) { hour = 0; } return hour; } else { return hour; } } function configFromStringAndArray(config) { var tempConfig, bestMoment, scoreToBeat, i, currentScore, validFormatFound, bestFormatIsValid = false, configfLen = config._f.length; if (configfLen === 0) { getParsingFlags(config).invalidFormat = true; config._d = /* @__PURE__ */ new Date(NaN); return; } for (i = 0; i < configfLen; i++) { currentScore = 0; validFormatFound = false; tempConfig = copyConfig({}, config); if (config._useUTC != null) { tempConfig._useUTC = config._useUTC; } tempConfig._f = config._f[i]; configFromStringAndFormat(tempConfig); if (isValid(tempConfig)) { validFormatFound = true; } currentScore += getParsingFlags(tempConfig).charsLeftOver; currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; getParsingFlags(tempConfig).score = currentScore; if (!bestFormatIsValid) { if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) { scoreToBeat = currentScore; bestMoment = tempConfig; if (validFormatFound) { bestFormatIsValid = true; } } } else { if (currentScore < scoreToBeat) { scoreToBeat = currentScore; bestMoment = tempConfig; } } } extend(config, bestMoment || tempConfig); } function configFromObject(config) { if (config._d) { return; } var i = normalizeObjectUnits(config._i), dayOrDate = i.day === void 0 ? i.date : i.day; config._a = map3( [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], function(obj) { return obj && parseInt(obj, 10); } ); configFromArray(config); } function createFromConfig(config) { var res = new Moment3(checkOverflow(prepareConfig(config))); if (res._nextDay) { res.add(1, "d"); res._nextDay = void 0; } return res; } function prepareConfig(config) { var input = config._i, format2 = config._f; config._locale = config._locale || getLocale(config._l); if (input === null || format2 === void 0 && input === "") { return createInvalid({ nullInput: true }); } if (typeof input === "string") { config._i = input = config._locale.preparse(input); } if (isMoment(input)) { return new Moment3(checkOverflow(input)); } else if (isDate(input)) { config._d = input; } else if (isArray2(format2)) { configFromStringAndArray(config); } else if (format2) { configFromStringAndFormat(config); } else { configFromInput(config); } if (!isValid(config)) { config._d = null; } return config; } function configFromInput(config) { var input = config._i; if (isUndefined(input)) { config._d = new Date(hooks.now()); } else if (isDate(input)) { config._d = new Date(input.valueOf()); } else if (typeof input === "string") { configFromString(config); } else if (isArray2(input)) { config._a = map3(input.slice(0), function(obj) { return parseInt(obj, 10); }); configFromArray(config); } else if (isObject2(input)) { configFromObject(config); } else if (isNumber2(input)) { config._d = new Date(input); } else { hooks.createFromInputFallback(config); } } function createLocalOrUTC(input, format2, locale3, strict, isUTC) { var c = {}; if (format2 === true || format2 === false) { strict = format2; format2 = void 0; } if (locale3 === true || locale3 === false) { strict = locale3; locale3 = void 0; } if (isObject2(input) && isObjectEmpty(input) || isArray2(input) && input.length === 0) { input = void 0; } c._isAMomentObject = true; c._useUTC = c._isUTC = isUTC; c._l = locale3; c._i = input; c._f = format2; c._strict = strict; return createFromConfig(c); } function createLocal(input, format2, locale3, strict) { return createLocalOrUTC(input, format2, locale3, strict, false); } var prototypeMin = deprecate( "moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/", function() { var other = createLocal.apply(null, arguments); if (this.isValid() && other.isValid()) { return other < this ? this : other; } else { return createInvalid(); } } ), prototypeMax = deprecate( "moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/", function() { var other = createLocal.apply(null, arguments); if (this.isValid() && other.isValid()) { return other > this ? this : other; } else { return createInvalid(); } } ); function pickBy(fn, moments) { var res, i; if (moments.length === 1 && isArray2(moments[0])) { moments = moments[0]; } if (!moments.length) { return createLocal(); } res = moments[0]; for (i = 1; i < moments.length; ++i) { if (!moments[i].isValid() || moments[i][fn](res)) { res = moments[i]; } } return res; } function min() { var args = [].slice.call(arguments, 0); return pickBy("isBefore", args); } function max() { var args = [].slice.call(arguments, 0); return pickBy("isAfter", args); } var now2 = function() { return Date.now ? Date.now() : +/* @__PURE__ */ new Date(); }; var ordering = [ "year", "quarter", "month", "week", "day", "hour", "minute", "second", "millisecond" ]; function isDurationValid(m) { var key, unitHasDecimal = false, i, orderLen = ordering.length; for (key in m) { if (hasOwnProp(m, key) && !(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) { return false; } } for (i = 0; i < orderLen; ++i) { if (m[ordering[i]]) { if (unitHasDecimal) { return false; } if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { unitHasDecimal = true; } } } return true; } function isValid$1() { return this._isValid; } function createInvalid$1() { return createDuration(NaN); } function Duration(duration) { var normalizedInput = normalizeObjectUnits(duration), years2 = normalizedInput.year || 0, quarters = normalizedInput.quarter || 0, months2 = normalizedInput.month || 0, weeks2 = normalizedInput.week || normalizedInput.isoWeek || 0, days2 = normalizedInput.day || 0, hours2 = normalizedInput.hour || 0, minutes2 = normalizedInput.minute || 0, seconds2 = normalizedInput.second || 0, milliseconds2 = normalizedInput.millisecond || 0; this._isValid = isDurationValid(normalizedInput); this._milliseconds = +milliseconds2 + seconds2 * 1e3 + // 1000 minutes2 * 6e4 + // 1000 * 60 hours2 * 1e3 * 60 * 60; this._days = +days2 + weeks2 * 7; this._months = +months2 + quarters * 3 + years2 * 12; this._data = {}; this._locale = getLocale(); this._bubble(); } function isDuration(obj) { return obj instanceof Duration; } function absRound(number) { if (number < 0) { return Math.round(-1 * number) * -1; } else { return Math.round(number); } } function compareArrays(array1, array2, dontConvert) { var len = Math.min(array1.length, array2.length), lengthDiff = Math.abs(array1.length - array2.length), diffs = 0, i; for (i = 0; i < len; i++) { if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) { diffs++; } } return diffs + lengthDiff; } function offset(token2, separator) { addFormatToken(token2, 0, 0, function() { var offset2 = this.utcOffset(), sign3 = "+"; if (offset2 < 0) { offset2 = -offset2; sign3 = "-"; } return sign3 + zeroFill(~~(offset2 / 60), 2) + separator + zeroFill(~~offset2 % 60, 2); }); } offset("Z", ":"); offset("ZZ", ""); addRegexToken("Z", matchShortOffset); addRegexToken("ZZ", matchShortOffset); addParseToken(["Z", "ZZ"], function(input, array, config) { config._useUTC = true; config._tzm = offsetFromString(matchShortOffset, input); }); var chunkOffset = /([\+\-]|\d\d)/gi; function offsetFromString(matcher, string) { var matches = (string || "").match(matcher), chunk, parts, minutes2; if (matches === null) { return null; } chunk = matches[matches.length - 1] || []; parts = (chunk + "").match(chunkOffset) || ["-", 0, 0]; minutes2 = +(parts[1] * 60) + toInt(parts[2]); return minutes2 === 0 ? 0 : parts[0] === "+" ? minutes2 : -minutes2; } function cloneWithOffset(input, model) { var res, diff2; if (model._isUTC) { res = model.clone(); diff2 = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); res._d.setTime(res._d.valueOf() + diff2); hooks.updateOffset(res, false); return res; } else { return createLocal(input).local(); } } function getDateOffset(m) { return -Math.round(m._d.getTimezoneOffset()); } hooks.updateOffset = function() { }; function getSetOffset(input, keepLocalTime, keepMinutes) { var offset2 = this._offset || 0, localAdjust; if (!this.isValid()) { return input != null ? this : NaN; } if (input != null) { if (typeof input === "string") { input = offsetFromString(matchShortOffset, input); if (input === null) { return this; } } else if (Math.abs(input) < 16 && !keepMinutes) { input = input * 60; } if (!this._isUTC && keepLocalTime) { localAdjust = getDateOffset(this); } this._offset = input; this._isUTC = true; if (localAdjust != null) { this.add(localAdjust, "m"); } if (offset2 !== input) { if (!keepLocalTime || this._changeInProgress) { addSubtract( this, createDuration(input - offset2, "m"), 1, false ); } else if (!this._changeInProgress) { this._changeInProgress = true; hooks.updateOffset(this, true); this._changeInProgress = null; } } return this; } else { return this._isUTC ? offset2 : getDateOffset(this); } } function getSetZone(input, keepLocalTime) { if (input != null) { if (typeof input !== "string") { input = -input; } this.utcOffset(input, keepLocalTime); return this; } else { return -this.utcOffset(); } } function setOffsetToUTC(keepLocalTime) { return this.utcOffset(0, keepLocalTime); } function setOffsetToLocal(keepLocalTime) { if (this._isUTC) { this.utcOffset(0, keepLocalTime); this._isUTC = false; if (keepLocalTime) { this.subtract(getDateOffset(this), "m"); } } return this; } function setOffsetToParsedOffset() { if (this._tzm != null) { this.utcOffset(this._tzm, false, true); } else if (typeof this._i === "string") { var tZone = offsetFromString(matchOffset, this._i); if (tZone != null) { this.utcOffset(tZone); } else { this.utcOffset(0, true); } } return this; } function hasAlignedHourOffset(input) { if (!this.isValid()) { return false; } input = input ? createLocal(input).utcOffset() : 0; return (this.utcOffset() - input) % 60 === 0; } function isDaylightSavingTime() { return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset(); } function isDaylightSavingTimeShifted() { if (!isUndefined(this._isDSTShifted)) { return this._isDSTShifted; } var c = {}, other; copyConfig(c, this); c = prepareConfig(c); if (c._a) { other = c._isUTC ? createUTC(c._a) : createLocal(c._a); this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0; } else { this._isDSTShifted = false; } return this._isDSTShifted; } function isLocal() { return this.isValid() ? !this._isUTC : false; } function isUtcOffset() { return this.isValid() ? this._isUTC : false; } function isUtc() { return this.isValid() ? this._isUTC && this._offset === 0 : false; } var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; function createDuration(input, key) { var duration = input, match5 = null, sign3, ret, diffRes; if (isDuration(input)) { duration = { ms: input._milliseconds, d: input._days, M: input._months }; } else if (isNumber2(input) || !isNaN(+input)) { duration = {}; if (key) { duration[key] = +input; } else { duration.milliseconds = +input; } } else if (match5 = aspNetRegex.exec(input)) { sign3 = match5[1] === "-" ? -1 : 1; duration = { y: 0, d: toInt(match5[DATE]) * sign3, h: toInt(match5[HOUR]) * sign3, m: toInt(match5[MINUTE]) * sign3, s: toInt(match5[SECOND]) * sign3, ms: toInt(absRound(match5[MILLISECOND] * 1e3)) * sign3 // the millisecond decimal point is included in the match }; } else if (match5 = isoRegex.exec(input)) { sign3 = match5[1] === "-" ? -1 : 1; duration = { y: parseIso(match5[2], sign3), M: parseIso(match5[3], sign3), w: parseIso(match5[4], sign3), d: parseIso(match5[5], sign3), h: parseIso(match5[6], sign3), m: parseIso(match5[7], sign3), s: parseIso(match5[8], sign3) }; } else if (duration == null) { duration = {}; } else if (typeof duration === "object" && ("from" in duration || "to" in duration)) { diffRes = momentsDifference( createLocal(duration.from), createLocal(duration.to) ); duration = {}; duration.ms = diffRes.milliseconds; duration.M = diffRes.months; } ret = new Duration(duration); if (isDuration(input) && hasOwnProp(input, "_locale")) { ret._locale = input._locale; } if (isDuration(input) && hasOwnProp(input, "_isValid")) { ret._isValid = input._isValid; } return ret; } createDuration.fn = Duration.prototype; createDuration.invalid = createInvalid$1; function parseIso(inp, sign3) { var res = inp && parseFloat(inp.replace(",", ".")); return (isNaN(res) ? 0 : res) * sign3; } function positiveMomentsDifference(base, other) { var res = {}; res.months = other.month() - base.month() + (other.year() - base.year()) * 12; if (base.clone().add(res.months, "M").isAfter(other)) { --res.months; } res.milliseconds = +other - +base.clone().add(res.months, "M"); return res; } function momentsDifference(base, other) { var res; if (!(base.isValid() && other.isValid())) { return { milliseconds: 0, months: 0 }; } other = cloneWithOffset(other, base); if (base.isBefore(other)) { res = positiveMomentsDifference(base, other); } else { res = positiveMomentsDifference(other, base); res.milliseconds = -res.milliseconds; res.months = -res.months; } return res; } function createAdder(direction, name) { return function(val, period) { var dur, tmp; if (period !== null && !isNaN(+period)) { deprecateSimple( name, "moment()." + name + "(period, number) is deprecated. Please use moment()." + name + "(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info." ); tmp = val; val = period; period = tmp; } dur = createDuration(val, period); addSubtract(this, dur, direction); return this; }; } function addSubtract(mom, duration, isAdding, updateOffset) { var milliseconds2 = duration._milliseconds, days2 = absRound(duration._days), months2 = absRound(duration._months); if (!mom.isValid()) { return; } updateOffset = updateOffset == null ? true : updateOffset; if (months2) { setMonth(mom, get(mom, "Month") + months2 * isAdding); } if (days2) { set$1(mom, "Date", get(mom, "Date") + days2 * isAdding); } if (milliseconds2) { mom._d.setTime(mom._d.valueOf() + milliseconds2 * isAdding); } if (updateOffset) { hooks.updateOffset(mom, days2 || months2); } } var add = createAdder(1, "add"), subtract = createAdder(-1, "subtract"); function isString(input) { return typeof input === "string" || input instanceof String; } function isMomentInput(input) { return isMoment(input) || isDate(input) || isString(input) || isNumber2(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === void 0; } function isMomentInputObject(input) { var objectTest = isObject2(input) && !isObjectEmpty(input), propertyTest = false, properties = [ "years", "year", "y", "months", "month", "M", "days", "day", "d", "dates", "date", "D", "hours", "hour", "h", "minutes", "minute", "m", "seconds", "second", "s", "milliseconds", "millisecond", "ms" ], i, property, propertyLen = properties.length; for (i = 0; i < propertyLen; i += 1) { property = properties[i]; propertyTest = propertyTest || hasOwnProp(input, property); } return objectTest && propertyTest; } function isNumberOrStringArray(input) { var arrayTest = isArray2(input), dataTypeTest = false; if (arrayTest) { dataTypeTest = input.filter(function(item) { return !isNumber2(item) && isString(input); }).length === 0; } return arrayTest && dataTypeTest; } function isCalendarSpec(input) { var objectTest = isObject2(input) && !isObjectEmpty(input), propertyTest = false, properties = [ "sameDay", "nextDay", "lastDay", "nextWeek", "lastWeek", "sameElse" ], i, property; for (i = 0; i < properties.length; i += 1) { property = properties[i]; propertyTest = propertyTest || hasOwnProp(input, property); } return objectTest && propertyTest; } function getCalendarFormat(myMoment, now3) { var diff2 = myMoment.diff(now3, "days", true); return diff2 < -6 ? "sameElse" : diff2 < -1 ? "lastWeek" : diff2 < 0 ? "lastDay" : diff2 < 1 ? "sameDay" : diff2 < 2 ? "nextDay" : diff2 < 7 ? "nextWeek" : "sameElse"; } function calendar$1(time, formats) { if (arguments.length === 1) { if (!arguments[0]) { time = void 0; formats = void 0; } else if (isMomentInput(arguments[0])) { time = arguments[0]; formats = void 0; } else if (isCalendarSpec(arguments[0])) { formats = arguments[0]; time = void 0; } } var now3 = time || createLocal(), sod = cloneWithOffset(now3, this).startOf("day"), format2 = hooks.calendarFormat(this, sod) || "sameElse", output = formats && (isFunction2(formats[format2]) ? formats[format2].call(this, now3) : formats[format2]); return this.format( output || this.localeData().calendar(format2, this, createLocal(now3)) ); } function clone3() { return new Moment3(this); } function isAfter(input, units) { var localInput = isMoment(input) ? input : createLocal(input); if (!(this.isValid() && localInput.isValid())) { return false; } units = normalizeUnits(units) || "millisecond"; if (units === "millisecond") { return this.valueOf() > localInput.valueOf(); } else { return localInput.valueOf() < this.clone().startOf(units).valueOf(); } } function isBefore(input, units) { var localInput = isMoment(input) ? input : createLocal(input); if (!(this.isValid() && localInput.isValid())) { return false; } units = normalizeUnits(units) || "millisecond"; if (units === "millisecond") { return this.valueOf() < localInput.valueOf(); } else { return this.clone().endOf(units).valueOf() < localInput.valueOf(); } } function isBetween(from3, to3, units, inclusivity) { var localFrom = isMoment(from3) ? from3 : createLocal(from3), localTo = isMoment(to3) ? to3 : createLocal(to3); if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) { return false; } inclusivity = inclusivity || "()"; return (inclusivity[0] === "(" ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ")" ? this.isBefore(localTo, units) : !this.isAfter(localTo, units)); } function isSame(input, units) { var localInput = isMoment(input) ? input : createLocal(input), inputMs; if (!(this.isValid() && localInput.isValid())) { return false; } units = normalizeUnits(units) || "millisecond"; if (units === "millisecond") { return this.valueOf() === localInput.valueOf(); } else { inputMs = localInput.valueOf(); return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf(); } } function isSameOrAfter(input, units) { return this.isSame(input, units) || this.isAfter(input, units); } function isSameOrBefore(input, units) { return this.isSame(input, units) || this.isBefore(input, units); } function diff(input, units, asFloat) { var that, zoneDelta, output; if (!this.isValid()) { return NaN; } that = cloneWithOffset(input, this); if (!that.isValid()) { return NaN; } zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; units = normalizeUnits(units); switch (units) { case "year": output = monthDiff(this, that) / 12; break; case "month": output = monthDiff(this, that); break; case "quarter": output = monthDiff(this, that) / 3; break; case "second": output = (this - that) / 1e3; break; // 1000 case "minute": output = (this - that) / 6e4; break; // 1000 * 60 case "hour": output = (this - that) / 36e5; break; // 1000 * 60 * 60 case "day": output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst case "week": output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst default: output = this - that; } return asFloat ? output : absFloor(output); } function monthDiff(a, b) { if (a.date() < b.date()) { return -monthDiff(b, a); } var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), anchor = a.clone().add(wholeMonthDiff, "months"), anchor2, adjust; if (b - anchor < 0) { anchor2 = a.clone().add(wholeMonthDiff - 1, "months"); adjust = (b - anchor) / (anchor - anchor2); } else { anchor2 = a.clone().add(wholeMonthDiff + 1, "months"); adjust = (b - anchor) / (anchor2 - anchor); } return -(wholeMonthDiff + adjust) || 0; } hooks.defaultFormat = "YYYY-MM-DDTHH:mm:ssZ"; hooks.defaultFormatUtc = "YYYY-MM-DDTHH:mm:ss[Z]"; function toString() { return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ"); } function toISOString(keepOffset) { if (!this.isValid()) { return null; } var utc = keepOffset !== true, m = utc ? this.clone().utc() : this; if (m.year() < 0 || m.year() > 9999) { return formatMoment( m, utc ? "YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYYYY-MM-DD[T]HH:mm:ss.SSSZ" ); } if (isFunction2(Date.prototype.toISOString)) { if (utc) { return this.toDate().toISOString(); } else { return new Date(this.valueOf() + this.utcOffset() * 60 * 1e3).toISOString().replace("Z", formatMoment(m, "Z")); } } return formatMoment( m, utc ? "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYY-MM-DD[T]HH:mm:ss.SSSZ" ); } function inspect() { if (!this.isValid()) { return "moment.invalid(/* " + this._i + " */)"; } var func = "moment", zone = "", prefix, year, datetime, suffix; if (!this.isLocal()) { func = this.utcOffset() === 0 ? "moment.utc" : "moment.parseZone"; zone = "Z"; } prefix = "[" + func + '("]'; year = 0 <= this.year() && this.year() <= 9999 ? "YYYY" : "YYYYYY"; datetime = "-MM-DD[T]HH:mm:ss.SSS"; suffix = zone + '[")]'; return this.format(prefix + year + datetime + suffix); } function format(inputString) { if (!inputString) { inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat; } var output = formatMoment(this, inputString); return this.localeData().postformat(output); } function from2(time, withoutSuffix) { if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) { return createDuration({ to: this, from: time }).locale(this.locale()).humanize(!withoutSuffix); } else { return this.localeData().invalidDate(); } } function fromNow(withoutSuffix) { return this.from(createLocal(), withoutSuffix); } function to2(time, withoutSuffix) { if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) { return createDuration({ from: this, to: time }).locale(this.locale()).humanize(!withoutSuffix); } else { return this.localeData().invalidDate(); } } function toNow(withoutSuffix) { return this.to(createLocal(), withoutSuffix); } function locale2(key) { var newLocaleData; if (key === void 0) { return this._locale._abbr; } else { newLocaleData = getLocale(key); if (newLocaleData != null) { this._locale = newLocaleData; } return this; } } var lang = deprecate( "moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.", function(key) { if (key === void 0) { return this.localeData(); } else { return this.locale(key); } } ); function localeData() { return this._locale; } var MS_PER_SECOND = 1e3, MS_PER_MINUTE = 60 * MS_PER_SECOND, MS_PER_HOUR = 60 * MS_PER_MINUTE, MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; function mod$1(dividend, divisor) { return (dividend % divisor + divisor) % divisor; } function localStartOfDate(y, m, d) { if (y < 100 && y >= 0) { return new Date(y + 400, m, d) - MS_PER_400_YEARS; } else { return new Date(y, m, d).valueOf(); } } function utcStartOfDate(y, m, d) { if (y < 100 && y >= 0) { return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS; } else { return Date.UTC(y, m, d); } } function startOf(units) { var time, startOfDate; units = normalizeUnits(units); if (units === void 0 || units === "millisecond" || !this.isValid()) { return this; } startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; switch (units) { case "year": time = startOfDate(this.year(), 0, 1); break; case "quarter": time = startOfDate( this.year(), this.month() - this.month() % 3, 1 ); break; case "month": time = startOfDate(this.year(), this.month(), 1); break; case "week": time = startOfDate( this.year(), this.month(), this.date() - this.weekday() ); break; case "isoWeek": time = startOfDate( this.year(), this.month(), this.date() - (this.isoWeekday() - 1) ); break; case "day": case "date": time = startOfDate(this.year(), this.month(), this.date()); break; case "hour": time = this._d.valueOf(); time -= mod$1( time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR ); break; case "minute": time = this._d.valueOf(); time -= mod$1(time, MS_PER_MINUTE); break; case "second": time = this._d.valueOf(); time -= mod$1(time, MS_PER_SECOND); break; } this._d.setTime(time); hooks.updateOffset(this, true); return this; } function endOf(units) { var time, startOfDate; units = normalizeUnits(units); if (units === void 0 || units === "millisecond" || !this.isValid()) { return this; } startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; switch (units) { case "year": time = startOfDate(this.year() + 1, 0, 1) - 1; break; case "quarter": time = startOfDate( this.year(), this.month() - this.month() % 3 + 3, 1 ) - 1; break; case "month": time = startOfDate(this.year(), this.month() + 1, 1) - 1; break; case "week": time = startOfDate( this.year(), this.month(), this.date() - this.weekday() + 7 ) - 1; break; case "isoWeek": time = startOfDate( this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7 ) - 1; break; case "day": case "date": time = startOfDate(this.year(), this.month(), this.date() + 1) - 1; break; case "hour": time = this._d.valueOf(); time += MS_PER_HOUR - mod$1( time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR ) - 1; break; case "minute": time = this._d.valueOf(); time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1; break; case "second": time = this._d.valueOf(); time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1; break; } this._d.setTime(time); hooks.updateOffset(this, true); return this; } function valueOf() { return this._d.valueOf() - (this._offset || 0) * 6e4; } function unix() { return Math.floor(this.valueOf() / 1e3); } function toDate() { return new Date(this.valueOf()); } function toArray() { var m = this; return [ m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond() ]; } function toObject() { var m = this; return { years: m.year(), months: m.month(), date: m.date(), hours: m.hours(), minutes: m.minutes(), seconds: m.seconds(), milliseconds: m.milliseconds() }; } function toJSON() { return this.isValid() ? this.toISOString() : null; } function isValid$2() { return isValid(this); } function parsingFlags() { return extend({}, getParsingFlags(this)); } function invalidAt() { return getParsingFlags(this).overflow; } function creationData() { return { input: this._i, format: this._f, locale: this._locale, isUTC: this._isUTC, strict: this._strict }; } addFormatToken("N", 0, 0, "eraAbbr"); addFormatToken("NN", 0, 0, "eraAbbr"); addFormatToken("NNN", 0, 0, "eraAbbr"); addFormatToken("NNNN", 0, 0, "eraName"); addFormatToken("NNNNN", 0, 0, "eraNarrow"); addFormatToken("y", ["y", 1], "yo", "eraYear"); addFormatToken("y", ["yy", 2], 0, "eraYear"); addFormatToken("y", ["yyy", 3], 0, "eraYear"); addFormatToken("y", ["yyyy", 4], 0, "eraYear"); addRegexToken("N", matchEraAbbr); addRegexToken("NN", matchEraAbbr); addRegexToken("NNN", matchEraAbbr); addRegexToken("NNNN", matchEraName); addRegexToken("NNNNN", matchEraNarrow); addParseToken( ["N", "NN", "NNN", "NNNN", "NNNNN"], function(input, array, config, token2) { var era = config._locale.erasParse(input, token2, config._strict); if (era) { getParsingFlags(config).era = era; } else { getParsingFlags(config).invalidEra = input; } } ); addRegexToken("y", matchUnsigned); addRegexToken("yy", matchUnsigned); addRegexToken("yyy", matchUnsigned); addRegexToken("yyyy", matchUnsigned); addRegexToken("yo", matchEraYearOrdinal); addParseToken(["y", "yy", "yyy", "yyyy"], YEAR); addParseToken(["yo"], function(input, array, config, token2) { var match5; if (config._locale._eraYearOrdinalRegex) { match5 = input.match(config._locale._eraYearOrdinalRegex); } if (config._locale.eraYearOrdinalParse) { array[YEAR] = config._locale.eraYearOrdinalParse(input, match5); } else { array[YEAR] = parseInt(input, 10); } }); function localeEras(m, format2) { var i, l, date, eras = this._eras || getLocale("en")._eras; for (i = 0, l = eras.length; i < l; ++i) { switch (typeof eras[i].since) { case "string": date = hooks(eras[i].since).startOf("day"); eras[i].since = date.valueOf(); break; } switch (typeof eras[i].until) { case "undefined": eras[i].until = Infinity; break; case "string": date = hooks(eras[i].until).startOf("day").valueOf(); eras[i].until = date.valueOf(); break; } } return eras; } function localeErasParse(eraName, format2, strict) { var i, l, eras = this.eras(), name, abbr, narrow; eraName = eraName.toUpperCase(); for (i = 0, l = eras.length; i < l; ++i) { name = eras[i].name.toUpperCase(); abbr = eras[i].abbr.toUpperCase(); narrow = eras[i].narrow.toUpperCase(); if (strict) { switch (format2) { case "N": case "NN": case "NNN": if (abbr === eraName) { return eras[i]; } break; case "NNNN": if (name === eraName) { return eras[i]; } break; case "NNNNN": if (narrow === eraName) { return eras[i]; } break; } } else if ([name, abbr, narrow].indexOf(eraName) >= 0) { return eras[i]; } } } function localeErasConvertYear(era, year) { var dir = era.since <= era.until ? 1 : -1; if (year === void 0) { return hooks(era.since).year(); } else { return hooks(era.since).year() + (year - era.offset) * dir; } } function getEraName() { var i, l, val, eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { val = this.clone().startOf("day").valueOf(); if (eras[i].since <= val && val <= eras[i].until) { return eras[i].name; } if (eras[i].until <= val && val <= eras[i].since) { return eras[i].name; } } return ""; } function getEraNarrow() { var i, l, val, eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { val = this.clone().startOf("day").valueOf(); if (eras[i].since <= val && val <= eras[i].until) { return eras[i].narrow; } if (eras[i].until <= val && val <= eras[i].since) { return eras[i].narrow; } } return ""; } function getEraAbbr() { var i, l, val, eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { val = this.clone().startOf("day").valueOf(); if (eras[i].since <= val && val <= eras[i].until) { return eras[i].abbr; } if (eras[i].until <= val && val <= eras[i].since) { return eras[i].abbr; } } return ""; } function getEraYear() { var i, l, dir, val, eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { dir = eras[i].since <= eras[i].until ? 1 : -1; val = this.clone().startOf("day").valueOf(); if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) { return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset; } } return this.year(); } function erasNameRegex(isStrict) { if (!hasOwnProp(this, "_erasNameRegex")) { computeErasParse.call(this); } return isStrict ? this._erasNameRegex : this._erasRegex; } function erasAbbrRegex(isStrict) { if (!hasOwnProp(this, "_erasAbbrRegex")) { computeErasParse.call(this); } return isStrict ? this._erasAbbrRegex : this._erasRegex; } function erasNarrowRegex(isStrict) { if (!hasOwnProp(this, "_erasNarrowRegex")) { computeErasParse.call(this); } return isStrict ? this._erasNarrowRegex : this._erasRegex; } function matchEraAbbr(isStrict, locale3) { return locale3.erasAbbrRegex(isStrict); } function matchEraName(isStrict, locale3) { return locale3.erasNameRegex(isStrict); } function matchEraNarrow(isStrict, locale3) { return locale3.erasNarrowRegex(isStrict); } function matchEraYearOrdinal(isStrict, locale3) { return locale3._eraYearOrdinalRegex || matchUnsigned; } function computeErasParse() { var abbrPieces = [], namePieces = [], narrowPieces = [], mixedPieces = [], i, l, erasName, erasAbbr, erasNarrow, eras = this.eras(); for (i = 0, l = eras.length; i < l; ++i) { erasName = regexEscape(eras[i].name); erasAbbr = regexEscape(eras[i].abbr); erasNarrow = regexEscape(eras[i].narrow); namePieces.push(erasName); abbrPieces.push(erasAbbr); narrowPieces.push(erasNarrow); mixedPieces.push(erasName); mixedPieces.push(erasAbbr); mixedPieces.push(erasNarrow); } this._erasRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i"); this._erasNameRegex = new RegExp("^(" + namePieces.join("|") + ")", "i"); this._erasAbbrRegex = new RegExp("^(" + abbrPieces.join("|") + ")", "i"); this._erasNarrowRegex = new RegExp( "^(" + narrowPieces.join("|") + ")", "i" ); } addFormatToken(0, ["gg", 2], 0, function() { return this.weekYear() % 100; }); addFormatToken(0, ["GG", 2], 0, function() { return this.isoWeekYear() % 100; }); function addWeekYearFormatToken(token2, getter) { addFormatToken(0, [token2, token2.length], 0, getter); } addWeekYearFormatToken("gggg", "weekYear"); addWeekYearFormatToken("ggggg", "weekYear"); addWeekYearFormatToken("GGGG", "isoWeekYear"); addWeekYearFormatToken("GGGGG", "isoWeekYear"); addRegexToken("G", matchSigned); addRegexToken("g", matchSigned); addRegexToken("GG", match1to2, match2); addRegexToken("gg", match1to2, match2); addRegexToken("GGGG", match1to4, match4); addRegexToken("gggg", match1to4, match4); addRegexToken("GGGGG", match1to6, match6); addRegexToken("ggggg", match1to6, match6); addWeekParseToken( ["gggg", "ggggg", "GGGG", "GGGGG"], function(input, week, config, token2) { week[token2.substr(0, 2)] = toInt(input); } ); addWeekParseToken(["gg", "GG"], function(input, week, config, token2) { week[token2] = hooks.parseTwoDigitYear(input); }); function getSetWeekYear(input) { return getSetWeekYearHelper.call( this, input, this.week(), this.weekday() + this.localeData()._week.dow, this.localeData()._week.dow, this.localeData()._week.doy ); } function getSetISOWeekYear(input) { return getSetWeekYearHelper.call( this, input, this.isoWeek(), this.isoWeekday(), 1, 4 ); } function getISOWeeksInYear() { return weeksInYear(this.year(), 1, 4); } function getISOWeeksInISOWeekYear() { return weeksInYear(this.isoWeekYear(), 1, 4); } function getWeeksInYear() { var weekInfo = this.localeData()._week; return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); } function getWeeksInWeekYear() { var weekInfo = this.localeData()._week; return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy); } function getSetWeekYearHelper(input, week, weekday, dow, doy) { var weeksTarget; if (input == null) { return weekOfYear(this, dow, doy).year; } else { weeksTarget = weeksInYear(input, dow, doy); if (week > weeksTarget) { week = weeksTarget; } return setWeekAll.call(this, input, week, weekday, dow, doy); } } function setWeekAll(weekYear, week, weekday, dow, doy) { var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); this.year(date.getUTCFullYear()); this.month(date.getUTCMonth()); this.date(date.getUTCDate()); return this; } addFormatToken("Q", 0, "Qo", "quarter"); addRegexToken("Q", match1); addParseToken("Q", function(input, array) { array[MONTH] = (toInt(input) - 1) * 3; }); function getSetQuarter(input) { return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); } addFormatToken("D", ["DD", 2], "Do", "date"); addRegexToken("D", match1to2, match1to2NoLeadingZero); addRegexToken("DD", match1to2, match2); addRegexToken("Do", function(isStrict, locale3) { return isStrict ? locale3._dayOfMonthOrdinalParse || locale3._ordinalParse : locale3._dayOfMonthOrdinalParseLenient; }); addParseToken(["D", "DD"], DATE); addParseToken("Do", function(input, array) { array[DATE] = toInt(input.match(match1to2)[0]); }); var getSetDayOfMonth = makeGetSet("Date", true); addFormatToken("DDD", ["DDDD", 3], "DDDo", "dayOfYear"); addRegexToken("DDD", match1to3); addRegexToken("DDDD", match3); addParseToken(["DDD", "DDDD"], function(input, array, config) { config._dayOfYear = toInt(input); }); function getSetDayOfYear(input) { var dayOfYear = Math.round( (this.clone().startOf("day") - this.clone().startOf("year")) / 864e5 ) + 1; return input == null ? dayOfYear : this.add(input - dayOfYear, "d"); } addFormatToken("m", ["mm", 2], 0, "minute"); addRegexToken("m", match1to2, match1to2HasZero); addRegexToken("mm", match1to2, match2); addParseToken(["m", "mm"], MINUTE); var getSetMinute = makeGetSet("Minutes", false); addFormatToken("s", ["ss", 2], 0, "second"); addRegexToken("s", match1to2, match1to2HasZero); addRegexToken("ss", match1to2, match2); addParseToken(["s", "ss"], SECOND); var getSetSecond = makeGetSet("Seconds", false); addFormatToken("S", 0, 0, function() { return ~~(this.millisecond() / 100); }); addFormatToken(0, ["SS", 2], 0, function() { return ~~(this.millisecond() / 10); }); addFormatToken(0, ["SSS", 3], 0, "millisecond"); addFormatToken(0, ["SSSS", 4], 0, function() { return this.millisecond() * 10; }); addFormatToken(0, ["SSSSS", 5], 0, function() { return this.millisecond() * 100; }); addFormatToken(0, ["SSSSSS", 6], 0, function() { return this.millisecond() * 1e3; }); addFormatToken(0, ["SSSSSSS", 7], 0, function() { return this.millisecond() * 1e4; }); addFormatToken(0, ["SSSSSSSS", 8], 0, function() { return this.millisecond() * 1e5; }); addFormatToken(0, ["SSSSSSSSS", 9], 0, function() { return this.millisecond() * 1e6; }); addRegexToken("S", match1to3, match1); addRegexToken("SS", match1to3, match2); addRegexToken("SSS", match1to3, match3); var token, getSetMillisecond; for (token = "SSSS"; token.length <= 9; token += "S") { addRegexToken(token, matchUnsigned); } function parseMs(input, array) { array[MILLISECOND] = toInt(("0." + input) * 1e3); } for (token = "S"; token.length <= 9; token += "S") { addParseToken(token, parseMs); } getSetMillisecond = makeGetSet("Milliseconds", false); addFormatToken("z", 0, 0, "zoneAbbr"); addFormatToken("zz", 0, 0, "zoneName"); function getZoneAbbr() { return this._isUTC ? "UTC" : ""; } function getZoneName() { return this._isUTC ? "Coordinated Universal Time" : ""; } var proto = Moment3.prototype; proto.add = add; proto.calendar = calendar$1; proto.clone = clone3; proto.diff = diff; proto.endOf = endOf; proto.format = format; proto.from = from2; proto.fromNow = fromNow; proto.to = to2; proto.toNow = toNow; proto.get = stringGet; proto.invalidAt = invalidAt; proto.isAfter = isAfter; proto.isBefore = isBefore; proto.isBetween = isBetween; proto.isSame = isSame; proto.isSameOrAfter = isSameOrAfter; proto.isSameOrBefore = isSameOrBefore; proto.isValid = isValid$2; proto.lang = lang; proto.locale = locale2; proto.localeData = localeData; proto.max = prototypeMax; proto.min = prototypeMin; proto.parsingFlags = parsingFlags; proto.set = stringSet; proto.startOf = startOf; proto.subtract = subtract; proto.toArray = toArray; proto.toObject = toObject; proto.toDate = toDate; proto.toISOString = toISOString; proto.inspect = inspect; if (typeof Symbol !== "undefined" && Symbol.for != null) { proto[Symbol.for("nodejs.util.inspect.custom")] = function() { return "Moment<" + this.format() + ">"; }; } proto.toJSON = toJSON; proto.toString = toString; proto.unix = unix; proto.valueOf = valueOf; proto.creationData = creationData; proto.eraName = getEraName; proto.eraNarrow = getEraNarrow; proto.eraAbbr = getEraAbbr; proto.eraYear = getEraYear; proto.year = getSetYear; proto.isLeapYear = getIsLeapYear; proto.weekYear = getSetWeekYear; proto.isoWeekYear = getSetISOWeekYear; proto.quarter = proto.quarters = getSetQuarter; proto.month = getSetMonth; proto.daysInMonth = getDaysInMonth; proto.week = proto.weeks = getSetWeek; proto.isoWeek = proto.isoWeeks = getSetISOWeek; proto.weeksInYear = getWeeksInYear; proto.weeksInWeekYear = getWeeksInWeekYear; proto.isoWeeksInYear = getISOWeeksInYear; proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear; proto.date = getSetDayOfMonth; proto.day = proto.days = getSetDayOfWeek; proto.weekday = getSetLocaleDayOfWeek; proto.isoWeekday = getSetISODayOfWeek; proto.dayOfYear = getSetDayOfYear; proto.hour = proto.hours = getSetHour; proto.minute = proto.minutes = getSetMinute; proto.second = proto.seconds = getSetSecond; proto.millisecond = proto.milliseconds = getSetMillisecond; proto.utcOffset = getSetOffset; proto.utc = setOffsetToUTC; proto.local = setOffsetToLocal; proto.parseZone = setOffsetToParsedOffset; proto.hasAlignedHourOffset = hasAlignedHourOffset; proto.isDST = isDaylightSavingTime; proto.isLocal = isLocal; proto.isUtcOffset = isUtcOffset; proto.isUtc = isUtc; proto.isUTC = isUtc; proto.zoneAbbr = getZoneAbbr; proto.zoneName = getZoneName; proto.dates = deprecate( "dates accessor is deprecated. Use date instead.", getSetDayOfMonth ); proto.months = deprecate( "months accessor is deprecated. Use month instead", getSetMonth ); proto.years = deprecate( "years accessor is deprecated. Use year instead", getSetYear ); proto.zone = deprecate( "moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/", getSetZone ); proto.isDSTShifted = deprecate( "isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information", isDaylightSavingTimeShifted ); function createUnix(input) { return createLocal(input * 1e3); } function createInZone() { return createLocal.apply(null, arguments).parseZone(); } function preParsePostFormat(string) { return string; } var proto$1 = Locale.prototype; proto$1.calendar = calendar; proto$1.longDateFormat = longDateFormat; proto$1.invalidDate = invalidDate; proto$1.ordinal = ordinal; proto$1.preparse = preParsePostFormat; proto$1.postformat = preParsePostFormat; proto$1.relativeTime = relativeTime; proto$1.pastFuture = pastFuture; proto$1.set = set2; proto$1.eras = localeEras; proto$1.erasParse = localeErasParse; proto$1.erasConvertYear = localeErasConvertYear; proto$1.erasAbbrRegex = erasAbbrRegex; proto$1.erasNameRegex = erasNameRegex; proto$1.erasNarrowRegex = erasNarrowRegex; proto$1.months = localeMonths; proto$1.monthsShort = localeMonthsShort; proto$1.monthsParse = localeMonthsParse; proto$1.monthsRegex = monthsRegex; proto$1.monthsShortRegex = monthsShortRegex; proto$1.week = localeWeek; proto$1.firstDayOfYear = localeFirstDayOfYear; proto$1.firstDayOfWeek = localeFirstDayOfWeek; proto$1.weekdays = localeWeekdays; proto$1.weekdaysMin = localeWeekdaysMin; proto$1.weekdaysShort = localeWeekdaysShort; proto$1.weekdaysParse = localeWeekdaysParse; proto$1.weekdaysRegex = weekdaysRegex; proto$1.weekdaysShortRegex = weekdaysShortRegex; proto$1.weekdaysMinRegex = weekdaysMinRegex; proto$1.isPM = localeIsPM; proto$1.meridiem = localeMeridiem; function get$1(format2, index, field, setter) { var locale3 = getLocale(), utc = createUTC().set(setter, index); return locale3[field](utc, format2); } function listMonthsImpl(format2, index, field) { if (isNumber2(format2)) { index = format2; format2 = void 0; } format2 = format2 || ""; if (index != null) { return get$1(format2, index, field, "month"); } var i, out = []; for (i = 0; i < 12; i++) { out[i] = get$1(format2, i, field, "month"); } return out; } function listWeekdaysImpl(localeSorted, format2, index, field) { if (typeof localeSorted === "boolean") { if (isNumber2(format2)) { index = format2; format2 = void 0; } format2 = format2 || ""; } else { format2 = localeSorted; index = format2; localeSorted = false; if (isNumber2(format2)) { index = format2; format2 = void 0; } format2 = format2 || ""; } var locale3 = getLocale(), shift = localeSorted ? locale3._week.dow : 0, i, out = []; if (index != null) { return get$1(format2, (index + shift) % 7, field, "day"); } for (i = 0; i < 7; i++) { out[i] = get$1(format2, (i + shift) % 7, field, "day"); } return out; } function listMonths(format2, index) { return listMonthsImpl(format2, index, "months"); } function listMonthsShort(format2, index) { return listMonthsImpl(format2, index, "monthsShort"); } function listWeekdays(localeSorted, format2, index) { return listWeekdaysImpl(localeSorted, format2, index, "weekdays"); } function listWeekdaysShort(localeSorted, format2, index) { return listWeekdaysImpl(localeSorted, format2, index, "weekdaysShort"); } function listWeekdaysMin(localeSorted, format2, index) { return listWeekdaysImpl(localeSorted, format2, index, "weekdaysMin"); } getSetGlobalLocale("en", { eras: [ { since: "0001-01-01", until: Infinity, offset: 1, name: "Anno Domini", narrow: "AD", abbr: "AD" }, { since: "0000-12-31", until: -Infinity, offset: 1, name: "Before Christ", narrow: "BC", abbr: "BC" } ], dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, ordinal: function(number) { var b = number % 10, output = toInt(number % 100 / 10) === 1 ? "th" : b === 1 ? "st" : b === 2 ? "nd" : b === 3 ? "rd" : "th"; return number + output; } }); hooks.lang = deprecate( "moment.lang is deprecated. Use moment.locale instead.", getSetGlobalLocale ); hooks.langData = deprecate( "moment.langData is deprecated. Use moment.localeData instead.", getLocale ); var mathAbs = Math.abs; function abs() { var data = this._data; this._milliseconds = mathAbs(this._milliseconds); this._days = mathAbs(this._days); this._months = mathAbs(this._months); data.milliseconds = mathAbs(data.milliseconds); data.seconds = mathAbs(data.seconds); data.minutes = mathAbs(data.minutes); data.hours = mathAbs(data.hours); data.months = mathAbs(data.months); data.years = mathAbs(data.years); return this; } function addSubtract$1(duration, input, value, direction) { var other = createDuration(input, value); duration._milliseconds += direction * other._milliseconds; duration._days += direction * other._days; duration._months += direction * other._months; return duration._bubble(); } function add$1(input, value) { return addSubtract$1(this, input, value, 1); } function subtract$1(input, value) { return addSubtract$1(this, input, value, -1); } function absCeil(number) { if (number < 0) { return Math.floor(number); } else { return Math.ceil(number); } } function bubble() { var milliseconds2 = this._milliseconds, days2 = this._days, months2 = this._months, data = this._data, seconds2, minutes2, hours2, years2, monthsFromDays; if (!(milliseconds2 >= 0 && days2 >= 0 && months2 >= 0 || milliseconds2 <= 0 && days2 <= 0 && months2 <= 0)) { milliseconds2 += absCeil(monthsToDays(months2) + days2) * 864e5; days2 = 0; months2 = 0; } data.milliseconds = milliseconds2 % 1e3; seconds2 = absFloor(milliseconds2 / 1e3); data.seconds = seconds2 % 60; minutes2 = absFloor(seconds2 / 60); data.minutes = minutes2 % 60; hours2 = absFloor(minutes2 / 60); data.hours = hours2 % 24; days2 += absFloor(hours2 / 24); monthsFromDays = absFloor(daysToMonths(days2)); months2 += monthsFromDays; days2 -= absCeil(monthsToDays(monthsFromDays)); years2 = absFloor(months2 / 12); months2 %= 12; data.days = days2; data.months = months2; data.years = years2; return this; } function daysToMonths(days2) { return days2 * 4800 / 146097; } function monthsToDays(months2) { return months2 * 146097 / 4800; } function as(units) { if (!this.isValid()) { return NaN; } var days2, months2, milliseconds2 = this._milliseconds; units = normalizeUnits(units); if (units === "month" || units === "quarter" || units === "year") { days2 = this._days + milliseconds2 / 864e5; months2 = this._months + daysToMonths(days2); switch (units) { case "month": return months2; case "quarter": return months2 / 3; case "year": return months2 / 12; } } else { days2 = this._days + Math.round(monthsToDays(this._months)); switch (units) { case "week": return days2 / 7 + milliseconds2 / 6048e5; case "day": return days2 + milliseconds2 / 864e5; case "hour": return days2 * 24 + milliseconds2 / 36e5; case "minute": return days2 * 1440 + milliseconds2 / 6e4; case "second": return days2 * 86400 + milliseconds2 / 1e3; // Math.floor prevents floating point math errors here case "millisecond": return Math.floor(days2 * 864e5) + milliseconds2; default: throw new Error("Unknown unit " + units); } } } function makeAs(alias) { return function() { return this.as(alias); }; } var asMilliseconds = makeAs("ms"), asSeconds = makeAs("s"), asMinutes = makeAs("m"), asHours = makeAs("h"), asDays = makeAs("d"), asWeeks = makeAs("w"), asMonths = makeAs("M"), asQuarters = makeAs("Q"), asYears = makeAs("y"), valueOf$1 = asMilliseconds; function clone$1() { return createDuration(this); } function get$2(units) { units = normalizeUnits(units); return this.isValid() ? this[units + "s"]() : NaN; } function makeGetter(name) { return function() { return this.isValid() ? this._data[name] : NaN; }; } var milliseconds = makeGetter("milliseconds"), seconds = makeGetter("seconds"), minutes = makeGetter("minutes"), hours = makeGetter("hours"), days = makeGetter("days"), months = makeGetter("months"), years = makeGetter("years"); function weeks() { return absFloor(this.days() / 7); } var round2 = Math.round, thresholds = { ss: 44, // a few seconds to seconds s: 45, // seconds to minute m: 45, // minutes to hour h: 22, // hours to day d: 26, // days to month/week w: null, // weeks to month M: 11 // months to year }; function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale3) { return locale3.relativeTime(number || 1, !!withoutSuffix, string, isFuture); } function relativeTime$1(posNegDuration, withoutSuffix, thresholds2, locale3) { var duration = createDuration(posNegDuration).abs(), seconds2 = round2(duration.as("s")), minutes2 = round2(duration.as("m")), hours2 = round2(duration.as("h")), days2 = round2(duration.as("d")), months2 = round2(duration.as("M")), weeks2 = round2(duration.as("w")), years2 = round2(duration.as("y")), a = seconds2 <= thresholds2.ss && ["s", seconds2] || seconds2 < thresholds2.s && ["ss", seconds2] || minutes2 <= 1 && ["m"] || minutes2 < thresholds2.m && ["mm", minutes2] || hours2 <= 1 && ["h"] || hours2 < thresholds2.h && ["hh", hours2] || days2 <= 1 && ["d"] || days2 < thresholds2.d && ["dd", days2]; if (thresholds2.w != null) { a = a || weeks2 <= 1 && ["w"] || weeks2 < thresholds2.w && ["ww", weeks2]; } a = a || months2 <= 1 && ["M"] || months2 < thresholds2.M && ["MM", months2] || years2 <= 1 && ["y"] || ["yy", years2]; a[2] = withoutSuffix; a[3] = +posNegDuration > 0; a[4] = locale3; return substituteTimeAgo.apply(null, a); } function getSetRelativeTimeRounding(roundingFunction) { if (roundingFunction === void 0) { return round2; } if (typeof roundingFunction === "function") { round2 = roundingFunction; return true; } return false; } function getSetRelativeTimeThreshold(threshold, limit) { if (thresholds[threshold] === void 0) { return false; } if (limit === void 0) { return thresholds[threshold]; } thresholds[threshold] = limit; if (threshold === "s") { thresholds.ss = limit - 1; } return true; } function humanize(argWithSuffix, argThresholds) { if (!this.isValid()) { return this.localeData().invalidDate(); } var withSuffix = false, th = thresholds, locale3, output; if (typeof argWithSuffix === "object") { argThresholds = argWithSuffix; argWithSuffix = false; } if (typeof argWithSuffix === "boolean") { withSuffix = argWithSuffix; } if (typeof argThresholds === "object") { th = Object.assign({}, thresholds, argThresholds); if (argThresholds.s != null && argThresholds.ss == null) { th.ss = argThresholds.s - 1; } } locale3 = this.localeData(); output = relativeTime$1(this, !withSuffix, th, locale3); if (withSuffix) { output = locale3.pastFuture(+this, output); } return locale3.postformat(output); } var abs$1 = Math.abs; function sign2(x) { return (x > 0) - (x < 0) || +x; } function toISOString$1() { if (!this.isValid()) { return this.localeData().invalidDate(); } var seconds2 = abs$1(this._milliseconds) / 1e3, days2 = abs$1(this._days), months2 = abs$1(this._months), minutes2, hours2, years2, s, total = this.asSeconds(), totalSign, ymSign, daysSign, hmsSign; if (!total) { return "P0D"; } minutes2 = absFloor(seconds2 / 60); hours2 = absFloor(minutes2 / 60); seconds2 %= 60; minutes2 %= 60; years2 = absFloor(months2 / 12); months2 %= 12; s = seconds2 ? seconds2.toFixed(3).replace(/\.?0+$/, "") : ""; totalSign = total < 0 ? "-" : ""; ymSign = sign2(this._months) !== sign2(total) ? "-" : ""; daysSign = sign2(this._days) !== sign2(total) ? "-" : ""; hmsSign = sign2(this._milliseconds) !== sign2(total) ? "-" : ""; return totalSign + "P" + (years2 ? ymSign + years2 + "Y" : "") + (months2 ? ymSign + months2 + "M" : "") + (days2 ? daysSign + days2 + "D" : "") + (hours2 || minutes2 || seconds2 ? "T" : "") + (hours2 ? hmsSign + hours2 + "H" : "") + (minutes2 ? hmsSign + minutes2 + "M" : "") + (seconds2 ? hmsSign + s + "S" : ""); } var proto$2 = Duration.prototype; proto$2.isValid = isValid$1; proto$2.abs = abs; proto$2.add = add$1; proto$2.subtract = subtract$1; proto$2.as = as; proto$2.asMilliseconds = asMilliseconds; proto$2.asSeconds = asSeconds; proto$2.asMinutes = asMinutes; proto$2.asHours = asHours; proto$2.asDays = asDays; proto$2.asWeeks = asWeeks; proto$2.asMonths = asMonths; proto$2.asQuarters = asQuarters; proto$2.asYears = asYears; proto$2.valueOf = valueOf$1; proto$2._bubble = bubble; proto$2.clone = clone$1; proto$2.get = get$2; proto$2.milliseconds = milliseconds; proto$2.seconds = seconds; proto$2.minutes = minutes; proto$2.hours = hours; proto$2.days = days; proto$2.weeks = weeks; proto$2.months = months; proto$2.years = years; proto$2.humanize = humanize; proto$2.toISOString = toISOString$1; proto$2.toString = toISOString$1; proto$2.toJSON = toISOString$1; proto$2.locale = locale2; proto$2.localeData = localeData; proto$2.toIsoString = deprecate( "toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)", toISOString$1 ); proto$2.lang = lang; addFormatToken("X", 0, 0, "unix"); addFormatToken("x", 0, 0, "valueOf"); addRegexToken("x", matchSigned); addRegexToken("X", matchTimestamp); addParseToken("X", function(input, array, config) { config._d = new Date(parseFloat(input) * 1e3); }); addParseToken("x", function(input, array, config) { config._d = new Date(toInt(input)); }); hooks.version = "2.30.1"; setHookCallback(createLocal); hooks.fn = proto; hooks.min = min; hooks.max = max; hooks.now = now2; hooks.utc = createUTC; hooks.unix = createUnix; hooks.months = listMonths; hooks.isDate = isDate; hooks.locale = getSetGlobalLocale; hooks.invalid = createInvalid; hooks.duration = createDuration; hooks.isMoment = isMoment; hooks.weekdays = listWeekdays; hooks.parseZone = createInZone; hooks.localeData = getLocale; hooks.isDuration = isDuration; hooks.monthsShort = listMonthsShort; hooks.weekdaysMin = listWeekdaysMin; hooks.defineLocale = defineLocale; hooks.updateLocale = updateLocale; hooks.locales = listLocales; hooks.weekdaysShort = listWeekdaysShort; hooks.normalizeUnits = normalizeUnits; hooks.relativeTimeRounding = getSetRelativeTimeRounding; hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; hooks.calendarFormat = getCalendarFormat; hooks.prototype = proto; hooks.HTML5_FMT = { DATETIME_LOCAL: "YYYY-MM-DDTHH:mm", // DATETIME_LOCAL_SECONDS: "YYYY-MM-DDTHH:mm:ss", // DATETIME_LOCAL_MS: "YYYY-MM-DDTHH:mm:ss.SSS", // DATE: "YYYY-MM-DD", // TIME: "HH:mm", // TIME_SECONDS: "HH:mm:ss", // TIME_MS: "HH:mm:ss.SSS", // WEEK: "GGGG-[W]WW", // MONTH: "YYYY-MM" // }; return hooks; }); } }); // node_modules/.pnpm/pagerank.js@1.0.2/node_modules/pagerank.js/lib/index.js var require_lib = __commonJS({ "node_modules/.pnpm/pagerank.js@1.0.2/node_modules/pagerank.js/lib/index.js"(exports2, module2) { "use strict"; function forOwn(object, callback2) { if (typeof object === "object" && typeof callback2 === "function") { for (var key in object) { if (object.hasOwnProperty(key) === true) { if (callback2(key, object[key]) === false) { break; } } } } } module2.exports = function() { var self2 = { count: 0, edges: {}, nodes: {} }; self2.link = function(source, target, weight) { if (isFinite(weight) !== true || weight === null) { weight = 1; } weight = parseFloat(weight); if (self2.nodes.hasOwnProperty(source) !== true) { self2.count++; self2.nodes[source] = { weight: 0, outbound: 0 }; } self2.nodes[source].outbound += weight; if (self2.nodes.hasOwnProperty(target) !== true) { self2.count++; self2.nodes[target] = { weight: 0, outbound: 0 }; } if (self2.edges.hasOwnProperty(source) !== true) { self2.edges[source] = {}; } if (self2.edges[source].hasOwnProperty(target) !== true) { self2.edges[source][target] = 0; } self2.edges[source][target] += weight; }; self2.rank = function(alpha2, epsilon, callback2) { var delta = 1, inverse = 1 / self2.count; forOwn(self2.edges, function(source) { if (self2.nodes[source].outbound > 0) { forOwn(self2.edges[source], function(target) { self2.edges[source][target] /= self2.nodes[source].outbound; }); } }); forOwn(self2.nodes, function(key) { self2.nodes[key].weight = inverse; }); while (delta > epsilon) { var leak = 0, nodes = {}; forOwn(self2.nodes, function(key, value) { nodes[key] = value.weight; if (value.outbound === 0) { leak += value.weight; } self2.nodes[key].weight = 0; }); leak *= alpha2; forOwn(self2.nodes, function(source) { forOwn(self2.edges[source], function(target, weight) { self2.nodes[target].weight += alpha2 * nodes[source] * weight; }); self2.nodes[source].weight += (1 - alpha2) * inverse + leak * inverse; }); delta = 0; forOwn(self2.nodes, function(key, value) { delta += Math.abs(value.weight - nodes[key]); }); } forOwn(self2.nodes, function(key) { return callback2(key, self2.nodes[key].weight); }); }; self2.reset = function() { self2.count = 0; self2.edges = {}; self2.nodes = {}; }; return self2; }(); } }); // node_modules/.pnpm/balanced-match@1.0.2/node_modules/balanced-match/index.js var require_balanced_match = __commonJS({ "node_modules/.pnpm/balanced-match@1.0.2/node_modules/balanced-match/index.js"(exports2, module2) { "use strict"; module2.exports = balanced; function balanced(a, b, str) { if (a instanceof RegExp) a = maybeMatch(a, str); if (b instanceof RegExp) b = maybeMatch(b, str); var r = range(a, b, str); return r && { start: r[0], end: r[1], pre: str.slice(0, r[0]), body: str.slice(r[0] + a.length, r[1]), post: str.slice(r[1] + b.length) }; } function maybeMatch(reg, str) { var m = str.match(reg); return m ? m[0] : null; } balanced.range = range; function range(a, b, str) { var begs, beg, left, right, result; var ai = str.indexOf(a); var bi = str.indexOf(b, ai + 1); var i = ai; if (ai >= 0 && bi > 0) { if (a === b) { return [ai, bi]; } begs = []; left = str.length; while (i >= 0 && !result) { if (i == ai) { begs.push(i); ai = str.indexOf(a, i + 1); } else if (begs.length == 1) { result = [begs.pop(), bi]; } else { beg = begs.pop(); if (beg < left) { left = beg; right = bi; } bi = str.indexOf(b, i + 1); } i = ai < bi && ai >= 0 ? ai : bi; } if (begs.length) { result = [left, right]; } } return result; } } }); // node_modules/.pnpm/brace-expansion@2.0.1/node_modules/brace-expansion/index.js var require_brace_expansion = __commonJS({ "node_modules/.pnpm/brace-expansion@2.0.1/node_modules/brace-expansion/index.js"(exports2, module2) { var balanced = require_balanced_match(); module2.exports = expandTop; var escSlash = "\0SLASH" + Math.random() + "\0"; var escOpen = "\0OPEN" + Math.random() + "\0"; var escClose = "\0CLOSE" + Math.random() + "\0"; var escComma = "\0COMMA" + Math.random() + "\0"; var escPeriod = "\0PERIOD" + Math.random() + "\0"; function numeric(str) { return parseInt(str, 10) == str ? parseInt(str, 10) : str.charCodeAt(0); } function escapeBraces(str) { return str.split("\\\\").join(escSlash).split("\\{").join(escOpen).split("\\}").join(escClose).split("\\,").join(escComma).split("\\.").join(escPeriod); } function unescapeBraces(str) { return str.split(escSlash).join("\\").split(escOpen).join("{").split(escClose).join("}").split(escComma).join(",").split(escPeriod).join("."); } function parseCommaParts(str) { if (!str) return [""]; var parts = []; var m = balanced("{", "}", str); if (!m) return str.split(","); var pre = m.pre; var body = m.body; var post = m.post; var p = pre.split(","); p[p.length - 1] += "{" + body + "}"; var postParts = parseCommaParts(post); if (post.length) { p[p.length - 1] += postParts.shift(); p.push.apply(p, postParts); } parts.push.apply(parts, p); return parts; } function expandTop(str) { if (!str) return []; if (str.substr(0, 2) === "{}") { str = "\\{\\}" + str.substr(2); } return expand2(escapeBraces(str), true).map(unescapeBraces); } function embrace(str) { return "{" + str + "}"; } function isPadded(el) { return /^-?0\d/.test(el); } function lte(i, y) { return i <= y; } function gte(i, y) { return i >= y; } function expand2(str, isTop) { var expansions = []; var m = balanced("{", "}", str); if (!m) return [str]; var pre = m.pre; var post = m.post.length ? expand2(m.post, false) : [""]; if (/\$$/.test(m.pre)) { for (var k = 0; k < post.length; k++) { var expansion = pre + "{" + m.body + "}" + post[k]; expansions.push(expansion); } } else { var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); var isSequence = isNumericSequence || isAlphaSequence; var isOptions = m.body.indexOf(",") >= 0; if (!isSequence && !isOptions) { if (m.post.match(/,.*\}/)) { str = m.pre + "{" + m.body + escClose + m.post; return expand2(str); } return [str]; } var n; if (isSequence) { n = m.body.split(/\.\./); } else { n = parseCommaParts(m.body); if (n.length === 1) { n = expand2(n[0], false).map(embrace); if (n.length === 1) { return post.map(function(p) { return m.pre + n[0] + p; }); } } } var N; if (isSequence) { var x = numeric(n[0]); var y = numeric(n[1]); var width = Math.max(n[0].length, n[1].length); var incr = n.length == 3 ? Math.abs(numeric(n[2])) : 1; var test = lte; var reverse = y < x; if (reverse) { incr *= -1; test = gte; } var pad = n.some(isPadded); N = []; for (var i = x; test(i, y); i += incr) { var c; if (isAlphaSequence) { c = String.fromCharCode(i); if (c === "\\") c = ""; } else { c = String(i); if (pad) { var need = width - c.length; if (need > 0) { var z = new Array(need + 1).join("0"); if (i < 0) c = "-" + z + c.slice(1); else c = z + c; } } } N.push(c); } } else { N = []; for (var j = 0; j < n.length; j++) { N.push.apply(N, expand2(n[j], false)); } } for (var j = 0; j < N.length; j++) { for (var k = 0; k < post.length; k++) { var expansion = pre + N[j] + post[k]; if (!isTop || isSequence || expansion) expansions.push(expansion); } } } return expansions; } } }); // node_modules/.pnpm/peggy@4.0.3/node_modules/peggy/browser/peggy.min.js var require_peggy_min = __commonJS({ "node_modules/.pnpm/peggy@4.0.3/node_modules/peggy/browser/peggy.min.js"(exports, module) { !function(e, t2) { "object" == typeof exports && "undefined" != typeof module ? module.exports = t2() : "function" == typeof define && define.amd ? define(t2) : (e = "undefined" != typeof globalThis ? globalThis : e || self).peggy = t2(); }(exports, function() { "use strict"; var commonjsGlobal = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}; function getDefaultExportFromCjs(e) { return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e; } var GrammarLocation$4 = function() { function GrammarLocation2(e, t2) { this.source = e, this.start = t2; } return GrammarLocation2.prototype.toString = function() { return String(this.source); }, GrammarLocation2.prototype.offset = function(e) { return { line: e.line + this.start.line - 1, column: 1 === e.line ? e.column + this.start.column - 1 : e.column, offset: e.offset + this.start.offset }; }, GrammarLocation2.offsetStart = function(e) { return e.source && "function" == typeof e.source.offset ? e.source.offset(e.start) : e.start; }, GrammarLocation2.offsetEnd = function(e) { return e.source && "function" == typeof e.source.offset ? e.source.offset(e.end) : e.end; }, GrammarLocation2; }(), grammarLocation = GrammarLocation$4, __extends = commonjsGlobal && commonjsGlobal.__extends || (extendStatics = function(e, t2) { return extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(e2, t3) { e2.__proto__ = t3; } || function(e2, t3) { for (var r in t3) Object.prototype.hasOwnProperty.call(t3, r) && (e2[r] = t3[r]); }, extendStatics(e, t2); }, function(e, t2) { if ("function" != typeof t2 && null !== t2) throw new TypeError("Class extends value " + String(t2) + " is not a constructor or null"); function r() { this.constructor = e; } extendStatics(e, t2), e.prototype = null === t2 ? Object.create(t2) : (r.prototype = t2.prototype, new r()); }), extendStatics, GrammarLocation$3 = grammarLocation, setProtoOf = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(e, t2) { e.__proto__ = t2; } || function(e, t2) { for (var r in t2) Object.prototype.hasOwnProperty.call(t2, r) && (e[r] = t2[r]); }, GrammarError$3 = function(e) { function t2(r, n, o) { var u = e.call(this, r) || this; return setProtoOf(u, t2.prototype), u.name = "GrammarError", u.location = n, void 0 === o && (o = []), u.diagnostics = o, u.stage = null, u.problems = [["error", r, n, o]], u; } return __extends(t2, e), t2.prototype.toString = function() { var t3 = e.prototype.toString.call(this); this.location && (t3 += "\n at ", void 0 !== this.location.source && null !== this.location.source && (t3 += "".concat(this.location.source, ":")), t3 += "".concat(this.location.start.line, ":").concat(this.location.start.column)); for (var r = 0, n = this.diagnostics; r < n.length; r++) { var o = n[r]; t3 += "\n from ", void 0 !== o.location.source && null !== o.location.source && (t3 += "".concat(o.location.source, ":")), t3 += "".concat(o.location.start.line, ":").concat(o.location.start.column, ": ").concat(o.message); } return t3; }, t2.prototype.format = function(e2) { var t3 = e2.map(function(e3) { var t4 = e3.source, r2 = e3.text; return { source: t4, text: null != r2 ? String(r2).split(/\r\n|\n|\r/g) : [] }; }); function r(e3, r2, n2) { void 0 === n2 && (n2 = ""); var o = "", u = t3.find(function(t4) { return t4.source === e3.source; }), a = e3.start, i = GrammarLocation$3.offsetStart(e3); if (u) { var s = e3.end, c = u.text[a.line - 1], l = (a.line === s.line ? s.column : c.length + 1) - a.column || 1; n2 && (o += "\nnote: ".concat(n2)), o += "\n --> ".concat(e3.source, ":").concat(i.line, ":").concat(i.column, "\n").concat("".padEnd(r2), " |\n").concat(i.line.toString().padStart(r2), " | ").concat(c, "\n").concat("".padEnd(r2), " | ").concat("".padEnd(a.column - 1)).concat("".padEnd(l, "^")); } else o += "\n at ".concat(e3.source, ":").concat(i.line, ":").concat(i.column), n2 && (o += ": ".concat(n2)); return o; } function n(e3, t4, n2, o) { void 0 === o && (o = []); var u = -1 / 0; u = n2 ? o.reduce(function(e4, t5) { var r2 = t5.location; return Math.max(e4, GrammarLocation$3.offsetStart(r2).line); }, n2.start.line) : Math.max.apply(null, o.map(function(e4) { return e4.location.start.line; })), u = u.toString().length; var a = "".concat(e3, ": ").concat(t4); n2 && (a += r(n2, u)); for (var i = 0, s = o; i < s.length; i++) { var c = s[i]; a += r(c.location, u, c.message); } return a; } return this.problems.filter(function(e3) { return "info" !== e3[0]; }).map(function(e3) { return n.apply(void 0, e3); }).join("\n\n"); }, t2; }(Error), grammarError = GrammarError$3, __spreadArray$4 = commonjsGlobal && commonjsGlobal.__spreadArray || function(e, t2, r) { if (r || 2 === arguments.length) for (var n, o = 0, u = t2.length; o < u; o++) !n && o in t2 || (n || (n = Array.prototype.slice.call(t2, 0, o)), n[o] = t2[o]); return e.concat(n || Array.prototype.slice.call(t2)); }, visitor$d = { build: function(e) { function t2(t3) { for (var r2 = [], n2 = 1; n2 < arguments.length; n2++) r2[n2 - 1] = arguments[n2]; return e[t3.type].apply(e, __spreadArray$4([t3], r2, false)); } function r() { } function n(e2) { for (var r2 = [], n2 = 1; n2 < arguments.length; n2++) r2[n2 - 1] = arguments[n2]; return t2.apply(void 0, __spreadArray$4([e2.expression], r2, false)); } function o(e2) { return function(r2) { for (var n2 = [], o2 = 1; o2 < arguments.length; o2++) n2[o2 - 1] = arguments[o2]; r2[e2].forEach(function(e3) { return t2.apply(void 0, __spreadArray$4([e3], n2, false)); }); }; } var u = { grammar: function(e2) { for (var r2 = [], n2 = 1; n2 < arguments.length; n2++) r2[n2 - 1] = arguments[n2]; for (var o2 = 0, u2 = e2.imports; o2 < u2.length; o2++) { var a = u2[o2]; t2.apply(void 0, __spreadArray$4([a], r2, false)); } if (e2.topLevelInitializer) if (Array.isArray(e2.topLevelInitializer)) for (var i = 0, s = e2.topLevelInitializer; i < s.length; i++) { var c = s[i]; t2.apply(void 0, __spreadArray$4([c], r2, false)); } else t2.apply(void 0, __spreadArray$4([e2.topLevelInitializer], r2, false)); if (e2.initializer) if (Array.isArray(e2.initializer)) for (var l = 0, p = e2.initializer; l < p.length; l++) { var f = p[l]; t2.apply(void 0, __spreadArray$4([f], r2, false)); } else t2.apply(void 0, __spreadArray$4([e2.initializer], r2, false)); e2.rules.forEach(function(e3) { return t2.apply(void 0, __spreadArray$4([e3], r2, false)); }); }, grammar_import: r, top_level_initializer: r, initializer: r, rule: n, named: n, choice: o("alternatives"), action: n, sequence: o("elements"), labeled: n, text: n, simple_and: n, simple_not: n, optional: n, zero_or_more: n, one_or_more: n, repeated: function(e2) { for (var r2 = [], n2 = 1; n2 < arguments.length; n2++) r2[n2 - 1] = arguments[n2]; return e2.delimiter && t2.apply(void 0, __spreadArray$4([e2.delimiter], r2, false)), t2.apply(void 0, __spreadArray$4([e2.expression], r2, false)); }, group: n, semantic_and: r, semantic_not: r, rule_ref: r, library_ref: r, literal: r, class: r, any: r }; return Object.keys(u).forEach(function(t3) { Object.prototype.hasOwnProperty.call(e, t3) || (e[t3] = u[t3]); }), t2; } }, visitor_1 = visitor$d, visitor$c = visitor_1; function combinePossibleArrays(e, t2) { if (!e || !t2) return e || t2; var r = Array.isArray(e) ? e : [e]; return r.push(t2), r; } var asts$8 = { findRule: function(e, t2) { for (var r = 0; r < e.rules.length; r++) if (e.rules[r].name === t2) return e.rules[r]; }, indexOfRule: function(e, t2) { for (var r = 0; r < e.rules.length; r++) if (e.rules[r].name === t2) return r; return -1; }, alwaysConsumesOnSuccess: function(e, t2) { function r() { return true; } function n() { return false; } var o = visitor$c.build({ choice: function(e2) { return e2.alternatives.every(o); }, sequence: function(e2) { return e2.elements.some(o); }, simple_and: n, simple_not: n, optional: n, zero_or_more: n, repeated: function(e2) { var t3 = e2.min ? e2.min : e2.max; return !("constant" !== t3.type || 0 === t3.value || !o(e2.expression) && !(t3.value > 1 && e2.delimiter && o(e2.delimiter))); }, semantic_and: n, semantic_not: n, rule_ref: function(t3) { var r2 = asts$8.findRule(e, t3.name); return r2 ? o(r2) : void 0; }, library_ref: function() { return false; }, literal: function(e2) { return "" !== e2.value; }, class: r, any: r }); return o(t2); }, combine: function(e) { return e.reduce(function(e2, t2) { return e2.topLevelInitializer = combinePossibleArrays(e2.topLevelInitializer, t2.topLevelInitializer), e2.initializer = combinePossibleArrays(e2.initializer, t2.initializer), e2.rules = e2.rules.concat(t2.rules), e2; }); } }, asts_1 = asts$8; function addImportedRules$1(e) { for (var t2 = 0, r = 0, n = e.imports; r < n.length; r++) { for (var o = n[r], u = 0, a = o.what; u < a.length; u++) { var i = a[u], s = void 0; switch (i.type) { case "import_binding_all": continue; case "import_binding_default": break; case "import_binding": s = i.binding; break; case "import_binding_rename": s = i.rename; break; default: throw new TypeError("Unknown binding type"); } e.rules.push({ type: "rule", name: i.binding, nameLocation: i.location, expression: { type: "library_ref", name: s, library: o.from.module, libraryNumber: t2, location: i.location }, location: o.from.location }); } t2++; } } var addImportedRules_1 = addImportedRules$1, visitor$b = visitor_1; function findLibraryNumber(e, t2) { for (var r = 0, n = 0, o = e.imports; n < o.length; n++) { for (var u = 0, a = o[n].what; u < a.length; u++) { var i = a[u]; if ("import_binding_all" === i.type && i.binding === t2) return r; } r++; } return -1; } function fixLibraryNumbers$1(e, t2, r) { visitor$b.build({ library_ref: function(t3) { -1 === t3.libraryNumber && (t3.libraryNumber = findLibraryNumber(e, t3.library), -1 === t3.libraryNumber && r.error('Unknown module "'.concat(t3.library, '"'), t3.location)); } })(e); } var fixLibraryNumbers_1 = fixLibraryNumbers$1, opcodes = { PUSH: 0, PUSH_EMPTY_STRING: 35, PUSH_UNDEFINED: 1, PUSH_NULL: 2, PUSH_FAILED: 3, PUSH_EMPTY_ARRAY: 4, PUSH_CURR_POS: 5, POP: 6, POP_CURR_POS: 7, POP_N: 8, NIP: 9, APPEND: 10, WRAP: 11, TEXT: 12, PLUCK: 36, IF: 13, IF_ERROR: 14, IF_NOT_ERROR: 15, IF_LT: 30, IF_GE: 31, IF_LT_DYNAMIC: 32, IF_GE_DYNAMIC: 33, WHILE_NOT_ERROR: 16, MATCH_ANY: 17, MATCH_STRING: 18, MATCH_STRING_IC: 19, MATCH_CHAR_CLASS: 20, MATCH_REGEXP: 20, ACCEPT_N: 21, ACCEPT_STRING: 22, FAIL: 23, LOAD_SAVED_POS: 24, UPDATE_SAVED_POS: 25, CALL: 26, RULE: 27, LIBRARY_RULE: 41, SILENT_FAILS_ON: 28, SILENT_FAILS_OFF: 29, SOURCE_MAP_PUSH: 37, SOURCE_MAP_POP: 38, SOURCE_MAP_LABEL_PUSH: 39, SOURCE_MAP_LABEL_POP: 40 }, opcodes_1 = opcodes, __assign$1 = commonjsGlobal && commonjsGlobal.__assign || function() { return __assign$1 = Object.assign || function(e) { for (var t2, r = 1, n = arguments.length; r < n; r++) for (var o in t2 = arguments[r]) Object.prototype.hasOwnProperty.call(t2, o) && (e[o] = t2[o]); return e; }, __assign$1.apply(this, arguments); }, Intern$1 = function() { function e(e2) { this.options = __assign$1({ stringify: String, convert: function(e3) { return e3; } }, e2), this.items = [], this.offsets = /* @__PURE__ */ Object.create(null); } return e.prototype.add = function(e2) { var t2 = this.options.convert(e2); if (!t2) return -1; var r = this.options.stringify(t2), n = this.offsets[r]; return void 0 === n && (n = this.items.push(t2) - 1, this.offsets[r] = n), n; }, e.prototype.get = function(e2) { return this.items[e2]; }, e.prototype.map = function(e2) { return this.items.map(e2); }, e; }(), intern = Intern$1, visitor$a = visitor_1, asts$7 = asts_1, GrammarError$2 = grammarError, ALWAYS_MATCH$1 = 1, SOMETIMES_MATCH$1 = 0, NEVER_MATCH$1 = -1; function inferenceMatchResult$1(e) { function t2(e2) { return e2.match = SOMETIMES_MATCH$1; } function r(e2) { return u(e2.expression), e2.match = ALWAYS_MATCH$1; } function n(e2) { return e2.match = u(e2.expression); } function o(e2, t3) { for (var r2 = e2.length, n2 = 0, o2 = 0, a = 0; a < r2; ++a) { var i = u(e2[a]); i === ALWAYS_MATCH$1 && ++n2, i === NEVER_MATCH$1 && ++o2; } return n2 === r2 ? ALWAYS_MATCH$1 : t3 ? o2 === r2 ? NEVER_MATCH$1 : SOMETIMES_MATCH$1 : o2 > 0 ? NEVER_MATCH$1 : SOMETIMES_MATCH$1; } var u = visitor$a.build({ rule: function(e2) { var t3 = void 0, r2 = 0; if (void 0 === e2.match) { e2.match = SOMETIMES_MATCH$1; do { if (t3 = e2.match, e2.match = u(e2.expression), ++r2 > 6) throw new GrammarError$2("Infinity cycle detected when trying to evaluate node match result", e2.location); } while (t3 !== e2.match); } return e2.match; }, named: n, choice: function(e2) { return e2.match = o(e2.alternatives, true); }, action: n, sequence: function(e2) { return e2.match = o(e2.elements, false); }, labeled: n, text: n, simple_and: n, simple_not: function(e2) { return e2.match = -u(e2.expression); }, optional: r, zero_or_more: r, one_or_more: n, repeated: function(e2) { var t3 = u(e2.expression), r2 = e2.delimiter ? u(e2.delimiter) : NEVER_MATCH$1, n2 = e2.min ? e2.min : e2.max; return "constant" !== n2.type || "constant" !== e2.max.type ? e2.match = SOMETIMES_MATCH$1 : 0 === e2.max.value || null !== e2.max.value && n2.value > e2.max.value ? e2.match = NEVER_MATCH$1 : t3 === NEVER_MATCH$1 ? e2.match = 0 === n2.value ? ALWAYS_MATCH$1 : NEVER_MATCH$1 : t3 === ALWAYS_MATCH$1 ? e2.delimiter && n2.value >= 2 ? e2.match = r2 : e2.match = ALWAYS_MATCH$1 : e2.delimiter && n2.value >= 2 ? e2.match = r2 === NEVER_MATCH$1 ? NEVER_MATCH$1 : SOMETIMES_MATCH$1 : e2.match = 0 === n2.value ? ALWAYS_MATCH$1 : SOMETIMES_MATCH$1; }, group: n, semantic_and: t2, semantic_not: t2, rule_ref: function(t3) { var r2 = asts$7.findRule(e, t3.name); return r2 ? t3.match = u(r2) : SOMETIMES_MATCH$1; }, library_ref: function() { return 0; }, literal: function(e2) { var t3 = 0 === e2.value.length ? ALWAYS_MATCH$1 : SOMETIMES_MATCH$1; return e2.match = t3; }, class: function(e2) { var t3 = 0 === e2.parts.length ? NEVER_MATCH$1 : SOMETIMES_MATCH$1; return e2.match = t3; }, any: t2 }); u(e); } inferenceMatchResult$1.ALWAYS_MATCH = ALWAYS_MATCH$1, inferenceMatchResult$1.SOMETIMES_MATCH = SOMETIMES_MATCH$1, inferenceMatchResult$1.NEVER_MATCH = NEVER_MATCH$1; var inferenceMatchResult_1 = inferenceMatchResult$1, __spreadArray$3 = commonjsGlobal && commonjsGlobal.__spreadArray || function(e, t2, r) { if (r || 2 === arguments.length) for (var n, o = 0, u = t2.length; o < u; o++) !n && o in t2 || (n || (n = Array.prototype.slice.call(t2, 0, o)), n[o] = t2[o]); return e.concat(n || Array.prototype.slice.call(t2)); }, asts$6 = asts_1, op$1 = opcodes_1, visitor$9 = visitor_1, Intern = intern, _a$1 = inferenceMatchResult_1, ALWAYS_MATCH = _a$1.ALWAYS_MATCH, SOMETIMES_MATCH = _a$1.SOMETIMES_MATCH, NEVER_MATCH = _a$1.NEVER_MATCH; function generateBytecode$1(e, t2) { var r = new Intern(), n = new Intern({ stringify: JSON.stringify, convert: function(e2) { return { value: e2.parts, inverted: e2.inverted, ignoreCase: e2.ignoreCase }; } }), o = new Intern({ stringify: JSON.stringify }), u = new Intern(), a = [], i = []; function s(e2, t3, r2) { var n2 = { predicate: e2, params: t3, body: r2.code, location: r2.codeLocation }, o2 = JSON.stringify(n2), u2 = a.findIndex(function(e3) { return JSON.stringify(e3) === o2; }); return -1 === u2 ? a.push(n2) - 1 : u2; } function c(e2) { return i.push(e2) - 1; } function l(e2) { var t3 = {}; return Object.keys(e2).forEach(function(r2) { t3[r2] = e2[r2]; }), t3; } function p(e2) { for (var t3 = [], r2 = 1; r2 < arguments.length; r2++) t3[r2 - 1] = arguments[r2]; return e2.concat.apply(e2, t3); } function f(e2, t3, r2, n2) { return e2 === ALWAYS_MATCH ? r2 : e2 === NEVER_MATCH ? n2 : t3.concat([r2.length, n2.length], r2, n2); } function h4(e2, t3, r2, n2) { var o2 = Object.keys(r2).map(function(e3) { return n2 - r2[e3]; }); return [op$1.CALL, e2, t3, o2.length].concat(o2); } function d(e2, t3, r2) { var n2 = e2.match || 0; return p([op$1.PUSH_CURR_POS], [op$1.SILENT_FAILS_ON], v(e2, { sp: r2.sp + 1, env: l(r2.env), action: null }), [op$1.SILENT_FAILS_OFF], f(t3 ? -n2 : n2, [t3 ? op$1.IF_ERROR : op$1.IF_NOT_ERROR], p([op$1.POP], [t3 ? op$1.POP : op$1.POP_CURR_POS], [op$1.PUSH_UNDEFINED]), p([op$1.POP], [t3 ? op$1.POP_CURR_POS : op$1.POP], [op$1.PUSH_FAILED]))); } function g(e2, t3, r2) { var n2 = s(true, Object.keys(r2.env), e2); return p([op$1.UPDATE_SAVED_POS], h4(n2, 0, r2.env, r2.sp), f(e2.match || 0, [op$1.IF], p([op$1.POP], t3 ? [op$1.PUSH_FAILED] : [op$1.PUSH_UNDEFINED]), p([op$1.POP], t3 ? [op$1.PUSH_UNDEFINED] : [op$1.PUSH_FAILED]))); } function A(e2) { return t3 = [op$1.WHILE_NOT_ERROR], r2 = p([op$1.APPEND], e2), t3.concat([r2.length], r2); var t3, r2; } function m(e2, t3, r2, n2) { switch (e2.type) { case "constant": return { pre: [], post: [], sp: r2 }; case "variable": return e2.sp = n2 + r2 - t3[e2.value], { pre: [], post: [], sp: r2 }; case "function": return e2.sp = n2, { pre: h4(s(true, Object.keys(t3), { code: e2.value, codeLocation: e2.codeLocation }), 0, t3, r2), post: [op$1.NIP], sp: r2 + 1 }; default: throw function(e3) { return new Error('Unknown boundary type "'.concat(e3.type, '" for the "repeated" node')); }(e2); } } function _(e2, t3) { if (null !== t3.value) { var r2 = "constant" === t3.type ? [op$1.IF_GE, t3.value] : [op$1.IF_GE_DYNAMIC, t3.sp || 0]; return f(SOMETIMES_MATCH, r2, [op$1.PUSH_FAILED], e2); } return e2; } var E, v = (E = { grammar: function(e2) { e2.rules.forEach(v), e2.literals = r.items, e2.classes = n.items, e2.expectations = o.items, e2.importedNames = u.items, e2.functions = a, e2.locations = i; }, rule: function(e2) { e2.bytecode = v(e2.expression, { sp: -1, env: {}, pluck: [], action: null }); }, named: function(e2, t3) { var r2 = e2.match || 0, n2 = r2 === NEVER_MATCH ? -1 : o.add({ type: "rule", value: e2.name }); return p([op$1.SILENT_FAILS_ON], v(e2.expression, t3), [op$1.SILENT_FAILS_OFF], f(r2, [op$1.IF_ERROR], [op$1.FAIL, n2], [])); }, choice: function(e2, t3) { return function e3(t4, r2) { var n2 = t4[0].match || 0, o2 = v(t4[0], { sp: r2.sp, env: l(r2.env), action: null }); return n2 === ALWAYS_MATCH ? o2 : p(o2, t4.length > 1 ? f(SOMETIMES_MATCH, [op$1.IF_ERROR], p([op$1.POP], e3(t4.slice(1), r2)), []) : []); }(e2.alternatives, t3); }, action: function(e2, t3) { var r2 = l(t3.env), n2 = "sequence" !== e2.expression.type || 0 === e2.expression.elements.length, o2 = v(e2.expression, { sp: t3.sp + (n2 ? 1 : 0), env: r2, action: e2 }), u2 = e2.expression.match || 0, a2 = n2 && u2 !== NEVER_MATCH ? s(false, Object.keys(r2), e2) : -1; return n2 ? p([op$1.PUSH_CURR_POS], o2, f(u2, [op$1.IF_NOT_ERROR], p([op$1.LOAD_SAVED_POS, 1], h4(a2, 1, r2, t3.sp + 2)), []), [op$1.NIP]) : o2; }, sequence: function(e2, t3) { return p([op$1.PUSH_CURR_POS], function t4(r2, n2) { if (r2.length > 0) { var o2 = e2.elements.length - r2.length + 1; return p(v(r2[0], { sp: n2.sp, env: n2.env, pluck: n2.pluck, action: null }), f(r2[0].match || 0, [op$1.IF_NOT_ERROR], t4(r2.slice(1), { sp: n2.sp + 1, env: n2.env, pluck: n2.pluck, action: n2.action }), p(o2 > 1 ? [op$1.POP_N, o2] : [op$1.POP], [op$1.POP_CURR_POS], [op$1.PUSH_FAILED]))); } if (n2.pluck && n2.pluck.length > 0) return p([op$1.PLUCK, e2.elements.length + 1, n2.pluck.length], n2.pluck.map(function(e3) { return n2.sp - e3; })); if (n2.action) { var u2 = s(false, Object.keys(n2.env), n2.action); return p([op$1.LOAD_SAVED_POS, e2.elements.length], h4(u2, e2.elements.length + 1, n2.env, n2.sp)); } return p([op$1.WRAP, e2.elements.length], [op$1.NIP]); }(e2.elements, { sp: t3.sp + 1, env: t3.env, pluck: [], action: t3.action })); }, labeled: function(e2, n2) { var o2 = n2.env, u2 = e2.label, a2 = n2.sp + 1; u2 && (o2 = l(n2.env), n2.env[u2] = a2), e2.pick && n2.pluck.push(a2); var i2 = v(e2.expression, { sp: n2.sp, env: o2, action: null }); return u2 && e2.labelLocation && t2 && "source-and-map" === t2.output ? p([op$1.SOURCE_MAP_LABEL_PUSH, a2, r.add(u2), c(e2.labelLocation)], i2, [op$1.SOURCE_MAP_LABEL_POP, a2]) : i2; }, text: function(e2, t3) { return p([op$1.PUSH_CURR_POS], v(e2.expression, { sp: t3.sp + 1, env: l(t3.env), action: null }), f(e2.match || 0, [op$1.IF_NOT_ERROR], p([op$1.POP], [op$1.TEXT]), [op$1.NIP])); }, simple_and: function(e2, t3) { return d(e2.expression, false, t3); }, simple_not: function(e2, t3) { return d(e2.expression, true, t3); }, optional: function(e2, t3) { return p(v(e2.expression, { sp: t3.sp, env: l(t3.env), action: null }), f(-(e2.expression.match || 0), [op$1.IF_ERROR], p([op$1.POP], [op$1.PUSH_NULL]), [])); }, zero_or_more: function(e2, t3) { var r2 = v(e2.expression, { sp: t3.sp + 1, env: l(t3.env), action: null }); return p([op$1.PUSH_EMPTY_ARRAY], r2, A(r2), [op$1.POP]); }, one_or_more: function(e2, t3) { var r2 = v(e2.expression, { sp: t3.sp + 1, env: l(t3.env), action: null }); return p([op$1.PUSH_EMPTY_ARRAY], r2, f(e2.expression.match || 0, [op$1.IF_NOT_ERROR], p(A(r2), [op$1.POP]), p([op$1.POP], [op$1.POP], [op$1.PUSH_FAILED]))); }, repeated: function(e2, t3) { var r2 = e2.min ? e2.min : e2.max, n2 = "constant" !== r2.type || r2.value > 0, o2 = "constant" !== e2.max.type && null !== e2.max.value, u2 = n2 ? 2 : 1, a2 = e2.min ? m(e2.min, t3.env, t3.sp, 2 + ("function" === e2.max.type ? 1 : 0)) : { pre: [], post: [], sp: t3.sp }, i2 = m(e2.max, t3.env, a2.sp, u2), s2 = v(e2.expression, { sp: i2.sp + u2, env: l(t3.env), action: null }), c2 = null !== e2.delimiter ? v(e2.expression, { sp: i2.sp + u2 + 1, env: l(t3.env), action: null }) : s2, h5 = function(e3, t4, r3, n3, o3) { return e3 ? p([op$1.PUSH_CURR_POS], v(e3, { sp: n3.sp + o3 + 1, env: l(n3.env), action: null }), f(e3.match || 0, [op$1.IF_NOT_ERROR], p([op$1.POP], r3, f(-t4, [op$1.IF_ERROR], [op$1.POP, op$1.POP_CURR_POS, op$1.PUSH_FAILED], [op$1.NIP])), [op$1.NIP])) : r3; }(e2.delimiter, e2.expression.match || 0, c2, t3, u2), d2 = _(h5, e2.max), g2 = o2 ? _(s2, e2.max) : s2, E2 = p(n2 ? [op$1.PUSH_CURR_POS] : [], [op$1.PUSH_EMPTY_ARRAY], g2, A(d2), [op$1.POP]); return p(a2.pre, i2.pre, n2 ? function(e3, t4) { var r3 = "constant" === t4.type ? [op$1.IF_LT, t4.value] : [op$1.IF_LT_DYNAMIC, t4.sp || 0]; return p(e3, f(SOMETIMES_MATCH, r3, [op$1.POP, op$1.POP_CURR_POS, op$1.PUSH_FAILED], [op$1.NIP])); }(E2, r2) : E2, i2.post, a2.post); }, group: function(e2, t3) { return v(e2.expression, { sp: t3.sp, env: l(t3.env), action: null }); }, semantic_and: function(e2, t3) { return g(e2, false, t3); }, semantic_not: function(e2, t3) { return g(e2, true, t3); }, rule_ref: function(t3) { return [op$1.RULE, asts$6.indexOfRule(e, t3.name)]; }, library_ref: function(e2) { return [op$1.LIBRARY_RULE, e2.libraryNumber, u.add(e2.name)]; }, literal: function(e2) { if (e2.value.length > 0) { var t3 = e2.match || 0, n2 = t3 === SOMETIMES_MATCH || t3 === ALWAYS_MATCH && !e2.ignoreCase ? r.add(e2.ignoreCase ? e2.value.toLowerCase() : e2.value) : -1, u2 = t3 !== ALWAYS_MATCH ? o.add({ type: "literal", value: e2.value, ignoreCase: e2.ignoreCase }) : -1; return f(t3, e2.ignoreCase ? [op$1.MATCH_STRING_IC, n2] : [op$1.MATCH_STRING, n2], e2.ignoreCase ? [op$1.ACCEPT_N, e2.value.length] : [op$1.ACCEPT_STRING, n2], [op$1.FAIL, u2]); } return [op$1.PUSH_EMPTY_STRING]; }, class: function(e2) { var t3 = e2.match || 0, r2 = t3 === SOMETIMES_MATCH ? n.add(e2) : -1, u2 = t3 !== ALWAYS_MATCH ? o.add({ type: "class", value: e2.parts, inverted: e2.inverted, ignoreCase: e2.ignoreCase }) : -1; return f(t3, [op$1.MATCH_CHAR_CLASS, r2], [op$1.ACCEPT_N, 1], [op$1.FAIL, u2]); }, any: function(e2) { var t3 = e2.match || 0, r2 = t3 !== ALWAYS_MATCH ? o.add({ type: "any" }) : -1; return f(t3, [op$1.MATCH_ANY], [op$1.ACCEPT_N, 1], [op$1.FAIL, r2]); } }, t2 && "source-and-map" === t2.output && Object.keys(E).forEach(function(e2) { var t3 = E[e2]; E[e2] = function(e3) { for (var r2 = [], n2 = 1; n2 < arguments.length; n2++) r2[n2 - 1] = arguments[n2]; var o2 = t3.apply(void 0, __spreadArray$3([e3], r2, false)); return void 0 !== o2 && e3.location ? p([op$1.SOURCE_MAP_PUSH, c(e3.location)], o2, [op$1.SOURCE_MAP_POP]) : o2; }; }), visitor$9.build(E)); v(e); } var generateBytecode_1 = generateBytecode$1, sourceMap = {}, sourceMapGenerator = {}, base64Vlq = {}, base64$3 = {}; const intToCharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""); base64$3.encode = function(e) { if (0 <= e && e < intToCharMap.length) return intToCharMap[e]; throw new TypeError("Must be between 0 and 63: " + e); }; const base64$2 = base64$3, VLQ_BASE_SHIFT = 5, VLQ_BASE = 1 << VLQ_BASE_SHIFT, VLQ_BASE_MASK = VLQ_BASE - 1, VLQ_CONTINUATION_BIT = VLQ_BASE; function toVLQSigned(e) { return e < 0 ? 1 + (-e << 1) : 0 + (e << 1); } base64Vlq.encode = function(e) { let t2, r = "", n = toVLQSigned(e); do { t2 = n & VLQ_BASE_MASK, n >>>= VLQ_BASE_SHIFT, n > 0 && (t2 |= VLQ_CONTINUATION_BIT), r += base64$2.encode(t2); } while (n > 0); return r; }; var util$3 = {}; function getArg(e, t2, r) { if (t2 in e) return e[t2]; if (3 === arguments.length) return r; throw new Error('"' + t2 + '" is a required argument.'); } util$3.getArg = getArg; const supportsNullProto = !("__proto__" in /* @__PURE__ */ Object.create(null)); function identity(e) { return e; } function toSetString(e) { return isProtoString(e) ? "$" + e : e; } function fromSetString(e) { return isProtoString(e) ? e.slice(1) : e; } function isProtoString(e) { if (!e) return false; const t2 = e.length; if (t2 < 9) return false; if (95 !== e.charCodeAt(t2 - 1) || 95 !== e.charCodeAt(t2 - 2) || 111 !== e.charCodeAt(t2 - 3) || 116 !== e.charCodeAt(t2 - 4) || 111 !== e.charCodeAt(t2 - 5) || 114 !== e.charCodeAt(t2 - 6) || 112 !== e.charCodeAt(t2 - 7) || 95 !== e.charCodeAt(t2 - 8) || 95 !== e.charCodeAt(t2 - 9)) return false; for (let r = t2 - 10; r >= 0; r--) if (36 !== e.charCodeAt(r)) return false; return true; } function strcmp(e, t2) { return e === t2 ? 0 : null === e ? 1 : null === t2 ? -1 : e > t2 ? 1 : -1; } function compareByGeneratedPositionsInflated(e, t2) { let r = e.generatedLine - t2.generatedLine; return 0 !== r ? r : (r = e.generatedColumn - t2.generatedColumn, 0 !== r ? r : (r = strcmp(e.source, t2.source), 0 !== r ? r : (r = e.originalLine - t2.originalLine, 0 !== r ? r : (r = e.originalColumn - t2.originalColumn, 0 !== r ? r : strcmp(e.name, t2.name))))); } util$3.toSetString = supportsNullProto ? identity : toSetString, util$3.fromSetString = supportsNullProto ? identity : fromSetString, util$3.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; const PROTOCOL = "http:", PROTOCOL_AND_HOST = `${PROTOCOL}//host`; function createSafeHandler(e) { return (t2) => { const r = getURLType(t2), n = buildSafeBase(t2), o = new URL(t2, n); e(o); const u = o.toString(); return "absolute" === r ? u : "scheme-relative" === r ? u.slice(PROTOCOL.length) : "path-absolute" === r ? u.slice(PROTOCOL_AND_HOST.length) : computeRelativeURL(n, u); }; } function withBase(e, t2) { return new URL(e, t2).toString(); } function buildUniqueSegment(e, t2) { let r = 0; for (; ; ) { const n = e + r++; if (-1 === t2.indexOf(n)) return n; } } function buildSafeBase(e) { const t2 = e.split("..").length - 1, r = buildUniqueSegment("p", e); let n = `${PROTOCOL_AND_HOST}/`; for (let e2 = 0; e2 < t2; e2++) n += `${r}/`; return n; } const ABSOLUTE_SCHEME = /^[A-Za-z0-9\+\-\.]+:/; function getURLType(e) { return "/" === e[0] ? "/" === e[1] ? "scheme-relative" : "path-absolute" : ABSOLUTE_SCHEME.test(e) ? "absolute" : "path-relative"; } function computeRelativeURL(e, t2) { "string" == typeof e && (e = new URL(e)), "string" == typeof t2 && (t2 = new URL(t2)); const r = t2.pathname.split("/"), n = e.pathname.split("/"); for (n.length > 0 && !n[n.length - 1] && n.pop(); r.length > 0 && n.length > 0 && r[0] === n[0]; ) r.shift(), n.shift(); return n.map(() => "..").concat(r).join("/") + t2.search + t2.hash; } const ensureDirectory = createSafeHandler((e) => { e.pathname = e.pathname.replace(/\/?$/, "/"); }), normalize = createSafeHandler((e) => { }); function join(e, t2) { const r = getURLType(t2), n = getURLType(e); if (e = ensureDirectory(e), "absolute" === r) return withBase(t2, void 0); if ("absolute" === n) return withBase(t2, e); if ("scheme-relative" === r) return normalize(t2); if ("scheme-relative" === n) return withBase(t2, withBase(e, PROTOCOL_AND_HOST)).slice(PROTOCOL.length); if ("path-absolute" === r) return normalize(t2); if ("path-absolute" === n) return withBase(t2, withBase(e, PROTOCOL_AND_HOST)).slice(PROTOCOL_AND_HOST.length); const o = buildSafeBase(t2 + e); return computeRelativeURL(o, withBase(t2, withBase(e, o))); } function relative(e, t2) { const r = relativeIfPossible(e, t2); return "string" == typeof r ? r : normalize(t2); } function relativeIfPossible(e, t2) { if (getURLType(e) !== getURLType(t2)) return null; const r = buildSafeBase(e + t2), n = new URL(e, r), o = new URL(t2, r); try { new URL("", o.toString()); } catch (e2) { return null; } return o.protocol !== n.protocol || o.user !== n.user || o.password !== n.password || o.hostname !== n.hostname || o.port !== n.port ? null : computeRelativeURL(n, o); } util$3.normalize = normalize, util$3.join = join, util$3.relative = relative; var arraySet = {}; let ArraySet$1 = class e { constructor() { this._array = [], this._set = /* @__PURE__ */ new Map(); } static fromArray(t2, r) { const n = new e(); for (let e2 = 0, o = t2.length; e2 < o; e2++) n.add(t2[e2], r); return n; } size() { return this._set.size; } add(e2, t2) { const r = this.has(e2), n = this._array.length; r && !t2 || this._array.push(e2), r || this._set.set(e2, n); } has(e2) { return this._set.has(e2); } indexOf(e2) { const t2 = this._set.get(e2); if (t2 >= 0) return t2; throw new Error('"' + e2 + '" is not in the set.'); } at(e2) { if (e2 >= 0 && e2 < this._array.length) return this._array[e2]; throw new Error("No element indexed by " + e2); } toArray() { return this._array.slice(); } }; arraySet.ArraySet = ArraySet$1; var mappingList = {}; const util$2 = util$3; function generatedPositionAfter(e, t2) { const r = e.generatedLine, n = t2.generatedLine, o = e.generatedColumn, u = t2.generatedColumn; return n > r || n == r && u >= o || util$2.compareByGeneratedPositionsInflated(e, t2) <= 0; } let MappingList$1 = class { constructor() { this._array = [], this._sorted = true, this._last = { generatedLine: -1, generatedColumn: 0 }; } unsortedForEach(e, t2) { this._array.forEach(e, t2); } add(e) { generatedPositionAfter(this._last, e) ? (this._last = e, this._array.push(e)) : (this._sorted = false, this._array.push(e)); } toArray() { return this._sorted || (this._array.sort(util$2.compareByGeneratedPositionsInflated), this._sorted = true), this._array; } }; mappingList.MappingList = MappingList$1; const base64VLQ = base64Vlq, util$1 = util$3, ArraySet = arraySet.ArraySet, MappingList = mappingList.MappingList; let SourceMapGenerator$1 = class e { constructor(e2) { e2 || (e2 = {}), this._file = util$1.getArg(e2, "file", null), this._sourceRoot = util$1.getArg(e2, "sourceRoot", null), this._skipValidation = util$1.getArg(e2, "skipValidation", false), this._sources = new ArraySet(), this._names = new ArraySet(), this._mappings = new MappingList(), this._sourcesContents = null; } static fromSourceMap(t2) { const r = t2.sourceRoot, n = new e({ file: t2.file, sourceRoot: r }); return t2.eachMapping(function(e2) { const t3 = { generated: { line: e2.generatedLine, column: e2.generatedColumn } }; null != e2.source && (t3.source = e2.source, null != r && (t3.source = util$1.relative(r, t3.source)), t3.original = { line: e2.originalLine, column: e2.originalColumn }, null != e2.name && (t3.name = e2.name)), n.addMapping(t3); }), t2.sources.forEach(function(e2) { let o = e2; null != r && (o = util$1.relative(r, e2)), n._sources.has(o) || n._sources.add(o); const u = t2.sourceContentFor(e2); null != u && n.setSourceContent(e2, u); }), n; } addMapping(e2) { const t2 = util$1.getArg(e2, "generated"), r = util$1.getArg(e2, "original", null); let n = util$1.getArg(e2, "source", null), o = util$1.getArg(e2, "name", null); this._skipValidation || this._validateMapping(t2, r, n, o), null != n && (n = String(n), this._sources.has(n) || this._sources.add(n)), null != o && (o = String(o), this._names.has(o) || this._names.add(o)), this._mappings.add({ generatedLine: t2.line, generatedColumn: t2.column, originalLine: r && r.line, originalColumn: r && r.column, source: n, name: o }); } setSourceContent(e2, t2) { let r = e2; null != this._sourceRoot && (r = util$1.relative(this._sourceRoot, r)), null != t2 ? (this._sourcesContents || (this._sourcesContents = /* @__PURE__ */ Object.create(null)), this._sourcesContents[util$1.toSetString(r)] = t2) : this._sourcesContents && (delete this._sourcesContents[util$1.toSetString(r)], 0 === Object.keys(this._sourcesContents).length && (this._sourcesContents = null)); } applySourceMap(e2, t2, r) { let n = t2; if (null == t2) { if (null == e2.file) throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`); n = e2.file; } const o = this._sourceRoot; null != o && (n = util$1.relative(o, n)); const u = this._mappings.toArray().length > 0 ? new ArraySet() : this._sources, a = new ArraySet(); this._mappings.unsortedForEach(function(t3) { if (t3.source === n && null != t3.originalLine) { const n2 = e2.originalPositionFor({ line: t3.originalLine, column: t3.originalColumn }); null != n2.source && (t3.source = n2.source, null != r && (t3.source = util$1.join(r, t3.source)), null != o && (t3.source = util$1.relative(o, t3.source)), t3.originalLine = n2.line, t3.originalColumn = n2.column, null != n2.name && (t3.name = n2.name)); } const i = t3.source; null == i || u.has(i) || u.add(i); const s = t3.name; null == s || a.has(s) || a.add(s); }, this), this._sources = u, this._names = a, e2.sources.forEach(function(t3) { const n2 = e2.sourceContentFor(t3); null != n2 && (null != r && (t3 = util$1.join(r, t3)), null != o && (t3 = util$1.relative(o, t3)), this.setSourceContent(t3, n2)); }, this); } _validateMapping(e2, t2, r, n) { if (t2 && "number" != typeof t2.line && "number" != typeof t2.column) throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values."); if (e2 && "line" in e2 && "column" in e2 && e2.line > 0 && e2.column >= 0 && !t2 && !r && !n) ; else if (!(e2 && "line" in e2 && "column" in e2 && t2 && "line" in t2 && "column" in t2 && e2.line > 0 && e2.column >= 0 && t2.line > 0 && t2.column >= 0 && r)) throw new Error("Invalid mapping: " + JSON.stringify({ generated: e2, source: r, original: t2, name: n })); } _serializeMappings() { let e2, t2, r, n, o = 0, u = 1, a = 0, i = 0, s = 0, c = 0, l = ""; const p = this._mappings.toArray(); for (let f = 0, h4 = p.length; f < h4; f++) { if (t2 = p[f], e2 = "", t2.generatedLine !== u) for (o = 0; t2.generatedLine !== u; ) e2 += ";", u++; else if (f > 0) { if (!util$1.compareByGeneratedPositionsInflated(t2, p[f - 1])) continue; e2 += ","; } e2 += base64VLQ.encode(t2.generatedColumn - o), o = t2.generatedColumn, null != t2.source && (n = this._sources.indexOf(t2.source), e2 += base64VLQ.encode(n - c), c = n, e2 += base64VLQ.encode(t2.originalLine - 1 - i), i = t2.originalLine - 1, e2 += base64VLQ.encode(t2.originalColumn - a), a = t2.originalColumn, null != t2.name && (r = this._names.indexOf(t2.name), e2 += base64VLQ.encode(r - s), s = r)), l += e2; } return l; } _generateSourcesContent(e2, t2) { return e2.map(function(e3) { if (!this._sourcesContents) return null; null != t2 && (e3 = util$1.relative(t2, e3)); const r = util$1.toSetString(e3); return Object.prototype.hasOwnProperty.call(this._sourcesContents, r) ? this._sourcesContents[r] : null; }, this); } toJSON() { const e2 = { version: this._version, sources: this._sources.toArray(), names: this._names.toArray(), mappings: this._serializeMappings() }; return null != this._file && (e2.file = this._file), null != this._sourceRoot && (e2.sourceRoot = this._sourceRoot), this._sourcesContents && (e2.sourcesContent = this._generateSourcesContent(e2.sources, e2.sourceRoot)), e2; } toString() { return JSON.stringify(this.toJSON()); } }; SourceMapGenerator$1.prototype._version = 3, sourceMapGenerator.SourceMapGenerator = SourceMapGenerator$1; var sourceNode = {}; const SourceMapGenerator = sourceMapGenerator.SourceMapGenerator, util = util$3, REGEX_NEWLINE = /(\r?\n)/, NEWLINE_CODE = 10, isSourceNode = "$$$isSourceNode$$$"; let SourceNode$2 = class e { constructor(e2, t2, r, n, o) { this.children = [], this.sourceContents = {}, this.line = null == e2 ? null : e2, this.column = null == t2 ? null : t2, this.source = null == r ? null : r, this.name = null == o ? null : o, this[isSourceNode] = true, null != n && this.add(n); } static fromStringWithSourceMap(t2, r, n) { const o = new e(), u = t2.split(REGEX_NEWLINE); let a = 0; const i = function() { return e2() + (e2() || ""); function e2() { return a < u.length ? u[a++] : void 0; } }; let s, c = 1, l = 0, p = null; return r.eachMapping(function(e2) { if (null !== p) { if (!(c < e2.generatedLine)) { s = u[a] || ""; const t3 = s.substr(0, e2.generatedColumn - l); return u[a] = s.substr(e2.generatedColumn - l), l = e2.generatedColumn, f(p, t3), void (p = e2); } f(p, i()), c++, l = 0; } for (; c < e2.generatedLine; ) o.add(i()), c++; l < e2.generatedColumn && (s = u[a] || "", o.add(s.substr(0, e2.generatedColumn)), u[a] = s.substr(e2.generatedColumn), l = e2.generatedColumn), p = e2; }, this), a < u.length && (p && f(p, i()), o.add(u.splice(a).join(""))), r.sources.forEach(function(e2) { const t3 = r.sourceContentFor(e2); null != t3 && (null != n && (e2 = util.join(n, e2)), o.setSourceContent(e2, t3)); }), o; function f(t3, r2) { if (null === t3 || void 0 === t3.source) o.add(r2); else { const u2 = n ? util.join(n, t3.source) : t3.source; o.add(new e(t3.originalLine, t3.originalColumn, u2, r2, t3.name)); } } } add(e2) { if (Array.isArray(e2)) e2.forEach(function(e3) { this.add(e3); }, this); else { if (!e2[isSourceNode] && "string" != typeof e2) throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + e2); e2 && this.children.push(e2); } return this; } prepend(e2) { if (Array.isArray(e2)) for (let t2 = e2.length - 1; t2 >= 0; t2--) this.prepend(e2[t2]); else { if (!e2[isSourceNode] && "string" != typeof e2) throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + e2); this.children.unshift(e2); } return this; } walk(e2) { let t2; for (let r = 0, n = this.children.length; r < n; r++) t2 = this.children[r], t2[isSourceNode] ? t2.walk(e2) : "" !== t2 && e2(t2, { source: this.source, line: this.line, column: this.column, name: this.name }); } join(e2) { let t2, r; const n = this.children.length; if (n > 0) { for (t2 = [], r = 0; r < n - 1; r++) t2.push(this.children[r]), t2.push(e2); t2.push(this.children[r]), this.children = t2; } return this; } replaceRight(e2, t2) { const r = this.children[this.children.length - 1]; return r[isSourceNode] ? r.replaceRight(e2, t2) : "string" == typeof r ? this.children[this.children.length - 1] = r.replace(e2, t2) : this.children.push("".replace(e2, t2)), this; } setSourceContent(e2, t2) { this.sourceContents[util.toSetString(e2)] = t2; } walkSourceContents(e2) { for (let t3 = 0, r = this.children.length; t3 < r; t3++) this.children[t3][isSourceNode] && this.children[t3].walkSourceContents(e2); const t2 = Object.keys(this.sourceContents); for (let r = 0, n = t2.length; r < n; r++) e2(util.fromSetString(t2[r]), this.sourceContents[t2[r]]); } toString() { let e2 = ""; return this.walk(function(t2) { e2 += t2; }), e2; } toStringWithSourceMap(e2) { const t2 = { code: "", line: 1, column: 0 }, r = new SourceMapGenerator(e2); let n = false, o = null, u = null, a = null, i = null; return this.walk(function(e3, s) { t2.code += e3, null !== s.source && null !== s.line && null !== s.column ? (o === s.source && u === s.line && a === s.column && i === s.name || r.addMapping({ source: s.source, original: { line: s.line, column: s.column }, generated: { line: t2.line, column: t2.column }, name: s.name }), o = s.source, u = s.line, a = s.column, i = s.name, n = true) : n && (r.addMapping({ generated: { line: t2.line, column: t2.column } }), o = null, n = false); for (let u2 = 0, a2 = e3.length; u2 < a2; u2++) e3.charCodeAt(u2) === NEWLINE_CODE ? (t2.line++, t2.column = 0, u2 + 1 === a2 ? (o = null, n = false) : n && r.addMapping({ source: s.source, original: { line: s.line, column: s.column }, generated: { line: t2.line, column: t2.column }, name: s.name })) : t2.column++; }), this.walkSourceContents(function(e3, t3) { r.setSourceContent(e3, t3); }), { code: t2.code, map: r }; } }; sourceNode.SourceNode = SourceNode$2, sourceMap.SourceMapGenerator = sourceMapGenerator.SourceMapGenerator, sourceMap.SourceNode = sourceNode.SourceNode; var SourceNode$1 = sourceMap.SourceNode, GrammarLocation$2 = grammarLocation, Stack$1 = function() { function e(e2, t2, r, n) { this.sp = -1, this.maxSp = -1, this.varName = t2, this.ruleName = e2, this.type = r, this.bytecode = n, this.labels = {}, this.sourceMapStack = []; } return e.prototype.name = function(e2) { if (e2 < 0) throw new RangeError("Rule '".concat(this.ruleName, "': The variable stack underflow: attempt to use a variable '").concat(this.varName, "' at an index ").concat(e2, ".\nBytecode: ").concat(this.bytecode)); return this.varName + e2; }, e.sourceNode = function(e2, t2, r) { var n = GrammarLocation$2.offsetStart(e2); return new SourceNode$1(n.line, n.column ? n.column - 1 : null, String(e2.source), t2, r); }, e.prototype.push = function(t2) { ++this.sp > this.maxSp && (this.maxSp = this.sp); var r = this.labels[this.sp], n = [this.name(this.sp), " = ", t2, ";"]; if (r) { if (this.sourceMapStack.length) { var o = e.sourceNode(r.location, n.splice(0, 2), r.label), u = this.sourceMapPopInternal(), a = u.parts, i = u.location, s = i.start.offset < r.location.end.offset ? { start: r.location.end, end: i.end, source: i.source } : i, c = e.sourceNode(s, n.concat("\n")); return this.sourceMapStack.push([a, a.length + 1, i]), new SourceNode$1(null, null, r.location.source, [o, c]); } return e.sourceNode(r.location, n.concat("\n")); } return n.join(""); }, e.prototype.pop = function(e2) { var t2 = this; return void 0 !== e2 ? (this.sp -= e2, Array.from({ length: e2 }, function(e3, r) { return t2.name(t2.sp + 1 + r); })) : this.name(this.sp--); }, e.prototype.top = function() { return this.name(this.sp); }, e.prototype.index = function(e2) { if (e2 < 0) throw new RangeError("Rule '".concat(this.ruleName, "': The variable stack overflow: attempt to get a variable at a negative index ").concat(e2, ".\nBytecode: ").concat(this.bytecode)); return this.name(this.sp - e2); }, e.prototype.result = function() { if (this.maxSp < 0) throw new RangeError("Rule '".concat(this.ruleName, "': The variable stack is empty, can't get the result.\nBytecode: ").concat(this.bytecode)); return this.name(0); }, e.prototype.defines = function() { var e2 = this; return this.maxSp < 0 ? "" : this.type + " " + Array.from({ length: this.maxSp + 1 }, function(t2, r) { return e2.name(r); }).join(", ") + ";"; }, e.prototype.checkedIf = function(e2, t2, r) { var n = this.sp, o = t2(); if (!r) return [o]; var u = this.sp; this.sp = n; var a = r(); if (u !== this.sp) throw new Error("Rule '" + this.ruleName + "', position " + e2 + ": Branches of a condition can't move the stack pointer differently (before: " + n + ", after then: " + u + ", after else: " + this.sp + "). Bytecode: " + this.bytecode); return [o, a]; }, e.prototype.checkedLoop = function(e2, t2) { var r = this.sp, n = t2(); if (r !== this.sp) throw new Error("Rule '" + this.ruleName + "', position " + e2 + ": Body of a loop can't move the stack pointer (before: " + r + ", after: " + this.sp + "). Bytecode: " + this.bytecode); return n; }, e.prototype.sourceMapPush = function(e2, t2) { if (this.sourceMapStack.length) { var r = this.sourceMapStack[this.sourceMapStack.length - 1]; r[2].start.offset === t2.start.offset && r[2].end.offset > t2.end.offset && (r[2] = { start: t2.end, end: r[2].end, source: r[2].source }); } this.sourceMapStack.push([e2, e2.length, t2]); }, e.prototype.sourceMapPopInternal = function() { var e2 = this.sourceMapStack.pop(); if (!e2) throw new RangeError("Rule '".concat(this.ruleName, "': Attempting to pop an empty source map stack.\nBytecode: ").concat(this.bytecode)); var t2 = e2[0], r = e2[1], n = e2[2], o = t2.splice(r).map(function(e3) { return e3 instanceof SourceNode$1 ? e3 : e3 + "\n"; }); if (o.length) { var u = GrammarLocation$2.offsetStart(n); t2.push(new SourceNode$1(u.line, u.column - 1, String(n.source), o)); } return { parts: t2, location: n }; }, e.prototype.sourceMapPop = function(e2) { var t2 = this.sourceMapPopInternal().location; if (this.sourceMapStack.length && t2.end.offset < this.sourceMapStack[this.sourceMapStack.length - 1][2].end.offset) { var r = this.sourceMapPopInternal(), n = r.parts, o = r.location, u = o.start.offset < t2.end.offset ? { start: t2.end, end: o.end, source: o.source } : o; this.sourceMapStack.push([n, n.length + (e2 || 0), u]); } }, e; }(), stack = Stack$1, version = "4.0.3", utils = {}; function hex(e) { return e.charCodeAt(0).toString(16).toUpperCase(); } function stringEscape$1(e) { return e.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\x08/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\v/g, "\\v").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(e2) { return "\\x0" + hex(e2); }).replace(/[\x10-\x1F\x7F-\xFF]/g, function(e2) { return "\\x" + hex(e2); }).replace(/[\u0100-\u0FFF]/g, function(e2) { return "\\u0" + hex(e2); }).replace(/[\u1000-\uFFFF]/g, function(e2) { return "\\u" + hex(e2); }); } function regexpClassEscape$1(e) { return e.replace(/\\/g, "\\\\").replace(/\//g, "\\/").replace(/]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\x08/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\v/g, "\\v").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(e2) { return "\\x0" + hex(e2); }).replace(/[\x10-\x1F\x7F-\xFF]/g, function(e2) { return "\\x" + hex(e2); }).replace(/[\u0100-\u0FFF]/g, function(e2) { return "\\u0" + hex(e2); }).replace(/[\u1000-\uFFFF]/g, function(e2) { return "\\u" + hex(e2); }); } function base64$1(e) { for (var t2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", r = e.length % 3, n = e.length - r, o = "", u = 0; u < n; u += 3) o += t2[e[u] >> 2], o += t2[(3 & e[u]) << 4 | e[u + 1] >> 4], o += t2[(15 & e[u + 1]) << 2 | e[u + 2] >> 6], o += t2[63 & e[u + 2]]; return 1 === r ? (o += t2[e[n] >> 2], o += t2[(3 & e[n]) << 4], o += "==") : 2 === r && (o += t2[e[n] >> 2], o += t2[(3 & e[n]) << 4 | e[n + 1] >> 4], o += t2[(15 & e[n + 1]) << 2], o += "="), o; } utils.hex = hex, utils.stringEscape = stringEscape$1, utils.regexpClassEscape = regexpClassEscape$1, utils.base64 = base64$1; var OPS_TO_PREFIXED_TYPES = { $: "text", "&": "simple_and", "!": "simple_not" }, OPS_TO_SUFFIXED_TYPES = { "?": "optional", "*": "zero_or_more", "+": "one_or_more" }, OPS_TO_SEMANTIC_PREDICATE_TYPES = { "&": "semantic_and", "!": "semantic_not" }; function peg$subclass(e, t2) { function r() { this.constructor = e; } r.prototype = t2.prototype, e.prototype = new r(); } function peg$SyntaxError(e, t2, r, n) { var o = Error.call(this, e); return Object.setPrototypeOf && Object.setPrototypeOf(o, peg$SyntaxError.prototype), o.expected = t2, o.found = r, o.location = n, o.name = "SyntaxError", o; } function peg$padEnd(e, t2, r) { return r = r || " ", e.length > t2 ? e : (t2 -= e.length, e + (r += r.repeat(t2)).slice(0, t2)); } function peg$parse(e, t2) { var r, n = {}, o = (t2 = void 0 !== t2 ? t2 : {}).grammarSource, u = { Grammar: Ir, ImportsAndSource: function() { var t3, r2, o2; return t3 = Cr, r2 = function() { var t4, r3; return t4 = Cr, r3 = Cr, Mr(), r3 = e.substring(r3, Cr), yr = t4, Ct(r3); }(), o2 = function() { var t4, r3, o3, u2; for (t4 = Cr, r3 = Cr, o3 = [], e.length > Cr ? (u2 = e.charAt(Cr), Cr++) : (u2 = n, 0 === br && wr(se)); u2 !== n; ) o3.push(u2), e.length > Cr ? (u2 = e.charAt(Cr), Cr++) : (u2 = n, 0 === br && wr(se)); return r3 = e.substring(r3, Cr), yr = t4, vt(r3); }(), yr = t3, Et(r2, o2); } }, a = Ir, i = "import", s = ";", c = ",", l = "*", p = "as", f = "{", h4 = "}", d = "from", g = "=", A = "/", m = "@", _ = ":", E = "|", v = "..", C = "(", y = ")", $ = ".", S = "\n", F = "\r\n", b = "/*", P = "*/", x = "//", D = "\\", R = "i", B = '"', O = "'", L = "[", w = "^", I = "]", M = "-", T = "0", N = "b", k = "f", H = "n", U = "r", j = "t", G = "v", V = "x", Y = "u", z = /^[!$&]/, W = /^[*-+?]/, J = /^[!&]/, q = /^[\t\v-\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]/, Q = /^[\n\r\u2028\u2029]/, X = /^[\r\u2028-\u2029]/, K = /^[A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376-\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06E5-\u06E6\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4-\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0CF1-\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32-\u0E33\u0E40-\u0E46\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5-\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/, Z = /^[$0-9_\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u0669\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u06F0-\u06F9\u0711\u0730-\u074A\u07A6-\u07B0\u07C0-\u07C9\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962-\u0963\u0966-\u096F\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09E2-\u09E3\u09E6-\u09EF\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A51\u0A66-\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B62-\u0B63\u0B66-\u0B6F\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C62-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0CE2-\u0CE3\u0CE6-\u0CEF\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62-\u0D63\u0D66-\u0D6F\u0D82-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0E50-\u0E59\u0EB1\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EC8-\u0ECD\u0ED0-\u0ED9\u0F18-\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F3F\u0F71-\u0F84\u0F86-\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1040-\u1049\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17B4-\u17D3\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u18A9\u1920-\u192B\u1930-\u193B\u1946-\u194F\u19D0-\u19D9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AB0-\u1ABD\u1B00-\u1B04\u1B34-\u1B44\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BF3\u1C24-\u1C37\u1C40-\u1C49\u1C50-\u1C59\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8-\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u200C-\u200D\u203F-\u2040\u2054\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099-\u309A\uA620-\uA629\uA66F\uA674-\uA67D\uA69E-\uA69F\uA6F0-\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880-\uA881\uA8B4-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F1\uA900-\uA909\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9D0-\uA9D9\uA9E5\uA9F0-\uA9F9\uAA29-\uAA36\uAA43\uAA4C-\uAA4D\uAA50-\uAA59\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7-\uAAB8\uAABE-\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5-\uAAF6\uABE3-\uABEA\uABEC-\uABED\uABF0-\uABF9\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFE33-\uFE34\uFE4D-\uFE4F\uFF10-\uFF19\uFF3F]/, ee = /^[\n\r"\\\u2028-\u2029]/, te = /^[\n\r'\\\u2028-\u2029]/, re = /^[\n\r\\-\]\u2028-\u2029]/, ne = /^["'\\]/, oe = /^[0-9ux]/, ue = /^[0-9]/, ae = /^[0-9a-f]/i, ie = /^[{}]/, se = { type: "any" }, ce = Dr("import", false), le = Dr(";", false), pe = Dr(",", false), fe = Dr("*", false), he = Dr("as", false), de = Dr("{", false), ge = Dr("}", false), Ae = Dr("from", false), me = Dr("=", false), _e = Dr("/", false), Ee = Dr("@", false), ve = Dr(":", false), Ce = Rr(["!", "$", "&"], false, false), ye = Rr([["*", "+"], "?"], false, false), $e = Dr("|", false), Se = Dr("..", false), Fe = Dr("(", false), be = Dr(")", false), Pe = Dr(".", false), xe = Rr(["!", "&"], false, false), De = Br("whitespace"), Re = Rr([" ", ["\v", "\f"], " ", "\xA0", "\u1680", ["\u2000", "\u200A"], "\u202F", "\u205F", "\u3000", "\uFEFF"], false, false), Be = Rr(["\n", "\r", "\u2028", "\u2029"], false, false), Oe = Br("end of line"), Le = Dr("\n", false), we = Dr("\r\n", false), Ie = Rr(["\r", ["\u2028", "\u2029"]], false, false), Me = Br("comment"), Te = Dr("/*", false), Ne = Dr("*/", false), ke = Dr("//", false), He = Br("identifier"), Ue = Rr([["A", "Z"], "_", ["a", "z"], "\xAA", "\xB5", "\xBA", ["\xC0", "\xD6"], ["\xD8", "\xF6"], ["\xF8", "\u02C1"], ["\u02C6", "\u02D1"], ["\u02E0", "\u02E4"], "\u02EC", "\u02EE", ["\u0370", "\u0374"], ["\u0376", "\u0377"], ["\u037A", "\u037D"], "\u037F", "\u0386", ["\u0388", "\u038A"], "\u038C", ["\u038E", "\u03A1"], ["\u03A3", "\u03F5"], ["\u03F7", "\u0481"], ["\u048A", "\u052F"], ["\u0531", "\u0556"], "\u0559", ["\u0561", "\u0587"], ["\u05D0", "\u05EA"], ["\u05F0", "\u05F2"], ["\u0620", "\u064A"], ["\u066E", "\u066F"], ["\u0671", "\u06D3"], "\u06D5", ["\u06E5", "\u06E6"], ["\u06EE", "\u06EF"], ["\u06FA", "\u06FC"], "\u06FF", "\u0710", ["\u0712", "\u072F"], ["\u074D", "\u07A5"], "\u07B1", ["\u07CA", "\u07EA"], ["\u07F4", "\u07F5"], "\u07FA", ["\u0800", "\u0815"], "\u081A", "\u0824", "\u0828", ["\u0840", "\u0858"], ["\u08A0", "\u08B4"], ["\u0904", "\u0939"], "\u093D", "\u0950", ["\u0958", "\u0961"], ["\u0971", "\u0980"], ["\u0985", "\u098C"], ["\u098F", "\u0990"], ["\u0993", "\u09A8"], ["\u09AA", "\u09B0"], "\u09B2", ["\u09B6", "\u09B9"], "\u09BD", "\u09CE", ["\u09DC", "\u09DD"], ["\u09DF", "\u09E1"], ["\u09F0", "\u09F1"], ["\u0A05", "\u0A0A"], ["\u0A0F", "\u0A10"], ["\u0A13", "\u0A28"], ["\u0A2A", "\u0A30"], ["\u0A32", "\u0A33"], ["\u0A35", "\u0A36"], ["\u0A38", "\u0A39"], ["\u0A59", "\u0A5C"], "\u0A5E", ["\u0A72", "\u0A74"], ["\u0A85", "\u0A8D"], ["\u0A8F", "\u0A91"], ["\u0A93", "\u0AA8"], ["\u0AAA", "\u0AB0"], ["\u0AB2", "\u0AB3"], ["\u0AB5", "\u0AB9"], "\u0ABD", "\u0AD0", ["\u0AE0", "\u0AE1"], "\u0AF9", ["\u0B05", "\u0B0C"], ["\u0B0F", "\u0B10"], ["\u0B13", "\u0B28"], ["\u0B2A", "\u0B30"], ["\u0B32", "\u0B33"], ["\u0B35", "\u0B39"], "\u0B3D", ["\u0B5C", "\u0B5D"], ["\u0B5F", "\u0B61"], "\u0B71", "\u0B83", ["\u0B85", "\u0B8A"], ["\u0B8E", "\u0B90"], ["\u0B92", "\u0B95"], ["\u0B99", "\u0B9A"], "\u0B9C", ["\u0B9E", "\u0B9F"], ["\u0BA3", "\u0BA4"], ["\u0BA8", "\u0BAA"], ["\u0BAE", "\u0BB9"], "\u0BD0", ["\u0C05", "\u0C0C"], ["\u0C0E", "\u0C10"], ["\u0C12", "\u0C28"], ["\u0C2A", "\u0C39"], "\u0C3D", ["\u0C58", "\u0C5A"], ["\u0C60", "\u0C61"], ["\u0C85", "\u0C8C"], ["\u0C8E", "\u0C90"], ["\u0C92", "\u0CA8"], ["\u0CAA", "\u0CB3"], ["\u0CB5", "\u0CB9"], "\u0CBD", "\u0CDE", ["\u0CE0", "\u0CE1"], ["\u0CF1", "\u0CF2"], ["\u0D05", "\u0D0C"], ["\u0D0E", "\u0D10"], ["\u0D12", "\u0D3A"], "\u0D3D", "\u0D4E", ["\u0D5F", "\u0D61"], ["\u0D7A", "\u0D7F"], ["\u0D85", "\u0D96"], ["\u0D9A", "\u0DB1"], ["\u0DB3", "\u0DBB"], "\u0DBD", ["\u0DC0", "\u0DC6"], ["\u0E01", "\u0E30"], ["\u0E32", "\u0E33"], ["\u0E40", "\u0E46"], ["\u0E81", "\u0E82"], "\u0E84", ["\u0E87", "\u0E88"], "\u0E8A", "\u0E8D", ["\u0E94", "\u0E97"], ["\u0E99", "\u0E9F"], ["\u0EA1", "\u0EA3"], "\u0EA5", "\u0EA7", ["\u0EAA", "\u0EAB"], ["\u0EAD", "\u0EB0"], ["\u0EB2", "\u0EB3"], "\u0EBD", ["\u0EC0", "\u0EC4"], "\u0EC6", ["\u0EDC", "\u0EDF"], "\u0F00", ["\u0F40", "\u0F47"], ["\u0F49", "\u0F6C"], ["\u0F88", "\u0F8C"], ["\u1000", "\u102A"], "\u103F", ["\u1050", "\u1055"], ["\u105A", "\u105D"], "\u1061", ["\u1065", "\u1066"], ["\u106E", "\u1070"], ["\u1075", "\u1081"], "\u108E", ["\u10A0", "\u10C5"], "\u10C7", "\u10CD", ["\u10D0", "\u10FA"], ["\u10FC", "\u1248"], ["\u124A", "\u124D"], ["\u1250", "\u1256"], "\u1258", ["\u125A", "\u125D"], ["\u1260", "\u1288"], ["\u128A", "\u128D"], ["\u1290", "\u12B0"], ["\u12B2", "\u12B5"], ["\u12B8", "\u12BE"], "\u12C0", ["\u12C2", "\u12C5"], ["\u12C8", "\u12D6"], ["\u12D8", "\u1310"], ["\u1312", "\u1315"], ["\u1318", "\u135A"], ["\u1380", "\u138F"], ["\u13A0", "\u13F5"], ["\u13F8", "\u13FD"], ["\u1401", "\u166C"], ["\u166F", "\u167F"], ["\u1681", "\u169A"], ["\u16A0", "\u16EA"], ["\u16EE", "\u16F8"], ["\u1700", "\u170C"], ["\u170E", "\u1711"], ["\u1720", "\u1731"], ["\u1740", "\u1751"], ["\u1760", "\u176C"], ["\u176E", "\u1770"], ["\u1780", "\u17B3"], "\u17D7", "\u17DC", ["\u1820", "\u1877"], ["\u1880", "\u18A8"], "\u18AA", ["\u18B0", "\u18F5"], ["\u1900", "\u191E"], ["\u1950", "\u196D"], ["\u1970", "\u1974"], ["\u1980", "\u19AB"], ["\u19B0", "\u19C9"], ["\u1A00", "\u1A16"], ["\u1A20", "\u1A54"], "\u1AA7", ["\u1B05", "\u1B33"], ["\u1B45", "\u1B4B"], ["\u1B83", "\u1BA0"], ["\u1BAE", "\u1BAF"], ["\u1BBA", "\u1BE5"], ["\u1C00", "\u1C23"], ["\u1C4D", "\u1C4F"], ["\u1C5A", "\u1C7D"], ["\u1CE9", "\u1CEC"], ["\u1CEE", "\u1CF1"], ["\u1CF5", "\u1CF6"], ["\u1D00", "\u1DBF"], ["\u1E00", "\u1F15"], ["\u1F18", "\u1F1D"], ["\u1F20", "\u1F45"], ["\u1F48", "\u1F4D"], ["\u1F50", "\u1F57"], "\u1F59", "\u1F5B", "\u1F5D", ["\u1F5F", "\u1F7D"], ["\u1F80", "\u1FB4"], ["\u1FB6", "\u1FBC"], "\u1FBE", ["\u1FC2", "\u1FC4"], ["\u1FC6", "\u1FCC"], ["\u1FD0", "\u1FD3"], ["\u1FD6", "\u1FDB"], ["\u1FE0", "\u1FEC"], ["\u1FF2", "\u1FF4"], ["\u1FF6", "\u1FFC"], "\u2071", "\u207F", ["\u2090", "\u209C"], "\u2102", "\u2107", ["\u210A", "\u2113"], "\u2115", ["\u2119", "\u211D"], "\u2124", "\u2126", "\u2128", ["\u212A", "\u212D"], ["\u212F", "\u2139"], ["\u213C", "\u213F"], ["\u2145", "\u2149"], "\u214E", ["\u2160", "\u2188"], ["\u2C00", "\u2C2E"], ["\u2C30", "\u2C5E"], ["\u2C60", "\u2CE4"], ["\u2CEB", "\u2CEE"], ["\u2CF2", "\u2CF3"], ["\u2D00", "\u2D25"], "\u2D27", "\u2D2D", ["\u2D30", "\u2D67"], "\u2D6F", ["\u2D80", "\u2D96"], ["\u2DA0", "\u2DA6"], ["\u2DA8", "\u2DAE"], ["\u2DB0", "\u2DB6"], ["\u2DB8", "\u2DBE"], ["\u2DC0", "\u2DC6"], ["\u2DC8", "\u2DCE"], ["\u2DD0", "\u2DD6"], ["\u2DD8", "\u2DDE"], "\u2E2F", ["\u3005", "\u3007"], ["\u3021", "\u3029"], ["\u3031", "\u3035"], ["\u3038", "\u303C"], ["\u3041", "\u3096"], ["\u309D", "\u309F"], ["\u30A1", "\u30FA"], ["\u30FC", "\u30FF"], ["\u3105", "\u312D"], ["\u3131", "\u318E"], ["\u31A0", "\u31BA"], ["\u31F0", "\u31FF"], ["\u3400", "\u4DB5"], ["\u4E00", "\u9FD5"], ["\uA000", "\uA48C"], ["\uA4D0", "\uA4FD"], ["\uA500", "\uA60C"], ["\uA610", "\uA61F"], ["\uA62A", "\uA62B"], ["\uA640", "\uA66E"], ["\uA67F", "\uA69D"], ["\uA6A0", "\uA6EF"], ["\uA717", "\uA71F"], ["\uA722", "\uA788"], ["\uA78B", "\uA7AD"], ["\uA7B0", "\uA7B7"], ["\uA7F7", "\uA801"], ["\uA803", "\uA805"], ["\uA807", "\uA80A"], ["\uA80C", "\uA822"], ["\uA840", "\uA873"], ["\uA882", "\uA8B3"], ["\uA8F2", "\uA8F7"], "\uA8FB", "\uA8FD", ["\uA90A", "\uA925"], ["\uA930", "\uA946"], ["\uA960", "\uA97C"], ["\uA984", "\uA9B2"], "\uA9CF", ["\uA9E0", "\uA9E4"], ["\uA9E6", "\uA9EF"], ["\uA9FA", "\uA9FE"], ["\uAA00", "\uAA28"], ["\uAA40", "\uAA42"], ["\uAA44", "\uAA4B"], ["\uAA60", "\uAA76"], "\uAA7A", ["\uAA7E", "\uAAAF"], "\uAAB1", ["\uAAB5", "\uAAB6"], ["\uAAB9", "\uAABD"], "\uAAC0", "\uAAC2", ["\uAADB", "\uAADD"], ["\uAAE0", "\uAAEA"], ["\uAAF2", "\uAAF4"], ["\uAB01", "\uAB06"], ["\uAB09", "\uAB0E"], ["\uAB11", "\uAB16"], ["\uAB20", "\uAB26"], ["\uAB28", "\uAB2E"], ["\uAB30", "\uAB5A"], ["\uAB5C", "\uAB65"], ["\uAB70", "\uABE2"], ["\uAC00", "\uD7A3"], ["\uD7B0", "\uD7C6"], ["\uD7CB", "\uD7FB"], ["\uF900", "\uFA6D"], ["\uFA70", "\uFAD9"], ["\uFB00", "\uFB06"], ["\uFB13", "\uFB17"], "\uFB1D", ["\uFB1F", "\uFB28"], ["\uFB2A", "\uFB36"], ["\uFB38", "\uFB3C"], "\uFB3E", ["\uFB40", "\uFB41"], ["\uFB43", "\uFB44"], ["\uFB46", "\uFBB1"], ["\uFBD3", "\uFD3D"], ["\uFD50", "\uFD8F"], ["\uFD92", "\uFDC7"], ["\uFDF0", "\uFDFB"], ["\uFE70", "\uFE74"], ["\uFE76", "\uFEFC"], ["\uFF21", "\uFF3A"], ["\uFF41", "\uFF5A"], ["\uFF66", "\uFFBE"], ["\uFFC2", "\uFFC7"], ["\uFFCA", "\uFFCF"], ["\uFFD2", "\uFFD7"], ["\uFFDA", "\uFFDC"]], false, false), je = Dr("\\", false), Ge = Rr(["$", ["0", "9"], "_", ["\u0300", "\u036F"], ["\u0483", "\u0487"], ["\u0591", "\u05BD"], "\u05BF", ["\u05C1", "\u05C2"], ["\u05C4", "\u05C5"], "\u05C7", ["\u0610", "\u061A"], ["\u064B", "\u0669"], "\u0670", ["\u06D6", "\u06DC"], ["\u06DF", "\u06E4"], ["\u06E7", "\u06E8"], ["\u06EA", "\u06ED"], ["\u06F0", "\u06F9"], "\u0711", ["\u0730", "\u074A"], ["\u07A6", "\u07B0"], ["\u07C0", "\u07C9"], ["\u07EB", "\u07F3"], ["\u0816", "\u0819"], ["\u081B", "\u0823"], ["\u0825", "\u0827"], ["\u0829", "\u082D"], ["\u0859", "\u085B"], ["\u08E3", "\u0903"], ["\u093A", "\u093C"], ["\u093E", "\u094F"], ["\u0951", "\u0957"], ["\u0962", "\u0963"], ["\u0966", "\u096F"], ["\u0981", "\u0983"], "\u09BC", ["\u09BE", "\u09C4"], ["\u09C7", "\u09C8"], ["\u09CB", "\u09CD"], "\u09D7", ["\u09E2", "\u09E3"], ["\u09E6", "\u09EF"], ["\u0A01", "\u0A03"], "\u0A3C", ["\u0A3E", "\u0A42"], ["\u0A47", "\u0A48"], ["\u0A4B", "\u0A4D"], "\u0A51", ["\u0A66", "\u0A71"], "\u0A75", ["\u0A81", "\u0A83"], "\u0ABC", ["\u0ABE", "\u0AC5"], ["\u0AC7", "\u0AC9"], ["\u0ACB", "\u0ACD"], ["\u0AE2", "\u0AE3"], ["\u0AE6", "\u0AEF"], ["\u0B01", "\u0B03"], "\u0B3C", ["\u0B3E", "\u0B44"], ["\u0B47", "\u0B48"], ["\u0B4B", "\u0B4D"], ["\u0B56", "\u0B57"], ["\u0B62", "\u0B63"], ["\u0B66", "\u0B6F"], "\u0B82", ["\u0BBE", "\u0BC2"], ["\u0BC6", "\u0BC8"], ["\u0BCA", "\u0BCD"], "\u0BD7", ["\u0BE6", "\u0BEF"], ["\u0C00", "\u0C03"], ["\u0C3E", "\u0C44"], ["\u0C46", "\u0C48"], ["\u0C4A", "\u0C4D"], ["\u0C55", "\u0C56"], ["\u0C62", "\u0C63"], ["\u0C66", "\u0C6F"], ["\u0C81", "\u0C83"], "\u0CBC", ["\u0CBE", "\u0CC4"], ["\u0CC6", "\u0CC8"], ["\u0CCA", "\u0CCD"], ["\u0CD5", "\u0CD6"], ["\u0CE2", "\u0CE3"], ["\u0CE6", "\u0CEF"], ["\u0D01", "\u0D03"], ["\u0D3E", "\u0D44"], ["\u0D46", "\u0D48"], ["\u0D4A", "\u0D4D"], "\u0D57", ["\u0D62", "\u0D63"], ["\u0D66", "\u0D6F"], ["\u0D82", "\u0D83"], "\u0DCA", ["\u0DCF", "\u0DD4"], "\u0DD6", ["\u0DD8", "\u0DDF"], ["\u0DE6", "\u0DEF"], ["\u0DF2", "\u0DF3"], "\u0E31", ["\u0E34", "\u0E3A"], ["\u0E47", "\u0E4E"], ["\u0E50", "\u0E59"], "\u0EB1", ["\u0EB4", "\u0EB9"], ["\u0EBB", "\u0EBC"], ["\u0EC8", "\u0ECD"], ["\u0ED0", "\u0ED9"], ["\u0F18", "\u0F19"], ["\u0F20", "\u0F29"], "\u0F35", "\u0F37", "\u0F39", ["\u0F3E", "\u0F3F"], ["\u0F71", "\u0F84"], ["\u0F86", "\u0F87"], ["\u0F8D", "\u0F97"], ["\u0F99", "\u0FBC"], "\u0FC6", ["\u102B", "\u103E"], ["\u1040", "\u1049"], ["\u1056", "\u1059"], ["\u105E", "\u1060"], ["\u1062", "\u1064"], ["\u1067", "\u106D"], ["\u1071", "\u1074"], ["\u1082", "\u108D"], ["\u108F", "\u109D"], ["\u135D", "\u135F"], ["\u1712", "\u1714"], ["\u1732", "\u1734"], ["\u1752", "\u1753"], ["\u1772", "\u1773"], ["\u17B4", "\u17D3"], "\u17DD", ["\u17E0", "\u17E9"], ["\u180B", "\u180D"], ["\u1810", "\u1819"], "\u18A9", ["\u1920", "\u192B"], ["\u1930", "\u193B"], ["\u1946", "\u194F"], ["\u19D0", "\u19D9"], ["\u1A17", "\u1A1B"], ["\u1A55", "\u1A5E"], ["\u1A60", "\u1A7C"], ["\u1A7F", "\u1A89"], ["\u1A90", "\u1A99"], ["\u1AB0", "\u1ABD"], ["\u1B00", "\u1B04"], ["\u1B34", "\u1B44"], ["\u1B50", "\u1B59"], ["\u1B6B", "\u1B73"], ["\u1B80", "\u1B82"], ["\u1BA1", "\u1BAD"], ["\u1BB0", "\u1BB9"], ["\u1BE6", "\u1BF3"], ["\u1C24", "\u1C37"], ["\u1C40", "\u1C49"], ["\u1C50", "\u1C59"], ["\u1CD0", "\u1CD2"], ["\u1CD4", "\u1CE8"], "\u1CED", ["\u1CF2", "\u1CF4"], ["\u1CF8", "\u1CF9"], ["\u1DC0", "\u1DF5"], ["\u1DFC", "\u1DFF"], ["\u200C", "\u200D"], ["\u203F", "\u2040"], "\u2054", ["\u20D0", "\u20DC"], "\u20E1", ["\u20E5", "\u20F0"], ["\u2CEF", "\u2CF1"], "\u2D7F", ["\u2DE0", "\u2DFF"], ["\u302A", "\u302F"], ["\u3099", "\u309A"], ["\uA620", "\uA629"], "\uA66F", ["\uA674", "\uA67D"], ["\uA69E", "\uA69F"], ["\uA6F0", "\uA6F1"], "\uA802", "\uA806", "\uA80B", ["\uA823", "\uA827"], ["\uA880", "\uA881"], ["\uA8B4", "\uA8C4"], ["\uA8D0", "\uA8D9"], ["\uA8E0", "\uA8F1"], ["\uA900", "\uA909"], ["\uA926", "\uA92D"], ["\uA947", "\uA953"], ["\uA980", "\uA983"], ["\uA9B3", "\uA9C0"], ["\uA9D0", "\uA9D9"], "\uA9E5", ["\uA9F0", "\uA9F9"], ["\uAA29", "\uAA36"], "\uAA43", ["\uAA4C", "\uAA4D"], ["\uAA50", "\uAA59"], ["\uAA7B", "\uAA7D"], "\uAAB0", ["\uAAB2", "\uAAB4"], ["\uAAB7", "\uAAB8"], ["\uAABE", "\uAABF"], "\uAAC1", ["\uAAEB", "\uAAEF"], ["\uAAF5", "\uAAF6"], ["\uABE3", "\uABEA"], ["\uABEC", "\uABED"], ["\uABF0", "\uABF9"], "\uFB1E", ["\uFE00", "\uFE0F"], ["\uFE20", "\uFE2F"], ["\uFE33", "\uFE34"], ["\uFE4D", "\uFE4F"], ["\uFF10", "\uFF19"], "\uFF3F"], false, false), Ve = Br("literal"), Ye = Dr("i", false), ze = Br("string"), We = Dr('"', false), Je = Dr("'", false), qe = Rr(["\n", "\r", '"', "\\", ["\u2028", "\u2029"]], false, false), Qe = Rr(["\n", "\r", "'", "\\", ["\u2028", "\u2029"]], false, false), Xe = Br("character class"), Ke = Dr("[", false), Ze = Dr("^", false), et = Dr("]", false), tt = Dr("-", false), rt = Rr(["\n", "\r", ["\\", "]"], ["\u2028", "\u2029"]], false, false), nt = Dr("0", false), ot = Rr(['"', "'", "\\"], false, false), ut = Dr("b", false), at = Dr("f", false), it = Dr("n", false), st = Dr("r", false), ct = Dr("t", false), lt = Dr("v", false), pt = Rr([["0", "9"], "u", "x"], false, false), ft = Dr("x", false), ht = Dr("u", false), dt = Rr([["0", "9"]], false, false), gt = Rr([["0", "9"], ["a", "f"]], false, true), At = Br("code block"), mt = Rr(["{", "}"], false, false), _t = function(e2, t3, r2, n2) { return { type: "grammar", imports: e2, topLevelInitializer: t3, initializer: r2, rules: n2, location: Pr() }; }, Et = function(e2, t3) { return [e2, t3]; }, vt = function(e2) { return { type: "top_level_initializer", code: e2, codeLocation: Pr() }; }, Ct = function(e2) { return { type: "top_level_initializer", code: e2, codeLocation: Pr() }; }, yt = function(e2, t3) { return { type: "grammar_import", what: e2, from: t3, location: Pr() }; }, $t = function(e2) { return { type: "grammar_import", what: [], from: e2, location: Pr() }; }, St = function(e2, t3) { return t3 ? Array.isArray(t3) ? (t3.unshift(e2), t3) : [e2, t3] : [e2]; }, Ft = function(e2) { return { type: "import_binding_default", binding: e2[0], location: e2[1] }; }, bt = function(e2) { return [{ type: "import_binding_all", binding: e2[0], location: e2[1] }]; }, Pt = function() { return []; }, xt = function(e2, t3) { return { type: "import_binding_rename", rename: e2[0], renameLocation: e2[1], binding: t3[0], location: t3[1] }; }, Dt = function(e2) { return { type: "import_binding", binding: e2[0], location: e2[1] }; }, Rt = function(e2) { return { type: "import_module_specifier", module: e2, location: Pr() }; }, Bt = function(e2) { return [e2, Pr()]; }, Ot = function(e2) { return [e2, Pr()]; }, Lt = function(e2) { return Sn.indexOf(e2[0]) >= 0 && xr(`Binding identifier can't be a reserved word "`.concat(e2[0], '"'), e2[1]), e2[0]; }, wt = function(e2) { return { type: "top_level_initializer", code: e2[0], codeLocation: e2[1], location: Pr() }; }, It = function(e2) { return { type: "initializer", code: e2[0], codeLocation: e2[1], location: Pr() }; }, Mt = function(e2, t3, r2) { return { type: "rule", name: e2[0], nameLocation: e2[1], expression: null !== t3 ? { type: "named", name: t3, expression: r2, location: Pr() } : r2, location: Pr() }; }, Tt = function(e2, t3) { return t3.length > 0 ? { type: "choice", alternatives: [e2].concat(t3), location: Pr() } : e2; }, Nt = function(e2, t3) { return null !== t3 ? { type: "action", expression: e2, code: t3[0], codeLocation: t3[1], location: Pr() } : e2; }, kt = function(e2, t3) { return t3.length > 0 || "labeled" === e2.type && e2.pick ? { type: "sequence", elements: [e2].concat(t3), location: Pr() } : e2; }, Ht = function(e2, t3, r2) { return r2.type.startsWith("semantic_") && xr('"@" cannot be used on a semantic predicate', e2), { type: "labeled", label: null !== t3 ? t3[0] : null, labelLocation: null !== t3 ? t3[1] : e2, pick: true, expression: r2, location: Pr() }; }, Ut = function(e2, t3) { return { type: "labeled", label: e2[0], labelLocation: e2[1], expression: t3, location: Pr() }; }, jt = function() { return Pr(); }, Gt = function(e2) { return Sn.indexOf(e2[0]) >= 0 && xr(`Label can't be a reserved word "`.concat(e2[0], '"'), e2[1]), e2; }, Vt = function(e2, t3) { return { type: OPS_TO_PREFIXED_TYPES[e2], expression: t3, location: Pr() }; }, Yt = function(e2, t3) { return { type: OPS_TO_SUFFIXED_TYPES[t3], expression: e2, location: Pr() }; }, zt = function(e2, t3, r2) { var n2 = t3[0], o2 = t3[1]; return "constant" === o2.type && 0 === o2.value && xr("The maximum count of repetitions of the rule must be > 0", o2.location), { type: "repeated", min: n2, max: o2, expression: e2, delimiter: r2, location: Pr() }; }, Wt = function(e2, t3) { return [null !== e2 ? e2 : { type: "constant", value: 0 }, null !== t3 ? t3 : { type: "constant", value: null }]; }, Jt = function(e2) { return [null, e2]; }, qt = function(e2) { return { type: "constant", value: e2, location: Pr() }; }, Qt = function(e2) { return { type: "variable", value: e2[0], location: Pr() }; }, Xt = function(e2) { return { type: "function", value: e2[0], codeLocation: e2[1], location: Pr() }; }, Kt = function(e2) { return "labeled" === e2.type || "sequence" === e2.type ? { type: "group", expression: e2, location: Pr() } : e2; }, Zt = function(e2, t3) { return { type: "library_ref", name: t3[0], library: e2[0], libraryNumber: -1, location: Pr() }; }, er = function(e2) { return { type: "rule_ref", name: e2[0], location: Pr() }; }, tr = function(e2, t3) { return { type: OPS_TO_SEMANTIC_PREDICATE_TYPES[e2], code: t3[0], codeLocation: t3[1], location: Pr() }; }, rr = function(e2, t3) { return [e2 + t3.join(""), Pr()]; }, nr = function(e2, t3) { return { type: "literal", value: e2, ignoreCase: null !== t3, location: Pr() }; }, or = function(e2) { return e2.join(""); }, ur = function(e2) { return e2.join(""); }, ar = function(e2, t3, r2) { return { type: "class", parts: t3.filter(function(e3) { return "" !== e3; }), inverted: null !== e2, ignoreCase: null !== r2, location: Pr() }; }, ir = function(t3, r2) { return t3.charCodeAt(0) > r2.charCodeAt(0) && xr("Invalid character range: " + e.substring(yr, Cr) + "."), [t3, r2]; }, sr = function() { return ""; }, cr = function() { return "\0"; }, lr = function() { return "\b"; }, pr = function() { return "\f"; }, fr = function() { return "\n"; }, hr = function() { return "\r"; }, dr = function() { return " "; }, gr = function() { return "\v"; }, Ar = function(e2) { return String.fromCharCode(parseInt(e2, 16)); }, mr = function(e2) { return String.fromCharCode(parseInt(e2, 16)); }, _r = function() { return { type: "any", location: Pr() }; }, Er = function(e2) { return [e2, Pr()]; }, vr = function(e2) { return parseInt(e2, 10); }, Cr = 0 | t2.peg$currPos, yr = Cr, $r = [{ line: 1, column: 1 }], Sr = Cr, Fr = t2.peg$maxFailExpected || [], br = 0 | t2.peg$silentFails; if (t2.startRule) { if (!(t2.startRule in u)) throw new Error(`Can't start parsing from rule "` + t2.startRule + '".'); a = u[t2.startRule]; } function Pr() { return Lr(yr, Cr); } function xr(e2, t3) { throw function(e3, t4) { return new peg$SyntaxError(e3, null, null, t4); }(e2, t3 = void 0 !== t3 ? t3 : Lr(yr, Cr)); } function Dr(e2, t3) { return { type: "literal", text: e2, ignoreCase: t3 }; } function Rr(e2, t3, r2) { return { type: "class", parts: e2, inverted: t3, ignoreCase: r2 }; } function Br(e2) { return { type: "other", description: e2 }; } function Or(t3) { var r2, n2 = $r[t3]; if (n2) return n2; if (t3 >= $r.length) r2 = $r.length - 1; else for (r2 = t3; !$r[--r2]; ) ; for (n2 = { line: (n2 = $r[r2]).line, column: n2.column }; r2 < t3; ) 10 === e.charCodeAt(r2) ? (n2.line++, n2.column = 1) : n2.column++, r2++; return $r[t3] = n2, n2; } function Lr(e2, t3, r2) { var n2 = Or(e2), u2 = Or(t3); return { source: o, start: { offset: e2, line: n2.line, column: n2.column }, end: { offset: t3, line: u2.line, column: u2.column } }; } function wr(e2) { Cr < Sr || (Cr > Sr && (Sr = Cr, Fr = []), Fr.push(e2)); } function Ir() { var t3, r2, o2, u2, a2, i2, s2, c2; if (t3 = Cr, r2 = Mr(), o2 = Cr, u2 = yn(), a2 = function() { var t4, r3, o3, u3; return t4 = Cr, 123 === e.charCodeAt(Cr) ? (r3 = f, Cr++) : (r3 = n, 0 === br && wr(de)), r3 !== n && (o3 = vn()) !== n ? (125 === e.charCodeAt(Cr) ? (u3 = h4, Cr++) : (u3 = n, 0 === br && wr(ge)), u3 !== n && $n() !== n ? (yr = t4, t4 = wt(o3)) : (Cr = t4, t4 = n)) : (Cr = t4, t4 = n), t4; }(), a2 !== n ? o2 = a2 : (Cr = o2, o2 = n), o2 === n && (o2 = null), u2 = Cr, a2 = yn(), i2 = function() { var e2, t4; return e2 = Cr, (t4 = vn()) !== n && $n() !== n ? (yr = e2, e2 = It(t4)) : (Cr = e2, e2 = n), e2; }(), i2 !== n ? u2 = i2 : (Cr = u2, u2 = n), u2 === n && (u2 = null), a2 = yn(), i2 = [], s2 = Cr, (c2 = Gr()) !== n ? (yn(), s2 = c2) : (Cr = s2, s2 = n), s2 !== n) for (; s2 !== n; ) i2.push(s2), s2 = Cr, (c2 = Gr()) !== n ? (yn(), s2 = c2) : (Cr = s2, s2 = n); else i2 = n; return i2 !== n ? (yr = t3, t3 = _t(r2, o2, u2, i2)) : (Cr = t3, t3 = n), t3; } function Mr() { var e2, t3; for (e2 = [], t3 = Tr(); t3 !== n; ) e2.push(t3), t3 = Tr(); return e2; } function Tr() { var t3, r2, o2, u2, a2, l2, p2, f2; return t3 = Cr, yn(), e.substr(Cr, 6) === i ? (r2 = i, Cr += 6) : (r2 = n, 0 === br && wr(ce)), r2 !== n ? (yn(), o2 = function() { var t4, r3, o3, u3, a3; return (t4 = Nr()) === n && (t4 = kr()) === n && (t4 = Cr, r3 = function() { var e2, t5; return e2 = Cr, (t5 = jr()) !== n && (yr = e2, t5 = Ft(t5)), e2 = t5; }(), r3 !== n ? (o3 = Cr, yn(), 44 === e.charCodeAt(Cr) ? (u3 = c, Cr++) : (u3 = n, 0 === br && wr(pe)), u3 !== n ? (yn(), (a3 = Nr()) === n && (a3 = kr()), a3 !== n ? o3 = a3 : (Cr = o3, o3 = n)) : (Cr = o3, o3 = n), o3 === n && (o3 = null), yr = t4, t4 = St(r3, o3)) : (Cr = t4, t4 = n)), t4; }(), o2 !== n ? (u2 = yn(), a2 = function() { var t4, r3, o3; return t4 = Cr, e.substr(Cr, 4) === d ? (r3 = d, Cr += 4) : (r3 = n, 0 === br && wr(Ae)), r3 !== n ? (yn(), (o3 = Ur()) !== n ? t4 = o3 : (Cr = t4, t4 = n)) : (Cr = t4, t4 = n), t4; }(), a2 !== n ? (l2 = Cr, p2 = yn(), 59 === e.charCodeAt(Cr) ? (f2 = s, Cr++) : (f2 = n, 0 === br && wr(le)), f2 !== n ? l2 = p2 = [p2, f2] : (Cr = l2, l2 = n), l2 === n && (l2 = null), yr = t3, t3 = yt(o2, a2)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n), t3 === n && (t3 = Cr, yn(), e.substr(Cr, 6) === i ? (r2 = i, Cr += 6) : (r2 = n, 0 === br && wr(ce)), r2 !== n ? (yn(), (o2 = Ur()) !== n ? (u2 = Cr, a2 = yn(), 59 === e.charCodeAt(Cr) ? (l2 = s, Cr++) : (l2 = n, 0 === br && wr(le)), l2 !== n ? u2 = a2 = [a2, l2] : (Cr = u2, u2 = n), u2 === n && (u2 = null), yr = t3, t3 = $t(o2)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n)), t3; } function Nr() { var t3, r2, o2, u2; return t3 = Cr, 42 === e.charCodeAt(Cr) ? (r2 = l, Cr++) : (r2 = n, 0 === br && wr(fe)), r2 !== n ? (yn(), e.substr(Cr, 2) === p ? (o2 = p, Cr += 2) : (o2 = n, 0 === br && wr(he)), o2 !== n ? (yn(), (u2 = jr()) !== n ? (yr = t3, t3 = bt(u2)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n), t3; } function kr() { var t3, r2, o2, u2, a2; return t3 = Cr, 123 === e.charCodeAt(Cr) ? (r2 = f, Cr++) : (r2 = n, 0 === br && wr(de)), r2 !== n ? (yn(), 125 === e.charCodeAt(Cr) ? (o2 = h4, Cr++) : (o2 = n, 0 === br && wr(ge)), o2 !== n ? (yr = t3, t3 = Pt()) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n), t3 === n && (t3 = Cr, 123 === e.charCodeAt(Cr) ? (r2 = f, Cr++) : (r2 = n, 0 === br && wr(de)), r2 !== n ? (yn(), o2 = function() { var t4, r3, o3, u3, a3, i2; for (t4 = Cr, r3 = [], o3 = Hr(); o3 !== n; ) r3.push(o3), o3 = Cr, u3 = Cr, a3 = yn(), 44 === e.charCodeAt(Cr) ? (i2 = c, Cr++) : (i2 = n, 0 === br && wr(pe)), i2 !== n ? u3 = a3 = [a3, i2, yn()] : (Cr = u3, u3 = n), u3 !== n && (u3 = Hr()) === n ? (Cr = o3, o3 = n) : o3 = u3; return r3.length < 1 ? (Cr = t4, t4 = n) : t4 = r3, t4; }(), o2 !== n ? (yn(), u2 = Cr, 44 === e.charCodeAt(Cr) ? (a2 = c, Cr++) : (a2 = n, 0 === br && wr(pe)), a2 !== n ? u2 = a2 = [a2, yn()] : (Cr = u2, u2 = n), u2 === n && (u2 = null), 125 === e.charCodeAt(Cr) ? (a2 = h4, Cr++) : (a2 = n, 0 === br && wr(ge)), a2 !== n ? t3 = o2 : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n)), t3; } function Hr() { var t3, r2, o2, u2; return t3 = Cr, r2 = function() { var e2, t4; return (e2 = un()) === n && (e2 = Cr, (t4 = cn()) !== n && (yr = e2, t4 = Ot(t4)), e2 = t4), e2; }(), r2 !== n ? (yn(), e.substr(Cr, 2) === p ? (o2 = p, Cr += 2) : (o2 = n, 0 === br && wr(he)), o2 !== n ? (yn(), (u2 = jr()) !== n ? (yr = t3, t3 = xt(r2, u2)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n), t3 === n && (t3 = Cr, (r2 = jr()) !== n && (yr = t3, r2 = Dt(r2)), t3 = r2), t3; } function Ur() { var e2, t3; return e2 = Cr, (t3 = cn()) !== n && (yr = e2, t3 = Rt(t3)), t3; } function jr() { var e2, t3; return e2 = Cr, t3 = function() { var e3, t4; return e3 = Cr, (t4 = un()) !== n && (yr = e3, t4 = Lt(t4)), e3 = t4; }(), t3 !== n && (yr = e2, t3 = Bt(t3)), t3; } function Gr() { var t3, r2, o2, u2, a2; return t3 = Cr, (r2 = un()) !== n ? (yn(), o2 = Cr, (u2 = cn()) !== n ? (yn(), o2 = u2) : (Cr = o2, o2 = n), o2 === n && (o2 = null), 61 === e.charCodeAt(Cr) ? (u2 = g, Cr++) : (u2 = n, 0 === br && wr(me)), u2 !== n ? (yn(), (a2 = Vr()) !== n && $n() !== n ? (yr = t3, t3 = Mt(r2, o2, a2)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n), t3; } function Vr() { var t3, r2, o2, u2, a2, i2; if (t3 = Cr, (r2 = Yr()) !== n) { for (o2 = [], u2 = Cr, yn(), 47 === e.charCodeAt(Cr) ? (a2 = A, Cr++) : (a2 = n, 0 === br && wr(_e)), a2 !== n ? (yn(), (i2 = Yr()) !== n ? u2 = i2 : (Cr = u2, u2 = n)) : (Cr = u2, u2 = n); u2 !== n; ) o2.push(u2), u2 = Cr, yn(), 47 === e.charCodeAt(Cr) ? (a2 = A, Cr++) : (a2 = n, 0 === br && wr(_e)), a2 !== n ? (yn(), (i2 = Yr()) !== n ? u2 = i2 : (Cr = u2, u2 = n)) : (Cr = u2, u2 = n); yr = t3, t3 = Tt(r2, o2); } else Cr = t3, t3 = n; return t3; } function Yr() { var e2, t3, r2, o2; return e2 = Cr, t3 = function() { var e3, t4, r3, o3, u2; if (e3 = Cr, (t4 = zr()) !== n) { for (r3 = [], o3 = Cr, yn(), (u2 = zr()) !== n ? o3 = u2 : (Cr = o3, o3 = n); o3 !== n; ) r3.push(o3), o3 = Cr, yn(), (u2 = zr()) !== n ? o3 = u2 : (Cr = o3, o3 = n); yr = e3, e3 = kt(t4, r3); } else Cr = e3, e3 = n; return e3; }(), t3 !== n ? (r2 = Cr, yn(), (o2 = vn()) !== n ? r2 = o2 : (Cr = r2, r2 = n), r2 === n && (r2 = null), yr = e2, e2 = Nt(t3, r2)) : (Cr = e2, e2 = n), e2; } function zr() { var t3, r2, o2, u2; return t3 = Cr, r2 = function() { var t4, r3; return t4 = Cr, 64 === e.charCodeAt(Cr) ? (r3 = m, Cr++) : (r3 = n, 0 === br && wr(Ee)), r3 !== n && (yr = t4, r3 = jt()), t4 = r3; }(), r2 !== n ? ((o2 = Wr()) === n && (o2 = null), (u2 = Jr()) !== n ? (yr = t3, t3 = Ht(r2, o2, u2)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n), t3 === n && (t3 = Cr, (r2 = Wr()) !== n && (o2 = Jr()) !== n ? (yr = t3, t3 = Ut(r2, o2)) : (Cr = t3, t3 = n), t3 === n && (t3 = Jr())), t3; } function Wr() { var t3, r2, o2; return t3 = Cr, (r2 = un()) !== n ? (yn(), 58 === e.charCodeAt(Cr) ? (o2 = _, Cr++) : (o2 = n, 0 === br && wr(ve)), o2 !== n ? (yn(), yr = t3, t3 = Gt(r2)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n), t3; } function Jr() { var t3, r2, o2; return t3 = Cr, r2 = function() { var t4; return t4 = e.charAt(Cr), z.test(t4) ? Cr++ : (t4 = n, 0 === br && wr(Ce)), t4; }(), r2 !== n ? (yn(), (o2 = qr()) !== n ? (yr = t3, t3 = Vt(r2, o2)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n), t3 === n && (t3 = qr()), t3; } function qr() { var t3, r2, o2; return t3 = Cr, (r2 = Xr()) !== n ? (yn(), o2 = function() { var t4; return t4 = e.charAt(Cr), W.test(t4) ? Cr++ : (t4 = n, 0 === br && wr(ye)), t4; }(), o2 !== n ? (yr = t3, t3 = Yt(r2, o2)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n), t3 === n && (t3 = function() { var t4, r3, o3, u2, a2, i2, s2; return t4 = Cr, (r3 = Xr()) !== n ? (yn(), 124 === e.charCodeAt(Cr) ? (o3 = E, Cr++) : (o3 = n, 0 === br && wr($e)), o3 !== n ? (yn(), u2 = function() { var t5, r4, o4, u3; return t5 = Cr, (r4 = Qr()) === n && (r4 = null), yn(), e.substr(Cr, 2) === v ? (o4 = v, Cr += 2) : (o4 = n, 0 === br && wr(Se)), o4 !== n ? (yn(), (u3 = Qr()) === n && (u3 = null), yr = t5, t5 = Wt(r4, u3)) : (Cr = t5, t5 = n), t5 === n && (t5 = Cr, (r4 = Qr()) !== n && (yr = t5, r4 = Jt(r4)), t5 = r4), t5; }(), u2 !== n ? (yn(), a2 = Cr, 44 === e.charCodeAt(Cr) ? (i2 = c, Cr++) : (i2 = n, 0 === br && wr(pe)), i2 !== n ? (yn(), (s2 = Vr()) !== n ? (yn(), a2 = s2) : (Cr = a2, a2 = n)) : (Cr = a2, a2 = n), a2 === n && (a2 = null), 124 === e.charCodeAt(Cr) ? (i2 = E, Cr++) : (i2 = n, 0 === br && wr($e)), i2 !== n ? (yr = t4, t4 = zt(r3, u2, a2)) : (Cr = t4, t4 = n)) : (Cr = t4, t4 = n)) : (Cr = t4, t4 = n)) : (Cr = t4, t4 = n), t4; }(), t3 === n && (t3 = Xr())), t3; } function Qr() { var t3, r2; return t3 = Cr, r2 = function() { var t4, r3, o2, u2; if (t4 = Cr, r3 = Cr, o2 = [], (u2 = _n()) !== n) for (; u2 !== n; ) o2.push(u2), u2 = _n(); else o2 = n; return (r3 = o2 !== n ? e.substring(r3, Cr) : o2) !== n && (yr = t4, r3 = vr(r3)), t4 = r3; }(), r2 !== n && (yr = t3, r2 = qt(r2)), (t3 = r2) === n && (t3 = Cr, (r2 = un()) !== n && (yr = t3, r2 = Qt(r2)), (t3 = r2) === n && (t3 = Cr, (r2 = vn()) !== n && (yr = t3, r2 = Xt(r2)), t3 = r2)), t3; } function Xr() { var t3, r2, o2, u2; return t3 = function() { var t4, r3, o3; return br++, t4 = Cr, (r3 = cn()) !== n ? (105 === e.charCodeAt(Cr) ? (o3 = R, Cr++) : (o3 = n, 0 === br && wr(Ye)), o3 === n && (o3 = null), yr = t4, t4 = nr(r3, o3)) : (Cr = t4, t4 = n), br--, t4 === n && (r3 = n, 0 === br && wr(Ve)), t4; }(), t3 === n && (t3 = function() { var t4, r3, o3, u3, a2, i2; if (br++, t4 = Cr, 91 === e.charCodeAt(Cr) ? (r3 = L, Cr++) : (r3 = n, 0 === br && wr(Ke)), r3 !== n) { for (94 === e.charCodeAt(Cr) ? (o3 = w, Cr++) : (o3 = n, 0 === br && wr(Ze)), o3 === n && (o3 = null), u3 = [], (a2 = fn()) === n && (a2 = hn()); a2 !== n; ) u3.push(a2), (a2 = fn()) === n && (a2 = hn()); 93 === e.charCodeAt(Cr) ? (a2 = I, Cr++) : (a2 = n, 0 === br && wr(et)), a2 !== n ? (105 === e.charCodeAt(Cr) ? (i2 = R, Cr++) : (i2 = n, 0 === br && wr(Ye)), i2 === n && (i2 = null), yr = t4, t4 = ar(o3, u3, i2)) : (Cr = t4, t4 = n); } else Cr = t4, t4 = n; return br--, t4 === n && (r3 = n, 0 === br && wr(Xe)), t4; }(), t3 === n && (t3 = function() { var t4, r3; return t4 = Cr, 46 === e.charCodeAt(Cr) ? (r3 = $, Cr++) : (r3 = n, 0 === br && wr(Pe)), r3 !== n && (yr = t4, r3 = _r()), t4 = r3; }(), t3 === n && (t3 = function() { var t4, r3, o3, u3, a2, i2, s2; return t4 = Cr, (r3 = un()) !== n ? (46 === e.charCodeAt(Cr) ? (o3 = $, Cr++) : (o3 = n, 0 === br && wr(Pe)), o3 !== n && (u3 = un()) !== n ? (yr = t4, t4 = Zt(r3, u3)) : (Cr = t4, t4 = n)) : (Cr = t4, t4 = n), t4 === n && (t4 = Cr, (r3 = un()) !== n ? (o3 = Cr, br++, u3 = Cr, a2 = yn(), i2 = Cr, (s2 = cn()) !== n ? i2 = s2 = [s2, yn()] : (Cr = i2, i2 = n), i2 === n && (i2 = null), 61 === e.charCodeAt(Cr) ? (s2 = g, Cr++) : (s2 = n, 0 === br && wr(me)), s2 !== n ? u3 = a2 = [a2, i2, s2] : (Cr = u3, u3 = n), br--, u3 === n ? o3 = void 0 : (Cr = o3, o3 = n), o3 !== n ? (yr = t4, t4 = er(r3)) : (Cr = t4, t4 = n)) : (Cr = t4, t4 = n)), t4; }(), t3 === n && (t3 = function() { var t4, r3, o3; return t4 = Cr, r3 = function() { var t5; return t5 = e.charAt(Cr), J.test(t5) ? Cr++ : (t5 = n, 0 === br && wr(xe)), t5; }(), r3 !== n ? (yn(), (o3 = vn()) !== n ? (yr = t4, t4 = tr(r3, o3)) : (Cr = t4, t4 = n)) : (Cr = t4, t4 = n), t4; }(), t3 === n && (t3 = Cr, 40 === e.charCodeAt(Cr) ? (r2 = C, Cr++) : (r2 = n, 0 === br && wr(Fe)), r2 !== n ? (yn(), (o2 = Vr()) !== n ? (yn(), 41 === e.charCodeAt(Cr) ? (u2 = y, Cr++) : (u2 = n, 0 === br && wr(be)), u2 !== n ? (yr = t3, t3 = Kt(o2)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n)))))), t3; } function Kr() { var t3; return e.length > Cr ? (t3 = e.charAt(Cr), Cr++) : (t3 = n, 0 === br && wr(se)), t3; } function Zr() { var t3; return br++, t3 = e.charAt(Cr), q.test(t3) ? Cr++ : (t3 = n, 0 === br && wr(Re)), br--, t3 === n && 0 === br && wr(De), t3; } function en() { var t3; return t3 = e.charAt(Cr), Q.test(t3) ? Cr++ : (t3 = n, 0 === br && wr(Be)), t3; } function tn() { var t3; return br++, 10 === e.charCodeAt(Cr) ? (t3 = S, Cr++) : (t3 = n, 0 === br && wr(Le)), t3 === n && (e.substr(Cr, 2) === F ? (t3 = F, Cr += 2) : (t3 = n, 0 === br && wr(we)), t3 === n && (t3 = e.charAt(Cr), X.test(t3) ? Cr++ : (t3 = n, 0 === br && wr(Ie)))), br--, t3 === n && 0 === br && wr(Oe), t3; } function rn() { var t3; return br++, (t3 = function() { var t4, r2, o2, u2, a2, i2; if (t4 = Cr, e.substr(Cr, 2) === b ? (r2 = b, Cr += 2) : (r2 = n, 0 === br && wr(Te)), r2 !== n) { for (o2 = [], u2 = Cr, a2 = Cr, br++, e.substr(Cr, 2) === P ? (i2 = P, Cr += 2) : (i2 = n, 0 === br && wr(Ne)), br--, i2 === n ? a2 = void 0 : (Cr = a2, a2 = n), a2 !== n && (i2 = Kr()) !== n ? u2 = a2 = [a2, i2] : (Cr = u2, u2 = n); u2 !== n; ) o2.push(u2), u2 = Cr, a2 = Cr, br++, e.substr(Cr, 2) === P ? (i2 = P, Cr += 2) : (i2 = n, 0 === br && wr(Ne)), br--, i2 === n ? a2 = void 0 : (Cr = a2, a2 = n), a2 !== n && (i2 = Kr()) !== n ? u2 = a2 = [a2, i2] : (Cr = u2, u2 = n); e.substr(Cr, 2) === P ? (u2 = P, Cr += 2) : (u2 = n, 0 === br && wr(Ne)), u2 !== n ? t4 = r2 = [r2, o2, u2] : (Cr = t4, t4 = n); } else Cr = t4, t4 = n; return t4; }()) === n && (t3 = on()), br--, t3 === n && 0 === br && wr(Me), t3; } function nn() { var t3, r2, o2, u2, a2, i2; if (t3 = Cr, e.substr(Cr, 2) === b ? (r2 = b, Cr += 2) : (r2 = n, 0 === br && wr(Te)), r2 !== n) { for (o2 = [], u2 = Cr, a2 = Cr, br++, e.substr(Cr, 2) === P ? (i2 = P, Cr += 2) : (i2 = n, 0 === br && wr(Ne)), i2 === n && (i2 = en()), br--, i2 === n ? a2 = void 0 : (Cr = a2, a2 = n), a2 !== n && (i2 = Kr()) !== n ? u2 = a2 = [a2, i2] : (Cr = u2, u2 = n); u2 !== n; ) o2.push(u2), u2 = Cr, a2 = Cr, br++, e.substr(Cr, 2) === P ? (i2 = P, Cr += 2) : (i2 = n, 0 === br && wr(Ne)), i2 === n && (i2 = en()), br--, i2 === n ? a2 = void 0 : (Cr = a2, a2 = n), a2 !== n && (i2 = Kr()) !== n ? u2 = a2 = [a2, i2] : (Cr = u2, u2 = n); e.substr(Cr, 2) === P ? (u2 = P, Cr += 2) : (u2 = n, 0 === br && wr(Ne)), u2 !== n ? t3 = r2 = [r2, o2, u2] : (Cr = t3, t3 = n); } else Cr = t3, t3 = n; return t3; } function on() { var t3, r2, o2, u2, a2, i2; if (t3 = Cr, e.substr(Cr, 2) === x ? (r2 = x, Cr += 2) : (r2 = n, 0 === br && wr(ke)), r2 !== n) { for (o2 = [], u2 = Cr, a2 = Cr, br++, i2 = en(), br--, i2 === n ? a2 = void 0 : (Cr = a2, a2 = n), a2 !== n && (i2 = Kr()) !== n ? u2 = a2 = [a2, i2] : (Cr = u2, u2 = n); u2 !== n; ) o2.push(u2), u2 = Cr, a2 = Cr, br++, i2 = en(), br--, i2 === n ? a2 = void 0 : (Cr = a2, a2 = n), a2 !== n && (i2 = Kr()) !== n ? u2 = a2 = [a2, i2] : (Cr = u2, u2 = n); t3 = r2 = [r2, o2]; } else Cr = t3, t3 = n; return t3; } function un() { var e2, t3, r2, o2; if (br++, e2 = Cr, (t3 = an()) !== n) { for (r2 = [], o2 = sn(); o2 !== n; ) r2.push(o2), o2 = sn(); yr = e2, e2 = rr(t3, r2); } else Cr = e2, e2 = n; return br--, e2 === n && (t3 = n, 0 === br && wr(He)), e2; } function an() { var t3, r2, o2; return t3 = e.charAt(Cr), K.test(t3) ? Cr++ : (t3 = n, 0 === br && wr(Ue)), t3 === n && (t3 = Cr, 92 === e.charCodeAt(Cr) ? (r2 = D, Cr++) : (r2 = n, 0 === br && wr(je)), r2 !== n && (o2 = mn()) !== n ? t3 = o2 : (Cr = t3, t3 = n)), t3; } function sn() { var t3; return (t3 = an()) === n && (t3 = e.charAt(Cr), Z.test(t3) ? Cr++ : (t3 = n, 0 === br && wr(Ge))), t3; } function cn() { var t3, r2, o2, u2; if (br++, t3 = Cr, 34 === e.charCodeAt(Cr) ? (r2 = B, Cr++) : (r2 = n, 0 === br && wr(We)), r2 !== n) { for (o2 = [], u2 = ln(); u2 !== n; ) o2.push(u2), u2 = ln(); 34 === e.charCodeAt(Cr) ? (u2 = B, Cr++) : (u2 = n, 0 === br && wr(We)), u2 !== n ? (yr = t3, t3 = or(o2)) : (Cr = t3, t3 = n); } else Cr = t3, t3 = n; if (t3 === n) if (t3 = Cr, 39 === e.charCodeAt(Cr) ? (r2 = O, Cr++) : (r2 = n, 0 === br && wr(Je)), r2 !== n) { for (o2 = [], u2 = pn(); u2 !== n; ) o2.push(u2), u2 = pn(); 39 === e.charCodeAt(Cr) ? (u2 = O, Cr++) : (u2 = n, 0 === br && wr(Je)), u2 !== n ? (yr = t3, t3 = ur(o2)) : (Cr = t3, t3 = n); } else Cr = t3, t3 = n; return br--, t3 === n && (r2 = n, 0 === br && wr(ze)), t3; } function ln() { var t3, r2, o2, u2; return t3 = Cr, r2 = Cr, o2 = Cr, br++, u2 = e.charAt(Cr), ee.test(u2) ? Cr++ : (u2 = n, 0 === br && wr(qe)), br--, u2 === n ? o2 = void 0 : (Cr = o2, o2 = n), o2 !== n && (u2 = Kr()) !== n ? r2 = o2 = [o2, u2] : (Cr = r2, r2 = n), (t3 = r2 !== n ? e.substring(t3, Cr) : r2) === n && (t3 = Cr, 92 === e.charCodeAt(Cr) ? (r2 = D, Cr++) : (r2 = n, 0 === br && wr(je)), r2 !== n && (o2 = gn()) !== n ? t3 = o2 : (Cr = t3, t3 = n), t3 === n && (t3 = dn())), t3; } function pn() { var t3, r2, o2, u2; return t3 = Cr, r2 = Cr, o2 = Cr, br++, u2 = e.charAt(Cr), te.test(u2) ? Cr++ : (u2 = n, 0 === br && wr(Qe)), br--, u2 === n ? o2 = void 0 : (Cr = o2, o2 = n), o2 !== n && (u2 = Kr()) !== n ? r2 = o2 = [o2, u2] : (Cr = r2, r2 = n), (t3 = r2 !== n ? e.substring(t3, Cr) : r2) === n && (t3 = Cr, 92 === e.charCodeAt(Cr) ? (r2 = D, Cr++) : (r2 = n, 0 === br && wr(je)), r2 !== n && (o2 = gn()) !== n ? t3 = o2 : (Cr = t3, t3 = n), t3 === n && (t3 = dn())), t3; } function fn() { var t3, r2, o2, u2; return t3 = Cr, (r2 = hn()) !== n ? (45 === e.charCodeAt(Cr) ? (o2 = M, Cr++) : (o2 = n, 0 === br && wr(tt)), o2 !== n && (u2 = hn()) !== n ? (yr = t3, t3 = ir(r2, u2)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n), t3; } function hn() { var t3, r2, o2, u2; return t3 = Cr, r2 = Cr, o2 = Cr, br++, u2 = e.charAt(Cr), re.test(u2) ? Cr++ : (u2 = n, 0 === br && wr(rt)), br--, u2 === n ? o2 = void 0 : (Cr = o2, o2 = n), o2 !== n && (u2 = Kr()) !== n ? r2 = o2 = [o2, u2] : (Cr = r2, r2 = n), (t3 = r2 !== n ? e.substring(t3, Cr) : r2) === n && (t3 = Cr, 92 === e.charCodeAt(Cr) ? (r2 = D, Cr++) : (r2 = n, 0 === br && wr(je)), r2 !== n && (o2 = gn()) !== n ? t3 = o2 : (Cr = t3, t3 = n), t3 === n && (t3 = dn())), t3; } function dn() { var t3, r2; return t3 = Cr, 92 === e.charCodeAt(Cr) ? (r2 = D, Cr++) : (r2 = n, 0 === br && wr(je)), r2 !== n && tn() !== n ? (yr = t3, t3 = sr()) : (Cr = t3, t3 = n), t3; } function gn() { var t3, r2, o2, u2; return t3 = function() { var t4; return (t4 = An()) === n && (t4 = function() { var t5, r3, o3, u3; return t5 = Cr, r3 = Cr, o3 = Cr, br++, u3 = function() { var t6; return (t6 = An()) === n && (t6 = e.charAt(Cr), oe.test(t6) ? Cr++ : (t6 = n, 0 === br && wr(pt))), t6; }(), u3 === n && (u3 = en()), br--, u3 === n ? o3 = void 0 : (Cr = o3, o3 = n), o3 !== n && (u3 = Kr()) !== n ? r3 = o3 = [o3, u3] : (Cr = r3, r3 = n), t5 = r3 !== n ? e.substring(t5, Cr) : r3; }()), t4; }(), t3 === n && (t3 = Cr, 48 === e.charCodeAt(Cr) ? (r2 = T, Cr++) : (r2 = n, 0 === br && wr(nt)), r2 !== n ? (o2 = Cr, br++, u2 = _n(), br--, u2 === n ? o2 = void 0 : (Cr = o2, o2 = n), o2 !== n ? (yr = t3, t3 = cr()) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n), t3 === n && (t3 = function() { var t4, r3, o3, u3, a2, i2; return t4 = Cr, 120 === e.charCodeAt(Cr) ? (r3 = V, Cr++) : (r3 = n, 0 === br && wr(ft)), r3 !== n ? (o3 = Cr, u3 = Cr, (a2 = En()) !== n && (i2 = En()) !== n ? u3 = a2 = [a2, i2] : (Cr = u3, u3 = n), (o3 = u3 !== n ? e.substring(o3, Cr) : u3) !== n ? (yr = t4, t4 = Ar(o3)) : (Cr = t4, t4 = n)) : (Cr = t4, t4 = n), t4; }(), t3 === n && (t3 = mn()))), t3; } function An() { var t3, r2; return t3 = e.charAt(Cr), ne.test(t3) ? Cr++ : (t3 = n, 0 === br && wr(ot)), t3 === n && (t3 = Cr, 98 === e.charCodeAt(Cr) ? (r2 = N, Cr++) : (r2 = n, 0 === br && wr(ut)), r2 !== n && (yr = t3, r2 = lr()), (t3 = r2) === n && (t3 = Cr, 102 === e.charCodeAt(Cr) ? (r2 = k, Cr++) : (r2 = n, 0 === br && wr(at)), r2 !== n && (yr = t3, r2 = pr()), (t3 = r2) === n && (t3 = Cr, 110 === e.charCodeAt(Cr) ? (r2 = H, Cr++) : (r2 = n, 0 === br && wr(it)), r2 !== n && (yr = t3, r2 = fr()), (t3 = r2) === n && (t3 = Cr, 114 === e.charCodeAt(Cr) ? (r2 = U, Cr++) : (r2 = n, 0 === br && wr(st)), r2 !== n && (yr = t3, r2 = hr()), (t3 = r2) === n && (t3 = Cr, 116 === e.charCodeAt(Cr) ? (r2 = j, Cr++) : (r2 = n, 0 === br && wr(ct)), r2 !== n && (yr = t3, r2 = dr()), (t3 = r2) === n && (t3 = Cr, 118 === e.charCodeAt(Cr) ? (r2 = G, Cr++) : (r2 = n, 0 === br && wr(lt)), r2 !== n && (yr = t3, r2 = gr()), t3 = r2)))))), t3; } function mn() { var t3, r2, o2, u2, a2, i2, s2, c2; return t3 = Cr, 117 === e.charCodeAt(Cr) ? (r2 = Y, Cr++) : (r2 = n, 0 === br && wr(ht)), r2 !== n ? (o2 = Cr, u2 = Cr, (a2 = En()) !== n && (i2 = En()) !== n && (s2 = En()) !== n && (c2 = En()) !== n ? u2 = a2 = [a2, i2, s2, c2] : (Cr = u2, u2 = n), (o2 = u2 !== n ? e.substring(o2, Cr) : u2) !== n ? (yr = t3, t3 = mr(o2)) : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n), t3; } function _n() { var t3; return t3 = e.charAt(Cr), ue.test(t3) ? Cr++ : (t3 = n, 0 === br && wr(dt)), t3; } function En() { var t3; return t3 = e.charAt(Cr), ae.test(t3) ? Cr++ : (t3 = n, 0 === br && wr(gt)), t3; } function vn() { var t3, r2, o2, u2; return br++, t3 = Cr, 123 === e.charCodeAt(Cr) ? (r2 = f, Cr++) : (r2 = n, 0 === br && wr(de)), r2 !== n ? (o2 = function() { var e2, t4; return e2 = Cr, t4 = Cn(), yr = e2, e2 = t4 = Er(t4); }(), 125 === e.charCodeAt(Cr) ? (u2 = h4, Cr++) : (u2 = n, 0 === br && wr(ge)), u2 !== n ? t3 = o2 : (Cr = t3, t3 = n)) : (Cr = t3, t3 = n), br--, t3 === n && (r2 = n, 0 === br && wr(At)), t3; } function Cn() { var t3, r2, o2, u2, a2, i2; if (t3 = Cr, r2 = [], o2 = [], u2 = Cr, a2 = Cr, br++, i2 = e.charAt(Cr), ie.test(i2) ? Cr++ : (i2 = n, 0 === br && wr(mt)), br--, i2 === n ? a2 = void 0 : (Cr = a2, a2 = n), a2 !== n && (i2 = Kr()) !== n ? u2 = a2 = [a2, i2] : (Cr = u2, u2 = n), u2 !== n) for (; u2 !== n; ) o2.push(u2), u2 = Cr, a2 = Cr, br++, i2 = e.charAt(Cr), ie.test(i2) ? Cr++ : (i2 = n, 0 === br && wr(mt)), br--, i2 === n ? a2 = void 0 : (Cr = a2, a2 = n), a2 !== n && (i2 = Kr()) !== n ? u2 = a2 = [a2, i2] : (Cr = u2, u2 = n); else o2 = n; for (o2 === n && (o2 = Cr, 123 === e.charCodeAt(Cr) ? (u2 = f, Cr++) : (u2 = n, 0 === br && wr(de)), u2 !== n ? (a2 = Cn(), 125 === e.charCodeAt(Cr) ? (i2 = h4, Cr++) : (i2 = n, 0 === br && wr(ge)), i2 !== n ? o2 = u2 = [u2, a2, i2] : (Cr = o2, o2 = n)) : (Cr = o2, o2 = n)); o2 !== n; ) { if (r2.push(o2), o2 = [], u2 = Cr, a2 = Cr, br++, i2 = e.charAt(Cr), ie.test(i2) ? Cr++ : (i2 = n, 0 === br && wr(mt)), br--, i2 === n ? a2 = void 0 : (Cr = a2, a2 = n), a2 !== n && (i2 = Kr()) !== n ? u2 = a2 = [a2, i2] : (Cr = u2, u2 = n), u2 !== n) for (; u2 !== n; ) o2.push(u2), u2 = Cr, a2 = Cr, br++, i2 = e.charAt(Cr), ie.test(i2) ? Cr++ : (i2 = n, 0 === br && wr(mt)), br--, i2 === n ? a2 = void 0 : (Cr = a2, a2 = n), a2 !== n && (i2 = Kr()) !== n ? u2 = a2 = [a2, i2] : (Cr = u2, u2 = n); else o2 = n; o2 === n && (o2 = Cr, 123 === e.charCodeAt(Cr) ? (u2 = f, Cr++) : (u2 = n, 0 === br && wr(de)), u2 !== n ? (a2 = Cn(), 125 === e.charCodeAt(Cr) ? (i2 = h4, Cr++) : (i2 = n, 0 === br && wr(ge)), i2 !== n ? o2 = u2 = [u2, a2, i2] : (Cr = o2, o2 = n)) : (Cr = o2, o2 = n)); } return e.substring(t3, Cr); } function yn() { var e2, t3; for (e2 = [], (t3 = Zr()) === n && (t3 = tn()) === n && (t3 = rn()); t3 !== n; ) e2.push(t3), (t3 = Zr()) === n && (t3 = tn()) === n && (t3 = rn()); return e2; } function $n() { var t3, r2, o2, u2; if (t3 = [], r2 = Cr, o2 = yn(), 59 === e.charCodeAt(Cr) ? (u2 = s, Cr++) : (u2 = n, 0 === br && wr(le)), u2 !== n ? r2 = o2 = [o2, u2] : (Cr = r2, r2 = n), r2 !== n) for (; r2 !== n; ) t3.push(r2), r2 = Cr, o2 = yn(), 59 === e.charCodeAt(Cr) ? (u2 = s, Cr++) : (u2 = n, 0 === br && wr(le)), u2 !== n ? r2 = o2 = [o2, u2] : (Cr = r2, r2 = n); else t3 = n; return t3 === n && (t3 = Cr, r2 = function() { var e2, t4; for (e2 = [], (t4 = Zr()) === n && (t4 = nn()); t4 !== n; ) e2.push(t4), (t4 = Zr()) === n && (t4 = nn()); return e2; }(), (o2 = on()) === n && (o2 = null), (u2 = tn()) !== n ? t3 = r2 = [r2, o2, u2] : (Cr = t3, t3 = n), t3 === n && (t3 = Cr, r2 = yn(), o2 = function() { var t4, r3; return t4 = Cr, br++, e.length > Cr ? (r3 = e.charAt(Cr), Cr++) : (r3 = n, 0 === br && wr(se)), br--, r3 === n ? t4 = void 0 : (Cr = t4, t4 = n), t4; }(), o2 !== n ? t3 = r2 = [r2, o2] : (Cr = t3, t3 = n))), t3; } var Sn = t2.reservedWords || []; if (r = a(), t2.peg$library) return { peg$result: r, peg$currPos: Cr, peg$FAILED: n, peg$maxFailExpected: Fr, peg$maxFailPos: Sr }; if (r !== n && Cr === e.length) return r; throw r !== n && Cr < e.length && wr({ type: "end" }), function(e2, t3, r2) { return new peg$SyntaxError(peg$SyntaxError.buildMessage(e2, t3), e2, t3, r2); }(Fr, Sr < e.length ? e.charAt(Sr) : null, Sr < e.length ? Lr(Sr, Sr + 1) : Lr(Sr, Sr)); } peg$subclass(peg$SyntaxError, Error), peg$SyntaxError.prototype.format = function(e) { var t2 = "Error: " + this.message; if (this.location) { var r, n = null; for (r = 0; r < e.length; r++) if (e[r].source === this.location.source) { n = e[r].text.split(/\r\n|\n|\r/g); break; } var o = this.location.start, u = this.location.source && "function" == typeof this.location.source.offset ? this.location.source.offset(o) : o, a = this.location.source + ":" + u.line + ":" + u.column; if (n) { var i = this.location.end, s = peg$padEnd("", u.line.toString().length, " "), c = n[o.line - 1], l = (o.line === i.line ? i.column : c.length + 1) - o.column || 1; t2 += "\n --> " + a + "\n" + s + " |\n" + u.line + " | " + c + "\n" + s + " | " + peg$padEnd("", o.column - 1, " ") + peg$padEnd("", l, "^"); } else t2 += "\n at " + a; } return t2; }, peg$SyntaxError.buildMessage = function(e, t2) { var r = { literal: function(e2) { return '"' + o(e2.text) + '"'; }, class: function(e2) { var t3 = e2.parts.map(function(e3) { return Array.isArray(e3) ? u(e3[0]) + "-" + u(e3[1]) : u(e3); }); return "[" + (e2.inverted ? "^" : "") + t3.join("") + "]"; }, any: function() { return "any character"; }, end: function() { return "end of input"; }, other: function(e2) { return e2.description; } }; function n(e2) { return e2.charCodeAt(0).toString(16).toUpperCase(); } function o(e2) { return e2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(e3) { return "\\x0" + n(e3); }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(e3) { return "\\x" + n(e3); }); } function u(e2) { return e2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(e3) { return "\\x0" + n(e3); }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(e3) { return "\\x" + n(e3); }); } function a(e2) { return r[e2.type](e2); } return "Expected " + function(e2) { var t3, r2, n2 = e2.map(a); if (n2.sort(), n2.length > 0) { for (t3 = 1, r2 = 1; t3 < n2.length; t3++) n2[t3 - 1] !== n2[t3] && (n2[r2] = n2[t3], r2++); n2.length = r2; } switch (n2.length) { case 1: return n2[0]; case 2: return n2[0] + " or " + n2[1]; default: return n2.slice(0, -1).join(", ") + ", or " + n2[n2.length - 1]; } }(e) + " but " + function(e2) { return e2 ? '"' + o(e2) + '"' : "end of input"; }(t2) + " found."; }; var parser$1 = { StartRules: ["Grammar", "ImportsAndSource"], SyntaxError: peg$SyntaxError, parse: peg$parse }, __spreadArray$2 = commonjsGlobal && commonjsGlobal.__spreadArray || function(e, t2, r) { if (r || 2 === arguments.length) for (var n, o = 0, u = t2.length; o < u; o++) !n && o in t2 || (n || (n = Array.prototype.slice.call(t2, 0, o)), n[o] = t2[o]); return e.concat(n || Array.prototype.slice.call(t2)); }, asts$5 = asts_1, op = opcodes_1, Stack = stack, VERSION$1 = version, _a = utils, stringEscape = _a.stringEscape, regexpClassEscape = _a.regexpClassEscape, SourceNode = sourceMap.SourceNode, GrammarLocation$1 = grammarLocation, parse = parser$1.parse; function toSourceNode(e, t2, r) { var n = GrammarLocation$1.offsetStart(t2), o = n.line, u = n.column - 1, a = e.split("\n"); return 1 === a.length ? new SourceNode(o, u, String(t2.source), e, r) : new SourceNode(null, null, String(t2.source), a.map(function(e2, n2) { return new SourceNode(o + n2, 0 === n2 ? u : 0, String(t2.source), n2 === a.length - 1 ? e2 : [e2, "\n"], r); })); } function wrapInSourceNode(e, t2, r, n, o) { if (r) { var u = GrammarLocation$1.offsetEnd(r); return new SourceNode(null, null, String(r.source), [e, toSourceNode(t2, r, o), new SourceNode(u.line, u.column - 1, String(r.source), n)]); } return new SourceNode(null, null, null, [e, t2, n]); } function generateJS$1(e, t2) { if (!(e.literals && e.locations && e.classes && e.expectations && e.functions && e.importedNames)) throw new Error("generateJS: generate bytecode was not called."); var r = e.literals, n = e.locations, o = e.classes, u = e.expectations, a = e.functions, i = e.importedNames; if (!t2.allowedStartRules) throw new Error("generateJS: options.allowedStartRules was not set."); var s = t2.allowedStartRules, c = t2.dependencies || {}; function l(e2) { var t3 = true, r2 = 0; return function e3(n2) { return Array.isArray(n2) ? n2.map(function(t4) { return e3(t4); }) : n2 instanceof SourceNode ? (r2++, n2.children = e3(n2.children), r2--, n2) : (n2 = t3 ? n2.replace(/^(.+)$/gm, " $1") : n2.replace(/\n(\s*\S)/g, "\n $1"), t3 = !r2 || n2.endsWith("\n"), n2); }(e2); } function p(e2) { return "peg$c" + e2; } function f(e2) { return "peg$r" + e2; } function h4(e2) { return "peg$e" + e2; } function d(e2) { return "peg$f" + e2; } function g(e2) { return "peg$import" + e2; } function A(e2) { return "peg$parse" + e2; } function m(e2) { return e2.codeLocation ? toSourceNode(e2.code, e2.codeLocation, "$" + e2.type) : e2.code; } e.code = function(r2) { function n2() { return ["// @generated by Peggy ".concat(VERSION$1, "."), "//", "// https://peggyjs.org/"]; } function o2() { var e2 = ["{"]; return t2.trace && e2.push(" DefaultTracer: peg$DefaultTracer,"), t2.allowedStartRules && e2.push(" StartRules: [" + t2.allowedStartRules.map(function(e3) { return '"' + e3 + '"'; }).join(", ") + "],"), e2.push(" SyntaxError: peg$SyntaxError,", " parse: peg$parse"), e2.push("}"), e2.join("\n"); } var u2 = { bare: function() { if (Object.keys(c).length > 0 || e.imports.length > 0) throw new Error("Dependencies not supported in format 'bare'."); return __spreadArray$2(__spreadArray$2([], n2(), true), ["(function() {", ' "use strict";', "", r2, "", l("return " + o2() + ";"), "})()"], false); }, commonjs: function() { var t3 = Object.keys(c), u3 = n2(); u3.push("", '"use strict";', ""), t3.length > 0 && (t3.forEach(function(e2) { u3.push("var " + e2 + ' = require("' + stringEscape(c[e2]) + '");'); }), u3.push("")); for (var a3 = e.imports.length, i2 = 0; i2 < a3; i2++) u3.push("var " + g(i2) + ' = require("' + stringEscape(e.imports[i2].from.module) + '");'); return u3.push("", r2, "", "module.exports = " + o2() + ";"), u3; }, es: function() { var o3 = Object.keys(c), u3 = n2(); u3.push(""), o3.length > 0 && (o3.forEach(function(e2) { u3.push("import " + e2 + ' from "' + stringEscape(c[e2]) + '";'); }), u3.push("")); for (var a3 = 0; a3 < e.imports.length; a3++) u3.push("import * as " + g(a3) + ' from "' + stringEscape(e.imports[a3].from.module) + '";'); return u3.push("", r2, ""), u3.push("const peg$allowedStartRules = [", " " + (t2.allowedStartRules ? t2.allowedStartRules.map(function(e2) { return '"' + e2 + '"'; }).join(",\n ") : ""), "];", ""), u3.push("export {"), t2.trace && u3.push(" peg$DefaultTracer as DefaultTracer,"), u3.push(" peg$allowedStartRules as StartRules,", " peg$SyntaxError as SyntaxError,", " peg$parse as parse", "};"), u3; }, amd: function() { if (e.imports.length > 0) throw new Error("Imports are not supported in format 'amd'."); var t3 = Object.keys(c), u3 = "[" + t3.map(function(e2) { return c[e2]; }).map(function(e2) { return '"' + stringEscape(e2) + '"'; }).join(", ") + "]", a3 = t3.join(", "); return __spreadArray$2(__spreadArray$2([], n2(), true), ["define(" + u3 + ", function(" + a3 + ") {", ' "use strict";', "", r2, "", l("return " + o2() + ";"), "});"], false); }, globals: function() { if (Object.keys(c).length > 0 || e.imports.length > 0) throw new Error("Dependencies not supported in format 'globals'."); if (!t2.exportVar) throw new Error("No export variable defined"); return __spreadArray$2(__spreadArray$2([], n2(), true), ["(function(root) {", ' "use strict";', "", r2, "", l("root." + t2.exportVar + " = " + o2() + ";"), "})(this);"], false); }, umd: function() { if (e.imports.length > 0) throw new Error("Imports are not supported in format 'umd'."); var u3 = Object.keys(c), a3 = u3.map(function(e2) { return c[e2]; }), i2 = "[" + a3.map(function(e2) { return '"' + stringEscape(e2) + '"'; }).join(", ") + "]", s2 = a3.map(function(e2) { return 'require("' + stringEscape(e2) + '")'; }).join(", "), p2 = u3.join(", "), f2 = n2(); return f2.push("(function(root, factory) {", ' if (typeof define === "function" && define.amd) {', " define(" + i2 + ", factory);", ' } else if (typeof module === "object" && module.exports) {', " module.exports = factory(" + s2 + ");"), t2.exportVar && f2.push(" } else {", " root." + t2.exportVar + " = factory();"), f2.push(" }", "})(this, function(" + p2 + ") {", ' "use strict";', "", r2, "", l("return " + o2() + ";"), "});"), f2; } }, a2 = u2[t2.format || "bare"](); return new SourceNode(null, null, t2.grammarSource, a2.map(function(e2) { return e2 instanceof SourceNode ? e2 : e2 + "\n"; })); }(function() { var c2 = [], _ = e.topLevelInitializer; if (_) if (Array.isArray(_)) { if ("es" === t2.format) { for (var E = [], v = [], C = 0, y = _; C < y.length; C++) { var $ = y[C], S = parse($.code, { startRule: "ImportsAndSource", grammarSource: new GrammarLocation$1($.codeLocation.source, $.codeLocation.start) }), F = S[0], b = S[1]; F.code ? (E.push(F), v.push(b)) : v.push($); } _ = v.concat(E); } for (var P = 0, x = _.slice(0).reverse(); P < x.length; P++) $ = x[P], c2.push(m($)), c2.push(""); } else c2.push(m(_)), c2.push(""); c2.push("function peg$subclass(child, parent) {", " function C() { this.constructor = child; }", " C.prototype = parent.prototype;", " child.prototype = new C();", "}", "", "function peg$SyntaxError(message, expected, found, location) {", " var self = Error.call(this, message);", " // istanbul ignore next Check is a necessary evil to support older environments", " if (Object.setPrototypeOf) {", " Object.setPrototypeOf(self, peg$SyntaxError.prototype);", " }", " self.expected = expected;", " self.found = found;", " self.location = location;", ' self.name = "SyntaxError";', " return self;", "}", "", "peg$subclass(peg$SyntaxError, Error);", "", "function peg$padEnd(str, targetLength, padString) {", ' padString = padString || " ";', " if (str.length > targetLength) { return str; }", " targetLength -= str.length;", " padString += padString.repeat(targetLength);", " return str + padString.slice(0, targetLength);", "}", "", "peg$SyntaxError.prototype.format = function(sources) {", ' var str = "Error: " + this.message;', " if (this.location) {", " var src = null;", " var k;", " for (k = 0; k < sources.length; k++) {", " if (sources[k].source === this.location.source) {", " src = sources[k].text.split(/\\r\\n|\\n|\\r/g);", " break;", " }", " }", " var s = this.location.start;", ' var offset_s = (this.location.source && (typeof this.location.source.offset === "function"))', " ? this.location.source.offset(s)", " : s;", ' var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;', " if (src) {", " var e = this.location.end;", ` var filler = peg$padEnd("", offset_s.line.toString().length, ' ');`, " var line = src[s.line - 1];", " var last = s.line === e.line ? e.column : line.length + 1;", " var hatLen = (last - s.column) || 1;", ' str += "\\n --> " + loc + "\\n"', ' + filler + " |\\n"', ' + offset_s.line + " | " + line + "\\n"', ` + filler + " | " + peg$padEnd("", s.column - 1, ' ')`, ' + peg$padEnd("", hatLen, "^");', " } else {", ' str += "\\n at " + loc;', " }", " }", " return str;", "};", "", "peg$SyntaxError.buildMessage = function(expected, found) {", " var DESCRIBE_EXPECTATION_FNS = {", " literal: function(expectation) {", ' return "\\"" + literalEscape(expectation.text) + "\\"";', " },", "", " class: function(expectation) {", " var escapedParts = expectation.parts.map(function(part) {", " return Array.isArray(part)", ' ? classEscape(part[0]) + "-" + classEscape(part[1])', " : classEscape(part);", " });", "", ' return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";', " },", "", " any: function() {", ' return "any character";', " },", "", " end: function() {", ' return "end of input";', " },", "", " other: function(expectation) {", " return expectation.description;", " }", " };", "", " function hex(ch) {", " return ch.charCodeAt(0).toString(16).toUpperCase();", " }", "", " function literalEscape(s) {", " return s", ' .replace(/\\\\/g, "\\\\\\\\")', ' .replace(/"/g, "\\\\\\"")', ' .replace(/\\0/g, "\\\\0")', ' .replace(/\\t/g, "\\\\t")', ' .replace(/\\n/g, "\\\\n")', ' .replace(/\\r/g, "\\\\r")', ' .replace(/[\\x00-\\x0F]/g, function(ch) { return "\\\\x0" + hex(ch); })', ' .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return "\\\\x" + hex(ch); });', " }", "", " function classEscape(s) {", " return s", ' .replace(/\\\\/g, "\\\\\\\\")', ' .replace(/\\]/g, "\\\\]")', ' .replace(/\\^/g, "\\\\^")', ' .replace(/-/g, "\\\\-")', ' .replace(/\\0/g, "\\\\0")', ' .replace(/\\t/g, "\\\\t")', ' .replace(/\\n/g, "\\\\n")', ' .replace(/\\r/g, "\\\\r")', ' .replace(/[\\x00-\\x0F]/g, function(ch) { return "\\\\x0" + hex(ch); })', ' .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return "\\\\x" + hex(ch); });', " }", "", " function describeExpectation(expectation) {", " return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);", " }", "", " function describeExpected(expected) {", " var descriptions = expected.map(describeExpectation);", " var i, j;", "", " descriptions.sort();", "", " if (descriptions.length > 0) {", " for (i = 1, j = 1; i < descriptions.length; i++) {", " if (descriptions[i - 1] !== descriptions[i]) {", " descriptions[j] = descriptions[i];", " j++;", " }", " }", " descriptions.length = j;", " }", "", " switch (descriptions.length) {", " case 1:", " return descriptions[0];", "", " case 2:", ' return descriptions[0] + " or " + descriptions[1];', "", " default:", ' return descriptions.slice(0, -1).join(", ")', ' + ", or "', " + descriptions[descriptions.length - 1];", " }", " }", "", " function describeFound(found) {", ' return found ? "\\"" + literalEscape(found) + "\\"" : "end of input";', " }", "", ' return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";', "};", ""), t2.trace && c2.push("function peg$DefaultTracer() {", " this.indentLevel = 0;", "}", "", "peg$DefaultTracer.prototype.trace = function(event) {", " var that = this;", "", " function log(event) {", " function repeat(string, n) {", ' var result = "", i;', "", " for (i = 0; i < n; i++) {", " result += string;", " }", "", " return result;", " }", "", " function pad(string, length) {", ' return string + repeat(" ", length - string.length);', " }", "", ' if (typeof console === "object") {', " console.log(", ' event.location.start.line + ":" + event.location.start.column + "-"', ' + event.location.end.line + ":" + event.location.end.column + " "', ' + pad(event.type, 10) + " "', ' + repeat(" ", that.indentLevel) + event.rule', " );", " }", " }", "", " switch (event.type) {", ' case "rule.enter":', " log(event);", " this.indentLevel++;", " break;", "", ' case "rule.match":', " this.indentLevel--;", " log(event);", " break;", "", ' case "rule.fail":', " this.indentLevel--;", " log(event);", " break;", "", " default:", ' throw new Error("Invalid event type: " + event.type + ".");', " }", "};", ""); var D = "{ " + s.map(function(e2) { return e2 + ": " + A(e2); }).join(", ") + " }", R = A(s[0]); if (c2.push("function peg$parse(input, options) {", " options = options !== undefined ? options : {};", "", " var peg$FAILED = {};", " var peg$source = options.grammarSource;", "", " var peg$startRuleFunctions = " + D + ";", " var peg$startRuleFunction = " + R + ";", "", new SourceNode(null, null, t2.grammarSource, __spreadArray$2([r.map(function(e2, t3) { return " var " + p(t3) + ' = "' + stringEscape(e2) + '";'; }).concat("", o.map(function(e2, t3) { return " var " + f(t3) + " = /^[" + ((r2 = e2).inverted ? "^" : "") + r2.value.map(function(e3) { return Array.isArray(e3) ? regexpClassEscape(e3[0]) + "-" + regexpClassEscape(e3[1]) : regexpClassEscape(e3); }).join("") + "]/" + (r2.ignoreCase ? "i" : "") + ";"; var r2; })).concat("", u.map(function(e2, t3) { return " var " + h4(t3) + " = " + function(e3) { switch (e3.type) { case "rule": return 'peg$otherExpectation("' + stringEscape(e3.value) + '")'; case "literal": return 'peg$literalExpectation("' + stringEscape(e3.value) + '", ' + e3.ignoreCase + ")"; case "class": return "peg$classExpectation([" + e3.value.map(function(e4) { return Array.isArray(e4) ? '["' + stringEscape(e4[0]) + '", "' + stringEscape(e4[1]) + '"]' : '"' + stringEscape(e4) + '"'; }).join(", ") + "], " + e3.inverted + ", " + e3.ignoreCase + ")"; case "any": return "peg$anyExpectation()"; default: throw new Error("Unknown expectation type (" + JSON.stringify(e3) + ")"); } }(e2) + ";"; })).concat("").join("\n")], a.map(function(e2, t3) { return wrapInSourceNode("\n var ".concat(d(t3), " = function(").concat(e2.params.join(", "), ") {"), e2.body, e2.location, "};"); }), true)), "", " var peg$currPos = options.peg$currPos | 0;", " var peg$savedPos = peg$currPos;", " var peg$posDetailsCache = [{ line: 1, column: 1 }];", " var peg$maxFailPos = peg$currPos;", " var peg$maxFailExpected = options.peg$maxFailExpected || [];", " var peg$silentFails = options.peg$silentFails | 0;", ""), t2.cache && c2.push(" var peg$resultsCache = {};", ""), t2.trace && c2.push(' var peg$tracer = "tracer" in options ? options.tracer : new peg$DefaultTracer();', ""), c2.push(" var peg$result;", "", " if (options.startRule) {", " if (!(options.startRule in peg$startRuleFunctions)) {", ` throw new Error("Can't start parsing from rule \\"" + options.startRule + "\\".");`, " }", "", " peg$startRuleFunction = peg$startRuleFunctions[options.startRule];", " }", "", " function text() {", " return input.substring(peg$savedPos, peg$currPos);", " }", "", " function offset() {", " return peg$savedPos;", " }", "", " function range() {", " return {", " source: peg$source,", " start: peg$savedPos,", " end: peg$currPos", " };", " }", "", " function location() {", " return peg$computeLocation(peg$savedPos, peg$currPos);", " }", "", " function expected(description, location) {", " location = location !== undefined", " ? location", " : peg$computeLocation(peg$savedPos, peg$currPos);", "", " throw peg$buildStructuredError(", " [peg$otherExpectation(description)],", " input.substring(peg$savedPos, peg$currPos),", " location", " );", " }", "", " function error(message, location) {", " location = location !== undefined", " ? location", " : peg$computeLocation(peg$savedPos, peg$currPos);", "", " throw peg$buildSimpleError(message, location);", " }", "", " function peg$literalExpectation(text, ignoreCase) {", ' return { type: "literal", text: text, ignoreCase: ignoreCase };', " }", "", " function peg$classExpectation(parts, inverted, ignoreCase) {", ' return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase };', " }", "", " function peg$anyExpectation() {", ' return { type: "any" };', " }", "", " function peg$endExpectation() {", ' return { type: "end" };', " }", "", " function peg$otherExpectation(description) {", ' return { type: "other", description: description };', " }", "", " function peg$computePosDetails(pos) {", " var details = peg$posDetailsCache[pos];", " var p;", "", " if (details) {", " return details;", " } else {", " if (pos >= peg$posDetailsCache.length) {", " p = peg$posDetailsCache.length - 1;", " } else {", " p = pos;", " while (!peg$posDetailsCache[--p]) {}", " }", "", " details = peg$posDetailsCache[p];", " details = {", " line: details.line,", " column: details.column", " };", "", " while (p < pos) {", " if (input.charCodeAt(p) === 10) {", " details.line++;", " details.column = 1;", " } else {", " details.column++;", " }", "", " p++;", " }", "", " peg$posDetailsCache[pos] = details;", "", " return details;", " }", " }", "", " function peg$computeLocation(startPos, endPos, offset) {", " var startPosDetails = peg$computePosDetails(startPos);", " var endPosDetails = peg$computePosDetails(endPos);", "", " var res = {", " source: peg$source,", " start: {", " offset: startPos,", " line: startPosDetails.line,", " column: startPosDetails.column", " },", " end: {", " offset: endPos,", " line: endPosDetails.line,", " column: endPosDetails.column", " }", " };", ' if (offset && peg$source && (typeof peg$source.offset === "function")) {', " res.start = peg$source.offset(res.start);", " res.end = peg$source.offset(res.end);", " }", " return res;", " }", "", " function peg$fail(expected) {", " if (peg$currPos < peg$maxFailPos) { return; }", "", " if (peg$currPos > peg$maxFailPos) {", " peg$maxFailPos = peg$currPos;", " peg$maxFailExpected = [];", " }", "", " peg$maxFailExpected.push(expected);", " }", "", " function peg$buildSimpleError(message, location) {", " return new peg$SyntaxError(message, null, null, location);", " }", "", " function peg$buildStructuredError(expected, found, location) {", " return new peg$SyntaxError(", " peg$SyntaxError.buildMessage(expected, found),", " expected,", " found,", " location", " );", " }", ""), e.imports.length > 0 && c2.push(" var peg$assign = Object.assign || function(t) {", " var i, s;", " for (i = 1; i < arguments.length; i++) {", " s = arguments[i];", " for (var p in s) {", " if (Object.prototype.hasOwnProperty.call(s, p)) {", " t[p] = s[p];", " }", " }", " }", " return t;", " };", "", " function peg$callLibrary(lib, startRule) {", " const opts = peg$assign({}, options, {", " startRule: startRule,", " peg$currPos: peg$currPos,", " peg$silentFails: peg$silentFails,", " peg$library: true,", " peg$maxFailExpected: peg$maxFailExpected", " });", " const res = lib.parse(input, opts);", " peg$currPos = res.peg$currPos;", " peg$maxFailPos = res.peg$maxFailPos;", " peg$maxFailExpected = res.peg$maxFailExpected;", " return (res.peg$result === res.peg$FAILED) ? peg$FAILED : res.peg$result;", " }", ""), e.rules.forEach(function(o2) { c2.push.apply(c2, l(function(o3) { var u2 = [], a2 = o3.bytecode, s2 = new Stack(o3.name, "s", "var", a2), c3 = function t3(o4) { var u3 = 0, a3 = o4.length, c4 = [], m2 = void 0; function _2(e2, r2, n2) { var a4 = r2 + 3, i2 = o4[u3 + a4 - 2], p2 = o4[u3 + a4 - 1], f2 = s2.checkedIf(u3, function() { return u3 += a4 + i2, (n2 || t3)(o4.slice(u3 - i2, u3)); }, p2 > 0 ? function() { return u3 += p2, t3(o4.slice(u3 - p2, u3)); } : null), h5 = f2[0], d2 = f2[1]; c4.push("if (" + e2 + ") {"), c4.push.apply(c4, l(h5)), p2 > 0 && (c4.push("} else {"), c4.push.apply(c4, l(d2))), c4.push("}"); } function E2(e2, r2, n2) { var a4 = r2 + 3, i2 = 1 === n2 ? "input.charAt(peg$currPos)" : "input.substr(peg$currPos, " + n2 + ")", l2 = null; o4[u3 + a4] === op.ACCEPT_N && o4[u3 + a4 + 1] === n2 && (c4.push(s2.push(i2)), i2 = s2.pop(), l2 = function(e3) { s2.sp++; var r3 = t3(e3.slice(2)); return r3.unshift(1 === n2 ? "peg$currPos++;" : "peg$currPos += " + n2 + ";"), r3; }), _2(e2(i2, null !== l2), r2, l2); } for (var v2 = function() { switch (o4[u3]) { case op.PUSH_EMPTY_STRING: c4.push(s2.push("''")), u3++; break; case op.PUSH_CURR_POS: c4.push(s2.push("peg$currPos")), u3++; break; case op.PUSH_UNDEFINED: c4.push(s2.push("undefined")), u3++; break; case op.PUSH_NULL: c4.push(s2.push("null")), u3++; break; case op.PUSH_FAILED: c4.push(s2.push("peg$FAILED")), u3++; break; case op.PUSH_EMPTY_ARRAY: c4.push(s2.push("[]")), u3++; break; case op.POP: s2.pop(), u3++; break; case op.POP_CURR_POS: c4.push("peg$currPos = " + s2.pop() + ";"), u3++; break; case op.POP_N: s2.pop(o4[u3 + 1]), u3 += 2; break; case op.NIP: m2 = s2.pop(), s2.pop(), c4.push(s2.push(m2)), u3++; break; case op.APPEND: m2 = s2.pop(), c4.push(s2.top() + ".push(" + m2 + ");"), u3++; break; case op.WRAP: c4.push(s2.push("[" + s2.pop(o4[u3 + 1]).join(", ") + "]")), u3 += 2; break; case op.TEXT: c4.push(s2.push("input.substring(" + s2.pop() + ", peg$currPos)")), u3++; break; case op.PLUCK: var a4 = o4[u3 + 3 - 1], v3 = 3 + a4; m2 = o4.slice(u3 + 3, u3 + v3), m2 = 1 === a4 ? s2.index(m2[0]) : "[ ".concat(m2.map(function(e2) { return s2.index(e2); }).join(", "), " ]"), s2.pop(o4[u3 + 1]), c4.push(s2.push(m2)), u3 += v3; break; case op.IF: _2(s2.top(), 0); break; case op.IF_ERROR: _2(s2.top() + " === peg$FAILED", 0); break; case op.IF_NOT_ERROR: _2(s2.top() + " !== peg$FAILED", 0); break; case op.IF_LT: _2(s2.top() + ".length < " + o4[u3 + 1], 1); break; case op.IF_GE: _2(s2.top() + ".length >= " + o4[u3 + 1], 1); break; case op.IF_LT_DYNAMIC: _2(s2.top() + ".length < (" + s2.index(o4[u3 + 1]) + "|0)", 1); break; case op.IF_GE_DYNAMIC: _2(s2.top() + ".length >= (" + s2.index(o4[u3 + 1]) + "|0)", 1); break; case op.WHILE_NOT_ERROR: P2 = s2.top() + " !== peg$FAILED", x2 = o4[u3 + 2 - 1], D2 = s2.checkedLoop(u3, function() { return u3 += 2 + x2, t3(o4.slice(u3 - x2, u3)); }), c4.push("while (" + P2 + ") {"), c4.push.apply(c4, l(D2)), c4.push("}"); break; case op.MATCH_ANY: _2("input.length > peg$currPos", 0); break; case op.MATCH_STRING: var C2 = o4[u3 + 1], y2 = r[C2]; E2(function(e2, t4) { return y2.length > 1 ? "".concat(e2, " === ").concat(p(C2)) : (e2 = t4 ? "".concat(e2, ".charCodeAt(0)") : "input.charCodeAt(peg$currPos)", "".concat(e2, " === ").concat(y2.charCodeAt(0))); }, 1, y2.length); break; case op.MATCH_STRING_IC: var $2 = o4[u3 + 1]; E2(function(e2) { return "".concat(e2, ".toLowerCase() === ").concat(p($2)); }, 1, r[$2].length); break; case op.MATCH_CHAR_CLASS: var S2 = o4[u3 + 1]; E2(function(e2) { return "".concat(f(S2), ".test(").concat(e2, ")"); }, 1, 1); break; case op.ACCEPT_N: c4.push(s2.push(o4[u3 + 1] > 1 ? "input.substr(peg$currPos, " + o4[u3 + 1] + ")" : "input.charAt(peg$currPos)")), c4.push(o4[u3 + 1] > 1 ? "peg$currPos += " + o4[u3 + 1] + ";" : "peg$currPos++;"), u3 += 2; break; case op.ACCEPT_STRING: c4.push(s2.push(p(o4[u3 + 1]))), c4.push(r[o4[u3 + 1]].length > 1 ? "peg$currPos += " + r[o4[u3 + 1]].length + ";" : "peg$currPos++;"), u3 += 2; break; case op.FAIL: c4.push(s2.push("peg$FAILED")), c4.push("if (peg$silentFails === 0) { peg$fail(" + h4(o4[u3 + 1]) + "); }"), u3 += 2; break; case op.LOAD_SAVED_POS: c4.push("peg$savedPos = " + s2.index(o4[u3 + 1]) + ";"), u3 += 2; break; case op.UPDATE_SAVED_POS: c4.push("peg$savedPos = peg$currPos;"), u3++; break; case op.CALL: m2 = function(e2) { var t4 = o4[u3 + 4 - 1]; return d(o4[u3 + 1]) + "(" + o4.slice(u3 + 4, u3 + 4 + t4).map(function(e3) { return s2.index(e3); }).join(", ") + ")"; }(), s2.pop(o4[u3 + 2]), c4.push(s2.push(m2)), u3 += 4 + o4[u3 + 3]; break; case op.RULE: c4.push(s2.push(A(e.rules[o4[u3 + 1]].name) + "()")), u3 += 2; break; case op.LIBRARY_RULE: var F2 = o4[u3 + 2], b2 = -1 === F2 ? "" : ', "' + i[F2] + '"'; c4.push(s2.push("peg$callLibrary(" + g(o4[u3 + 1]) + b2 + ")")), u3 += 3; break; case op.SILENT_FAILS_ON: c4.push("peg$silentFails++;"), u3++; break; case op.SILENT_FAILS_OFF: c4.push("peg$silentFails--;"), u3++; break; case op.SOURCE_MAP_PUSH: s2.sourceMapPush(c4, n[o4[u3 + 1]]), u3 += 2; break; case op.SOURCE_MAP_POP: s2.sourceMapPop(), u3++; break; case op.SOURCE_MAP_LABEL_PUSH: s2.labels[o4[u3 + 1]] = { label: r[o4[u3 + 2]], location: n[o4[u3 + 3]] }, u3 += 4; break; case op.SOURCE_MAP_LABEL_POP: delete s2.labels[o4[u3 + 1]], u3 += 2; break; default: throw new Error("Invalid opcode: " + o4[u3] + "."); } var P2, x2, D2; }; u3 < a3; ) v2(); return c4; }(a2); return u2.push(wrapInSourceNode("function ", A(o3.name), o3.nameLocation, "() {\n", o3.name)), t2.trace && u2.push(" var startPos = peg$currPos;"), u2.push(l(s2.defines())), u2.push.apply(u2, l(function(r2, n2) { var o4 = []; return o4.push(""), t2.trace && o4.push("peg$tracer.trace({", ' type: "rule.enter",', " rule: " + r2 + ",", " location: peg$computeLocation(startPos, startPos, true)", "});", ""), t2.cache && (o4.push("var key = peg$currPos * " + e.rules.length + " + " + n2 + ";", "var cached = peg$resultsCache[key];", "", "if (cached) {", " peg$currPos = cached.nextPos;", ""), t2.trace && o4.push("if (cached.result !== peg$FAILED) {", " peg$tracer.trace({", ' type: "rule.match",', " rule: " + r2 + ",", " result: cached.result,", " location: peg$computeLocation(startPos, peg$currPos, true)", " });", "} else {", " peg$tracer.trace({", ' type: "rule.fail",', " rule: " + r2 + ",", " location: peg$computeLocation(startPos, startPos, true)", " });", "}", ""), o4.push(" return cached.result;", "}", "")), o4; }('"' + stringEscape(o3.name) + '"', asts$5.indexOfRule(e, o3.name)))), u2.push.apply(u2, l(c3)), u2.push.apply(u2, l(function(e2, r2) { var n2 = []; return t2.cache && n2.push("", "peg$resultsCache[key] = { nextPos: peg$currPos, result: " + r2 + " };"), t2.trace && n2.push("", "if (" + r2 + " !== peg$FAILED) {", " peg$tracer.trace({", ' type: "rule.match",', " rule: " + e2 + ",", " result: " + r2 + ",", " location: peg$computeLocation(startPos, peg$currPos, true)", " });", "} else {", " peg$tracer.trace({", ' type: "rule.fail",', " rule: " + e2 + ",", " location: peg$computeLocation(startPos, startPos, true)", " });", "}"), n2.push("", "return " + r2 + ";"), n2; }('"' + stringEscape(o3.name) + '"', s2.result()))), u2.push("}"), u2; }(o2))), c2.push(""); }), e.initializer) if (Array.isArray(e.initializer)) for (var B = 0, O = e.initializer; B < O.length; B++) { var L = O[B]; c2.push(m(L)), c2.push(""); } else c2.push(m(e.initializer)), c2.push(""); return c2.push(" peg$result = peg$startRuleFunction();", "", " if (options.peg$library) {", " return /** @type {any} */ ({", " peg$result,", " peg$currPos,", " peg$FAILED,", " peg$maxFailExpected,", " peg$maxFailPos", " });", " }", " if (peg$result !== peg$FAILED && peg$currPos === input.length) {", " return peg$result;", " } else {", " if (peg$result !== peg$FAILED && peg$currPos < input.length) {", " peg$fail(peg$endExpectation());", " }", "", " throw peg$buildStructuredError(", " peg$maxFailExpected,", " peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,", " peg$maxFailPos < input.length", " ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)", " : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)", " );", " }", "}"), new SourceNode(null, null, t2.grammarSource, c2.map(function(e2) { return e2 instanceof SourceNode ? e2 : e2 + "\n"; })); }()); } var generateJs = generateJS$1, asts$4 = asts_1, visitor$8 = visitor_1; function removeProxyRules$1(e, t2, r) { var n = []; e.rules.forEach(function(o, u) { var a; "rule" === (a = o).type && "rule_ref" === a.expression.type && (function(e2, t3, n2) { visitor$8.build({ rule_ref: function(o2) { o2.name === t3 && (o2.name = n2, r.info('Proxy rule "'.concat(t3, '" replaced by the rule "').concat(n2, '"'), o2.location, [{ message: "This rule will be used", location: asts$4.findRule(e2, n2).nameLocation }])); } })(e2); }(e, o.name, o.expression.name), -1 === t2.allowedStartRules.indexOf(o.name) && n.push(u)); }), n.reverse(), n.forEach(function(t3) { e.rules.splice(t3, 1); }); } var removeProxyRules_1 = removeProxyRules$1, __assign = commonjsGlobal && commonjsGlobal.__assign || function() { return __assign = Object.assign || function(e) { for (var t2, r = 1, n = arguments.length; r < n; r++) for (var o in t2 = arguments[r]) Object.prototype.hasOwnProperty.call(t2, o) && (e[o] = t2[o]); return e; }, __assign.apply(this, arguments); }, __spreadArray$1 = commonjsGlobal && commonjsGlobal.__spreadArray || function(e, t2, r) { if (r || 2 === arguments.length) for (var n, o = 0, u = t2.length; o < u; o++) !n && o in t2 || (n || (n = Array.prototype.slice.call(t2, 0, o)), n[o] = t2[o]); return e.concat(n || Array.prototype.slice.call(t2)); }, visitor$7 = visitor_1; function cloneOver(e, t2) { var r = e, n = t2; Object.keys(r).forEach(function(e2) { return delete r[e2]; }), Object.keys(n).forEach(function(e2) { r[e2] = n[e2]; }); } function cleanParts(e) { e.sort(function(e2, t3) { var r2 = Array.isArray(e2) ? e2 : [e2, e2], n2 = r2[0], o2 = r2[1], u2 = Array.isArray(t3) ? t3 : [t3, t3], a2 = u2[0], i2 = u2[1]; return n2 !== a2 ? n2 < a2 ? -1 : 1 : o2 !== i2 ? o2 > i2 ? -1 : 1 : 0; }); for (var t2 = "", r = "", n = 0; n < e.length; n++) { var o = e[n], u = Array.isArray(o) ? o : [o, o], a = u[0], i = u[1]; i <= r ? e.splice(n--, 1) : r.charCodeAt(0) + 1 >= a.charCodeAt(0) ? (e.splice(n--, 1), e[n] = [t2, r = i]) : (t2 = a, r = i); } return e; } function mergeCharacterClasses$1(e) { var t2 = /* @__PURE__ */ Object.create(null); e.rules.forEach(function(e2) { return t2[e2.name] = e2.expression; }); var r = /* @__PURE__ */ Object.create(null), n = [function(e2, n2) { if ("class" === e2.type && !e2.inverted) return n2 && ((e2 = __assign({}, e2)).parts = __spreadArray$1([], e2.parts, true)), e2; if ("literal" === e2.type && 1 === e2.value.length) return { type: "class", parts: [e2.value], inverted: false, ignoreCase: e2.ignoreCase, location: e2.location }; if ("rule_ref" === e2.type) { var a = t2[e2.name]; if (a) { r[e2.name] || (r[e2.name] = true, u(a)); var i = o(a, true); return i && (i.location = e2.location), i; } } return null; }, visitor$7.build({ choice: function(e2) { var t3 = null, r2 = false; e2.alternatives.forEach(function(n2, a) { var i; u(n2); var s = o(n2); s ? t3 && t3.ignoreCase === s.ignoreCase ? ((i = t3.parts).push.apply(i, s.parts), e2.alternatives[a - 1] = t3, e2.alternatives[a] = t3, t3.location = { source: t3.location.source, start: t3.location.start, end: s.location.end }, r2 = true) : t3 = s : t3 = null; }), r2 && (e2.alternatives = e2.alternatives.filter(function(e3, t4, r3) { return !t4 || e3 !== r3[t4 - 1]; }), e2.alternatives.forEach(function(t4, r3) { "class" === t4.type && (t4.parts = cleanParts(t4.parts), 1 !== t4.parts.length || Array.isArray(t4.parts[0]) || t4.inverted || (e2.alternatives[r3] = { type: "literal", value: t4.parts[0], ignoreCase: t4.ignoreCase, location: t4.location })); }), 1 === e2.alternatives.length && cloneOver(e2, e2.alternatives[0])); }, text: function(e2) { if (u(e2.expression), "class" === e2.expression.type || "literal" === e2.expression.type) { var t3 = e2.location; cloneOver(e2, e2.expression), e2.location = t3; } } })], o = n[0], u = n[1]; e.rules.forEach(function(e2) { r[e2.name] = true, u(e2.expression); }); } var mergeCharacterClasses_1 = mergeCharacterClasses$1; function reportDuplicateImports$1(e, t2, r) { for (var n = {}, o = 0, u = e.imports; o < u.length; o++) for (var a = 0, i = u[o].what; a < i.length; a++) { var s = i[a]; "import_binding_all" === s.type && (Object.prototype.hasOwnProperty.call(n, s.binding) && r.error('Module "'.concat(s.binding, '" is already imported'), s.location, [{ message: "Original module location", location: n[s.binding] }]), n[s.binding] = s.location); } } var reportDuplicateImports_1 = reportDuplicateImports$1, visitor$6 = visitor_1; function reportDuplicateLabels$1(e, t2, r) { function n(e2) { var t3 = {}; return Object.keys(e2).forEach(function(r2) { t3[r2] = e2[r2]; }), t3; } function o(e2, t3) { u(e2.expression, n(t3)); } var u = visitor$6.build({ rule: function(e2) { u(e2.expression, {}); }, choice: function(e2, t3) { e2.alternatives.forEach(function(e3) { u(e3, n(t3)); }); }, action: o, labeled: function(e2, t3) { var n2 = e2.label; n2 && Object.prototype.hasOwnProperty.call(t3, n2) && r.error('Label "'.concat(e2.label, '" is already defined'), e2.labelLocation, [{ message: "Original label location", location: t3[n2] }]), u(e2.expression, t3), t3[e2.label] = e2.labelLocation; }, text: o, simple_and: o, simple_not: o, optional: o, zero_or_more: o, one_or_more: o, repeated: function(e2, t3) { e2.delimiter && u(e2.delimiter, n(t3)), u(e2.expression, n(t3)); }, group: o }); u(e); } var reportDuplicateLabels_1 = reportDuplicateLabels$1, visitor$5 = visitor_1; function reportDuplicateRules$1(e, t2, r) { var n = {}; visitor$5.build({ rule: function(e2) { Object.prototype.hasOwnProperty.call(n, e2.name) ? r.error('Rule "'.concat(e2.name, '" is already defined'), e2.nameLocation, [{ message: "Original rule location", location: n[e2.name] }]) : n[e2.name] = e2.nameLocation; } })(e); } var reportDuplicateRules_1 = reportDuplicateRules$1, asts$3 = asts_1, visitor$4 = visitor_1; function reportInfiniteRecursion$1(e, t2, r) { var n = [], o = [], u = visitor$4.build({ rule: function(e2) { r.errors > 0 || (n.push(e2.name), u(e2.expression), n.pop()); }, sequence: function(t3) { r.errors > 0 || t3.elements.every(function(t4) { return u(t4), !(r.errors > 0 || asts$3.alwaysConsumesOnSuccess(e, t4)); }); }, repeated: function(t3) { r.errors > 0 || (u(t3.expression), t3.delimiter && !asts$3.alwaysConsumesOnSuccess(e, t3.expression) && u(t3.delimiter)); }, rule_ref: function(t3) { if (!(r.errors > 0)) { o.push(t3); var a = asts$3.findRule(e, t3.name); if (-1 !== n.indexOf(t3.name)) return n.push(t3.name), void r.error("Possible infinite loop when parsing (left recursion: " + n.join(" -> ") + ")", a.nameLocation, o.map(function(e2, t4, r2) { return { message: t4 + 1 !== r2.length ? "Step ".concat(t4 + 1, ': call of the rule "').concat(e2.name, '" without input consumption') : "Step ".concat(t4 + 1, ": call itself without input consumption - left recursion"), location: e2.location }; })); a && u(a), o.pop(); } } }); u(e); } var reportInfiniteRecursion_1 = reportInfiniteRecursion$1, asts$2 = asts_1, visitor$3 = visitor_1; function reportInfiniteRepetition$1(e, t2, r) { var n = visitor$3.build({ zero_or_more: function(t3) { asts$2.alwaysConsumesOnSuccess(e, t3.expression) || r.error("Possible infinite loop when parsing (repetition used with an expression that may not consume any input)", t3.location); }, one_or_more: function(t3) { asts$2.alwaysConsumesOnSuccess(e, t3.expression) || r.error("Possible infinite loop when parsing (repetition used with an expression that may not consume any input)", t3.location); }, repeated: function(t3) { if (t3.delimiter && n(t3.delimiter), !(asts$2.alwaysConsumesOnSuccess(e, t3.expression) || t3.delimiter && asts$2.alwaysConsumesOnSuccess(e, t3.delimiter))) if (null === t3.max.value) r.error("Possible infinite loop when parsing (unbounded range repetition used with an expression that may not consume any input)", t3.location); else { var o = t3.min ? t3.min : t3.max; r.warning("constant" === o.type && "constant" === t3.max.type ? "An expression may not consume any input and may always match ".concat(t3.max.value, " times") : "An expression may not consume any input and may always match with a maximum repetition count", t3.location); } } }); n(e); } var reportInfiniteRepetition_1 = reportInfiniteRepetition$1, asts$1 = asts_1, visitor$2 = visitor_1; function reportUndefinedRules$1(e, t2, r) { visitor$2.build({ rule_ref: function(t3) { asts$1.findRule(e, t3.name) || r.error('Rule "'.concat(t3.name, '" is not defined'), t3.location); } })(e); } var reportUndefinedRules_1 = reportUndefinedRules$1, visitor$1 = visitor_1; function reportIncorrectPlucking$1(e, t2, r) { var n = visitor$1.build({ action: function(e2) { n(e2.expression, e2); }, labeled: function(e2, t3) { e2.pick && t3 && r.error('"@" cannot be used with an action block', e2.labelLocation, [{ message: "Action block location", location: t3.codeLocation }]), n(e2.expression); } }); n(e); } var reportIncorrectPlucking_1 = reportIncorrectPlucking$1, __spreadArray = commonjsGlobal && commonjsGlobal.__spreadArray || function(e, t2, r) { if (r || 2 === arguments.length) for (var n, o = 0, u = t2.length; o < u; o++) !n && o in t2 || (n || (n = Array.prototype.slice.call(t2, 0, o)), n[o] = t2[o]); return e.concat(n || Array.prototype.slice.call(t2)); }, GrammarError$1 = grammarError, Defaults = function() { function e(e2) { "function" == typeof (e2 = void 0 !== e2 ? e2 : {}).error && (this.error = e2.error), "function" == typeof e2.warning && (this.warning = e2.warning), "function" == typeof e2.info && (this.info = e2.info); } return e.prototype.error = function() { }, e.prototype.warning = function() { }, e.prototype.info = function() { }, e; }(), Session$1 = function() { function e(e2) { this._callbacks = new Defaults(e2), this._firstError = null, this.errors = 0, this.problems = [], this.stage = null; } return e.prototype.error = function() { for (var e2, t2 = [], r = 0; r < arguments.length; r++) t2[r] = arguments[r]; ++this.errors, null === this._firstError && (this._firstError = new (GrammarError$1.bind.apply(GrammarError$1, __spreadArray([void 0], t2, false)))(), this._firstError.stage = this.stage, this._firstError.problems = this.problems), this.problems.push(__spreadArray(["error"], t2, true)), (e2 = this._callbacks).error.apply(e2, __spreadArray([this.stage], t2, false)); }, e.prototype.warning = function() { for (var e2, t2 = [], r = 0; r < arguments.length; r++) t2[r] = arguments[r]; this.problems.push(__spreadArray(["warning"], t2, true)), (e2 = this._callbacks).warning.apply(e2, __spreadArray([this.stage], t2, false)); }, e.prototype.info = function() { for (var e2, t2 = [], r = 0; r < arguments.length; r++) t2[r] = arguments[r]; this.problems.push(__spreadArray(["info"], t2, true)), (e2 = this._callbacks).info.apply(e2, __spreadArray([this.stage], t2, false)); }, e.prototype.checkErrors = function() { if (0 !== this.errors) throw this._firstError; }, e; }(), session = Session$1, addImportedRules = addImportedRules_1, fixLibraryNumbers = fixLibraryNumbers_1, generateBytecode = generateBytecode_1, generateJS = generateJs, inferenceMatchResult = inferenceMatchResult_1, removeProxyRules = removeProxyRules_1, mergeCharacterClasses = mergeCharacterClasses_1, reportDuplicateImports = reportDuplicateImports_1, reportDuplicateLabels = reportDuplicateLabels_1, reportDuplicateRules = reportDuplicateRules_1, reportInfiniteRecursion = reportInfiniteRecursion_1, reportInfiniteRepetition = reportInfiniteRepetition_1, reportUndefinedRules = reportUndefinedRules_1, reportIncorrectPlucking = reportIncorrectPlucking_1, Session = session, visitor = visitor_1, base64 = utils.base64; function processOptions(e, t2) { var r = {}; return Object.keys(e).forEach(function(t3) { r[t3] = e[t3]; }), Object.keys(t2).forEach(function(e2) { Object.prototype.hasOwnProperty.call(r, e2) || (r[e2] = t2[e2]); }), r; } function isSourceMapCapable(e) { return "string" == typeof e ? e.length > 0 : e && "function" == typeof e.offset; } var compiler$1 = { visitor, passes: { prepare: [addImportedRules, reportInfiniteRecursion], check: [reportUndefinedRules, reportDuplicateRules, reportDuplicateLabels, reportInfiniteRepetition, reportIncorrectPlucking, reportDuplicateImports], transform: [fixLibraryNumbers, removeProxyRules, mergeCharacterClasses, inferenceMatchResult], generate: [generateBytecode, generateJS] }, compile: function(ast, passes, options) { options = void 0 !== options ? options : {}; var defaultStartRules = [ast.rules[0].name]; if (options = processOptions(options, { allowedStartRules: defaultStartRules, cache: false, dependencies: {}, exportVar: null, format: "bare", output: "parser", trace: false }), null !== options.allowedStartRules && void 0 !== options.allowedStartRules || (options.allowedStartRules = defaultStartRules), !Array.isArray(options.allowedStartRules)) throw new Error("allowedStartRules must be an array"); 0 === options.allowedStartRules.length && (options.allowedStartRules = defaultStartRules); var allRules = ast.rules.map(function(e) { return e.name; }); if (options.allowedStartRules.some(function(e) { return "*" === e; })) options.allowedStartRules = allRules; else for (var _i = 0, _a = options.allowedStartRules; _i < _a.length; _i++) { var rule = _a[_i]; if (-1 === allRules.indexOf(rule)) throw new Error('Unknown start rule "'.concat(rule, '"')); } if (("source-and-map" === options.output || "source-with-inline-map" === options.output) && !isSourceMapCapable(options.grammarSource)) throw new Error("Must provide grammarSource (as a string or GrammarLocation) in order to generate source maps"); var session = new Session(options); switch (Object.keys(passes).forEach(function(e) { session.stage = e, session.info("Process stage ".concat(e)), passes[e].forEach(function(t2) { session.info("Process pass ".concat(e, ".").concat(t2.name)), t2(ast, options, session); }), session.checkErrors(); }), options.output) { case "parser": return eval(ast.code.toString()); case "source": return ast.code.toString(); case "source-and-map": return ast.code; case "source-with-inline-map": if ("undefined" == typeof TextEncoder) throw new Error("TextEncoder is not supported by this platform"); var sourceMap = ast.code.toStringWithSourceMap(), encoder = new TextEncoder(), b64 = base64(encoder.encode(JSON.stringify(sourceMap.map.toJSON()))); return sourceMap.code + "//# sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(b64, "\n"); case "ast": return ast; default: throw new Error("Invalid output format: " + options.output + "."); } } }, compiler_1 = compiler$1, GrammarError = grammarError, GrammarLocation = grammarLocation, asts = asts_1, compiler = compiler_1, parser = parser$1, VERSION = version, RESERVED_WORDS = ["break", "case", "catch", "class", "const", "continue", "debugger", "default", "delete", "do", "else", "export", "extends", "finally", "for", "function", "if", "import", "in", "instanceof", "new", "return", "super", "switch", "this", "throw", "try", "typeof", "var", "void", "while", "with", "null", "true", "false", "enum", "implements", "interface", "let", "package", "private", "protected", "public", "static", "yield", "await", "arguments", "eval"], peg = { VERSION, RESERVED_WORDS, GrammarError, GrammarLocation, parser, compiler, generate: function(e, t2) { var r, n, o = "plugins" in (t2 = void 0 !== t2 ? t2 : {}) ? t2.plugins : [], u = { parser: peg.parser, passes: (r = peg.compiler.passes, n = {}, Object.keys(r).forEach(function(e2) { n[e2] = r[e2].slice(); }), n), reservedWords: peg.RESERVED_WORDS.slice() }; o.forEach(function(e2) { e2.use(u, t2); }), Array.isArray(e) || (e = [{ source: t2.grammarSource, text: e }]); var a = asts.combine(e.map(function(e2) { var t3 = e2.source, r2 = e2.text; return u.parser.parse(r2, { grammarSource: t3, reservedWords: u.reservedWords }); })); return peg.compiler.compile(a, u.passes, t2); } }, peg_1 = peg, peg$1 = getDefaultExportFromCjs(peg_1); return peg$1; }); } }); // node_modules/.pnpm/vhtml@2.2.0/node_modules/vhtml/dist/vhtml.js var require_vhtml = __commonJS({ "node_modules/.pnpm/vhtml@2.2.0/node_modules/vhtml/dist/vhtml.js"(exports2, module2) { (function(global2, factory) { typeof exports2 === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global2.vhtml = factory(); })(exports2, function() { "use strict"; var emptyTags = ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"]; var esc = function esc2(str) { return String(str).replace(/[&<>"']/g, function(s) { return "&" + map3[s] + ";"; }); }; var map3 = { "&": "amp", "<": "lt", ">": "gt", '"': "quot", "'": "apos" }; var setInnerHTMLAttr = "dangerouslySetInnerHTML"; var DOMAttributeNames = { className: "class", htmlFor: "for" }; var sanitized = {}; function h4(name, attrs) { var stack2 = [], s = ""; attrs = attrs || {}; for (var i = arguments.length; i-- > 2; ) { stack2.push(arguments[i]); } if (typeof name === "function") { attrs.children = stack2.reverse(); return name(attrs); } if (name) { s += "<" + name; if (attrs) for (var _i2 in attrs) { if (attrs[_i2] !== false && attrs[_i2] != null && _i2 !== setInnerHTMLAttr) { s += " " + (DOMAttributeNames[_i2] ? DOMAttributeNames[_i2] : esc(_i2)) + '="' + esc(attrs[_i2]) + '"'; } } s += ">"; } if (emptyTags.indexOf(name) === -1) { if (attrs[setInnerHTMLAttr]) { s += attrs[setInnerHTMLAttr].__html; } else while (stack2.length) { var child = stack2.pop(); if (child) { if (child.pop) { for (var _i22 = child.length; _i22--; ) { stack2.push(child[_i22]); } } else { s += sanitized[child] === true ? child : esc(child); } } } s += name ? "" : ""; } sanitized[s] = true; return s; } return h4; }); } }); // src/main.ts var main_exports = {}; __export(main_exports, { default: () => SRPlugin }); module.exports = __toCommonJS(main_exports); var import_obsidian14 = require("obsidian"); // src/algorithms/base/repetition-item.ts var RepetitionItem = class { // scheduling get hasSchedule() { return this.scheduleInfo != null; } get isNew() { return !this.hasSchedule; } get isDue() { return this.hasSchedule && this.scheduleInfo.isDue(); } }; // src/algorithms/base/srs-algorithm.ts var SrsAlgorithm = class _SrsAlgorithm { static getInstance() { if (!_SrsAlgorithm.instance) { throw new Error("there is no SrsAlgorithm instance."); } return _SrsAlgorithm.instance; } }; // src/algorithms/osr/obsidian-vault-notelink-info-finder.ts var ObsidianVaultNoteLinkInfoFinder = class { constructor(metadataCache) { this.metadataCache = metadataCache; } getResolvedTargetLinksForNotePath(path2) { return this.metadataCache.resolvedLinks[path2]; } }; // src/algorithms/osr/srs-algorithm-osr.ts var import_moment2 = __toESM(require_moment()); // src/constants.ts var SCHEDULING_INFO_REGEX = /^---\r?\n((?:.*\r?\n)*)sr-due: (.+)\r?\nsr-interval: (\d+)\r?\nsr-ease: (\d+)\r?\n((?:.*\r?\n)?)---/; var YAML_FRONT_MATTER_REGEX = /^---\r?\n((?:.*\r?\n)*?)---/; var MULTI_SCHEDULING_EXTRACTOR = /!([\d-]+),(\d+),(\d+)/gm; var LEGACY_SCHEDULING_EXTRACTOR = //gm; var OBSIDIAN_TAG_AT_STARTOFLINE_REGEX = /^#[^\s#]+/gi; var OBSIDIAN_BLOCK_ID_ENDOFLINE_REGEX = / (\^[a-zA-Z0-9-]+)$/; var PREFERRED_DATE_FORMAT = "YYYY-MM-DD"; var ALLOWED_DATE_FORMATS = [PREFERRED_DATE_FORMAT, "DD-MM-YYYY", "ddd MMM DD YYYY"]; var IMAGE_FORMATS = [ "jpg", "jpeg", "gif", "png", "svg", "webp", "apng", "avif", "jfif", "pjpeg", "pjp", "bmp" ]; var AUDIO_FORMATS = ["mp3", "webm", "m4a", "wav", "ogg"]; var VIDEO_FORMATS = ["mp4", "mkv", "avi", "mov"]; var COLLAPSE_ICON = ''; var TICKS_PER_DAY = 24 * 3600 * 1e3; var SR_HTML_COMMENT_BEGIN = ""; // src/lang/helpers.ts var import_obsidian = require("obsidian"); // src/lang/locale/af.ts var af_default = {}; // src/lang/locale/ar.ts var ar_default = { // flashcard-modal.tsx DECKS: "\u0627\u0644\u0631\u064F\u0632\u0645\u064E\u0627\u062A", DUE_CARDS: "\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u064F\u0633\u062A\u062D\u0642\u0629", NEW_CARDS: "\u0628\u0637\u0627\u0642\u0627\u062A \u062C\u062F\u064A\u062F\u0629", TOTAL_CARDS: "\u0625\u062C\u0645\u0627\u0644\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", BACK: "\u0631\u062C\u0648\u0639", SKIP: "Skip", EDIT_CARD: "\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", RESET_CARD_PROGRESS: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u062A\u0642\u062F\u0651\u064F\u0645\u0652 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", HARD: "\u0635\u0639\u0628", GOOD: "\u062C\u064A\u062F", EASY: "\u0633\u0647\u0644", SHOW_ANSWER: "\u0623\u0638\u0647\u0650\u0631 \u0627\u0644\u0625\u062C\u0627\u0628\u0629", CARD_PROGRESS_RESET: ".\u062A\u0645\u0651\u064E\u062A \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u062A\u0642\u062F\u0651\u064F\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", SAVE: "\u062D\u0641\u0638", CANCEL: "\u0625\u0644\u063A\u0627\u0621", NO_INPUT: ".\u0644\u0645 \u064A\u062A\u0650\u0645 \u062A\u0642\u062F\u064A\u0645 \u0623\u064A \u0645\u064F\u062F\u062E\u0644\u0627\u062A", CURRENT_EASE_HELP_TEXT: ":\u0627\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629", CURRENT_INTERVAL_HELP_TEXT: ":\u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u0627\u0644\u062D\u0627\u0644\u064A", CARD_GENERATED_FROM: "${notePath} :\u062A\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0645\u0646", // main.ts OPEN_NOTE_FOR_REVIEW: "\u0627\u0641\u062A\u062D \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629", REVIEW_CARDS: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", REVIEW_DIFFICULTY_FILE_MENU: "${difficulty} :\u0645\u0631\u0627\u062C\u0639\u0629", REVIEW_NOTE_DIFFICULTY_CMD: "${difficulty} \u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0643\u0640", CRAM_ALL_CARDS: "\u062D\u062F\u062F \u0631\u064F\u0632\u0645\u064E\u0629 \u0644\u0644\u062D\u0634\u0631", REVIEW_ALL_CARDS: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u0646 \u062C\u0645\u064A\u0639 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A", REVIEW_CARDS_IN_NOTE: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629", CRAM_CARDS_IN_NOTE: "\u0623\u062D\u0634\u0631 \u062C\u0645\u064A\u0639 \u0628\u0637\u0627\u0642\u0627\u062A \u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629", VIEW_STATS: "\u0639\u0631\u0636 \u0627\u0644\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A", OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar", STATUS_BAR: "\u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u062D\u0642\u0629 ${dueFlashcardsCount},\u0645\u0644\u0627\u062D\u0638\u0627\u062A ${dueNotesCount}:\u0645\u0631\u0627\u062C\u0639\u0629", SYNC_TIME_TAKEN: "${t}ms \u0627\u0633\u062A\u063A\u0631\u0627\u0642 \u0627\u0644\u0645\u0632\u0627\u0645\u0646\u0629", NOTE_IN_IGNORED_FOLDER: ".\u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u064A\u062A\u0645 \u062D\u0641\u0638\u0647\u0627 \u0636\u0645\u0646 \u0627\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u0630\u064A \u062A\u0645 \u062A\u062C\u0627\u0647\u0644\u0647 (\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A)", PLEASE_TAG_NOTE: ".\u064A\u0631\u062C\u0649 \u0648\u0636\u0639 \u0648\u0633\u0645 \u0639\u0644\u0649 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0628\u0634\u0643\u0644 \u0645\u0646\u0627\u0633\u0628 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629 (\u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A)", RESPONSE_RECEIVED: ".\u0627\u0633\u062A\u064F\u0644\u0645\u062A \u0627\u0644\u0627\u0633\u062A\u062C\u0627\u0628\u0629", NO_DECK_EXISTS: "${deckName} \u0644\u0627 \u064A\u0648\u062C\u062F \u0631\u064F\u0632\u0645\u064E\u0629", ALL_CAUGHT_UP: "\u{1F606} \u0644\u0642\u062F \u062A\u0645 \u0627\u0644\u0642\u0628\u0636 \u0639\u0644\u064A\u0643\u0645 \u062C\u0645\u064A\u0639\u0627 \u0627\u0644\u0622\u0646", // scheduling.ts DAYS_STR_IVL: "\u064A\u0648\u0645/\u0623\u064A\u0627\u0645 ${interval}", MONTHS_STR_IVL: "\u0634\u0647\u0631/\u0623\u0634\u0647\u0631 ${interval}", YEARS_STR_IVL: "\u0633\u0646\u0629/\u0633\u0646\u0648\u0627\u062A ${interval}", DAYS_STR_IVL_MOBILE: "\u064A${interval}", MONTHS_STR_IVL_MOBILE: "\u0634${interval}", YEARS_STR_IVL_MOBILE: "\u0633${interval}", // settings.ts SETTINGS_HEADER: "Spaced Repetition Plugin - Settings", GROUP_TAGS_FOLDERS: "Tags & Folders", GROUP_FLASHCARD_REVIEW: "Flashcard Review", GROUP_FLASHCARD_SEPARATORS: "Flashcard Separators", GROUP_DATA_STORAGE: "Storage of Scheduling Data", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contributing", CHECK_WIKI: '.wiki \u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u060C \u062A\u062D\u0642\u0642 \u0645\u0646', GITHUB_DISCUSSIONS: 'Visit the discussions section for Q&A help, feedback, and general discussion.', GITHUB_ISSUES: 'Raise an issue here if you have a feature request or a bug report.', GITHUB_SOURCE_CODE: 'Project source code available on GitHub', CODE_CONTRIBUTION_INFO: 'Information on code contributions', TRANSLATION_CONTRIBUTION_INFO: 'Information on translating the plugin to your language', PROJECT_CONTRIBUTIONS: 'Raise an issue here if you have a feature request or a bug report', FOLDERS_TO_IGNORE: "\u0645\u062C\u0644\u062F\u0627\u062A \u0644\u062A\u062C\u0627\u0647\u0644\u0647\u0627", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "\u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", FLASHCARD_EASY_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u0633\u0647\u0644", FLASHCARD_GOOD_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u062C\u064A\u062F", FLASHCARD_HARD_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u0635\u0639\u0628", FLASHCARD_EASY_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u0633\u0647\u0644', FLASHCARD_GOOD_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u062C\u064A\u062F', FLASHCARD_HARD_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u0635\u0639\u0628', REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "\u0648\u064F\u0633\u0648\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", FLASHCARD_TAGS_DESC: "#2\u0623\u062F\u062E\u0644 \u0627\u0644\u0648\u064F\u0633\u0648\u0645 \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0645\u0633\u0627\u0641\u0627\u062A \u0623\u0648 \u0623\u0633\u0637\u0631 \u062C\u062F\u064A\u062F\u0629 \u060C \u0623\u064A \u0628\u0637\u0627\u0642\u0627\u062A# \u0631\u0632\u0645\u06293# \u0631\u0632\u0645\u0629", CONVERT_FOLDERS_TO_DECKS: "\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0625\u0644\u0649 \u0645\u0644\u0641\u0627\u062A \u0623\u0635\u0644\u064A\u0629 \u0648 \u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0641\u0631\u0639\u064A\u0629\u061F", CONVERT_FOLDERS_TO_DECKS_DESC: ".\u0647\u0630\u0627 \u0647\u0648 \u0628\u062F\u064A\u0644 \u0644\u062E\u064A\u0627\u0631 \u0648\u0633\u0648\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 \u0623\u0639\u0644\u0627\u0647", INLINE_SCHEDULING_COMMENTS: "\u062D\u0641\u0638 \u062A\u0639\u0644\u064A\u0642 \u0627\u0644\u062C\u062F\u0648\u0644\u0629 \u0639\u0644\u0649 \u0646\u0641\u0633 \u0627\u0644\u0633\u0637\u0631 \u0645\u062B\u0644 \u0627\u0644\u0633\u0637\u0631 \u0627\u0644\u0623\u062E\u064A\u0631 \u0644\u0644\u0628\u0637\u0627\u0642\u0629 \u061F", INLINE_SCHEDULING_COMMENTS_DESC: "\u0644\u0627 \u062A\u0643\u0633\u0631 \u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 HTML \u0633\u064A\u0624\u062F\u064A \u062A\u0634\u063A\u064A\u0644 \u0647\u0630\u0627 \u0625\u0644\u0649 \u062C\u0639\u0644 \u062A\u0639\u0644\u064A\u0642\u0627\u062A", BURY_SIBLINGS_TILL_NEXT_DAY: "\u0623\u062E\u0641\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0634\u0642\u064A\u0642\u0629 \u062D\u062A\u0649 \u0627\u0644\u064A\u0648\u0645 \u0627\u0644\u062A\u0627\u0644\u064A", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "cloze deletions : \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0634\u0642\u064A\u0642\u0629 \u0647\u064A \u0628\u0637\u0627\u0642\u0627\u062A \u062A\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0645\u0646 \u0646\u0641\u0633 \u0646\u0635 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 \u0643\u0640", SHOW_CARD_CONTEXT: "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0633\u064A\u0627\u0642 \u0641\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A\u061F", SHOW_CARD_CONTEXT_DESC: "i.e. Title > Heading 1 > Subheading > ... > Subheading", CARD_MODAL_HEIGHT_PERCENT: "\u0646\u0633\u0628\u0629 \u0627\u0631\u062A\u0641\u0627\u0639 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", CARD_MODAL_SIZE_PERCENT_DESC: "\u064A\u062C\u0628 \u0636\u0628\u0637\u0647\u0627 \u0639\u0644\u0649 100 \u066A \u0639\u0644\u0649 \u0627\u0644\u0647\u0627\u062A\u0641 \u0627\u0644\u0645\u062D\u0645\u0648\u0644 \u0623\u0648 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0635\u0648\u0631 \u0643\u0628\u064A\u0631\u0629 \u062C\u062F\u064B\u0627", RESET_DEFAULT: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0625\u0644\u0649 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A", CARD_MODAL_WIDTH_PERCENT: "\u0646\u0633\u0628\u0629 \u0639\u0631\u0636 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", RANDOMIZE_CARD_ORDER: "\u062A\u0631\u062A\u064A\u0628 \u0628\u0637\u0627\u0642\u0629 \u0639\u0634\u0648\u0627\u0626\u064A \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629\u061F", REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", REVIEW_DECK_ORDER: "Order decks are displayed during review", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", DISABLE_CLOZE_CARDS: "\u061Fcloze \u062A\u0639\u0637\u064A\u0644 \u0628\u0637\u0627\u0642\u0627\u062A", CONVERT_HIGHLIGHTS_TO_CLOZES: "Convert ==hightlights== to clozes?", CONVERT_BOLD_TEXT_TO_CLOZES: "Convert **bolded text** to clozes?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "Convert {{curly brackets}} to clozes?", INLINE_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0636\u0645\u0646\u0629", FIX_SEPARATORS_MANUALLY_WARNING: "\u0636\u0639 \u0641\u064A \u062D\u0633\u0627\u0628\u0643 \u0623\u0646\u0647 \u0628\u0639\u062F \u062A\u063A\u064A\u064A\u0631 \u0647\u0630\u0627 \u060C \u064A\u062C\u0628 \u0639\u0644\u064A\u0643 \u062A\u0639\u062F\u064A\u0644 \u0623\u064A \u0628\u0637\u0627\u0642\u0627\u062A \u0644\u062F\u064A\u0643 \u0628\u0627\u0644\u0641\u0639\u0644 \u064A\u062F\u0648\u064A\u064B\u0627", INLINE_REVERSED_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0639\u0643\u0633\u064A\u0629 \u0627\u0644\u0645\u0636\u0645\u0646\u0629", MULTILINE_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u062A\u0639\u062F\u062F\u0629", MULTILINE_REVERSED_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0639\u0643\u0633\u064A\u0629 \u0627\u0644\u0645\u062A\u0639\u062F\u062F\u0629", MULTILINE_CARDS_END_MARKER: "\u0627\u0644\u0623\u062D\u0631\u0641 \u0627\u0644\u062A\u064A \u062A\u062F\u0644 \u0639\u0644\u0649 \u0646\u0647\u0627\u064A\u0629 \u0627\u0644\u0643\u0644\u0648\u0632\u0627\u062A \u0648\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u062A\u0639\u0644\u0645 \u0627\u0644\u0645\u062A\u0639\u062F\u062F\u0629 \u0627\u0644\u0623\u0633\u0637\u0631", NOTES: "\u0645\u0644\u0627\u062D\u0638\u0627\u062A", REVIEW_PANE_ON_STARTUP: "\u062A\u0645\u0643\u064A\u0646 \u062C\u0632\u0621 \u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0639\u0646\u062F \u0628\u062F\u0621 \u0627\u0644\u062A\u0634\u063A\u064A\u0644", TAGS_TO_REVIEW: "\u0648\u0633\u0648\u0645 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629", TAGS_TO_REVIEW_DESC: "#\u0623\u062F\u062E\u0644 \u0627\u0644\u0648\u0633\u0648\u0645 \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0645\u0633\u0627\u0641\u0627\u062A \u0623\u0648 \u062E\u0637\u0648\u0637 \u062C\u062F\u064A\u062F\u0629 \u060C \u0623\u064A : \u0645\u0631\u0627\u062C\u0639\u0629# \u0648\u0633\u06452# \u0648\u0633\u06453", OPEN_RANDOM_NOTE: "\u0627\u0641\u062A\u062D \u0645\u0644\u0627\u062D\u0638\u0629 \u0639\u0634\u0648\u0627\u0626\u064A\u0629 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629", OPEN_RANDOM_NOTE_DESC: "(Pagerank) \u0639\u0646\u062F \u062A\u0639\u0637\u064A\u0644 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 \u060C\u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0633\u064A\u062A\u0645 \u062A\u0631\u062A\u064A\u0628\u064F\u0647\u0627 \u062D\u0633\u0628 \u0627\u0644\u0623\u0647\u0645\u064A\u0629", AUTO_NEXT_NOTE: "\u0627\u0641\u062A\u062D \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629 \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627 \u0628\u0639\u062F \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629", ENABLE_FILE_MENU_REVIEW_OPTIONS: "\u0641\u0639\u0651\u0644 \u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629 \u0641\u064A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0644\u0641 (\u0645\u062B\u0627\u0644: \u0645\u0631\u0627\u062C\u0639\u0629: \u0633\u0647\u0644\u060C \u062C\u064A\u062F\u060C \u0635\u0639\u0628)", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u0625\u0630\u0627 \u0642\u0645\u062A \u0628\u062A\u0639\u0637\u064A\u0644 \u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629 \u0641\u064A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0644\u0641\u060C \u064A\u0645\u0643\u0646\u0643 \u0645\u0631\u0627\u062C\u0639\u0629 \u0645\u0644\u0627\u062D\u0638\u0627\u062A\u0643 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0625\u0636\u0627\u0641\u0629 \u0648\u0625\u0630\u0627 \u0643\u0646\u062A \u0642\u062F \u062D\u062F\u062F\u062A\u0647\u0627\u060C \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0645\u0641\u0627\u062A\u064A\u062D \u0627\u0644\u0627\u062E\u062A\u0635\u0627\u0631 \u0627\u0644\u0645\u0631\u062A\u0628\u0637\u0629.", MAX_N_DAYS_REVIEW_QUEUE: "\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062F\u062F \u0627\u0644\u0623\u064A\u0627\u0645 \u0627\u0644\u062A\u064A \u064A\u062C\u0628 \u0639\u0631\u0636\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0644\u0648\u062D\u0629 \u0627\u0644\u064A\u0645\u0646\u0649", MIN_ONE_DAY: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0639\u062F\u062F \u0627\u0644\u0623\u064A\u0627\u0645 1 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644", VALID_NUMBER_WARNING: "\u064A\u0631\u062C\u0649 \u062A\u0642\u062F\u064A\u0645 \u0631\u0642\u0645 \u0635\u0627\u0644\u062D", UI_PREFERENCES: "\u062A\u0641\u0636\u064A\u0644\u0627\u062A \u0648\u0627\u062C\u0647\u0629 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u0634\u062C\u0631\u064A \u0644\u0644\u0631\u064F\u0632\u0645 \u0645\u0648\u0633\u0639 \u0628\u062D\u064A\u062B \u062A\u0637\u0647\u0631 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0641\u0631\u0639\u064A\u0629 \u0643\u0644\u0647\u0627", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: " \u0639\u0637\u0644 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 \u0644\u0637\u064A \u0627\u0644\u0631\u064F\u0632\u0645 \u0627\u0644\u0645\u062A\u062F\u0627\u062E\u0644\u0629 \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 , \u0645\u0641\u064A\u062F \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0628\u0637\u0627\u0642\u0627\u062A \u062A\u0646\u062A\u0645\u064A \u0625\u0644\u0649 \u0627\u0644\u0639\u062F\u064A\u062F \u0645\u0646 \u0627\u0644\u0631\u064F\u0632\u0645 \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0645\u0644\u0641", ALGORITHM: "\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629", CHECK_ALGORITHM_WIKI: 'algorithm implementation :\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u062A\u062D\u0642\u0642 \u0645\u0646', BASE_EASE: "\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0642\u0627\u0639\u062F\u0629", BASE_EASE_DESC: "\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 = 130 \u060C \u0648\u064A\u0641\u0636\u0644 \u062D\u0648\u0627\u0644\u064A 250.", BASE_EASE_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0642\u0627\u0639\u062F\u0629 130 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.", LAPSE_INTERVAL_CHANGE: "\u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u064A\u062A\u063A\u064A\u0631 \u0639\u0646\u062F \u0645\u0631\u0627\u062C\u0639\u0629 \u0628\u0637\u0627\u0642\u0629/\u0645\u0644\u0627\u062D\u0638\u0629 \u0635\u0639\u0628\u0629", LAPSE_INTERVAL_CHANGE_DESC: "newInterval = oldInterval * intervalChange / 100.", EASY_BONUS: "\u0645\u0643\u0627\u0641\u0623\u0629 \u0633\u0647\u0644\u0629", EASY_BONUS_DESC: "\u062A\u062A\u064A\u062D \u0644\u0643 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0633\u0647\u0644\u0629 \u0636\u0628\u0637 \u0627\u0644\u0641\u0631\u0642 \u0641\u064A \u0627\u0644\u0641\u0648\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A\u0629 \u0628\u064A\u0646 \u0627\u0644\u0631\u062F \u0627\u0644\u062C\u064A\u062F \u0648\u0627\u0644\u0633\u0647\u0644 \u0639\u0644\u0649 \u0628\u0637\u0627\u0642\u0629/\u0645\u0644\u0627\u062D\u0638\u0629 (\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 = 100 \u066A).", EASY_BONUS_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0633\u0647\u0644\u0629 100 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.", MAX_INTERVAL: "Maximum interval in days", MAX_INTERVAL_DESC: "\u064A\u062A\u064A\u062D \u0644\u0643 \u0648\u0636\u0639 \u062D\u062F \u0623\u0639\u0644\u0649 \u0644\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A (\u0627\u0641\u062A\u0631\u0627\u0636\u064A = 100 \u0639\u0627\u0645).", MAX_INTERVAL_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u0644\u0645\u062F\u0629 \u064A\u0648\u0645 \u0648\u0627\u062D\u062F \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.", MAX_LINK_CONTRIB: "\u0623\u0642\u0635\u0649 \u0645\u0633\u0627\u0647\u0645\u0629 \u0627\u0631\u062A\u0628\u0627\u0637", MAX_LINK_CONTRIB_DESC: "\u0623\u0642\u0635\u0649 \u0645\u0633\u0627\u0647\u0645\u0629 \u0644\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0645\u0631\u062C\u062D\u0629 \u0644\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0627\u0644\u0645\u0631\u062A\u0628\u0637\u0629 \u0628\u0627\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0623\u0648\u0644\u064A\u0629.", LOGGING: "\u062A\u0633\u062C\u064A\u0644", DISPLAY_DEBUG_INFO: "\u0639\u0631\u0636 \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u062A\u0635\u062D\u064A\u062D \u0639\u0644\u0649 \u0648\u062D\u062F\u0629 \u062A\u062D\u0643\u0645 \u0627\u0644\u0645\u0637\u0648\u0631", DISPLAY_PARSER_DEBUG_INFO: "Display debugging information for the parser on the developer console", // sidebar.ts NOTES_REVIEW_QUEUE: "\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629", CLOSE: "\u0623\u063A\u0644\u0642", NEW: "\u062C\u062F\u064A\u062F", YESTERDAY: "\u0627\u0644\u0628\u0627\u0631\u062D\u0629", TODAY: "\u0627\u0644\u064A\u0648\u0645", TOMORROW: "\u0627\u0644\u063A\u062F", // stats-modal.tsx STATS_TITLE: "\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A", MONTH: "\u0634\u0647\u0631", QUARTER: "\u0631\u0628\u0639 \u0627\u0644\u0633\u0646\u0629", YEAR: "\u0633\u0646\u0629", LIFETIME: "", FORECAST: "", FORECAST_DESC: "\u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u062D\u0642\u0629 \u0641\u064A \u0627\u0644\u0645\u0633\u062A\u0642\u0628\u0644", SCHEDULED: "\u0627\u0644\u0645\u0642\u0631\u0631", DAYS: "\u0623\u064A\u0627\u0645", NUMBER_OF_CARDS: "\u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", REVIEWS_PER_DAY: "\u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0627\u062A/\u0627\u0644\u064A\u0648\u0645 ${avg} :\u0645\u062A\u0648\u0633\u0637", INTERVALS: "\u0641\u0648\u0627\u0635\u0644 \u0632\u0645\u0646\u064A\u0629", INTERVALS_DESC: "\u0627\u0644\u062A\u0623\u062E\u064A\u0631 \u062D\u062A\u0649 \u064A\u062A\u0645 \u0639\u0631\u0636 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0627\u062A \u0645\u0631\u0629 \u0623\u062E\u0631\u0649", COUNT: "\u0639\u062F\u062F", INTERVALS_SUMMARY: "${longest} : \u0623\u0637\u0648\u0644 \u0641\u0627\u0635\u0644 \u0632\u0645\u0646\u064A ,${avg} :\u0645\u062A\u0648\u0633\u0637 \u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A", EASES: "\u0627\u0644\u0633\u0647\u0648\u0644\u0629", EASES_SUMMARY: "${avgEase} :\u0645\u062A\u0648\u0633\u0637 \u0627\u0644\u0633\u0647\u0648\u0644\u0629", CARD_TYPES: "\u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", CARD_TYPES_DESC: "\u0648\u0647\u0630\u0627 \u064A\u0634\u0645\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u062E\u0641\u064A\u0629 \u0643\u0630\u0644\u0643 \u060C \u0625\u0646 \u0648\u062C\u062F\u062A", CARD_TYPE_NEW: "\u062C\u062F\u064A\u062F\u0629", CARD_TYPE_YOUNG: "\u0635\u063A\u064A\u0631\u0629", CARD_TYPE_MATURE: "\u0646\u0627\u0636\u062C\u0629", CARD_TYPES_SUMMARY: " ${totalCardsCount} :\u0625\u062C\u0645\u0627\u0644\u064A \u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A" }; // src/lang/locale/bn.ts var bn_default = {}; // src/lang/locale/cz.ts var cz_default = { // flashcard-modal.tsx DECKS: "Bal\xED\u010Dky", DUE_CARDS: "Karti\u010Dky po term\xEDnu", NEW_CARDS: "Nov\xE9 karti\u010Dky", TOTAL_CARDS: "Karti\u010Dek celkem", BACK: "Back", SKIP: "Skip", EDIT_CARD: "Edit Card", RESET_CARD_PROGRESS: "Vynulovat pokrok karti\u010Dky", HARD: "T\u011B\u017Ek\xE9", GOOD: "Dobr\xE9", EASY: "Jednoduch\xE9", SHOW_ANSWER: "Uk\xE1zat odpov\u011B\u010F", CARD_PROGRESS_RESET: "Pokrok karti\u010Dky byl vynulov\xE1n.", SAVE: "Save", CANCEL: "Cancel", NO_INPUT: "No input provided.", CURRENT_EASE_HELP_TEXT: "Current Ease: ", CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", CARD_GENERATED_FROM: "Generated from: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "Otev\u0159\xEDt pozn\xE1mku k revizi", REVIEW_CARDS: "Pozn\xE1mek k revizi", REVIEW_DIFFICULTY_FILE_MENU: "Revize: ${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "Ozna\u010Dit pozn\xE1mku jako ${difficulty}", REVIEW_ALL_CARDS: "Revidovat karti\u010Dky ve v\u0161ech pozn\xE1mk\xE1ch", CRAM_ALL_CARDS: "Select a deck to cram", REVIEW_CARDS_IN_NOTE: "Revidovat karti\u010Dky v t\xE9to pozn\xE1mce.", CRAM_CARDS_IN_NOTE: "Cram karti\u010Dky v t\xE9to pozn\xE1mce.", VIEW_STATS: "Uk\xE1zat statistiky", OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar", STATUS_BAR: "Revize: ${dueNotesCount} pozn\xE1mek, ${dueFlashcardsCount} karti\u010Dek po term\xEDnu", SYNC_TIME_TAKEN: "Synchronizace trvala ${t}ms", NOTE_IN_IGNORED_FOLDER: "Pozn\xE1mka je ulo\u017Eena v ignorovan\xE9 slo\u017Ece (zkontrolujte nastaven\xED).", PLEASE_TAG_NOTE: "Pros\xEDm ozna\u010Dne pozn\xE1mku odpov\xEDdaj\xEDc\xEDm tagem pro revizi (v nastaven\xED).", RESPONSE_RECEIVED: "Odpov\u011B\u010F p\u0159ijata.", NO_DECK_EXISTS: "Neexistuje \u017E\xE1dn\xFD bal\xED\u010Dek pro ${deckName}", ALL_CAUGHT_UP: "V\u0161e zrevidov\xE1no", // scheduling.ts DAYS_STR_IVL: "${interval} den/dn\xED", MONTHS_STR_IVL: "${interval} m\u011Bs\xEDc(\u016F)", YEARS_STR_IVL: "${interval} rok(\u016F)", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}r", // settings.ts SETTINGS_HEADER: "Spaced Repetition - Nastaven\xED", GROUP_TAGS_FOLDERS: "Tags & Folders", GROUP_FLASHCARD_REVIEW: "Flashcard Review", GROUP_FLASHCARD_SEPARATORS: "Flashcard Separators", GROUP_DATA_STORAGE: "Storage of Scheduling Data", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contributing", CHECK_WIKI: 'Pro v\xEDce informac\xED jd\u011Bte na wiki.', GITHUB_DISCUSSIONS: 'Visit the discussions section for Q&A help, feedback, and general discussion.', GITHUB_ISSUES: 'Raise an issue here if you have a feature request or a bug report.', GITHUB_SOURCE_CODE: 'Project source code available on GitHub', CODE_CONTRIBUTION_INFO: 'Information on code contributions', TRANSLATION_CONTRIBUTION_INFO: 'Information on translating the plugin to your language', PROJECT_CONTRIBUTIONS: 'Raise an issue here if you have a feature request or a bug report', FOLDERS_TO_IGNORE: "Ignorovan\xE9 slo\u017Eky", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "Karti\u010Dky", FLASHCARD_EASY_LABEL: "Easy Button Text", FLASHCARD_GOOD_LABEL: "Good Button Text", FLASHCARD_HARD_LABEL: "Hard Button Text", FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "Tag pro karti\u010Dky", FLASHCARD_TAGS_DESC: "Zadete tagy ood\u011Blen\xE9 mezerou nebo od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDklad. #karti\u010Dky #bal\xED\u010Dke2 #bal\xED\u010Dek3.", CONVERT_FOLDERS_TO_DECKS: "P\u0159ev\xE9st slo\u017Eky na bal\xED\u010Dky a podbal\xED\u010Dky?", CONVERT_FOLDERS_TO_DECKS_DESC: "Toto je alternativa k tag\u016Fm karti\u010Dek viz nastaven\xED v\xFD\u0161e.", INLINE_SCHEDULING_COMMENTS: "Ulo\u017Eit pl\xE1novac\xED koment\xE1\u0159 na stejn\xFD \u0159\xE1dek jako posledn\xED polo\u017Eka karti\u010Dky?", INLINE_SCHEDULING_COMMENTS_DESC: "Zapnut\xED t\xE9to volby zp\u016Fsob\xED, \u017Ee HTML koment\xE1\u0159e nebudou rozb\xEDjet form\xE1tov\xE1n\xED list\u016F.", BURY_SIBLINGS_TILL_NEXT_DAY: "Odlo\u017Eit p\u0159\xEDbuzn\xE9 karti\u010Dky na dal\u0161\xED den?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "P\u0159\xEDbuzn\xE9 karti\u010Dky jsou karti\u010Dky generovan\xE9 z textu stejn\xE9 pozn\xE1mky nap\u0159\xEDklad cloze smaz\xE1n\xED", SHOW_CARD_CONTEXT: "Uk\xE1zat kontext v karti\u010Dce?", SHOW_CARD_CONTEXT_DESC: "nap\u0159\xEDklad Titulek > Nadpis1 > Podnadpis > ... > Podnadpis", CARD_MODAL_HEIGHT_PERCENT: "V\xFD\u0161ka karti\u010Dek v procentech", CARD_MODAL_SIZE_PERCENT_DESC: "M\u011Blo by b\xFDt nastaveno na 100% na mobilu nebo kdy\u017E pou\u017E\xEDv\xE1te velk\xE9 obr\xE1zky", RESET_DEFAULT: "Resetovat v\xFDchoz\xED nastaven\xED", CARD_MODAL_WIDTH_PERCENT: "\u0160\xED\u0159ka karti\u010Dek v procentech", RANDOMIZE_CARD_ORDER: "N\xE1hodn\u011B zm\u011Bnit po\u0159ad\xED karti\u010Dek b\u011Bhem revize?", REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", REVIEW_DECK_ORDER: "Order decks are displayed during review", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", DISABLE_CLOZE_CARDS: "Vypnout cloze karti\u010Dky?", CONVERT_HIGHLIGHTS_TO_CLOZES: "P\u0159ev\xE9st ==zv\xFDrazn\u011Bn\xED== na clozes?", CONVERT_BOLD_TEXT_TO_CLOZES: "P\u0159ev\xE9st **tu\u010Dn\xFD text** na clozes?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "P\u0159ev\xE9st {{slo\u017Een\xE9 z\xE1vorky}} na clozes?", INLINE_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro inline karti\u010Dky", FIX_SEPARATORS_MANUALLY_WARNING: "Pozor. Jakmile toto zm\u011Bn\xEDte, budete muset ru\u010Dn\u011B upravit v\u0161echny existuj\xEDc\xED karti\u010Dky.", INLINE_REVERSED_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro oto\u010Den\xE9 inline karti\u010Dky", MULTILINE_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro v\xEDce\u0159\xE1dkov\xE9 karti\u010Dky", MULTILINE_REVERSED_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro v\xEDce\u0159\xE1dkove oto\u010Den\xE9 karti\u010Dky", MULTILINE_CARDS_END_MARKER: "Znaky ozna\u010Duj\xEDc\xED konec clozes a v\xEDce\u0159\xE1dkov\xFDch flash karet", NOTES: "Pozn\xE1mky", REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", TAGS_TO_REVIEW: "Tag pro revizi", TAGS_TO_REVIEW_DESC: "Zadejte tagy odd\u011Blen\xE9 mezerami nebo od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDklad #review #tag2 #tag3.", OPEN_RANDOM_NOTE: "Otev\u0159\xEDt n\xE1hodnou pozn\xE1mku pro revizi", OPEN_RANDOM_NOTE_DESC: "Pokud toto vypnete, pozn\xE1mky budou \u0159azeny dle d\u016Fle\u017Eitosti (PageRank).", AUTO_NEXT_NOTE: "Otev\u0159\xEDt automaticky dal\u0161\xED pozn\xE1mku po dokon\u010Den\xED revize", ENABLE_FILE_MENU_REVIEW_OPTIONS: "Povolte mo\u017Enosti revize v nab\xEDdce souboru (nap\u0159. Revize: Jednoduch\xE9, Dobr\xE9, T\u011B\u017Ek\xE9)", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Pokud v nab\xEDdce souboru zak\xE1\u017Eete mo\u017Enosti revize, m\u016F\u017Eete sv\xE9 pozn\xE1mky revidovat pomoc\xED p\u0159\xEDkaz\u016F pluginu a, pokud jste je definovali, pomoc\xED p\u0159i\u0159azen\xFDch kl\xE1vesov\xFDch zkratek.", MAX_N_DAYS_REVIEW_QUEUE: "Maxim\xE1ln\xED po\u010Det dn\xED zobrazen\xFDch v prav\xE9m panelu", MIN_ONE_DAY: "Po\u010Det dn\xED mus\xED b\xFDt minim\xE1ln\u011B 1.", VALID_NUMBER_WARNING: "Pros\xEDm zadejte validn\xED \u010D\xEDslo.", UI_PREFERENCES: "P\u0159edvolby u\u017Eivatelsk\xE9ho rozhran\xED", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Stromy bal\xED\u010Dky by m\u011Bly b\xFDt zpo\u010D\xE1tku zobrazeny jako rozbalen\xE9", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Vypn\u011Bte toto, chcete-li sbalit vno\u0159en\xE9 bal\xED\u010Dky na stejn\xE9 kart\u011B. To je u\u017Eite\u010Dn\xE9, pokud m\xE1te karti\u010Dky, kter\xE9 pat\u0159\xED k mnoha bal\xED\u010Dk\u016Fm ve stejn\xE9m souboru.", ALGORITHM: "Algoritmus", CHECK_ALGORITHM_WIKI: 'Pro v\xEDce informac\xED jd\u011Bte na popis algoritmu.', BASE_EASE: "Z\xE1kladn\xED slo\u017Eitost", BASE_EASE_DESC: "minimum = 130, nejl\xE9pe p\u0159ibli\u017En\u011B 250.", BASE_EASE_MIN_WARNING: "Z\xE1kladn\xED slo\u017Eitost mus\xED b\xFDt minim\xE1ln\u011B 130.", LAPSE_INTERVAL_CHANGE: "Zm\u011Bna intervalu pokud karti\u010Dku/pozn\xE1mku ozna\u010D\xEDte jako slo\u017Eitou", LAPSE_INTERVAL_CHANGE_DESC: "nov\xFD_inteval = star\xFD_interval * zm\u011Bna_intevalu / 100.", EASY_BONUS: "Bonus pro jednoduch\xE9", EASY_BONUS_DESC: "Tento bonus umo\u017E\u0148uje nastavit rozd\xEDl intervalu mezi jednoduch\xFDmi a dobr\xFDmi karti\u010Dkami/pozn\xE1mkami (minimum = 100%).", EASY_BONUS_MIN_WARNING: "Bonus pro jednoduchost mus\xED b\xFDt minim\xE1ln\u011B 100.", MAX_INTERVAL: "Maximum interval in days", MAX_INTERVAL_DESC: "Umo\u017E\u0148uje nastavit horn\xED limit pro interval (defaultn\u011B = 100 let).", MAX_INTERVAL_MIN_WARNING: "Maxim\xE1ln\xED interval mus\xED b\xFDt alespo\u0148 1 den.", MAX_LINK_CONTRIB: "Maxim\xE1ln\xED p\u0159\xEDsp\u011Bv\u011Bk prolinkov\xE1n\xED", MAX_LINK_CONTRIB_DESC: "Maxim\xE1ln\xED p\u0159\xEDsp\u011Bvek v\xE1\u017Een\xE9 slo\u017Eitosti prolinkovan\xFDch pozn\xE1mek pou\u017Eit\xFD pro ur\u010Den\xED po\u010D\xE1te\u010Dn\xED slo\u017Eitosti.", LOGGING: "Zaznamen\xE1v\xE1m", DISPLAY_DEBUG_INFO: "Zobrazit informace pro lad\u011Bn\xED na v\xFDvoj\xE1\u0159sk\xE9 konzoli", DISPLAY_PARSER_DEBUG_INFO: "Display debugging information for the parser on the developer console", // sidebar.ts NOTES_REVIEW_QUEUE: "Fronta pozn\xE1mek k revizi", CLOSE: "Uzav\u0159en\xE9", NEW: "Nov\xE9", YESTERDAY: "V\u010Dera", TODAY: "Dnes", TOMORROW: "Z\xEDtra", // stats-modal.tsx STATS_TITLE: "Statistiky", MONTH: "M\u011Bs\xEDc", QUARTER: "\u010Ctvrtlet\xED", YEAR: "Rok", LIFETIME: "Celkov\u011B", FORECAST: "P\u0159edpov\u011B\u010F", FORECAST_DESC: "Celkov\xFD po\u010Det karti\u010Dek, kter\xFDm vypr\u0161\xED term\xEDn", SCHEDULED: "Napl\xE1nov\xE1no", DAYS: "Dn\xED", NUMBER_OF_CARDS: "Po\u010Det karti\u010Dek", REVIEWS_PER_DAY: "Pr\u016Fm\u011Br: ${avg} revize/den", INTERVALS: "Intervaly", INTERVALS_DESC: "Doba, za kterou bude znovu zobrazeno k revize", COUNT: "Po\u010Det", INTERVALS_SUMMARY: "Pr\u016Fm\u011Brn\xFD interval: ${avg}, Nejdel\u0161\xED interval: ${longest}", EASES: "Slo\u017Eitost", EASES_SUMMARY: "Pr\u016Fm\u011Brn\xE1 slo\u017Eitost: ${avgEase}", CARD_TYPES: "Typy karti\u010Dek", CARD_TYPES_DESC: "Obsahuje i odlo\u017Een\xE9 karti\u010Dky (pokud existuj\xED)", CARD_TYPE_NEW: "Nov\xE1", CARD_TYPE_YOUNG: "Mlad\xE1", CARD_TYPE_MATURE: "Dosp\u011Bl\xE1", CARD_TYPES_SUMMARY: "Karti\u010Dek celkem: ${totalCardsCount}" }; // src/lang/locale/da.ts var da_default = {}; // src/lang/locale/de.ts var de_default = { // flashcard-modal.tsx DECKS: "Stapel", DUE_CARDS: "Anstehende Karten", NEW_CARDS: "Neue Karten", TOTAL_CARDS: "Alle Karten", BACK: "Zur\xFCck", SKIP: "\xDCberspringen", EDIT_CARD: "Karte bearbeiten", RESET_CARD_PROGRESS: "Kartenfortschritt zur\xFCcksetzten", HARD: "Schwer", GOOD: "Gut", EASY: "Einfach", SHOW_ANSWER: "Zeige Antwort", CARD_PROGRESS_RESET: "Kartenfortschritt wurde zur\xFCckgesetzt.", SAVE: "Speichern", CANCEL: "Abbrechen", NO_INPUT: "Keine Eingabe erhalten.", CURRENT_EASE_HELP_TEXT: "Aktuelle Schwierigkeit: ", CURRENT_INTERVAL_HELP_TEXT: "Aktueller Intervall: ", CARD_GENERATED_FROM: "Erstellt von: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "Notiz zur Wiederholung \xF6ffnen", REVIEW_CARDS: "Lernkarten wiederholen", REVIEW_DIFFICULTY_FILE_MENU: "Notizen wiederholen als: ${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "Notizen wiederholen als: ${difficulty}", REVIEW_ALL_CARDS: "Alle Lernkarten wiederholen", CRAM_ALL_CARDS: "W\xE4hle ein Stapel zum pauken", REVIEW_CARDS_IN_NOTE: "Lernkarten in dieser Notiz wiederholen", CRAM_CARDS_IN_NOTE: "Lernkarten in dieser Notiz pauken.", VIEW_STATS: "Statistiken anzeigen", OPEN_REVIEW_QUEUE_VIEW: "\xD6ffne \xDCberpr\xFCfungswarteschlage in der Seitenleiste", STATUS_BAR: "Wiederholung: ${dueNotesCount} Notiz(en), ${dueFlashcardsCount} Karte(n) anstehend", SYNC_TIME_TAKEN: "Synchronisierung dauerte ${t}ms", NOTE_IN_IGNORED_FOLDER: "Notiz befindet sich in einem ausgeschlossenen Ordner (siehe Einstellungen).", PLEASE_TAG_NOTE: "Bitte die Notiz f\xFCr Wiederholungen entsprechend taggen (siehe Einstellungen).", RESPONSE_RECEIVED: "Antwort erhalten.", NO_DECK_EXISTS: "Kein Stapel f\xFCr ${deckName} gefunden.", ALL_CAUGHT_UP: "Yuhu! Alles geschafft! :D.", // scheduling.ts DAYS_STR_IVL: "${interval} Tag(e)", MONTHS_STR_IVL: "${interval} Monat(e)", YEARS_STR_IVL: "${interval} Jahr(e)", DAYS_STR_IVL_MOBILE: "${interval}t", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}j", // settings.ts SETTINGS_HEADER: "Spaced Repetition - Einstellungen", GROUP_TAGS_FOLDERS: "Tags & Folders", GROUP_FLASHCARD_REVIEW: "Flashcard Review", GROUP_FLASHCARD_SEPARATORS: "Flashcard Separators", GROUP_DATA_STORAGE: "Storage of Scheduling Data", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contributing", CHECK_WIKI: 'Weitere Informationen gibt es im Wiki (english).', GITHUB_DISCUSSIONS: 'Visit the discussions section for Q&A help, feedback, and general discussion.', GITHUB_ISSUES: 'Raise an issue here if you have a feature request or a bug report.', GITHUB_SOURCE_CODE: 'Project source code available on GitHub', CODE_CONTRIBUTION_INFO: 'Information on code contributions', TRANSLATION_CONTRIBUTION_INFO: 'Information on translating the plugin to your language', PROJECT_CONTRIBUTIONS: 'Raise an issue here if you have a feature request or a bug report', FOLDERS_TO_IGNORE: "Ausgeschlossene Ordner", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "Lernkarten", FLASHCARD_EASY_LABEL: "Einfach Knopf Text", FLASHCARD_GOOD_LABEL: "Gut Knopf Text", FLASHCARD_HARD_LABEL: "Schwer Knopf Text", FLASHCARD_GOOD_DESC: 'Passe die Beschriftung f\xFCr "Gut" Knopf an', FLASHCARD_EASY_DESC: 'Passe die Beschriftung f\xFCr "Einfach" Knopf an', FLASHCARD_HARD_DESC: 'Passe die Beschriftung f\xFCr "Schwer" Knopf an', REVIEW_BUTTON_DELAY: "Druckknopfverz\xF6gerung (ms)", REVIEW_BUTTON_DELAY_DESC: "F\xFCgt den \xDCberpr\xFCfungsschaltfl\xE4chen (\u201EEinfach\u201C, \u201EGut\u201C, \u201ESchwer\u201C, \u201EAntwort anzeigen\u201C) eine Verz\xF6gerung hinzu, bevor sie erneut gedr\xFCckt werden k\xF6nnen.", FLASHCARD_TAGS: "Lernkarten Tags", FLASHCARD_TAGS_DESC: "Mehrere Tags mit Leerzeichen oder Zeilenumbr\xFCchen getrennt angeben. Bsp. #karte #stapel2 #stapel3.", CONVERT_FOLDERS_TO_DECKS: "Ordner in Stapel und Substapel umwandeln?", CONVERT_FOLDERS_TO_DECKS_DESC: 'Eine Alternative zur oberen "Lernkarten Tags" Option.', INLINE_SCHEDULING_COMMENTS: "Den Fortschritt in der gleichen Zeile wie die letzte Zeile einer Lernkartei speichern?", INLINE_SCHEDULING_COMMENTS_DESC: "Wenn aktiviert, wird der HTML Kommentar die umgebende Liste nicht aufbrechen.", BURY_SIBLINGS_TILL_NEXT_DAY: "Verwandte Karten auf den n\xE4chsten Tag verlegen?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Verwandte Karten sind aus der gleichen Karte generiert worden (z.B. L\xFCckentextkarten oder beidseitige Karten).", SHOW_CARD_CONTEXT: "Kontext in den Karten anzeigen?", SHOW_CARD_CONTEXT_DESC: "Bsp. Titel > \xDCberschrift 1 > Sektion > ... > Untersektion", CARD_MODAL_HEIGHT_PERCENT: "H\xF6he der Lernkartei in Prozent", CARD_MODAL_SIZE_PERCENT_DESC: "Auf kleinen Bildschirmen (z.B. Smartphones) oder bei sehr grossen Bildern sollte dieser Wert auf 100% gesetzt werden.", RESET_DEFAULT: "Standardeinstellung wiederherstellen", CARD_MODAL_WIDTH_PERCENT: "Breite einer Lernkarte in Prozent", RANDOMIZE_CARD_ORDER: "W\xE4hrend der Wiederhoung die Reihenfolge zuf\xE4llig mischen?", REVIEW_CARD_ORDER_WITHIN_DECK: "Reihenfolge der Karten innerhalb eines Stapels w\xE4hrend der Wiederholung", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentielle Reihenfolge innerhalb eines Stapels (Alle neuen Karten zuerst)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentielle Reihenfolge innerhalb eines Stapels (Alle f\xE4lligen Karten zuerst)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Zuf\xE4llige Reihenfolge innerhalb eines Stapels (Alle neuen Karten zuerst)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Zuf\xE4llige Reihenfolge innerhalb eines Stapels (Alle f\xE4lligen Karten zuerst)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Zuf\xE4llige Karte von zuf\xE4lligem Stapel", REVIEW_DECK_ORDER: "Reihenfolge der Stapel w\xE4hrend der Wiederholung", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentielle Reihenfolge (sobald alle Karten im vorherigen Stapel wiederholt wurden)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Zuf\xE4llige Reihenfolge (sobald alle Karten im vorherigen Stapel wiederholt wurden)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Zuf\xE4llige Karte von zuf\xE4lligem Stapel", DISABLE_CLOZE_CARDS: "L\xFCckentextkarten deaktivieren?", CONVERT_HIGHLIGHTS_TO_CLOZES: "==Hervorgehobenen== Text in L\xFCckentextkarten umwandeln?", CONVERT_BOLD_TEXT_TO_CLOZES: "**Fettgedruckten** Text in L\xFCckentextkarten umwandeln?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{Geschweifte Klammern}} Text in L\xFCckentextkarten umwandeln?", INLINE_CARDS_SEPARATOR: "Trennzeichen f\xFCr einzeilige Lernkarten", FIX_SEPARATORS_MANUALLY_WARNING: "Wenn diese Einstellung ge\xE4ndert wird, dann m\xFCssen die entsprechenden Lernkarten manuell angepasst werden.", INLINE_REVERSED_CARDS_SEPARATOR: "Trennzeichen f\xFCr einzeilige beidseitige Lernkarten", MULTILINE_CARDS_SEPARATOR: "Trennzeichen f\xFCr mehrzeilige Lernkarten", MULTILINE_REVERSED_CARDS_SEPARATOR: "Trennzeichen f\xFCr mehrzeilige beidseitige Lernkarten", MULTILINE_CARDS_END_MARKER: "Zeichen, die das Ende von L\xFCckentexten und mehrzeiligen Flashcards kennzeichnen", NOTES: "Notizen", REVIEW_PANE_ON_STARTUP: "\xD6ffne \xDCberpr\xFCfungswarteschlage beim start", TAGS_TO_REVIEW: "Zu wiederholende Tags", TAGS_TO_REVIEW_DESC: "Mehrere Tags k\xF6nnen mit Leerzeichen oder Zeilenumbr\xFCchen getrennt angegeben werden. Bsp. #karte #tag1 #tag2.", OPEN_RANDOM_NOTE: "Zuf\xE4llige Karten wiederholen", OPEN_RANDOM_NOTE_DESC: "Wenn dies deaktiviert wird, dann werden die Notizen nach Wichtigkeit wiederholt (PageRank).", AUTO_NEXT_NOTE: "Nach einer Wiederholung automatisch die n\xE4chste Karte \xF6ffnen", ENABLE_FILE_MENU_REVIEW_OPTIONS: "Aktiviere die \xDCberpr\xFCfungsoptionen im Dateimen\xFC (z. B. Notizen wiederholen als: Einfach, Gut, Schwer)", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Wenn du die \xDCberpr\xFCfungsoptionen im Dateimen\xFC deaktivierst, kannst du deine Notizen mit den Plugin-Befehlen und, falls definiert, den zugeh\xF6rigen Tastenkombinationen \xFCberpr\xFCfen.", MAX_N_DAYS_REVIEW_QUEUE: "Maximale Anzahl anstehender Notizen, die im rechten Fensterbereich angezeigt werden", MIN_ONE_DAY: "Anzahl der Tage muss mindestens 1 sein.", VALID_NUMBER_WARNING: "Bitte eine g\xFCltige Zahl eingeben.", UI_PREFERENCES: "Einstellungen der Benutzeroberfl\xE4che", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Stapelverzeichnis soll beim \xF6ffnen erweitert angezeigt werden", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Deaktivieren Sie dies, um verschachtelte Stapel in derselben Karte zu reduzieren. N\xFCtzlich, wenn Sie Karten haben, die zu vielen Stapeln in derselben Datei geh\xF6ren.", ALGORITHM: "Algorithmus", CHECK_ALGORITHM_WIKI: 'Weiterf\xFChrende Informationen: Implementierung des Algorithmus (english).', BASE_EASE: "Basis der Schwierigkeit", BASE_EASE_DESC: "Minimum ist 130. Empfohlen wird ca. 250.", BASE_EASE_MIN_WARNING: "Basis der Schwierigkeit muss mindestens 130 sein.", LAPSE_INTERVAL_CHANGE: "Anpassungsfaktor des Intervalls wenn eine Notiz / Karte 'Schwer' abgeschlossen wird", LAPSE_INTERVAL_CHANGE_DESC: "neuesIntervall = altesIntervall * anpassungsfaktor / 100.", EASY_BONUS: "Einfachheit-Bonus", EASY_BONUS_DESC: "Der Einfachheit-Bonus gibt an um welchen Faktor (in Prozent) das Intervall l\xE4nger sein soll, wenn eine Notiz / Karte 'Einfach' statt 'Gut' abgeschlossen wird. Minimum ist 100%.", EASY_BONUS_MIN_WARNING: "Der Einfachheit-Bonus muss mindestens 100 sein.", MAX_INTERVAL: "Maximale Intervall in Tagen", MAX_INTERVAL_DESC: "Das maximale Intervall (in Tagen) f\xFCr Wiederholungen. Standard sind 100 Jahre.", MAX_INTERVAL_MIN_WARNING: "Das maximale Interall muss mindestens ein Tag sein.", MAX_LINK_CONTRIB: "Maximaler Einfluss von Links", MAX_LINK_CONTRIB_DESC: "Maximaler Einfluss der Einfachheiten verlinkter Notizen zur gewichteten initialen Einfachheit einer neuen Lernkarte.", LOGGING: "Protokollierung", DISPLAY_DEBUG_INFO: "Informationen zum Debugging in der Entwicklerkonsole anzeigen", DISPLAY_PARSER_DEBUG_INFO: "Informationen zum parser Debugging in der Entwicklerkonsole anzeigen", // sidebar.ts NOTES_REVIEW_QUEUE: "Anstehende Notizen zur Wiederholung", CLOSE: "Schliessen", NEW: "Neu", YESTERDAY: "Gestern", TODAY: "Heute", TOMORROW: "Morgen", // stats-modal.tsx STATS_TITLE: "Statistiken", MONTH: "Monat", QUARTER: "Quartal", YEAR: "Jahr", LIFETIME: "Lebenslang", FORECAST: "Prognose", FORECAST_DESC: "Anzahl der k\xFCnftig anstehenden Karten", SCHEDULED: "Anstehend", DAYS: "Tage", NUMBER_OF_CARDS: "Anzahl der Karten", REVIEWS_PER_DAY: "Durchschnitt: ${avg} Wiederholungen/Tag", INTERVALS: "Intervalle", INTERVALS_DESC: "Intervalle bis Wiederholungen anstehen", COUNT: "Anzahl", INTERVALS_SUMMARY: "Durchschnittliches Intervall: ${avg}, L\xE4ngstes Intervall: ${longest}", EASES: "Schwierigkeit", EASES_SUMMARY: "Durchschnittliche Schwierigkeit: ${avgEase}", CARD_TYPES: "Kategorisierung", CARD_TYPES_DESC: "Verlegte Karten eingeschlossen", CARD_TYPE_NEW: "Neu", CARD_TYPE_YOUNG: "Jung", CARD_TYPE_MATURE: "Ausgereift", CARD_TYPES_SUMMARY: "Insgesamt ${totalCardsCount} Karten" }; // src/lang/locale/en.ts var en_default = { // flashcard-modal.tsx DECKS: "Decks", DUE_CARDS: "Due Cards", NEW_CARDS: "New Cards", TOTAL_CARDS: "Total Cards", BACK: "Back", SKIP: "Skip", EDIT_CARD: "Edit Card", RESET_CARD_PROGRESS: "Reset card's progress", HARD: "Hard", GOOD: "Good", EASY: "Easy", SHOW_ANSWER: "Show Answer", CARD_PROGRESS_RESET: "Card's progress has been reset.", SAVE: "Save", CANCEL: "Cancel", NO_INPUT: "No input provided.", CURRENT_EASE_HELP_TEXT: "Current Ease: ", CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", CARD_GENERATED_FROM: "Generated from: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "Open a note for review", REVIEW_CARDS: "Review flashcards", REVIEW_DIFFICULTY_FILE_MENU: "Review: ${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "Review note as ${difficulty}", CRAM_ALL_CARDS: "Select a deck to cram", REVIEW_ALL_CARDS: "Review flashcards from all notes", REVIEW_CARDS_IN_NOTE: "Review flashcards in this note", CRAM_CARDS_IN_NOTE: "Cram flashcards in this note", VIEW_STATS: "View statistics", OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar", STATUS_BAR: "Review: ${dueNotesCount} note(s), ${dueFlashcardsCount} card(s) due", SYNC_TIME_TAKEN: "Sync took ${t}ms", NOTE_IN_IGNORED_FOLDER: "Note is saved under ignored folder (check settings).", PLEASE_TAG_NOTE: "Please tag the note appropriately for reviewing (in settings).", RESPONSE_RECEIVED: "Response received.", NO_DECK_EXISTS: "No deck exists for ${deckName}", ALL_CAUGHT_UP: "You're all caught up now :D.", // scheduling.ts DAYS_STR_IVL: "${interval} day(s)", MONTHS_STR_IVL: "${interval} month(s)", YEARS_STR_IVL: "${interval} year(s)", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}y", // settings.ts SETTINGS_HEADER: "Spaced Repetition - Settings", GROUP_TAGS_FOLDERS: "Tags & Folders", GROUP_FLASHCARD_REVIEW: "Flashcard Review", GROUP_FLASHCARD_SEPARATORS: "Flashcard Separators", GROUP_DATA_STORAGE: "Storage of Scheduling Data", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contributing", CHECK_WIKI: 'For more information, check the wiki.', GITHUB_DISCUSSIONS: 'Visit the discussions section for Q&A help, feedback, and general discussion.', GITHUB_ISSUES: 'Raise an issue here if you have a feature request or a bug report.', GITHUB_SOURCE_CODE: 'Project source code available on GitHub', CODE_CONTRIBUTION_INFO: 'Information on code contributions', TRANSLATION_CONTRIBUTION_INFO: 'Information on translating the plugin to your language', PROJECT_CONTRIBUTIONS: 'Raise an issue here if you have a feature request or a bug report', FOLDERS_TO_IGNORE: "Folders to ignore", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "Flashcards", FLASHCARD_EASY_LABEL: "Easy Button Text", FLASHCARD_GOOD_LABEL: "Good Button Text", FLASHCARD_HARD_LABEL: "Hard Button Text", FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "Flashcard tags", FLASHCARD_TAGS_DESC: "Enter tags separated by spaces or newlines i.e. #flashcards #deck2 #deck3.", CONVERT_FOLDERS_TO_DECKS: "Convert folders to decks and subdecks?", CONVERT_FOLDERS_TO_DECKS_DESC: "This is an alternative to the Flashcard tags option above.", INLINE_SCHEDULING_COMMENTS: "Save scheduling comment on the same line as the flashcard's last line?", INLINE_SCHEDULING_COMMENTS_DESC: "Turning this on will make the HTML comments not break list formatting.", BURY_SIBLINGS_TILL_NEXT_DAY: "Bury sibling cards until the next day?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Siblings are cards generated from the same card text i.e. cloze deletions", SHOW_CARD_CONTEXT: "Show context in cards?", SHOW_CARD_CONTEXT_DESC: "i.e. Title > Heading 1 > Subheading > ... > Subheading", CARD_MODAL_HEIGHT_PERCENT: "Flashcard Height Percentage", CARD_MODAL_SIZE_PERCENT_DESC: "Should be set to 100% on mobile or if you have very large images", RESET_DEFAULT: "Reset to default", CARD_MODAL_WIDTH_PERCENT: "Flashcard Width Percentage", RANDOMIZE_CARD_ORDER: "Randomize card order during review?", REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", REVIEW_DECK_ORDER: "Order decks are displayed during review", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", DISABLE_CLOZE_CARDS: "Disable cloze cards?", CONVERT_HIGHLIGHTS_TO_CLOZES: "Convert ==hightlights== to clozes?", CONVERT_BOLD_TEXT_TO_CLOZES: "Convert **bolded text** to clozes?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "Convert {{curly brackets}} to clozes?", INLINE_CARDS_SEPARATOR: "Separator for inline flashcards", FIX_SEPARATORS_MANUALLY_WARNING: "Note that after changing this you have to manually edit any flashcards you already have.", INLINE_REVERSED_CARDS_SEPARATOR: "Separator for inline reversed flashcards", MULTILINE_CARDS_SEPARATOR: "Separator for multiline flashcards", MULTILINE_REVERSED_CARDS_SEPARATOR: "Separator for multiline reversed flashcards", MULTILINE_CARDS_END_MARKER: "Characters denoting the end of clozes and multiline flashcards", NOTES: "Notes", REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", TAGS_TO_REVIEW: "Tags to review", TAGS_TO_REVIEW_DESC: "Enter tags separated by spaces or newlines i.e. #review #tag2 #tag3.", OPEN_RANDOM_NOTE: "Open a random note for review", OPEN_RANDOM_NOTE_DESC: "When you turn this off, notes are ordered by importance (PageRank).", AUTO_NEXT_NOTE: "Open next note automatically after a review", MAX_N_DAYS_REVIEW_QUEUE: "Maximum number of days to display on right panel", MIN_ONE_DAY: "The number of days must be at least 1.", VALID_NUMBER_WARNING: "Please provide a valid number.", UI_PREFERENCES: "UI Preferences", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", ENABLE_FILE_MENU_REVIEW_OPTIONS: "Enable the review options in the file menu (e.g. Review: Easy, Good, Hard)", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "If you disable the review options in the file menu, you can review your notes using the plugin commands and, if you defined them, the associated command hotkeys.", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Deck trees should be initially displayed as expanded", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Turn this off to collapse nested decks in the same card. Useful if you have cards which belong to many decks in the same file.", ALGORITHM: "Algorithm", CHECK_ALGORITHM_WIKI: 'For more information, check the algorithm implementation.', BASE_EASE: "Base ease", BASE_EASE_DESC: "minimum = 130, preferrably approximately 250.", BASE_EASE_MIN_WARNING: "The base ease must be at least 130.", LAPSE_INTERVAL_CHANGE: "Interval change when you review a flashcard/note as hard", LAPSE_INTERVAL_CHANGE_DESC: "newInterval = oldInterval * intervalChange / 100.", EASY_BONUS: "Easy Bonus", EASY_BONUS_DESC: "The easy bonus allows you to set the difference in intervals between answering Good and Easy on a flashcard/note (minimum = 100%).", EASY_BONUS_MIN_WARNING: "The easy bonus must be at least 100.", MAX_INTERVAL: "Maximum interval in days", MAX_INTERVAL_DESC: "Allows you to place an upper limit on the interval (default = 100 years).", MAX_INTERVAL_MIN_WARNING: "The maximum interval must be at least 1 day.", MAX_LINK_CONTRIB: "Maximum link contribution", MAX_LINK_CONTRIB_DESC: "Maximum contribution of the weighted ease of linked notes to the initial ease.", LOGGING: "Logging", DISPLAY_DEBUG_INFO: "Display debugging information on the developer console", DISPLAY_PARSER_DEBUG_INFO: "Display debugging information for the parser on the developer console", // sidebar.ts NOTES_REVIEW_QUEUE: "Notes Review Queue", CLOSE: "Close", NEW: "New", YESTERDAY: "Yesterday", TODAY: "Today", TOMORROW: "Tomorrow", // stats-modal.tsx STATS_TITLE: "Statistics", MONTH: "Month", QUARTER: "Quarter", YEAR: "Year", LIFETIME: "Lifetime", FORECAST: "Forecast", FORECAST_DESC: "The number of cards due in the future", SCHEDULED: "Scheduled", DAYS: "Days", NUMBER_OF_CARDS: "Number of cards", REVIEWS_PER_DAY: "Average: ${avg} reviews/day", INTERVALS: "Intervals", INTERVALS_DESC: "Delays until reviews are shown again", COUNT: "Count", INTERVALS_SUMMARY: "Average interval: ${avg}, Longest interval: ${longest}", EASES: "Eases", EASES_SUMMARY: "Average ease: ${avgEase}", CARD_TYPES: "Card Types", CARD_TYPES_DESC: "This includes buried cards as well, if any", CARD_TYPE_NEW: "New", CARD_TYPE_YOUNG: "Young", CARD_TYPE_MATURE: "Mature", CARD_TYPES_SUMMARY: "Total cards: ${totalCardsCount}" }; // src/lang/locale/en-gb.ts var en_gb_default = {}; // src/lang/locale/es.ts var es_default = { // flashcard-modal.tsx DECKS: "Mazos", DUE_CARDS: "Tarjetas Vencidas", NEW_CARDS: "Tarjetas Nuevas", TOTAL_CARDS: "Tarjetas Totales", BACK: "Atr\xE1s", SKIP: "Saltar", EDIT_CARD: "Editar Tarjeta", RESET_CARD_PROGRESS: "Reiniciar progreso de la tarjeta", HARD: "Dif\xEDcil", GOOD: "Bien", EASY: "F\xE1cil", SHOW_ANSWER: "Mostrar Respuesta", CARD_PROGRESS_RESET: "El progreso de la tarjeta se ha reiniciado.", SAVE: "Guardar", CANCEL: "Cancelar", NO_INPUT: "Se ha prove\xEDdo entrada.", CURRENT_EASE_HELP_TEXT: "Facilidad Actual: ", CURRENT_INTERVAL_HELP_TEXT: "Intervalo Actual: ", CARD_GENERATED_FROM: "Generado Desde: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "Abrir nota para revisi\xF3n", REVIEW_CARDS: "Revisar Tarjetas", REVIEW_DIFFICULTY_FILE_MENU: "Revisar: ${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "Revisar nota como ${difficulty}", CRAM_ALL_CARDS: "Selecciona un mazo a memorizar", REVIEW_ALL_CARDS: "Revisar tarjetas de todas las notas", REVIEW_CARDS_IN_NOTE: "Revisar tarjetas en esta nota", CRAM_CARDS_IN_NOTE: "Memorizar tarjetas en esta nota", VIEW_STATS: "Ver estad\xEDsticas", OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar", STATUS_BAR: "Revisar: ${dueNotesCount} nota(s), ${dueFlashcardsCount} tarjetas vencidas", SYNC_TIME_TAKEN: "La sincronizaci\xF3n tom\xF3 ${t} milisegundos", NOTE_IN_IGNORED_FOLDER: "La nota est\xE1 guardada en un directorio ignorado (revisa los ajustes).", PLEASE_TAG_NOTE: "Por favor etiquete apropiadamente la nota para revisi\xF3n (en los ajustes).", RESPONSE_RECEIVED: "Respuesta Recibida", NO_DECK_EXISTS: "No existen mazos para: ${deckName}", ALL_CAUGHT_UP: "\xA1Est\xE1s al d\xEDa! \u{1F603}", // scheduling.ts DAYS_STR_IVL: "${interval} d\xEDa(s)", MONTHS_STR_IVL: "${interval} mes(es)", YEARS_STR_IVL: "${interval} a\xF1o(s)", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}a", // settings.ts SETTINGS_HEADER: "Extensi\xF3n de Repetici\xF3n Espaciada - Ajustes", GROUP_TAGS_FOLDERS: "Tags & Folders", GROUP_FLASHCARD_REVIEW: "Flashcard Review", GROUP_FLASHCARD_SEPARATORS: "Flashcard Separators", GROUP_DATA_STORAGE: "Storage of Scheduling Data", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contributing", CHECK_WIKI: 'Para m\xE1s informaci\xF3n revisa la wiki.', GITHUB_DISCUSSIONS: 'Visit the discussions section for Q&A help, feedback, and general discussion.', GITHUB_ISSUES: 'Raise an issue here if you have a feature request or a bug report.', GITHUB_SOURCE_CODE: 'Project source code available on GitHub', CODE_CONTRIBUTION_INFO: 'Information on code contributions', TRANSLATION_CONTRIBUTION_INFO: 'Information on translating the plugin to your language', PROJECT_CONTRIBUTIONS: 'Raise an issue here if you have a feature request or a bug report', FOLDERS_TO_IGNORE: "Directorios a ignorar", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "Tarjetas de Memorizaci\xF3n", FLASHCARD_EASY_LABEL: "Texto del bot\xF3n: F\xE1cil", FLASHCARD_GOOD_LABEL: "Texto del bot\xF3n: Bien", FLASHCARD_HARD_LABEL: "Texto del bot\xF3n: Dif\xEDcil", FLASHCARD_EASY_DESC: "Personalize la etiqueta para el bot\xF3n: F\xE1cil", FLASHCARD_GOOD_DESC: "Personalize la etiqueta para el bot\xF3n: Bien", FLASHCARD_HARD_DESC: "Personalize la etiqueta para el bot\xF3n: Dif\xEDcil", REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "Etiquetas de las Tarjetas de Memorizaci\xF3n", FLASHCARD_TAGS_DESC: "Escriba las etiquetas separadas por espacios o saltos de l\xEDnea, por ejemplo, #memorizar #mazo2 #mazo3", CONVERT_FOLDERS_TO_DECKS: "\xBFConvertir directorios a mazos y submazos?", CONVERT_FOLDERS_TO_DECKS_DESC: "Esta es una opci\xF3n alternativa a las etiquetas de las Tarjetas de Memorizaci\xF3n.", INLINE_SCHEDULING_COMMENTS: "\xBFGuardar el comentario para programaci\xF3n de las tarjetas en la \xFAltima l\xEDnea?", INLINE_SCHEDULING_COMMENTS_DESC: "Activar esto har\xE1 que los comentarios HTML no rompan el formato de las listas.", BURY_SIBLINGS_TILL_NEXT_DAY: "\xBFEnterrar tarjetas hermanas hasta el siguiente d\xEDa?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Los hermanos son tarjetas generadas del mismo texto de la tarjeta, por ejemplo, deletreos de huecos (cloze deletions en ingl\xE9s)", SHOW_CARD_CONTEXT: "\xBFMostrar contexto en las tarjetas?", SHOW_CARD_CONTEXT_DESC: "Por Ejemplo: T\xEDtulo > Cabecera > Sub-Cabecera > ... > Sub-Cabecera", CARD_MODAL_HEIGHT_PERCENT: "Porcentaje de la altura de las tarjetas de memoria", CARD_MODAL_SIZE_PERCENT_DESC: "Deber\xEDa ser establecido en 100% si tienes im\xE1genes grandes", RESET_DEFAULT: "Reiniciar a la configuraci\xF3n por defecto", CARD_MODAL_WIDTH_PERCENT: "Porcentaje del ancho de las tarjetas de memoria", RANDOMIZE_CARD_ORDER: "\xBFAleatorizar el orden de las tarjetas para revisi\xF3n?", REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", REVIEW_DECK_ORDER: "Order decks are displayed during review", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", DISABLE_CLOZE_CARDS: "\xBFDeshabilitar deletreo de huecos en las tarjetas?", CONVERT_HIGHLIGHTS_TO_CLOZES: "\xBFConvertir ==resaltados== a deletreo de huecos?", CONVERT_BOLD_TEXT_TO_CLOZES: "\xBFConvertir **texto en negrita** a deletreo de huecos?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "\xBFConvertir {{llaves rizadas}} a deletreo de huecos?", INLINE_CARDS_SEPARATOR: "Separador de tarjetas de memorizaci\xF3n en l\xEDnea", FIX_SEPARATORS_MANUALLY_WARNING: "Note que despu\xE9s de cambiar este ajuste, tendr\xE1 que cambiar manualmente todas las notas que tenga.", INLINE_REVERSED_CARDS_SEPARATOR: "Separador de tarjetas de memorizaci\xF3n para tarjetas de notas invertidas", MULTILINE_CARDS_SEPARATOR: "Separador para tarjetas de memorizaci\xF3n multil\xEDnea", MULTILINE_REVERSED_CARDS_SEPARATOR: "Separador para tarjetas de memorizaci\xF3n multil\xEDnea invertidas", MULTILINE_CARDS_END_MARKER: "Caracteres que denotan el fin de los clozes y tarjetas did\xE1cticas de varias l\xEDneas", NOTES: "Notes", REVIEW_PANE_ON_STARTUP: "Activar panel de revisi\xF3n de notas al arrancar", TAGS_TO_REVIEW: "Etiquetas a revisar", TAGS_TO_REVIEW_DESC: "Escriba las etiquetas separadas por espacios o saltos de l\xEDneas, por ejemplo, #revisi\xF3n #etiqueta2 #etiqueta3.", OPEN_RANDOM_NOTE: "Abrir una nota al azar para revisar", OPEN_RANDOM_NOTE_DESC: "Cuando deshabilita esto, las notas son ordenadas por importancia (Algoritmo PageRank).", AUTO_NEXT_NOTE: "Abrir la siguiente nota autom\xE1ticamente despu\xE9s de una revisi\xF3n", ENABLE_FILE_MENU_REVIEW_OPTIONS: "Habilita las opciones de revisi\xF3n en el men\xFA Archivo (por ejemplo: Revisar: F\xE1cil, Bien, Dif\xEDcil)", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Si desactivas las opciones de revisi\xF3n en el men\xFA Archivo, puedes revisar tus notas usando los comandos del plugin y, si los definiste, las teclas r\xE1pidas asociadas.", MAX_N_DAYS_REVIEW_QUEUE: "N\xFAmero m\xE1ximo de d\xEDas a mostrar en el panel derecho.", MIN_ONE_DAY: "El n\xFAmero de d\xEDas debe ser al menos uno.", VALID_NUMBER_WARNING: "Por favor especifique un n\xFAmero v\xE1lido.", UI_PREFERENCES: "Preferencias de la interfaz de usuario.", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Los \xE1rboles de mazos deber\xEDan ser expandidos al inicio.", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Desactiva esto para contraer mazos anidados en la misma tarjeta. \xDAtil si tienes tarjetas que pertenecen a muchos mazos en el mismo archivo.", ALGORITHM: "Algoritmo", CHECK_ALGORITHM_WIKI: 'Para m\xE1s informaci\xF3n, revisa la implementaci\xF3n del algoritmo.', BASE_EASE: "Base ease", BASE_EASE_DESC: "El m\xEDnimo es 130, es preferible que est\xE9 aproximado a 250.", BASE_EASE_MIN_WARNING: "La facilidad base de las tarjetas debe ser al menos 130.", LAPSE_INTERVAL_CHANGE: "El intervalo cambiar\xE1 cuando se revise una tarjeta o nota como Dif\xEDcil.", LAPSE_INTERVAL_CHANGE_DESC: "NuevoInterval = ViejoIntervalo * CambioDeIntervalo / 100.", EASY_BONUS: "Bonificaci\xF3n para F\xE1cil", EASY_BONUS_DESC: "La bonificaci\xF3n para F\xE1cil te permite establecer la diferencia entre intervalos al responder Bien y F\xE1cil en las tarjetas o notas (m\xEDnimo = 100%).", EASY_BONUS_MIN_WARNING: "El bono de facilidad debe ser al menos 100.", MAX_INTERVAL: "Intervalo m\xE1ximo en d\xEDas", MAX_INTERVAL_DESC: "Te permite establecer un l\xEDmite mayor en el intervalo (por defecto es de 100 a\xF1os).", MAX_INTERVAL_MIN_WARNING: "El intervalo m\xE1ximo debe ser de al menos un d\xEDa.", MAX_LINK_CONTRIB: "Contribuci\xF3n m\xE1xima de las notas vinculadas.", MAX_LINK_CONTRIB_DESC: "Contribuci\xF3n m\xE1xima de la facilidad ponderada de las notas vinculadas a la facilidad inicial.", LOGGING: "Registro", DISPLAY_DEBUG_INFO: "\xBFMostrar informaci\xF3n de depuraci\xF3n en la consola de desarrollador", DISPLAY_PARSER_DEBUG_INFO: "Display debugging information for the parser on the developer console", // sidebar.ts NOTES_REVIEW_QUEUE: "Cola de notas a revisar", CLOSE: "Cerrar", NEW: "Nuevo", YESTERDAY: "Ayer", TODAY: "Hoy", TOMORROW: "Ma\xF1ana", // stats-modal.tsx STATS_TITLE: "Estad\xEDsticas", MONTH: "Mes", QUARTER: "Trimestre o Cuatrimestre", // En Inglés: Quarter. YEAR: "A\xF1o", LIFETIME: "Tiempo de Vida", FORECAST: "Pron\xF3stico", FORECAST_DESC: "El n\xFAmero de tarjetas vencidas en el futuro", SCHEDULED: "Programado", DAYS: "D\xEDas", NUMBER_OF_CARDS: "N\xFAmero de tarjetas", REVIEWS_PER_DAY: "Carga: ${avg} Revisiones por d\xEDa", INTERVALS: "Intervalos", INTERVALS_DESC: "Retrasos hasta que las revisiones se muestren de nuevo", COUNT: "Conteo", INTERVALS_SUMMARY: "Intervalo de carga: ${avg}, Intervalo mayor: ${longest}", EASES: "Facilidad", EASES_SUMMARY: "Carga de Facilidad: ${avgEase}", CARD_TYPES: "Tipos de tarjetas", CARD_TYPES_DESC: "Esto incluye tambi\xE9n a las tarjetas enterradas, si las hay", CARD_TYPE_NEW: "Nueva", CARD_TYPE_YOUNG: "Joven", CARD_TYPE_MATURE: "Madura", CARD_TYPES_SUMMARY: "Tarjetas Totales: ${totalCardsCount}" }; // src/lang/locale/fr.ts var fr_default = { // flashcard-modal.tsx DECKS: "Paquets", DUE_CARDS: "Cartes dues", NEW_CARDS: "Nouvelles cartes", TOTAL_CARDS: "Total de cartes", BACK: "Pr\xE9c\xE9dent", SKIP: "Sauter", EDIT_CARD: "Modifier la carte", RESET_CARD_PROGRESS: "Remettre \xE0 z\xE9ro le niveau de cette carte", HARD: "Difficile", GOOD: "Correct", EASY: "Facile", SHOW_ANSWER: "Montrer la r\xE9ponse", CARD_PROGRESS_RESET: "Le niveau de la carte a \xE9t\xE9 remis \xE0 z\xE9ro.", SAVE: "Sauvegarder", CANCEL: "Annuler", NO_INPUT: "Pas de contenu.", CURRENT_EASE_HELP_TEXT: "Facilit\xE9 actuelle : ", CURRENT_INTERVAL_HELP_TEXT: "Intervalle actuel : ", CARD_GENERATED_FROM: "G\xE9n\xE9r\xE9 depuis : ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "Ouvrir une note \xE0 apprendre", REVIEW_CARDS: "Apprendre les flashcards", REVIEW_DIFFICULTY_FILE_MENU: "Apprentissage : ${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "Difficult\xE9 de la r\xE9vision : ${difficulty}", CRAM_ALL_CARDS: "Choisir un deck \xE0 r\xE9viser", REVIEW_ALL_CARDS: "Apprendre les flashcards dans toutes les notes", REVIEW_CARDS_IN_NOTE: "Apprendre les flashcards dans cette note", CRAM_CARDS_IN_NOTE: "R\xE9viser les flashcards dans cette note", VIEW_STATS: "Voir les statistiques", OPEN_REVIEW_QUEUE_VIEW: "Ouvrir la file d'attente des notes \xE0 apprendre dans la barre verticale", STATUS_BAR: "Apprentissage : ${dueNotesCount} note(s), ${dueFlashcardsCount} carte(s) dues", SYNC_TIME_TAKEN: "Synchronis\xE9 en ${t}ms", NOTE_IN_IGNORED_FOLDER: "La note est dans un dossier ignor\xE9 (voir param\xE8tres).", PLEASE_TAG_NOTE: "Ajoutez le bon tag \xE0 la note pour l'apprendre (dans les param\xE8tres).", RESPONSE_RECEIVED: "R\xE9ponse enregistr\xE9e.", NO_DECK_EXISTS: "Pas de paquet sous le nom ${deckName}", ALL_CAUGHT_UP: "Bravo, vous \xEAtes \xE0 jour !", // scheduling.ts DAYS_STR_IVL: "${interval} jour(s)", MONTHS_STR_IVL: "${interval} mois(s)", YEARS_STR_IVL: "${interval} an(s)", DAYS_STR_IVL_MOBILE: "${interval}j", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}a", // settings.ts SETTINGS_HEADER: "Spaced Repetition - Param\xE8tres", GROUP_TAGS_FOLDERS: "Tags & Dossiers", GROUP_FLASHCARD_REVIEW: "Apprentissage des flashcards", GROUP_FLASHCARD_SEPARATORS: "S\xE9parateurs de flashcards", GROUP_DATA_STORAGE: "Stockage des informations de planification", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contribuer", CHECK_WIKI: 'Pour plus d\'informations, visitez le wiki.', GITHUB_DISCUSSIONS: 'Visitez les discussions pour des questions-r\xE9ponses, des retours ou une discussion g\xE9n\xE9raliste.', GITHUB_ISSUES: 'Cr\xE9ez un ticket sur GitHub si vous trouvez un bug ou voulez demander une fonctionnalit\xE9.', GITHUB_SOURCE_CODE: 'Code source du projet disponible sur GitHub', CODE_CONTRIBUTION_INFO: 'Information sur les contributions au code', TRANSLATION_CONTRIBUTION_INFO: 'Informations sur la traduction du plugin dans votre langue', PROJECT_CONTRIBUTIONS: 'Cr\xE9ez un ticket sur GitHub si vous trouvez un bug ou voulez demander une fonctionnalit\xE9', FOLDERS_TO_IGNORE: "Dossiers \xE0 ignorer", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "Flashcards", FLASHCARD_EASY_LABEL: "Bouton Facile", FLASHCARD_GOOD_LABEL: "Bouton Correct", FLASHCARD_HARD_LABEL: "Bouton Difficile", FLASHCARD_EASY_DESC: "Changez le texte du bouton Facile", FLASHCARD_GOOD_DESC: "Changez le texte du bouton Correct", FLASHCARD_HARD_DESC: "Changez le texte du bouton Difficile", REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "Tags des flashcards", FLASHCARD_TAGS_DESC: "Entrez les tags s\xE9par\xE9s par un espace ou une ligne i.e. #flashcards #paquet2 #paquet3.", CONVERT_FOLDERS_TO_DECKS: "Convertir les dossiers en paquets et sous-paquets ?", CONVERT_FOLDERS_TO_DECKS_DESC: "Ceci est une alternative aux tags de flashcards pr\xE9sent\xE9s ci-dessus.", INLINE_SCHEDULING_COMMENTS: "Sauvegarder le commentaire de planification dans la derni\xE8re ligne de la flashcard ?", INLINE_SCHEDULING_COMMENTS_DESC: "Activer ceci emp\xEAche les commentaires HTML de casser la mise en page des listes.", BURY_SIBLINGS_TILL_NEXT_DAY: "Enterrer les cartes s\u0153urs jusqu'au lendemain ?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Les cartes s\u0153urs sont les cartes g\xE9n\xE9r\xE9es depuis le m\xEAme texte, par exemple pour les textes \xE0 trous", SHOW_CARD_CONTEXT: "Montrer le contexte dans les cartes ?", SHOW_CARD_CONTEXT_DESC: "ex. Titre de la note > Titre 1 > Sous-titre > ... > Sous-titre", CARD_MODAL_HEIGHT_PERCENT: "Pourcentage de hauteur de la flashcard", CARD_MODAL_SIZE_PERCENT_DESC: "Devrait \xEAtre 100% sur mobile ou en cas de grandes images", RESET_DEFAULT: "R\xE9initialiser les param\xE8tres", CARD_MODAL_WIDTH_PERCENT: "Pourcentage de largeur de la flashcard", RANDOMIZE_CARD_ORDER: "Apprendre les cartes dans un ordre al\xE9atoire ?", REVIEW_CARD_ORDER_WITHIN_DECK: "Ordre d'affichage des cartes d'un paquet pendant les r\xE9visions", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Dans l'ordre du paquet (Nouvelles cartes d'abord)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Dans l'ordre du paquet (Cartes dues d'abord)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Al\xE9atoirement dans le paquet (Nouvelles cartes d'abord)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Al\xE9atoirement dans le paquet (Cartes dues d'abord)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Carte au hasard dans un paquet au hasard", REVIEW_DECK_ORDER: "Ordre d'affichage des paquets pendant les r\xE9visions", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "S\xE9quentiel (quand toutes les cartes du paquet pr\xE9c\xE9dent sont apprises)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Al\xE9atoire (quand toutes les cartes du paquet pr\xE9c\xE9dent sont apprises)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Carte au hasard dans un paquet au hasard", DISABLE_CLOZE_CARDS: "D\xE9sactiver les textes \xE0 trous ?", CONVERT_HIGHLIGHTS_TO_CLOZES: "Convertir ==soulignages== en trous ?", CONVERT_BOLD_TEXT_TO_CLOZES: "Convertir **gras** en trous ?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "Convertir {{crochets}} en trous ?", INLINE_CARDS_SEPARATOR: "S\xE9parateur pour flashcards en une ligne", FIX_SEPARATORS_MANUALLY_WARNING: "Apr\xE8s avoir chang\xE9 ce r\xE9glage, vous devrez manuellement mettre \xE0 jour toutes vos flashcards.", INLINE_REVERSED_CARDS_SEPARATOR: "S\xE9parateur pour flashcards invers\xE9es en une ligne", MULTILINE_CARDS_SEPARATOR: "S\xE9parateur pour flashcards en plusieurs lignes", MULTILINE_REVERSED_CARDS_SEPARATOR: "S\xE9parateur pour flashcards invers\xE9es en plusieurs lignes", MULTILINE_CARDS_END_MARKER: "Caract\xE8res de fin de textes \xE0 trous ou de flashcards en plusieurs lignes", NOTES: "Notes", REVIEW_PANE_ON_STARTUP: "Montrer le module d'apprentissage des notes au d\xE9marrage", TAGS_TO_REVIEW: "Tags \xE0 apprendre", TAGS_TO_REVIEW_DESC: "Entrez les tags s\xE9par\xE9s par un espace ou une ligne i.e. #review #tag2 #tag3.", OPEN_RANDOM_NOTE: "Ouvrir une note \xE0 apprendre au hasard", OPEN_RANDOM_NOTE_DESC: "Si vous d\xE9sactivez cette option, les notes sont tri\xE9es par importance (PageRank).", AUTO_NEXT_NOTE: "Ouvrir la prochaine note automatiquement apr\xE8s un apprentissage", MAX_N_DAYS_REVIEW_QUEUE: "Jours maximum affich\xE9s dans la barre de droite", MIN_ONE_DAY: "Le nombre de jours doit \xEAtre au moins 1.", VALID_NUMBER_WARNING: "Entrez un nombre valide.", UI_PREFERENCES: "Pr\xE9f\xE9rences UI", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", ENABLE_FILE_MENU_REVIEW_OPTIONS: "Enable the review options in the file menu (e.g. Review: Easy, Good, Hard)", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "If you disable the review options in the file menu, you can review your notes using the plugin commands and, if you defined them, the associated command hotkeys.", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Les dossiers de paquets devraient initialement tous \xEAtre ouverts", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "D\xE9sactivez pour r\xE9duire les paquets dans la m\xEAme carte. Ce r\xE9glage est utile si vous avez des cartes qui appartiennent \xE0 beaucoup de paquets \xE0 la fois.", ALGORITHM: "Algorithme", CHECK_ALGORITHM_WIKI: `Pour en savoir plus, lisez l'impl\xE9mentation de l'algorithme.`, BASE_EASE: "Facilit\xE9 de base", BASE_EASE_DESC: "minimum = 130, recommand\xE9 = vers 250.", BASE_EASE_MIN_WARNING: "La facilit\xE9 de base doit \xEAtre sup\xE9rieure \xE0 130.", LAPSE_INTERVAL_CHANGE: "Changement d'intervalle quand vous indiquez qu'une flashcard/note a \xE9t\xE9 difficile", LAPSE_INTERVAL_CHANGE_DESC: "nouvelIntervalle = ancienIntervalle * changementIntervalle / 100.", EASY_BONUS: "Bonus Facile", EASY_BONUS_DESC: "Le bonus Facile vous permet d'augmenter l'intervalle entre une r\xE9ponse Correct et une r\xE9ponse Facile sur une flashcard/note (minimum = 100%).", EASY_BONUS_MIN_WARNING: "Le bonus Facile doit \xEAtre au moins 100.", MAX_INTERVAL: "Intervalle maximum (en jours)", MAX_INTERVAL_DESC: "Vous permet de mettre une limite maximale sur l'intervalle (par d\xE9faut, 100 ans).", MAX_INTERVAL_MIN_WARNING: "L'intervalle maximum doit \xEAtre au moins 1 jour.", MAX_LINK_CONTRIB: "Contribution maximum des liens", MAX_LINK_CONTRIB_DESC: "Contribution maximum de la facilit\xE9 pond\xE9r\xE9e des notes li\xE9es \xE0 la facilit\xE9 initiale.", LOGGING: "Logging", DISPLAY_DEBUG_INFO: "Afficher les informations de d\xE9bogage dans la console de d\xE9veloppement", DISPLAY_PARSER_DEBUG_INFO: "Afficher les informations de d\xE9bogage pour le parser dans la console de d\xE9veloppement", // sidebar.ts NOTES_REVIEW_QUEUE: "Cartes \xE0 apprendre", CLOSE: "Fermer", NEW: "Nouveau", YESTERDAY: "Hier", TODAY: "Aujourd'hui", TOMORROW: "Demain", // stats-modal.tsx STATS_TITLE: "Statistiques", MONTH: "Mois", QUARTER: "Trimestre", YEAR: "Ann\xE9e", LIFETIME: "Toujours", FORECAST: "Pr\xE9visions", FORECAST_DESC: "Le nombre de cartes dues dans le futur", SCHEDULED: "Planifi\xE9", DAYS: "Jours", NUMBER_OF_CARDS: "Nombre de cartes", REVIEWS_PER_DAY: "Moyenne : ${avg} apprentissages / jour", INTERVALS: "Intervalles", INTERVALS_DESC: "Dur\xE9e avant de remontrer une carte", COUNT: "Total", INTERVALS_SUMMARY: "Intervalle moyen : ${avg}. Intervalle maximum: ${longest}", EASES: "Facilit\xE9", EASES_SUMMARY: "Facilit\xE9 moyenne : ${avgEase}", CARD_TYPES: "Types de cartes", CARD_TYPES_DESC: "Ceci inclut les cartes enterr\xE9es, s'il y en a", CARD_TYPE_NEW: "Nouvelles", CARD_TYPE_YOUNG: "En cours d'apprentissage", CARD_TYPE_MATURE: "Matures", CARD_TYPES_SUMMARY: "Total de cartes : ${totalCardsCount}" }; // src/lang/locale/hi.ts var hi_default = {}; // src/lang/locale/id.ts var id_default = {}; // src/lang/locale/it.ts var it_default = { // flashcard-modal.tsx DECKS: "Mazzi", DUE_CARDS: "Schede da fare", NEW_CARDS: "Schede nuove", TOTAL_CARDS: "Schede totali", BACK: "Indietro", SKIP: "Salta", EDIT_CARD: "Modifica scheda", RESET_CARD_PROGRESS: "Ripristina i progressi della scheda", HARD: "Difficile", GOOD: "Buono", EASY: "Facile", SHOW_ANSWER: "Mostra risposta", CARD_PROGRESS_RESET: "I progressi della scheda sono stati ripristinati", SAVE: "Salva", CANCEL: "Cancella", NO_INPUT: "Non \xE8 stato provvisto alcun input", CURRENT_EASE_HELP_TEXT: "Difficolt\xE0 attuale: ", CURRENT_INTERVAL_HELP_TEXT: "Intervallo attuale: ", CARD_GENERATED_FROM: "Generato da: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "Apri una nota per rivisita", REVIEW_CARDS: "Rivisita schede", REVIEW_DIFFICULTY_FILE_MENU: "Rivisita: ${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "Revisita note come ${difficulty}", CRAM_ALL_CARDS: "Seleziona un mazzo da memorizzare", REVIEW_ALL_CARDS: "Seleziona schede da rivedere", REVIEW_CARDS_IN_NOTE: "Rivedi schede in questa nota", CRAM_CARDS_IN_NOTE: "Memorizza schede in questa nota", VIEW_STATS: "Vedi statistiche", OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar", STATUS_BAR: "Da rivedere: ${dueNotesCount} scheda/e, ${dueFlashcardsCount} schede in ritardo", SYNC_TIME_TAKEN: "Sincronizzato in ${t}ms", NOTE_IN_IGNORED_FOLDER: "La nota \xE8 salvata in una cartella ignorata (rivedi le impostazioni).", PLEASE_TAG_NOTE: "Per favore etichetta la nota appropriatamente per la revisione (nelle impostazioni).", RESPONSE_RECEIVED: "Risposta ricevuta.", NO_DECK_EXISTS: "Non esistono mazzi per ${deckName}", ALL_CAUGHT_UP: "Sei al passo! :D.", // scheduling.ts DAYS_STR_IVL: "${interval} giorno/i", MONTHS_STR_IVL: "${interval} mese/i", YEARS_STR_IVL: "${interval} anno/i", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}y", // settings.ts SETTINGS_HEADER: "Plugin per ripetizione spaziata - Impostazioni", GROUP_TAGS_FOLDERS: "Tags & Folders", GROUP_FLASHCARD_REVIEW: "Flashcard Review", GROUP_FLASHCARD_SEPARATORS: "Flashcard Separators", GROUP_DATA_STORAGE: "Storage of Scheduling Data", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contributing", CHECK_WIKI: 'Per maggiori informazioni, rivolgersi alla wiki.', GITHUB_DISCUSSIONS: 'Visit the discussions section for Q&A help, feedback, and general discussion.', GITHUB_ISSUES: 'Raise an issue here if you have a feature request or a bug report.', GITHUB_SOURCE_CODE: 'Project source code available on GitHub', CODE_CONTRIBUTION_INFO: 'Information on code contributions', TRANSLATION_CONTRIBUTION_INFO: 'Information on translating the plugin to your language', PROJECT_CONTRIBUTIONS: 'Raise an issue here if you have a feature request or a bug report', FOLDERS_TO_IGNORE: "Cartelle da ignorare", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "Schede", FLASHCARD_EASY_LABEL: "Testo del bottone facile", FLASHCARD_GOOD_LABEL: "Testo del bottone buono", FLASHCARD_HARD_LABEL: "Testo del bottone difficile", FLASHCARD_EASY_DESC: 'Personalizza il testo per il pulsante "Facile"', FLASHCARD_GOOD_DESC: 'Personalizza il testo per il pulsante "Buono"', FLASHCARD_HARD_DESC: 'Personalizza il testo per il pulsante "Difficile"', REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "Etichette delle schede", FLASHCARD_TAGS_DESC: "Inserire etichette separate da spazi o a capi, per esempio #flashcards #deck2 #deck3.", CONVERT_FOLDERS_TO_DECKS: "Trasformare cartelle in mazzi e sotto-mazzi?", CONVERT_FOLDERS_TO_DECKS_DESC: "Questa \xE8 un'alternativa all'opzione delle etichette delle schede sopra.", INLINE_SCHEDULING_COMMENTS: "Salvare il commento per l'orario sulla stessa linea dell'ultimna linea della scheda?", INLINE_SCHEDULING_COMMENTS_DESC: "Attivando quest'impostazione far\xF2 s\xEC che i commento HTML non rompino la formattazione delle liste.", BURY_SIBLINGS_TILL_NEXT_DAY: "Sotterrare schede sorelle fino al giorno dopo?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Le schede sorelle sono schede generate dallo stesso testo della scheda, per esempio i.e. cloze deletions", SHOW_CARD_CONTEXT: "Mostrare contesto nelle schede?", SHOW_CARD_CONTEXT_DESC: "per esempio, Titolo > Intestazione 1 > Sottotitolo 1 > ... > Sottotitolo", CARD_MODAL_HEIGHT_PERCENT: "Percentuale altezza schede", CARD_MODAL_SIZE_PERCENT_DESC: "Dovrebbe essere 100% se sei su telefono o se hai immagini molto grandi", RESET_DEFAULT: "Reimposta alle impostazioni iniziali", CARD_MODAL_WIDTH_PERCENT: "Percentuale di larghezza delle schede", RANDOMIZE_CARD_ORDER: "Rendere casuale l'ordine delle schede durante la revisione?", REVIEW_CARD_ORDER_WITHIN_DECK: "L'ordine in cui le schede saranno visualizzate all'interno del mazzo", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequenzialmente dentro il mazzo (prima schede nuove)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequenzialmente dentro il mazzo (prima schede in ritardo)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "A caso dentro il mazzo (prima schede nuove)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "A caso dentro il mazzo (prima schede in ritardo)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Scheda a caso da mazzo a caso", REVIEW_DECK_ORDER: "L'ordine in cui i mazzi vengono mostrati durante la revisione", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequenzialmente (quando le schede nel mazzo precedente saranno state riviste)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "A caso (quando le schede nel mazzo precedente saranno state riviste)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Scheda a caso da mazzo a caso", DISABLE_CLOZE_CARDS: "Disabilita schede con spazi da riempire?", CONVERT_HIGHLIGHTS_TO_CLOZES: "Convertire ==testo evidenziato== in spazi da riempire?", CONVERT_BOLD_TEXT_TO_CLOZES: "Convertire **testo in grassetto** in spazi da riempire", CONVERT_CURLY_BRACKETS_TO_CLOZES: "Convertire {{parentesi graffe}} in spazi da riempire?", INLINE_CARDS_SEPARATOR: "Separatore per schede sulla stessa riga", FIX_SEPARATORS_MANUALLY_WARNING: "Si avvisa che dopo aver cambiato questo dovrai manualmente modificare le schede che hai gi\xE0.", INLINE_REVERSED_CARDS_SEPARATOR: "Separatore per schede all'incontrario sulla stessa riga", MULTILINE_CARDS_SEPARATOR: "Separatore per schede su pi\xF9 righe", MULTILINE_REVERSED_CARDS_SEPARATOR: "Separatore per schede all'incontrario su pi\xF9 righe", MULTILINE_CARDS_END_MARKER: "Caratteri che denotano la fine di carte con spazi da riempiere e carte multilinea", NOTES: "Note", REVIEW_PANE_ON_STARTUP: "Abilita il pannello di revisione note all'avvio", TAGS_TO_REVIEW: "Etichette da rivedere", TAGS_TO_REVIEW_DESC: "Inserisci le etichette separate da spazi o a capi, tipo #review #tag2 #tag3.", OPEN_RANDOM_NOTE: "Apri una nota a caso per revisione", OPEN_RANDOM_NOTE_DESC: "Quando lo disabiliti, le note saranno ordinate per importanza (PageRank).", AUTO_NEXT_NOTE: "Apri la prossima nota automaticamente dopo la revisione", ENABLE_FILE_MENU_REVIEW_OPTIONS: "Abilita le opzioni di revisione nel menu File (es.: Rivisita: Facile, Buono, Difficile)", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Se disabiliti le opzioni di revisione nel menu File, puoi rivedere le tue note utilizzando i comandi del plugin e, se li hai definiti, le scorciatoie da tastiera associate.", MAX_N_DAYS_REVIEW_QUEUE: "Numero di giorni massimi da visualizzare nel pannello di destra", MIN_ONE_DAY: "Il numero di giorni deve essere almeno 1.", VALID_NUMBER_WARNING: "Per favore, mettere un numero valido.", UI_PREFERENCES: "Preferenze di interfaccia", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Alberti di mazzi dovrebbero essere inizialmente visualizzate come espansi", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Disabilitami per collassare mazzi annidati nella stessa scheda. Utile se hai schede che appartengono a pi\xF9 mazzi nello stesso file.", ALGORITHM: "Algoritmo", CHECK_ALGORITHM_WIKI: "Per maggiori informazioni, visita l'implementazione dell'algoritmo.", BASE_EASE: "Difficolt\xE0 base", BASE_EASE_DESC: "mino = 130, preferibilmente circa 250.", BASE_EASE_MIN_WARNING: "La difficolt\xE0 base deve essere di almeno 130.", LAPSE_INTERVAL_CHANGE: "L'intervallo cambier\xE0 segnando una scheda / nota come difficile", LAPSE_INTERVAL_CHANGE_DESC: "Intervallo nuovo = intervallo vecchio * cambio intervallo / 100.", EASY_BONUS: "Bonus facilit\xE0", EASY_BONUS_DESC: "Il bonus facilit\xE0 ti permette di impostare le differenze negli intervalli tra il rispondere Buono e Facile su una scheda o nota (minimo 100%).", EASY_BONUS_MIN_WARNING: "Il bonus facilit\xE0 deve essere di almeno 100.", MAX_INTERVAL: "Intervallo massimo in giorni", MAX_INTERVAL_DESC: "Ti permette di mettere un limite massimo all'intervallo (default 100 anni).", MAX_INTERVAL_MIN_WARNING: "L'intervallo massimo deve essere di almeno 1 giorno.", MAX_LINK_CONTRIB: "Contributo massimo delle note collegate", MAX_LINK_CONTRIB_DESC: "Contributo massimo della difficolt\xE0 pasata delle note collegate alla difficolt\xE0 iniziale.", LOGGING: "Registrando", DISPLAY_DEBUG_INFO: "Visualizza informazione di debug sulla console per sviluppatori", DISPLAY_PARSER_DEBUG_INFO: "Visualizza informazione di debug riguardanti il parser sulla console per sviluppatori", // sidebar.ts NOTES_REVIEW_QUEUE: "Coda di note da rivedere", CLOSE: "Chiusi", NEW: "Nuovo/a", YESTERDAY: "Ieri", TODAY: "Oggi", TOMORROW: "Domani", // stats-modal.tsx STATS_TITLE: "Statistiche", MONTH: "Mese", QUARTER: "Trimestre", YEAR: "Anno", LIFETIME: "Per tutta la vita", FORECAST: "Previsione", FORECAST_DESC: "Il numero di schede che saranno in ritardo in futuro", SCHEDULED: "Programmate", DAYS: "Giorni", NUMBER_OF_CARDS: "Numero di schede", REVIEWS_PER_DAY: "Media: ${avg} revisioni/giorno", INTERVALS: "Intervalli", INTERVALS_DESC: "Ritardi finch\xE9 le revisioni saranno visualizzate di nuovo", COUNT: "Conta", INTERVALS_SUMMARY: "Intervallo medio: ${avg}, Intervallo massimo: ${longest}", EASES: "Difficolt\xE0", EASES_SUMMARY: "Difficolt\xE0 media: ${avgEase}", CARD_TYPES: "Tipi di schede", CARD_TYPES_DESC: "Include eventuali schede sepolte", CARD_TYPE_NEW: "Nuove", CARD_TYPE_YOUNG: "Giovani", CARD_TYPE_MATURE: "Mature", CARD_TYPES_SUMMARY: "Schede tottali: ${totalCardsCount}" }; // src/lang/locale/ja.ts var ja_default = { // flashcard-modal.tsx DECKS: "\u30C7\u30C3\u30AD", DUE_CARDS: "\u671F\u65E5\u306E\u30AB\u30FC\u30C9", NEW_CARDS: "\u65B0\u898F\u306E\u30AB\u30FC\u30C9", TOTAL_CARDS: "\u30AB\u30FC\u30C9\u5408\u8A08", BACK: "Back", SKIP: "Skip", EDIT_CARD: "Edit Card", RESET_CARD_PROGRESS: "\u30AB\u30FC\u30C9\u306E\u9032\u6357\u3092\u30EA\u30BB\u30C3\u30C8", HARD: "Hard", GOOD: "Good", EASY: "Easy", SHOW_ANSWER: "\u89E3\u7B54\u3092\u8868\u793A", CARD_PROGRESS_RESET: "\u30AB\u30FC\u30C9\u306E\u9032\u6357\u304C\u30EA\u30BB\u30C3\u30C8\u3055\u308C\u307E\u3057\u305F\u3002", SAVE: "Save", CANCEL: "Cancel", NO_INPUT: "No input provided.", CURRENT_EASE_HELP_TEXT: "Current Ease: ", CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", CARD_GENERATED_FROM: "Generated from: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u30CE\u30FC\u30C8\u3092\u958B\u304F", REVIEW_CARDS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u30EC\u30D3\u30E5\u30FC", REVIEW_DIFFICULTY_FILE_MENU: "\u30EC\u30D3\u30E5\u30FC: ${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "\u30CE\u30FC\u30C8\u3092${difficulty}\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B", REVIEW_ALL_CARDS: "\u3059\u3079\u3066\u306E\u30CE\u30FC\u30C8\u304B\u3089\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u30EC\u30D3\u30E5\u30FC\u3059\u308B", CRAM_ALL_CARDS: "Select a deck to cram", REVIEW_CARDS_IN_NOTE: "\u3053\u306E\u30CE\u30FC\u30C8\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u30EC\u30D3\u30E5\u30FC\u3059\u308B", CRAM_CARDS_IN_NOTE: "\u3053\u306E\u30CE\u30FC\u30C8\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u8A70\u3081\u8FBC\u307F\u5B66\u7FD2\u3059\u308B", VIEW_STATS: "\u7D71\u8A08\u3092\u95B2\u89A7\u3059\u308B", OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar", STATUS_BAR: "\u30EC\u30D3\u30E5\u30FC: ${dueNotesCount}\u30CE\u30FC\u30C8, ${dueFlashcardsCount}\u30AB\u30FC\u30C9\u304C\u671F\u65E5", SYNC_TIME_TAKEN: "\u540C\u671F\u306B${t}ms\u304B\u304B\u308A\u307E\u3057\u305F\u3002", NOTE_IN_IGNORED_FOLDER: "\u30CE\u30FC\u30C8\u304C\u7121\u8996\u3059\u308B\u30D5\u30A9\u30EB\u30C0\u306B\u4FDD\u5B58\u3055\u308C\u3066\u3044\u307E\u3059(\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044)\u3002", PLEASE_TAG_NOTE: "\u30EC\u30D3\u30E5\u30FC\u3092\u884C\u3046\u306B\u306F\u30CE\u30FC\u30C8\u306B\u5BFE\u3057\u3066\u6B63\u3057\u304F\u30BF\u30B0\u4ED8\u3051\u3057\u3066\u304F\u3060\u3055\u3044(\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044)\u3002", RESPONSE_RECEIVED: "\u7B54\u3048\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\u3002", NO_DECK_EXISTS: "${deckName}\u306B\u306F\u30C7\u30C3\u30AD\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3002", ALL_CAUGHT_UP: "\u4ECA\u65E5\u306E\u8AB2\u984C\u3092\u3059\u3079\u3066\u9054\u6210\u3057\u307E\u3057\u305F :D", // scheduling.ts DAYS_STR_IVL: "${interval}\u65E5\u5F8C", MONTHS_STR_IVL: "${interval}\u6708\u5F8C", YEARS_STR_IVL: "${interval}\u5E74\u5F8C", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}y", // settings.ts SETTINGS_HEADER: "Spaced Repetition - \u8A2D\u5B9A", GROUP_TAGS_FOLDERS: "Tags & Folders", GROUP_FLASHCARD_REVIEW: "Flashcard Review", GROUP_FLASHCARD_SEPARATORS: "Flashcard Separators", GROUP_DATA_STORAGE: "Storage of Scheduling Data", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contributing", CHECK_WIKI: '\u8A73\u7D30\u306B\u3064\u3044\u3066\u306Fwiki\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002', GITHUB_DISCUSSIONS: 'Visit the discussions section for Q&A help, feedback, and general discussion.', GITHUB_ISSUES: 'Raise an issue here if you have a feature request or a bug report.', GITHUB_SOURCE_CODE: 'Project source code available on GitHub', CODE_CONTRIBUTION_INFO: 'Information on code contributions', TRANSLATION_CONTRIBUTION_INFO: 'Information on translating the plugin to your language', PROJECT_CONTRIBUTIONS: 'Raise an issue here if you have a feature request or a bug report', FOLDERS_TO_IGNORE: "\u7121\u8996\u3059\u308B\u30D5\u30A9\u30EB\u30C0", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9", FLASHCARD_EASY_LABEL: "Easy Button Text", FLASHCARD_GOOD_LABEL: "Good Button Text", FLASHCARD_HARD_LABEL: "Hard Button Text", FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BF\u30B0", FLASHCARD_TAGS_DESC: '\u30BF\u30B0\u3092\u30B9\u30DA\u30FC\u30B9\u307E\u305F\u306F\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u4F8B: "#flashcards #deck2 #deck3"', CONVERT_FOLDERS_TO_DECKS: "\u30D5\u30A9\u30EB\u30C0\u3092\u30C7\u30C3\u30AD\u3068\u30B5\u30D6\u30C7\u30C3\u30AD\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F", CONVERT_FOLDERS_TO_DECKS_DESC: "\u3053\u308C\u306F\u4E0A\u8A18\u306E\u30BF\u30B0\u3092\u4F7F\u7528\u3057\u305F\u30C7\u30C3\u30AD\u69CB\u7BC9\u306E\u4EE3\u66FF\u3068\u306A\u308B\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u3059\u3002", INLINE_SCHEDULING_COMMENTS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u6700\u7D42\u884C\u3068\u540C\u4E00\u306E\u884C\u306B\u30B9\u30B1\u30B8\u30E5\u30FC\u30EA\u30F3\u30B0\u30B3\u30E1\u30F3\u30C8\u3092\u4FDD\u5B58\u3057\u307E\u3059\u304B\uFF1F", INLINE_SCHEDULING_COMMENTS_DESC: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u5316\u3059\u308B\u3068\u3001HTML\u30B3\u30E1\u30F3\u30C8\u306B\u3088\u3063\u3066Markdown\u306E\u30EA\u30B9\u30C8\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u304C\u5D29\u308C\u306A\u304F\u306A\u308A\u307E\u3059\u3002", BURY_SIBLINGS_TILL_NEXT_DAY: "\u6B21\u306E\u30EC\u30D3\u30E5\u30FC\u307E\u3067\u30B7\u30D6\u30EA\u30F3\u30B0\u3092\u5EF6\u671F\u3057\u307E\u3059\u304B\uFF1F", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u30B7\u30D6\u30EA\u30F3\u30B0\u306F\u540C\u4E00\u306E\u30AB\u30FC\u30C9\u30C6\u30AD\u30B9\u30C8\u304B\u3089\u751F\u6210\u3055\u308C\u305F\u30AB\u30FC\u30C9\u3001\u3064\u307E\u308A\u7A74\u57CB\u3081\u554F\u984C\u306E\u6D3E\u751F\u30AB\u30FC\u30C9\u3067\u3059\u3002", SHOW_CARD_CONTEXT: "\u30AB\u30FC\u30C9\u306B\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3057\u307E\u3059\u304B\uFF1F", SHOW_CARD_CONTEXT_DESC: "\uFF62\u30BF\u30A4\u30C8\u30EB > \u898B\u51FA\u3057 1 > \u526F\u898B\u51FA\u3057 > ... > \u526F\u898B\u51FA\u3057\uFF63\u306E\u8868\u793A\u3092\u884C\u3046\u304B\u3069\u3046\u304B\u3092\u6C7A\u3081\u307E\u3059\u3002", CARD_MODAL_HEIGHT_PERCENT: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u7E26\u30B5\u30A4\u30BA\u306E\u30D1\u30FC\u30BB\u30F3\u30C6\u30FC\u30B8", CARD_MODAL_SIZE_PERCENT_DESC: "\u30E2\u30D0\u30A4\u30EB\u7248\u3001\u307E\u305F\u306F\u975E\u5E38\u306B\u5927\u304D\u306A\u30B5\u30A4\u30BA\u306E\u753B\u50CF\u304C\u3042\u308B\u5834\u5408\u306B\u306F100%\u306B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002", RESET_DEFAULT: "\u30C7\u30D5\u30A9\u30EB\u30C8\u5024\u306B\u30EA\u30BB\u30C3\u30C8\u3059\u308B", CARD_MODAL_WIDTH_PERCENT: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u6A2A\u30B5\u30A4\u30BA\u306E\u30D1\u30FC\u30BB\u30F3\u30C6\u30FC\u30B8", RANDOMIZE_CARD_ORDER: "\u30EC\u30D3\u30E5\u30FC\u4E2D\u306E\u30AB\u30FC\u30C9\u306E\u9806\u756A\u3092\u30E9\u30F3\u30C0\u30E0\u306B\u3057\u307E\u3059\u304B\uFF1F", REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", REVIEW_DECK_ORDER: "Order decks are displayed during review", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", DISABLE_CLOZE_CARDS: "\u7A74\u57CB\u3081\u30AB\u30FC\u30C9\u3092\u7121\u52B9\u5316\u3057\u307E\u3059\u304B\uFF1F", CONVERT_HIGHLIGHTS_TO_CLOZES: "==\u30CF\u30A4\u30E9\u30A4\u30C8==\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F", CONVERT_BOLD_TEXT_TO_CLOZES: "**\u30DC\u30FC\u30EB\u30C9\u4F53**\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F", CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{\u4E2D\u62EC\u5F27}}\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F", INLINE_CARDS_SEPARATOR: "\u30A4\u30F3\u30E9\u30A4\u30F3\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC", FIX_SEPARATORS_MANUALLY_WARNING: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u5909\u66F4\u3059\u308B\u5834\u5408\u306B\u306F\u3001\u4F5C\u6210\u6E08\u307F\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u624B\u52D5\u3067\u7DE8\u96C6\u3057\u76F4\u3059\u5FC5\u8981\u304C\u3042\u308B\u3053\u3068\u306B\u6CE8\u610F\u3057\u3066\u304F\u3060\u3055\u3044\u3002", INLINE_REVERSED_CARDS_SEPARATOR: "\u30A4\u30F3\u30E9\u30A4\u30F3\u306E\u8868\u88CF\u53CD\u8EE2\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC", MULTILINE_CARDS_SEPARATOR: "\u8907\u6570\u884C\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC", MULTILINE_REVERSED_CARDS_SEPARATOR: "\u8907\u6570\u884C\u306E\u8868\u88CF\u53CD\u8EE2\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC", MULTILINE_CARDS_END_MARKER: "\u30AF\u30ED\u30FC\u30BA\u3068\u8907\u6570\u884C\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u7D42\u308F\u308A\u3092\u793A\u3059\u6587\u5B57", NOTES: "\u30CE\u30FC\u30C8", REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", TAGS_TO_REVIEW: "\u30EC\u30D3\u30E5\u30FC\u306B\u4F7F\u7528\u3059\u308B\u30BF\u30B0", TAGS_TO_REVIEW_DESC: '\u30BF\u30B0\u3092\u30B9\u30DA\u30FC\u30B9\u307E\u305F\u306F\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u4F8B: "#review #tag2 #tag3"', OPEN_RANDOM_NOTE: "\u30E9\u30F3\u30C0\u30E0\u306B\u30CE\u30FC\u30C8\u3092\u958B\u3044\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B", OPEN_RANDOM_NOTE_DESC: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u304C\u7121\u52B9\u5316\u3055\u308C\u3066\u3044\u308B\u72B6\u614B\u3067\u306F\u3001\u30CE\u30FC\u30C8\u306F\u91CD\u8981\u5EA6(\u30DA\u30FC\u30B8\u30E9\u30F3\u30AF)\u306B\u3088\u308B\u9806\u756A\u3067\u8868\u793A\u3055\u308C\u307E\u3059\u3002", AUTO_NEXT_NOTE: "\u30EC\u30D3\u30E5\u30FC\u5F8C\u306B\u6B21\u306E\u30CE\u30FC\u30C8\u3092\u81EA\u52D5\u7684\u306B\u958B\u304F", ENABLE_FILE_MENU_REVIEW_OPTIONS: "\u30D5\u30A1\u30A4\u30EB\u30E1\u30CB\u30E5\u30FC\u3067\u30EC\u30D3\u30E5\u30FC\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4F8B: Easy, Good, Hard\uFF09", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u30D5\u30A1\u30A4\u30EB\u30E1\u30CB\u30E5\u30FC\u3067\u30EC\u30D3\u30E5\u30FC\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3057\u305F\u5834\u5408\u3001\u30D7\u30E9\u30B0\u30A4\u30F3\u30B3\u30DE\u30F3\u30C9\u3084\u3001\u8A2D\u5B9A\u3057\u3066\u3044\u308B\u5834\u5408\u306F\u5BFE\u5FDC\u3059\u308B\u30DB\u30C3\u30C8\u30AD\u30FC\u3092\u4F7F\u7528\u3057\u3066\u30E1\u30E2\u3092\u30EC\u30D3\u30E5\u30FC\u3067\u304D\u307E\u3059\u3002", MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u30D1\u30CD\u30EB\u306B\u8868\u793A\u3059\u308B\u6700\u5927\u306E\u65E5\u6570", MIN_ONE_DAY: "\u65E5\u6570\u306B\u306F1\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", VALID_NUMBER_WARNING: "\u6709\u52B9\u306A\u6570\u5B57\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002", UI_PREFERENCES: "\u30E6\u30FC\u30B6\u30FC \u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9\u306E\u8A2D\u5B9A", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u30C7\u30C3\u30AD \u30C4\u30EA\u30FC\u306F\u6700\u521D\u306F\u5C55\u958B\u3057\u3066\u8868\u793A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u3053\u308C\u3092\u30AA\u30D5\u306B\u3059\u308B\u3068\u3001\u540C\u3058\u30AB\u30FC\u30C9\u5185\u306E\u30CD\u30B9\u30C8\u3055\u308C\u305F\u30C7\u30C3\u30AD\u304C\u6298\u308A\u305F\u305F\u307E\u308C\u307E\u3059\u3002\u540C\u3058\u30D5\u30A1\u30A4\u30EB\u306B\u591A\u304F\u306E\u30C7\u30C3\u30AD\u306B\u5C5E\u3059\u308B\u30AB\u30FC\u30C9\u304C\u3042\u308B\u5834\u5408\u306B\u4FBF\u5229\u3067\u3059\u3002", ALGORITHM: "\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0", CHECK_ALGORITHM_WIKI: '\u8A73\u7D30\u306B\u3064\u3044\u3066\u306F\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u306E\u5B9F\u88C5\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002', BASE_EASE: "\u30D9\u30FC\u30B9\u306E\u6613\u3057\u3055", BASE_EASE_DESC: "\u6700\u5C0F\u5024\u306F130\u3067\u3059\u304C\u3001 \u9069\u6B63\u5024\u306F\u304A\u304A\u3088\u305D250\u3067\u3059\u3002", BASE_EASE_MIN_WARNING: "\u30D9\u30FC\u30B9\u306E\u6613\u3057\u3055\u306B\u306F130\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", LAPSE_INTERVAL_CHANGE: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9/\u30CE\u30FC\u30C8\u3092Hard\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3057\u305F\u969B\u306E\u9593\u9694\u5909\u66F4", LAPSE_INTERVAL_CHANGE_DESC: '"\u65B0\u3057\u3044\u9593\u9694 = \u4EE5\u524D\u306E\u9593\u9694 * \u9593\u9694\u5909\u66F4 / 100" \u3068\u3057\u3066\u8A08\u7B97\u3055\u308C\u307E\u3059\u3002', EASY_BONUS: "Easy\u30DC\u30FC\u30CA\u30B9", EASY_BONUS_DESC: "Easy\u30DC\u30FC\u30CA\u30B9\u306B\u3088\u3063\u3066\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9/\u30CE\u30FC\u30C8\u306B\u304A\u3051\u308B\u9593\u9694\u306E\u5DEE\u5206\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059(\u6700\u5C0F\u5024 = 100%)\u3002", EASY_BONUS_MIN_WARNING: "Easy\u30DC\u30FC\u30CA\u30B9\u306B\u306F100\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", MAX_INTERVAL: "Maximum interval in days", MAX_INTERVAL_DESC: "\u9593\u9694\u306B\u4E0A\u9650\u5024\u3092\u8A2D\u5B9A\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8\u5024 = 100\u5E74)\u3002", MAX_INTERVAL_MIN_WARNING: "\u9593\u9694\u306E\u6700\u5927\u5024\u306B\u306F1\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", MAX_LINK_CONTRIB: "\u30EA\u30F3\u30AF\u30B3\u30F3\u30C8\u30EA\u30D3\u30E5\u30FC\u30B7\u30E7\u30F3\u306E\u6700\u5927\u5024", MAX_LINK_CONTRIB_DESC: "\u6700\u521D\u306E\u6613\u3057\u3055\u306B\u5BFE\u3057\u3066\u3001\u30EA\u30F3\u30AF\u3055\u308C\u305F\u30CE\u30FC\u30C8\u306E\u91CD\u307F\u4ED8\u3051\u3055\u308C\u305F\u6613\u3057\u3055\u304C\u5BC4\u4E0E\u3059\u308B\u6700\u5927\u5024\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", LOGGING: "\u30ED\u30B0\u7BA1\u7406", DISPLAY_DEBUG_INFO: "\u30C7\u30D9\u30ED\u30C3\u30D1\u30FC\u30B3\u30F3\u30BD\u30FC\u30EB\u306B\u3066\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\u3092\u8868\u793A\u3057\u307E\u3059\u304B", DISPLAY_PARSER_DEBUG_INFO: "Display debugging information for the parser on the developer console", // sidebar.ts NOTES_REVIEW_QUEUE: "\u30CE\u30FC\u30C8\u30EC\u30D3\u30E5\u30FC\u306E\u30AD\u30E5\u30FC", CLOSE: "\u9589\u3058\u308B", NEW: "\u65B0\u898F", YESTERDAY: "\u6628\u65E5", TODAY: "\u4ECA\u65E5", TOMORROW: "\u660E\u65E5", // stats-modal.tsx STATS_TITLE: "\u7D71\u8A08", MONTH: "Month", QUARTER: "Quarter", YEAR: "Year", LIFETIME: "Lifetime", FORECAST: "\u4E88\u6E2C", FORECAST_DESC: "\u5FA9\u7FD2\u671F\u65E5\u304C\u6765\u308B\u30AB\u30FC\u30C9\u306E\u679A\u6570", SCHEDULED: "\u30B9\u30B1\u30B8\u30E5\u30FC\u30EA\u30F3\u30B0\u6E08\u307F", DAYS: "\u65E5", NUMBER_OF_CARDS: "\u30AB\u30FC\u30C9\u6570", REVIEWS_PER_DAY: "\u5E73\u5747: ${avg}\u30EC\u30D3\u30E5\u30FC/\u65E5", INTERVALS: "\u9593\u9694", INTERVALS_DESC: "\u6B21\u306E\u30EC\u30D3\u30E5\u30FC\u4E88\u5B9A\u65E5", COUNT: "\u30AB\u30A6\u30F3\u30C8", INTERVALS_SUMMARY: "\u9593\u9694\u306E\u5E73\u5747\u5024: ${avg}, \u6700\u9577\u306E\u9593\u9694: ${longest}", EASES: "\u6613\u3057\u3055", EASES_SUMMARY: "\u6613\u3057\u3055\u306E\u5E73\u5747\u5024: ${avgEase}", CARD_TYPES: "\u30AB\u30FC\u30C9\u30BF\u30A4\u30D7", CARD_TYPES_DESC: "\u5EF6\u671F\u306E\u30AB\u30FC\u30C9\u304C\u3042\u308B\u5834\u5408\u306B\u306F\u3053\u308C\u306B\u542B\u307E\u308C\u307E\u3059", CARD_TYPE_NEW: "\u65B0\u898F", CARD_TYPE_YOUNG: "\u5FA9\u7FD2(\u521D\u671F)", CARD_TYPE_MATURE: "\u5FA9\u7FD2(\u5F8C\u671F)", CARD_TYPES_SUMMARY: "\u30AB\u30FC\u30C9\u306E\u5408\u8A08: ${totalCardsCount}\u679A" }; // src/lang/locale/ko.ts var ko_default = { // flashcard-modal.tsx DECKS: "\uB371", DUE_CARDS: "\uB2E4\uC2DC \uBCFC \uCE74\uB4DC\uB4E4", NEW_CARDS: "\uC0C8\uB85C\uC6B4 \uCE74\uB4DC\uB4E4", TOTAL_CARDS: "\uC804\uCCB4 \uCE74\uB4DC\uB4E4", BACK: "Back", SKIP: "Skip", EDIT_CARD: "Edit Card", RESET_CARD_PROGRESS: "\uCE74\uB4DC\uC758 \uC9C4\uD589\uC0C1\uD669\uC744 \uCD08\uAE30\uD654\uD569\uB2C8\uB2E4.", HARD: "\uC5B4\uB824\uC6C0(Hard)", GOOD: "\uC88B\uC74C(Good)", EASY: "\uC26C\uC6C0(Easy)", SHOW_ANSWER: "\uC815\uB2F5 \uD655\uC778\uD558\uAE30", CARD_PROGRESS_RESET: "\uCE74\uB4DC\uC758 \uC9C4\uD589\uC0C1\uD669\uC774 \uCD08\uAE30\uD654\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", SAVE: "Save", CANCEL: "Cancel", NO_INPUT: "No input provided.", CURRENT_EASE_HELP_TEXT: "Current Ease: ", CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", CARD_GENERATED_FROM: "Generated from: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "\uB9AC\uBDF0\uD560 \uB178\uD2B8 \uC5F4\uAE30", REVIEW_CARDS: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB9AC\uBDF0", REVIEW_DIFFICULTY_FILE_MENU: "\uB9AC\uBDF0: ${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "\uB178\uD2B8\uB97C ${difficulty}\uC73C\uB85C \uB9AC\uBDF0\uD569\uB2C8\uB2E4", REVIEW_ALL_CARDS: "\uBAA8\uB4E0 \uB178\uD2B8\uB4E4\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uB9AC\uBDF0\uD569\uB2C8\uB2E4", CRAM_ALL_CARDS: "Select a deck to cram", REVIEW_CARDS_IN_NOTE: "\uC774 \uB178\uD2B8\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uB9AC\uBDF0\uD569\uB2C8\uB2E4", CRAM_CARDS_IN_NOTE: "\uC774 \uB178\uD2B8\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uBCBC\uB77D\uCE58\uAE30\uD569\uB2C8\uB2E4.", VIEW_STATS: "\uD1B5\uACC4 \uD655\uC778", OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar", STATUS_BAR: "--\uB9AC\uBDF0: ${dueNotesCount} \uB178\uD2B8, ${dueFlashcardsCount} \uCE74\uB4DC \uB0A8\uC558\uC2B5\uB2C8\uB2E4.", SYNC_TIME_TAKEN: "\uB3D9\uAE30\uD654\uC5D0 ${t}\uBC00\uB9AC\uCD08 \uAC78\uB838\uC2B5\uB2C8\uB2E4", NOTE_IN_IGNORED_FOLDER: "\uB178\uD2B8\uAC00 \uBB34\uC2DC\uB41C \uD3F4\uB354 \uC544\uB798\uC5D0 \uC800\uC7A5\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. (\uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694)", PLEASE_TAG_NOTE: "\uB9AC\uBDF0\uB97C \uD558\uAE30\uC704\uD574 \uB178\uD2B8\uC5D0 \uC801\uC808\uD788 \uD0DC\uADF8\uD574\uC8FC\uC138\uC694. (\uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694)", RESPONSE_RECEIVED: "\uC694\uCCAD\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4", NO_DECK_EXISTS: "${deckName}\uC774\uB77C\uB294 \uC774\uB984\uC758 \uB371\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", ALL_CAUGHT_UP: "\uBAA8\uB450 \uD655\uC778\uD588\uC2B5\uB2C8\uB2E4. :D", // scheduling.ts DAYS_STR_IVL: "${interval} \uC77C \uD6C4", MONTHS_STR_IVL: "${interval} \uAC1C\uC6D4 \uD6C4", YEARS_STR_IVL: "${interval} \uB144 \uD6C4", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}y", // settings.ts SETTINGS_HEADER: "Spaced Repetition - \uC124\uC815", GROUP_TAGS_FOLDERS: "Tags & Folders", GROUP_FLASHCARD_REVIEW: "Flashcard Review", GROUP_FLASHCARD_SEPARATORS: "Flashcard Separators", GROUP_DATA_STORAGE: "Storage of Scheduling Data", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contributing", CHECK_WIKI: '\uB354 \uB9CE\uC740 \uC815\uBCF4\uB97C \uC6D0\uD558\uC2DC\uBA74, wiki\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.', GITHUB_DISCUSSIONS: 'Visit the discussions section for Q&A help, feedback, and general discussion.', GITHUB_ISSUES: 'Raise an issue here if you have a feature request or a bug report.', GITHUB_SOURCE_CODE: 'Project source code available on GitHub', CODE_CONTRIBUTION_INFO: 'Information on code contributions', TRANSLATION_CONTRIBUTION_INFO: 'Information on translating the plugin to your language', PROJECT_CONTRIBUTIONS: 'Raise an issue here if you have a feature request or a bug report', FOLDERS_TO_IGNORE: "\uBB34\uC2DC\uD560 \uD3F4\uB354\uB4E4", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "\uD50C\uB798\uC2DC\uCE74\uB4DC", FLASHCARD_EASY_LABEL: "Easy Button Text", FLASHCARD_GOOD_LABEL: "Good Button Text", FLASHCARD_HARD_LABEL: "Hard Button Text", FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uD0DC\uADF8", FLASHCARD_TAGS_DESC: "\uD0DC\uADF8\uB97C \uACF5\uBC31 \uB610\uB294 \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. \uC608) '#flashcards #deck2 #deck3'", CONVERT_FOLDERS_TO_DECKS: "\uD3F4\uB354\uB97C \uB371\uACFC \uC11C\uBE0C\uB371\uC73C\uB85C \uC0AC\uC6A9\uD560\uAE4C\uC694?", CONVERT_FOLDERS_TO_DECKS_DESC: "\uC774 \uAE30\uB2A5\uC740 \uC704\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC \uD0DC\uADF8 \uC635\uC158\uC744 \uB300\uCCB4\uD569\uB2C8\uB2E4.", INLINE_SCHEDULING_COMMENTS: "\uD50C\uB798\uC2DC\uCE74\uB4DC\uC758 \uB9C8\uC9C0\uB9C9 \uC904\uACFC \uB3D9\uC77C\uD55C \uC904\uC5D0 \uC2A4\uCF00\uC904\uB9C1 \uCF54\uBA58\uD2B8\uB97C \uC800\uC7A5\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", INLINE_SCHEDULING_COMMENTS_DESC: "\uC774 \uC635\uC158\uC744 \uC0AC\uC6A9\uD558\uBA74 HTML \uC8FC\uC11D\uC774 \uBAA9\uB85D\uC758 \uD3EC\uB9E4\uD305\uC744 \uBB34\uB108\uD2B8\uB9AC\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", BURY_SIBLINGS_TILL_NEXT_DAY: "Sibling \uCE74\uB4DC\uB97C \uB2E4\uC74C\uB0A0\uAE4C\uC9C0 \uBB3B\uC5B4\uB450\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Sibling \uCE74\uB4DC\uB294 \uB3D9\uC77C\uD55C \uCE74\uB4DC \uD14D\uC2A4\uD2B8\uC5D0\uC11C \uC0DD\uC131\uB41C \uCE74\uB4DC\uC785\uB2C8\uB2E4. i.e. cloze deletions", SHOW_CARD_CONTEXT: "\uCE74\uB4DC\uC758 \uBB38\uB9E5(context)\uC744 \uD45C\uC2DC\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", SHOW_CARD_CONTEXT_DESC: "\uCE74\uB4DC\uC5D0\uC11C 'Title > Heading 1 > Subheading > ... > Subheading' \uC758 \uD45C\uC2DC\uB97C \uD560\uC9C0 \uC124\uC815\uD569\uB2C8\uB2E4.", CARD_MODAL_HEIGHT_PERCENT: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB192\uC774 \uBE44\uC728", CARD_MODAL_SIZE_PERCENT_DESC: "\uBAA8\uBC14\uC77C \uBC84\uC804 \uD639\uC740 \uB9E4\uC6B0 \uD070 \uC774\uBBF8\uC9C0\uAC00 \uC788\uB294 \uACBD\uC6B0 100%\uB85C \uC124\uC815\uD574\uC57C \uD569\uB2C8\uB2E4.", RESET_DEFAULT: "\uAE30\uBCF8\uAC12\uC73C\uB85C \uCD08\uAE30\uD654", CARD_MODAL_WIDTH_PERCENT: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB108\uBE44 \uBE44\uC728", RANDOMIZE_CARD_ORDER: "\uB9AC\uBDF0\uC911\uC778 \uCE74\uB4DC\uC758 \uC21C\uC11C\uB97C \uB79C\uB364\uC73C\uB85C \uB450\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", REVIEW_DECK_ORDER: "Order decks are displayed during review", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", DISABLE_CLOZE_CARDS: "\uBE48 \uCE78 \uCC44\uC6B0\uAE30 \uCE74\uB4DC\uB97C \uBE44\uD65C\uC131\uD654\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", CONVERT_HIGHLIGHTS_TO_CLOZES: "==hightlights== \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", CONVERT_BOLD_TEXT_TO_CLOZES: "**bolded text** \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{curly brackets}} \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", INLINE_CARDS_SEPARATOR: "\uC778\uB77C\uC778 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790", FIX_SEPARATORS_MANUALLY_WARNING: "\uC8FC\uC758: \uC774 \uC635\uC158\uC744 \uC218\uC815\uD55C \uD6C4\uC5D0\uB294 \uC774\uBBF8 \uC791\uC131\uB41C \uD50C\uB798\uC2DC\uCE74\uB4DC\uB97C \uC218\uB3D9\uC73C\uB85C \uC218\uC815\uD574\uC57C \uD568\uC744 \uC8FC\uC758\uD558\uC2ED\uC2DC\uC624.", INLINE_REVERSED_CARDS_SEPARATOR: "\uC778\uB77C\uC778 \uBC18\uC804 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790", MULTILINE_CARDS_SEPARATOR: "\uC5EC\uB7EC \uC904 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790", MULTILINE_REVERSED_CARDS_SEPARATOR: "\uC5EC\uB7EC \uC904 \uBC18\uC804 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790", MULTILINE_CARDS_END_MARKER: "\uD074\uB85C\uC988\uC640 \uB2E4\uC911 \uD589 \uD50C\uB798\uC2DC\uCE74\uB4DC\uC758 \uB05D\uC744 \uB098\uD0C0\uB0B4\uB294 \uBB38\uC790", NOTES: "\uB178\uD2B8", REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", TAGS_TO_REVIEW: "\uB9AC\uBDF0\uC5D0 \uC0AC\uC6A9\uD560 \uD0DC\uADF8", TAGS_TO_REVIEW_DESC: "\uD0DC\uADF8\uB97C \uACF5\uBC31 \uB610\uB294 \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. \uC608) '#review #tag2 #tag3'", OPEN_RANDOM_NOTE: "\uB9AC\uBDF0\uB97C \uC704\uD574 \uB79C\uB364 \uB178\uD2B8\uB97C \uC5FD\uB2C8\uB2E4.", OPEN_RANDOM_NOTE_DESC: "\uC774 \uC635\uC158\uC774 \uAEBC\uC838\uC788\uC73C\uBA74, \uB178\uD2B8\uB294 \uC911\uC694\uB3C4(\uD398\uC774\uC9C0 \uB7AD\uD06C)\uC5D0 \uB530\uB77C \uC815\uB82C\uB429\uB2C8\uB2E4.", AUTO_NEXT_NOTE: "\uB9AC\uBDF0 \uD6C4\uC5D0 \uB2E4\uC74C \uB178\uD2B8\uB97C \uC790\uB3D9\uC73C\uB85C \uC5FD\uB2C8\uB2E4.", ENABLE_FILE_MENU_REVIEW_OPTIONS: "\uD30C\uC77C \uBA54\uB274\uC5D0\uC11C \uAC80\uD1A0 \uC635\uC158\uC744 \uD65C\uC131\uD654\uD558\uC138\uC694 (\uC608: \uAC80\uD1A0: \uC26C\uC6C0, \uC88B\uC74C, \uC5B4\uB824\uC6C0)", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\uD30C\uC77C \uBA54\uB274\uC5D0\uC11C \uAC80\uD1A0 \uC635\uC158\uC744 \uBE44\uD65C\uC131\uD654\uD558\uBA74 \uD50C\uB7EC\uADF8\uC778 \uBA85\uB839\uC744 \uC0AC\uC6A9\uD574 \uB178\uD2B8\uB97C \uAC80\uD1A0\uD560 \uC218 \uC788\uC73C\uBA70, \uC815\uC758\uB41C \uACBD\uC6B0\uC5D0\uB294 \uAD00\uB828\uB41C \uB2E8\uCD95\uD0A4\uB3C4 \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.", MAX_N_DAYS_REVIEW_QUEUE: "\uC624\uB978\uCABD \uD328\uB110\uC5D0 \uD45C\uC2DC\uD560 \uCD5C\uB300 \uC77C\uC218", MIN_ONE_DAY: "\uC801\uC5B4\uB3C4 1\uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.", VALID_NUMBER_WARNING: "\uC720\uD6A8\uD55C \uC22B\uC790\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.", UI_PREFERENCES: "\uC0AC\uC6A9\uC790 \uC778\uD130\uD398\uC774\uC2A4 \uAE30\uBCF8 \uC124\uC815", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\uB371 \uD2B8\uB9AC\uB294 \uCC98\uC74C\uC5D0 \uD655\uC7A5\uB41C \uAC83\uC73C\uB85C \uD45C\uC2DC\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\uAC19\uC740 \uCE74\uB4DC\uC5D0 \uC911\uCCA9\uB41C \uB371\uC744 \uC811\uC73C\uB824\uBA74 \uC774 \uC635\uC158\uC744 \uB044\uC2ED\uC2DC\uC624. \uAC19\uC740 \uD30C\uC77C\uC5D0 \uC5EC\uB7EC \uB371\uC5D0 \uC18D\uD55C \uCE74\uB4DC\uAC00 \uC788\uB294 \uACBD\uC6B0 \uC720\uC6A9\uD569\uB2C8\uB2E4.", ALGORITHM: "\uC54C\uACE0\uB9AC\uC998", CHECK_ALGORITHM_WIKI: '\uB354 \uB9CE\uC740 \uC815\uBCF4\uB97C \uC6D0\uD558\uC2DC\uBA74, algorithm implementation\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694.', BASE_EASE: "\uAE30\uBCF8 ease", BASE_EASE_DESC: "\uCD5C\uC19F\uAC12 = 130, \uC801\uC815\uCE58\uB294 \uB300\uB7B5 250\uC785\uB2C8\uB2E4.", BASE_EASE_MIN_WARNING: "\uAE30\uBCF8 ease\uB294 \uC801\uC5B4\uB3C4 130 \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.", LAPSE_INTERVAL_CHANGE: "\uD50C\uB798\uC2DC\uCE74\uB4DC/\uB178\uD2B8\uB97C \uC5B4\uB824\uC6C0(Hard)\uC73C\uB85C \uB9AC\uBDF0\uD588\uC744 \uB54C\uC758 \uAC04\uACA9 \uBCC0\uACBD", LAPSE_INTERVAL_CHANGE_DESC: "\uC0C8\uB85C\uC6B4 \uAC04\uACA9 = \uC774\uC804 \uAC04\uACA9 * \uAC04\uACA9\uBCC0\uACBD \uAC12 / 100.", EASY_BONUS: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4", EASY_BONUS_DESC: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4\uB294 \uD50C\uB798\uC2DC\uCE74\uB4DC/\uB178\uD2B8\uC5D0\uC11C \uC88B\uC74C(Good)\uACFC \uC26C\uC6C0(Easy) \uC0AC\uC774\uC758 \uAC04\uACA9 \uCC28\uC774\uB97C \uC124\uC815\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. (\uCD5C\uC18C = 100%)", EASY_BONUS_MIN_WARNING: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4\uB294 \uC801\uC5B4\uB3C4 100\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.", MAX_INTERVAL: "Maximum interval in days", MAX_INTERVAL_DESC: "\uAC04\uACA9\uC758 \uC0C1\uD55C\uC120\uC744 \uB458 \uC218 \uC788\uC2B5\uB2C8\uB2E4. (\uAE30\uBCF8\uAC12 = 100\uB144)", MAX_INTERVAL_MIN_WARNING: "\uCD5C\uB300 \uAC04\uACA9\uC740 \uC801\uC5B4\uB3C4 1\uC77C\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.", MAX_LINK_CONTRIB: "\uCD5C\uB300 \uC5F0\uACB0 \uAE30\uC5EC\uB3C4", MAX_LINK_CONTRIB_DESC: "\uB9C1\uD06C\uB41C \uB178\uD2B8\uC758 \uCD08\uAE30 ease\uC5D0 \uB300\uD55C \uAC00\uC911\uCE58\uAC00 \uC801\uC6A9\uB41C ease\uC758 \uCD5C\uB300 \uAE30\uC5EC\uB3C4\uC785\uB2C8\uB2E4.", LOGGING: "\uB85C\uAE45", DISPLAY_DEBUG_INFO: "\uB514\uBC84\uAE45 \uC815\uBCF4\uB97C \uAC1C\uBC1C\uC790 \uCF58\uC194\uC5D0 \uD45C\uC2DC\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C", DISPLAY_PARSER_DEBUG_INFO: "Display debugging information for the parser on the developer console", // sidebar.ts NOTES_REVIEW_QUEUE: "\uB9AC\uBDF0\uD560 \uB178\uD2B8 \uB300\uAE30\uC5F4", CLOSE: "\uB2EB\uAE30", NEW: "New", YESTERDAY: "\uC5B4\uC81C", TODAY: "\uC624\uB298", TOMORROW: "\uB0B4\uC77C", // stats-modal.tsx STATS_TITLE: "\uD1B5\uACC4", MONTH: "\uC6D4", QUARTER: "\uBD84\uAE30", YEAR: "\uB144", LIFETIME: "\uD3C9\uC0DD", FORECAST: "\uC608\uCE21", FORECAST_DESC: "\uC774\uD6C4\uC5D0 \uD559\uC2B5\uD560 \uCE74\uB4DC\uC758 \uC218", SCHEDULED: "Scheduled", DAYS: "\uC77C", NUMBER_OF_CARDS: "\uCE74\uB4DC\uC758 \uC218", REVIEWS_PER_DAY: "\uD3C9\uADE0: ${avg} \uB9AC\uBDF0/\uC77C", INTERVALS: "\uAC04\uACA9", INTERVALS_DESC: "\uB9AC\uBDF0\uB97C \uB2E4\uC2DC \uD560 \uB54C \uAE4C\uC9C0\uC758 \uAE30\uAC04", COUNT: "Count", INTERVALS_SUMMARY: "\uD3C9\uADE0 \uAC04\uACA9: ${avg}, \uAC00\uC7A5 \uAE34 \uAC04\uACA9: ${longest}", EASES: "Eases", EASES_SUMMARY: "Average ease: ${avgEase}", CARD_TYPES: "\uCE74\uB4DC \uD0C0\uC785", CARD_TYPES_DESC: "\uC5EC\uAE30\uC5D0\uB294 \uBB3B\uC5B4\uB454 \uCE74\uB4DC\uB3C4 \uD3EC\uD568\uB429\uB2C8\uB2E4.", CARD_TYPE_NEW: "New", CARD_TYPE_YOUNG: "Young", CARD_TYPE_MATURE: "Mature", CARD_TYPES_SUMMARY: "\uC804\uCCB4 \uCE74\uB4DC \uC218: ${totalCardsCount}" }; // src/lang/locale/mr.ts var mr_default = {}; // src/lang/locale/nl.ts var nl_default = {}; // src/lang/locale/no.ts var no_default = {}; // src/lang/locale/pl.ts var pl_default = { // flashcard-modal.tsx DECKS: "Talie", DUE_CARDS: "Fiszki z terminem", NEW_CARDS: "Nowe fiszki", TOTAL_CARDS: "Wszystkie karty", BACK: "Wstecz", SKIP: "Pomi\u0144", EDIT_CARD: "Edytuj kart\u0119", RESET_CARD_PROGRESS: "Zresetuj post\u0119p karty", HARD: "Trudne", GOOD: "\u015Arednio Trudne", EASY: "\u0141atwe", SHOW_ANSWER: "Poka\u017C odpowied\u017A", CARD_PROGRESS_RESET: "Post\u0119p karty zosta\u0142 zresetowany.", SAVE: "Zapisz", CANCEL: "Anuluj", NO_INPUT: "Nie wprowadzono warto\u015Bci.", CURRENT_EASE_HELP_TEXT: "Aktualna \u0142atwo\u015B\u0107: ", CURRENT_INTERVAL_HELP_TEXT: "Aktualny interwa\u0142: ", CARD_GENERATED_FROM: "Wygenerowano z: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "Otw\xF3rz notatk\u0119 do przegl\u0105du", REVIEW_CARDS: "Przegl\u0105daj fiszki", REVIEW_DIFFICULTY_FILE_MENU: "Przegl\u0105daj: ${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "Przegl\u0105daj notatk\u0119 jako ${difficulty}", CRAM_ALL_CARDS: "Wybierz tali\u0119 do intensywnego uczenia", REVIEW_ALL_CARDS: "Przegl\u0105daj fiszki ze wszystkich notatek", REVIEW_CARDS_IN_NOTE: "Przegl\u0105daj fiszki w tej notatce", CRAM_CARDS_IN_NOTE: "Intensywne uczenie fiszek w tej notatce", VIEW_STATS: "Wy\u015Bwietl statystyki", OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar", STATUS_BAR: "Przegl\u0105daj: ${dueNotesCount} notatek, ${dueFlashcardsCount} fiszek z terminem", SYNC_TIME_TAKEN: "Synchronizacja zaj\u0119\u0142a ${t}ms", NOTE_IN_IGNORED_FOLDER: "Notatka jest zapisana w folderze zignorowanym (sprawd\u017A ustawienia).", PLEASE_TAG_NOTE: "Prosz\u0119 odpowiednio otagowa\u0107 notatk\u0119 do przegl\u0105du (w ustawieniach).", RESPONSE_RECEIVED: "Otrzymano odpowied\u017A.", NO_DECK_EXISTS: "Nie istnieje talia o nazwie ${deckName}", ALL_CAUGHT_UP: "Jeste\u015B teraz na bie\u017C\u0105co :D.", // scheduling.ts DAYS_STR_IVL: "${interval} dni", MONTHS_STR_IVL: "${interval} miesi\u0119cy", YEARS_STR_IVL: "${interval} lata", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}r", // settings.ts SETTINGS_HEADER: "Spaced Repetition - Ustawienia", GROUP_TAGS_FOLDERS: "Tags & Folders", GROUP_FLASHCARD_REVIEW: "Flashcard Review", GROUP_FLASHCARD_SEPARATORS: "Flashcard Separators", GROUP_DATA_STORAGE: "Storage of Scheduling Data", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contributing", CHECK_WIKI: 'Aby uzyska\u0107 wi\u0119cej informacji, sprawd\u017A wiki.', GITHUB_DISCUSSIONS: 'Visit the discussions section for Q&A help, feedback, and general discussion.', GITHUB_ISSUES: 'Raise an issue here if you have a feature request or a bug report.', GITHUB_SOURCE_CODE: 'Project source code available on GitHub', CODE_CONTRIBUTION_INFO: 'Information on code contributions', TRANSLATION_CONTRIBUTION_INFO: 'Information on translating the plugin to your language', PROJECT_CONTRIBUTIONS: 'Raise an issue here if you have a feature request or a bug report', FOLDERS_TO_IGNORE: "Foldery do zignorowania", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "Fiszki", FLASHCARD_EASY_LABEL: "Tekst przycisku \u0141atwe", FLASHCARD_GOOD_LABEL: "Tekst przycisku \u015Arednio trudne", FLASHCARD_HARD_LABEL: "Tekst przycisku Trudne", FLASHCARD_EASY_DESC: 'Dostosuj etykiet\u0119 dla przycisku "\u0141atwe"', FLASHCARD_GOOD_DESC: 'Dostosuj etykiet\u0119 dla przycisku "\u015Arednio trudne"', FLASHCARD_HARD_DESC: 'Dostosuj etykiet\u0119 dla przycisku "Trudne"', REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "Tagi fiszek", FLASHCARD_TAGS_DESC: "Wprowad\u017A tagi oddzielone spacj\u0105 lub nowymi liniami, np. #fiszki #talia2 #talia3.", CONVERT_FOLDERS_TO_DECKS: "Czy konwertowa\u0107 foldery na talie i podtalie?", CONVERT_FOLDERS_TO_DECKS_DESC: "Jest to alternatywa dla opcji tag\xF3w fiszek powy\u017Cej.", INLINE_SCHEDULING_COMMENTS: "Czy zachowa\u0107 komentarz harmonogramowania w tej samej linii co ostatnia linia fiszki?", INLINE_SCHEDULING_COMMENTS_DESC: "W\u0142\u0105czenie tej opcji sprawi, \u017Ce komentarze HTML nie b\u0119d\u0105 przerywa\u0107 formatowania listy.", BURY_SIBLINGS_TILL_NEXT_DAY: "Czy ukrywa\u0107 karty rodze\u0144stwa do nast\u0119pnego dnia?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Rodze\u0144stwo to karty wygenerowane z tego samego tekstu karty, np. usuni\u0119cia zamaskowane", SHOW_CARD_CONTEXT: "Czy pokazywa\u0107 kontekst na kartach?", SHOW_CARD_CONTEXT_DESC: "np. Tytu\u0142 > Nag\u0142\xF3wek 1 > Podnag\u0142\xF3wek > ... > Podnag\u0142\xF3wek", CARD_MODAL_HEIGHT_PERCENT: "Procentowa wysoko\u015B\u0107 fiszki", CARD_MODAL_SIZE_PERCENT_DESC: "Powinno by\u0107 ustawione na 100% na urz\u0105dzeniach mobilnych lub gdy masz bardzo du\u017Ce obrazy", RESET_DEFAULT: "Zresetuj do domy\u015Blnych", CARD_MODAL_WIDTH_PERCENT: "Procentowa szeroko\u015B\u0107 fiszki", RANDOMIZE_CARD_ORDER: "Czy losowa\u0107 kolejno\u015B\u0107 kart podczas przegl\u0105du?", REVIEW_CARD_ORDER_WITHIN_DECK: "Kolejno\u015B\u0107 kart w talii wy\u015Bwietlana podczas przegl\u0105dania", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Kolejno w ramach talii (Najpierw wszystkie nowe karty)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Kolejno w ramach talii (Najpierw wszystkie karty z terminem)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Losowo w ramach talii (Najpierw wszystkie nowe karty)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Losowo w ramach talii (Najpierw wszystkie karty z terminem)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Losowa karta z losowej talii", REVIEW_DECK_ORDER: "Kolejno\u015B\u0107 talii wy\u015Bwietlana podczas przegl\u0105dania", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Kolejno (gdy wszystkie karty w poprzedniej talii przegl\u0105dni\u0119te)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Losowo (gdy wszystkie karty w poprzedniej talii przegl\u0105dni\u0119te)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Losowa karta z losowej talii", DISABLE_CLOZE_CARDS: "Wy\u0142\u0105czy\u0107 karty zamaskowane?", CONVERT_HIGHLIGHTS_TO_CLOZES: "Konwertowa\u0107 ==pod\u015Bwietlenia== na karty zamaskowane?", CONVERT_BOLD_TEXT_TO_CLOZES: "Konwertowa\u0107 pogrubiony tekst na karty zamaskowane?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "Konwertowa\u0107 {{klamry}} na karty zamaskowane?", INLINE_CARDS_SEPARATOR: "Separator dla kart zamaskowanych w linii", FIX_SEPARATORS_MANUALLY_WARNING: "Pami\u0119taj, \u017Ce po zmianie tego musisz r\u0119cznie edytowa\u0107 wszystkie karty zamaskowane, kt\xF3re ju\u017C masz.", INLINE_REVERSED_CARDS_SEPARATOR: "Separator dla kart zamaskowanych odwr\xF3conych w linii", MULTILINE_CARDS_SEPARATOR: "Separator dla kart zamaskowanych wieloliniowych", MULTILINE_REVERSED_CARDS_SEPARATOR: "Separator dla kart zamaskowanych odwr\xF3conych wieloliniowych", MULTILINE_CARDS_END_MARKER: "Caracteres que denotam o fim de clozes e flashcards multilineares", NOTES: "Notatki", REVIEW_PANE_ON_STARTUP: "W\u0142\u0105czy\u0107 panel przegl\u0105du notatek przy starcie", TAGS_TO_REVIEW: "Tagi do przegl\u0105du", TAGS_TO_REVIEW_DESC: "Wprowad\u017A tagi oddzielone spacj\u0105 lub nowymi liniami, np. #przegl\u0105d #tag2 #tag3.", OPEN_RANDOM_NOTE: "Otw\xF3rz losow\u0105 notatk\u0119 do przegl\u0105du", OPEN_RANDOM_NOTE_DESC: "Po wy\u0142\u0105czeniu tej opcji notatki s\u0105 uporz\u0105dkowane wed\u0142ug istotno\u015Bci (PageRank).", AUTO_NEXT_NOTE: "Automatycznie otwiera\u0107 nast\u0119pn\u0105 notatk\u0119 po przegl\u0105dzie", ENABLE_FILE_MENU_REVIEW_OPTIONS: "Wy\u0142\u0105czy\u0107 opcje przegl\u0105du w menu pliku, tj. Przegl\u0105daj: \u0141atwe Dobrze Trudne", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Je\u015Bli wy\u0142\u0105czysz opcje przegl\u0105du w menu Plik, mo\u017Cesz przegl\u0105da\u0107 swoje notatki za pomoc\u0105 polece\u0144 wtyczki i, je\u015Bli je zdefiniowa\u0142e\u015B, przypisanych skr\xF3t\xF3w klawiszowych.", MAX_N_DAYS_REVIEW_QUEUE: "Maksymalna liczba dni do wy\u015Bwietlenia w panelu prawym", MIN_ONE_DAY: "Liczba dni musi wynosi\u0107 co najmniej 1.", VALID_NUMBER_WARNING: "Podaj prawid\u0142ow\u0105 liczb\u0119.", UI_PREFERENCES: "Preferencje interfejsu u\u017Cytkownika", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Podtalie powinny by\u0107 pocz\u0105tkowo wy\u015Bwietlane rozszerzone", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Wy\u0142\u0105cz to, aby zwin\u0105\u0107 zagnie\u017Cd\u017Cone talie w tej samej karcie. Przydatne, je\u015Bli karty nale\u017C\u0105 do wielu talii w tym samym pliku.", ALGORITHM: "Algorytm", CHECK_ALGORITHM_WIKI: 'Aby uzyska\u0107 wi\u0119cej informacji, sprawd\u017A implementacj\u0119 algorytmu.', BASE_EASE: "Podstawowa \u0142atwo\u015B\u0107", BASE_EASE_DESC: "minimum = 130, preferowana warto\u015B\u0107 to oko\u0142o 250.", BASE_EASE_MIN_WARNING: "Podstawowa \u0142atwo\u015B\u0107 musi wynosi\u0107 co najmniej 130.", LAPSE_INTERVAL_CHANGE: "Zmiana interwa\u0142u podczas przegl\u0105dania fiszki/notatki jako trudne", LAPSE_INTERVAL_CHANGE_DESC: "nowyInterwa\u0142 = staryInterwa\u0142 * zmianaInterwa\u0142u / 100.", EASY_BONUS: "Bonus za \u0142atwe", EASY_BONUS_DESC: "Bonus za \u0142atwe pozwala ustawi\u0107 r\xF3\u017Cnic\u0119 w interwa\u0142ach mi\u0119dzy odpowiedziami \u015Arednio trudne i \u0141atwe na fiszce/notatce (minimum = 100%).", EASY_BONUS_MIN_WARNING: "Bonus za \u0142atwe musi wynosi\u0107 co najmniej 100.", MAX_INTERVAL: "Maksymalny interwa\u0142 w dniach", MAX_INTERVAL_DESC: "Pozwala na ustawienie g\xF3rnego limitu interwa\u0142u (domy\u015Blnie = 100 lat).", MAX_INTERVAL_MIN_WARNING: "Maksymalny interwa\u0142 musi wynosi\u0107 co najmniej 1 dzie\u0144.", MAX_LINK_CONTRIB: "Maksymalny wk\u0142ad \u0142\u0105cza", MAX_LINK_CONTRIB_DESC: "Maksymalny wk\u0142ad wa\u017Conej \u0142atwo\u015Bci po\u0142\u0105czonych notatek do pocz\u0105tkowej \u0142atwo\u015Bci.", LOGGING: "Logowanie", DISPLAY_DEBUG_INFO: "Wy\u015Bwietl informacje debugowania w konsoli deweloperskiej", // sidebar.ts DISPLAY_PARSER_DEBUG_INFO: "Display debugging information for the parser on the developer console", //sidebar.ts NOTES_REVIEW_QUEUE: "Kolejka przegl\u0105du notatek", CLOSE: "Zamknij", NEW: "Nowe", YESTERDAY: "Wczoraj", TODAY: "Dzisiaj", TOMORROW: "Jutro", // stats-modal.tsx STATS_TITLE: "Statystyki", MONTH: "Miesi\u0105c", QUARTER: "Kwarta\u0142", YEAR: "Rok", LIFETIME: "Ca\u0142e \u017Cycie", FORECAST: "Prognoza", FORECAST_DESC: "Liczba kart z terminem w przysz\u0142o\u015Bci", SCHEDULED: "Zaplanowane", DAYS: "Dni", NUMBER_OF_CARDS: "Liczba kart", REVIEWS_PER_DAY: "\u015Arednio: ${avg} przegl\u0105d\xF3w/dzie\u0144", INTERVALS: "Interwa\u0142y", INTERVALS_DESC: "Op\xF3\u017Anienia przed ponownym pokazaniem przegl\u0105d\xF3w", COUNT: "Liczba", INTERVALS_SUMMARY: "\u015Aredni interwa\u0142: ${avg}, Najd\u0142u\u017Cszy interwa\u0142: ${longest}", EASES: "\u0141atwo\u015Bci", EASES_SUMMARY: "\u015Arednia \u0142atwo\u015B\u0107: ${avgEase}", CARD_TYPES: "Typy kart", CARD_TYPES_DESC: "Obejmuje tak\u017Ce ukryte karty, je\u015Bli takie s\u0105", CARD_TYPE_NEW: "Nowe", CARD_TYPE_YOUNG: "M\u0142ode", CARD_TYPE_MATURE: "Stare", CARD_TYPES_SUMMARY: "\u0141\u0105czna liczba kart: ${totalCardsCount}" }; // src/lang/locale/pt.ts var pt_default = {}; // src/lang/locale/pt-br.ts var pt_br_default = { // flashcard-modal.tsx DECKS: "Baralhos", DUE_CARDS: "Cartas para Colocar em Dia", NEW_CARDS: "Novas Cartas", TOTAL_CARDS: "Total de Cartas", BACK: "Voltar", SKIP: "Pular", EDIT_CARD: "Editar Cart\xE3o", RESET_CARD_PROGRESS: "Reiniciar o Progresso da Carta", HARD: "Dif\xEDcil", GOOD: "OK", EASY: "F\xE1cil", SHOW_ANSWER: "Mostrar Resposta", CARD_PROGRESS_RESET: "O Progresso da Carta foi reiniciado", SAVE: "Salvar", CANCEL: "Cancelar", NO_INPUT: "Nenhuma entrada fornecida.", CURRENT_EASE_HELP_TEXT: "Facilidade atual: ", CURRENT_INTERVAL_HELP_TEXT: "Intervalo atual: ", CARD_GENERATED_FROM: "Gerada a partir de: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "Abrir uma nota para revisar", REVIEW_CARDS: "Revisar flashcards", REVIEW_DIFFICULTY_FILE_MENU: "Revis\xE3o: ${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "Revisar nota como ${difficulty}", REVIEW_ALL_CARDS: "Revisar flashcards de todas as notas", CRAM_ALL_CARDS: "Selecione um baralho para revisar", REVIEW_CARDS_IN_NOTE: "Revisar flashcards nessa nota", CRAM_CARDS_IN_NOTE: "Revisar todas as flashcards nessa nota", VIEW_STATS: "Ver estat\xEDsticas", OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar", STATUS_BAR: "Revis\xE3o: ${dueNotesCount} nota(s), ${dueFlashcardsCount} Carta(s) para colocar em dia", SYNC_TIME_TAKEN: "Sincroniza\xE7\xE3o levou ${t}ms", NOTE_IN_IGNORED_FOLDER: "Nota \xE9 salva na pasta ignorada (cheque as configura\xE7\xF5es).", PLEASE_TAG_NOTE: "Por favor etiquete a nota apropriadamente para revisar (nas configura\xE7\xF5es).", RESPONSE_RECEIVED: "Resposta recebida.", NO_DECK_EXISTS: "Nenhum baralho existe para ${deckName}", ALL_CAUGHT_UP: "Voc\xEA colocou tudo em dia agora :D.", // scheduling.ts DAYS_STR_IVL: "${interval} dia(s)", MONTHS_STR_IVL: "${interval} m\xEAs(es)", YEARS_STR_IVL: "${interval} ano(s)", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}a", // settings.ts SETTINGS_HEADER: "Spaced Repetition - Configura\xE7\xE3o", GROUP_TAGS_FOLDERS: "Tags & Folders", GROUP_FLASHCARD_REVIEW: "Flashcard Review", GROUP_FLASHCARD_SEPARATORS: "Flashcard Separators", GROUP_DATA_STORAGE: "Storage of Scheduling Data", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contributing", CHECK_WIKI: 'Para mais informa\xE7\xF5es, cheque a wiki.', GITHUB_DISCUSSIONS: 'Visit the discussions section for Q&A help, feedback, and general discussion.', GITHUB_ISSUES: 'Raise an issue here if you have a feature request or a bug report.', GITHUB_SOURCE_CODE: 'Project source code available on GitHub', CODE_CONTRIBUTION_INFO: 'Information on code contributions', TRANSLATION_CONTRIBUTION_INFO: 'Information on translating the plugin to your language', PROJECT_CONTRIBUTIONS: 'Raise an issue here if you have a feature request or a bug report', FOLDERS_TO_IGNORE: "Pastas para ignorar", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "Flashcards", FLASHCARD_EASY_LABEL: "Texto do Bot\xE3o de F\xE1cil", FLASHCARD_GOOD_LABEL: "Texto do Bot\xE3o de OK", FLASHCARD_HARD_LABEL: "Texto do Bot\xE3o de Dif\xEDcil", FLASHCARD_EASY_DESC: 'Customize o r\xF3tulo para o bot\xE3o de "F\xE1cil"', FLASHCARD_GOOD_DESC: 'Customize o r\xF3tulo para o bot\xE3o de "OK"', FLASHCARD_HARD_DESC: 'Customize o r\xF3tulo para o bot\xE3o de "Dif\xEDcil"', REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "Etiquetas dos Flashcards", FLASHCARD_TAGS_DESC: "Insira etiquetas separadas por espa\xE7os ou quebras de linha ex: #flashcards #baralho2 #baralho3.", CONVERT_FOLDERS_TO_DECKS: "Converter pastas para baralhos e sub-baralhos?", CONVERT_FOLDERS_TO_DECKS_DESC: "Isso \xE9 uma alternativa para a op\xE7\xE3o de etiqueta dos Flashcards em cima.", INLINE_SCHEDULING_COMMENTS: "Salvar coment\xE1rios de agendamento na mesma linha que a \xFAltima linha do flashcard?", INLINE_SCHEDULING_COMMENTS_DESC: "Ligar isso vai fazer com que os coment\xE1rios em HTML n\xE3o quebrem a formata\xE7\xE3o de listas.", BURY_SIBLINGS_TILL_NEXT_DAY: "Enterrar cartas irm\xE3s at\xE9 o pr\xF3ximo dia?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Cartas irm\xE3s s\xE3o geradas pelo texto da mesma carta ex: omiss\xE3o de palavras", SHOW_CARD_CONTEXT: "Mostrar contexto nas cartas?", SHOW_CARD_CONTEXT_DESC: "ex: T\xEDtulo > Cabe\xE7alho 1 > Subcabe\xE7alho > ... > Subcabe\xE7alho", CARD_MODAL_HEIGHT_PERCENT: "Porcentagem da Altura do Flashcard", CARD_MODAL_SIZE_PERCENT_DESC: "Deveria estar configurado em 100% em dispositivos m\xF3veis ou se voc\xEA tem imagens muito grandes", RESET_DEFAULT: "Reiniciar para a pr\xE9-defini\xE7\xE3o", CARD_MODAL_WIDTH_PERCENT: "Porcentagem de Largura do Flashcard", RANDOMIZE_CARD_ORDER: "Aleatorizar a ordem das cartas durante a revis\xE3o?", REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", REVIEW_DECK_ORDER: "Order decks are displayed during review", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck", DISABLE_CLOZE_CARDS: "Desabilitar cartas que usam omiss\xE3o de palavras?", CONVERT_HIGHLIGHTS_TO_CLOZES: "Converter ==marca-texto== em omiss\xF5es?", CONVERT_BOLD_TEXT_TO_CLOZES: "Converter **texto em negrito** em omiss\xF5es?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "Converter {{chaves}} em omiss\xF5es?", INLINE_CARDS_SEPARATOR: "Separador para flashcards inline", FIX_SEPARATORS_MANUALLY_WARNING: "Note que depois de mudar isso voc\xEA vai ter que manualmente mudar quaisquer flashcards que voc\xEA tenha.", INLINE_REVERSED_CARDS_SEPARATOR: "Separador para flashcards inline reversos", MULTILINE_CARDS_SEPARATOR: "Separador para flashcards de m\xFAltiplas linhas", MULTILINE_REVERSED_CARDS_SEPARATOR: "Separador para flashcards de m\xFAltiplas linhas reversos", MULTILINE_CARDS_END_MARKER: "Caracteres que denotam o fim de clozes e flashcards multilinha", NOTES: "Notas", REVIEW_PANE_ON_STARTUP: "Habilitar painel de revis\xE3o de notas na inicializa\xE7\xE3o", TAGS_TO_REVIEW: "Etiquetas para revisar", TAGS_TO_REVIEW_DESC: "Insira etiquetas separadas por espa\xE7os ou quebra de linhas ex: #revisar #etiqueta2 #etiqueta3.", OPEN_RANDOM_NOTE: "Abrir uma nota aleat\xF3ria para revisar", OPEN_RANDOM_NOTE_DESC: "Quando voc\xEA desabilitar isso, as notas v\xE3o ser ordenadas por import\xE2ncia (PageRank).", AUTO_NEXT_NOTE: "Abrir a pr\xF3xima nota automaticamente depois de uma revis\xE3o", ENABLE_FILE_MENU_REVIEW_OPTIONS: "Ative as op\xE7\xF5es de revis\xE3o no menu Arquivo (ex.: Revis\xE3o: F\xE1cil, OK, Dif\xEDcil)", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Se voc\xEA desativar as op\xE7\xF5es de revis\xE3o no menu Arquivo, poder\xE1 revisar suas anota\xE7\xF5es usando os comandos do plugin e, se os tiver definido, as teclas de atalho associadas.", MAX_N_DAYS_REVIEW_QUEUE: "N\xFAmero m\xE1ximo de dias para exibir no painel direito", MIN_ONE_DAY: "O n\xFAmero de dias deve ser pelo menos 1.", VALID_NUMBER_WARNING: "Por favor Insira um n\xFAmero v\xE1lido.", UI_PREFERENCES: "Prefer\xEAncias de UI", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\xC1rvores de baralhos devem inicialmente ser exibidas como expandidas", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Desabilite isso para colapsar baralhos que est\xE3o um dentro do outro na mesma carta. \xDAtil se voc\xEA tem cartas que pertencem a muitos baralhos em um mesmo arquivo.", ALGORITHM: "Algor\xEDtmo", CHECK_ALGORITHM_WIKI: 'Para mais informa\xE7\xF5es, cheque a implementa\xE7\xE3o do algor\xEDtmo.', BASE_EASE: "Facilidade base", BASE_EASE_DESC: "m\xEDnimo = 130, preferivelmente por volta de 250.", BASE_EASE_MIN_WARNING: "A facilidade base deve ser pelo menos 130.", LAPSE_INTERVAL_CHANGE: "Mudan\xE7a de intervalo quando voc\xEA revisa um(a) flashcard/nota como dif\xEDcil", LAPSE_INTERVAL_CHANGE_DESC: "novoIntervalo = velhoIntervalo * mudancaIntervalo / 100.", EASY_BONUS: "B\xF4nus de F\xE1cil", EASY_BONUS_DESC: "O b\xF4nus de f\xE1cil te permite mudar a difer\xEAncia entre intervalos de responder OK e F\xE1cil em um(a) flashcard/nota (m\xEDnimo = 100%).", EASY_BONUS_MIN_WARNING: "O b\xF4nus de f\xE1cil deve ser pelo menos 100.", MAX_INTERVAL: "Intervalo m\xE1ximo em dias", MAX_INTERVAL_DESC: "Te permite colocar um limite m\xE1ximo no intervalo (pr\xE9-defini\xE7\xE3o = 100 anos).", MAX_INTERVAL_MIN_WARNING: "O intervalo m\xE1ximo deve ser pelo menos 1 dia.", MAX_LINK_CONTRIB: "Contribui\xE7\xE3o M\xE1xima de Links", MAX_LINK_CONTRIB_DESC: "Contribui\xE7\xE3o m\xE1xima da facilidade ponderada das notas linkadas \xE0 facilidade inicial.", LOGGING: "Logging", DISPLAY_DEBUG_INFO: "Mostrar informa\xE7\xE3o de debugging no console de desenvolvimento", DISPLAY_PARSER_DEBUG_INFO: "Display debugging information for the parser on the developer console", // sidebar.ts NOTES_REVIEW_QUEUE: "Fila de Notas para Revisar", CLOSE: "Fechar", NEW: "Novo", YESTERDAY: "Ontem", TODAY: "Hoje", TOMORROW: "Amanh\xE3", // stats-modal.tsx STATS_TITLE: "Estat\xEDsticas", MONTH: "M\xEAs", QUARTER: "Trimestre", YEAR: "Ano", LIFETIME: "Tempo Total", FORECAST: "Previs\xE3o", FORECAST_DESC: "O n\xFAmero de cartas a serem colocadas em dia no futuro", SCHEDULED: "Agendado", DAYS: "Dias", NUMBER_OF_CARDS: "N\xFAmero de cartas", REVIEWS_PER_DAY: "M\xE9dia: ${avg} revis\xF5es/dia", INTERVALS: "Intervalos", INTERVALS_DESC: "Atrasos at\xE9 que as revis\xF5es sejam exibidas de novo", COUNT: "Contagem", INTERVALS_SUMMARY: "Intervalo em m\xE9dia: ${avg}, Maior intervalo: ${longest}", EASES: "Facilidades", EASES_SUMMARY: "Facilidade em m\xE9dia: ${avgEase}", CARD_TYPES: "Tipos de Cartas", CARD_TYPES_DESC: "Isso tamb\xE9m inclui cartas enterradas, caso existam", CARD_TYPE_NEW: "Novo", CARD_TYPE_YOUNG: "Jovem", CARD_TYPE_MATURE: "Amadurecido", CARD_TYPES_SUMMARY: "Total de cartas: ${totalCardsCount}" }; // src/lang/locale/ro.ts var ro_default = {}; // src/lang/locale/ru.ts var ru_default = { // flashcard-modal.tsx DECKS: "\u041A\u043E\u043B\u043E\u0434\u044B", DUE_CARDS: "\u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0435\u043C\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", NEW_CARDS: "\u041D\u043E\u0432\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", TOTAL_CARDS: "\u0412\u0441\u0435\u0433\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", BACK: "\u041D\u0430\u0437\u0430\u0434", SKIP: "\u041F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442\u044C", EDIT_CARD: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443", RESET_CARD_PROGRESS: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", HARD: "\u0421\u043B\u043E\u0436\u043D\u043E", GOOD: "\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E", EASY: "\u041B\u0435\u0433\u043A\u043E", SHOW_ANSWER: "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043E\u0442\u0432\u0435\u0442", CARD_PROGRESS_RESET: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", SAVE: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", CANCEL: "\u041E\u0442\u043C\u0435\u043D\u0430", NO_INPUT: "\u041F\u0443\u0441\u0442\u043E\u0439 \u0432\u0432\u043E\u0434.", CURRENT_EASE_HELP_TEXT: "\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441: ", CURRENT_INTERVAL_HELP_TEXT: "\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B: ", CARD_GENERATED_FROM: "\u0421\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E \u0438\u0437: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u0434\u043B\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F", REVIEW_CARDS: "\u0418\u0437\u0443\u0447\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", REVIEW_DIFFICULTY_FILE_MENU: "\u0418\u0437\u0443\u0447\u0435\u043D\u0438\u0435: ${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "\u0418\u0437\u0443\u0447\u0430\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A ${difficulty}", CRAM_ALL_CARDS: "\u0417\u0443\u0431\u0440\u0438\u0442\u044C \u0432\u0441\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u043A\u043E\u043B\u043E\u0434\u0435", REVIEW_ALL_CARDS: "\u0418\u0437\u0443\u0447\u0430\u0442\u044C \u0432\u0441\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432\u043E \u0432\u0441\u0435\u0445 \u0437\u0430\u043C\u0435\u0442\u043A\u0430\u0445", REVIEW_CARDS_IN_NOTE: "\u0418\u0437\u0443\u0447\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u0437\u0430\u043C\u0435\u0442\u043A\u0435", CRAM_CARDS_IN_NOTE: "\u0417\u0443\u0431\u0440\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u0437\u0430\u043C\u0435\u0442\u043A\u0435", VIEW_STATS: "\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443", OPEN_REVIEW_QUEUE_VIEW: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043E\u0447\u0435\u0440\u0435\u0434\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u043D\u0430 \u0431\u043E\u043A\u043E\u0432\u043E\u0439 \u043F\u0430\u043D\u0435\u043B\u0438", STATUS_BAR: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C: ${dueNotesCount} \u0437\u0430\u043C\u0435\u0442\u043E\u043A, ${dueFlashcardsCount} \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", SYNC_TIME_TAKEN: "\u0421\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u044F \u0437\u0430\u043D\u044F\u043B\u0430 ${t}\u043C\u0441", NOTE_IN_IGNORED_FOLDER: "\u0417\u0430\u043C\u0435\u0442\u043A\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430 \u0432 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u0443\u044E \u043F\u0430\u043F\u043A\u0443 (\u0441\u043C. \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438).", PLEASE_TAG_NOTE: "\u0414\u043B\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F, \u043F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E \u043F\u043E\u043C\u0435\u0442\u044C\u0442\u0435 \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u0442\u0435\u0433\u043E\u043C (\u0441\u043C. \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438).", RESPONSE_RECEIVED: "\u041E\u0442\u0432\u0435\u0442 \u043F\u043E\u043B\u0443\u0447\u0435\u043D.", NO_DECK_EXISTS: "\u041D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0440\u043E\u0432\u043D\u044F ${deckName}", ALL_CAUGHT_UP: "\u041C\u043E\u043B\u043E\u0434\u0435\u0446! \u0422\u044B \u0441\u043F\u0440\u0430\u0432\u0438\u043B\u0441\u044F \u0438 \u0434\u043E\u0448\u0435\u043B \u0434\u043E \u043A\u043E\u043D\u0446\u0430! :D", // scheduling.ts DAYS_STR_IVL: "${interval} \u0434\u043D\u0435\u0439", MONTHS_STR_IVL: "${interval} \u043C\u0435\u0441\u044F\u0446\u0435\u0432", YEARS_STR_IVL: "${interval} \u0433\u043E\u0434\u043E\u0432", DAYS_STR_IVL_MOBILE: "${interval}\u0434.", MONTHS_STR_IVL_MOBILE: "${interval}\u043C.", YEARS_STR_IVL_MOBILE: "${interval}\u0433.", // settings.ts SETTINGS_HEADER: "\u041F\u043B\u0430\u0433\u0438\u043D Spaced Repetition - \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", GROUP_TAGS_FOLDERS: "Tags & Folders", GROUP_FLASHCARD_REVIEW: "Flashcard Review", GROUP_FLASHCARD_SEPARATORS: "Flashcard Separators", GROUP_DATA_STORAGE: "Storage of Scheduling Data", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contributing", CHECK_WIKI: '\u0414\u043B\u044F \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438 \u043F\u043E\u0441\u0435\u0442\u0438\u0442\u0435: wiki.', GITHUB_DISCUSSIONS: 'Visit the discussions section for Q&A help, feedback, and general discussion.', GITHUB_ISSUES: 'Raise an issue here if you have a feature request or a bug report.', GITHUB_SOURCE_CODE: 'Project source code available on GitHub', CODE_CONTRIBUTION_INFO: 'Information on code contributions', TRANSLATION_CONTRIBUTION_INFO: 'Information on translating the plugin to your language', PROJECT_CONTRIBUTIONS: 'Raise an issue here if you have a feature request or a bug report', FOLDERS_TO_IGNORE: "\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u044B\u0435 \u043F\u0430\u043F\u043A\u0438", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "\u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", FLASHCARD_EASY_LABEL: '\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 "\u041B\u0435\u0433\u043A\u043E"', FLASHCARD_GOOD_LABEL: '\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 "\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E"', FLASHCARD_HARD_LABEL: '\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 "\u0421\u043B\u043E\u0436\u043D\u043E"', FLASHCARD_EASY_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u041B\u0435\u0433\u043A\u043E"', FLASHCARD_GOOD_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E"', FLASHCARD_HARD_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u0421\u043B\u043E\u0436\u043D\u043E"', REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "\u0422\u0435\u0433\u0438 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", FLASHCARD_TAGS_DESC: "\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0442\u0435\u0433\u0438 \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 Enter-\u043E\u043C \u0438\u043B\u0438 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u043C, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: #flashcards #deck2 #deck3.", CONVERT_FOLDERS_TO_DECKS: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0430\u043F\u043A\u0438 \u0432 \u0443\u0440\u043E\u0432\u043D\u0438 \u0438 \u043F\u043E\u0434\u0443\u0440\u043E\u0432\u043D\u0438?", CONVERT_FOLDERS_TO_DECKS_DESC: "\u042D\u0442\u043E \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u0430 \u043E\u043F\u0438\u0441\u0430\u043D\u043D\u043E\u043C\u0443 \u0432\u044B\u0448\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0443 \u0442\u0435\u0433\u043E\u0432 \u0444\u043B\u044D\u0448-\u043A\u0430\u0440\u0442", INLINE_SCHEDULING_COMMENTS: "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438?", INLINE_SCHEDULING_COMMENTS_DESC: "\u0412\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u044D\u0442\u043E\u0439 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0441\u0434\u0435\u043B\u0430\u0435\u0442 \u0442\u0430\u043A, \u0447\u0442\u043E HTML \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u043D\u0435 \u0431\u0443\u0434\u0443\u0442 \u043B\u043E\u043C\u0430\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0441\u043F\u0438\u0441\u043A\u0430.", BURY_SIBLINGS_TILL_NEXT_DAY: "\u041F\u0440\u044F\u0442\u0430\u0442\u044C \u0440\u043E\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0434\u043E \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u0434\u043D\u044F?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u0420\u043E\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 - \u0442\u0435, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u044B \u0438\u0437 \u043E\u0434\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430, \u043F\u0440\u0438\u043C\u0435\u0440: \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0441 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u043C\u0438 ([...])", SHOW_CARD_CONTEXT: "\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 (\u0443\u0440\u043E\u0432\u0435\u043D\u044C) \u0432 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430\u0445 (\u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F)?", SHOW_CARD_CONTEXT_DESC: "\u043F\u0440\u0438\u043C\u0435\u0440: Title > Heading 1 > Subheading > ... > Subheading", CARD_MODAL_HEIGHT_PERCENT: "\u0412\u044B\u0441\u043E\u0442\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u0430\u0445", CARD_MODAL_SIZE_PERCENT_DESC: "\u0415\u0441\u043B\u0438 \u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0435\u0441\u044C \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u043C \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u043E\u043C, \u0432\u044B\u0441\u0442\u0430\u0432\u044C\u0442\u0435 100%. \u0418\u043D\u0430\u0447\u0435 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u043E\u0433\u0440\u043E\u043C\u043D\u044B\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F", RESET_DEFAULT: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043F\u043E-\u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E", CARD_MODAL_WIDTH_PERCENT: "\u0428\u0438\u0440\u0438\u043D\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u0430\u0445", RANDOMIZE_CARD_ORDER: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u043A\u0430\u0440\u0442 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F?", REVIEW_CARD_ORDER_WITHIN_DECK: "\u041F\u043E\u0440\u044F\u0434\u043E\u043A \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442 \u043A\u043E\u043B\u043E\u0434\u044B \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "\u041F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E \u0432\u043D\u0443\u0442\u0440\u0438 \u043A\u043E\u043B\u043E\u0434\u044B (\u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u0432\u0441\u0435 \u043D\u043E\u0432\u044B\u0435 \u043A\u0430\u0440\u0442\u044B)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "\u041F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E \u0432\u043D\u0443\u0442\u0440\u0438 \u043A\u043E\u043B\u043E\u0434\u044B (\u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u0432\u0441\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0435\u043C\u044B\u0435 \u043A\u0430\u0440\u0442\u044B)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u043E \u0432\u043D\u0443\u0442\u0440\u0438 \u043A\u043E\u043B\u043E\u0434\u044B (\u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u0432\u0441\u0435 \u043D\u043E\u0432\u044B\u0435 \u043A\u0430\u0440\u0442\u044B)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u043E \u0432\u043D\u0443\u0442\u0440\u0438 \u043A\u043E\u043B\u043E\u0434\u044B (\u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u0432\u0441\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0435\u043C\u044B\u0435 \u043A\u0430\u0440\u0442\u044B)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u0430\u044F \u043A\u0430\u0440\u0442\u0430 \u0438\u0437 \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u043E\u0439 \u043A\u043E\u043B\u043E\u0434\u044B", REVIEW_DECK_ORDER: "\u041F\u043E\u0440\u044F\u0434\u043E\u043A \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u043A\u043E\u043B\u043E\u0434 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "\u041F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E (\u043F\u043E\u0441\u043B\u0435 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F \u0432\u0441\u0435\u0445 \u043A\u0430\u0440\u0442 \u0438\u0437 \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0439 \u043A\u043E\u043B\u043E\u0434\u044B)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u043E (\u043F\u043E\u0441\u043B\u0435 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F \u0432\u0441\u0435\u0445 \u043A\u0430\u0440\u0442 \u0438\u0437 \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0439 \u043A\u043E\u043B\u043E\u0434\u044B)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u0430\u044F \u043A\u0430\u0440\u0442\u0430 \u0438\u0437 \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u043E\u0439 \u043A\u043E\u043B\u043E\u0434\u044B", DISABLE_CLOZE_CARDS: "\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u044B \u0441 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u043C\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?", CONVERT_HIGHLIGHTS_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C ==\u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442== \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?", CONVERT_BOLD_TEXT_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C **\u0436\u0438\u0440\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442** \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C {{\u0444\u0438\u0433\u0443\u0440\u043D\u044B\u0435 \u0441\u043A\u043E\u0431\u043A\u0438}} \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?", INLINE_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u0432\u043D\u0443\u0442\u0440\u0438\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", FIX_SEPARATORS_MANUALLY_WARNING: "\u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435! \u041F\u043E\u0441\u043B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u044D\u0442\u043E\u0433\u043E \u0432\u0430\u043C \u043F\u0440\u0438\u0434\u0451\u0442\u0441\u044F \u0432\u0440\u0443\u0447\u043D\u0443\u044E \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", INLINE_REVERSED_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0442\u043D\u044B\u0445 \u0432\u043D\u0443\u0442\u0440\u0438\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", MULTILINE_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", MULTILINE_REVERSED_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0442\u043D\u044B\u0445 \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", MULTILINE_CARDS_END_MARKER: "\u0421\u0438\u043C\u0432\u043E\u043B\u044B, \u043E\u0431\u043E\u0437\u043D\u0430\u0447\u0430\u044E\u0449\u0438\u0435 \u043A\u043E\u043D\u0435\u0446 \u043A\u043B\u043E\u0437\u043E\u0432 \u0438 \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", NOTES: "\u0417\u0430\u043C\u0435\u0442\u043A\u0438", REVIEW_PANE_ON_STARTUP: "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043F\u0430\u043D\u0435\u043B\u044C \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B", TAGS_TO_REVIEW: "\u0422\u0435\u0433\u0438 \u0434\u043B\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F", TAGS_TO_REVIEW_DESC: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u0433\u0438, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 Enter-\u0430\u043C\u0438 \u0438\u043B\u0438 \u043F\u0440\u043E\u0431\u0435\u043B\u0430\u043C\u0438, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: #review #tag2 #tag3.", OPEN_RANDOM_NOTE: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u0443\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u0434\u043B\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F", OPEN_RANDOM_NOTE_DESC: "\u0415\u0441\u043B\u0438 \u0432\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C, \u0442\u043E \u0437\u0430\u043C\u0435\u0442\u043A\u0438 \u0431\u0443\u0434\u0443\u0442 \u043E\u0442\u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u044B \u043F\u043E \u0432\u0430\u0436\u043D\u043E\u0441\u0442\u0438 (PageRank).", AUTO_NEXT_NOTE: "\u041F\u043E\u0441\u043B\u0435 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0443\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443", ENABLE_FILE_MENU_REVIEW_OPTIONS: "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u043E\u0431\u0437\u043E\u0440\u0430 \u0432 \u043C\u0435\u043D\u044E \u0424\u0430\u0439\u043B (\u0442.\u0435.: \u0418\u0437\u0443\u0447\u0435\u043D\u0438\u0435: \u041B\u0435\u0433\u043A\u043E, \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E, \u0421\u043B\u043E\u0436\u043D\u043E)", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u0415\u0441\u043B\u0438 \u0432\u044B \u043E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u043E\u0431\u0437\u043E\u0440\u0430 \u0432 \u043C\u0435\u043D\u044E \u0424\u0430\u0439\u043B, \u0432\u044B \u0441\u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u0440\u043E\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044C \u0441\u0432\u043E\u0438 \u0437\u0430\u043C\u0435\u0442\u043A\u0438 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043A\u043E\u043C\u0430\u043D\u0434 \u043F\u043B\u0430\u0433\u0438\u043D\u0430 \u0438, \u0435\u0441\u043B\u0438 \u0432\u044B \u0438\u0445 \u0437\u0430\u0434\u0430\u043B\u0438, \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0445 \u0433\u043E\u0440\u044F\u0447\u0438\u0445 \u043A\u043B\u0430\u0432\u0438\u0448.", MAX_N_DAYS_REVIEW_QUEUE: "\u041D\u0430\u0438\u0431\u043E\u043B\u044C\u0448\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043D\u0435\u0439 \u0434\u043B\u044F \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043D\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u0441\u043F\u0440\u0430\u0432\u0430", MIN_ONE_DAY: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043D\u0435\u0439 \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 1.", VALID_NUMBER_WARNING: "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043F\u043E\u0434\u0445\u043E\u0434\u044F\u0449\u0435\u0435 \u0447\u0438\u0441\u043B\u043E.", UI_PREFERENCES: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 - \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u0414\u0435\u0440\u0435\u0432\u044C\u044F \u043A\u043E\u043B\u043E\u0434 \u0434\u043E\u043B\u0436\u043D\u044B \u0438\u0437\u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u043A\u0430\u043A \u0440\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044B\u0435", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u044D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440, \u0447\u0442\u043E\u0431\u044B \u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043A\u043E\u043B\u043E\u0434\u044B \u043D\u0430 \u043E\u0434\u043D\u043E\u0439 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0435. \u041F\u043E\u043B\u0435\u0437\u043D\u043E, \u0435\u0441\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044C \u043A\u0430\u0440\u0442\u044B, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043F\u0440\u0438\u043D\u0430\u0434\u043B\u0435\u0436\u0430\u0442 \u043C\u043D\u043E\u0433\u0438\u043C \u043A\u043E\u043B\u043E\u0434\u0430\u043C \u0432 \u043E\u0434\u043D\u043E\u043C \u0444\u0430\u0439\u043B\u0435.", ALGORITHM: "\u0410\u043B\u0433\u043E\u0440\u0438\u0442\u043C", CHECK_ALGORITHM_WIKI: '\u0417\u0430 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439 \u043E\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435\u0441\u044C \u043A \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0430.', BASE_EASE: "\u0411\u0430\u0437\u043E\u0432\u0430\u044F \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C", BASE_EASE_DESC: "\u043C\u0438\u043D\u0438\u043C\u0443\u043C = 130, \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u043E\u043A\u043E\u043B\u043E 250.", BASE_EASE_MIN_WARNING: "\u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C \u0434\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C \u043C\u0438\u043D\u0438\u043C\u0443\u043C 130.", LAPSE_INTERVAL_CHANGE: '\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0430 \u043F\u0440\u0438 \u0432\u044B\u0431\u043E\u0440\u0435 "\u0421\u043B\u043E\u0436\u043D\u043E" \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438/\u0437\u0430\u043C\u0435\u0442\u043A\u0438', LAPSE_INTERVAL_CHANGE_DESC: "\u043D\u043E\u0432\u044B\u0439\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A = \u0441\u0442\u0430\u0440\u044B\u0439\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A * \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0430 / 100.", EASY_BONUS: "\u041B\u0435\u0433\u043A\u043E: \u0431\u043E\u043D\u0443\u0441", EASY_BONUS_DESC: "\u0411\u043E\u043D\u0443\u0441 \u0437\u0430 \u041B\u0435\u0433\u043A\u043E \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0432\u0430\u043C \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0440\u0430\u0437\u043D\u0438\u0446\u0443 \u0432 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0430\u0445 \u043C\u0435\u0436\u0434\u0443 \u043E\u0442\u0432\u0435\u0442\u0430\u043C\u0438 \u0425\u043E\u0440\u043E\u0448\u043E \u0438 \u041B\u0435\u0433\u043A\u043E \u043D\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0435/\u0437\u0430\u043C\u0435\u0442\u043A\u0435 (\u043C\u0438\u043D. = 100%).", EASY_BONUS_MIN_WARNING: '\u0411\u043E\u043D\u0443\u0441 \u0437\u0430 "\u041B\u0435\u0433\u043A\u043E" \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 100.', MAX_INTERVAL: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u0432 \u0434\u043D\u044F\u0445", MAX_INTERVAL_DESC: "\u041F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0432\u0430\u043C \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0442\u044C \u0432\u0435\u0440\u0445\u043D\u044E\u044E \u0433\u0440\u0430\u043D\u0438\u0446\u0443 \u043D\u0430 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F (\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E = 100 \u043B\u0435\u0442).", MAX_INTERVAL_MIN_WARNING: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 1.", MAX_LINK_CONTRIB: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0432\u043A\u043B\u0430\u0434 \u0441\u0432\u044F\u0437\u0438 (\u0441\u0441\u044B\u043B\u043A\u0438)", MAX_LINK_CONTRIB_DESC: '\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0432\u043A\u043B\u0430\u0434 \u0441\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F "\u041B\u0451\u0433\u043A\u043E\u0441\u0442\u0438" \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0445 \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u0432 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u0443\u044E "\u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C".', LOGGING: "\u0416\u0443\u0440\u043D\u0430\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435", DISPLAY_DEBUG_INFO: "\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043E\u0442\u043B\u0430\u0434\u043E\u0447\u043D\u0443\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E \u0432 \u043A\u043E\u043D\u0441\u043E\u043B\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430", DISPLAY_PARSER_DEBUG_INFO: "Display debugging information for the parser on the developer console", // sidebar.ts NOTES_REVIEW_QUEUE: "\u041E\u0447\u0435\u0440\u0435\u0434\u044C \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435", CLOSE: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", NEW: "\u041D\u043E\u0432\u044B\u0435", YESTERDAY: "\u0412\u0447\u0435\u0440\u0430\u0448\u043D\u0438\u0435", TODAY: "\u0421\u0435\u0433\u043E\u0434\u043D\u044F\u0448\u043D\u0438\u0435", TOMORROW: "\u0417\u0430\u0432\u0442\u0440\u0430\u0448\u043D\u0438\u0435", // stats-modal.tsx STATS_TITLE: "\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430", MONTH: "\u041C\u0435\u0441\u044F\u0446", QUARTER: "\u041A\u0432\u0430\u0440\u0442\u0430\u043B", YEAR: "\u0413\u043E\u0434", LIFETIME: "\u0412\u0441\u0451 \u0432\u0440\u0435\u043C\u044F", FORECAST: "\u041F\u0440\u043E\u0433\u043D\u043E\u0437", FORECAST_DESC: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u043F\u0440\u0435\u0434\u0441\u0442\u043E\u044F\u0449\u0438\u0445 \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F", SCHEDULED: "\u0417\u0430\u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043E", DAYS: "\u0414\u043D\u0438", NUMBER_OF_CARDS: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", REVIEWS_PER_DAY: "\u0421\u0440\u0435\u0434\u043D\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E: ${avg} \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0439 \u0432 \u0434\u0435\u043D\u044C", INTERVALS: "\u0418\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u044B", INTERVALS_DESC: "\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0438 \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0434\u043E \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u043F\u043E\u043A\u0430\u0437\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F", COUNT: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E", INTERVALS_SUMMARY: "\u0421\u0440\u0435\u0434\u043D\u0438\u0439 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A: ${avg}, \u0421\u0430\u043C\u044B\u0439 \u0434\u043B\u0438\u043D\u043D\u044B\u0439 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A: ${longest}", EASES: "\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F", EASES_SUMMARY: "\u0421\u0440\u0435\u0434\u043D\u0435\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441\u0430: ${avgEase}", CARD_TYPES: "\u0422\u0438\u043F\u044B \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", CARD_TYPES_DESC: "\u0412\u043A\u043B\u044E\u0447\u0430\u044F \u0441\u043F\u0440\u044F\u0442\u0430\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438, \u0435\u0441\u043B\u0438 \u0442\u0430\u043A\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0442.", CARD_TYPE_NEW: "\u041D\u043E\u0432\u044B\u0445", CARD_TYPE_YOUNG: "\u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0435\u043C\u044B\u0445", CARD_TYPE_MATURE: "\u0418\u0437\u0443\u0447\u0435\u043D\u043D\u044B\u0445", CARD_TYPES_SUMMARY: "\u0412\u0441\u0435\u0433\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A: ${totalCardsCount}" }; // src/lang/locale/sw.ts var sw_default = {}; // src/lang/locale/ta.ts var ta_default = {}; // src/lang/locale/te.ts var te_default = {}; // src/lang/locale/th.ts var th_default = {}; // src/lang/locale/tr.ts var tr_default = { // flashcard-modal.tsx DECKS: "Desteler", DUE_CARDS: "G\xFCncel Kartlar", NEW_CARDS: "Yeni Kartlar", TOTAL_CARDS: "Toplam Kartlar", BACK: "Geri", SKIP: "Atla", EDIT_CARD: "Kart\u0131 D\xFCzenle", RESET_CARD_PROGRESS: "Kart\u0131n ilerlemesini s\u0131f\u0131rla", HARD: "Zor", GOOD: "Orta", EASY: "Kolay", SHOW_ANSWER: "Cevab\u0131 G\xF6ster", CARD_PROGRESS_RESET: "Kart\u0131n ilerlemesi s\u0131f\u0131rland\u0131.", SAVE: "Kaydet", CANCEL: "\u0130ptal", NO_INPUT: "Girdi sa\u011Flanmad\u0131.", CURRENT_EASE_HELP_TEXT: "Mevcut Kolayl\u0131k: ", CURRENT_INTERVAL_HELP_TEXT: "Mevcut Aral\u0131k: ", CARD_GENERATED_FROM: "${notePath} kayna\u011F\u0131ndan olu\u015Fturuldu.", // main.ts OPEN_NOTE_FOR_REVIEW: "G\xF6zden ge\xE7irmek i\xE7in bir not a\xE7", REVIEW_CARDS: "Flash kartlar\u0131 g\xF6zden ge\xE7ir", REVIEW_DIFFICULTY_FILE_MENU: "G\xF6zden Ge\xE7ir: ${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "Notu ${difficulty} derecesiyle g\xF6zden ge\xE7ir", CRAM_ALL_CARDS: "T\xFCm destelerden yo\u011Fun tekrar yap", REVIEW_ALL_CARDS: "T\xFCm notlardaki flash kartlar\u0131 g\xF6zden ge\xE7ir", REVIEW_CARDS_IN_NOTE: "Bu nottaki flash kartlar\u0131 g\xF6zden ge\xE7ir", CRAM_CARDS_IN_NOTE: "Bu nottaki flash kartlar\u0131 yo\u011Fun tekrar yap", VIEW_STATS: "\u0130statistikleri g\xF6r\xFCnt\xFCle", OPEN_REVIEW_QUEUE_VIEW: "Kenar \xE7ubu\u011Funda Not G\xF6zden Ge\xE7irme S\u0131ras\u0131n\u0131 a\xE7", STATUS_BAR: "G\xF6zden Ge\xE7ir: ${dueNotesCount} not, ${dueFlashcardsCount} kart g\xFCncel", SYNC_TIME_TAKEN: "Senkronizasyon ${t}ms s\xFCrd\xFC", NOTE_IN_IGNORED_FOLDER: "Not, d\u0131\u015Flanan klas\xF6rde kay\u0131tl\u0131 (ayarlar\u0131 kontrol edin).", PLEASE_TAG_NOTE: "L\xFCtfen g\xF6zden ge\xE7irmek i\xE7in notu uygun \u015Fekilde etiketleyin (ayarlar i\xE7inde).", RESPONSE_RECEIVED: "Yan\u0131t al\u0131nd\u0131.", NO_DECK_EXISTS: "${deckName} ad\u0131nda bir deste yok", ALL_CAUGHT_UP: "\u{1F3C6} \u015Eampiyon gibi bitirdin! \u{1F604}", // scheduling.ts DAYS_STR_IVL: "${interval} g\xFCn", MONTHS_STR_IVL: "${interval} ay", YEARS_STR_IVL: "${interval} y\u0131l", DAYS_STR_IVL_MOBILE: "${interval}g", MONTHS_STR_IVL_MOBILE: "${interval}a", YEARS_STR_IVL_MOBILE: "${interval}y", // settings.ts SETTINGS_HEADER: "Aral\u0131kl\u0131 Tekrar - Ayarlar", GROUP_TAGS_FOLDERS: "Etiketler ve Klas\xF6rler", GROUP_FLASHCARD_REVIEW: "Flash Kartlar\u0131 G\xF6zden Ge\xE7irme", GROUP_FLASHCARD_SEPARATORS: "Flash Kart Ay\u0131r\u0131c\u0131lar\u0131", GROUP_DATA_STORAGE: "Planlama Verilerinin Saklanmas\u0131", GROUP_FLASHCARDS_NOTES: "Flash Kartlar ve Notlar", GROUP_CONTRIBUTING: "Katk\u0131da Bulunma", CHECK_WIKI: 'Daha fazla bilgi i\xE7in wiki sayfas\u0131na g\xF6z at\u0131n.', GITHUB_DISCUSSIONS: 'Soru-cevap, geri bildirim ve genel tart\u0131\u015Fmalar i\xE7in tart\u0131\u015Fmalar b\xF6l\xFCm\xFCne g\xF6z at\u0131n.', GITHUB_ISSUES: 'Bir \xF6zellik iste\u011Finiz ya da hata bildiriminiz varsa buradan bildirin.', GITHUB_SOURCE_CODE: 'Proje kaynak koduna GitHub \xFCzerinden ula\u015Fabilirsiniz.', CODE_CONTRIBUTION_INFO: 'Kod katk\u0131lar\u0131 hakk\u0131nda bilgi al\u0131n.', TRANSLATION_CONTRIBUTION_INFO: 'Eklentiyi kendi dilinize \xE7evirmek hakk\u0131nda bilgi i\xE7in \xE7eviri katk\u0131lar\u0131 sayfas\u0131n\u0131 ziyaret edin.', PROJECT_CONTRIBUTIONS: 'Bir \xF6zellik iste\u011Finiz ya da hata bildiriminiz varsa buradan bildirin.', FOLDERS_TO_IGNORE: "Yoksay\u0131lan Klas\xF6rler", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "Flash Kartlar", FLASHCARD_EASY_LABEL: "Kolay Butonu Metni", FLASHCARD_GOOD_LABEL: "Orta Butonu Metni", FLASHCARD_HARD_LABEL: "Zor Butonu Metni", FLASHCARD_EASY_DESC: '"Kolay" butonunun metnini \xF6zelle\u015Ftirin', FLASHCARD_GOOD_DESC: '"Orta" butonunun metnini \xF6zelle\u015Ftirin', FLASHCARD_HARD_DESC: '"Zor" butonunun metnini \xF6zelle\u015Ftirin', REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "Flash Kart Etiketleri", FLASHCARD_TAGS_DESC: "Etiketleri bo\u015Fluklar veya yeni sat\u0131rlarla ay\u0131rarak girin, \xF6rne\u011Fin: #flashcards #deck2 #deck3.", CONVERT_FOLDERS_TO_DECKS: "Klas\xF6rleri destelere ve alt destelere d\xF6n\xFC\u015Ft\xFCr?", CONVERT_FOLDERS_TO_DECKS_DESC: "Bu, yukar\u0131daki Flash Kart etiketleri se\xE7ene\u011Fine bir alternatiftir.", INLINE_SCHEDULING_COMMENTS: "Planlama yorumunu flash kart\u0131n son sat\u0131r\u0131yla ayn\u0131 sat\u0131ra kaydet?", INLINE_SCHEDULING_COMMENTS_DESC: "Bunu a\xE7mak, HTML yorumlar\u0131n\u0131n liste bi\xE7imlendirmesini bozmamas\u0131n\u0131 sa\u011Flar.", BURY_SIBLINGS_TILL_NEXT_DAY: "Karde\u015F kartlar\u0131 bir sonraki g\xFCne kadar gizle?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Karde\u015F kartlar, ayn\u0131 kart metninden \xFCretilen kartlard\u0131r (\xF6rne\u011Fin gizlemeler).", SHOW_CARD_CONTEXT: "Kartlarda ba\u011Flam\u0131 g\xF6ster?", SHOW_CARD_CONTEXT_DESC: "\xD6rne\u011Fin: Ba\u015Fl\u0131k > Ba\u015Fl\u0131k 1 > Alt Ba\u015Fl\u0131k > ... > Alt Ba\u015Fl\u0131k", CARD_MODAL_HEIGHT_PERCENT: "Flash Kart Y\xFCkseklik Y\xFCzdesi", CARD_MODAL_SIZE_PERCENT_DESC: "Mobilde veya \xE7ok b\xFCy\xFCk resimleriniz varsa %100 olarak ayarlay\u0131n.", RESET_DEFAULT: "Varsay\u0131lana s\u0131f\u0131rla", CARD_MODAL_WIDTH_PERCENT: "Flash Kart Geni\u015Flik Y\xFCzdesi", RANDOMIZE_CARD_ORDER: "\u0130nceleme s\u0131ras\u0131nda kart s\u0131ras\u0131n\u0131 rastgele yap?", REVIEW_CARD_ORDER_WITHIN_DECK: "\u0130nceleme s\u0131ras\u0131nda bir destede kartlar\u0131n g\xF6r\xFCnt\xFClenme s\u0131ras\u0131", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "S\u0131ral\u0131 olarak (\xF6nce t\xFCm yeni kartlar)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "S\u0131ral\u0131 olarak (\xF6nce t\xFCm g\xFCncel kartlar)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Rastgele olarak (\xF6nce t\xFCm yeni kartlar)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Rastgele olarak (\xF6nce t\xFCm g\xFCncel kartlar)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Rastgele desteden rastgele kart", REVIEW_DECK_ORDER: "\u0130nceleme s\u0131ras\u0131nda destelerin g\xF6r\xFCnt\xFClenme s\u0131ras\u0131", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "S\u0131ral\u0131 olarak (\xD6nceki destedeki t\xFCm kartlar g\xF6zden ge\xE7irildikten sonra)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Rastgele olarak (\xD6nceki destedeki t\xFCm kartlar g\xF6zden ge\xE7irildikten sonra)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Rastgele desteden rastgele kart", DISABLE_CLOZE_CARDS: "Gizli kartlar\u0131 devre d\u0131\u015F\u0131 b\u0131rak?", CONVERT_HIGHLIGHTS_TO_CLOZES: "==Vurgulanan== metni gizli kartlara d\xF6n\xFC\u015Ft\xFCr?", CONVERT_BOLD_TEXT_TO_CLOZES: "**Kal\u0131n metni** gizli kartlara d\xF6n\xFC\u015Ft\xFCr?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{K\u0131v\u0131rc\u0131k parantezleri}} gizli kartlara d\xF6n\xFC\u015Ft\xFCr?", INLINE_CARDS_SEPARATOR: "Sat\u0131r i\xE7i flash kartlar i\xE7in ay\u0131r\u0131c\u0131", FIX_SEPARATORS_MANUALLY_WARNING: "Bunu de\u011Fi\u015Ftirdikten sonra mevcut flash kartlar\u0131n\u0131z\u0131 manuel olarak d\xFCzenlemeniz gerekti\u011Fini unutmay\u0131n.", INLINE_REVERSED_CARDS_SEPARATOR: "Sat\u0131r i\xE7i ters flash kartlar i\xE7in ay\u0131r\u0131c\u0131", MULTILINE_CARDS_SEPARATOR: "\xC7ok sat\u0131rl\u0131 flash kartlar i\xE7in ay\u0131r\u0131c\u0131", MULTILINE_REVERSED_CARDS_SEPARATOR: "\xC7ok sat\u0131rl\u0131 ters flash kartlar i\xE7in ay\u0131r\u0131c\u0131", MULTILINE_CARDS_END_MARKER: "Gizli kartlar ve \xE7ok sat\u0131rl\u0131 flash kartlar\u0131n sonunu belirten karakterler", NOTES: "Notlar", REVIEW_PANE_ON_STARTUP: "Ba\u015Flang\u0131\xE7ta not inceleme panelini etkinle\u015Ftir", TAGS_TO_REVIEW: "G\xF6zden ge\xE7irilecek etiketler", TAGS_TO_REVIEW_DESC: "Etiketleri bo\u015Fluklar veya yeni sat\u0131rlarla ay\u0131rarak girin, \xF6rne\u011Fin: #review #tag2 #tag3.", OPEN_RANDOM_NOTE: "G\xF6zden ge\xE7irmek i\xE7in rastgele bir not a\xE7", OPEN_RANDOM_NOTE_DESC: "Bunu kapatt\u0131\u011F\u0131n\u0131zda, notlar \xF6nem s\u0131ras\u0131na g\xF6re s\u0131ralan\u0131r (PageRank).", AUTO_NEXT_NOTE: "Bir incelemeden sonra otomatik olarak bir sonraki notu a\xE7", MAX_N_DAYS_REVIEW_QUEUE: "Sa\u011F panelde g\xF6sterilecek maksimum g\xFCn say\u0131s\u0131", MIN_ONE_DAY: "G\xFCn say\u0131s\u0131 en az 1 olmal\u0131d\u0131r.", VALID_NUMBER_WARNING: "L\xFCtfen ge\xE7erli bir say\u0131 girin.", UI_PREFERENCES: "Kullan\u0131c\u0131 Aray\xFCz\xFC Tercihleri", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", ENABLE_FILE_MENU_REVIEW_OPTIONS: "Enable the review options in the file menu (e.g. Review: Easy, Good, Hard)", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "If you disable the review options in the file menu, you can review your notes using the plugin commands and, if you defined them, the associated command hotkeys.", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Deste a\u011Fa\xE7lar\u0131 ba\u015Flang\u0131\xE7ta geni\u015Fletilmi\u015F olarak g\xF6sterilmeli mi", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Bunu kapat\u0131n, ayn\u0131 dosyada bir\xE7ok desteye ait kartlar\u0131n\u0131z varsa i\xE7 i\xE7e desteleri daraltmak i\xE7in kullan\u0131\u015Fl\u0131d\u0131r.", ALGORITHM: "Algoritma", CHECK_ALGORITHM_WIKI: 'Daha fazla bilgi i\xE7in algoritma uygulamas\u0131na g\xF6z at\u0131n.', BASE_EASE: "Temel kolayl\u0131k", BASE_EASE_DESC: "minimum = 130, tercihen yakla\u015F\u0131k 250.", BASE_EASE_MIN_WARNING: "Temel kolayl\u0131k en az 130 olmal\u0131d\u0131r.", LAPSE_INTERVAL_CHANGE: "Bir flash kart\u0131/notu zor olarak inceledi\u011Finizde aral\u0131k de\u011Fi\u015Fikli\u011Fi", LAPSE_INTERVAL_CHANGE_DESC: "yeniAral\u0131k = eskiAral\u0131k * aral\u0131kDe\u011Fi\u015Fikli\u011Fi / 100.", EASY_BONUS: "Kolayl\u0131k Bonusu", EASY_BONUS_DESC: "Kolayl\u0131k bonusu, bir flash kart\u0131/notu \u0130yi ve Kolay yan\u0131tlad\u0131\u011F\u0131n\u0131zda aral\u0131klardaki fark\u0131 ayarlaman\u0131za olanak tan\u0131r (minimum = %100).", EASY_BONUS_MIN_WARNING: "Kolayl\u0131k bonusu en az %100 olmal\u0131d\u0131r.", MAX_INTERVAL: "Maksimum aral\u0131k (g\xFCn)", MAX_INTERVAL_DESC: "Aral\u0131\u011Fa bir \xFCst s\u0131n\u0131r koyman\u0131za olanak tan\u0131r (varsay\u0131lan = 100 y\u0131l).", MAX_INTERVAL_MIN_WARNING: "Maksimum aral\u0131k en az 1 g\xFCn olmal\u0131d\u0131r.", MAX_LINK_CONTRIB: "Maksimum ba\u011Flant\u0131 katk\u0131s\u0131", MAX_LINK_CONTRIB_DESC: "Ba\u011Flant\u0131l\u0131 notlar\u0131n a\u011F\u0131rl\u0131kl\u0131 kolayl\u0131k de\u011Ferinin ba\u015Flang\u0131\xE7 kolayl\u0131\u011F\u0131na maksimum katk\u0131s\u0131.", LOGGING: "Kay\u0131t tutma", DISPLAY_DEBUG_INFO: "Geli\u015Ftirici konsolunda hata ay\u0131klama bilgilerini g\xF6ster", DISPLAY_PARSER_DEBUG_INFO: "Ayr\u0131\u015Ft\u0131r\u0131c\u0131 i\xE7in hata ay\u0131klama bilgilerini geli\u015Ftirici konsolunda g\xF6ster", // sidebar.ts NOTES_REVIEW_QUEUE: "Not \u0130nceleme S\u0131ras\u0131", CLOSE: "Kapat", NEW: "Yeni", YESTERDAY: "D\xFCn", TODAY: "Bug\xFCn", TOMORROW: "Yar\u0131n", // stats-modal.tsx STATS_TITLE: "\u0130statistikler", MONTH: "Ay", QUARTER: "\xC7eyrek", YEAR: "Y\u0131l", LIFETIME: "\xD6m\xFCr Boyu", FORECAST: "Tahmin", FORECAST_DESC: "Gelecekte incelemeye al\u0131nacak kartlar\u0131n say\u0131s\u0131", SCHEDULED: "Planlanm\u0131\u015F", DAYS: "G\xFCnler", NUMBER_OF_CARDS: "Kart Say\u0131s\u0131", REVIEWS_PER_DAY: "Ortalama: ${avg} inceleme/g\xFCn", INTERVALS: "Aral\u0131klar", INTERVALS_DESC: "\u0130ncelemelerin tekrar g\xF6sterilme gecikmeleri", COUNT: "Say\u0131", INTERVALS_SUMMARY: "Ortalama aral\u0131k: ${avg}, En uzun aral\u0131k: ${longest}", EASES: "Kolayl\u0131klar", EASES_SUMMARY: "Ortalama kolayl\u0131k: ${avgEase}", CARD_TYPES: "Kart T\xFCrleri", CARD_TYPES_DESC: "Bu, g\xF6m\xFCl\xFC kartlar\u0131 da i\xE7erir (varsa)", CARD_TYPE_NEW: "Yeni", CARD_TYPE_YOUNG: "Gen\xE7", CARD_TYPE_MATURE: "Olgun", CARD_TYPES_SUMMARY: "Toplam kart: ${totalCardsCount}" }; // src/lang/locale/uk.ts var uk_default = {}; // src/lang/locale/ur.ts var ur_default = {}; // src/lang/locale/vi.ts var vi_default = {}; // src/lang/locale/zh-cn.ts var zh_cn_default = { // flashcard-modal.tsx DECKS: "\u5361\u7EC4", DUE_CARDS: "\u5230\u671F\u5361\u7247", NEW_CARDS: "\u65B0\u5361\u7247", TOTAL_CARDS: "\u5168\u90E8\u5361\u7247", BACK: "\u8FD4\u56DE", SKIP: "\u7565\u8FC7", EDIT_CARD: "\u7F16\u8F91\u5361\u7247", RESET_CARD_PROGRESS: "\u91CD\u7F6E\u5361\u7247", HARD: "\u8F83\u96BE", GOOD: "\u8BB0\u5F97", EASY: "\u7B80\u5355", SHOW_ANSWER: "\u663E\u793A\u7B54\u6848", CARD_PROGRESS_RESET: "\u5361\u7247\u5DF2\u88AB\u91CD\u7F6E\u3002", SAVE: "\u50A8\u5B58", CANCEL: "\u53D6\u6D88", NO_INPUT: "\u6CA1\u6709\u63D0\u4F9B\u8F93\u5165\u3002", CURRENT_EASE_HELP_TEXT: "\u76EE\u524D\u638C\u63E1\u7A0B\u5EA6\uFF1A", CURRENT_INTERVAL_HELP_TEXT: "\u76EE\u524D\u95F4\u9694\uFF1A", CARD_GENERATED_FROM: "\u751F\u6210\u81EA\uFF1A${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "\u6253\u5F00\u4E00\u4E2A\u7B14\u8BB0\u5F00\u59CB\u590D\u4E60", REVIEW_CARDS: "\u590D\u4E60\u5361\u7247", REVIEW_DIFFICULTY_FILE_MENU: "\u590D\u4E60\uFF1A${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "\u6807\u8BB0\u4E3A\u201C${difficulty}\u201D", REVIEW_ALL_CARDS: "\u590D\u4E60\u6240\u6709\u7B14\u8BB0\u4E2D\u7684\u5361\u7247", CRAM_ALL_CARDS: "\u9009\u62E9\u8981\u96C6\u4E2D\u590D\u4E60\u7684\u5361\u7EC4", REVIEW_CARDS_IN_NOTE: "\u590D\u4E60\u6B64\u7B14\u8BB0\u4E2D\u7684\u5361\u7247", CRAM_CARDS_IN_NOTE: "\u96C6\u4E2D\u590D\u4E60\u6B64\u7B14\u8BB0\u4E2D\u7684\u5361\u7247", VIEW_STATS: "\u67E5\u770B\u6570\u636E", OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar", STATUS_BAR: "\u590D\u4E60: ${dueNotesCount} \u7B14\u8BB0, ${dueFlashcardsCount} \u5361\u7247\u5DF2\u5230\u671F", SYNC_TIME_TAKEN: "\u540C\u6B65\u65F6\u95F4 ${t}ms", NOTE_IN_IGNORED_FOLDER: "\u7B14\u8BB0\u4FDD\u5B58\u5728\u5DF2\u88AB\u5FFD\u7565\u7684\u8DEF\u5F84\u4E2D\uFF08\u68C0\u67E5\u8BBE\u7F6E\u9009\u9879\uFF09\u3002", PLEASE_TAG_NOTE: "\u8BF7\u5C06\u9700\u8981\u590D\u4E60\u7684\u7B14\u8BB0\u4E2D\u52A0\u5165\u6B63\u786E\u7684\u6807\u7B7E\uFF08\u68C0\u67E5\u8BBE\u7F6E\u9009\u9879\uFF09\u3002", RESPONSE_RECEIVED: "\u53CD\u9988\u5DF2\u6536\u5230", NO_DECK_EXISTS: "\u6CA1\u6709 ${deckName} \u5361\u7EC4", ALL_CAUGHT_UP: "\u90FD\u590D\u4E60\u5B8C\u5566\uFF0C\u4F60\u771F\u68D2\uFF01", // scheduling.ts DAYS_STR_IVL: "${interval}\u5929", MONTHS_STR_IVL: "${interval}\u6708", YEARS_STR_IVL: "${interval}\u5E74", DAYS_STR_IVL_MOBILE: "${interval}\u5929", MONTHS_STR_IVL_MOBILE: "${interval}\u6708", YEARS_STR_IVL_MOBILE: "${interval}\u5E74", // settings.ts SETTINGS_HEADER: "\u95F4\u9694\u91CD\u590D\u63D2\u4EF6 - \u8BBE\u7F6E", GROUP_TAGS_FOLDERS: "Tags & Folders", GROUP_FLASHCARD_REVIEW: "Flashcard Review", GROUP_FLASHCARD_SEPARATORS: "Flashcard Separators", GROUP_DATA_STORAGE: "Storage of Scheduling Data", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contributing", CHECK_WIKI: '\u4E86\u89E3\u66F4\u591A, \u8BF7\u70B9\u51FBwiki.', GITHUB_DISCUSSIONS: 'Visit the discussions section for Q&A help, feedback, and general discussion.', GITHUB_ISSUES: 'Raise an issue here if you have a feature request or a bug report.', GITHUB_SOURCE_CODE: 'Project source code available on GitHub', CODE_CONTRIBUTION_INFO: 'Information on code contributions', TRANSLATION_CONTRIBUTION_INFO: 'Information on translating the plugin to your language', PROJECT_CONTRIBUTIONS: 'Raise an issue here if you have a feature request or a bug report', FOLDERS_TO_IGNORE: "\u5FFD\u7565\u6B64\u6587\u4EF6\u5939", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "\u5361\u7247", FLASHCARD_EASY_LABEL: "\u201C\u7B80\u5355\u201D\u6309\u94AE\u6587\u672C", FLASHCARD_GOOD_LABEL: "\u201C\u8BB0\u5F97\u201D\u6309\u94AE\u6587\u672C", FLASHCARD_HARD_LABEL: "\u201C\u8F83\u96BE\u201D\u6309\u94AE\u6587\u672C", FLASHCARD_EASY_DESC: "\u81EA\u5B9A\u4E49\u201C\u7B80\u5355\u201D\u6309\u94AE\u7684\u6807\u7B7E", FLASHCARD_GOOD_DESC: "\u81EA\u5B9A\u4E49\u201C\u8BB0\u5F97\u201D\u6309\u94AE\u7684\u6807\u7B7E", FLASHCARD_HARD_DESC: "\u81EA\u5B9A\u4E49\u201C\u8F83\u96BE\u201D\u6309\u94AE\u7684\u6807\u7B7E", REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "\u5361\u7247\u6807\u7B7E", FLASHCARD_TAGS_DESC: "\u8F93\u5165\u6807\u7B7E\uFF0C\u7528\u7A7A\u683C\u6216\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#flashcards #deck2 #deck3.", CONVERT_FOLDERS_TO_DECKS: "\u662F\u5426\u5C06\u6587\u4EF6\u5939\u5185\u5BB9\u8F6C\u6362\u4E3A\u5361\u7247\u7EC4\u548C\u5B50\u5361\u7247\u7EC4\uFF1F", CONVERT_FOLDERS_TO_DECKS_DESC: "\u6B64\u9009\u9879\u4E3A\u5361\u7247\u6807\u7B7E\u9009\u9879\u7684\u66FF\u4EE3\u9009\u9879\u3002", INLINE_SCHEDULING_COMMENTS: "\u662F\u5426\u5C06\u8BA1\u5212\u91CD\u590D\u65F6\u95F4\u4FDD\u5B58\u5728\u5361\u7247\u6700\u540E\u4E00\u884C\u7684\u540C\u4E00\u884C\uFF1F", INLINE_SCHEDULING_COMMENTS_DESC: "HTML\u6CE8\u91CA\u4E0D\u518D\u7834\u574F\u5217\u8868\u683C\u5F0F", BURY_SIBLINGS_TILL_NEXT_DAY: "\u5C06\u5173\u8054\u5361\u7247\u9690\u85CF\u81F3\u4E0B\u4E00\u5929\uFF1F", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u5173\u8054\u5361\u7247\u662F\u6765\u81EA\u540C\u4E00\u5361\u7247\u7684\u4E0D\u540C\u5F62\u5F0F\uFF0C \u4F8B\u5982\uFF1A\u5B8C\u5F62\u586B\u7A7A\u5361\u7247", SHOW_CARD_CONTEXT: "\u5728\u5361\u7247\u4E2D\u663E\u793A\u4E0A\u4E0B\u6587\uFF1F", SHOW_CARD_CONTEXT_DESC: "\u4F8B\u5982\uFF1A\u6807\u9898 > \u526F\u6807\u9898 > \u5C0F\u6807\u9898 > ... > \u5C0F\u6807\u9898", CARD_MODAL_HEIGHT_PERCENT: "\u5361\u7247\u9AD8\u5EA6\u767E\u5206\u6BD4", CARD_MODAL_SIZE_PERCENT_DESC: "\u8BF7\u5728\u79FB\u52A8\u7AEF\u4F7F\u7528\u5E76\u9700\u8981\u6D4F\u89C8\u8F83\u5927\u56FE\u7247\u65F6\u8BBE\u4E3A100%", RESET_DEFAULT: "\u91CD\u7F6E\u4E3A\u9ED8\u8BA4", CARD_MODAL_WIDTH_PERCENT: "\u5361\u7247\u5BBD\u5EA6\u767E\u5206\u6BD4", RANDOMIZE_CARD_ORDER: "\u590D\u4E60\u65F6\u968F\u673A\u663E\u793A\u5361\u7247\uFF1F", REVIEW_CARD_ORDER_WITHIN_DECK: "\u590D\u4E60\u65F6\u5361\u7247\u7EC4\u5185\u7684\u5361\u7247\u6392\u5E8F", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "\u5361\u7247\u7EC4\u5185\u987A\u5E8F (\u5168\u90E8\u65B0\u5361\u7247\u4F18\u5148)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "\u5361\u7247\u7EC4\u5185\u987A\u5E8F (\u5168\u90E8\u5230\u671F\u5361\u7247\u4F18\u5148)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "\u5361\u7247\u7EC4\u5185\u4E71\u5E8F (\u5168\u90E8\u65B0\u5361\u7247\u4F18\u5148)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "\u5361\u7247\u7EC4\u5185\u4E71\u5E8F (\u5168\u90E8\u5230\u671F\u5361\u7247\u4F18\u5148)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "\u5361\u7247\u7EC4\u53CA\u5361\u7247\u90FD\u4E71\u5E8F", REVIEW_DECK_ORDER: "\u590D\u4E60\u65F6\u5361\u7247\u7EC4\u7684\u6392\u5E8F", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "\u987A\u5E8F (\u5728\u524D\u4E00\u5361\u7247\u7EC4\u5185\u5361\u7247\u90FD\u590D\u4E60\u5B8C\u540E)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "\u4E71\u5E8F (\u5728\u524D\u4E00\u5361\u7247\u7EC4\u5185\u5361\u7247\u90FD\u590D\u4E60\u5B8C\u540E)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "\u5361\u7247\u7EC4\u53CA\u5361\u7247\u90FD\u4E71\u5E8F", DISABLE_CLOZE_CARDS: "\u4E0D\u8FDB\u884C\u5B8C\u5F62\u586B\u7A7A\uFF1F", CONVERT_HIGHLIGHTS_TO_CLOZES: "\u5C06 ==\u9AD8\u4EAE== \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F", CONVERT_BOLD_TEXT_TO_CLOZES: "\u5C06 **\u7C97\u4F53** \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F", CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u5C06 {{\u5927\u62EC\u53F7}} \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F", INLINE_CARDS_SEPARATOR: "\u5355\u884C\u5361\u7247\u7684\u5206\u9694\u7B26", FIX_SEPARATORS_MANUALLY_WARNING: "\u6CE8\u610F\uFF1A\u66F4\u6539\u6B64\u9009\u9879\u540E\u4F60\u5C06\u9700\u8981\u81EA\u884C\u66F4\u6539\u5DF2\u5B58\u5728\u5361\u7247\u7684\u5206\u9694\u7B26\u3002", INLINE_REVERSED_CARDS_SEPARATOR: "\u5355\u884C\u7FFB\u8F6C\u5361\u7247\u7684\u5206\u9694\u7B26", MULTILINE_CARDS_SEPARATOR: "\u591A\u884C\u5361\u7247\u7684\u5206\u9694\u7B26", MULTILINE_REVERSED_CARDS_SEPARATOR: "\u591A\u884C\u7FFB\u8F6C\u5361\u7247\u7684\u5206\u9694\u7B26", MULTILINE_CARDS_END_MARKER: "\u8868\u793A\u586B\u7A7A\u548C\u591A\u884C\u95EA\u5361\u7ED3\u675F\u7684\u5B57\u7B26", NOTES: "\u7B14\u8BB0", REVIEW_PANE_ON_STARTUP: "\u542F\u52A8\u65F6\u5F00\u542F\u7B14\u8BB0\u590D\u4E60\u7A97\u683C", TAGS_TO_REVIEW: "\u590D\u4E60\u6807\u7B7E", TAGS_TO_REVIEW_DESC: "\u8F93\u5165\u6807\u7B7E\uFF0C\u7528\u7A7A\u683C\u6216\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#review #tag2 #tag3.", OPEN_RANDOM_NOTE: "\u590D\u4E60\u968F\u673A\u7B14\u8BB0", OPEN_RANDOM_NOTE_DESC: "\u5173\u95ED\u6B64\u9009\u9879\uFF0C\u7B14\u8BB0\u5C06\u4EE5\u91CD\u8981\u5EA6(PageRank)\u6392\u5E8F\u3002", AUTO_NEXT_NOTE: "\u590D\u4E60\u540E\u81EA\u52A8\u6253\u5F00\u4E0B\u4E00\u4E2A\u7B14\u8BB0", ENABLE_FILE_MENU_REVIEW_OPTIONS: "\u8BF7\u5728\u6587\u4EF6\u83DC\u5355\u4E2D\u542F\u7528\u590D\u4E60\u9009\u9879\uFF08\u4F8B\u5982\uFF1A\u590D\u4E60\uFF1A\u7B80\u5355\u3001\u826F\u597D\u3001\u56F0\u96BE", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u5982\u679C\u60A8\u5728\u6587\u4EF6\u83DC\u5355\u4E2D\u7981\u7528\u590D\u4E60\u9009\u9879\uFF0C\u60A8\u53EF\u4EE5\u4F7F\u7528\u63D2\u4EF6\u547D\u4EE4\u6765\u590D\u4E60\u7B14\u8BB0\uFF0C\u5982\u679C\u60A8\u5B9A\u4E49\u4E86\u76F8\u5173\u5FEB\u6377\u952E\uFF0C\u4E5F\u53EF\u4EE5\u4F7F\u7528\u5B83\u4EEC\u3002", MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u8FB9\u680F\u4E2D\u663E\u793A\u7684\u6700\u5927\u5929\u6570", MIN_ONE_DAY: "\u5929\u6570\u6700\u5C0F\u503C\u4E3A1", VALID_NUMBER_WARNING: "\u8BF7\u8F93\u5165\u6709\u6548\u7684\u6570\u5B57\u3002", UI_PREFERENCES: "\u7528\u6237\u754C\u9762\u9996\u9009\u9879", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u7532\u677F\u6811\u6700\u521D\u5E94\u663E\u793A\u4E3A\u5C55\u5F00", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u5173\u95ED\u6B64\u9009\u9879\u53EF\u6298\u53E0\u540C\u4E00\u5F20\u5361\u7247\u4E2D\u7684\u5D4C\u5957\u724C\u7EC4\u3002\u5982\u679C\u60A8\u7684\u5361\u7247\u5C5E\u4E8E\u540C\u4E00\u6587\u4EF6\u4E2D\u7684\u8BB8\u591A\u5957\u724C\uFF0C\u5219\u5F88\u6709\u7528\u3002", ALGORITHM: "\u7B97\u6CD5", CHECK_ALGORITHM_WIKI: '\u4E86\u89E3\u66F4\u591A, \u8BF7\u70B9\u51FB\u7B97\u6CD5\u5B9E\u73B0.', BASE_EASE: "\u57FA\u7840\u638C\u63E1\u7A0B\u5EA6", BASE_EASE_DESC: "\u6700\u5C0F\u503C130\uFF0C\u63A8\u8350\u503C\u7EA6250.", BASE_EASE_MIN_WARNING: "\u57FA\u7840\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5C0F\u503C\u4E3A130\u3002", LAPSE_INTERVAL_CHANGE: "\u5C06\u590D\u4E60\u65F6\u6807\u6CE8\u4E3A\u201C\u8F83\u96BE\u201D\u7684\u5361\u7247\u6216\u7B14\u8BB0\u590D\u4E60\u95F4\u9694\u7F29\u77ED", LAPSE_INTERVAL_CHANGE_DESC: "\u65B0\u590D\u4E60\u95F4\u9694 = \u539F\u590D\u4E60\u95F4\u9694 * \u95F4\u9694\u6539\u53D8\u7CFB\u6570 / 100.", EASY_BONUS: "\u7B80\u5355\u5956\u52B1", EASY_BONUS_DESC: "\u7B80\u5355\u5956\u52B1\u8BBE\u5B9A\u201C\u8BB0\u5F97\u201D\u548C\u201C\u7B80\u5355\u201D\u5361\u7247\u6216\u7B14\u8BB0\u7684\u590D\u4E60\u95F4\u9694\u5DEE\u8DDD\uFF08\u6700\u5C0F\u503C100%\uFF09\u3002", EASY_BONUS_MIN_WARNING: "\u7B80\u5355\u5956\u52B1\u81F3\u5C11\u4E3A100\u3002", MAX_INTERVAL: "\u6700\u5927\u95F4\u9694\uFF08\u5929\uFF09", MAX_INTERVAL_DESC: "\u8BBE\u5B9A\u590D\u4E60\u7684\u6700\u5927\u95F4\u9694\u65F6\u95F4\uFF08\u9ED8\u8BA4\u503C100\u5E74\uFF09\u3002", MAX_INTERVAL_MIN_WARNING: "\u6700\u5927\u95F4\u9694\u81F3\u5C11\u4E3A1\u5929", MAX_LINK_CONTRIB: "\u6700\u5927\u94FE\u63A5\u6536\u76CA", MAX_LINK_CONTRIB_DESC: "\u94FE\u63A5\u7B14\u8BB0\u7684\u52A0\u6743\u638C\u63E1\u7A0B\u5EA6\u5BF9\u539F\u59CB\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5927\u8D21\u732E\u3002", LOGGING: "\u8BB0\u5F55\u4E2D", DISPLAY_DEBUG_INFO: "\u5728\u5F00\u53D1\u8005\u63A7\u5236\u53F0\u4E2D\u663E\u793A\u8C03\u8BD5\u4FE1\u606F", DISPLAY_PARSER_DEBUG_INFO: "Display debugging information for the parser on the developer console", // sidebar.ts NOTES_REVIEW_QUEUE: "\u7B14\u8BB0\u590D\u4E60\u5E8F\u5217", CLOSE: "\u4E34\u8FD1", NEW: "\u65B0", YESTERDAY: "\u6628\u5929", TODAY: "\u4ECA\u5929", TOMORROW: "\u660E\u5929", // stats-modal.tsx STATS_TITLE: "\u6570\u636E", MONTH: "\u6708", QUARTER: "\u5B63", YEAR: "\u5E74", LIFETIME: "\u5168\u90E8", FORECAST: "\u9884\u671F", FORECAST_DESC: "\u5C06\u8981\u5230\u671F\u7684\u5361\u7247\u6570\u91CF", SCHEDULED: "\u5DF2\u6392\u671F", DAYS: "\u5929", NUMBER_OF_CARDS: "\u5361\u7247\u6570\u91CF", REVIEWS_PER_DAY: "\u5E73\u5747: \u590D\u4E60${avg} /\u5929", INTERVALS: "\u95F4\u9694", INTERVALS_DESC: "\u5230\u4E0B\u4E00\u6B21\u590D\u4E60\u7684\u65F6\u95F4\u95F4\u9694", COUNT: "\u8BA1\u6570", INTERVALS_SUMMARY: "\u5E73\u5747\u95F4\u9694\u65F6\u95F4: ${avg}, \u6700\u957F\u95F4\u9694\u65F6\u95F4: ${longest}", EASES: "\u638C\u63E1\u7A0B\u5EA6", EASES_SUMMARY: "\u5E73\u5747\u638C\u63E1\u7A0B\u5EA6: ${avgEase}", CARD_TYPES: "\u5361\u7247\u7C7B\u578B", CARD_TYPES_DESC: "\u5982\u6709\uFF0C\u5C06\u663E\u793A\u9690\u85CF\u7684\u5361\u7247", CARD_TYPE_NEW: "\u65B0", CARD_TYPE_YOUNG: "\u8F83\u65B0", CARD_TYPE_MATURE: "\u719F\u6089", CARD_TYPES_SUMMARY: "\u603B\u5361\u7247\u6570: ${totalCardsCount}" }; // src/lang/locale/zh-tw.ts var zh_tw_default = { // flashcard-modal.tsx DECKS: "\u724C\u7D44", DUE_CARDS: "\u5230\u671F\u5361\u7247", NEW_CARDS: "\u65B0\u5361\u7247", TOTAL_CARDS: "\u5168\u90E8\u5361\u7247", BACK: "\u8FD4\u56DE", SKIP: "\u7565\u904E", EDIT_CARD: "\u7DE8\u8F2F\u5361\u7247", RESET_CARD_PROGRESS: "\u91CD\u7F6E\u5361\u7247", HARD: "\u8F03\u96E3", GOOD: "\u8A18\u5F97", EASY: "\u7C21\u55AE", SHOW_ANSWER: "\u986F\u793A\u7B54\u6848", CARD_PROGRESS_RESET: "\u5361\u7247\u5DF2\u88AB\u91CD\u7F6E\u3002", SAVE: "\u5132\u5B58", CANCEL: "\u53D6\u6D88", NO_INPUT: "\u6C92\u6709\u63D0\u4F9B\u8F38\u5165\u3002", CURRENT_EASE_HELP_TEXT: "\u76EE\u524D\u638C\u63E1\u7A0B\u5EA6\uFF1A", CURRENT_INTERVAL_HELP_TEXT: "\u76EE\u524D\u9593\u9694\u6642\u9593\uFF1A", CARD_GENERATED_FROM: "\u751F\u6210\u81EA\uFF1A${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "\u6253\u958B\u4E00\u500B\u7B46\u8A18\u958B\u59CB\u5FA9\u7FD2", REVIEW_CARDS: "\u5FA9\u7FD2\u5361\u7247", REVIEW_DIFFICULTY_FILE_MENU: "\u5FA9\u7FD2\uFF1A${difficulty}", REVIEW_NOTE_DIFFICULTY_CMD: "\u6A19\u8A18\u70BA\u300C${difficulty}\u300D", REVIEW_CARDS_IN_NOTE: "\u5FA9\u7FD2\u6B64\u7B46\u8A18\u4E2D\u7684\u5361\u7247", CRAM_ALL_CARDS: "\u9078\u64C7\u8981\u4E0D\u8A08\u96E3\u6613\u5EA6\u5FA9\u7FD2\u7684\u724C\u7D44", REVIEW_ALL_CARDS: "\u5FA9\u7FD2\u6240\u6709\u7B46\u8A18\u4E2D\u7684\u5361\u7247", CRAM_CARDS_IN_NOTE: "\u4E0D\u8A08\u96E3\u6613\u5EA6\u5FA9\u7FD2\u6B64\u7B46\u8A18\u4E2D\u7684\u5361\u7247", VIEW_STATS: "\u6AA2\u8996\u6578\u64DA", OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar", STATUS_BAR: "\u5FA9\u7FD2: ${dueNotesCount} \u7B46\u8A18, ${dueFlashcardsCount} \u5361\u7247\u5DF2\u5230\u671F", SYNC_TIME_TAKEN: "\u540C\u6B65\u6642\u9593 ${t}ms", NOTE_IN_IGNORED_FOLDER: "\u7B46\u8A18\u5132\u5B58\u5728\u5DF2\u88AB\u5FFD\u7565\u7684\u8DEF\u5F91\u4E2D\uFF08\u6AA2\u67E5\u8A2D\u5B9A\u9078\u9805\uFF09\u3002", PLEASE_TAG_NOTE: "\u8ACB\u5C07\u9700\u8981\u5FA9\u7FD2\u7684\u7B46\u8A18\u4E2D\u52A0\u5165\u6B63\u78BA\u7684\u6A19\u7C64\uFF08\u6AA2\u67E5\u8A2D\u5B9A\u9078\u9805\uFF09\u3002", RESPONSE_RECEIVED: "\u56DE\u994B\u5DF2\u6536\u5230", NO_DECK_EXISTS: "\u6C92\u6709 ${deckName} \u724C\u7D44", ALL_CAUGHT_UP: "\u90FD\u5FA9\u7FD2\u5B8C\u5566\uFF0C\u4F60\u771F\u68D2\uFF01", // scheduling.ts DAYS_STR_IVL: "${interval}\u5929", MONTHS_STR_IVL: "${interval}\u6708", YEARS_STR_IVL: "${interval}\u5E74", DAYS_STR_IVL_MOBILE: "${interval}\u5929", MONTHS_STR_IVL_MOBILE: "${interval}\u6708", YEARS_STR_IVL_MOBILE: "${interval}\u5E74", // settings.ts SETTINGS_HEADER: "\u9593\u9694\u91CD\u8907\u5916\u639B - \u8A2D\u5B9A", GROUP_TAGS_FOLDERS: "Tags & Folders", GROUP_FLASHCARD_REVIEW: "Flashcard Review", GROUP_FLASHCARD_SEPARATORS: "Flashcard Separators", GROUP_DATA_STORAGE: "Storage of Scheduling Data", GROUP_FLASHCARDS_NOTES: "Flashcards & Notes", GROUP_CONTRIBUTING: "Contributing", CHECK_WIKI: '\u77AD\u89E3\u66F4\u591A, \u8ACB\u9EDE\u9078wiki.', GITHUB_DISCUSSIONS: 'Visit the discussions section for Q&A help, feedback, and general discussion.', GITHUB_ISSUES: 'Raise an issue here if you have a feature request or a bug report.', GITHUB_SOURCE_CODE: 'Project source code available on GitHub', CODE_CONTRIBUTION_INFO: 'Information on code contributions', TRANSLATION_CONTRIBUTION_INFO: 'Information on translating the plugin to your language', PROJECT_CONTRIBUTIONS: 'Raise an issue here if you have a feature request or a bug report', FOLDERS_TO_IGNORE: "\u5FFD\u7565\u6B64\u8CC7\u6599\u593E", FOLDERS_TO_IGNORE_DESC: "Enter folder paths or glob patterns on separate lines e.g. Templates/Scripts or **/*.excalidraw.md. This setting is common to both flashcards and notes.", OBSIDIAN_INTEGRATION: "Integration into Obsidian", FLASHCARDS: "\u5361\u7247", FLASHCARD_EASY_LABEL: "\u7C21\u55AE\u6309\u9215\u6587\u5B57", FLASHCARD_GOOD_LABEL: "\u8A18\u5F97\u6309\u9215\u6587\u5B57", FLASHCARD_HARD_LABEL: "\u8F03\u96E3\u6309\u9215\u6587\u5B57", FLASHCARD_EASY_DESC: "\u81EA\u8A02\u300C\u7C21\u55AE\u300D\u6309\u9215\u7684\u6A19\u7C64", FLASHCARD_GOOD_DESC: "\u81EA\u8A02\u300C\u8A18\u5F97\u300D\u6309\u9215\u7684\u6A19\u7C64", FLASHCARD_HARD_DESC: "\u81EA\u8A02\u300C\u8F03\u96E3\u300D\u6309\u9215\u7684\u6A19\u7C64", REVIEW_BUTTON_DELAY: "Button press delay (ms)", REVIEW_BUTTON_DELAY_DESC: "Add a delay to the review buttons before they can be pressed again.", FLASHCARD_TAGS: "\u5361\u7247\u6A19\u7C64", FLASHCARD_TAGS_DESC: "\u8F38\u5165\u6A19\u7C64\uFF08\u7528\u7A7A\u767D\u6216\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF09\uFF0C\u4F8B\u5982\uFF1A#flashcards #deck2 #deck3.", CONVERT_FOLDERS_TO_DECKS: "\u662F\u5426\u5C07\u8CC7\u6599\u593E\u5167\u5BB9\u8F49\u63DB\u70BA\u724C\u7D44\u548C\u5B50\u724C\u7D44\uFF1F", CONVERT_FOLDERS_TO_DECKS_DESC: "\u6B64\u9078\u9805\u70BA\u5361\u7247\u6A19\u7C64\u9078\u9805\u7684\u66FF\u4EE3\u9078\u9805\u3002", INLINE_SCHEDULING_COMMENTS: "\u662F\u5426\u5C07\u8A08\u5283\u91CD\u8907\u6642\u9593\u5132\u5B58\u5728\u5361\u7247\u6700\u5F8C\u4E00\u884C\u7684\u540C\u4E00\u884C\uFF1F", INLINE_SCHEDULING_COMMENTS_DESC: "\u52FE\u9078\u5F8CHTML\u8A3B\u89E3\u4E0D\u6703\u7834\u58DE\u5217\u8868\u683C\u5F0F\u554F\u984C\u3002", BURY_SIBLINGS_TILL_NEXT_DAY: "\u5C07\u53CD\u8F49\u5361\u7247\u96B1\u85CF\u81F3\u4E0B\u4E00\u5929\uFF1F", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u53CD\u8F49\u5361\u7247\u7531\u540C\u4E00\u5361\u7247\u6587\u5B57\u7522\u751F\uFF0C\u4F8B\u5982\uFF1A\u586B\u7A7A\u514B\u6F0F\u5B57", SHOW_CARD_CONTEXT: "\u5728\u5361\u7247\u4E2D\u986F\u793A\u4E0A\u4E0B\u6587\uFF1F", SHOW_CARD_CONTEXT_DESC: "\u4F8B\u5982\uFF1A\u6A19\u984C > \u526F\u6A19\u984C > \u5C0F\u6A19\u984C > ... > \u5C0F\u6A19\u984C", CARD_MODAL_HEIGHT_PERCENT: "\u5361\u7247\u9AD8\u5EA6\u767E\u5206\u6BD4", CARD_MODAL_SIZE_PERCENT_DESC: "\u5728\u79FB\u52D5\u7AEF\u6216\u9700\u8981\u8F03\u5927\u5716\u7247\u6642\u61C9\u8A2D\u5B9A\u70BA100%", RESET_DEFAULT: "\u91CD\u7F6E\u70BA\u9810\u8A2D\u503C", CARD_MODAL_WIDTH_PERCENT: "\u5361\u7247\u5BEC\u5EA6\u767E\u5206\u6BD4", RANDOMIZE_CARD_ORDER: "\u5FA9\u7FD2\u6642\u96A8\u6A5F\u986F\u793A\u5361\u7247\uFF1F", REVIEW_CARD_ORDER_WITHIN_DECK: "\u5FA9\u7FD2\u6642\u724C\u7D44\u5167\u7684\u5361\u7247\u6392\u5E8F", REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "\u724C\u7D44\u5167\u9806\u5E8F (\u5168\u90E8\u65B0\u5361\u7247\u512A\u5148)", REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "\u724C\u7D44\u5167\u9806\u5E8F (\u5168\u90E8\u5230\u671F\u5361\u7247\u512A\u5148)", REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "\u724C\u7D44\u5167\u4E82\u5E8F (\u5168\u90E8\u65B0\u5361\u7247\u512A\u5148)", REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "\u724C\u7D44\u5167\u4E82\u5E8F (\u5168\u90E8\u5230\u671F\u5361\u7247\u512A\u5148)", REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "\u724C\u7D44\u53CA\u5361\u7247\u90FD\u4E82\u5E8F", REVIEW_DECK_ORDER: "\u5FA9\u7FD2\u6642\u724C\u7D44\u7684\u6392\u5E8F", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "\u9806\u5E8F (\u5728\u524D\u4E00\u724C\u7D44\u5167\u5361\u7247\u90FD\u5FA9\u7FD2\u5B8C\u5F8C)", REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "\u4E82\u5E8F (\u5728\u524D\u4E00\u724C\u7D44\u5167\u5361\u7247\u90FD\u5FA9\u7FD2\u5B8C\u5F8C)", REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "\u724C\u7D44\u53CA\u5361\u7247\u90FD\u4E82\u5E8F", DISABLE_CLOZE_CARDS: "\u505C\u7528\u586B\u7A7A\u514B\u6F0F\u5B57\u5361\u7247\uFF1F", CONVERT_HIGHLIGHTS_TO_CLOZES: "\u5C07 ==\u9AD8\u4EAE== \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F", CONVERT_BOLD_TEXT_TO_CLOZES: "\u5C07 **\u7C97\u9AD4** \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F", CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u5C07 {{\u5927\u62EC\u865F}} \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F", INLINE_CARDS_SEPARATOR: "\u55AE\u884C\u5361\u7247\u7684\u5206\u9694\u5B57\u5143", FIX_SEPARATORS_MANUALLY_WARNING: "\u6CE8\u610F\uFF1A\u66F4\u6539\u6B64\u9078\u9805\u5F8C\u4F60\u5C07\u9700\u8981\u81EA\u884C\u66F4\u6539\u5DF2\u5B58\u5728\u5361\u7247\u7684\u5206\u9694\u5B57\u5143\u3002", INLINE_REVERSED_CARDS_SEPARATOR: "\u55AE\u884C\u53CD\u8F49\u5361\u7247\u7684\u5206\u9694\u5B57\u5143", MULTILINE_CARDS_SEPARATOR: "\u591A\u884C\u5361\u7247\u7684\u5206\u9694\u5B57\u5143", MULTILINE_REVERSED_CARDS_SEPARATOR: "\u591A\u884C\u7FFB\u8F49\u5361\u7247\u7684\u5206\u9694\u5B57\u5143", MULTILINE_CARDS_END_MARKER: "\u8868\u793A\u586B\u7A7A\u548C\u591A\u884C\u95EA\u5361\u7ED3\u675F\u7684\u5B57\u7B26", NOTES: "\u7B46\u8A18", REVIEW_PANE_ON_STARTUP: "\u555F\u52D5\u6642\u958B\u555F\u7B46\u8A18\u5FA9\u7FD2\u7A97\u683C", TAGS_TO_REVIEW: "\u5FA9\u7FD2\u6A19\u7C64", TAGS_TO_REVIEW_DESC: "\u8F38\u5165\u6A19\u7C64\uFF0C\u7528\u7A7A\u683C\u6216\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#review #tag2 #tag3.", OPEN_RANDOM_NOTE: "\u5FA9\u7FD2\u96A8\u6A5F\u7B46\u8A18", OPEN_RANDOM_NOTE_DESC: "\u95DC\u9589\u6B64\u9078\u9805\uFF0C\u7B46\u8A18\u5C07\u4EE5\u91CD\u8981\u5EA6(PageRank)\u6392\u5E8F\u3002", AUTO_NEXT_NOTE: "\u5FA9\u7FD2\u5F8C\u81EA\u52D5\u6253\u958B\u4E0B\u4E00\u500B\u7B46\u8A18", ENABLE_FILE_MENU_REVIEW_OPTIONS: "\u8ACB\u5728\u6A94\u6848\u9078\u55AE\u4E2D\u555F\u7528\u6AA2\u8996\u9078\u9805\uFF08\u4F8B\u5982\uFF1A\u6AA2\u8996\uFF1A\u7C21\u55AE\u3001\u8A18\u5F97\u3001\u8F03\u96E3\uFF09", ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u5982\u679C\u60A8\u5728\u6A94\u6848\u9078\u55AE\u4E2D\u505C\u7528\u6AA2\u8996\u9078\u9805\uFF0C\u60A8\u53EF\u4EE5\u4F7F\u7528\u63D2\u4EF6\u6307\u4EE4\u6AA2\u8996\u7B46\u8A18\uFF0C\u5982\u679C\u6709\u8A2D\u5B9A\uFF0C\u4E5F\u53EF\u4EE5\u4F7F\u7528\u76F8\u95DC\u7684\u5FEB\u6377\u9375\u3002", MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u908A\u9762\u677F\u986F\u793A\u7684\u6700\u5927\u5929\u6578", MIN_ONE_DAY: "\u5929\u6578\u6700\u5C0F\u503C\u70BA1", VALID_NUMBER_WARNING: "\u8ACB\u8F38\u5165\u6709\u6548\u7684\u6578\u5B57\u3002", UI_PREFERENCES: "\u7528\u6236\u4ECB\u9762\u9996\u9078\u9805", SHOW_STATUS_BAR: "Show status bar", SHOW_STATUS_BAR_DESC: "Turn this off to hide the flashcard's review status in Obsidian's status bar", SHOW_RIBBON_ICON: "Show icon in the ribbon bar", SHOW_RIBBON_ICON_DESC: "Turn this off to hide the plugin icon from Obsidian's ribbon bar", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u724C\u7D44\u6A39\u6700\u521D\u61C9\u986F\u793A\u70BA\u5C55\u958B", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u95DC\u9589\u6B64\u9078\u9805\u53EF\u647A\u758A\u540C\u4E00\u5F35\u5361\u7247\u4E2D\u7684\u5DE2\u72C0\u724C\u7D44\u3002\u5982\u679C\u60A8\u7684\u5361\u7247\u5C6C\u65BC\u540C\u4E00\u6A94\u6848\u4E2D\u7684\u8A31\u591A\u5957\u724C\uFF0C\u5247\u5F88\u6709\u7528\u3002", ALGORITHM: "\u6F14\u7B97\u6CD5", CHECK_ALGORITHM_WIKI: '\u77AD\u89E3\u66F4\u591A, \u8ACB\u9EDE\u9078\u7B97\u6CD5\u5BE6\u73FE.', BASE_EASE: "\u57FA\u790E\u638C\u63E1\u7A0B\u5EA6", BASE_EASE_DESC: "\u6700\u5C0F\u503C130\uFF0C\u63A8\u85A6\u503C\u7D04250.", BASE_EASE_MIN_WARNING: "\u57FA\u790E\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5C0F\u503C\u70BA130\u3002", LAPSE_INTERVAL_CHANGE: "\u5C07\u5FA9\u7FD2\u6642\u6A19\u8A3B\u70BA\u300C\u8F03\u96E3\u300D\u7684\u5361\u7247\u6216\u7B46\u8A18\u5FA9\u7FD2\u9593\u9694\u7E2E\u77ED", LAPSE_INTERVAL_CHANGE_DESC: "\u65B0\u5FA9\u7FD2\u9593\u9694 = \u539F\u5FA9\u7FD2\u9593\u9694 * \u9593\u9694\u6539\u8B8A\u4FC2\u6578 / 100.", EASY_BONUS: "\u7C21\u55AE\u734E\u52F5", EASY_BONUS_DESC: "\u7C21\u55AE\u734E\u52F5\u8A2D\u5B9A\u300C\u8A18\u5F97\u300D\u548C\u300C\u7C21\u55AE\u300D\u5361\u7247\u6216\u7B46\u8A18\u7684\u5FA9\u7FD2\u9593\u9694\u5DEE\u8DDD\uFF08\u6700\u5C0F\u503C100%\uFF09\u3002", EASY_BONUS_MIN_WARNING: "\u7C21\u55AE\u734E\u52F5\u81F3\u5C11\u70BA100\u3002", MAX_INTERVAL: "\u6700\u5927\u9593\u9694\uFF08\u5929\uFF09", MAX_INTERVAL_DESC: "\u8A2D\u5B9A\u5FA9\u7FD2\u7684\u6700\u5927\u9593\u9694\u6642\u9593\uFF08\u9810\u8A2D\u503C100\u5E74\uFF09\u3002", MAX_INTERVAL_MIN_WARNING: "\u6700\u5927\u9593\u9694\u81F3\u5C11\u70BA1\u5929", MAX_LINK_CONTRIB: "\u6700\u5927\u93C8\u63A5\u8CA2\u737B", MAX_LINK_CONTRIB_DESC: "\u93C8\u63A5\u7B46\u8A18\u7684\u52A0\u6B0A\u638C\u63E1\u7A0B\u5EA6\u5C0D\u539F\u59CB\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5927\u8CA2\u737B\u3002", LOGGING: "\u8A18\u9304\u4E2D", DISPLAY_DEBUG_INFO: "\u5728\u958B\u767C\u8005\u63A7\u5236\u53F0\u4E2D\u986F\u793A\u9664\u932F\u8CC7\u8A0A", DISPLAY_PARSER_DEBUG_INFO: "Display debugging information for the parser on the developer console", // sidebar.ts NOTES_REVIEW_QUEUE: "\u7B46\u8A18\u5FA9\u7FD2\u5E8F\u5217", CLOSE: "\u81E8\u8FD1", NEW: "\u65B0", YESTERDAY: "\u6628\u5929", TODAY: "\u4ECA\u5929", TOMORROW: "\u660E\u5929", // stats-modal.tsx STATS_TITLE: "\u7D71\u8A08", MONTH: "\u6708", QUARTER: "\u5B63", YEAR: "\u5E74", LIFETIME: "\u5168\u90E8", FORECAST: "\u9810\u6E2C", FORECAST_DESC: "\u5C07\u8981\u5230\u671F\u7684\u5361\u7247\u6578\u91CF", SCHEDULED: "\u5DF2\u6392\u7A0B", DAYS: "\u5929", NUMBER_OF_CARDS: "\u5361\u7247\u6578\u91CF", REVIEWS_PER_DAY: "\u5E73\u5747: \u5FA9\u7FD2${avg} /\u5929", INTERVALS: "\u9593\u9694", INTERVALS_DESC: "\u5230\u4E0B\u4E00\u6B21\u5FA9\u7FD2\u7684\u6642\u9593\u9593\u9694", COUNT: "\u8A08\u6578", INTERVALS_SUMMARY: "\u5E73\u5747\u9593\u9694\u6642\u9593: ${avg}, \u6700\u9577\u9593\u9694\u6642\u9593: ${longest}", EASES: "\u638C\u63E1\u7A0B\u5EA6", EASES_SUMMARY: "\u5E73\u5747\u638C\u63E1\u7A0B\u5EA6: ${avgEase}", CARD_TYPES: "\u5361\u7247\u578B\u5225", CARD_TYPES_DESC: "\u5982\u6709\uFF0C\u5C07\u986F\u793A\u96B1\u85CF\u7684\u5361\u7247", CARD_TYPE_NEW: "\u65B0", CARD_TYPE_YOUNG: "\u8F03\u65B0", CARD_TYPE_MATURE: "\u719F\u6089", CARD_TYPES_SUMMARY: "\u7E3D\u5361\u7247\u6578: ${totalCardsCount}" }; // src/lang/helpers.ts var localeMap = { af: af_default, ar: ar_default, bn: bn_default, cs: cz_default, da: da_default, de: de_default, en: en_default, "en-gb": en_gb_default, es: es_default, fr: fr_default, hi: hi_default, id: id_default, it: it_default, ja: ja_default, ko: ko_default, mr: mr_default, nl: nl_default, nn: no_default, pl: pl_default, pt: pt_default, "pt-br": pt_br_default, ro: ro_default, ru: ru_default, sw: sw_default, ta: ta_default, te: te_default, th: th_default, tr: tr_default, uk: uk_default, ur: ur_default, vi: vi_default, "zh-cn": zh_cn_default, "zh-tw": zh_tw_default }; var locale = localeMap[import_obsidian.moment.locale()]; function interpolate(str, params) { const names2 = Object.keys(params); const vals = Object.values(params); return new Function(...names2, `return \`${str}\`;`)(...vals); } function t(str, params) { if (!locale) { console.error(`SRS error: Locale ${import_obsidian.moment.locale()} not found.`); } const result = locale && locale[str] || en_default[str]; if (params) { return interpolate(result, params); } return result; } // src/algorithms/osr/note-scheduling.ts function osrSchedule(response, originalInterval, ease, delayedBeforeReview, settingsObj, dueDateHistogram) { const delayedBeforeReviewDays = Math.max(0, Math.floor(delayedBeforeReview / TICKS_PER_DAY)); let interval = originalInterval; if (response === 0 /* Easy */) { ease += 20; interval = (interval + delayedBeforeReviewDays) * ease / 100; interval *= settingsObj.easyBonus; } else if (response === 1 /* Good */) { interval = (interval + delayedBeforeReviewDays / 2) * ease / 100; } else if (response === 2 /* Hard */) { ease = Math.max(130, ease - 20); interval = Math.max( 1, (interval + delayedBeforeReviewDays / 4) * settingsObj.lapsesIntervalChange ); } if (dueDateHistogram !== void 0) { interval = Math.round(interval); if (interval > 4) { let fuzz = 0; if (interval < 7) fuzz = 1; else if (interval < 30) fuzz = Math.max(2, Math.floor(interval * 0.15)); else fuzz = Math.max(4, Math.floor(interval * 0.05)); const fuzzedInterval = dueDateHistogram.findLeastUsedIntervalOverRange(interval, fuzz); interval = fuzzedInterval; } } interval = Math.min(interval, settingsObj.maximumInterval); interval = Math.round(interval * 10) / 10; return { interval, ease }; } function textInterval(interval, isMobile) { if (interval === void 0) { return t("NEW"); } const m = Math.round(interval / 3.04375) / 10, y = Math.round(interval / 36.525) / 10; if (isMobile) { if (m < 1) return t("DAYS_STR_IVL_MOBILE", { interval }); else if (y < 1) return t("MONTHS_STR_IVL_MOBILE", { interval: m }); else return t("YEARS_STR_IVL_MOBILE", { interval: y }); } else { if (m < 1) return t("DAYS_STR_IVL", { interval }); else if (y < 1) return t("MONTHS_STR_IVL", { interval: m }); else return t("YEARS_STR_IVL", { interval: y }); } } // src/utils/dates.ts var import_moment = __toESM(require_moment()); function formatDate_YYYY_MM_DD(ticks) { return ticks.format(PREFERRED_DATE_FORMAT); } var LiveDateProvider = class { get now() { return (0, import_moment.default)(); } get today() { return (0, import_moment.default)().startOf("day"); } }; var DateUtil = class { static dateStrToMoment(str) { return (0, import_moment.default)(str, ALLOWED_DATE_FORMATS); } }; var globalDateProvider = new LiveDateProvider(); // src/algorithms/base/rep-item-schedule-info.ts var RepItemScheduleInfo = class { get dueDateAsUnix() { return this.dueDate.valueOf(); } isDue() { return this.dueDate && this.dueDate.isSameOrBefore(globalDateProvider.today); } formatDueDate() { return formatDate_YYYY_MM_DD(this.dueDate); } delayedBeforeReviewDaysInt() { return Math.max(0, Math.floor(this.delayedBeforeReviewTicks / TICKS_PER_DAY)); } }; // src/algorithms/osr/rep-item-schedule-info-osr.ts var _RepItemScheduleInfo_Osr = class _RepItemScheduleInfo_Osr extends RepItemScheduleInfo { constructor(dueDate, interval, latestEase, delayedBeforeReviewTicks = null) { super(); this.dueDate = dueDate; this.interval = Math.round(interval); this.latestEase = latestEase; this.delayedBeforeReviewTicks = delayedBeforeReviewTicks; if (dueDate && delayedBeforeReviewTicks == null) { this.delayedBeforeReviewTicks = globalDateProvider.today.valueOf() - dueDate.valueOf(); } } formatCardScheduleForHtmlComment() { const dateStr = this.dueDate ? this.formatDueDate() : _RepItemScheduleInfo_Osr.dummyDueDateForNewCard; return `!${dateStr},${this.interval},${this.latestEase}`; } static get initialInterval() { return 1; } static getDummyScheduleForNewCard(settings) { return _RepItemScheduleInfo_Osr.fromDueDateStr( _RepItemScheduleInfo_Osr.dummyDueDateForNewCard, _RepItemScheduleInfo_Osr.initialInterval, settings.baseEase ); } static fromDueDateStr(dueDateStr, interval, ease, delayedBeforeReviewTicks = null) { const dueDate = DateUtil.dateStrToMoment(dueDateStr); return new _RepItemScheduleInfo_Osr(dueDate, interval, ease, delayedBeforeReviewTicks); } }; // A question can have multiple cards. The schedule info for all sibling cards are formatted together // in a single comment, such as: // // // However, not all sibling cards may have been reviewed. Therefore we need a method of indicating that a particular card // has not been reviewed, and should be considered "new" // This is done by using this magic value for the date _RepItemScheduleInfo_Osr.dummyDueDateForNewCard = "2000-01-01"; var RepItemScheduleInfo_Osr = _RepItemScheduleInfo_Osr; // src/note-ease-list.ts var NoteEaseList = class { constructor(settings) { this.dict = {}; this.settings = settings; } get baseEase() { return this.settings.baseEase; } hasEaseForPath(path2) { return Object.prototype.hasOwnProperty.call(this.dict, path2); } getEaseByPath(path2) { let ease = null; if (this.hasEaseForPath(path2)) { ease = Math.round(this.dict[path2]); } return ease; } setEaseForPath(path2, ease) { this.dict[path2] = ease; } }; // src/algorithms/osr/srs-algorithm-osr.ts var SrsAlgorithm_Osr = class _SrsAlgorithm_Osr { constructor(settings) { this.settings = settings; this.noteEaseList = new NoteEaseList(settings); } static get initialInterval() { return 1; } noteCalcNewSchedule(notePath, osrNoteGraph, response, dueDateNoteHistogram) { const noteLinkStat = osrNoteGraph.calcNoteLinkStat( notePath, this.noteEaseList ); const linkContribution = this.settings.maxLinkFactor * Math.min(1, Math.log(noteLinkStat.totalLinkCount + 0.5) / Math.log(64)); let ease = (1 - linkContribution) * this.settings.baseEase + (noteLinkStat.totalLinkCount > 0 ? linkContribution * noteLinkStat.linkTotal / noteLinkStat.linkPGTotal : linkContribution * this.settings.baseEase); if (this.noteEaseList.hasEaseForPath(notePath)) { ease = (ease + this.noteEaseList.getEaseByPath(notePath)) / 2; } const dueDate = null; const interval = _SrsAlgorithm_Osr.initialInterval; ease = Math.round(ease); const temp = new RepItemScheduleInfo_Osr(dueDate, interval, ease); const result = this.calcSchedule( temp, response, dueDateNoteHistogram ); result.dueDate = (0, import_moment2.default)(globalDateProvider.today.add(result.interval, "d")); return result; } noteOnLoadedNote(path2, note, noteEase) { let flashcardsInNoteAvgEase = null; if (note) { flashcardsInNoteAvgEase = _SrsAlgorithm_Osr.calculateFlashcardAvgEase( note.questionList, this.settings ); } let ease = null; if (flashcardsInNoteAvgEase && noteEase) { ease = (flashcardsInNoteAvgEase + noteEase) / 2; } else { ease = flashcardsInNoteAvgEase ? flashcardsInNoteAvgEase : noteEase; } if (ease) { this.noteEaseList.setEaseForPath(path2, ease); } } static calculateFlashcardAvgEase(questionList, settings) { let totalEase = 0; let scheduledCount = 0; questionList.forEach((question) => { question.cards.filter((card) => card.hasSchedule).forEach((card) => { totalEase += card.scheduleInfo.latestEase; scheduledCount++; }); }); let result = 0; if (scheduledCount > 0) { const flashcardsInNoteAvgEase = totalEase / scheduledCount; const flashcardContribution = Math.min( 1, Math.log(scheduledCount + 0.5) / Math.log(64) ); result = flashcardsInNoteAvgEase * flashcardContribution + settings.baseEase * (1 - flashcardContribution); } return result; } noteCalcUpdatedSchedule(notePath, noteSchedule, response, dueDateNoteHistogram) { const noteScheduleOsr = noteSchedule; const temp = this.calcSchedule( noteScheduleOsr, response, dueDateNoteHistogram ); const interval = temp.interval; const ease = temp.latestEase; const dueDate = (0, import_moment2.default)(globalDateProvider.today.add(interval, "d")); this.noteEaseList.setEaseForPath(notePath, ease); return new RepItemScheduleInfo_Osr(dueDate, interval, ease); } calcSchedule(schedule, response, dueDateHistogram) { const temp = osrSchedule( response, schedule.interval, schedule.latestEase, schedule.delayedBeforeReviewTicks, this.settings, dueDateHistogram ); return new RepItemScheduleInfo_Osr(globalDateProvider.today, temp.interval, temp.ease); } cardGetResetSchedule() { const interval = _SrsAlgorithm_Osr.initialInterval; const ease = this.settings.baseEase; const dueDate = globalDateProvider.today.add(interval, "d"); return new RepItemScheduleInfo_Osr(dueDate, interval, ease); } cardGetNewSchedule(response, notePath, dueDateFlashcardHistogram) { let initial_ease = this.settings.baseEase; if (this.noteEaseList.hasEaseForPath(notePath)) { initial_ease = Math.round(this.noteEaseList.getEaseByPath(notePath)); } const delayBeforeReview = 0; const schedObj = osrSchedule( response, _SrsAlgorithm_Osr.initialInterval, initial_ease, delayBeforeReview, this.settings, dueDateFlashcardHistogram ); const interval = schedObj.interval; const ease = schedObj.ease; const dueDate = globalDateProvider.today.add(interval, "d"); return new RepItemScheduleInfo_Osr(dueDate, interval, ease, delayBeforeReview); } cardCalcUpdatedSchedule(response, cardSchedule, dueDateFlashcardHistogram) { const cardScheduleOsr = cardSchedule; const schedObj = osrSchedule( response, cardScheduleOsr.interval, cardSchedule.latestEase, cardSchedule.delayedBeforeReviewTicks, this.settings, dueDateFlashcardHistogram ); const interval = schedObj.interval; const ease = schedObj.ease; const dueDate = globalDateProvider.today.add(interval, "d"); const delayBeforeReview = 0; return new RepItemScheduleInfo_Osr(dueDate, interval, ease, delayBeforeReview); } }; // src/algorithms/osr/osr-note-graph.ts var graph = __toESM(require_lib()); // node_modules/.pnpm/minimatch@10.0.1/node_modules/minimatch/dist/esm/index.js var import_brace_expansion = __toESM(require_brace_expansion(), 1); // node_modules/.pnpm/minimatch@10.0.1/node_modules/minimatch/dist/esm/assert-valid-pattern.js var MAX_PATTERN_LENGTH = 1024 * 64; var assertValidPattern = (pattern) => { if (typeof pattern !== "string") { throw new TypeError("invalid pattern"); } if (pattern.length > MAX_PATTERN_LENGTH) { throw new TypeError("pattern is too long"); } }; // node_modules/.pnpm/minimatch@10.0.1/node_modules/minimatch/dist/esm/brace-expressions.js var posixClasses = { "[:alnum:]": ["\\p{L}\\p{Nl}\\p{Nd}", true], "[:alpha:]": ["\\p{L}\\p{Nl}", true], "[:ascii:]": ["\\x00-\\x7f", false], "[:blank:]": ["\\p{Zs}\\t", true], "[:cntrl:]": ["\\p{Cc}", true], "[:digit:]": ["\\p{Nd}", true], "[:graph:]": ["\\p{Z}\\p{C}", true, true], "[:lower:]": ["\\p{Ll}", true], "[:print:]": ["\\p{C}", true], "[:punct:]": ["\\p{P}", true], "[:space:]": ["\\p{Z}\\t\\r\\n\\v\\f", true], "[:upper:]": ["\\p{Lu}", true], "[:word:]": ["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}", true], "[:xdigit:]": ["A-Fa-f0-9", false] }; var braceEscape = (s) => s.replace(/[[\]\\-]/g, "\\$&"); var regexpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); var rangesToString = (ranges) => ranges.join(""); var parseClass = (glob, position) => { const pos = position; if (glob.charAt(pos) !== "[") { throw new Error("not in a brace expression"); } const ranges = []; const negs = []; let i = pos + 1; let sawStart = false; let uflag = false; let escaping = false; let negate = false; let endPos = pos; let rangeStart = ""; WHILE: while (i < glob.length) { const c = glob.charAt(i); if ((c === "!" || c === "^") && i === pos + 1) { negate = true; i++; continue; } if (c === "]" && sawStart && !escaping) { endPos = i + 1; break; } sawStart = true; if (c === "\\") { if (!escaping) { escaping = true; i++; continue; } } if (c === "[" && !escaping) { for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) { if (glob.startsWith(cls, i)) { if (rangeStart) { return ["$.", false, glob.length - pos, true]; } i += cls.length; if (neg) negs.push(unip); else ranges.push(unip); uflag = uflag || u; continue WHILE; } } } escaping = false; if (rangeStart) { if (c > rangeStart) { ranges.push(braceEscape(rangeStart) + "-" + braceEscape(c)); } else if (c === rangeStart) { ranges.push(braceEscape(c)); } rangeStart = ""; i++; continue; } if (glob.startsWith("-]", i + 1)) { ranges.push(braceEscape(c + "-")); i += 2; continue; } if (glob.startsWith("-", i + 1)) { rangeStart = c; i += 2; continue; } ranges.push(braceEscape(c)); i++; } if (endPos < i) { return ["", false, 0, false]; } if (!ranges.length && !negs.length) { return ["$.", false, glob.length - pos, true]; } if (negs.length === 0 && ranges.length === 1 && /^\\?.$/.test(ranges[0]) && !negate) { const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]; return [regexpEscape(r), false, endPos - pos, false]; } const sranges = "[" + (negate ? "^" : "") + rangesToString(ranges) + "]"; const snegs = "[" + (negate ? "" : "^") + rangesToString(negs) + "]"; const comb = ranges.length && negs.length ? "(" + sranges + "|" + snegs + ")" : ranges.length ? sranges : snegs; return [comb, uflag, endPos - pos, true]; }; // node_modules/.pnpm/minimatch@10.0.1/node_modules/minimatch/dist/esm/unescape.js var unescape = (s, { windowsPathsNoEscape = false } = {}) => { return windowsPathsNoEscape ? s.replace(/\[([^\/\\])\]/g, "$1") : s.replace(/((?!\\).|^)\[([^\/\\])\]/g, "$1$2").replace(/\\([^\/])/g, "$1"); }; // node_modules/.pnpm/minimatch@10.0.1/node_modules/minimatch/dist/esm/ast.js var types = /* @__PURE__ */ new Set(["!", "?", "+", "*", "@"]); var isExtglobType = (c) => types.has(c); var startNoTraversal = "(?!(?:^|/)\\.\\.?(?:$|/))"; var startNoDot = "(?!\\.)"; var addPatternStart = /* @__PURE__ */ new Set(["[", "."]); var justDots = /* @__PURE__ */ new Set(["..", "."]); var reSpecials = new Set("().*{}+?[]^$\\!"); var regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); var qmark = "[^/]"; var star = qmark + "*?"; var starNoEmpty = qmark + "+?"; var _root, _hasMagic, _uflag, _parts, _parent, _parentIndex, _negs, _filledNegs, _options, _toString, _emptyExt, _AST_instances, fillNegs_fn, _AST_static, parseAST_fn, partsToRegExp_fn, parseGlob_fn; var _AST = class _AST { constructor(type, parent, options2 = {}) { __privateAdd(this, _AST_instances); __publicField(this, "type"); __privateAdd(this, _root); __privateAdd(this, _hasMagic); __privateAdd(this, _uflag, false); __privateAdd(this, _parts, []); __privateAdd(this, _parent); __privateAdd(this, _parentIndex); __privateAdd(this, _negs); __privateAdd(this, _filledNegs, false); __privateAdd(this, _options); __privateAdd(this, _toString); // set to true if it's an extglob with no children // (which really means one child of '') __privateAdd(this, _emptyExt, false); this.type = type; if (type) __privateSet(this, _hasMagic, true); __privateSet(this, _parent, parent); __privateSet(this, _root, __privateGet(this, _parent) ? __privateGet(__privateGet(this, _parent), _root) : this); __privateSet(this, _options, __privateGet(this, _root) === this ? options2 : __privateGet(__privateGet(this, _root), _options)); __privateSet(this, _negs, __privateGet(this, _root) === this ? [] : __privateGet(__privateGet(this, _root), _negs)); if (type === "!" && !__privateGet(__privateGet(this, _root), _filledNegs)) __privateGet(this, _negs).push(this); __privateSet(this, _parentIndex, __privateGet(this, _parent) ? __privateGet(__privateGet(this, _parent), _parts).length : 0); } get hasMagic() { if (__privateGet(this, _hasMagic) !== void 0) return __privateGet(this, _hasMagic); for (const p of __privateGet(this, _parts)) { if (typeof p === "string") continue; if (p.type || p.hasMagic) return __privateSet(this, _hasMagic, true); } return __privateGet(this, _hasMagic); } // reconstructs the pattern toString() { if (__privateGet(this, _toString) !== void 0) return __privateGet(this, _toString); if (!this.type) { return __privateSet(this, _toString, __privateGet(this, _parts).map((p) => String(p)).join("")); } else { return __privateSet(this, _toString, this.type + "(" + __privateGet(this, _parts).map((p) => String(p)).join("|") + ")"); } } push(...parts) { for (const p of parts) { if (p === "") continue; if (typeof p !== "string" && !(p instanceof _AST && __privateGet(p, _parent) === this)) { throw new Error("invalid part: " + p); } __privateGet(this, _parts).push(p); } } toJSON() { var _a2; const ret = this.type === null ? __privateGet(this, _parts).slice().map((p) => typeof p === "string" ? p : p.toJSON()) : [this.type, ...__privateGet(this, _parts).map((p) => p.toJSON())]; if (this.isStart() && !this.type) ret.unshift([]); if (this.isEnd() && (this === __privateGet(this, _root) || __privateGet(__privateGet(this, _root), _filledNegs) && ((_a2 = __privateGet(this, _parent)) == null ? void 0 : _a2.type) === "!")) { ret.push({}); } return ret; } isStart() { var _a2; if (__privateGet(this, _root) === this) return true; if (!((_a2 = __privateGet(this, _parent)) == null ? void 0 : _a2.isStart())) return false; if (__privateGet(this, _parentIndex) === 0) return true; const p = __privateGet(this, _parent); for (let i = 0; i < __privateGet(this, _parentIndex); i++) { const pp = __privateGet(p, _parts)[i]; if (!(pp instanceof _AST && pp.type === "!")) { return false; } } return true; } isEnd() { var _a2, _b, _c; if (__privateGet(this, _root) === this) return true; if (((_a2 = __privateGet(this, _parent)) == null ? void 0 : _a2.type) === "!") return true; if (!((_b = __privateGet(this, _parent)) == null ? void 0 : _b.isEnd())) return false; if (!this.type) return (_c = __privateGet(this, _parent)) == null ? void 0 : _c.isEnd(); const pl = __privateGet(this, _parent) ? __privateGet(__privateGet(this, _parent), _parts).length : 0; return __privateGet(this, _parentIndex) === pl - 1; } copyIn(part) { if (typeof part === "string") this.push(part); else this.push(part.clone(this)); } clone(parent) { const c = new _AST(this.type, parent); for (const p of __privateGet(this, _parts)) { c.copyIn(p); } return c; } static fromGlob(pattern, options2 = {}) { var _a2; const ast2 = new _AST(null, void 0, options2); __privateMethod(_a2 = _AST, _AST_static, parseAST_fn).call(_a2, pattern, ast2, 0, options2); return ast2; } // returns the regular expression if there's magic, or the unescaped // string if not. toMMPattern() { if (this !== __privateGet(this, _root)) return __privateGet(this, _root).toMMPattern(); const glob = this.toString(); const [re, body, hasMagic, uflag] = this.toRegExpSource(); const anyMagic = hasMagic || __privateGet(this, _hasMagic) || __privateGet(this, _options).nocase && !__privateGet(this, _options).nocaseMagicOnly && glob.toUpperCase() !== glob.toLowerCase(); if (!anyMagic) { return body; } const flags = (__privateGet(this, _options).nocase ? "i" : "") + (uflag ? "u" : ""); return Object.assign(new RegExp(`^${re}$`, flags), { _src: re, _glob: glob }); } get options() { return __privateGet(this, _options); } // returns the string match, the regexp source, whether there's magic // in the regexp (so a regular expression is required) and whether or // not the uflag is needed for the regular expression (for posix classes) // TODO: instead of injecting the start/end at this point, just return // the BODY of the regexp, along with the start/end portions suitable // for binding the start/end in either a joined full-path makeRe context // (where we bind to (^|/), or a standalone matchPart context (where // we bind to ^, and not /). Otherwise slashes get duped! // // In part-matching mode, the start is: // - if not isStart: nothing // - if traversal possible, but not allowed: ^(?!\.\.?$) // - if dots allowed or not possible: ^ // - if dots possible and not allowed: ^(?!\.) // end is: // - if not isEnd(): nothing // - else: $ // // In full-path matching mode, we put the slash at the START of the // pattern, so start is: // - if first pattern: same as part-matching mode // - if not isStart(): nothing // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/)) // - if dots allowed or not possible: / // - if dots possible and not allowed: /(?!\.) // end is: // - if last pattern, same as part-matching mode // - else nothing // // Always put the (?:$|/) on negated tails, though, because that has to be // there to bind the end of the negated pattern portion, and it's easier to // just stick it in now rather than try to inject it later in the middle of // the pattern. // // We can just always return the same end, and leave it up to the caller // to know whether it's going to be used joined or in parts. // And, if the start is adjusted slightly, can do the same there: // - if not isStart: nothing // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$) // - if dots allowed or not possible: (?:/|^) // - if dots possible and not allowed: (?:/|^)(?!\.) // // But it's better to have a simpler binding without a conditional, for // performance, so probably better to return both start options. // // Then the caller just ignores the end if it's not the first pattern, // and the start always gets applied. // // But that's always going to be $ if it's the ending pattern, or nothing, // so the caller can just attach $ at the end of the pattern when building. // // So the todo is: // - better detect what kind of start is needed // - return both flavors of starting pattern // - attach $ at the end of the pattern when creating the actual RegExp // // Ah, but wait, no, that all only applies to the root when the first pattern // is not an extglob. If the first pattern IS an extglob, then we need all // that dot prevention biz to live in the extglob portions, because eg // +(*|.x*) can match .xy but not .yx. // // So, return the two flavors if it's #root and the first child is not an // AST, otherwise leave it to the child AST to handle it, and there, // use the (?:^|/) style of start binding. // // Even simplified further: // - Since the start for a join is eg /(?!\.) and the start for a part // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root // or start or whatever) and prepend ^ or / at the Regexp construction. toRegExpSource(allowDot) { var _a2; const dot = allowDot != null ? allowDot : !!__privateGet(this, _options).dot; if (__privateGet(this, _root) === this) __privateMethod(this, _AST_instances, fillNegs_fn).call(this); if (!this.type) { const noEmpty = this.isStart() && this.isEnd(); const src = __privateGet(this, _parts).map((p) => { var _a3; const [re, _, hasMagic, uflag] = typeof p === "string" ? __privateMethod(_a3 = _AST, _AST_static, parseGlob_fn).call(_a3, p, __privateGet(this, _hasMagic), noEmpty) : p.toRegExpSource(allowDot); __privateSet(this, _hasMagic, __privateGet(this, _hasMagic) || hasMagic); __privateSet(this, _uflag, __privateGet(this, _uflag) || uflag); return re; }).join(""); let start2 = ""; if (this.isStart()) { if (typeof __privateGet(this, _parts)[0] === "string") { const dotTravAllowed = __privateGet(this, _parts).length === 1 && justDots.has(__privateGet(this, _parts)[0]); if (!dotTravAllowed) { const aps = addPatternStart; const needNoTrav = ( // dots are allowed, and the pattern starts with [ or . dot && aps.has(src.charAt(0)) || // the pattern starts with \., and then [ or . src.startsWith("\\.") && aps.has(src.charAt(2)) || // the pattern starts with \.\., and then [ or . src.startsWith("\\.\\.") && aps.has(src.charAt(4)) ); const needNoDot = !dot && !allowDot && aps.has(src.charAt(0)); start2 = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : ""; } } } let end = ""; if (this.isEnd() && __privateGet(__privateGet(this, _root), _filledNegs) && ((_a2 = __privateGet(this, _parent)) == null ? void 0 : _a2.type) === "!") { end = "(?:$|\\/)"; } const final2 = start2 + src + end; return [ final2, unescape(src), __privateSet(this, _hasMagic, !!__privateGet(this, _hasMagic)), __privateGet(this, _uflag) ]; } const repeated = this.type === "*" || this.type === "+"; const start = this.type === "!" ? "(?:(?!(?:" : "(?:"; let body = __privateMethod(this, _AST_instances, partsToRegExp_fn).call(this, dot); if (this.isStart() && this.isEnd() && !body && this.type !== "!") { const s = this.toString(); __privateSet(this, _parts, [s]); this.type = null; __privateSet(this, _hasMagic, void 0); return [s, unescape(this.toString()), false, false]; } let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot ? "" : __privateMethod(this, _AST_instances, partsToRegExp_fn).call(this, true); if (bodyDotAllowed === body) { bodyDotAllowed = ""; } if (bodyDotAllowed) { body = `(?:${body})(?:${bodyDotAllowed})*?`; } let final = ""; if (this.type === "!" && __privateGet(this, _emptyExt)) { final = (this.isStart() && !dot ? startNoDot : "") + starNoEmpty; } else { const close = this.type === "!" ? ( // !() must match something,but !(x) can match '' "))" + (this.isStart() && !dot && !allowDot ? startNoDot : "") + star + ")" ) : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && bodyDotAllowed ? ")" : this.type === "*" && bodyDotAllowed ? `)?` : `)${this.type}`; final = start + body + close; } return [ final, unescape(body), __privateSet(this, _hasMagic, !!__privateGet(this, _hasMagic)), __privateGet(this, _uflag) ]; } }; _root = new WeakMap(); _hasMagic = new WeakMap(); _uflag = new WeakMap(); _parts = new WeakMap(); _parent = new WeakMap(); _parentIndex = new WeakMap(); _negs = new WeakMap(); _filledNegs = new WeakMap(); _options = new WeakMap(); _toString = new WeakMap(); _emptyExt = new WeakMap(); _AST_instances = new WeakSet(); fillNegs_fn = function() { if (this !== __privateGet(this, _root)) throw new Error("should only call on root"); if (__privateGet(this, _filledNegs)) return this; this.toString(); __privateSet(this, _filledNegs, true); let n; while (n = __privateGet(this, _negs).pop()) { if (n.type !== "!") continue; let p = n; let pp = __privateGet(p, _parent); while (pp) { for (let i = __privateGet(p, _parentIndex) + 1; !pp.type && i < __privateGet(pp, _parts).length; i++) { for (const part of __privateGet(n, _parts)) { if (typeof part === "string") { throw new Error("string part in extglob AST??"); } part.copyIn(__privateGet(pp, _parts)[i]); } } p = pp; pp = __privateGet(p, _parent); } } return this; }; _AST_static = new WeakSet(); parseAST_fn = function(str, ast2, pos, opt) { var _a2, _b; let escaping = false; let inBrace = false; let braceStart = -1; let braceNeg = false; if (ast2.type === null) { let i2 = pos; let acc2 = ""; while (i2 < str.length) { const c = str.charAt(i2++); if (escaping || c === "\\") { escaping = !escaping; acc2 += c; continue; } if (inBrace) { if (i2 === braceStart + 1) { if (c === "^" || c === "!") { braceNeg = true; } } else if (c === "]" && !(i2 === braceStart + 2 && braceNeg)) { inBrace = false; } acc2 += c; continue; } else if (c === "[") { inBrace = true; braceStart = i2; braceNeg = false; acc2 += c; continue; } if (!opt.noext && isExtglobType(c) && str.charAt(i2) === "(") { ast2.push(acc2); acc2 = ""; const ext2 = new _AST(c, ast2); i2 = __privateMethod(_a2 = _AST, _AST_static, parseAST_fn).call(_a2, str, ext2, i2, opt); ast2.push(ext2); continue; } acc2 += c; } ast2.push(acc2); return i2; } let i = pos + 1; let part = new _AST(null, ast2); const parts = []; let acc = ""; while (i < str.length) { const c = str.charAt(i++); if (escaping || c === "\\") { escaping = !escaping; acc += c; continue; } if (inBrace) { if (i === braceStart + 1) { if (c === "^" || c === "!") { braceNeg = true; } } else if (c === "]" && !(i === braceStart + 2 && braceNeg)) { inBrace = false; } acc += c; continue; } else if (c === "[") { inBrace = true; braceStart = i; braceNeg = false; acc += c; continue; } if (isExtglobType(c) && str.charAt(i) === "(") { part.push(acc); acc = ""; const ext2 = new _AST(c, part); part.push(ext2); i = __privateMethod(_b = _AST, _AST_static, parseAST_fn).call(_b, str, ext2, i, opt); continue; } if (c === "|") { part.push(acc); acc = ""; parts.push(part); part = new _AST(null, ast2); continue; } if (c === ")") { if (acc === "" && __privateGet(ast2, _parts).length === 0) { __privateSet(ast2, _emptyExt, true); } part.push(acc); acc = ""; ast2.push(...parts, part); return i; } acc += c; } ast2.type = null; __privateSet(ast2, _hasMagic, void 0); __privateSet(ast2, _parts, [str.substring(pos - 1)]); return i; }; partsToRegExp_fn = function(dot) { return __privateGet(this, _parts).map((p) => { if (typeof p === "string") { throw new Error("string type in extglob ast??"); } const [re, _, _hasMagic2, uflag] = p.toRegExpSource(dot); __privateSet(this, _uflag, __privateGet(this, _uflag) || uflag); return re; }).filter((p) => !(this.isStart() && this.isEnd()) || !!p).join("|"); }; parseGlob_fn = function(glob, hasMagic, noEmpty = false) { let escaping = false; let re = ""; let uflag = false; for (let i = 0; i < glob.length; i++) { const c = glob.charAt(i); if (escaping) { escaping = false; re += (reSpecials.has(c) ? "\\" : "") + c; continue; } if (c === "\\") { if (i === glob.length - 1) { re += "\\\\"; } else { escaping = true; } continue; } if (c === "[") { const [src, needUflag, consumed, magic] = parseClass(glob, i); if (consumed) { re += src; uflag = uflag || needUflag; i += consumed - 1; hasMagic = hasMagic || magic; continue; } } if (c === "*") { if (noEmpty && glob === "*") re += starNoEmpty; else re += star; hasMagic = true; continue; } if (c === "?") { re += qmark; hasMagic = true; continue; } re += regExpEscape(c); } return [re, unescape(glob), !!hasMagic, uflag]; }; __privateAdd(_AST, _AST_static); var AST = _AST; // node_modules/.pnpm/minimatch@10.0.1/node_modules/minimatch/dist/esm/escape.js var escape = (s, { windowsPathsNoEscape = false } = {}) => { return windowsPathsNoEscape ? s.replace(/[?*()[\]]/g, "[$&]") : s.replace(/[?*()[\]\\]/g, "\\$&"); }; // node_modules/.pnpm/minimatch@10.0.1/node_modules/minimatch/dist/esm/index.js var minimatch = (p, pattern, options2 = {}) => { assertValidPattern(pattern); if (!options2.nocomment && pattern.charAt(0) === "#") { return false; } return new Minimatch(pattern, options2).match(p); }; var starDotExtRE = /^\*+([^+@!?\*\[\(]*)$/; var starDotExtTest = (ext2) => (f) => !f.startsWith(".") && f.endsWith(ext2); var starDotExtTestDot = (ext2) => (f) => f.endsWith(ext2); var starDotExtTestNocase = (ext2) => { ext2 = ext2.toLowerCase(); return (f) => !f.startsWith(".") && f.toLowerCase().endsWith(ext2); }; var starDotExtTestNocaseDot = (ext2) => { ext2 = ext2.toLowerCase(); return (f) => f.toLowerCase().endsWith(ext2); }; var starDotStarRE = /^\*+\.\*+$/; var starDotStarTest = (f) => !f.startsWith(".") && f.includes("."); var starDotStarTestDot = (f) => f !== "." && f !== ".." && f.includes("."); var dotStarRE = /^\.\*+$/; var dotStarTest = (f) => f !== "." && f !== ".." && f.startsWith("."); var starRE = /^\*+$/; var starTest = (f) => f.length !== 0 && !f.startsWith("."); var starTestDot = (f) => f.length !== 0 && f !== "." && f !== ".."; var qmarksRE = /^\?+([^+@!?\*\[\(]*)?$/; var qmarksTestNocase = ([$0, ext2 = ""]) => { const noext = qmarksTestNoExt([$0]); if (!ext2) return noext; ext2 = ext2.toLowerCase(); return (f) => noext(f) && f.toLowerCase().endsWith(ext2); }; var qmarksTestNocaseDot = ([$0, ext2 = ""]) => { const noext = qmarksTestNoExtDot([$0]); if (!ext2) return noext; ext2 = ext2.toLowerCase(); return (f) => noext(f) && f.toLowerCase().endsWith(ext2); }; var qmarksTestDot = ([$0, ext2 = ""]) => { const noext = qmarksTestNoExtDot([$0]); return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2); }; var qmarksTest = ([$0, ext2 = ""]) => { const noext = qmarksTestNoExt([$0]); return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2); }; var qmarksTestNoExt = ([$0]) => { const len = $0.length; return (f) => f.length === len && !f.startsWith("."); }; var qmarksTestNoExtDot = ([$0]) => { const len = $0.length; return (f) => f.length === len && f !== "." && f !== ".."; }; var defaultPlatform = typeof process === "object" && process ? typeof process.env === "object" && process.env && process.env.__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix"; var path = { win32: { sep: "\\" }, posix: { sep: "/" } }; var sep = defaultPlatform === "win32" ? path.win32.sep : path.posix.sep; minimatch.sep = sep; var GLOBSTAR = Symbol("globstar **"); minimatch.GLOBSTAR = GLOBSTAR; var qmark2 = "[^/]"; var star2 = qmark2 + "*?"; var twoStarDot = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?"; var twoStarNoDot = "(?:(?!(?:\\/|^)\\.).)*?"; var filter = (pattern, options2 = {}) => (p) => minimatch(p, pattern, options2); minimatch.filter = filter; var ext = (a, b = {}) => Object.assign({}, a, b); var defaults = (def) => { if (!def || typeof def !== "object" || !Object.keys(def).length) { return minimatch; } const orig = minimatch; const m = (p, pattern, options2 = {}) => orig(p, pattern, ext(def, options2)); return Object.assign(m, { Minimatch: class Minimatch extends orig.Minimatch { constructor(pattern, options2 = {}) { super(pattern, ext(def, options2)); } static defaults(options2) { return orig.defaults(ext(def, options2)).Minimatch; } }, AST: class AST extends orig.AST { /* c8 ignore start */ constructor(type, parent, options2 = {}) { super(type, parent, ext(def, options2)); } /* c8 ignore stop */ static fromGlob(pattern, options2 = {}) { return orig.AST.fromGlob(pattern, ext(def, options2)); } }, unescape: (s, options2 = {}) => orig.unescape(s, ext(def, options2)), escape: (s, options2 = {}) => orig.escape(s, ext(def, options2)), filter: (pattern, options2 = {}) => orig.filter(pattern, ext(def, options2)), defaults: (options2) => orig.defaults(ext(def, options2)), makeRe: (pattern, options2 = {}) => orig.makeRe(pattern, ext(def, options2)), braceExpand: (pattern, options2 = {}) => orig.braceExpand(pattern, ext(def, options2)), match: (list, pattern, options2 = {}) => orig.match(list, pattern, ext(def, options2)), sep: orig.sep, GLOBSTAR }); }; minimatch.defaults = defaults; var braceExpand = (pattern, options2 = {}) => { assertValidPattern(pattern); if (options2.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { return [pattern]; } return (0, import_brace_expansion.default)(pattern); }; minimatch.braceExpand = braceExpand; var makeRe = (pattern, options2 = {}) => new Minimatch(pattern, options2).makeRe(); minimatch.makeRe = makeRe; var match = (list, pattern, options2 = {}) => { const mm = new Minimatch(pattern, options2); list = list.filter((f) => mm.match(f)); if (mm.options.nonull && !list.length) { list.push(pattern); } return list; }; minimatch.match = match; var globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/; var regExpEscape2 = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); var Minimatch = class { constructor(pattern, options2 = {}) { __publicField(this, "options"); __publicField(this, "set"); __publicField(this, "pattern"); __publicField(this, "windowsPathsNoEscape"); __publicField(this, "nonegate"); __publicField(this, "negate"); __publicField(this, "comment"); __publicField(this, "empty"); __publicField(this, "preserveMultipleSlashes"); __publicField(this, "partial"); __publicField(this, "globSet"); __publicField(this, "globParts"); __publicField(this, "nocase"); __publicField(this, "isWindows"); __publicField(this, "platform"); __publicField(this, "windowsNoMagicRoot"); __publicField(this, "regexp"); assertValidPattern(pattern); options2 = options2 || {}; this.options = options2; this.pattern = pattern; this.platform = options2.platform || defaultPlatform; this.isWindows = this.platform === "win32"; this.windowsPathsNoEscape = !!options2.windowsPathsNoEscape || options2.allowWindowsEscape === false; if (this.windowsPathsNoEscape) { this.pattern = this.pattern.replace(/\\/g, "/"); } this.preserveMultipleSlashes = !!options2.preserveMultipleSlashes; this.regexp = null; this.negate = false; this.nonegate = !!options2.nonegate; this.comment = false; this.empty = false; this.partial = !!options2.partial; this.nocase = !!this.options.nocase; this.windowsNoMagicRoot = options2.windowsNoMagicRoot !== void 0 ? options2.windowsNoMagicRoot : !!(this.isWindows && this.nocase); this.globSet = []; this.globParts = []; this.set = []; this.make(); } hasMagic() { if (this.options.magicalBraces && this.set.length > 1) { return true; } for (const pattern of this.set) { for (const part of pattern) { if (typeof part !== "string") return true; } } return false; } debug(..._) { } make() { const pattern = this.pattern; const options2 = this.options; if (!options2.nocomment && pattern.charAt(0) === "#") { this.comment = true; return; } if (!pattern) { this.empty = true; return; } this.parseNegate(); this.globSet = [...new Set(this.braceExpand())]; if (options2.debug) { this.debug = (...args) => console.error(...args); } this.debug(this.pattern, this.globSet); const rawGlobParts = this.globSet.map((s) => this.slashSplit(s)); this.globParts = this.preprocess(rawGlobParts); this.debug(this.pattern, this.globParts); let set2 = this.globParts.map((s, _, __) => { if (this.isWindows && this.windowsNoMagicRoot) { const isUNC = s[0] === "" && s[1] === "" && (s[2] === "?" || !globMagic.test(s[2])) && !globMagic.test(s[3]); const isDrive = /^[a-z]:/i.test(s[0]); if (isUNC) { return [...s.slice(0, 4), ...s.slice(4).map((ss) => this.parse(ss))]; } else if (isDrive) { return [s[0], ...s.slice(1).map((ss) => this.parse(ss))]; } } return s.map((ss) => this.parse(ss)); }); this.debug(this.pattern, set2); this.set = set2.filter((s) => s.indexOf(false) === -1); if (this.isWindows) { for (let i = 0; i < this.set.length; i++) { const p = this.set[i]; if (p[0] === "" && p[1] === "" && this.globParts[i][2] === "?" && typeof p[3] === "string" && /^[a-z]:$/i.test(p[3])) { p[2] = "?"; } } } this.debug(this.pattern, this.set); } // various transforms to equivalent pattern sets that are // faster to process in a filesystem walk. The goal is to // eliminate what we can, and push all ** patterns as far // to the right as possible, even if it increases the number // of patterns that we have to process. preprocess(globParts) { if (this.options.noglobstar) { for (let i = 0; i < globParts.length; i++) { for (let j = 0; j < globParts[i].length; j++) { if (globParts[i][j] === "**") { globParts[i][j] = "*"; } } } } const { optimizationLevel = 1 } = this.options; if (optimizationLevel >= 2) { globParts = this.firstPhasePreProcess(globParts); globParts = this.secondPhasePreProcess(globParts); } else if (optimizationLevel >= 1) { globParts = this.levelOneOptimize(globParts); } else { globParts = this.adjascentGlobstarOptimize(globParts); } return globParts; } // just get rid of adjascent ** portions adjascentGlobstarOptimize(globParts) { return globParts.map((parts) => { let gs = -1; while (-1 !== (gs = parts.indexOf("**", gs + 1))) { let i = gs; while (parts[i + 1] === "**") { i++; } if (i !== gs) { parts.splice(gs, i - gs); } } return parts; }); } // get rid of adjascent ** and resolve .. portions levelOneOptimize(globParts) { return globParts.map((parts) => { parts = parts.reduce((set2, part) => { const prev = set2[set2.length - 1]; if (part === "**" && prev === "**") { return set2; } if (part === "..") { if (prev && prev !== ".." && prev !== "." && prev !== "**") { set2.pop(); return set2; } } set2.push(part); return set2; }, []); return parts.length === 0 ? [""] : parts; }); } levelTwoFileOptimize(parts) { if (!Array.isArray(parts)) { parts = this.slashSplit(parts); } let didSomething = false; do { didSomething = false; if (!this.preserveMultipleSlashes) { for (let i = 1; i < parts.length - 1; i++) { const p = parts[i]; if (i === 1 && p === "" && parts[0] === "") continue; if (p === "." || p === "") { didSomething = true; parts.splice(i, 1); i--; } } if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) { didSomething = true; parts.pop(); } } let dd = 0; while (-1 !== (dd = parts.indexOf("..", dd + 1))) { const p = parts[dd - 1]; if (p && p !== "." && p !== ".." && p !== "**") { didSomething = true; parts.splice(dd - 1, 2); dd -= 2; } } } while (didSomething); return parts.length === 0 ? [""] : parts; } // First phase: single-pattern processing //
 is 1 or more portions
  //  is 1 or more portions
  // 

is any portion other than ., .., '', or ** // is . or '' // // **/.. is *brutal* for filesystem walking performance, because // it effectively resets the recursive walk each time it occurs, // and ** cannot be reduced out by a .. pattern part like a regexp // or most strings (other than .., ., and '') can be. // //

/**/../

/

/ -> {

/../

/

/,

/**/

/

/} //

// -> 
/
  // 
/

/../ ->

/
  // **/**/ -> **/
  //
  // **/*/ -> */**/ <== not valid because ** doesn't follow
  // this WOULD be allowed if ** did follow symlinks, or * didn't
  firstPhasePreProcess(globParts) {
    let didSomething = false;
    do {
      didSomething = false;
      for (let parts of globParts) {
        let gs = -1;
        while (-1 !== (gs = parts.indexOf("**", gs + 1))) {
          let gss = gs;
          while (parts[gss + 1] === "**") {
            gss++;
          }
          if (gss > gs) {
            parts.splice(gs + 1, gss - gs);
          }
          let next = parts[gs + 1];
          const p = parts[gs + 2];
          const p2 = parts[gs + 3];
          if (next !== "..")
            continue;
          if (!p || p === "." || p === ".." || !p2 || p2 === "." || p2 === "..") {
            continue;
          }
          didSomething = true;
          parts.splice(gs, 1);
          const other = parts.slice(0);
          other[gs] = "**";
          globParts.push(other);
          gs--;
        }
        if (!this.preserveMultipleSlashes) {
          for (let i = 1; i < parts.length - 1; i++) {
            const p = parts[i];
            if (i === 1 && p === "" && parts[0] === "")
              continue;
            if (p === "." || p === "") {
              didSomething = true;
              parts.splice(i, 1);
              i--;
            }
          }
          if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) {
            didSomething = true;
            parts.pop();
          }
        }
        let dd = 0;
        while (-1 !== (dd = parts.indexOf("..", dd + 1))) {
          const p = parts[dd - 1];
          if (p && p !== "." && p !== ".." && p !== "**") {
            didSomething = true;
            const needDot = dd === 1 && parts[dd + 1] === "**";
            const splin = needDot ? ["."] : [];
            parts.splice(dd - 1, 2, ...splin);
            if (parts.length === 0)
              parts.push("");
            dd -= 2;
          }
        }
      }
    } while (didSomething);
    return globParts;
  }
  // second phase: multi-pattern dedupes
  // {
/*/,
/

/} ->

/*/
  // {
/,
/} -> 
/
  // {
/**/,
/} -> 
/**/
  //
  // {
/**/,
/**/

/} ->

/**/
  // ^-- not valid because ** doens't follow symlinks
  secondPhasePreProcess(globParts) {
    for (let i = 0; i < globParts.length - 1; i++) {
      for (let j = i + 1; j < globParts.length; j++) {
        const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);
        if (matched) {
          globParts[i] = [];
          globParts[j] = matched;
          break;
        }
      }
    }
    return globParts.filter((gs) => gs.length);
  }
  partsMatch(a, b, emptyGSMatch = false) {
    let ai = 0;
    let bi = 0;
    let result = [];
    let which = "";
    while (ai < a.length && bi < b.length) {
      if (a[ai] === b[bi]) {
        result.push(which === "b" ? b[bi] : a[ai]);
        ai++;
        bi++;
      } else if (emptyGSMatch && a[ai] === "**" && b[bi] === a[ai + 1]) {
        result.push(a[ai]);
        ai++;
      } else if (emptyGSMatch && b[bi] === "**" && a[ai] === b[bi + 1]) {
        result.push(b[bi]);
        bi++;
      } else if (a[ai] === "*" && b[bi] && (this.options.dot || !b[bi].startsWith(".")) && b[bi] !== "**") {
        if (which === "b")
          return false;
        which = "a";
        result.push(a[ai]);
        ai++;
        bi++;
      } else if (b[bi] === "*" && a[ai] && (this.options.dot || !a[ai].startsWith(".")) && a[ai] !== "**") {
        if (which === "a")
          return false;
        which = "b";
        result.push(b[bi]);
        ai++;
        bi++;
      } else {
        return false;
      }
    }
    return a.length === b.length && result;
  }
  parseNegate() {
    if (this.nonegate)
      return;
    const pattern = this.pattern;
    let negate = false;
    let negateOffset = 0;
    for (let i = 0; i < pattern.length && pattern.charAt(i) === "!"; i++) {
      negate = !negate;
      negateOffset++;
    }
    if (negateOffset)
      this.pattern = pattern.slice(negateOffset);
    this.negate = negate;
  }
  // set partial to true to test if, for example,
  // "/a/b" matches the start of "/*/b/*/d"
  // Partial means, if you run out of file before you run
  // out of pattern, then that's fine, as long as all
  // the parts match.
  matchOne(file, pattern, partial = false) {
    const options2 = this.options;
    if (this.isWindows) {
      const fileDrive = typeof file[0] === "string" && /^[a-z]:$/i.test(file[0]);
      const fileUNC = !fileDrive && file[0] === "" && file[1] === "" && file[2] === "?" && /^[a-z]:$/i.test(file[3]);
      const patternDrive = typeof pattern[0] === "string" && /^[a-z]:$/i.test(pattern[0]);
      const patternUNC = !patternDrive && pattern[0] === "" && pattern[1] === "" && pattern[2] === "?" && typeof pattern[3] === "string" && /^[a-z]:$/i.test(pattern[3]);
      const fdi = fileUNC ? 3 : fileDrive ? 0 : void 0;
      const pdi = patternUNC ? 3 : patternDrive ? 0 : void 0;
      if (typeof fdi === "number" && typeof pdi === "number") {
        const [fd, pd] = [file[fdi], pattern[pdi]];
        if (fd.toLowerCase() === pd.toLowerCase()) {
          pattern[pdi] = fd;
          if (pdi > fdi) {
            pattern = pattern.slice(pdi);
          } else if (fdi > pdi) {
            file = file.slice(fdi);
          }
        }
      }
    }
    const { optimizationLevel = 1 } = this.options;
    if (optimizationLevel >= 2) {
      file = this.levelTwoFileOptimize(file);
    }
    this.debug("matchOne", this, { file, pattern });
    this.debug("matchOne", file.length, pattern.length);
    for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {
      this.debug("matchOne loop");
      var p = pattern[pi];
      var f = file[fi];
      this.debug(pattern, p, f);
      if (p === false) {
        return false;
      }
      if (p === GLOBSTAR) {
        this.debug("GLOBSTAR", [pattern, p, f]);
        var fr = fi;
        var pr = pi + 1;
        if (pr === pl) {
          this.debug("** at the end");
          for (; fi < fl; fi++) {
            if (file[fi] === "." || file[fi] === ".." || !options2.dot && file[fi].charAt(0) === ".")
              return false;
          }
          return true;
        }
        while (fr < fl) {
          var swallowee = file[fr];
          this.debug("\nglobstar while", file, fr, pattern, pr, swallowee);
          if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
            this.debug("globstar found match!", fr, fl, swallowee);
            return true;
          } else {
            if (swallowee === "." || swallowee === ".." || !options2.dot && swallowee.charAt(0) === ".") {
              this.debug("dot detected!", file, fr, pattern, pr);
              break;
            }
            this.debug("globstar swallow a segment, and continue");
            fr++;
          }
        }
        if (partial) {
          this.debug("\n>>> no match, partial?", file, fr, pattern, pr);
          if (fr === fl) {
            return true;
          }
        }
        return false;
      }
      let hit;
      if (typeof p === "string") {
        hit = f === p;
        this.debug("string match", p, f, hit);
      } else {
        hit = p.test(f);
        this.debug("pattern match", p, f, hit);
      }
      if (!hit)
        return false;
    }
    if (fi === fl && pi === pl) {
      return true;
    } else if (fi === fl) {
      return partial;
    } else if (pi === pl) {
      return fi === fl - 1 && file[fi] === "";
    } else {
      throw new Error("wtf?");
    }
  }
  braceExpand() {
    return braceExpand(this.pattern, this.options);
  }
  parse(pattern) {
    assertValidPattern(pattern);
    const options2 = this.options;
    if (pattern === "**")
      return GLOBSTAR;
    if (pattern === "")
      return "";
    let m;
    let fastTest = null;
    if (m = pattern.match(starRE)) {
      fastTest = options2.dot ? starTestDot : starTest;
    } else if (m = pattern.match(starDotExtRE)) {
      fastTest = (options2.nocase ? options2.dot ? starDotExtTestNocaseDot : starDotExtTestNocase : options2.dot ? starDotExtTestDot : starDotExtTest)(m[1]);
    } else if (m = pattern.match(qmarksRE)) {
      fastTest = (options2.nocase ? options2.dot ? qmarksTestNocaseDot : qmarksTestNocase : options2.dot ? qmarksTestDot : qmarksTest)(m);
    } else if (m = pattern.match(starDotStarRE)) {
      fastTest = options2.dot ? starDotStarTestDot : starDotStarTest;
    } else if (m = pattern.match(dotStarRE)) {
      fastTest = dotStarTest;
    }
    const re = AST.fromGlob(pattern, this.options).toMMPattern();
    if (fastTest && typeof re === "object") {
      Reflect.defineProperty(re, "test", { value: fastTest });
    }
    return re;
  }
  makeRe() {
    if (this.regexp || this.regexp === false)
      return this.regexp;
    const set2 = this.set;
    if (!set2.length) {
      this.regexp = false;
      return this.regexp;
    }
    const options2 = this.options;
    const twoStar = options2.noglobstar ? star2 : options2.dot ? twoStarDot : twoStarNoDot;
    const flags = new Set(options2.nocase ? ["i"] : []);
    let re = set2.map((pattern) => {
      const pp = pattern.map((p) => {
        if (p instanceof RegExp) {
          for (const f of p.flags.split(""))
            flags.add(f);
        }
        return typeof p === "string" ? regExpEscape2(p) : p === GLOBSTAR ? GLOBSTAR : p._src;
      });
      pp.forEach((p, i) => {
        const next = pp[i + 1];
        const prev = pp[i - 1];
        if (p !== GLOBSTAR || prev === GLOBSTAR) {
          return;
        }
        if (prev === void 0) {
          if (next !== void 0 && next !== GLOBSTAR) {
            pp[i + 1] = "(?:\\/|" + twoStar + "\\/)?" + next;
          } else {
            pp[i] = twoStar;
          }
        } else if (next === void 0) {
          pp[i - 1] = prev + "(?:\\/|" + twoStar + ")?";
        } else if (next !== GLOBSTAR) {
          pp[i - 1] = prev + "(?:\\/|\\/" + twoStar + "\\/)" + next;
          pp[i + 1] = GLOBSTAR;
        }
      });
      return pp.filter((p) => p !== GLOBSTAR).join("/");
    }).join("|");
    const [open, close] = set2.length > 1 ? ["(?:", ")"] : ["", ""];
    re = "^" + open + re + close + "$";
    if (this.negate)
      re = "^(?!" + re + ").+$";
    try {
      this.regexp = new RegExp(re, [...flags].join(""));
    } catch (ex) {
      this.regexp = false;
    }
    return this.regexp;
  }
  slashSplit(p) {
    if (this.preserveMultipleSlashes) {
      return p.split("/");
    } else if (this.isWindows && /^\/\/[^\/]+/.test(p)) {
      return ["", ...p.split(/\/+/)];
    } else {
      return p.split(/\/+/);
    }
  }
  match(f, partial = this.partial) {
    this.debug("match", f, this.pattern);
    if (this.comment) {
      return false;
    }
    if (this.empty) {
      return f === "";
    }
    if (f === "/" && partial) {
      return true;
    }
    const options2 = this.options;
    if (this.isWindows) {
      f = f.split("\\").join("/");
    }
    const ff = this.slashSplit(f);
    this.debug(this.pattern, "split", ff);
    const set2 = this.set;
    this.debug(this.pattern, "set", set2);
    let filename = ff[ff.length - 1];
    if (!filename) {
      for (let i = ff.length - 2; !filename && i >= 0; i--) {
        filename = ff[i];
      }
    }
    for (let i = 0; i < set2.length; i++) {
      const pattern = set2[i];
      let file = ff;
      if (options2.matchBase && pattern.length === 1) {
        file = [filename];
      }
      const hit = this.matchOne(file, pattern, partial);
      if (hit) {
        if (options2.flipNegate) {
          return true;
        }
        return !this.negate;
      }
    }
    if (options2.flipNegate) {
      return false;
    }
    return this.negate;
  }
  static defaults(def) {
    return minimatch.defaults(def).Minimatch;
  }
};
minimatch.AST = AST;
minimatch.Minimatch = Minimatch;
minimatch.escape = escape;
minimatch.unescape = unescape;

// src/utils/fs.ts
function isSupportedFileType(path2) {
  return path2.split(".").pop().toLowerCase() === "md";
}
function pathMatchesPattern(path2, pattern) {
  return path2.startsWith(pattern) || minimatch(path2, pattern);
}

// src/algorithms/osr/osr-note-graph.ts
var OsrNoteGraph = class {
  constructor(vaultNoteLinkInfoFinder) {
    // Key: targetFilename
    // Value: Map
    // This is the number of links from sourceFilename to targetFilename
    // For simplicity, we just store the filename without the directory or filename extension
    this.incomingLinks = {};
    this.pageranks = {};
    this.vaultNoteLinkInfoFinder = vaultNoteLinkInfoFinder;
    this.reset();
  }
  reset() {
    this.incomingLinks = {};
    this.pageranks = {};
    graph.reset();
  }
  processLinks(path2) {
    if (this.incomingLinks[path2] === void 0) {
      this.incomingLinks[path2] = [];
    }
    const targetLinks = this.vaultNoteLinkInfoFinder.getResolvedTargetLinksForNotePath(path2) || /* c8 ignore next */
    {};
    for (const targetPath in targetLinks) {
      if (this.incomingLinks[targetPath] === void 0) this.incomingLinks[targetPath] = [];
      if (isSupportedFileType(targetPath)) {
        const linkCount = targetLinks[targetPath];
        this.incomingLinks[targetPath].push({
          sourcePath: path2,
          linkCount
        });
        graph.link(path2, targetPath, linkCount);
      }
    }
  }
  calcNoteLinkStat(notePath, noteEaseList) {
    let linkTotal = 0, linkPGTotal = 0, totalLinkCount = 0;
    for (const statObj of this.incomingLinks[notePath] || /* c8 ignore next */
    []) {
      const ease = noteEaseList.getEaseByPath(statObj.sourcePath);
      if (ease) {
        linkTotal += statObj.linkCount * this.pageranks[statObj.sourcePath] * ease;
        linkPGTotal += this.pageranks[statObj.sourcePath] * statObj.linkCount;
        totalLinkCount += statObj.linkCount;
      }
    }
    const outgoingLinks = this.vaultNoteLinkInfoFinder.getResolvedTargetLinksForNotePath(notePath) || /* c8 ignore next */
    {};
    for (const outgoingLink in outgoingLinks) {
      const ease = noteEaseList.getEaseByPath(outgoingLink);
      const linkCount = outgoingLinks[outgoingLink];
      const pageRank = this.pageranks[outgoingLink];
      if (ease) {
        linkTotal += linkCount * pageRank * ease;
        linkPGTotal += pageRank * linkCount;
        totalLinkCount += linkCount;
      }
    }
    return { linkTotal, linkPGTotal, totalLinkCount };
  }
  generatePageRanks() {
    graph.rank(0.85, 1e-6, (node, rank2) => {
      this.pageranks[node] = rank2 * 1e4;
    });
  }
};

// src/data-store-algorithm/data-store-algorithm.ts
var DataStoreAlgorithm = class _DataStoreAlgorithm {
  static getInstance() {
    if (!_DataStoreAlgorithm.instance) {
      throw new Error("there is no DataStoreAlgorithm instance.");
    }
    return _DataStoreAlgorithm.instance;
  }
};

// src/data-stores/base/data-store.ts
var DataStore = class _DataStore {
  static getInstance() {
    if (!_DataStore.instance) {
      throw new Error("there is no DataStore instance.");
    }
    return _DataStore.instance;
  }
};

// src/topic-path.ts
var TopicPath = class _TopicPath {
  constructor(path2) {
    if (path2 == null) throw "null path";
    if (path2.some((str) => str.includes("/"))) throw "path entries must not contain '/'";
    this.path = path2;
  }
  get hasPath() {
    return this.path.length > 0;
  }
  get isEmptyPath() {
    return !this.hasPath;
  }
  static get emptyPath() {
    return new _TopicPath([]);
  }
  shift() {
    if (this.isEmptyPath) throw "can't shift an empty path";
    return this.path.shift();
  }
  clone() {
    return new _TopicPath([...this.path]);
  }
  formatAsTag() {
    if (this.isEmptyPath) throw "Empty path";
    const result = "#" + this.path.join("/");
    return result;
  }
  static getTopicPathOfFile(noteFile, settings) {
    let deckPath = [];
    let result = _TopicPath.emptyPath;
    if (settings.convertFoldersToDecks) {
      deckPath = noteFile.path.split("/");
      deckPath.pop();
      if (deckPath.length != 0) {
        result = new _TopicPath(deckPath);
      }
    } else {
      const tagList = this.getTopicPathsFromTagList(
        noteFile.getAllTagsFromCache()
      );
      outer: for (const tagToReview of this.getTopicPathsFromTagList(
        settings.flashcardTags
      )) {
        for (const tag of tagList) {
          if (tagToReview.isSameOrAncestorOf(tag)) {
            result = tag;
            break outer;
          }
        }
      }
    }
    return result;
  }
  isSameOrAncestorOf(topicPath) {
    if (this.isEmptyPath) return topicPath.isEmptyPath;
    if (this.path.length > topicPath.path.length) return false;
    for (let i = 0; i < this.path.length; i++) {
      if (this.path[i] != topicPath.path[i]) return false;
    }
    return true;
  }
  static getTopicPathFromCardText(cardText) {
    var _a2;
    const path2 = (_a2 = cardText.trimStart().match(OBSIDIAN_TAG_AT_STARTOFLINE_REGEX)) == null ? void 0 : _a2.slice(-1)[0];
    return (path2 == null ? void 0 : path2.length) > 0 ? _TopicPath.getTopicPathFromTag(path2) : null;
  }
  static getTopicPathsFromTagList(tagList) {
    const result = [];
    for (const tag of tagList) {
      if (this.isValidTag(tag)) result.push(_TopicPath.getTopicPathFromTag(tag));
    }
    return result;
  }
  static isValidTag(tag) {
    if (tag == null || tag.length == 0) return false;
    if (tag[0] != "#") return false;
    if (tag.length == 1) return false;
    return true;
  }
  static getTopicPathFromTag(tag) {
    if (tag == null || tag.length == 0) throw "Null/empty tag";
    if (tag[0] != "#") throw "Tag must start with #";
    if (tag.length == 1) throw "Invalid tag";
    const path2 = tag.replace("#", "").split("/").filter((str) => str);
    return new _TopicPath(path2);
  }
  static getFolderPathFromFilename(noteFile, settings) {
    let result = _TopicPath.emptyPath;
    if (settings.convertFoldersToDecks) {
      const deckPath = noteFile.path.split("/");
      deckPath.pop();
      if (deckPath.length != 0) {
        result = new _TopicPath(deckPath);
      }
    }
    return result;
  }
};
var TopicPathList = class _TopicPathList {
  constructor(list, lineNum = null) {
    if (list == null) throw "TopicPathList null";
    this.list = list;
    this.lineNum = lineNum;
  }
  get length() {
    return this.list.length;
  }
  isAnyElementSameOrAncestorOf(topicPath) {
    return this.list.some((item) => item.isSameOrAncestorOf(topicPath));
  }
  formatPsv() {
    return this.format("|");
  }
  format(sep2) {
    return this.list.map((topicPath) => topicPath.formatAsTag()).join(sep2);
  }
  static empty() {
    return new _TopicPathList([]);
  }
  static fromPsv(str, lineNum) {
    const result = _TopicPathList.convertTagListToTopicPathList(str.split("|"));
    result.lineNum = lineNum;
    return result;
  }
  //
  // tagList is a list of tags such as:
  //      ["#flashcards/computing", "#boring-stuff", "#news-worthy"]
  // validTopicPathList is a list of valid tags, such as those from settings.flashcardTags,E.g.
  //      ["#flashcards"]
  //
  // This returns a filtered version of tagList, containing only topic paths that are considered valid.
  // Validity is defined as "isAnyElementSameOrAncestorOf", and "#flashcards" is considered the ancestor of
  // "#flashcards/computing".
  //
  // Therefore this would return:
  //      "#flashcards/computing" (but not "#boring-stuff" or "#news-worthy")
  //
  static filterValidTopicPathsFromTagList(list, validTopicPathList, lineNum = null) {
    const result = [];
    for (const tag of list.list) {
      if (validTopicPathList.isAnyElementSameOrAncestorOf(tag)) result.push(tag);
    }
    return new _TopicPathList(result, lineNum);
  }
  static convertTagListToTopicPathList(tagList) {
    const result = [];
    for (const tag of tagList) {
      if (TopicPath.isValidTag(tag)) result.push(TopicPath.getTopicPathFromTag(tag));
    }
    return new _TopicPathList(result);
  }
};
var TopicPathWithWs = class {
  constructor(topicPath, preWhitespace, postWhitespace) {
    if (!topicPath || topicPath.isEmptyPath) throw "topicPath null";
    this.topicPath = topicPath;
    this.preWhitespace = preWhitespace;
    this.postWhitespace = postWhitespace;
  }
  formatWithWs() {
    return `${this.preWhitespace}${this.topicPath.formatAsTag()}${this.postWhitespace}`;
  }
};

// src/flashcard-review-sequencer.ts
var DeckStats = class {
  constructor(dueCount, newCount, totalCount) {
    this.dueCount = dueCount;
    this.newCount = newCount;
    this.totalCount = totalCount;
  }
};
var FlashcardReviewSequencer = class {
  constructor(reviewMode, cardSequencer, settings, srsAlgorithm, questionPostponementList, dueDateFlashcardHistogram) {
    this.reviewMode = reviewMode;
    this.cardSequencer = cardSequencer;
    this.settings = settings;
    this.srsAlgorithm = srsAlgorithm;
    this.questionPostponementList = questionPostponementList;
    this.dueDateFlashcardHistogram = dueDateFlashcardHistogram;
  }
  get hasCurrentCard() {
    return this.cardSequencer.currentCard != null;
  }
  get currentCard() {
    return this.cardSequencer.currentCard;
  }
  get currentQuestion() {
    var _a2;
    return (_a2 = this.currentCard) == null ? void 0 : _a2.question;
  }
  get currentDeck() {
    return this.cardSequencer.currentDeck;
  }
  get currentNote() {
    return this.currentQuestion.note;
  }
  // originalDeckTree isn't modified by the review process
  // Only remainingDeckTree
  setDeckTree(originalDeckTree, remainingDeckTree) {
    this.cardSequencer.setBaseDeck(remainingDeckTree);
    this._originalDeckTree = originalDeckTree;
    this.remainingDeckTree = remainingDeckTree;
    this.setCurrentDeck(TopicPath.emptyPath);
  }
  setCurrentDeck(topicPath) {
    this.cardSequencer.setIteratorTopicPath(topicPath);
    this.cardSequencer.nextCard();
  }
  get originalDeckTree() {
    return this._originalDeckTree;
  }
  getDeckStats(topicPath) {
    const totalCount = this._originalDeckTree.getDeck(topicPath).getDistinctCardCount(2 /* All */, true);
    const remainingDeck = this.remainingDeckTree.getDeck(topicPath);
    const newCount = remainingDeck.getDistinctCardCount(0 /* NewCard */, true);
    const dueCount = remainingDeck.getDistinctCardCount(1 /* DueCard */, true);
    return new DeckStats(dueCount, newCount, totalCount);
  }
  skipCurrentCard() {
    this.cardSequencer.deleteCurrentQuestionFromAllDecks();
  }
  deleteCurrentCard() {
    this.cardSequencer.deleteCurrentCardFromAllDecks();
  }
  async processReview(response) {
    switch (this.reviewMode) {
      case 1 /* Review */:
        await this.processReview_ReviewMode(response);
        break;
      case 0 /* Cram */:
        await this.processReview_CramMode(response);
        break;
    }
  }
  async processReview_ReviewMode(response) {
    if (response != 3 /* Reset */ || this.currentCard.hasSchedule) {
      this.currentCard.scheduleInfo = this.determineCardSchedule(response, this.currentCard);
      await DataStore.getInstance().questionWriteSchedule(this.currentQuestion);
    }
    if (response == 3 /* Reset */) {
      this.cardSequencer.moveCurrentCardToEndOfList();
      this.cardSequencer.nextCard();
    } else {
      if (this.settings.burySiblingCards) {
        await this.burySiblingCards();
        this.cardSequencer.deleteCurrentQuestionFromAllDecks();
      } else {
        this.deleteCurrentCard();
      }
    }
  }
  async burySiblingCards() {
    const remaining = this.currentDeck.getQuestionCardCount(this.currentQuestion);
    if (remaining > 1) {
      this.questionPostponementList.add(this.currentQuestion);
      await this.questionPostponementList.write();
    }
  }
  async processReview_CramMode(response) {
    if (response == 0 /* Easy */) this.deleteCurrentCard();
    else {
      this.cardSequencer.moveCurrentCardToEndOfList();
      this.cardSequencer.nextCard();
    }
  }
  determineCardSchedule(response, card) {
    let result;
    if (response == 3 /* Reset */) {
      result = this.srsAlgorithm.cardGetResetSchedule();
    } else {
      if (card.hasSchedule) {
        result = this.srsAlgorithm.cardCalcUpdatedSchedule(
          response,
          card.scheduleInfo,
          this.dueDateFlashcardHistogram
        );
      } else {
        const currentNote = card.question.note;
        result = this.srsAlgorithm.cardGetNewSchedule(
          response,
          currentNote.filePath,
          this.dueDateFlashcardHistogram
        );
      }
    }
    return result;
  }
  async updateCurrentQuestionText(text) {
    const q = this.currentQuestion.questionText;
    q.actualQuestion = text;
    await DataStore.getInstance().questionWrite(this.currentQuestion);
  }
};

// src/deck.ts
var Deck2 = class _Deck {
  constructor(deckName, parent) {
    this.deckName = deckName;
    this.newFlashcards = [];
    this.dueFlashcards = [];
    this.subdecks = [];
    this.parent = parent;
  }
  getCardCount(cardListType, includeSubdeckCounts) {
    let result = 0;
    if (cardListType == 0 /* NewCard */ || cardListType == 2 /* All */)
      result += this.newFlashcards.length;
    if (cardListType == 1 /* DueCard */ || cardListType == 2 /* All */)
      result += this.dueFlashcards.length;
    if (includeSubdeckCounts) {
      for (const deck of this.subdecks) {
        result += deck.getCardCount(cardListType, includeSubdeckCounts);
      }
    }
    return result;
  }
  getDistinctCardCount(cardListType, includeSubdeckCounts) {
    const cardList = this.getFlattenedCardArray(cardListType, includeSubdeckCounts);
    const distinctCardSet = new Set(cardList);
    return distinctCardSet.size;
  }
  getFlattenedCardArray(cardListType, includeSubdeckCounts) {
    let result = [];
    switch (cardListType) {
      case 0 /* NewCard */:
        result = this.newFlashcards;
        break;
      case 1 /* DueCard */:
        result = this.dueFlashcards;
        break;
      case 2 /* All */:
        result = this.newFlashcards.concat(this.dueFlashcards);
    }
    if (includeSubdeckCounts) {
      for (const subdeck of this.subdecks) {
        result = result.concat(
          subdeck.getFlattenedCardArray(cardListType, includeSubdeckCounts)
        );
      }
    }
    return result;
  }
  //
  // Returns a count of the number of this question's cards are present in this deck.
  // (The returned value would be <= question.cards.length)
  //
  getQuestionCardCount(question) {
    let result = 0;
    result += this.getQuestionCardCountForCardListType(question, this.newFlashcards);
    result += this.getQuestionCardCountForCardListType(question, this.dueFlashcards);
    return result;
  }
  getQuestionCardCountForCardListType(question, cards) {
    let result = 0;
    for (let i = 0; i < cards.length; i++) {
      if (Object.is(question, cards[i].question)) result++;
    }
    return result;
  }
  static get emptyDeck() {
    return new _Deck("Root", null);
  }
  get isRootDeck() {
    return this.parent == null;
  }
  getDeckByTopicTag(tag) {
    return this.getDeck(TopicPath.getTopicPathFromTag(tag));
  }
  getDeck(topicPath) {
    return this._getOrCreateDeck(topicPath, false);
  }
  getOrCreateDeck(topicPath) {
    return this._getOrCreateDeck(topicPath, true);
  }
  _getOrCreateDeck(topicPath, createAllowed) {
    if (!topicPath.hasPath) {
      return this;
    }
    const t2 = topicPath.clone();
    const deckName = t2.shift();
    for (const subdeck of this.subdecks) {
      if (deckName === subdeck.deckName) {
        return subdeck._getOrCreateDeck(t2, createAllowed);
      }
    }
    let result = null;
    if (createAllowed) {
      const subdeck = new _Deck(
        deckName,
        this
        /* parent */
      );
      this.subdecks.push(subdeck);
      result = subdeck._getOrCreateDeck(t2, createAllowed);
    }
    return result;
  }
  getTopicPath() {
    const list = [];
    let deck = this;
    while (!deck.isRootDeck) {
      list.push(deck.deckName);
      deck = deck.parent;
    }
    return new TopicPath(list.reverse());
  }
  getRootDeck() {
    let deck = this;
    while (!deck.isRootDeck) {
      deck = deck.parent;
    }
    return deck;
  }
  getCard(index, cardListType) {
    const cardList = this.getCardListForCardType(cardListType);
    return cardList[index];
  }
  getCardListForCardType(cardListType) {
    return cardListType == 1 /* DueCard */ ? this.dueFlashcards : this.newFlashcards;
  }
  appendCard(topicPathList, cardObj) {
    if (topicPathList.list.length == 0) {
      this.appendCardToRootDeck(cardObj);
    } else {
      for (const topicPath of topicPathList.list) {
        this.appendCard_SingleTopic(topicPath, cardObj);
      }
    }
  }
  appendCardToRootDeck(cardObj) {
    this.appendCard_SingleTopic(TopicPath.emptyPath, cardObj);
  }
  appendCard_SingleTopic(topicPath, cardObj) {
    const deck = this.getOrCreateDeck(topicPath);
    const cardList = deck.getCardListForCardType(cardObj.cardListType);
    cardList.push(cardObj);
  }
  //
  // The question lists all the topics in which this card is included.
  // The topics are relative to the base deck, and this method must be called on that deck
  //
  deleteQuestionFromAllDecks(question, exceptionIfMissing) {
    for (const card of question.cards) {
      this.deleteCardFromAllDecks(card, exceptionIfMissing);
    }
  }
  deleteQuestion(question, exceptionIfMissing) {
    for (const card of question.cards) {
      this.deleteCardFromThisDeck(card, exceptionIfMissing);
    }
  }
  //
  // The card's question lists all the topics in which this card is included.
  // The topics are relative to the base deck, and this method must be called on that deck
  //
  deleteCardFromAllDecks(card, exceptionIfMissing) {
    for (const topicPath of card.question.topicPathList.list) {
      const deck = this.getDeck(topicPath);
      deck.deleteCardFromThisDeck(card, exceptionIfMissing);
    }
  }
  deleteCardFromThisDeck(card, exceptionIfMissing) {
    const newIdx = this.newFlashcards.indexOf(card);
    if (newIdx != -1) this.newFlashcards.splice(newIdx, 1);
    const dueIdx = this.dueFlashcards.indexOf(card);
    if (dueIdx != -1) this.dueFlashcards.splice(dueIdx, 1);
    if (newIdx == -1 && dueIdx == -1 && exceptionIfMissing) {
      throw `deleteCardFromThisDeck: Card: ${card.front} not found in deck: ${this.deckName}`;
    }
  }
  deleteCardAtIndex(index, cardListType) {
    const cardList = this.getCardListForCardType(cardListType);
    cardList.splice(index, 1);
  }
  toDeckArray() {
    const result = [];
    result.push(this);
    for (const subdeck of this.subdecks) {
      result.push(...subdeck.toDeckArray());
    }
    return result;
  }
  sortSubdecksList() {
    this.subdecks.sort((a, b) => {
      if (a.deckName < b.deckName) {
        return -1;
      } else if (a.deckName > b.deckName) {
        return 1;
      }
      return 0;
    });
    for (const deck of this.subdecks) {
      deck.sortSubdecksList();
    }
  }
  debugLogToConsole(desc = null, indent = 0) {
    let str = desc != null ? `${desc}: ` : "";
    console.log(str += this.toString(indent));
  }
  toString(indent = 0) {
    let result = "";
    let indentStr = " ".repeat(indent * 4);
    result += `${indentStr}${this.deckName}\r
`;
    indentStr += "  ";
    for (let i = 0; i < this.newFlashcards.length; i++) {
      const card = this.newFlashcards[i];
      result += `${indentStr}New: ${i}: ${card.front}::${card.back}\r
`;
    }
    for (let i = 0; i < this.dueFlashcards.length; i++) {
      const card = this.dueFlashcards[i];
      const s = card.isDue ? "Due" : "Not due";
      result += `${indentStr}${s}: ${i}: ${card.front}::${card.back}\r
`;
    }
    for (const subdeck of this.subdecks) {
      result += subdeck.toString(indent + 1);
    }
    return result;
  }
  clone() {
    return this.copyWithCardFilter(() => true);
  }
  copyWithCardFilter(predicate, parent = null) {
    const result = new _Deck(this.deckName, parent);
    result.newFlashcards = [...this.newFlashcards.filter((card) => predicate(card))];
    result.dueFlashcards = [...this.dueFlashcards.filter((card) => predicate(card))];
    for (const s of this.subdecks) {
      const newParent = result;
      const newDeck = s.copyWithCardFilter(predicate, newParent);
      result.subdecks.push(newDeck);
    }
    return result;
  }
  static otherListType(cardListType) {
    let result;
    if (cardListType == 0 /* NewCard */) result = 1 /* DueCard */;
    else if (cardListType == 1 /* DueCard */) result = 0 /* NewCard */;
    else throw "Invalid cardListType";
    return result;
  }
};
var DeckTreeFilter = class {
  static filterForReviewableCards(reviewableDeckTree) {
    return reviewableDeckTree.copyWithCardFilter((card) => !card.question.hasEditLaterTag);
  }
  static filterForRemainingCards(questionPostponementList, deckTree, reviewMode) {
    return deckTree.copyWithCardFilter(
      (card) => (reviewMode == 0 /* Cram */ || card.isNew || card.isDue) && !questionPostponementList.includes(card.question)
    );
  }
};

// src/utils/types.ts
function getTypedObjectEntries(obj) {
  return Object.entries(obj);
}
var getKeysPreserveType = Object.keys;

// src/utils/numbers.ts
var ValueCountDict = class {
  constructor() {
    this.dict = {};
  }
  // Record
  clearCountIfMissing(value) {
    if (!this.hasValue(value)) this.dict[value] = 0;
  }
  hasValue(value) {
    return Object.prototype.hasOwnProperty.call(this.dict, value);
  }
  incrementCount(value) {
    this.clearCountIfMissing(value);
    this.dict[value]++;
  }
  getMaxValue() {
    return Math.max(...getKeysPreserveType(this.dict)) || 0;
  }
  getTotalOfValueMultiplyCount() {
    const v = getTypedObjectEntries(this.dict).map(([value, count]) => value * count).reduce((a, b) => a + b, 0) || 0;
    return v;
  }
};
var RandomNumberProvider = class {
  getInteger(lowerBound, upperBound) {
    const range = upperBound - lowerBound + 1;
    return Math.floor(Math.random() * range) + lowerBound;
  }
};
var StaticRandomNumberProvider = class {
  getInteger(lowerBound, upperBound) {
    if (lowerBound != this.expectedLowerBound || upperBound != this.expectedUpperBound)
      throw `lowerBound: A${lowerBound}/E${this.expectedLowerBound}, upperBound: A${upperBound}/E${this.expectedUpperBound}`;
    return this.next;
  }
};
var WeightedRandomNumber = class _WeightedRandomNumber {
  constructor(provider) {
    this.provider = provider;
  }
  static create() {
    return new _WeightedRandomNumber(globalRandomNumberProvider);
  }
  //
  // weights is a dictionary:
  //      first number - a key that can be returned
  //      second number - the "bucket size" - this is a weight that influences the probability of the
  //          first number being returned
  //
  // returns:
  //      first number - one of the keys from the weights parameter
  //      second number - an "index" value; 0 <= index < bucketSize
  getRandomValues(weights) {
    const total = _WeightedRandomNumber.calcTotalOfCount(weights);
    if (Object.values(weights).some((i) => !Number.isInteger(i) || i < 0))
      throw "All weights must be positive integers";
    const v = this.provider.getInteger(0, total - 1);
    let x = 0;
    for (const kvp in weights) {
      const [value, count] = [Number(kvp), weights[kvp]];
      if (v < x + count) {
        const index = v - x;
        return [value, index];
      }
      x += count;
    }
    throw "";
  }
  static calcTotalOfCount(weights) {
    const total = getTypedObjectEntries(weights).map(([_, count]) => count).reduce((a, b) => a + b, 0) || 0;
    return total;
  }
};
var globalRandomNumberProvider = new RandomNumberProvider();
var staticRandomNumberProvider = new StaticRandomNumberProvider();

// src/deck-tree-iterator.ts
var CardOrder = /* @__PURE__ */ ((CardOrder2) => {
  CardOrder2[CardOrder2["NewFirstSequential"] = 0] = "NewFirstSequential";
  CardOrder2[CardOrder2["NewFirstRandom"] = 1] = "NewFirstRandom";
  CardOrder2[CardOrder2["DueFirstSequential"] = 2] = "DueFirstSequential";
  CardOrder2[CardOrder2["DueFirstRandom"] = 3] = "DueFirstRandom";
  CardOrder2[CardOrder2["EveryCardRandomDeckAndCard"] = 4] = "EveryCardRandomDeckAndCard";
  return CardOrder2;
})(CardOrder || {});
var DeckOrder = /* @__PURE__ */ ((DeckOrder2) => {
  DeckOrder2[DeckOrder2["PrevDeckComplete_Sequential"] = 0] = "PrevDeckComplete_Sequential";
  DeckOrder2[DeckOrder2["PrevDeckComplete_Random"] = 1] = "PrevDeckComplete_Random";
  return DeckOrder2;
})(DeckOrder || {});
var SingleDeckIterator = class _SingleDeckIterator {
  get hasCurrentCard() {
    return this.cardIdx != null;
  }
  get currentCard() {
    let result = null;
    if (this.cardIdx != null) result = this.deck.getCard(this.cardIdx, this.cardListType);
    return result;
  }
  constructor(iteratorOrder) {
    this.iteratorOrder = iteratorOrder;
    this.preferredCardListType = _SingleDeckIterator.getCardListTypeForIterator(
      this.iteratorOrder
    );
    this.weightedRandomNumber = WeightedRandomNumber.create();
  }
  setDeck(deck) {
    this.deck = deck;
    this.setCardListType(null);
  }
  //
  // 0 <= cardIndex < newFlashcards.length + dueFlashcards.length
  //
  setNewOrDueCardIdx(cardIndex) {
    let cardListType = 0 /* NewCard */;
    let index = cardIndex;
    if (cardIndex >= this.deck.newFlashcards.length) {
      cardListType = 1 /* DueCard */;
      index = cardIndex - this.deck.newFlashcards.length;
    }
    this.setCardListType(cardListType, index);
  }
  setCardListType(cardListType, cardIdx = null) {
    this.cardListType = cardListType;
    this.cardIdx = cardIdx;
  }
  nextCard() {
    if (this.iteratorOrder.cardOrder == 4 /* EveryCardRandomDeckAndCard */) {
      this.nextRandomCard();
    } else {
      if (this.cardListType == null) {
        this.setCardListType(this.preferredCardListType);
      }
      if (!this.nextCardWithinCurrentList()) {
        if (this.cardListType == this.preferredCardListType) {
          this.setCardListType(Deck2.otherListType(this.cardListType));
          if (!this.nextCardWithinCurrentList()) {
            this.setCardListType(null);
          }
        } else {
          this.cardIdx = null;
        }
      }
    }
    return this.cardIdx != null;
  }
  nextRandomCard() {
    const newCount = this.deck.newFlashcards.length;
    const dueCount = this.deck.dueFlashcards.length;
    if (newCount + dueCount > 0) {
      const weights = {};
      if (newCount > 0) weights[0 /* NewCard */] = newCount;
      if (dueCount > 0) weights[1 /* DueCard */] = dueCount;
      const [cardListType, index] = this.weightedRandomNumber.getRandomValues(weights);
      this.setCardListType(cardListType, index);
    } else {
      this.setCardListType(null);
    }
  }
  nextCardWithinCurrentList() {
    const cardList = this.deck.getCardListForCardType(this.cardListType);
    const result = cardList.length > 0;
    if (result) {
      switch (this.iteratorOrder.cardOrder) {
        case 2 /* DueFirstSequential */:
        case 0 /* NewFirstSequential */:
          this.cardIdx = 0;
          break;
        case 3 /* DueFirstRandom */:
        case 1 /* NewFirstRandom */:
          this.cardIdx = globalRandomNumberProvider.getInteger(0, cardList.length - 1);
          break;
      }
    }
    return result;
  }
  moveCurrentCardToEndOfList() {
    this.ensureCurrentCard();
    const cardList = this.deck.getCardListForCardType(this.cardListType);
    if (cardList.length <= 1) return;
    const card = this.currentCard;
    this.deck.deleteCardAtIndex(this.cardIdx, this.cardListType);
    this.deck.appendCardToRootDeck(card);
    this.setNoCurrentCard();
  }
  setNoCurrentCard() {
    this.cardIdx = null;
  }
  ensureCurrentCard() {
    if (this.cardIdx == null || this.cardListType == null) throw "no current card";
  }
  static getCardListTypeForIterator(iteratorOrder) {
    let result = null;
    switch (iteratorOrder.cardOrder) {
      case 3 /* DueFirstRandom */:
      case 2 /* DueFirstSequential */:
        result = 1 /* DueCard */;
        break;
      case 1 /* NewFirstRandom */:
      case 0 /* NewFirstSequential */:
        result = 0 /* NewCard */;
        break;
    }
    return result;
  }
};
var DeckTreeIterator = class _DeckTreeIterator {
  get hasCurrentCard() {
    return this.deckIdx != null && this.singleDeckIterator.hasCurrentCard;
  }
  get currentTopicPath() {
    var _a2;
    return (_a2 = this.currentDeck) == null ? void 0 : _a2.getTopicPath();
  }
  get currentDeck() {
    if (this.deckIdx == null) return null;
    return this.deckArray[this.deckIdx];
  }
  get currentCard() {
    let result = null;
    if (this.deckIdx != null && this.singleDeckIterator.hasCurrentCard)
      result = this.singleDeckIterator.currentCard;
    return result;
  }
  get currentQuestion() {
    var _a2;
    return (_a2 = this.currentCard) == null ? void 0 : _a2.question;
  }
  constructor(iteratorOrder, baseDeckTree) {
    this.singleDeckIterator = new SingleDeckIterator(iteratorOrder);
    this.iteratorOrder = iteratorOrder;
    this.weightedRandomNumber = WeightedRandomNumber.create();
    this.setBaseDeck(baseDeckTree);
  }
  setBaseDeck(baseDeck) {
    this.baseDeckTree = baseDeck;
    this.singleDeckIterator.setNoCurrentCard();
  }
  setIteratorTopicPath(topicPath) {
    const iteratorDeck = this.baseDeckTree.getDeck(topicPath);
    this.deckArray = _DeckTreeIterator.filterForDecksWithCards(iteratorDeck.toDeckArray());
    this.setDeckIdx(null);
  }
  static filterForDecksWithCards(sourceArray) {
    const result = [];
    for (let idx = 0; idx < sourceArray.length; idx++) {
      const deck = sourceArray[idx];
      const hasAnyCards = deck.getCardCount(2 /* All */, false) > 0;
      if (hasAnyCards) {
        result.push(deck);
      }
    }
    return result;
  }
  setDeckIdx(deckIdx) {
    this.deckIdx = deckIdx;
    if (deckIdx != null) this.singleDeckIterator.setDeck(this.deckArray[deckIdx]);
  }
  nextCard() {
    let result = false;
    if (this.hasCurrentCard) {
      this.baseDeckTree.deleteCardFromAllDecks(this.currentCard, true);
    }
    if (this.iteratorOrder.cardOrder == 4 /* EveryCardRandomDeckAndCard */) {
      result = this.nextCard_EveryCardRandomDeck();
    } else {
      if (this.deckIdx == null) {
        this.chooseNextDeck(true);
      }
      while (this.deckIdx < this.deckArray.length) {
        if (this.singleDeckIterator.nextCard()) {
          result = true;
          break;
        }
        this.chooseNextDeck(false);
      }
    }
    if (!result) this.deckIdx = null;
    return result;
  }
  chooseNextDeck(firstTime) {
    switch (this.iteratorOrder.deckOrder) {
      case 0 /* PrevDeckComplete_Sequential */:
        this.deckIdx = firstTime ? 0 : this.deckIdx + 1;
        break;
      case 1 /* PrevDeckComplete_Random */: {
        const weights = {};
        let hasDeck = false;
        for (let i = 0; i < this.deckArray.length; i++) {
          if (this.deckArray[i].getCardCount(2 /* All */, false)) {
            weights[i] = 1;
            hasDeck = true;
          }
        }
        if (hasDeck) {
          const [deckIdx, _] = this.weightedRandomNumber.getRandomValues(weights);
          this.deckIdx = deckIdx;
        } else {
          this.deckIdx = this.deckArray.length;
        }
        break;
      }
    }
    if (this.deckIdx < this.deckArray.length) {
      this.singleDeckIterator.setDeck(this.deckArray[this.deckIdx]);
    }
  }
  nextCard_EveryCardRandomDeck() {
    const weights = {};
    for (let i = 0; i < this.deckArray.length; i++) {
      const cardCount = this.deckArray[i].getCardCount(2 /* All */, false);
      if (cardCount) {
        weights[i] = cardCount;
      }
    }
    if (Object.keys(weights).length == 0) return false;
    const [deckIdx, cardIdx] = this.weightedRandomNumber.getRandomValues(weights);
    this.setDeckIdx(deckIdx);
    this.singleDeckIterator.setNewOrDueCardIdx(cardIdx);
    return true;
  }
  deleteCurrentQuestionFromAllDecks() {
    this.singleDeckIterator.ensureCurrentCard();
    this.baseDeckTree.deleteQuestionFromAllDecks(this.currentQuestion, false);
    this.singleDeckIterator.setNoCurrentCard();
    return this.nextCard();
  }
  deleteCurrentCardFromAllDecks() {
    this.singleDeckIterator.ensureCurrentCard();
    this.baseDeckTree.deleteCardFromAllDecks(this.currentCard, true);
    this.singleDeckIterator.setNoCurrentCard();
    return this.nextCard();
  }
  moveCurrentCardToEndOfList() {
    this.singleDeckIterator.moveCurrentCardToEndOfList();
  }
  removeCurrentDeckIfEmpty() {
    if (this.currentDeck.getCardCount(2 /* All */, false) == 0) {
      this.deckArray.splice(this.deckIdx, 1);
      if (this.deckIdx < this.deckArray.length) this.setDeckIdx(this.deckIdx);
    }
  }
};

// src/stats.ts
var Stats = class {
  constructor() {
    this.eases = new ValueCountDict();
    this.intervals = new ValueCountDict();
    this.delayedDays = new ValueCountDict();
    this.newCount = 0;
    this.youngCount = 0;
    this.matureCount = 0;
  }
  get totalCount() {
    return this.youngCount + this.matureCount;
  }
  incrementNew() {
    this.newCount++;
  }
  update(delayedDays, interval, ease) {
    this.intervals.incrementCount(interval);
    this.eases.incrementCount(ease);
    this.delayedDays.incrementCount(delayedDays);
    if (interval >= 32) {
      this.matureCount++;
    } else {
      this.youngCount++;
    }
  }
  getMaxInterval() {
    return this.intervals.getMaxValue();
  }
  getAverageInterval() {
    return this.intervals.getTotalOfValueMultiplyCount() / this.totalCount;
  }
  getAverageEases() {
    return this.eases.getTotalOfValueMultiplyCount() / this.totalCount;
  }
};

// src/deck-tree-stats-calculator.ts
var DeckTreeStatsCalculator = class {
  calculate(deckTree) {
    const iteratorOrder = {
      deckOrder: 0 /* PrevDeckComplete_Sequential */,
      cardOrder: 2 /* DueFirstSequential */
    };
    const iterator = new DeckTreeIterator(iteratorOrder, deckTree.clone());
    const result = new Stats();
    iterator.setIteratorTopicPath(TopicPath.emptyPath);
    while (iterator.nextCard()) {
      const card = iterator.currentCard;
      if (card.hasSchedule) {
        const schedule = card.scheduleInfo;
        result.update(
          schedule.delayedBeforeReviewDaysInt(),
          schedule.interval,
          schedule.latestEase
        );
      } else {
        result.incrementNew();
      }
    }
    return result;
  }
};

// src/due-date-histogram.ts
var _DueDateHistogram = class _DueDateHistogram {
  constructor(rec = null) {
    // Key - # of days in future
    // Value - Count of notes due
    this.dueDatesMap = /* @__PURE__ */ new Map();
    this.dueDatesMap = /* @__PURE__ */ new Map();
    if (rec != null) {
      Object.entries(rec).forEach(([key, value]) => {
        this.dueDatesMap.set(Number(key), value);
      });
    }
  }
  get dueNotesCount() {
    let result = 0;
    if (this.dueDatesMap.has(_DueDateHistogram.dueNowNDays))
      result = this.dueDatesMap.get(_DueDateHistogram.dueNowNDays);
    return result;
  }
  hasEntryForDays(days) {
    return this.dueDatesMap.has(days);
  }
  set(days, value) {
    this.dueDatesMap.set(days, value);
  }
  get(days) {
    return this.dueDatesMap.get(days);
  }
  increment(days) {
    let value = 0;
    if (this.dueDatesMap.has(days)) {
      value = this.dueDatesMap.get(days);
    }
    this.dueDatesMap.set(days, value + 1);
  }
  decrement(days) {
    let value = 0;
    if (this.dueDatesMap.has(days)) value = this.dueDatesMap.get(days);
    if (value > 0) {
      this.dueDatesMap.set(days, value - 1);
    }
  }
  findLeastUsedIntervalOverRange(originalInterval, fuzz) {
    if (!this.hasEntryForDays(originalInterval)) {
      return originalInterval;
    }
    let interval = originalInterval;
    outer: for (let i = 1; i <= fuzz; i++) {
      for (const ivl of [originalInterval - i, originalInterval + i]) {
        if (!this.hasEntryForDays(ivl)) {
          interval = ivl;
          break outer;
        }
        if (this.dueDatesMap.get(ivl) < this.dueDatesMap.get(interval)) interval = ivl;
      }
    }
    return interval;
  }
};
// The key for dueDatesNotes is the number of days after today
// therefore the key to lookup how many cards are due today is 0
_DueDateHistogram.dueNowNDays = 0;
var DueDateHistogram = _DueDateHistogram;
var NoteDueDateHistogram = class extends DueDateHistogram {
  calculateFromReviewDecksAndSort(reviewDecks, osrNoteGraph) {
    this.dueDatesMap = /* @__PURE__ */ new Map();
    const today = globalDateProvider.today.valueOf();
    reviewDecks.forEach((reviewDeck) => {
      reviewDeck.scheduledNotes.forEach((scheduledNote) => {
        const nDays = Math.ceil((scheduledNote.dueUnix - today) / TICKS_PER_DAY);
        this.increment(nDays);
      });
      reviewDeck.sortNotesByDateAndImportance(osrNoteGraph.pageranks);
    });
  }
};
var CardDueDateHistogram = class extends DueDateHistogram {
  calculateFromDeckTree(deckTree) {
    this.dueDatesMap = /* @__PURE__ */ new Map();
    const iteratorOrder = {
      deckOrder: 0 /* PrevDeckComplete_Sequential */,
      cardOrder: 2 /* DueFirstSequential */
    };
    const today = globalDateProvider.today.valueOf();
    const iterator = new DeckTreeIterator(iteratorOrder, deckTree.clone());
    iterator.setIteratorTopicPath(TopicPath.emptyPath);
    while (iterator.nextCard()) {
      const card = iterator.currentCard;
      if (card.hasSchedule) {
        const scheduledCard = card.scheduleInfo;
        const nDays = Math.ceil(
          (scheduledCard.dueDateAsUnix - today) / TICKS_PER_DAY
        );
        this.increment(nDays);
      }
    }
  }
};

// src/note.ts
var Note = class {
  get hasChanged() {
    return this.questionList.some((question) => question.hasChanged);
  }
  get filePath() {
    return this.file.path;
  }
  constructor(file, questionList) {
    this.file = file;
    this.questionList = questionList;
    questionList.forEach((question) => question.note = this);
  }
  appendCardsToDeck(deck) {
    for (const question of this.questionList) {
      for (const card of question.cards) {
        deck.appendCard(question.topicPathList, card);
      }
    }
  }
  debugLogToConsole(desc = "") {
    var _a2;
    let str = `Note: ${desc}: ${this.questionList.length} questions\r
`;
    for (let i = 0; i < this.questionList.length; i++) {
      const q = this.questionList[i];
      str += `[${i}]: ${q.questionType}: ${q.lineNo}: ${(_a2 = q.topicPathList) == null ? void 0 : _a2.format("|")}: ${q.questionText.original}\r
`;
    }
    console.debug(str);
  }
  async writeNoteFile(settings) {
    let fileText = await this.file.read();
    for (const question of this.questionList) {
      if (question.hasChanged) {
        fileText = question.updateQuestionWithinNoteText(fileText, settings);
      }
    }
    await this.file.write(fileText);
    this.questionList.forEach((question) => question.hasChanged = false);
  }
};

// src/card.ts
var Card = class extends RepetitionItem {
  constructor(init) {
    super();
    Object.assign(this, init);
  }
  get cardListType() {
    return this.isNew ? 0 /* NewCard */ : 1 /* DueCard */;
  }
  formatSchedule() {
    let result = "";
    if (this.hasSchedule) result = this.scheduleInfo.formatCardScheduleForHtmlComment();
    else result = "New";
    return result;
  }
};

// src/parser.ts
var import_peggy = __toESM(require_peggy_min());

// src/utils/strings.ts
function literalStringReplace(text, searchStr, replacementStr) {
  let result = text;
  const startIdx = text.indexOf(searchStr);
  if (startIdx >= 0) {
    const startStr = text.substring(0, startIdx);
    const endIdx = startIdx + searchStr.length;
    const endStr = text.substring(endIdx);
    result = startStr + replacementStr + endStr;
  }
  return result;
}
function cyrb53(str, seed = 0) {
  let h12 = 3735928559 ^ seed, h22 = 1103547991 ^ seed;
  for (let i = 0, ch; i < str.length; i++) {
    ch = str.charCodeAt(i);
    h12 = Math.imul(h12 ^ ch, 2654435761);
    h22 = Math.imul(h22 ^ ch, 1597334677);
  }
  h12 = Math.imul(h12 ^ h12 >>> 16, 2246822507) ^ Math.imul(h22 ^ h22 >>> 13, 3266489909);
  h22 = Math.imul(h22 ^ h22 >>> 16, 2246822507) ^ Math.imul(h12 ^ h12 >>> 13, 3266489909);
  return (4294967296 * (2097151 & h22) + (h12 >>> 0)).toString(16);
}
function convertToStringOrEmpty(v) {
  let result = "";
  if (v != null && v != void 0) {
    result = v + "";
  }
  return result;
}
function splitTextIntoLineArray(text) {
  return text.replaceAll(/\r\n|\r/g, "\n").split("\n");
}
function stringTrimStart(str) {
  if (!str) {
    return ["", ""];
  }
  const trimmed = str.trimStart();
  const wsCount = str.length - trimmed.length;
  const ws = str.substring(0, wsCount);
  return [ws, trimmed];
}
function splitNoteIntoFrontmatterAndContent(str) {
  const lines = splitTextIntoLineArray(str);
  let lineIndex = 0;
  let hasFrontmatter = false;
  do {
    if (lineIndex === 0 && lines[lineIndex] === "---") {
      hasFrontmatter = true;
    } else if (hasFrontmatter && lines[lineIndex] === "---") {
      hasFrontmatter = false;
      lineIndex++;
    }
    if (hasFrontmatter) {
      lineIndex++;
    }
  } while (hasFrontmatter && lineIndex < lines.length);
  if (hasFrontmatter) {
    lineIndex = 0;
  }
  const frontmatter = lines.slice(0, lineIndex).join("\n");
  const emptyLines = lineIndex > 0 ? Array(lineIndex).join(".").split(".") : [];
  const content = emptyLines.concat(lines.slice(lineIndex)).join("\n");
  return [frontmatter, content];
}
function findLineIndexOfSearchStringIgnoringWs(lines, searchString) {
  let result = -1;
  for (let i = 0; i < lines.length; i++) {
    if (lines[i].trim() == searchString) {
      result = i;
      break;
    }
  }
  return result;
}
function parseObsidianFrontmatterTag(tagStr) {
  const result = [];
  if (tagStr) {
    const tagStrList = tagStr.split(",");
    for (const tag of tagStrList) {
      if (tag !== "") {
        result.push(tag.startsWith("#") ? tag : "#" + tag);
      }
    }
  }
  return result;
}
var MultiLineTextFinder = class _MultiLineTextFinder {
  static findAndReplace(sourceText, searchText, replacementText) {
    let result = null;
    if (sourceText.includes(searchText)) {
      result = literalStringReplace(sourceText, searchText, replacementText);
    } else {
      const sourceTextArray = splitTextIntoLineArray(sourceText);
      const searchTextArray = splitTextIntoLineArray(searchText);
      const lineNo = _MultiLineTextFinder.find(
        sourceTextArray,
        searchTextArray
      );
      if (lineNo !== null) {
        const replacementTextArray = splitTextIntoLineArray(replacementText);
        const linesToRemove = searchTextArray.length;
        sourceTextArray.splice(lineNo, linesToRemove, ...replacementTextArray);
        result = sourceTextArray.join("\n");
      }
    }
    return result;
  }
  static find(sourceText, searchText) {
    let result = null;
    let searchIdx = 0;
    const maxSearchIdx = searchText.length - 1;
    for (let sourceIdx = 0; sourceIdx < sourceText.length; sourceIdx++) {
      const sourceLine = sourceText[sourceIdx].trim();
      const searchLine = searchText[searchIdx].trim();
      if (searchLine == sourceLine) {
        if (searchIdx == maxSearchIdx) {
          result = sourceIdx - searchIdx;
          break;
        }
        searchIdx++;
      } else {
        searchIdx = 0;
      }
    }
    return result;
  }
};

// src/question.ts
var CardType = /* @__PURE__ */ ((CardType2) => {
  CardType2[CardType2["SingleLineBasic"] = 0] = "SingleLineBasic";
  CardType2[CardType2["SingleLineReversed"] = 1] = "SingleLineReversed";
  CardType2[CardType2["MultiLineBasic"] = 2] = "MultiLineBasic";
  CardType2[CardType2["MultiLineReversed"] = 3] = "MultiLineReversed";
  CardType2[CardType2["Cloze"] = 4] = "Cloze";
  return CardType2;
})(CardType || {});
var QuestionText = class _QuestionText {
  constructor(original, topicPathWithWs, actualQuestion, textDirection, blockId) {
    this.original = original;
    this.topicPathWithWs = topicPathWithWs;
    this.actualQuestion = actualQuestion;
    this.textDirection = textDirection;
    this.obsidianBlockId = blockId;
    this.textHash = cyrb53(this.formatTopicAndQuestion());
  }
  endsWithCodeBlock() {
    return this.actualQuestion.endsWith("```");
  }
  static create(original, textDirection, settings) {
    const [topicPathWithWs, actualQuestion, blockId] = this.splitText(original, settings);
    return new _QuestionText(original, topicPathWithWs, actualQuestion, textDirection, blockId);
  }
  static splitText(original, settings) {
    const originalWithoutSR = DataStore.getInstance().questionRemoveScheduleInfo(original);
    let actualQuestion = originalWithoutSR.trimEnd();
    let topicPathWithWs = null;
    let blockId = null;
    const topicPath = TopicPath.getTopicPathFromCardText(originalWithoutSR);
    if (topicPath == null ? void 0 : topicPath.hasPath) {
      const [preTopicPathWs, cardText2] = stringTrimStart(originalWithoutSR);
      const cardText3 = cardText2.replaceAll(OBSIDIAN_TAG_AT_STARTOFLINE_REGEX, "");
      let postTopicPathWs = null;
      [postTopicPathWs, actualQuestion] = stringTrimStart(cardText3);
      if (!settings.convertFoldersToDecks) {
        topicPathWithWs = new TopicPathWithWs(topicPath, preTopicPathWs, postTopicPathWs);
      }
    }
    [actualQuestion, blockId] = this.extractObsidianBlockId(actualQuestion);
    return [topicPathWithWs, actualQuestion, blockId];
  }
  static extractObsidianBlockId(text) {
    let question = text;
    let blockId = null;
    const match2 = text.match(OBSIDIAN_BLOCK_ID_ENDOFLINE_REGEX);
    if (match2) {
      blockId = match2[0].trim();
      const newLength = question.length - blockId.length;
      question = question.substring(0, newLength).trimEnd();
    }
    return [question, blockId];
  }
  formatTopicAndQuestion() {
    let result = "";
    if (this.topicPathWithWs) {
      result += this.topicPathWithWs.formatWithWs();
    }
    result += this.actualQuestion;
    return result;
  }
};
var Question = class _Question {
  get questionType() {
    return this.parsedQuestionInfo.cardType;
  }
  get lineNo() {
    return this.parsedQuestionInfo.firstLineNum;
  }
  constructor(init) {
    Object.assign(this, init);
  }
  getHtmlCommentSeparator(settings) {
    const sep2 = this.isCardCommentsOnSameLine(settings) ? " " : "\n";
    return sep2;
  }
  isCardCommentsOnSameLine(settings) {
    let result = settings.cardCommentOnSameLine;
    if (this.questionText.endsWithCodeBlock()) {
      result = false;
    }
    return result;
  }
  setCardList(cards) {
    this.cards = cards;
    this.cards.forEach((card) => card.question = this);
  }
  formatForNote(settings) {
    let result = this.questionText.formatTopicAndQuestion();
    const blockId = this.questionText.obsidianBlockId;
    const hasSchedule = this.cards.some((card) => card.hasSchedule);
    if (hasSchedule) {
      result = result.trimEnd();
      const scheduleHtml = DataStoreAlgorithm.getInstance().questionFormatScheduleAsHtmlComment(this);
      if (blockId) {
        if (this.isCardCommentsOnSameLine(settings))
          result += ` ${scheduleHtml} ${blockId}`;
        else result += ` ${blockId}
${scheduleHtml}`;
      } else {
        result += this.getHtmlCommentSeparator(settings) + scheduleHtml;
      }
    } else {
      if (blockId) result += ` ${blockId}`;
    }
    return result;
  }
  updateQuestionWithinNoteText(noteText, settings) {
    const originalText = this.questionText.original;
    const replacementText = this.formatForNote(settings);
    let newText = MultiLineTextFinder.findAndReplace(noteText, originalText, replacementText);
    if (newText) {
      this.questionText = QuestionText.create(
        replacementText,
        this.questionText.textDirection,
        settings
      );
    } else {
      console.error(
        `updateQuestionText: Text not found: ${originalText.substring(
          0,
          100
        )} in note: ${noteText.substring(0, 100)}`
      );
      newText = noteText;
    }
    return newText;
  }
  async writeQuestion(settings) {
    const fileText = await this.note.file.read();
    const newText = this.updateQuestionWithinNoteText(fileText, settings);
    await this.note.file.write(newText);
    this.hasChanged = false;
  }
  formatTopicPathList() {
    return this.topicPathList.format("|");
  }
  static Create(settings, parsedQuestionInfo, noteTopicPathList, textDirection, context) {
    const hasEditLaterTag = parsedQuestionInfo.text.includes(settings.editLaterTag);
    const questionText = QuestionText.create(
      parsedQuestionInfo.text,
      textDirection,
      settings
    );
    let topicPathList = noteTopicPathList;
    if (questionText.topicPathWithWs) {
      topicPathList = new TopicPathList([questionText.topicPathWithWs.topicPath]);
    }
    const result = new _Question({
      parsedQuestionInfo,
      topicPathList,
      questionText,
      hasEditLaterTag,
      questionContext: context,
      cards: null,
      hasChanged: false
    });
    return result;
  }
};

// src/parser.ts
var parser2 = null;
var oldOptions;
var debugParser = false;
function areParserOptionsEqual(options1, options2) {
  return options1.singleLineCardSeparator === options2.singleLineCardSeparator && options1.singleLineReversedCardSeparator === options2.singleLineReversedCardSeparator && options1.multilineCardSeparator === options2.multilineCardSeparator && options1.multilineReversedCardSeparator === options2.multilineReversedCardSeparator && options1.multilineCardEndMarker === options2.multilineCardEndMarker && options1.convertHighlightsToClozes === options2.convertHighlightsToClozes && options1.convertBoldTextToClozes === options2.convertBoldTextToClozes && options1.convertCurlyBracketsToClozes === options2.convertCurlyBracketsToClozes;
}
function generateParser(options2) {
  let grammar = null;
  if (debugParser) {
    if (grammar === null) {
      grammar = generateGrammar(options2);
    }
    console.log(
      "The parsers grammar is provided below. You can test it with https://peggyjs.org/online.html."
    );
    console.log({
      info: "Copy the grammar by right-clicking on the property grammar and copying it as a string. Then, paste it in https://peggyjs.org/online.html.",
      grammar
    });
  }
  if (parser2 === null || !areParserOptionsEqual(options2, oldOptions)) {
    oldOptions = Object.assign({}, options2);
    grammar = generateGrammar(options2);
    if (debugParser) {
      const t0 = Date.now();
      parser2 = (0, import_peggy.generate)(grammar);
      const t1 = Date.now();
      console.log("New parser generated in " + (t1 - t0) + " milliseconds.");
    } else {
      parser2 = (0, import_peggy.generate)(grammar);
    }
  } else {
    if (debugParser) {
      console.log("Parser already exists. No need to generate a new parser.");
    }
  }
  return parser2;
}
function generateGrammar(options2) {
  let clozes_grammar = "";
  const card_rules_list = ["html_comment", "tilde_code", "backprime_code"];
  if (options2.singleLineCardSeparator.trim() !== "") card_rules_list.push("inline_rev_card");
  if (options2.singleLineCardSeparator.trim() !== "") card_rules_list.push("inline_card");
  if (options2.multilineReversedCardSeparator.trim() !== "")
    card_rules_list.push("multiline_rev_card");
  if (options2.multilineCardSeparator.trim() !== "") card_rules_list.push("multiline_card");
  const cloze_rules_list = [];
  if (options2.convertHighlightsToClozes) cloze_rules_list.push("cloze_equal");
  if (options2.convertBoldTextToClozes) cloze_rules_list.push("cloze_star");
  if (options2.convertCurlyBracketsToClozes) cloze_rules_list.push("cloze_bracket");
  if (cloze_rules_list.length > 0) {
    card_rules_list.push("cloze_card");
    const cloze_rules = cloze_rules_list.join(" / ");
    clozes_grammar = `
cloze_card
= $(multiline_before_cloze? cloze_line (multiline_after_cloze)? (newline annotation)?) {
  return createParsedQuestionInfo(CardType.Cloze,text().trimEnd(),location().start.line-1,location().end.line-1);
}

cloze_line
= ((!cloze_text (inline_code / non_newline))* cloze_text) text_line_nonterminated?

multiline_before_cloze
= (!cloze_line nonempty_text_line)+

multiline_after_cloze
= e:(!(newline separator_line) text_line1)+

cloze_text
= ${cloze_rules}

cloze_equal
= cloze_mark_equal (!cloze_mark_equal non_newline)+  cloze_mark_equal

cloze_mark_equal
= "=="

cloze_star
= cloze_mark_star (!cloze_mark_star non_newline)+  cloze_mark_star

cloze_mark_star
= "**"

cloze_bracket
= cloze_mark_bracket_open (!cloze_mark_bracket_close non_newline)+  cloze_mark_bracket_close

cloze_mark_bracket_open
= "{{"

cloze_mark_bracket_close
= "}}"
`;
  }
  card_rules_list.push("loose_line");
  const card_rules = card_rules_list.join(" / ");
  return `{
    // The fallback case is important if we want to test the rules with https://peggyjs.org/online.html
    const CardTypeFallBack = {
      SingleLineBasic: 0,
      SingleLineReversed: 1,
      MultiLineBasic: 2,
      MultiLineReversed: 3,
      Cloze: 4,
    };

    // The fallback case is important if we want to test the rules with https://peggyjs.org/online.html
    const createParsedQuestionInfoFallBack = (cardType, text, firstLineNum, lastLineNum) => {
      return {cardType, text, firstLineNum, lastLineNum};
    };

    const CardType = options.CardType ? options.CardType : CardTypeFallBack;
    const createParsedQuestionInfo = options.createParsedQuestionInfo ? options.createParsedQuestionInfo : createParsedQuestionInfoFallBack;

    function filterBlocks(b) {
      return b.filter( (d) => d !== null )
    }
}

main
= blocks:block* { return filterBlocks(blocks); }

/* The input text to the parser contains arbitrary text, not just card definitions.
Hence we fallback to matching on loose_line. The result from loose_line is filtered out by filterBlocks() */
block
= ${card_rules}

html_comment
= $("" (html_comment / .))* "-->" newline?) {
  return null;
}

/* Obsidian tag definition: https://help.obsidian.md/Editing+and+formatting/Tags#Tag+format */
tag
= $("#" + name:([a-zA-Z/\\-_] { return 1; } / [0-9]{ return 0;})+ &{
  // check if it is a valid Obsidian tag - (Tags must contain at least one non-numerical character)
  return name.includes(1);
})

inline_card
= e:inline newline? { return e; }

inline
= $(left:(!inline_mark (inline_code / non_newline))+ inline_mark right:text_till_newline (newline annotation)?) {
  return createParsedQuestionInfo(CardType.SingleLineBasic,text(),location().start.line-1,location().end.line-1);
}

inline_rev_card
= e:inline_rev newline? { return e; }

inline_rev
= left:(!inline_rev_mark (inline_code / non_newline))+ inline_rev_mark right:text_till_newline (newline annotation)? {
    return createParsedQuestionInfo(CardType.SingleLineReversed,text(),location().start.line-1,location().end.line-1);
}

multiline_card
= c:multiline separator_line {
  return c;
}

multiline
= arg1:multiline_before multiline_mark arg2:multiline_after {
  return createParsedQuestionInfo(CardType.MultiLineBasic,(arg1+"${options2.multilineCardSeparator}\\n"+arg2.trimEnd()),location().start.line-1,location().end.line-2);
}

multiline_before
= $(!multiline_mark nonempty_text_line)+

multiline_after
= $(!separator_line (tilde_code / backprime_code / text_line))+

inline_code
= $("\`" (!"\`" .)* "\`")

tilde_code
= $(
  " "* left:$tilde_marker text_line
  (!(middle:$tilde_marker &{ return left.length===middle.length;}) (tilde_code / text_line))*
  (right:$tilde_marker &{ return left.length===right.length; })
  newline
) { return null; }

tilde_marker
= "~~~" "~"*

backprime_code
= $(
  " "* left:$backprime_marker text_line
  (!(middle:$backprime_marker  &{ return left.length===middle.length;}) (backprime_code / text_line))*
  (right:$backprime_marker &{ return left.length===right.length; })
  newline
) { return null; }

backprime_marker
= "\`\`\`" "\`"*

multiline_rev_card
= @multiline_rev separator_line

multiline_rev
= arg1:multiline_rev_before multiline_rev_mark arg2:multiline_rev_after {
  return createParsedQuestionInfo(CardType.MultiLineReversed,(arg1+"${options2.multilineReversedCardSeparator}\\n"+arg2.trimEnd()),location().start.line-1,location().end.line-2);
}

multiline_rev_before
= $(!multiline_rev_mark nonempty_text_line)+

multiline_rev_after
= $(!separator_line text_line)+

${clozes_grammar}

inline_mark
= "${options2.singleLineCardSeparator}"

inline_rev_mark
= "${options2.singleLineReversedCardSeparator}"

multiline_mark
= optional_whitespaces "${options2.multilineCardSeparator}" optional_whitespaces newline

multiline_rev_mark
= optional_whitespaces "${options2.multilineReversedCardSeparator}" optional_whitespaces newline

end_card_mark
= "${options2.multilineCardEndMarker}"

separator_line
= end_card_mark optional_whitespaces newline

text_line_nonterminated
= $nonempty_text_till_newline

nonempty_text_line
= nonempty_text_till_newline newline

text_line
= @$text_till_newline newline

// very likely, it is possible to homogeneize/modify the rules to use only either 'text_line1' or 'text_line'
text_line1
= newline @$text_till_newline

loose_line
= $((text_till_newline newline) / nonempty_text_till_newline) {
    return null;
  }

annotation
= $("" .)+ "-->")

nonempty_text_till_newline
= $(inline_code / non_newline)+

text_till_newline
= $non_newline*

non_newline
= [^\\n]

newline
= $[\\n]

empty_line
= $(whitespace_char* [\\n])

nonemptyspace
= [^ \\f\\t\\v\\u0020\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]

optional_whitespaces
= whitespace_char*

whitespace_char = ([ \\f\\t\\v\\u0020\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff])
`;
}
function setDebugParser(value) {
  debugParser = value;
}
var ParsedQuestionInfo = class {
  constructor(cardType, text, firstLineNum, lastLineNum) {
    this.cardType = cardType;
    this.text = text;
    this.firstLineNum = firstLineNum;
    this.lastLineNum = lastLineNum;
  }
  isQuestionLineNum(lineNum) {
    return lineNum >= this.firstLineNum && lineNum <= this.lastLineNum;
  }
};
function parseEx(text, options2) {
  if (debugParser) {
    console.log("Text to parse:\n<<<" + text + ">>>");
  }
  let cards = [];
  try {
    if (!options2) throw new Error("No parser options provided.");
    const parser3 = generateParser(options2);
    cards = parser3.parse(text + "\n\n\n", {
      CardType,
      createParsedQuestionInfo: (cardType, text2, firstLineNum, lastLineNum) => {
        return new ParsedQuestionInfo(cardType, text2, firstLineNum, lastLineNum);
      }
    });
  } catch (error) {
    console.error("Unexpected error:", error);
  }
  if (debugParser) {
    console.log("Parsed cards:\n", cards);
  }
  return cards;
}

// src/question-type.ts
var CardFrontBack = class {
  // The caller is responsible for any required trimming of leading/trailing spaces
  constructor(front, back) {
    this.front = front;
    this.back = back;
  }
};
var CardFrontBackUtil = class {
  static expand(questionType, questionText, settings) {
    const handler = QuestionTypeFactory.create(questionType);
    return handler.expand(questionText, settings);
  }
};
var QuestionType_SingleLineBasic = class {
  expand(questionText, settings) {
    const idx = questionText.indexOf(settings.singleLineCardSeparator);
    const item = new CardFrontBack(
      questionText.substring(0, idx),
      questionText.substring(idx + settings.singleLineCardSeparator.length)
    );
    const result = [item];
    return result;
  }
};
var QuestionType_SingleLineReversed = class {
  expand(questionText, settings) {
    const idx = questionText.indexOf(settings.singleLineReversedCardSeparator);
    const side1 = questionText.substring(0, idx), side2 = questionText.substring(
      idx + settings.singleLineReversedCardSeparator.length
    );
    const result = [
      new CardFrontBack(side1, side2),
      new CardFrontBack(side2, side1)
    ];
    return result;
  }
};
var QuestionType_MultiLineBasic = class {
  expand(questionText, settings) {
    const questionLines = questionText.split("\n");
    const lineIdx = findLineIndexOfSearchStringIgnoringWs(
      questionLines,
      settings.multilineCardSeparator
    );
    const side1 = questionLines.slice(0, lineIdx).join("\n");
    const side2 = questionLines.slice(lineIdx + 1).join("\n");
    const result = [new CardFrontBack(side1, side2)];
    return result;
  }
};
var QuestionType_MultiLineReversed = class {
  expand(questionText, settings) {
    const questionLines = questionText.split("\n");
    const lineIdx = findLineIndexOfSearchStringIgnoringWs(
      questionLines,
      settings.multilineReversedCardSeparator
    );
    const side1 = questionLines.slice(0, lineIdx).join("\n");
    const side2 = questionLines.slice(lineIdx + 1).join("\n");
    const result = [
      new CardFrontBack(side1, side2),
      new CardFrontBack(side2, side1)
    ];
    return result;
  }
};
var QuestionType_Cloze = class {
  expand(questionText, settings) {
    const siblings = [];
    if (settings.convertHighlightsToClozes) {
      siblings.push(...questionText.matchAll(/==(.*?)==/gm));
    }
    if (settings.convertBoldTextToClozes) {
      siblings.push(...questionText.matchAll(/\*\*(.*?)\*\*/gm));
    }
    if (settings.convertCurlyBracketsToClozes) {
      siblings.push(...questionText.matchAll(/{{(.*?)}}/gm));
    }
    siblings.sort((a, b) => {
      if (a.index < b.index) {
        return -1;
      }
      if (a.index > b.index) {
        return 1;
      }
      return 0;
    });
    let front, back;
    const result = [];
    for (const m of siblings) {
      const deletionStart = m.index, deletionEnd = deletionStart + m[0].length;
      front = questionText.substring(0, deletionStart) + QuestionType_ClozeUtil.renderClozeFront() + questionText.substring(deletionEnd);
      front = QuestionType_ClozeUtil.removeClozeTokens(front, settings);
      back = questionText.substring(0, deletionStart) + QuestionType_ClozeUtil.renderClozeBack(
        questionText.substring(deletionStart, deletionEnd)
      ) + questionText.substring(deletionEnd);
      back = QuestionType_ClozeUtil.removeClozeTokens(back, settings);
      result.push(new CardFrontBack(front, back));
    }
    return result;
  }
};
var QuestionType_ClozeUtil = class {
  static renderClozeFront() {
    return "[...]";
  }
  static renderClozeBack(str) {
    return "" + str + "";
  }
  static removeClozeTokens(text, settings) {
    let result = text;
    if (settings.convertHighlightsToClozes) result = result.replace(/==/gm, "");
    if (settings.convertBoldTextToClozes) result = result.replace(/\*\*/gm, "");
    if (settings.convertCurlyBracketsToClozes) {
      result = result.replace(/{{/gm, "").replace(/}}/gm, "");
    }
    return result;
  }
};
var QuestionTypeFactory = class {
  static create(questionType) {
    let handler;
    switch (questionType) {
      case 0 /* SingleLineBasic */:
        handler = new QuestionType_SingleLineBasic();
        break;
      case 1 /* SingleLineReversed */:
        handler = new QuestionType_SingleLineReversed();
        break;
      case 2 /* MultiLineBasic */:
        handler = new QuestionType_MultiLineBasic();
        break;
      case 3 /* MultiLineReversed */:
        handler = new QuestionType_MultiLineReversed();
        break;
      case 4 /* Cloze */:
        handler = new QuestionType_Cloze();
        break;
    }
    return handler;
  }
};

// src/settings.ts
var import_obsidian3 = require("obsidian");

// src/gui/tabs.tsx
var import_obsidian2 = require("obsidian");
function createTabs(container_element, tabs, activateTabId) {
  const tab_header = container_element.createEl("div", {
    attr: { class: "sr-tab-header" }
  });
  const tab_content_containers = {};
  const tab_buttons = {};
  const tab_structure = {
    header: tab_header,
    active_tab_id: Object.keys(tabs)[0],
    // Indicate that the first tab is active. This does not affect what tab is active in practise, it just reports the active tab.
    buttons: tab_buttons,
    contentContainers: tab_content_containers,
    contentGeneratorPromises: {}
  };
  let first_button;
  for (const tab_id in tabs) {
    const tab = tabs[tab_id];
    const button = tab_header.createEl("button", {
      attr: {
        class: "sr-tab-header-button",
        activateTab: "sr-tab-" + tab_id
      }
    });
    button.onclick = function(event) {
      var _a2;
      const tab_button = this;
      let max_width = 0;
      let max_height = 0;
      const tab_header2 = tab_button.parentElement;
      if (null === tab_header2) {
        throw new Error("Tab header is missing. Did not get a parent from tab button.");
      }
      const container_element2 = tab_header2.parentElement;
      if (null === container_element2) {
        throw new Error(
          "Container element is missing. Did not get a parent from tab header."
        );
      }
      const tab_contents = container_element2.findAll("div.sr-tab-content");
      const is_main_settings_modal = container_element2.hasClass("vertical-tab-content");
      for (const index in tab_contents) {
        const tab_content2 = tab_contents[index];
        if (!is_main_settings_modal) {
          tab_content2.addClass("sr-tab-active");
          if (tab_content2.offsetHeight > max_height) {
            max_height = tab_content2.offsetHeight;
          }
          if (tab_content2.offsetWidth > max_width) {
            max_width = tab_content2.offsetWidth;
          }
        }
        tab_content2.removeClass("sr-tab-active");
      }
      const adjacent_tab_buttons = tab_header2.findAll(".sr-tab-header-button");
      for (const index in adjacent_tab_buttons) {
        const tab_button2 = adjacent_tab_buttons[index];
        tab_button2.removeClass("sr-tab-active");
      }
      tab_button.addClass("sr-tab-active");
      const activateTabAttribute = tab_button.attributes.getNamedItem("activateTab");
      if (null === activateTabAttribute) {
        throw new Error("Tab button has no 'activateTab' HTML attribute! Murr!");
      }
      const activate_tab_id = activateTabAttribute.value;
      const tab_content = document.getElementById(activate_tab_id);
      if (null === tab_content) {
        throw new Error(
          "No tab content was found with activate_tab_id '" + activate_tab_id + "'! Hmph!"
        );
      }
      tab_content.addClass("sr-tab-active");
      tab_structure.active_tab_id = activate_tab_id.replace(/^sr-tab-/, "");
      (_a2 = tab_content.find(".sr-focus-element-on-tab-opening")) == null ? void 0 : _a2.focus();
      if (!is_main_settings_modal) {
        tab_content.style.width = max_width + "px";
        tab_content.style.height = max_height + "px";
      }
      event.preventDefault();
    };
    if (tab.icon) (0, import_obsidian2.setIcon)(button, tab.icon);
    button.insertAdjacentText("beforeend", " " + tab.title);
    tab_buttons[tab_id] = button;
    tab_content_containers[tab_id] = container_element.createEl("div", {
      attr: { class: "sr-tab-content", id: "sr-tab-" + tab_id }
    });
    tab_structure.contentGeneratorPromises[tab_id] = tab.content_generator(
      tab_content_containers[tab_id]
    );
    if (void 0 === first_button) {
      first_button = button;
    }
  }
  tab_buttons[activateTabId].click();
  return tab_structure;
}

// src/settings.ts
var DEFAULT_SETTINGS = {
  // flashcards
  flashcardEasyText: t("EASY"),
  flashcardGoodText: t("GOOD"),
  flashcardHardText: t("HARD"),
  reviewButtonDelay: 0,
  flashcardTags: ["#flashcards"],
  convertFoldersToDecks: false,
  cardCommentOnSameLine: false,
  burySiblingCards: false,
  showContextInCards: true,
  flashcardHeightPercentage: import_obsidian3.Platform.isMobile ? 100 : 80,
  flashcardWidthPercentage: import_obsidian3.Platform.isMobile ? 100 : 40,
  randomizeCardOrder: null,
  flashcardCardOrder: "DueFirstRandom",
  flashcardDeckOrder: "PrevDeckComplete_Sequential",
  convertHighlightsToClozes: true,
  convertBoldTextToClozes: false,
  convertCurlyBracketsToClozes: false,
  singleLineCardSeparator: "::",
  singleLineReversedCardSeparator: ":::",
  multilineCardSeparator: "?",
  multilineReversedCardSeparator: "??",
  multilineCardEndMarker: "",
  editLaterTag: "#edit-later",
  // notes
  enableNoteReviewPaneOnStartup: true,
  tagsToReview: ["#review"],
  noteFoldersToIgnore: ["**/*.excalidraw.md"],
  openRandomNote: false,
  autoNextNote: false,
  disableFileMenuReviewOptions: false,
  maxNDaysNotesReviewQueue: 365,
  // UI settings
  showRibbonIcon: true,
  showStatusBar: true,
  initiallyExpandAllSubdecksInTree: false,
  // algorithm
  baseEase: 250,
  lapsesIntervalChange: 0.5,
  easyBonus: 1.3,
  maximumInterval: 36525,
  maxLinkFactor: 1,
  // logging
  showDebugMessages: false,
  showPaserDebugMessages: false
};
function upgradeSettings(settings) {
  if (settings.randomizeCardOrder != null && settings.flashcardCardOrder == null && settings.flashcardDeckOrder == null) {
    console.log(`loadPluginData: Upgrading settings: ${settings.randomizeCardOrder}`);
    settings.flashcardCardOrder = settings.randomizeCardOrder ? "DueFirstRandom" : "DueFirstSequential";
    settings.flashcardDeckOrder = "PrevDeckComplete_Sequential";
    settings.randomizeCardOrder = null;
  }
}
var SettingsUtil = class _SettingsUtil {
  static isFlashcardTag(settings, tag) {
    return _SettingsUtil.isTagInList(settings.flashcardTags, tag);
  }
  static isPathInNoteIgnoreFolder(settings, path2) {
    return settings.noteFoldersToIgnore.some((folder) => pathMatchesPattern(path2, folder));
  }
  static isAnyTagANoteReviewTag(settings, tags) {
    for (const tag of tags) {
      if (settings.tagsToReview.some(
        (tagToReview) => tag === tagToReview || tag.startsWith(tagToReview + "/")
      )) {
        return true;
      }
    }
    return false;
  }
  // Given a list of tags, return the subset that is in settings.tagsToReview
  static filterForNoteReviewTag(settings, tags) {
    const result = [];
    for (const tagToReview of settings.tagsToReview) {
      if (tags.some((tag) => tag === tagToReview || tag.startsWith(tagToReview + "/"))) {
        result.push(tagToReview);
      }
    }
    return result;
  }
  static isTagInList(tagList, tag) {
    for (const tagFromList of tagList) {
      if (tag === tagFromList || tag.startsWith(tagFromList + "/")) {
        return true;
      }
    }
    return false;
  }
};
var applyDebounceTimer = 0;
function applySettingsUpdate(callback2) {
  clearTimeout(applyDebounceTimer);
  applyDebounceTimer = window.setTimeout(callback2, 512);
}
var SRSettingTab = class extends import_obsidian3.PluginSettingTab {
  constructor(app, plugin) {
    super(app, plugin);
    this.last_position = {
      scroll_position: 0,
      tab_name: "main-flashcards"
    };
    this.plugin = plugin;
  }
  display() {
    const { containerEl } = this;
    containerEl.empty();
    const header = containerEl.createEl("h4", {
      text: `${t("SETTINGS_HEADER")}`
    });
    header.addClass("sr-centered");
    this.tab_structure = createTabs(
      containerEl,
      {
        "main-flashcards": {
          title: t("FLASHCARDS"),
          icon: null,
          // "SpacedRepIcon",
          content_generator: (container_element) => this.tabFlashcards(container_element)
        },
        "main-notes": {
          title: t("NOTES"),
          icon: null,
          // "note-glyph",
          content_generator: (container_element) => this.tabNotes(container_element)
        },
        "main-algorithm": {
          title: "Algorithm",
          icon: null,
          // "dot-network",
          content_generator: (container_element) => this.tabAlgorithm(container_element)
        },
        "main-ui-preferences": {
          title: t("UI_PREFERENCES"),
          icon: null,
          // "presentation",
          content_generator: (container_element) => this.tabUiPreferences(container_element)
        },
        "main-developer": {
          title: "Developer",
          icon: null,
          // "code-glyph",
          content_generator: (container_element) => this.tabDeveloper(container_element)
        },
        "main-help": {
          title: "Help",
          icon: null,
          // "help",
          content_generator: (container_element) => this.tabHelp(container_element)
        }
      },
      this.last_position.tab_name
    );
    this.tab_structure.contentGeneratorPromises[this.tab_structure.active_tab_id].then(() => {
      this.rememberLastPosition(containerEl);
    });
  }
  async tabFlashcards(containerEl) {
    containerEl.createEl("h3", { text: t("GROUP_TAGS_FOLDERS") });
    {
      new import_obsidian3.Setting(containerEl).setName(t("FLASHCARD_TAGS")).setDesc(t("FLASHCARD_TAGS_DESC")).addTextArea(
        (text) => text.setValue(this.plugin.data.settings.flashcardTags.join(" ")).onChange((value) => {
          applySettingsUpdate(async () => {
            this.plugin.data.settings.flashcardTags = value.split(/\s+/);
            await this.plugin.savePluginData();
          });
        })
      );
      new import_obsidian3.Setting(containerEl).setName(t("CONVERT_FOLDERS_TO_DECKS")).setDesc(t("CONVERT_FOLDERS_TO_DECKS_DESC")).addToggle(
        (toggle) => toggle.setValue(this.plugin.data.settings.convertFoldersToDecks).onChange(async (value) => {
          this.plugin.data.settings.convertFoldersToDecks = value;
          await this.plugin.savePluginData();
        })
      );
      this.createSetting_FoldersToIgnore(containerEl);
    }
    containerEl.createEl("h3", { text: t("GROUP_FLASHCARD_REVIEW") });
    {
      new import_obsidian3.Setting(containerEl).setName(t("BURY_SIBLINGS_TILL_NEXT_DAY")).setDesc(t("BURY_SIBLINGS_TILL_NEXT_DAY_DESC")).addToggle(
        (toggle) => toggle.setValue(this.plugin.data.settings.burySiblingCards).onChange(async (value) => {
          this.plugin.data.settings.burySiblingCards = value;
          await this.plugin.savePluginData();
        })
      );
      new import_obsidian3.Setting(containerEl).setName(t("REVIEW_CARD_ORDER_WITHIN_DECK")).addDropdown(
        (dropdown) => dropdown.addOptions({
          NewFirstSequential: t("REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL"),
          DueFirstSequential: t("REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL"),
          NewFirstRandom: t("REVIEW_CARD_ORDER_NEW_FIRST_RANDOM"),
          DueFirstRandom: t("REVIEW_CARD_ORDER_DUE_FIRST_RANDOM"),
          EveryCardRandomDeckAndCard: t("REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD")
        }).setValue(this.plugin.data.settings.flashcardCardOrder).onChange(async (value) => {
          this.plugin.data.settings.flashcardCardOrder = value;
          await this.plugin.savePluginData();
          this.display();
        })
      );
      const deckOrderEnabled = this.plugin.data.settings.flashcardCardOrder != "EveryCardRandomDeckAndCard";
      new import_obsidian3.Setting(containerEl).setName(t("REVIEW_DECK_ORDER")).addDropdown(
        (dropdown) => dropdown.addOptions(
          deckOrderEnabled ? {
            PrevDeckComplete_Sequential: t(
              "REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL"
            ),
            PrevDeckComplete_Random: t(
              "REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM"
            )
          } : {
            EveryCardRandomDeckAndCard: t(
              "REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD"
            )
          }
        ).setValue(
          deckOrderEnabled ? this.plugin.data.settings.flashcardDeckOrder : "EveryCardRandomDeckAndCard"
        ).setDisabled(!deckOrderEnabled).onChange(async (value) => {
          this.plugin.data.settings.flashcardDeckOrder = value;
          await this.plugin.savePluginData();
        })
      );
    }
    containerEl.createEl("h3", { text: t("GROUP_FLASHCARD_SEPARATORS") });
    {
      new import_obsidian3.Setting(containerEl).setName(t("CONVERT_HIGHLIGHTS_TO_CLOZES")).addToggle(
        (toggle) => toggle.setValue(this.plugin.data.settings.convertHighlightsToClozes).onChange(async (value) => {
          this.plugin.data.settings.convertHighlightsToClozes = value;
          this.plugin.debouncedGenerateParser();
          await this.plugin.savePluginData();
        })
      );
      new import_obsidian3.Setting(containerEl).setName(t("CONVERT_BOLD_TEXT_TO_CLOZES")).addToggle(
        (toggle) => toggle.setValue(this.plugin.data.settings.convertBoldTextToClozes).onChange(async (value) => {
          this.plugin.data.settings.convertBoldTextToClozes = value;
          this.plugin.debouncedGenerateParser();
          await this.plugin.savePluginData();
        })
      );
      new import_obsidian3.Setting(containerEl).setName(t("CONVERT_CURLY_BRACKETS_TO_CLOZES")).addToggle(
        (toggle) => toggle.setValue(this.plugin.data.settings.convertCurlyBracketsToClozes).onChange(async (value) => {
          this.plugin.data.settings.convertCurlyBracketsToClozes = value;
          this.plugin.debouncedGenerateParser();
          await this.plugin.savePluginData();
        })
      );
      new import_obsidian3.Setting(containerEl).setName(t("INLINE_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText(
        (text) => text.setValue(this.plugin.data.settings.singleLineCardSeparator).onChange((value) => {
          applySettingsUpdate(async () => {
            this.plugin.data.settings.singleLineCardSeparator = value;
            this.plugin.debouncedGenerateParser();
            await this.plugin.savePluginData();
          });
        })
      ).addExtraButton((button) => {
        button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
          this.plugin.data.settings.singleLineCardSeparator = DEFAULT_SETTINGS.singleLineCardSeparator;
          this.plugin.debouncedGenerateParser();
          await this.plugin.savePluginData();
          this.display();
        });
      });
      new import_obsidian3.Setting(containerEl).setName(t("INLINE_REVERSED_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText(
        (text) => text.setValue(this.plugin.data.settings.singleLineReversedCardSeparator).onChange((value) => {
          applySettingsUpdate(async () => {
            this.plugin.data.settings.singleLineReversedCardSeparator = value;
            this.plugin.debouncedGenerateParser();
            await this.plugin.savePluginData();
          });
        })
      ).addExtraButton((button) => {
        button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
          this.plugin.data.settings.singleLineReversedCardSeparator = DEFAULT_SETTINGS.singleLineReversedCardSeparator;
          this.plugin.debouncedGenerateParser();
          await this.plugin.savePluginData();
          this.display();
        });
      });
      new import_obsidian3.Setting(containerEl).setName(t("MULTILINE_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText(
        (text) => text.setValue(this.plugin.data.settings.multilineCardSeparator).onChange((value) => {
          applySettingsUpdate(async () => {
            this.plugin.data.settings.multilineCardSeparator = value;
            this.plugin.debouncedGenerateParser();
            await this.plugin.savePluginData();
          });
        })
      ).addExtraButton((button) => {
        button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
          this.plugin.data.settings.multilineCardSeparator = DEFAULT_SETTINGS.multilineCardSeparator;
          this.plugin.debouncedGenerateParser();
          await this.plugin.savePluginData();
          this.display();
        });
      });
      new import_obsidian3.Setting(containerEl).setName(t("MULTILINE_REVERSED_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText(
        (text) => text.setValue(this.plugin.data.settings.multilineReversedCardSeparator).onChange((value) => {
          applySettingsUpdate(async () => {
            this.plugin.data.settings.multilineReversedCardSeparator = value;
            this.plugin.debouncedGenerateParser();
            await this.plugin.savePluginData();
          });
        })
      ).addExtraButton((button) => {
        button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
          this.plugin.data.settings.multilineReversedCardSeparator = DEFAULT_SETTINGS.multilineReversedCardSeparator;
          this.plugin.debouncedGenerateParser();
          await this.plugin.savePluginData();
          this.display();
        });
      });
      new import_obsidian3.Setting(containerEl).setName(t("MULTILINE_CARDS_END_MARKER")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText(
        (text) => text.setValue(this.plugin.data.settings.multilineCardEndMarker).onChange((value) => {
          applySettingsUpdate(async () => {
            this.plugin.data.settings.multilineCardEndMarker = value;
            this.plugin.debouncedGenerateParser();
            await this.plugin.savePluginData();
          });
        })
      ).addExtraButton((button) => {
        button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
          this.plugin.data.settings.multilineCardEndMarker = DEFAULT_SETTINGS.multilineCardEndMarker;
          this.plugin.debouncedGenerateParser();
          await this.plugin.savePluginData();
          this.display();
        });
      });
    }
    containerEl.createEl("h3", { text: t("GROUP_DATA_STORAGE") });
    {
      new import_obsidian3.Setting(containerEl).setName(t("INLINE_SCHEDULING_COMMENTS")).setDesc(t("INLINE_SCHEDULING_COMMENTS_DESC")).addToggle(
        (toggle) => toggle.setValue(this.plugin.data.settings.cardCommentOnSameLine).onChange(async (value) => {
          this.plugin.data.settings.cardCommentOnSameLine = value;
          await this.plugin.savePluginData();
        })
      );
    }
  }
  async tabNotes(containerEl) {
    containerEl.createEl("br");
    new import_obsidian3.Setting(containerEl).setName(t("REVIEW_PANE_ON_STARTUP")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.enableNoteReviewPaneOnStartup).onChange(async (value) => {
        this.plugin.data.settings.enableNoteReviewPaneOnStartup = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian3.Setting(containerEl).setName(t("TAGS_TO_REVIEW")).setDesc(t("TAGS_TO_REVIEW_DESC")).addTextArea(
      (text) => text.setValue(this.plugin.data.settings.tagsToReview.join(" ")).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.tagsToReview = value.split(/\s+/);
          await this.plugin.savePluginData();
        });
      })
    );
    this.createSetting_FoldersToIgnore(containerEl);
    new import_obsidian3.Setting(containerEl).setName(t("OPEN_RANDOM_NOTE")).setDesc(t("OPEN_RANDOM_NOTE_DESC")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.openRandomNote).onChange(async (value) => {
        this.plugin.data.settings.openRandomNote = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian3.Setting(containerEl).setName(t("AUTO_NEXT_NOTE")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.autoNextNote).onChange(async (value) => {
        this.plugin.data.settings.autoNextNote = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian3.Setting(containerEl).setName(t("MAX_N_DAYS_REVIEW_QUEUE")).addText(
      (text) => text.setValue(this.plugin.data.settings.maxNDaysNotesReviewQueue.toString()).onChange((value) => {
        applySettingsUpdate(async () => {
          const numValue = Number.parseInt(value);
          if (!isNaN(numValue)) {
            if (numValue < 1) {
              new import_obsidian3.Notice(t("MIN_ONE_DAY"));
              text.setValue(
                this.plugin.data.settings.maxNDaysNotesReviewQueue.toString()
              );
              return;
            }
            this.plugin.data.settings.maxNDaysNotesReviewQueue = numValue;
            await this.plugin.savePluginData();
          } else {
            new import_obsidian3.Notice(t("VALID_NUMBER_WARNING"));
          }
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.maxNDaysNotesReviewQueue = DEFAULT_SETTINGS.maxNDaysNotesReviewQueue;
        await this.plugin.savePluginData();
        this.display();
      });
    });
  }
  async createSetting_FoldersToIgnore(containerEl) {
    new import_obsidian3.Setting(containerEl).setName(t("FOLDERS_TO_IGNORE")).setDesc(t("FOLDERS_TO_IGNORE_DESC")).addTextArea(
      (text) => text.setValue(this.plugin.data.settings.noteFoldersToIgnore.join("\n")).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.noteFoldersToIgnore = value.split(/\n+/).map((v) => v.trim()).filter((v) => v);
          await this.plugin.savePluginData();
        });
      })
    );
  }
  async tabUiPreferences(containerEl) {
    containerEl.createEl("h3", { text: t("OBSIDIAN_INTEGRATION") });
    new import_obsidian3.Setting(containerEl).setName(t("SHOW_RIBBON_ICON")).setDesc(t("SHOW_RIBBON_ICON_DESC")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.showRibbonIcon).onChange(async (value) => {
        this.plugin.data.settings.showRibbonIcon = value;
        await this.plugin.savePluginData();
        this.plugin.showRibbonIcon(value);
      })
    );
    new import_obsidian3.Setting(containerEl).setName(t("SHOW_STATUS_BAR")).setDesc(t("SHOW_STATUS_BAR_DESC")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.showStatusBar).onChange(async (value) => {
        this.plugin.data.settings.showStatusBar = value;
        await this.plugin.savePluginData();
        this.plugin.showStatusBar(value);
      })
    );
    new import_obsidian3.Setting(containerEl).setName(t("ENABLE_FILE_MENU_REVIEW_OPTIONS")).setDesc(t("ENABLE_FILE_MENU_REVIEW_OPTIONS_DESC")).addToggle(
      (toggle) => toggle.setValue(!this.plugin.data.settings.disableFileMenuReviewOptions).onChange(async (value) => {
        this.plugin.data.settings.disableFileMenuReviewOptions = !value;
        await this.plugin.savePluginData();
        this.plugin.showFileMenuItems(value);
      })
    );
    containerEl.createEl("h3", { text: t("FLASHCARDS") });
    new import_obsidian3.Setting(containerEl).setName(t("INITIALLY_EXPAND_SUBDECKS_IN_TREE")).setDesc(t("INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.initiallyExpandAllSubdecksInTree).onChange(async (value) => {
        this.plugin.data.settings.initiallyExpandAllSubdecksInTree = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian3.Setting(containerEl).setName(t("SHOW_CARD_CONTEXT")).setDesc(t("SHOW_CARD_CONTEXT_DESC")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.showContextInCards).onChange(async (value) => {
        this.plugin.data.settings.showContextInCards = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian3.Setting(containerEl).setName(t("CARD_MODAL_HEIGHT_PERCENT")).setDesc(t("CARD_MODAL_SIZE_PERCENT_DESC")).addSlider(
      (slider) => slider.setLimits(10, 100, 5).setValue(this.plugin.data.settings.flashcardHeightPercentage).setDynamicTooltip().onChange(async (value) => {
        this.plugin.data.settings.flashcardHeightPercentage = value;
        await this.plugin.savePluginData();
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.flashcardHeightPercentage = DEFAULT_SETTINGS.flashcardHeightPercentage;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian3.Setting(containerEl).setName(t("CARD_MODAL_WIDTH_PERCENT")).setDesc(t("CARD_MODAL_SIZE_PERCENT_DESC")).addSlider(
      (slider) => slider.setLimits(10, 100, 5).setValue(this.plugin.data.settings.flashcardWidthPercentage).setDynamicTooltip().onChange(async (value) => {
        this.plugin.data.settings.flashcardWidthPercentage = value;
        await this.plugin.savePluginData();
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.flashcardWidthPercentage = DEFAULT_SETTINGS.flashcardWidthPercentage;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    containerEl.createEl("h3", { text: t("GROUP_FLASHCARDS_NOTES") });
    new import_obsidian3.Setting(containerEl).setName(t("FLASHCARD_EASY_LABEL")).setDesc(t("FLASHCARD_EASY_DESC")).addText(
      (text) => text.setValue(this.plugin.data.settings.flashcardEasyText).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.flashcardEasyText = value;
          await this.plugin.savePluginData();
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.flashcardEasyText = DEFAULT_SETTINGS.flashcardEasyText;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian3.Setting(containerEl).setName(t("FLASHCARD_GOOD_LABEL")).setDesc(t("FLASHCARD_GOOD_DESC")).addText(
      (text) => text.setValue(this.plugin.data.settings.flashcardGoodText).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.flashcardGoodText = value;
          await this.plugin.savePluginData();
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.flashcardGoodText = DEFAULT_SETTINGS.flashcardGoodText;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian3.Setting(containerEl).setName(t("FLASHCARD_HARD_LABEL")).setDesc(t("FLASHCARD_HARD_DESC")).addText(
      (text) => text.setValue(this.plugin.data.settings.flashcardHardText).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.flashcardHardText = value;
          await this.plugin.savePluginData();
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.flashcardHardText = DEFAULT_SETTINGS.flashcardHardText;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian3.Setting(containerEl).setName(t("REVIEW_BUTTON_DELAY")).setDesc(t("REVIEW_BUTTON_DELAY_DESC")).addSlider(
      (slider) => slider.setLimits(0, 5e3, 100).setValue(this.plugin.data.settings.reviewButtonDelay).setDynamicTooltip().onChange(async (value) => {
        this.plugin.data.settings.reviewButtonDelay = value;
        await this.plugin.savePluginData();
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.reviewButtonDelay = DEFAULT_SETTINGS.reviewButtonDelay;
        await this.plugin.savePluginData();
        this.display();
      });
    });
  }
  async tabAlgorithm(containerEl) {
    containerEl.createEl("p").insertAdjacentHTML(
      "beforeend",
      t("CHECK_ALGORITHM_WIKI", {
        algo_url: "https://www.stephenmwangi.com/obsidian-spaced-repetition/"
      })
    );
    new import_obsidian3.Setting(containerEl).setName(t("BASE_EASE")).setDesc(t("BASE_EASE_DESC")).addText(
      (text) => text.setValue(this.plugin.data.settings.baseEase.toString()).onChange((value) => {
        applySettingsUpdate(async () => {
          const numValue = Number.parseInt(value);
          if (!isNaN(numValue)) {
            if (numValue < 130) {
              new import_obsidian3.Notice(t("BASE_EASE_MIN_WARNING"));
              text.setValue(this.plugin.data.settings.baseEase.toString());
              return;
            }
            this.plugin.data.settings.baseEase = numValue;
            await this.plugin.savePluginData();
          } else {
            new import_obsidian3.Notice(t("VALID_NUMBER_WARNING"));
          }
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.baseEase = DEFAULT_SETTINGS.baseEase;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian3.Setting(containerEl).setName(t("LAPSE_INTERVAL_CHANGE")).setDesc(t("LAPSE_INTERVAL_CHANGE_DESC")).addSlider(
      (slider) => slider.setLimits(1, 99, 1).setValue(this.plugin.data.settings.lapsesIntervalChange * 100).setDynamicTooltip().onChange(async (value) => {
        this.plugin.data.settings.lapsesIntervalChange = value / 100;
        await this.plugin.savePluginData();
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.lapsesIntervalChange = DEFAULT_SETTINGS.lapsesIntervalChange;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian3.Setting(containerEl).setName(t("EASY_BONUS")).setDesc(t("EASY_BONUS_DESC")).addText(
      (text) => text.setValue((this.plugin.data.settings.easyBonus * 100).toString()).onChange((value) => {
        applySettingsUpdate(async () => {
          const numValue = Number.parseInt(value) / 100;
          if (!isNaN(numValue)) {
            if (numValue < 1) {
              new import_obsidian3.Notice(t("EASY_BONUS_MIN_WARNING"));
              text.setValue(
                (this.plugin.data.settings.easyBonus * 100).toString()
              );
              return;
            }
            this.plugin.data.settings.easyBonus = numValue;
            await this.plugin.savePluginData();
          } else {
            new import_obsidian3.Notice(t("VALID_NUMBER_WARNING"));
          }
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.easyBonus = DEFAULT_SETTINGS.easyBonus;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian3.Setting(containerEl).setName(t("MAX_INTERVAL")).setDesc(t("MAX_INTERVAL_DESC")).addText(
      (text) => text.setValue(this.plugin.data.settings.maximumInterval.toString()).onChange((value) => {
        applySettingsUpdate(async () => {
          const numValue = Number.parseInt(value);
          if (!isNaN(numValue)) {
            if (numValue < 1) {
              new import_obsidian3.Notice(t("MAX_INTERVAL_MIN_WARNING"));
              text.setValue(
                this.plugin.data.settings.maximumInterval.toString()
              );
              return;
            }
            this.plugin.data.settings.maximumInterval = numValue;
            await this.plugin.savePluginData();
          } else {
            new import_obsidian3.Notice(t("VALID_NUMBER_WARNING"));
          }
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.maximumInterval = DEFAULT_SETTINGS.maximumInterval;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian3.Setting(containerEl).setName(t("MAX_LINK_CONTRIB")).setDesc(t("MAX_LINK_CONTRIB_DESC")).addSlider(
      (slider) => slider.setLimits(0, 100, 1).setValue(this.plugin.data.settings.maxLinkFactor * 100).setDynamicTooltip().onChange(async (value) => {
        this.plugin.data.settings.maxLinkFactor = value / 100;
        await this.plugin.savePluginData();
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.maxLinkFactor = DEFAULT_SETTINGS.maxLinkFactor;
        await this.plugin.savePluginData();
        this.display();
      });
    });
  }
  async tabDeveloper(containerEl) {
    containerEl.createEl("h3", { text: `${t("LOGGING")}` });
    new import_obsidian3.Setting(containerEl).setName(t("DISPLAY_DEBUG_INFO")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.showDebugMessages).onChange(async (value) => {
        this.plugin.data.settings.showDebugMessages = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian3.Setting(containerEl).setName(t("DISPLAY_PARSER_DEBUG_INFO")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.showPaserDebugMessages).onChange(async (value) => {
        this.plugin.data.settings.showPaserDebugMessages = value;
        setDebugParser(this.plugin.data.settings.showPaserDebugMessages);
        await this.plugin.savePluginData();
      })
    );
    containerEl.createEl("h3", { text: t("GROUP_CONTRIBUTING") });
    containerEl.createEl("p").insertAdjacentHTML(
      "beforeend",
      t("GITHUB_SOURCE_CODE", {
        github_project_url: "https://github.com/st3v3nmw/obsidian-spaced-repetition"
      })
    );
    containerEl.createEl("p").insertAdjacentHTML(
      "beforeend",
      t("CODE_CONTRIBUTION_INFO", {
        code_contribution_url: "https://www.stephenmwangi.com/obsidian-spaced-repetition/contributing/#code"
      })
    );
    containerEl.createEl("p").insertAdjacentHTML(
      "beforeend",
      t("TRANSLATION_CONTRIBUTION_INFO", {
        translation_contribution_url: "https://www.stephenmwangi.com/obsidian-spaced-repetition/contributing/#translating"
      })
    );
  }
  async tabHelp(containerEl) {
    containerEl.createEl("p").insertAdjacentHTML(
      "beforeend",
      t("CHECK_WIKI", {
        wiki_url: "https://www.stephenmwangi.com/obsidian-spaced-repetition/"
      })
    );
    containerEl.createEl("p").insertAdjacentHTML(
      "beforeend",
      t("GITHUB_DISCUSSIONS", {
        discussions_url: "https://github.com/st3v3nmw/obsidian-spaced-repetition/discussions/"
      })
    );
    containerEl.createEl("p").insertAdjacentHTML(
      "beforeend",
      t("GITHUB_ISSUES", {
        issues_url: "https://github.com/st3v3nmw/obsidian-spaced-repetition/issues/"
      })
    );
  }
  rememberLastPosition(container_element) {
    const last_position = this.last_position;
    this.tab_structure.buttons[last_position.tab_name].click();
    container_element.scrollTo({
      top: this.last_position.scroll_position,
      behavior: "auto"
    });
    container_element.addEventListener("scroll", (_) => {
      this.last_position.scroll_position = container_element.scrollTop;
    });
    for (const tab_name in this.tab_structure.buttons) {
      const button = this.tab_structure.buttons[tab_name];
      button.onClickEvent((_) => {
        last_position.tab_name = tab_name;
      });
    }
  }
};

// src/sr-file.ts
var import_obsidian4 = require("obsidian");
var frontmatterTagPseudoLineNum = -1;
var SrTFile = class {
  constructor(vault, metadataCache, file) {
    this.vault = vault;
    this.metadataCache = metadataCache;
    this.file = file;
  }
  get path() {
    return this.file.path;
  }
  get basename() {
    return this.file.basename;
  }
  get tfile() {
    return this.file;
  }
  async getFrontmatter() {
    const fileCachedData = this.metadataCache.getFileCache(this.file) || {};
    const frontmatter = fileCachedData.frontmatter || {};
    const result = /* @__PURE__ */ new Map();
    for (const [key, value] of Object.entries(frontmatter)) {
      const v = Array.isArray(value) && value.length > 0 ? value[0] : value;
      const vStr = v + "";
      result.set(key, vStr);
    }
    return result;
  }
  getAllTagsFromCache() {
    const fileCachedData = this.metadataCache.getFileCache(this.file) || {};
    const result = (0, import_obsidian4.getAllTags)(fileCachedData) || [];
    return result;
  }
  getAllTagsFromText() {
    var _a2;
    const result = [];
    const fileCachedData = this.metadataCache.getFileCache(this.file) || {};
    if (((_a2 = fileCachedData.tags) == null ? void 0 : _a2.length) > 0) {
      result.push(...fileCachedData.tags);
    }
    result.push(...this.getFrontmatterTags(fileCachedData.frontmatter));
    return result;
  }
  getFrontmatterTags(frontmatter) {
    const result = [];
    const frontmatterTags = frontmatter != null ? frontmatter["tags"] + "" : null;
    if (frontmatterTags) {
      const tagStrList = parseObsidianFrontmatterTag(frontmatterTags);
      for (const str of tagStrList) {
        const tag = {
          tag: str,
          position: {
            start: {
              line: frontmatterTagPseudoLineNum,
              col: null,
              offset: null
            },
            end: {
              line: frontmatterTagPseudoLineNum,
              col: null,
              offset: null
            }
          }
        };
        result.push(tag);
      }
    }
    return result;
  }
  getQuestionContext(cardLine) {
    const fileCachedData = this.metadataCache.getFileCache(this.file) || {};
    const headings = fileCachedData.headings || [];
    const stack2 = [];
    for (const heading of headings) {
      if (heading.position.start.line > cardLine) {
        break;
      }
      while (stack2.length > 0 && stack2[stack2.length - 1].level >= heading.level) {
        stack2.pop();
      }
      stack2.push(heading);
    }
    const result = [];
    for (const headingObj of stack2) {
      headingObj.heading = headingObj.heading.replace(/\[\^\d+\]/gm, "").trim();
      result.push(headingObj.heading);
    }
    return result;
  }
  getTextDirection() {
    let result = 0 /* Unspecified */;
    const fileCache = this.metadataCache.getFileCache(this.file);
    const frontMatter = fileCache == null ? void 0 : fileCache.frontmatter;
    if (frontMatter && (frontMatter == null ? void 0 : frontMatter.direction)) {
      const str = (frontMatter.direction + "").toLowerCase();
      result = str == "rtl" ? 2 /* Rtl */ : 1 /* Ltr */;
    }
    return result;
  }
  async read() {
    return await this.vault.read(this.file);
  }
  async write(content) {
    await this.vault.modify(this.file, content);
  }
};

// src/note-question-parser.ts
var NoteQuestionParser = class {
  constructor(settings) {
    this.settings = settings;
  }
  async createQuestionList(noteFile, defaultTextDirection, folderTopicPath, onlyKeepQuestionsWithTopicPath) {
    this.noteFile = noteFile;
    const tagCacheList = noteFile.getAllTagsFromCache();
    const hasTopicPaths = tagCacheList.some((item) => SettingsUtil.isFlashcardTag(this.settings, item)) || folderTopicPath.hasPath;
    if (hasTopicPaths) {
      const noteText = await noteFile.read();
      const tagCompleteList = noteFile.getAllTagsFromText();
      [this.frontmatterText, this.contentText] = splitNoteIntoFrontmatterAndContent(noteText);
      let textDirection = noteFile.getTextDirection();
      if (textDirection == 0 /* Unspecified */) textDirection = defaultTextDirection;
      this.questionList = this.doCreateQuestionList(
        noteText,
        textDirection,
        folderTopicPath,
        this.tagCacheList
      );
      [this.frontmatterTopicPathList, this.contentTopicPathInfo] = this.analyseTagCacheList(tagCompleteList);
      for (const question of this.questionList) {
        question.topicPathList = this.determineQuestionTopicPathList(question);
      }
      if (onlyKeepQuestionsWithTopicPath) {
        this.questionList = this.questionList.filter((q) => q.topicPathList);
      }
    } else {
      this.questionList = [];
    }
    return this.questionList;
  }
  doCreateQuestionList(noteText, textDirection, folderTopicPath, tagCacheList) {
    this.noteText = noteText;
    this.noteLines = splitTextIntoLineArray(noteText);
    this.folderTopicPath = folderTopicPath;
    this.tagCacheList = tagCacheList;
    const result = [];
    const parsedQuestionInfoList = this.parseQuestions();
    for (const parsedQuestionInfo of parsedQuestionInfoList) {
      const question = this.createQuestionObject(parsedQuestionInfo, textDirection);
      const cardFrontBackList = CardFrontBackUtil.expand(
        question.questionType,
        question.questionText.actualQuestion,
        this.settings
      );
      let cardScheduleInfoList = DataStore.getInstance().questionCreateSchedule(
        question.questionText.original,
        null
      );
      const correctLength = cardFrontBackList.length;
      if (cardScheduleInfoList.length > correctLength) {
        question.hasChanged = true;
        cardScheduleInfoList = cardScheduleInfoList.slice(0, correctLength);
      }
      const cardList = this.createCardList(cardFrontBackList, cardScheduleInfoList);
      question.setCardList(cardList);
      result.push(question);
    }
    return result;
  }
  parseQuestions() {
    const parserOptions = {
      singleLineCardSeparator: this.settings.singleLineCardSeparator,
      singleLineReversedCardSeparator: this.settings.singleLineReversedCardSeparator,
      multilineCardSeparator: this.settings.multilineCardSeparator,
      multilineReversedCardSeparator: this.settings.multilineReversedCardSeparator,
      multilineCardEndMarker: this.settings.multilineCardEndMarker,
      convertHighlightsToClozes: this.settings.convertHighlightsToClozes,
      convertBoldTextToClozes: this.settings.convertBoldTextToClozes,
      convertCurlyBracketsToClozes: this.settings.convertCurlyBracketsToClozes
    };
    const result = parseEx(this.contentText, parserOptions);
    return result;
  }
  createQuestionObject(parsedQuestionInfo, textDirection) {
    const questionContext = this.noteFile.getQuestionContext(
      parsedQuestionInfo.firstLineNum
    );
    const result = Question.Create(
      this.settings,
      parsedQuestionInfo,
      null,
      // We haven't worked out the TopicPathList yet
      textDirection,
      questionContext
    );
    return result;
  }
  createCardList(cardFrontBackList, cardScheduleInfoList) {
    const siblings = [];
    for (let i = 0; i < cardFrontBackList.length; i++) {
      const { front, back } = cardFrontBackList[i];
      const hasScheduleInfo = i < cardScheduleInfoList.length;
      const schedule = cardScheduleInfoList[i];
      const cardObj = new Card({
        front,
        back,
        cardIdx: i
      });
      cardObj.scheduleInfo = hasScheduleInfo ? schedule : null;
      siblings.push(cardObj);
    }
    return siblings;
  }
  //
  // Given the complete list of tags within a note:
  // 1.   Only keep tags that are specified in the user settings as flashcardTags
  // 2.   Filter out tags that are question specific
  //      (these will be parsed separately by class QuestionText)
  // 3.   Combine all tags present logically grouped together into a single entry
  //      - All tags present on the same line grouped together
  //      - All tags within frontmatter grouped together (note that multiple tags
  //      within frontmatter appear on separate lines)
  //
  analyseTagCacheList(tagCacheList) {
    this.flashcardTagList = tagCacheList.filter(
      (item) => SettingsUtil.isFlashcardTag(this.settings, item.tag)
    );
    if (this.flashcardTagList.length > 0) {
      this.flashcardTagList.sort((a, b) => a.position.start.line - b.position.start.line);
    }
    let frontmatterLineCount = 0;
    if (this.frontmatterText) {
      frontmatterLineCount = splitTextIntoLineArray(this.frontmatterText).length;
    }
    const frontmatterTopicPathList = this.determineFrontmatterTopicPathList(
      this.flashcardTagList,
      frontmatterLineCount
    );
    const contentTopicPathList = this.determineContentTopicPathList(
      this.flashcardTagList,
      frontmatterLineCount
    );
    return [frontmatterTopicPathList, contentTopicPathList];
  }
  determineFrontmatterTopicPathList(flashcardTagList, frontmatterLineCount) {
    let result = null;
    const noteLevelTagList = flashcardTagList.filter(
      (item) => item.position.start.line == frontmatterTagPseudoLineNum && this.isNoteLevelFlashcardTag(item)
    );
    if (noteLevelTagList.length > 0) {
      if (this.frontmatterText) {
        const frontmatterTagCacheList = noteLevelTagList.filter(
          (item) => item.position.start.line < frontmatterLineCount
        );
        if (frontmatterTagCacheList.length > 0)
          result = this.createTopicPathList(
            frontmatterTagCacheList,
            frontmatterTagPseudoLineNum
          );
      }
    }
    return result;
  }
  determineContentTopicPathList(flashcardTagList, frontmatterLineCount) {
    const result = [];
    const contentStartLineNum = frontmatterLineCount;
    const contentTagCacheList = flashcardTagList.filter(
      (item) => item.position.start.line >= contentStartLineNum && this.isNoteLevelFlashcardTag(item)
    );
    let list = [];
    for (const tag of contentTagCacheList) {
      if (list.length != 0) {
        const startLineNum = list[0].position.start.line;
        if (startLineNum != tag.position.start.line) {
          result.push(this.createTopicPathList(list, startLineNum));
          list = [];
        }
      }
      list.push(tag);
    }
    if (list.length > 0) {
      const startLineNum = list[0].position.start.line;
      result.push(this.createTopicPathList(list, startLineNum));
    }
    return result;
  }
  isNoteLevelFlashcardTag(tagItem) {
    const tagLineNum = tagItem.position.start.line;
    const isQuestionSpecific = this.questionList.some(
      (q) => q.parsedQuestionInfo.isQuestionLineNum(tagLineNum)
    );
    return !isQuestionSpecific;
  }
  createTopicPathList(tagCacheList, lineNum) {
    const list = [];
    for (const tagCache of tagCacheList) {
      list.push(TopicPath.getTopicPathFromTag(tagCache.tag));
    }
    return new TopicPathList(list, lineNum);
  }
  createTopicPathList_FromSingleTag(tagCache) {
    const list = [TopicPath.getTopicPathFromTag(tagCache.tag)];
    return new TopicPathList(list, tagCache.position.start.line);
  }
  //
  // A question can be associated with multiple topics (hence returning TopicPathList and not just TopicPath).
  //
  // If the question has an associated question specific TopicPath, then that is returned.
  //
  // Else the first TopicPathList prior to the question (in the order present in the file) is returned.
  // That could be either the tags within the note's frontmatter, or tags on lines within the note's content.
  //
  determineQuestionTopicPathList(question) {
    let result;
    if (this.settings.convertFoldersToDecks) {
      result = new TopicPathList([this.folderTopicPath]);
    } else {
      const questionText = question.questionText;
      if (questionText.topicPathWithWs)
        result = new TopicPathList(
          [questionText.topicPathWithWs.topicPath],
          question.parsedQuestionInfo.firstLineNum
        );
      else {
        result = this.frontmatterTopicPathList;
        for (let i = this.contentTopicPathInfo.length - 1; i >= 0; i--) {
          const topicPathList = this.contentTopicPathInfo[i];
          if (topicPathList.lineNum < question.parsedQuestionInfo.firstLineNum) {
            result = topicPathList;
            break;
          }
        }
        if (!result && this.flashcardTagList.length > 0) {
          result = this.createTopicPathList_FromSingleTag(this.flashcardTagList[0]);
        }
      }
    }
    return result;
  }
};

// src/note-file-loader.ts
var NoteFileLoader = class {
  constructor(settings) {
    this.settings = settings;
  }
  async load(noteFile, defaultTextDirection, folderTopicPath) {
    this.noteFile = noteFile;
    const questionParser = new NoteQuestionParser(this.settings);
    const onlyKeepQuestionsWithTopicPath = true;
    const questionList = await questionParser.createQuestionList(
      noteFile,
      defaultTextDirection,
      folderTopicPath,
      onlyKeepQuestionsWithTopicPath
    );
    const result = new Note(noteFile, questionList);
    return result;
  }
};

// src/note-review-deck.ts
var SchedNote = class {
  constructor(note, dueUnix) {
    this.note = note;
    this.dueUnix = dueUnix;
  }
  isDue(todayUnix) {
    return this.dueUnix <= todayUnix;
  }
};
var NoteReviewDeck = class {
  constructor(name) {
    this._newNotes = [];
    this._scheduledNotes = [];
    this._dueNotesCount = 0;
    this._deckName = name;
    this._activeFolders = /* @__PURE__ */ new Set([this._deckName, t("TODAY")]);
  }
  get deckName() {
    return this._deckName;
  }
  get newNotes() {
    return this._newNotes;
  }
  get scheduledNotes() {
    return this._scheduledNotes;
  }
  get dueNotesCount() {
    return this._dueNotesCount;
  }
  get activeFolders() {
    return this._activeFolders;
  }
  calcDueNotesCount(todayUnix) {
    this._dueNotesCount = 0;
    this.scheduledNotes.forEach((scheduledNote) => {
      if (scheduledNote.isDue(todayUnix)) {
        this._dueNotesCount++;
      }
    });
  }
  sortNotesByDateAndImportance(pageranks) {
    this._newNotes = this.newNotes.sort(
      (a, b) => (pageranks[b.path] || 0) - (pageranks[a.path] || 0)
    );
    this._scheduledNotes = this.scheduledNotes.sort((a, b) => {
      const result = a.dueUnix - b.dueUnix;
      if (result != 0) {
        return result;
      }
      return (pageranks[b.note.path] || 0) - (pageranks[a.note.path] || 0);
    });
  }
  determineNextNote(openRandomNote) {
    const todayUnix = globalDateProvider.today.valueOf();
    const dueNotes = this.scheduledNotes.filter((note) => note.isDue(todayUnix));
    if (dueNotes.length > 0) {
      const index = openRandomNote ? globalRandomNumberProvider.getInteger(0, dueNotes.length - 1) : 0;
      return dueNotes[index].note;
    }
    if (this.newNotes.length > 0) {
      const index = openRandomNote ? globalRandomNumberProvider.getInteger(0, this.newNotes.length - 1) : 0;
      return this.newNotes[index];
    }
    return null;
  }
};

// src/note-review-queue.ts
var NoteReviewQueue = class {
  get reviewDecks() {
    return this._reviewDecks;
  }
  get dueNotesCount() {
    return this._dueNotesCount;
  }
  get reviewDeckNameList() {
    return [...this._reviewDecks.keys()];
  }
  init() {
    this._reviewDecks = /* @__PURE__ */ new Map();
  }
  calcDueNotesCount(todayUnix) {
    this._dueNotesCount = 0;
    this._reviewDecks.forEach((reviewDeck) => {
      reviewDeck.calcDueNotesCount(todayUnix);
      this._dueNotesCount += reviewDeck.dueNotesCount;
    });
  }
  addNoteToQueue(noteFile, noteSchedule, matchedNoteTags) {
    for (const matchedNoteTag of matchedNoteTags) {
      if (!this.reviewDecks.has(matchedNoteTag)) {
        this.reviewDecks.set(matchedNoteTag, new NoteReviewDeck(matchedNoteTag));
      }
    }
    if (noteSchedule == null) {
      for (const matchedNoteTag of matchedNoteTags) {
        this.reviewDecks.get(matchedNoteTag).newNotes.push(noteFile);
      }
    } else {
      for (const matchedNoteTag of matchedNoteTags) {
        this.reviewDecks.get(matchedNoteTag).scheduledNotes.push(new SchedNote(noteFile, noteSchedule.dueDateAsUnix));
      }
    }
  }
  updateScheduleInfo(note, scheduleInfo) {
    this.reviewDecks.forEach((reviewDeck) => {
      let wasDueInDeck = false;
      for (const scheduledNote of reviewDeck.scheduledNotes) {
        if (scheduledNote.note.path === note.path) {
          scheduledNote.dueUnix = scheduleInfo.dueDate.valueOf();
          wasDueInDeck = true;
          break;
        }
      }
      if (!wasDueInDeck) {
        reviewDeck.newNotes.splice(
          reviewDeck.newNotes.findIndex((newNote) => newNote.path === note.path),
          1
        );
        reviewDeck.scheduledNotes.push(new SchedNote(note, scheduleInfo.dueDate.valueOf()));
      }
    });
  }
};

// src/core.ts
var OsrCore = class {
  constructor() {
    this._reviewableDeckTree = new Deck2("root", null);
  }
  get noteReviewQueue() {
    return this._noteReviewQueue;
  }
  get remainingDeckTree() {
    return this._remainingDeckTree;
  }
  get reviewableDeckTree() {
    return this._reviewableDeckTree;
  }
  get questionPostponementList() {
    return this._questionPostponementList;
  }
  /* c8 ignore start */
  get dueDateFlashcardHistogram() {
    return this._dueDateFlashcardHistogram;
  }
  get dueDateNoteHistogram() {
    return this._dueDateNoteHistogram;
  }
  get easeByPath() {
    return this._easeByPath;
  }
  get cardStats() {
    return this._cardStats;
  }
  /* c8 ignore stop */
  init(questionPostponementList, osrNoteLinkInfoFinder, settings, dataChangedHandler) {
    this.settings = settings;
    this.osrNoteLinkInfoFinder = osrNoteLinkInfoFinder;
    this.dataChangedHandler = dataChangedHandler;
    this._noteReviewQueue = new NoteReviewQueue();
    this._questionPostponementList = questionPostponementList;
    this._dueDateFlashcardHistogram = new CardDueDateHistogram();
    this._dueDateNoteHistogram = new NoteDueDateHistogram();
  }
  loadInit() {
    this.osrNoteGraph = new OsrNoteGraph(this.osrNoteLinkInfoFinder);
    this._noteReviewQueue.init();
    this.fullDeckTree = new Deck2("root", null);
  }
  async processFile(noteFile) {
    const schedule = await DataStoreAlgorithm.getInstance().noteGetSchedule(noteFile);
    let note = null;
    this.osrNoteGraph.processLinks(noteFile.path);
    const topicPath = this.findTopicPath(noteFile);
    if (topicPath.hasPath) {
      note = await this.loadNote(noteFile, topicPath);
      note.appendCardsToDeck(this.fullDeckTree);
    }
    SrsAlgorithm.getInstance().noteOnLoadedNote(noteFile.path, note, schedule == null ? void 0 : schedule.latestEase);
    const tags = noteFile.getAllTagsFromCache();
    const matchedNoteTags = SettingsUtil.filterForNoteReviewTag(this.settings, tags);
    if (matchedNoteTags.length == 0) {
      return;
    }
    const noteSchedule = await DataStoreAlgorithm.getInstance().noteGetSchedule(noteFile);
    this._noteReviewQueue.addNoteToQueue(noteFile, noteSchedule, matchedNoteTags);
  }
  finaliseLoad() {
    this.osrNoteGraph.generatePageRanks();
    this._reviewableDeckTree = DeckTreeFilter.filterForReviewableCards(this.fullDeckTree);
    this._reviewableDeckTree.sortSubdecksList();
    this._remainingDeckTree = DeckTreeFilter.filterForRemainingCards(
      this._questionPostponementList,
      this._reviewableDeckTree,
      1 /* Review */
    );
    const calc = new DeckTreeStatsCalculator();
    this._cardStats = calc.calculate(this._reviewableDeckTree);
    this.calculateDerivedInfo();
    this._dueDateFlashcardHistogram.calculateFromDeckTree(this._reviewableDeckTree);
    if (this.dataChangedHandler) this.dataChangedHandler();
  }
  async saveNoteReviewResponse(noteFile, response, settings) {
    const originalNoteSchedule = await DataStoreAlgorithm.getInstance().noteGetSchedule(noteFile);
    let noteSchedule;
    if (originalNoteSchedule == null) {
      noteSchedule = SrsAlgorithm.getInstance().noteCalcNewSchedule(
        noteFile.path,
        this.osrNoteGraph,
        response,
        this._dueDateNoteHistogram
      );
    } else {
      noteSchedule = SrsAlgorithm.getInstance().noteCalcUpdatedSchedule(
        noteFile.path,
        originalNoteSchedule,
        response,
        this._dueDateNoteHistogram
      );
    }
    await DataStoreAlgorithm.getInstance().noteSetSchedule(noteFile, noteSchedule);
    this._noteReviewQueue.updateScheduleInfo(noteFile, noteSchedule);
    this.calculateDerivedInfo();
    await this.buryAllCardsInNote(settings, noteFile);
    if (this.dataChangedHandler) this.dataChangedHandler();
  }
  calculateDerivedInfo() {
    const todayUnix = globalDateProvider.today.valueOf();
    this.noteReviewQueue.calcDueNotesCount(todayUnix);
    this._dueDateNoteHistogram.calculateFromReviewDecksAndSort(
      this.noteReviewQueue.reviewDecks,
      this.osrNoteGraph
    );
  }
  async buryAllCardsInNote(settings, noteFile) {
    if (settings.burySiblingCards) {
      const topicPath = this.findTopicPath(noteFile);
      const noteX = await this.loadNote(noteFile, topicPath);
      if (noteX.questionList.length > 0) {
        for (const question of noteX.questionList) {
          this._questionPostponementList.add(question);
        }
        await this._questionPostponementList.write();
      }
    }
  }
  async loadNote(noteFile, topicPath) {
    const loader = new NoteFileLoader(this.settings);
    const note = await loader.load(noteFile, this.defaultTextDirection, topicPath);
    if (note.hasChanged) {
      await note.writeNoteFile(this.settings);
    }
    return note;
  }
  findTopicPath(note) {
    return TopicPath.getTopicPathOfFile(note, this.settings);
  }
};

// src/app-core.ts
var OsrAppCore = class extends OsrCore {
  constructor(app) {
    super();
    this._syncLock = false;
    this.app = app;
  }
  get syncLock() {
    return this._syncLock;
  }
  async loadVault() {
    if (this._syncLock) {
      return;
    }
    this._syncLock = true;
    try {
      this.loadInit();
      const notes = this.app.vault.getMarkdownFiles();
      for (const noteFile of notes) {
        if (SettingsUtil.isPathInNoteIgnoreFolder(this.settings, noteFile.path)) {
          continue;
        }
        const file = this.createSrTFile(noteFile);
        await this.processFile(file);
      }
      this.finaliseLoad();
    } finally {
      this._syncLock = false;
    }
  }
  createSrTFile(note) {
    return new SrTFile(this.app.vault, this.app.metadataCache, note);
  }
};

// src/data-store-algorithm/data-store-in-note-algorithm-osr.ts
var import_moment3 = __toESM(require_moment());
var DataStoreInNote_AlgorithmOsr = class {
  constructor(settings) {
    this.settings = settings;
  }
  async noteGetSchedule(note) {
    let result = null;
    const frontmatter = await note.getFrontmatter();
    if (frontmatter && frontmatter.has("sr-due") && frontmatter.has("sr-interval") && frontmatter.has("sr-ease")) {
      const dueDate = (0, import_moment3.default)(frontmatter.get("sr-due"), ALLOWED_DATE_FORMATS);
      const interval = parseFloat(frontmatter.get("sr-interval"));
      const ease = parseFloat(frontmatter.get("sr-ease"));
      result = new RepItemScheduleInfo_Osr(dueDate, interval, ease);
    }
    return result;
  }
  async noteSetSchedule(note, repItemScheduleInfo) {
    let fileText = await note.read();
    const schedInfo = repItemScheduleInfo;
    const dueString = formatDate_YYYY_MM_DD(schedInfo.dueDate);
    const interval = schedInfo.interval;
    const ease = schedInfo.latestEase;
    if (SCHEDULING_INFO_REGEX.test(fileText)) {
      const schedulingInfo = SCHEDULING_INFO_REGEX.exec(fileText);
      fileText = fileText.replace(
        SCHEDULING_INFO_REGEX,
        `---
${schedulingInfo[1]}sr-due: ${dueString}
sr-interval: ${interval}
sr-ease: ${ease}
${schedulingInfo[5]}---`
      );
    } else if (YAML_FRONT_MATTER_REGEX.test(fileText)) {
      const existingYaml = YAML_FRONT_MATTER_REGEX.exec(fileText);
      fileText = fileText.replace(
        YAML_FRONT_MATTER_REGEX,
        `---
${existingYaml[1]}sr-due: ${dueString}
sr-interval: ${interval}
sr-ease: ${ease}
---`
      );
    } else {
      fileText = `---
sr-due: ${dueString}
sr-interval: ${interval}
sr-ease: ${ease}
---

${fileText}`;
    }
    await note.write(fileText);
  }
  questionFormatScheduleAsHtmlComment(question) {
    let result = SR_HTML_COMMENT_BEGIN;
    for (let i = 0; i < question.cards.length; i++) {
      const card = question.cards[i];
      result += this.formatCardSchedule(card);
    }
    result += SR_HTML_COMMENT_END;
    return result;
  }
  formatCardSchedule(card) {
    let result;
    if (card.hasSchedule) {
      const schedule = card.scheduleInfo;
      const dateStr = schedule.dueDate ? formatDate_YYYY_MM_DD(schedule.dueDate) : RepItemScheduleInfo_Osr.dummyDueDateForNewCard;
      result = `!${dateStr},${schedule.interval},${schedule.latestEase}`;
    } else {
      result = `!${RepItemScheduleInfo_Osr.dummyDueDateForNewCard},${RepItemScheduleInfo_Osr.initialInterval},${this.settings.baseEase}`;
    }
    return result;
  }
};

// src/data-stores/store-in-note/note.ts
var StoreInNote = class {
  constructor(settings) {
    this.settings = settings;
  }
  questionCreateSchedule(originalQuestionText, _) {
    let scheduling = [
      ...originalQuestionText.matchAll(MULTI_SCHEDULING_EXTRACTOR)
    ];
    if (scheduling.length === 0)
      scheduling = [...originalQuestionText.matchAll(LEGACY_SCHEDULING_EXTRACTOR)];
    const result = [];
    for (let i = 0; i < scheduling.length; i++) {
      const match2 = scheduling[i];
      const dueDateStr = match2[1];
      const interval = parseInt(match2[2]);
      const ease = parseInt(match2[3]);
      const dueDate = DateUtil.dateStrToMoment(dueDateStr);
      let info;
      if (dueDate == null || formatDate_YYYY_MM_DD(dueDate) == RepItemScheduleInfo_Osr.dummyDueDateForNewCard) {
        info = null;
      } else {
        const delayBeforeReviewTicks = dueDate.valueOf() - globalDateProvider.today.valueOf();
        info = new RepItemScheduleInfo_Osr(dueDate, interval, ease, delayBeforeReviewTicks);
      }
      result.push(info);
    }
    return result;
  }
  questionRemoveScheduleInfo(questionText) {
    return questionText.replace(//gm, "");
  }
  async questionWriteSchedule(question) {
    await this.questionWrite(question);
  }
  async questionWrite(question) {
    const fileText = await question.note.file.read();
    const newText = question.updateQuestionWithinNoteText(fileText, this.settings);
    await question.note.file.write(newText);
    question.hasChanged = false;
  }
};

// src/gui/flashcard-modal.tsx
var import_obsidian8 = require("obsidian");

// src/gui/deck-list-view.tsx
var import_vhtml = __toESM(require_vhtml());
var DeckListView = class {
  constructor(plugin, settings, reviewSequencer, contentEl, startReviewOfDeck) {
    this.plugin = plugin;
    this.settings = settings;
    this.reviewSequencer = reviewSequencer;
    this.modalContentEl = contentEl;
    this.startReviewOfDeck = startReviewOfDeck;
    this.init();
  }
  /**
   * Initializes all static elements in the DeckListView
   */
  init() {
    this.view = this.modalContentEl.createDiv();
    this.view.addClasses(["sr-deck-list", "sr-is-hidden"]);
    this.header = this.view.createDiv();
    this.header.addClass("sr-header");
    this.title = this.header.createDiv();
    this.title.addClass("sr-title");
    this.title.setText(t("DECKS"));
    this.stats = this.header.createDiv();
    this.stats.addClass("sr-header-stats-container");
    this._createHeaderStats();
    this.content = this.view.createDiv();
    this.content.addClass("sr-content");
  }
  /**
   * Shows the DeckListView & rerenders dynamic elements
   */
  show() {
    this.mode = 0 /* DecksList */;
    this._createHeaderStats();
    this.content.empty();
    for (const deck of this.reviewSequencer.originalDeckTree.subdecks) {
      this._createTree(deck, this.content);
    }
    if (this.view.hasClass("sr-is-hidden")) {
      this.view.removeClass("sr-is-hidden");
    }
  }
  /**
   * Hides the DeckListView
   */
  hide() {
    if (!this.view.hasClass("sr-is-hidden")) {
      this.view.addClass("sr-is-hidden");
    }
  }
  /**
   * Closes the DeckListView
   */
  close() {
    this.hide();
  }
  // -> Header
  _createHeaderStats() {
    const statistics = this.reviewSequencer.getDeckStats(TopicPath.emptyPath);
    this.stats.empty();
    this._createHeaderStatsContainer(t("DUE_CARDS"), statistics.dueCount, "sr-bg-green");
    this._createHeaderStatsContainer(t("NEW_CARDS"), statistics.newCount, "sr-bg-blue");
    this._createHeaderStatsContainer(t("TOTAL_CARDS"), statistics.totalCount, "sr-bg-red");
  }
  _createHeaderStatsContainer(statsLable, statsNumber, statsClass) {
    const statsContainer = this.stats.createDiv();
    statsContainer.ariaLabel = statsLable;
    statsContainer.addClasses([
      "tag-pane-tag-count",
      "tree-item-flair",
      "sr-header-stats-count",
      statsClass
    ]);
    const lable = statsContainer.createDiv();
    lable.setText(statsLable + ":");
    const number = statsContainer.createDiv();
    number.setText(statsNumber.toString());
  }
  // -> Tree content
  _createTree(deck, container) {
    const deckTree = container.createDiv("tree-item sr-tree-item-container");
    const deckTreeSelf = deckTree.createDiv(
      "tree-item-self tag-pane-tag is-clickable sr-tree-item-row"
    );
    const shouldBeInitiallyExpanded = this.settings.initiallyExpandAllSubdecksInTree;
    let collapsed = !shouldBeInitiallyExpanded;
    let collapseIconEl = null;
    if (deck.subdecks.length > 0) {
      collapseIconEl = deckTreeSelf.createDiv("tree-item-icon collapse-icon");
      collapseIconEl.innerHTML = COLLAPSE_ICON;
      collapseIconEl.childNodes[0].style.transform = collapsed ? "rotate(-90deg)" : "";
    }
    const deckTreeInner = deckTreeSelf.createDiv("tree-item-inner");
    const deckTreeInnerText = deckTreeInner.createDiv("tag-pane-tag-text");
    deckTreeInnerText.innerHTML += /* @__PURE__ */ (0, import_vhtml.default)("span", { class: "tag-pane-tag-self" }, deck.deckName);
    const deckTreeOuter = deckTreeSelf.createDiv();
    deckTreeOuter.addClasses(["tree-item-flair-outer", "sr-tree-stats-container"]);
    const deckStats = this.reviewSequencer.getDeckStats(deck.getTopicPath());
    this._createStats(deckStats, deckTreeOuter);
    const deckTreeChildren = deckTree.createDiv("tree-item-children");
    deckTreeChildren.style.display = collapsed ? "none" : "block";
    if (deck.subdecks.length > 0) {
      collapseIconEl.addEventListener("click", (e) => {
        if (collapsed) {
          collapseIconEl.childNodes[0].style.transform = "";
          deckTreeChildren.style.display = "block";
        } else {
          collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)";
          deckTreeChildren.style.display = "none";
        }
        e.stopPropagation();
        collapsed = !collapsed;
      });
    }
    deckTreeSelf.addEventListener("click", () => {
      this.startReviewOfDeck(deck);
    });
    for (const subdeck of deck.subdecks) {
      this._createTree(subdeck, deckTreeChildren);
    }
  }
  _createStats(statistics, statsWrapper) {
    statsWrapper.empty();
    this._createStatsContainer(
      t("DUE_CARDS"),
      statistics.dueCount,
      "sr-bg-green",
      statsWrapper
    );
    this._createStatsContainer(t("NEW_CARDS"), statistics.newCount, "sr-bg-blue", statsWrapper);
    this._createStatsContainer(
      t("TOTAL_CARDS"),
      statistics.totalCount,
      "sr-bg-red",
      statsWrapper
    );
  }
  _createStatsContainer(statsLable, statsNumber, statsClass, statsWrapper) {
    const statsContainer = statsWrapper.createDiv();
    statsContainer.ariaLabel = statsLable;
    statsContainer.addClasses([
      "tag-pane-tag-count",
      "tree-item-flair",
      "sr-tree-stats-count",
      statsClass
    ]);
    statsContainer.setText(statsNumber.toString());
  }
};

// src/gui/edit-modal.tsx
var import_obsidian5 = require("obsidian");
var FlashcardEditModal = class _FlashcardEditModal extends import_obsidian5.Modal {
  constructor(app, existingText, textDirection) {
    super(app);
    this.didSaveChanges = false;
    // -> Functions & helpers
    this.saveClickCallback = (_) => this.save();
    this.cancelClickCallback = (_) => this.cancel();
    this.saveOnEnterCallback = (evt) => {
      if ((evt.ctrlKey || evt.metaKey) && evt.key === "Enter") {
        evt.preventDefault();
        this.save();
      }
    };
    this.modalText = existingText;
    this.changedText = existingText;
    this.textDirection = textDirection;
    this.waitForClose = new Promise((resolve2, reject) => {
      this.resolvePromise = resolve2;
      this.rejectPromise = reject;
    });
    this.modalEl.addClasses(["sr-modal", "sr-edit-modal"]);
    this.init();
    this.open();
  }
  static Prompt(app, placeholder, textDirection) {
    const newPromptModal = new _FlashcardEditModal(app, placeholder, textDirection);
    return newPromptModal.waitForClose;
  }
  /**
   * Initializes all components of the EditModal
   */
  init() {
    var _a2;
    this.contentEl.empty();
    this.contentEl.addClass("sr-edit-view");
    this.title = this.contentEl.createDiv();
    this.title.setText(t("EDIT_CARD"));
    this.title.addClass("sr-title");
    this.textArea = this.contentEl.createEl("textarea");
    this.textArea.addClass("sr-input");
    this.textArea.setText((_a2 = this.modalText) != null ? _a2 : "");
    this.textArea.addEventListener("keydown", this.saveOnEnterCallback);
    if (this.textDirection == 2 /* Rtl */) {
      this.textArea.setAttribute("dir", "rtl");
    }
    this._createResponse(this.contentEl);
  }
  /**
   * Opens the EditModal
   */
  onOpen() {
    super.onOpen();
    this.textArea.focus();
  }
  /**
   * Closes the EditModal
   */
  onClose() {
    super.onClose();
    this.resolveInput();
    this.removeInputListener();
  }
  save() {
    this.didSaveChanges = true;
    this.changedText = this.textArea.value;
    this.close();
  }
  cancel() {
    this.close();
  }
  resolveInput() {
    if (!this.didSaveChanges) this.rejectPromise(t("NO_INPUT"));
    else this.resolvePromise(this.changedText);
  }
  removeInputListener() {
    this.textArea.removeEventListener("keydown", this.saveOnEnterCallback);
  }
  // -> Response section
  _createResponseButton(container, text, colorClass, callback2) {
    const button = container.createEl("button");
    button.addClasses(["sr-response-button", colorClass]);
    button.setText(text);
    button.addEventListener("click", callback2);
  }
  _createResponse(mainContentContainer) {
    const response = mainContentContainer.createDiv();
    response.addClass("sr-response");
    this._createResponseButton(response, t("CANCEL"), "sr-bg-red", this.cancelClickCallback);
    this._createResponseButton(response, "", "sr-spacer", () => {
    });
    this._createResponseButton(response, t("SAVE"), "sr-bg-green", this.saveClickCallback);
  }
};

// src/gui/flashcard-review-view.tsx
var import_moment4 = __toESM(require_moment());
var import_obsidian7 = require("obsidian");

// src/utils/renderers.ts
var import_obsidian6 = require("obsidian");
var RenderMarkdownWrapper = class {
  constructor(app, plugin, notePath) {
    this.app = app;
    this.notePath = notePath;
    this.plugin = plugin;
  }
  // slightly modified version of the renderMarkdown function in
  // https://github.com/mgmeyers/obsidian-kanban/blob/main/src/KanbanView.tsx
  async renderMarkdownWrapper(markdownString, containerEl, textDirection, recursiveDepth = 0) {
    if (recursiveDepth > 4) return;
    let el;
    if (textDirection == 2 /* Rtl */) {
      el = containerEl.createDiv();
      el.setAttribute("dir", "rtl");
    } else el = containerEl;
    import_obsidian6.MarkdownRenderer.render(this.app, markdownString, el, this.notePath, this.plugin);
    el.findAll(".internal-embed").forEach((el2) => {
      const link2 = this.parseLink(el2.getAttribute("src"));
      if (!link2.target) {
        el2.innerText = link2.text;
      } else if (link2.target instanceof import_obsidian6.TFile) {
        if (link2.target.extension !== "md") {
          this.embedMediaFile(el2, link2.target);
        } else {
        }
      }
    });
  }
  parseLink(src) {
    const linkComponentsRegex = /^(?[^#^]+)?(?:#(?!\^)(?.+)|#\^(?.+)|#)?$/;
    const matched = typeof src === "string" && src.match(linkComponentsRegex);
    const file = matched.groups.file || this.notePath;
    const target = this.plugin.app.metadataCache.getFirstLinkpathDest(file, this.notePath);
    return {
      text: matched[0],
      file: matched.groups.file,
      heading: matched.groups.heading,
      blockId: matched.groups.blockId,
      target
    };
  }
  embedMediaFile(el, target) {
    el.innerText = "";
    if (IMAGE_FORMATS.includes(target.extension)) {
      el.createEl(
        "img",
        {
          attr: {
            src: this.plugin.app.vault.getResourcePath(target)
          }
        },
        (img) => {
          if (el.hasAttribute("width"))
            img.setAttribute("width", el.getAttribute("width"));
          else img.setAttribute("width", "100%");
          if (el.hasAttribute("alt")) img.setAttribute("alt", el.getAttribute("alt"));
          el.addEventListener(
            "click",
            (ev) => ev.target.style.minWidth = ev.target.style.minWidth === "100%" ? null : "100%"
          );
        }
      );
      el.addClasses(["image-embed", "is-loaded"]);
    } else if (AUDIO_FORMATS.includes(target.extension) || VIDEO_FORMATS.includes(target.extension)) {
      el.createEl(
        AUDIO_FORMATS.includes(target.extension) ? "audio" : "video",
        {
          attr: {
            controls: "",
            src: this.plugin.app.vault.getResourcePath(target)
          }
        },
        (audio) => {
          if (el.hasAttribute("alt")) audio.setAttribute("alt", el.getAttribute("alt"));
        }
      );
      el.addClasses(["media-embed", "is-loaded"]);
    } else {
      el.innerText = target.path;
    }
  }
};

// src/gui/flashcard-review-view.tsx
var FlashcardReviewView = class {
  constructor(app, plugin, settings, reviewSequencer, reviewMode, contentEl, modalEl, backClickHandler, editClickHandler) {
    this._keydownHandler = (e) => {
      if (document.activeElement.nodeName === "TEXTAREA" || this.mode === 3 /* Closed */) {
        return;
      }
      const consumeKeyEvent = () => {
        e.preventDefault();
        e.stopPropagation();
      };
      switch (e.code) {
        case "KeyS":
          this._skipCurrentCard();
          consumeKeyEvent();
          break;
        case "Space":
          if (this.mode === 1 /* Front */) {
            this._showAnswer();
            consumeKeyEvent();
          } else if (this.mode === 2 /* Back */) {
            this._processReview(1 /* Good */);
            consumeKeyEvent();
          }
          break;
        case "Enter":
        case "NumpadEnter":
          if (this.mode !== 1 /* Front */) {
            break;
          }
          this._showAnswer();
          consumeKeyEvent();
          break;
        case "Numpad1":
        case "Digit1":
          if (this.mode !== 2 /* Back */) {
            break;
          }
          this._processReview(2 /* Hard */);
          consumeKeyEvent();
          break;
        case "Numpad2":
        case "Digit2":
          if (this.mode !== 2 /* Back */) {
            break;
          }
          this._processReview(1 /* Good */);
          consumeKeyEvent();
          break;
        case "Numpad3":
        case "Digit3":
          if (this.mode !== 2 /* Back */) {
            break;
          }
          this._processReview(0 /* Easy */);
          consumeKeyEvent();
          break;
        case "Numpad0":
        case "Digit0":
          if (this.mode !== 2 /* Back */) {
            break;
          }
          this._processReview(3 /* Reset */);
          consumeKeyEvent();
          break;
        default:
          break;
      }
    };
    this.app = app;
    this.plugin = plugin;
    this.settings = settings;
    this.reviewSequencer = reviewSequencer;
    this.reviewMode = reviewMode;
    this.backClickHandler = backClickHandler;
    this.editClickHandler = editClickHandler;
    this.modalContentEl = contentEl;
    this.modalEl = modalEl;
    this.chosenDeck = null;
    this.init();
  }
  /**
   * Initializes all static elements in the FlashcardView
   */
  init() {
    this._createBackButton();
    this.view = this.modalContentEl.createDiv();
    this.view.addClasses(["sr-flashcard", "sr-is-hidden"]);
    this.header = this.view.createDiv();
    this.header.addClass("sr-header");
    this.titleWrapper = this.header.createDiv();
    this.titleWrapper.addClass("sr-title-wrapper");
    this.title = this.titleWrapper.createDiv();
    this.title.addClass("sr-title");
    this.subTitle = this.titleWrapper.createDiv();
    this.subTitle.addClasses(["sr-sub-title", "sr-is-hidden"]);
    this.controls = this.header.createDiv();
    this.controls.addClass("sr-controls");
    this._createCardControls();
    if (this.settings.showContextInCards) {
      this.context = this.view.createDiv();
      this.context.addClass("sr-context");
    }
    this.content = this.view.createDiv();
    this.content.addClass("sr-content");
    this.response = this.view.createDiv();
    this.response.addClass("sr-response");
    this._createResponseButtons();
  }
  /**
   * Shows the FlashcardView if it is hidden
   */
  async show(chosenDeck) {
    if (!this.view.hasClass("sr-is-hidden")) {
      return;
    }
    this.chosenDeck = chosenDeck;
    await this._drawContent();
    this.view.removeClass("sr-is-hidden");
    this.backButton.removeClass("sr-is-hidden");
    document.addEventListener("keydown", this._keydownHandler);
  }
  /**
   * Refreshes all dynamic elements
   */
  async refresh() {
    await this._drawContent();
  }
  /**
   * Hides the FlashcardView if it is visible
   */
  hide() {
    if (this.view.hasClass("sr-is-hidden")) {
      return;
    }
    document.removeEventListener("keydown", this._keydownHandler);
    this.view.addClass("sr-is-hidden");
    this.backButton.addClass("sr-is-hidden");
  }
  /**
   * Closes the FlashcardView
   */
  close() {
    this.hide();
    document.removeEventListener("keydown", this._keydownHandler);
  }
  // #region -> Functions & helpers
  async _drawContent() {
    this.mode = 1 /* Front */;
    const currentDeck = this.reviewSequencer.currentDeck;
    this._setTitle(this.chosenDeck);
    this._setSubTitle(this.chosenDeck, currentDeck);
    this.resetButton.disabled = true;
    if (this.settings.showContextInCards) {
      this.context.setText(
        this._formatQuestionContextText(this._currentQuestion.questionContext)
      );
    }
    this.content.empty();
    const wrapper = new RenderMarkdownWrapper(
      this.app,
      this.plugin,
      this._currentNote.filePath
    );
    await wrapper.renderMarkdownWrapper(
      this._currentCard.front,
      this.content,
      this._currentQuestion.questionText.textDirection
    );
    this.content.scrollTop = 0;
    this._resetResponseButtons();
  }
  _displayCurrentCardInfoNotice() {
    var _a2;
    const schedule = this._currentCard.scheduleInfo;
    const currentEaseStr = t("CURRENT_EASE_HELP_TEXT") + ((_a2 = schedule == null ? void 0 : schedule.latestEase) != null ? _a2 : t("NEW"));
    const currentIntervalStr = t("CURRENT_INTERVAL_HELP_TEXT") + textInterval(schedule == null ? void 0 : schedule.interval, false);
    const generatedFromStr = t("CARD_GENERATED_FROM", {
      notePath: this._currentQuestion.note.filePath
    });
    new import_obsidian7.Notice(currentEaseStr + "\n" + currentIntervalStr + "\n" + generatedFromStr);
  }
  get _currentCard() {
    return this.reviewSequencer.currentCard;
  }
  get _currentQuestion() {
    return this.reviewSequencer.currentQuestion;
  }
  get _currentNote() {
    return this.reviewSequencer.currentNote;
  }
  _showAnswer() {
    const timeNow = (0, import_moment4.now)();
    if (this.lastPressed && timeNow - this.lastPressed < this.plugin.data.settings.reviewButtonDelay) {
      return;
    }
    this.lastPressed = timeNow;
    this.mode = 2 /* Back */;
    this.resetButton.disabled = false;
    if (this._currentQuestion.questionType !== 4 /* Cloze */) {
      const hr = document.createElement("hr");
      hr.addClass("sr-card-divide");
      this.content.appendChild(hr);
    } else {
      this.content.empty();
    }
    const wrapper = new RenderMarkdownWrapper(
      this.app,
      this.plugin,
      this._currentNote.filePath
    );
    wrapper.renderMarkdownWrapper(
      this._currentCard.back,
      this.content,
      this._currentQuestion.questionText.textDirection
    );
    this.answerButton.addClass("sr-is-hidden");
    this.hardButton.removeClass("sr-is-hidden");
    this.easyButton.removeClass("sr-is-hidden");
    if (this.reviewMode === 0 /* Cram */) {
      this.response.addClass("is-cram");
      this.hardButton.setText(`${this.settings.flashcardHardText}`);
      this.easyButton.setText(`${this.settings.flashcardEasyText}`);
    } else {
      this.goodButton.removeClass("sr-is-hidden");
      this._setupEaseButton(
        this.hardButton,
        this.settings.flashcardHardText,
        2 /* Hard */
      );
      this._setupEaseButton(
        this.goodButton,
        this.settings.flashcardGoodText,
        1 /* Good */
      );
      this._setupEaseButton(
        this.easyButton,
        this.settings.flashcardEasyText,
        0 /* Easy */
      );
    }
  }
  async _processReview(response) {
    const timeNow = (0, import_moment4.now)();
    if (this.lastPressed && timeNow - this.lastPressed < this.plugin.data.settings.reviewButtonDelay) {
      return;
    }
    this.lastPressed = timeNow;
    await this.reviewSequencer.processReview(response);
    await this._handleSkipCard();
  }
  async _skipCurrentCard() {
    this.reviewSequencer.skipCurrentCard();
    await this._handleSkipCard();
  }
  async _handleSkipCard() {
    if (this._currentCard != null) await this.refresh();
    else this.backClickHandler();
  }
  _formatQuestionContextText(questionContext) {
    const separator = " > ";
    let result = this._currentNote.file.basename;
    questionContext.forEach((context) => {
      if (context.startsWith("[[") && context.endsWith("]]")) {
        context = context.replace("[[", "").replace("]]", "");
        if (context.contains("|")) {
          context = context.split("|")[1];
        }
      }
      result += separator + context;
    });
    return result;
  }
  // -> Header
  _createBackButton() {
    this.backButton = this.modalEl.createDiv();
    this.backButton.addClasses(["sr-back-button", "sr-is-hidden"]);
    (0, import_obsidian7.setIcon)(this.backButton, "arrow-left");
    this.backButton.setAttribute("aria-label", t("BACK"));
    this.backButton.addEventListener("click", () => {
      this.backClickHandler();
    });
  }
  _setTitle(deck) {
    let text = deck.deckName;
    const deckStats = this.reviewSequencer.getDeckStats(deck.getTopicPath());
    const cardsInQueue = deckStats.dueCount + deckStats.newCount;
    text += `: ${cardsInQueue}`;
    this.title.setText(text);
  }
  _setSubTitle(chosenDeck, currentDeck) {
    if (chosenDeck.subdecks.length === 0) {
      if (!this.subTitle.hasClass("sr-is-hidden")) {
        this.subTitle.addClass("sr-is-hidden");
      }
      return;
    }
    if (this.subTitle.hasClass("sr-is-hidden")) {
      this.subTitle.removeClass("sr-is-hidden");
    }
    let text = `${currentDeck.deckName}`;
    const isRandomMode = this.settings.flashcardCardOrder === "EveryCardRandomDeckAndCard";
    if (!isRandomMode) {
      const subDecksWithCardsInQueue = chosenDeck.subdecks.filter((subDeck) => {
        const deckStats = this.reviewSequencer.getDeckStats(subDeck.getTopicPath());
        return deckStats.dueCount + deckStats.newCount > 0;
      });
      text = `${t("DECKS")}: ${subDecksWithCardsInQueue.length} | ${text}`;
      text += `: ${currentDeck.getCardCount(2 /* All */, false)}`;
    }
    this.subTitle.setText(text);
  }
  // -> Controls
  _createCardControls() {
    this._createEditButton();
    this._createResetButton();
    this._createCardInfoButton();
    this._createSkipButton();
  }
  _createEditButton() {
    this.editButton = this.controls.createEl("button");
    this.editButton.addClasses(["sr-button", "sr-edit-button"]);
    (0, import_obsidian7.setIcon)(this.editButton, "edit");
    this.editButton.setAttribute("aria-label", t("EDIT_CARD"));
    this.editButton.addEventListener("click", async () => {
      this.editClickHandler();
    });
  }
  _createResetButton() {
    this.resetButton = this.controls.createEl("button");
    this.resetButton.addClasses(["sr-button", "sr-reset-button"]);
    (0, import_obsidian7.setIcon)(this.resetButton, "refresh-cw");
    this.resetButton.setAttribute("aria-label", t("RESET_CARD_PROGRESS"));
    this.resetButton.addEventListener("click", () => {
      this._processReview(3 /* Reset */);
    });
  }
  _createCardInfoButton() {
    this.infoButton = this.controls.createEl("button");
    this.infoButton.addClasses(["sr-button", "sr-info-button"]);
    (0, import_obsidian7.setIcon)(this.infoButton, "info");
    this.infoButton.setAttribute("aria-label", "View Card Info");
    this.infoButton.addEventListener("click", async () => {
      this._displayCurrentCardInfoNotice();
    });
  }
  _createSkipButton() {
    this.skipButton = this.controls.createEl("button");
    this.skipButton.addClasses(["sr-button", "sr-skip-button"]);
    (0, import_obsidian7.setIcon)(this.skipButton, "chevrons-right");
    this.skipButton.setAttribute("aria-label", t("SKIP"));
    this.skipButton.addEventListener("click", () => {
      this._skipCurrentCard();
    });
  }
  // -> Response
  _createResponseButtons() {
    this._createShowAnswerButton();
    this._createHardButton();
    this._createGoodButton();
    this._createEasyButton();
  }
  _resetResponseButtons() {
    this.answerButton.removeClass("sr-is-hidden");
    this.hardButton.addClass("sr-is-hidden");
    this.goodButton.addClass("sr-is-hidden");
    this.easyButton.addClass("sr-is-hidden");
  }
  _createShowAnswerButton() {
    this.answerButton = this.response.createEl("button");
    this.answerButton.addClasses(["sr-response-button", "sr-show-answer-button", "sr-bg-blue"]);
    this.answerButton.setText(t("SHOW_ANSWER"));
    this.answerButton.addEventListener("click", () => {
      this._showAnswer();
    });
  }
  _createHardButton() {
    this.hardButton = this.response.createEl("button");
    this.hardButton.addClasses([
      "sr-response-button",
      "sr-hard-button",
      "sr-bg-red",
      "sr-is-hidden"
    ]);
    this.hardButton.setText(this.settings.flashcardHardText);
    this.hardButton.addEventListener("click", () => {
      this._processReview(2 /* Hard */);
    });
  }
  _createGoodButton() {
    this.goodButton = this.response.createEl("button");
    this.goodButton.addClasses([
      "sr-response-button",
      "sr-good-button",
      "sr-bg-blue",
      "sr-is-hidden"
    ]);
    this.goodButton.setText(this.settings.flashcardGoodText);
    this.goodButton.addEventListener("click", () => {
      this._processReview(1 /* Good */);
    });
  }
  _createEasyButton() {
    this.easyButton = this.response.createEl("button");
    this.easyButton.addClasses([
      "sr-response-button",
      "sr-hard-button",
      "sr-bg-green",
      "sr-is-hidden"
    ]);
    this.easyButton.setText(this.settings.flashcardEasyText);
    this.easyButton.addEventListener("click", () => {
      this._processReview(0 /* Easy */);
    });
  }
  _setupEaseButton(button, buttonName, reviewResponse) {
    const schedule = this.reviewSequencer.determineCardSchedule(
      reviewResponse,
      this._currentCard
    );
    const interval = schedule.interval;
    if (import_obsidian7.Platform.isMobile) {
      button.setText(textInterval(interval, true));
    } else {
      button.setText(`${buttonName} - ${textInterval(interval, false)}`);
    }
  }
};

// src/gui/flashcard-modal.tsx
var FlashcardModal = class extends import_obsidian8.Modal {
  constructor(app, plugin, settings, reviewSequencer, reviewMode) {
    super(app);
    this.plugin = plugin;
    this.settings = settings;
    this.reviewSequencer = reviewSequencer;
    this.reviewMode = reviewMode;
    this.modalEl.style.height = this.settings.flashcardHeightPercentage + "%";
    this.modalEl.style.maxHeight = this.settings.flashcardHeightPercentage + "%";
    this.modalEl.style.width = this.settings.flashcardWidthPercentage + "%";
    this.modalEl.style.maxWidth = this.settings.flashcardWidthPercentage + "%";
    this.modalEl.setAttribute("id", "sr-modal");
    this.contentEl.addClass("sr-modal-content");
    this.deckView = new DeckListView(
      this.plugin,
      this.settings,
      this.reviewSequencer,
      this.contentEl,
      this._startReviewOfDeck.bind(this)
    );
    this.flashcardView = new FlashcardReviewView(
      this.app,
      this.plugin,
      this.settings,
      this.reviewSequencer,
      this.reviewMode,
      this.contentEl,
      this.modalEl,
      this._showDecksList.bind(this),
      this._doEditQuestionText.bind(this)
    );
  }
  onOpen() {
    this._showDecksList();
  }
  onClose() {
    this.mode = 3 /* Closed */;
    this.deckView.close();
    this.flashcardView.close();
  }
  _showDecksList() {
    this._hideFlashcard();
    this.deckView.show();
  }
  _hideDecksList() {
    this.deckView.hide();
  }
  _showFlashcard(deck) {
    this._hideDecksList();
    this.flashcardView.show(deck);
  }
  _hideFlashcard() {
    this.flashcardView.hide();
  }
  _startReviewOfDeck(deck) {
    this.reviewSequencer.setCurrentDeck(deck.getTopicPath());
    if (this.reviewSequencer.hasCurrentCard) {
      this._showFlashcard(deck);
    } else {
      this._showDecksList();
    }
  }
  async _doEditQuestionText() {
    const currentQ = this.reviewSequencer.currentQuestion;
    const textPrompt = currentQ.questionText.actualQuestion;
    const editModal = FlashcardEditModal.Prompt(
      this.app,
      textPrompt,
      currentQ.questionText.textDirection
    );
    editModal.then(async (modifiedCardText) => {
      this.reviewSequencer.updateCurrentQuestionText(modifiedCardText);
    }).catch((reason) => console.log(reason));
  }
};

// src/gui/review-queue-list-view.tsx
var import_obsidian9 = require("obsidian");
var REVIEW_QUEUE_VIEW_TYPE = "review-queue-list-view";
var ReviewQueueListView = class extends import_obsidian9.ItemView {
  get noteReviewQueue() {
    return this.nextNoteReviewHandler.noteReviewQueue;
  }
  constructor(leaf, app, nextNoteReviewHandler, settings) {
    super(leaf);
    this.nextNoteReviewHandler = nextNoteReviewHandler;
    this.settings = settings;
    this.registerEvent(this.app.workspace.on("file-open", () => this.redraw()));
    this.registerEvent(this.app.vault.on("rename", () => this.redraw()));
  }
  getViewType() {
    return REVIEW_QUEUE_VIEW_TYPE;
  }
  getDisplayText() {
    return t("NOTES_REVIEW_QUEUE");
  }
  getIcon() {
    return "SpacedRepIcon";
  }
  onHeaderMenu(menu) {
    menu.addItem((item) => {
      item.setTitle(t("CLOSE")).setIcon("cross").onClick(() => {
        this.app.workspace.detachLeavesOfType(REVIEW_QUEUE_VIEW_TYPE);
      });
    });
  }
  redraw() {
    const activeFile = this.app.workspace.getActiveFile();
    const rootEl = createDiv("tree-item nav-folder mod-root");
    const childrenEl = rootEl.createDiv("tree-item-children nav-folder-children");
    for (const [deckKey, deck] of this.noteReviewQueue.reviewDecks) {
      const deckCollapsed = !deck.activeFolders.has(deck.deckName);
      const deckFolderEl = this.createRightPaneFolder(
        childrenEl,
        deckKey,
        deckCollapsed,
        false,
        deck
      ).getElementsByClassName("tree-item-children nav-folder-children")[0];
      if (deck.newNotes.length > 0) {
        const newNotesFolderEl = this.createRightPaneFolder(
          deckFolderEl,
          t("NEW"),
          !deck.activeFolders.has(t("NEW")),
          deckCollapsed,
          deck
        );
        for (const newFile of deck.newNotes) {
          const fileIsOpen = activeFile && newFile.path === activeFile.path;
          if (fileIsOpen) {
            deck.activeFolders.add(deck.deckName);
            deck.activeFolders.add(t("NEW"));
            this.changeFolderFolding(newNotesFolderEl);
            this.changeFolderFolding(deckFolderEl);
          }
          this.createRightPaneFile(
            newNotesFolderEl,
            newFile.tfile,
            fileIsOpen,
            !deck.activeFolders.has(t("NEW")),
            deck
          );
        }
      }
      if (deck.scheduledNotes.length > 0) {
        const now2 = Date.now();
        let currUnix = -1;
        let schedFolderEl = null, folderTitle = "";
        const maxDaysToRender = this.settings.maxNDaysNotesReviewQueue;
        for (const sNote of deck.scheduledNotes) {
          if (sNote.dueUnix != currUnix) {
            const nDays = Math.ceil((sNote.dueUnix - now2) / TICKS_PER_DAY);
            if (nDays > maxDaysToRender) {
              break;
            }
            if (nDays === -1) {
              folderTitle = t("YESTERDAY");
            } else if (nDays === 0) {
              folderTitle = t("TODAY");
            } else if (nDays === 1) {
              folderTitle = t("TOMORROW");
            } else {
              folderTitle = new Date(sNote.dueUnix).toDateString();
            }
            schedFolderEl = this.createRightPaneFolder(
              deckFolderEl,
              folderTitle,
              !deck.activeFolders.has(folderTitle),
              deckCollapsed,
              deck
            );
            currUnix = sNote.dueUnix;
          }
          const fileIsOpen = activeFile && sNote.note.path === activeFile.path;
          if (fileIsOpen) {
            deck.activeFolders.add(deck.deckName);
            deck.activeFolders.add(folderTitle);
            this.changeFolderFolding(schedFolderEl);
            this.changeFolderFolding(deckFolderEl);
          }
          this.createRightPaneFile(
            schedFolderEl,
            sNote.note.tfile,
            fileIsOpen,
            !deck.activeFolders.has(folderTitle),
            deck
          );
        }
      }
    }
    const contentEl = this.containerEl.children[1];
    contentEl.empty();
    contentEl.appendChild(rootEl);
  }
  createRightPaneFolder(parentEl, folderTitle, collapsed, hidden, deck) {
    const folderEl = parentEl.createDiv("tree-item nav-folder");
    const folderTitleEl = folderEl.createDiv("tree-item-self nav-folder-title");
    const childrenEl = folderEl.createDiv(
      "tree-item-children nav-folder-children"
    );
    const collapseIconEl = folderTitleEl.createDiv(
      "tree-item-icon collapse-icon nav-folder-collapse-indicator"
    );
    collapseIconEl.innerHTML = COLLAPSE_ICON;
    this.changeFolderFolding(folderEl, collapsed);
    folderTitleEl.createDiv("tree-item-inner nav-folder-title-content").setText(folderTitle);
    if (hidden) {
      folderEl.style.display = "none";
    }
    folderTitleEl.onClickEvent(() => {
      this.changeFolderFolding(folderEl, !folderEl.hasClass("is-collapsed"));
      childrenEl.style.display = !folderEl.hasClass("is-collapsed") ? "block" : "none";
      if (!folderEl.hasClass("is-collapsed")) {
        deck.activeFolders.delete(folderTitle);
      } else {
        deck.activeFolders.add(folderTitle);
      }
    });
    return folderEl;
  }
  createRightPaneFile(folderEl, file, fileElActive, hidden, deck) {
    const navFileEl = folderEl.getElementsByClassName("tree-item-children nav-folder-children")[0].createDiv("nav-file");
    if (hidden) {
      navFileEl.style.display = "none";
    }
    const navFileTitle = navFileEl.createDiv("tree-item-self nav-file-title");
    if (fileElActive) {
      navFileTitle.addClass("is-active");
    }
    navFileTitle.createDiv("tree-item-inner nav-file-title-content").setText(file.basename);
    navFileTitle.addEventListener(
      "click",
      async (event) => {
        event.preventDefault();
        await this.nextNoteReviewHandler.openNote(deck.deckName, file);
        return false;
      },
      false
    );
    navFileTitle.addEventListener(
      "contextmenu",
      (event) => {
        event.preventDefault();
        const fileMenu = new import_obsidian9.Menu();
        this.app.workspace.trigger("file-menu", fileMenu, file, "my-context-menu", null);
        fileMenu.showAtPosition({
          x: event.pageX,
          y: event.pageY
        });
        return false;
      },
      false
    );
  }
  changeFolderFolding(folderEl, collapsed = false) {
    if (collapsed) {
      folderEl.addClass("is-collapsed");
      const collapseIconEl = folderEl.find("div.nav-folder-collapse-indicator");
      collapseIconEl.addClass("is-collapsed");
    } else {
      folderEl.removeClass("is-collapsed");
      const collapseIconEl = folderEl.find("div.nav-folder-collapse-indicator");
      collapseIconEl.removeClass("is-collapsed");
    }
  }
};

// src/gui/sidebar.tsx
var OsrSidebar = class {
  get app() {
    return this.plugin.app;
  }
  constructor(plugin, settings, nextNoteReviewHandler) {
    this.plugin = plugin;
    this.settings = settings;
    this.nextNoteReviewHandler = nextNoteReviewHandler;
  }
  redraw() {
    if (this.getActiveLeaf(REVIEW_QUEUE_VIEW_TYPE)) this.reviewQueueListView.redraw();
  }
  getActiveLeaf(type) {
    const leaves = this.app.workspace.getLeavesOfType(type);
    if (leaves.length == 0) {
      return null;
    }
    return leaves[0];
  }
  async init() {
    this.plugin.registerView(REVIEW_QUEUE_VIEW_TYPE, (leaf) => {
      return this.reviewQueueListView = new ReviewQueueListView(
        leaf,
        this.app,
        this.nextNoteReviewHandler,
        this.settings
      );
    });
    if (this.settings.enableNoteReviewPaneOnStartup && this.getActiveLeaf(REVIEW_QUEUE_VIEW_TYPE) == null) {
      await this.activateReviewQueueViewPanel();
    }
  }
  async activateReviewQueueViewPanel() {
    await this.app.workspace.getRightLeaf(false).setViewState({
      type: REVIEW_QUEUE_VIEW_TYPE,
      active: true
    });
  }
  async openReviewQueueView() {
    let reviewQueueLeaf = this.getActiveLeaf(REVIEW_QUEUE_VIEW_TYPE);
    if (reviewQueueLeaf == null) {
      await this.activateReviewQueueViewPanel();
      reviewQueueLeaf = this.getActiveLeaf(REVIEW_QUEUE_VIEW_TYPE);
    }
    if (reviewQueueLeaf !== null) {
      this.app.workspace.revealLeaf(reviewQueueLeaf);
    }
  }
};

// node_modules/.pnpm/@kurkle+color@0.3.2/node_modules/@kurkle/color/dist/color.esm.js
function round(v) {
  return v + 0.5 | 0;
}
var lim = (v, l, h4) => Math.max(Math.min(v, h4), l);
function p2b(v) {
  return lim(round(v * 2.55), 0, 255);
}
function n2b(v) {
  return lim(round(v * 255), 0, 255);
}
function b2n(v) {
  return lim(round(v / 2.55) / 100, 0, 1);
}
function n2p(v) {
  return lim(round(v * 100), 0, 100);
}
var map$1 = { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15 };
var hex2 = [..."0123456789ABCDEF"];
var h1 = (b) => hex2[b & 15];
var h2 = (b) => hex2[(b & 240) >> 4] + hex2[b & 15];
var eq = (b) => (b & 240) >> 4 === (b & 15);
var isShort = (v) => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);
function hexParse(str) {
  var len = str.length;
  var ret;
  if (str[0] === "#") {
    if (len === 4 || len === 5) {
      ret = {
        r: 255 & map$1[str[1]] * 17,
        g: 255 & map$1[str[2]] * 17,
        b: 255 & map$1[str[3]] * 17,
        a: len === 5 ? map$1[str[4]] * 17 : 255
      };
    } else if (len === 7 || len === 9) {
      ret = {
        r: map$1[str[1]] << 4 | map$1[str[2]],
        g: map$1[str[3]] << 4 | map$1[str[4]],
        b: map$1[str[5]] << 4 | map$1[str[6]],
        a: len === 9 ? map$1[str[7]] << 4 | map$1[str[8]] : 255
      };
    }
  }
  return ret;
}
var alpha = (a, f) => a < 255 ? f(a) : "";
function hexString(v) {
  var f = isShort(v) ? h1 : h2;
  return v ? "#" + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) : void 0;
}
var HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;
function hsl2rgbn(h4, s, l) {
  const a = s * Math.min(l, 1 - l);
  const f = (n, k = (n + h4 / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
  return [f(0), f(8), f(4)];
}
function hsv2rgbn(h4, s, v) {
  const f = (n, k = (n + h4 / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);
  return [f(5), f(3), f(1)];
}
function hwb2rgbn(h4, w, b) {
  const rgb = hsl2rgbn(h4, 1, 0.5);
  let i;
  if (w + b > 1) {
    i = 1 / (w + b);
    w *= i;
    b *= i;
  }
  for (i = 0; i < 3; i++) {
    rgb[i] *= 1 - w - b;
    rgb[i] += w;
  }
  return rgb;
}
function hueValue(r, g, b, d, max) {
  if (r === max) {
    return (g - b) / d + (g < b ? 6 : 0);
  }
  if (g === max) {
    return (b - r) / d + 2;
  }
  return (r - g) / d + 4;
}
function rgb2hsl(v) {
  const range = 255;
  const r = v.r / range;
  const g = v.g / range;
  const b = v.b / range;
  const max = Math.max(r, g, b);
  const min = Math.min(r, g, b);
  const l = (max + min) / 2;
  let h4, s, d;
  if (max !== min) {
    d = max - min;
    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
    h4 = hueValue(r, g, b, d, max);
    h4 = h4 * 60 + 0.5;
  }
  return [h4 | 0, s || 0, l];
}
function calln(f, a, b, c) {
  return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b);
}
function hsl2rgb(h4, s, l) {
  return calln(hsl2rgbn, h4, s, l);
}
function hwb2rgb(h4, w, b) {
  return calln(hwb2rgbn, h4, w, b);
}
function hsv2rgb(h4, s, v) {
  return calln(hsv2rgbn, h4, s, v);
}
function hue(h4) {
  return (h4 % 360 + 360) % 360;
}
function hueParse(str) {
  const m = HUE_RE.exec(str);
  let a = 255;
  let v;
  if (!m) {
    return;
  }
  if (m[5] !== v) {
    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);
  }
  const h4 = hue(+m[2]);
  const p1 = +m[3] / 100;
  const p2 = +m[4] / 100;
  if (m[1] === "hwb") {
    v = hwb2rgb(h4, p1, p2);
  } else if (m[1] === "hsv") {
    v = hsv2rgb(h4, p1, p2);
  } else {
    v = hsl2rgb(h4, p1, p2);
  }
  return {
    r: v[0],
    g: v[1],
    b: v[2],
    a
  };
}
function rotate(v, deg) {
  var h4 = rgb2hsl(v);
  h4[0] = hue(h4[0] + deg);
  h4 = hsl2rgb(h4);
  v.r = h4[0];
  v.g = h4[1];
  v.b = h4[2];
}
function hslString(v) {
  if (!v) {
    return;
  }
  const a = rgb2hsl(v);
  const h4 = a[0];
  const s = n2p(a[1]);
  const l = n2p(a[2]);
  return v.a < 255 ? `hsla(${h4}, ${s}%, ${l}%, ${b2n(v.a)})` : `hsl(${h4}, ${s}%, ${l}%)`;
}
var map = {
  x: "dark",
  Z: "light",
  Y: "re",
  X: "blu",
  W: "gr",
  V: "medium",
  U: "slate",
  A: "ee",
  T: "ol",
  S: "or",
  B: "ra",
  C: "lateg",
  D: "ights",
  R: "in",
  Q: "turquois",
  E: "hi",
  P: "ro",
  O: "al",
  N: "le",
  M: "de",
  L: "yello",
  F: "en",
  K: "ch",
  G: "arks",
  H: "ea",
  I: "ightg",
  J: "wh"
};
var names$1 = {
  OiceXe: "f0f8ff",
  antiquewEte: "faebd7",
  aqua: "ffff",
  aquamarRe: "7fffd4",
  azuY: "f0ffff",
  beige: "f5f5dc",
  bisque: "ffe4c4",
  black: "0",
  blanKedOmond: "ffebcd",
  Xe: "ff",
  XeviTet: "8a2be2",
  bPwn: "a52a2a",
  burlywood: "deb887",
  caMtXe: "5f9ea0",
  KartYuse: "7fff00",
  KocTate: "d2691e",
  cSO: "ff7f50",
  cSnflowerXe: "6495ed",
  cSnsilk: "fff8dc",
  crimson: "dc143c",
  cyan: "ffff",
  xXe: "8b",
  xcyan: "8b8b",
  xgTMnPd: "b8860b",
  xWay: "a9a9a9",
  xgYF: "6400",
  xgYy: "a9a9a9",
  xkhaki: "bdb76b",
  xmagFta: "8b008b",
  xTivegYF: "556b2f",
  xSange: "ff8c00",
  xScEd: "9932cc",
  xYd: "8b0000",
  xsOmon: "e9967a",
  xsHgYF: "8fbc8f",
  xUXe: "483d8b",
  xUWay: "2f4f4f",
  xUgYy: "2f4f4f",
  xQe: "ced1",
  xviTet: "9400d3",
  dAppRk: "ff1493",
  dApskyXe: "bfff",
  dimWay: "696969",
  dimgYy: "696969",
  dodgerXe: "1e90ff",
  fiYbrick: "b22222",
  flSOwEte: "fffaf0",
  foYstWAn: "228b22",
  fuKsia: "ff00ff",
  gaRsbSo: "dcdcdc",
  ghostwEte: "f8f8ff",
  gTd: "ffd700",
  gTMnPd: "daa520",
  Way: "808080",
  gYF: "8000",
  gYFLw: "adff2f",
  gYy: "808080",
  honeyMw: "f0fff0",
  hotpRk: "ff69b4",
  RdianYd: "cd5c5c",
  Rdigo: "4b0082",
  ivSy: "fffff0",
  khaki: "f0e68c",
  lavFMr: "e6e6fa",
  lavFMrXsh: "fff0f5",
  lawngYF: "7cfc00",
  NmoncEffon: "fffacd",
  ZXe: "add8e6",
  ZcSO: "f08080",
  Zcyan: "e0ffff",
  ZgTMnPdLw: "fafad2",
  ZWay: "d3d3d3",
  ZgYF: "90ee90",
  ZgYy: "d3d3d3",
  ZpRk: "ffb6c1",
  ZsOmon: "ffa07a",
  ZsHgYF: "20b2aa",
  ZskyXe: "87cefa",
  ZUWay: "778899",
  ZUgYy: "778899",
  ZstAlXe: "b0c4de",
  ZLw: "ffffe0",
  lime: "ff00",
  limegYF: "32cd32",
  lRF: "faf0e6",
  magFta: "ff00ff",
  maPon: "800000",
  VaquamarRe: "66cdaa",
  VXe: "cd",
  VScEd: "ba55d3",
  VpurpN: "9370db",
  VsHgYF: "3cb371",
  VUXe: "7b68ee",
  VsprRggYF: "fa9a",
  VQe: "48d1cc",
  VviTetYd: "c71585",
  midnightXe: "191970",
  mRtcYam: "f5fffa",
  mistyPse: "ffe4e1",
  moccasR: "ffe4b5",
  navajowEte: "ffdead",
  navy: "80",
  Tdlace: "fdf5e6",
  Tive: "808000",
  TivedBb: "6b8e23",
  Sange: "ffa500",
  SangeYd: "ff4500",
  ScEd: "da70d6",
  pOegTMnPd: "eee8aa",
  pOegYF: "98fb98",
  pOeQe: "afeeee",
  pOeviTetYd: "db7093",
  papayawEp: "ffefd5",
  pHKpuff: "ffdab9",
  peru: "cd853f",
  pRk: "ffc0cb",
  plum: "dda0dd",
  powMrXe: "b0e0e6",
  purpN: "800080",
  YbeccapurpN: "663399",
  Yd: "ff0000",
  Psybrown: "bc8f8f",
  PyOXe: "4169e1",
  saddNbPwn: "8b4513",
  sOmon: "fa8072",
  sandybPwn: "f4a460",
  sHgYF: "2e8b57",
  sHshell: "fff5ee",
  siFna: "a0522d",
  silver: "c0c0c0",
  skyXe: "87ceeb",
  UXe: "6a5acd",
  UWay: "708090",
  UgYy: "708090",
  snow: "fffafa",
  sprRggYF: "ff7f",
  stAlXe: "4682b4",
  tan: "d2b48c",
  teO: "8080",
  tEstN: "d8bfd8",
  tomato: "ff6347",
  Qe: "40e0d0",
  viTet: "ee82ee",
  JHt: "f5deb3",
  wEte: "ffffff",
  wEtesmoke: "f5f5f5",
  Lw: "ffff00",
  LwgYF: "9acd32"
};
function unpack() {
  const unpacked = {};
  const keys = Object.keys(names$1);
  const tkeys = Object.keys(map);
  let i, j, k, ok, nk;
  for (i = 0; i < keys.length; i++) {
    ok = nk = keys[i];
    for (j = 0; j < tkeys.length; j++) {
      k = tkeys[j];
      nk = nk.replace(k, map[k]);
    }
    k = parseInt(names$1[ok], 16);
    unpacked[nk] = [k >> 16 & 255, k >> 8 & 255, k & 255];
  }
  return unpacked;
}
var names;
function nameParse(str) {
  if (!names) {
    names = unpack();
    names.transparent = [0, 0, 0, 0];
  }
  const a = names[str.toLowerCase()];
  return a && {
    r: a[0],
    g: a[1],
    b: a[2],
    a: a.length === 4 ? a[3] : 255
  };
}
var RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
function rgbParse(str) {
  const m = RGB_RE.exec(str);
  let a = 255;
  let r, g, b;
  if (!m) {
    return;
  }
  if (m[7] !== r) {
    const v = +m[7];
    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);
  }
  r = +m[1];
  g = +m[3];
  b = +m[5];
  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));
  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));
  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));
  return {
    r,
    g,
    b,
    a
  };
}
function rgbString(v) {
  return v && (v.a < 255 ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` : `rgb(${v.r}, ${v.g}, ${v.b})`);
}
var to = (v) => v <= 31308e-7 ? v * 12.92 : Math.pow(v, 1 / 2.4) * 1.055 - 0.055;
var from = (v) => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
function interpolate2(rgb1, rgb2, t2) {
  const r = from(b2n(rgb1.r));
  const g = from(b2n(rgb1.g));
  const b = from(b2n(rgb1.b));
  return {
    r: n2b(to(r + t2 * (from(b2n(rgb2.r)) - r))),
    g: n2b(to(g + t2 * (from(b2n(rgb2.g)) - g))),
    b: n2b(to(b + t2 * (from(b2n(rgb2.b)) - b))),
    a: rgb1.a + t2 * (rgb2.a - rgb1.a)
  };
}
function modHSL(v, i, ratio) {
  if (v) {
    let tmp = rgb2hsl(v);
    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));
    tmp = hsl2rgb(tmp);
    v.r = tmp[0];
    v.g = tmp[1];
    v.b = tmp[2];
  }
}
function clone(v, proto) {
  return v ? Object.assign(proto || {}, v) : v;
}
function fromObject(input) {
  var v = { r: 0, g: 0, b: 0, a: 255 };
  if (Array.isArray(input)) {
    if (input.length >= 3) {
      v = { r: input[0], g: input[1], b: input[2], a: 255 };
      if (input.length > 3) {
        v.a = n2b(input[3]);
      }
    }
  } else {
    v = clone(input, { r: 0, g: 0, b: 0, a: 1 });
    v.a = n2b(v.a);
  }
  return v;
}
function functionParse(str) {
  if (str.charAt(0) === "r") {
    return rgbParse(str);
  }
  return hueParse(str);
}
var Color = class _Color {
  constructor(input) {
    if (input instanceof _Color) {
      return input;
    }
    const type = typeof input;
    let v;
    if (type === "object") {
      v = fromObject(input);
    } else if (type === "string") {
      v = hexParse(input) || nameParse(input) || functionParse(input);
    }
    this._rgb = v;
    this._valid = !!v;
  }
  get valid() {
    return this._valid;
  }
  get rgb() {
    var v = clone(this._rgb);
    if (v) {
      v.a = b2n(v.a);
    }
    return v;
  }
  set rgb(obj) {
    this._rgb = fromObject(obj);
  }
  rgbString() {
    return this._valid ? rgbString(this._rgb) : void 0;
  }
  hexString() {
    return this._valid ? hexString(this._rgb) : void 0;
  }
  hslString() {
    return this._valid ? hslString(this._rgb) : void 0;
  }
  mix(color2, weight) {
    if (color2) {
      const c1 = this.rgb;
      const c2 = color2.rgb;
      let w2;
      const p = weight === w2 ? 0.5 : weight;
      const w = 2 * p - 1;
      const a = c1.a - c2.a;
      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2;
      w2 = 1 - w1;
      c1.r = 255 & w1 * c1.r + w2 * c2.r + 0.5;
      c1.g = 255 & w1 * c1.g + w2 * c2.g + 0.5;
      c1.b = 255 & w1 * c1.b + w2 * c2.b + 0.5;
      c1.a = p * c1.a + (1 - p) * c2.a;
      this.rgb = c1;
    }
    return this;
  }
  interpolate(color2, t2) {
    if (color2) {
      this._rgb = interpolate2(this._rgb, color2._rgb, t2);
    }
    return this;
  }
  clone() {
    return new _Color(this.rgb);
  }
  alpha(a) {
    this._rgb.a = n2b(a);
    return this;
  }
  clearer(ratio) {
    const rgb = this._rgb;
    rgb.a *= 1 - ratio;
    return this;
  }
  greyscale() {
    const rgb = this._rgb;
    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);
    rgb.r = rgb.g = rgb.b = val;
    return this;
  }
  opaquer(ratio) {
    const rgb = this._rgb;
    rgb.a *= 1 + ratio;
    return this;
  }
  negate() {
    const v = this._rgb;
    v.r = 255 - v.r;
    v.g = 255 - v.g;
    v.b = 255 - v.b;
    return this;
  }
  lighten(ratio) {
    modHSL(this._rgb, 2, ratio);
    return this;
  }
  darken(ratio) {
    modHSL(this._rgb, 2, -ratio);
    return this;
  }
  saturate(ratio) {
    modHSL(this._rgb, 1, ratio);
    return this;
  }
  desaturate(ratio) {
    modHSL(this._rgb, 1, -ratio);
    return this;
  }
  rotate(deg) {
    rotate(this._rgb, deg);
    return this;
  }
};

// node_modules/.pnpm/chart.js@4.4.4/node_modules/chart.js/dist/chunks/helpers.segment.js
function noop() {
}
var uid = /* @__PURE__ */ (() => {
  let id = 0;
  return () => id++;
})();
function isNullOrUndef(value) {
  return value === null || typeof value === "undefined";
}
function isArray(value) {
  if (Array.isArray && Array.isArray(value)) {
    return true;
  }
  const type = Object.prototype.toString.call(value);
  if (type.slice(0, 7) === "[object" && type.slice(-6) === "Array]") {
    return true;
  }
  return false;
}
function isObject(value) {
  return value !== null && Object.prototype.toString.call(value) === "[object Object]";
}
function isNumberFinite(value) {
  return (typeof value === "number" || value instanceof Number) && isFinite(+value);
}
function finiteOrDefault(value, defaultValue) {
  return isNumberFinite(value) ? value : defaultValue;
}
function valueOrDefault(value, defaultValue) {
  return typeof value === "undefined" ? defaultValue : value;
}
var toPercentage = (value, dimension) => typeof value === "string" && value.endsWith("%") ? parseFloat(value) / 100 : +value / dimension;
var toDimension = (value, dimension) => typeof value === "string" && value.endsWith("%") ? parseFloat(value) / 100 * dimension : +value;
function callback(fn, args, thisArg) {
  if (fn && typeof fn.call === "function") {
    return fn.apply(thisArg, args);
  }
}
function each(loopable, fn, thisArg, reverse) {
  let i, len, keys;
  if (isArray(loopable)) {
    len = loopable.length;
    if (reverse) {
      for (i = len - 1; i >= 0; i--) {
        fn.call(thisArg, loopable[i], i);
      }
    } else {
      for (i = 0; i < len; i++) {
        fn.call(thisArg, loopable[i], i);
      }
    }
  } else if (isObject(loopable)) {
    keys = Object.keys(loopable);
    len = keys.length;
    for (i = 0; i < len; i++) {
      fn.call(thisArg, loopable[keys[i]], keys[i]);
    }
  }
}
function _elementsEqual(a0, a1) {
  let i, ilen, v0, v1;
  if (!a0 || !a1 || a0.length !== a1.length) {
    return false;
  }
  for (i = 0, ilen = a0.length; i < ilen; ++i) {
    v0 = a0[i];
    v1 = a1[i];
    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {
      return false;
    }
  }
  return true;
}
function clone2(source) {
  if (isArray(source)) {
    return source.map(clone2);
  }
  if (isObject(source)) {
    const target = /* @__PURE__ */ Object.create(null);
    const keys = Object.keys(source);
    const klen = keys.length;
    let k = 0;
    for (; k < klen; ++k) {
      target[keys[k]] = clone2(source[keys[k]]);
    }
    return target;
  }
  return source;
}
function isValidKey(key) {
  return [
    "__proto__",
    "prototype",
    "constructor"
  ].indexOf(key) === -1;
}
function _merger(key, target, source, options2) {
  if (!isValidKey(key)) {
    return;
  }
  const tval = target[key];
  const sval = source[key];
  if (isObject(tval) && isObject(sval)) {
    merge(tval, sval, options2);
  } else {
    target[key] = clone2(sval);
  }
}
function merge(target, source, options2) {
  const sources = isArray(source) ? source : [
    source
  ];
  const ilen = sources.length;
  if (!isObject(target)) {
    return target;
  }
  options2 = options2 || {};
  const merger = options2.merger || _merger;
  let current;
  for (let i = 0; i < ilen; ++i) {
    current = sources[i];
    if (!isObject(current)) {
      continue;
    }
    const keys = Object.keys(current);
    for (let k = 0, klen = keys.length; k < klen; ++k) {
      merger(keys[k], target, current, options2);
    }
  }
  return target;
}
function mergeIf(target, source) {
  return merge(target, source, {
    merger: _mergerIf
  });
}
function _mergerIf(key, target, source) {
  if (!isValidKey(key)) {
    return;
  }
  const tval = target[key];
  const sval = source[key];
  if (isObject(tval) && isObject(sval)) {
    mergeIf(tval, sval);
  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {
    target[key] = clone2(sval);
  }
}
var keyResolvers = {
  // Chart.helpers.core resolveObjectKey should resolve empty key to root object
  "": (v) => v,
  // default resolvers
  x: (o) => o.x,
  y: (o) => o.y
};
function _splitKey(key) {
  const parts = key.split(".");
  const keys = [];
  let tmp = "";
  for (const part of parts) {
    tmp += part;
    if (tmp.endsWith("\\")) {
      tmp = tmp.slice(0, -1) + ".";
    } else {
      keys.push(tmp);
      tmp = "";
    }
  }
  return keys;
}
function _getKeyResolver(key) {
  const keys = _splitKey(key);
  return (obj) => {
    for (const k of keys) {
      if (k === "") {
        break;
      }
      obj = obj && obj[k];
    }
    return obj;
  };
}
function resolveObjectKey(obj, key) {
  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));
  return resolver(obj);
}
function _capitalize(str) {
  return str.charAt(0).toUpperCase() + str.slice(1);
}
var defined = (value) => typeof value !== "undefined";
var isFunction = (value) => typeof value === "function";
var setsEqual = (a, b) => {
  if (a.size !== b.size) {
    return false;
  }
  for (const item of a) {
    if (!b.has(item)) {
      return false;
    }
  }
  return true;
};
function _isClickEvent(e) {
  return e.type === "mouseup" || e.type === "click" || e.type === "contextmenu";
}
var PI = Math.PI;
var TAU = 2 * PI;
var PITAU = TAU + PI;
var INFINITY = Number.POSITIVE_INFINITY;
var RAD_PER_DEG = PI / 180;
var HALF_PI = PI / 2;
var QUARTER_PI = PI / 4;
var TWO_THIRDS_PI = PI * 2 / 3;
var log10 = Math.log10;
var sign = Math.sign;
function almostEquals(x, y, epsilon) {
  return Math.abs(x - y) < epsilon;
}
function niceNum(range) {
  const roundedRange = Math.round(range);
  range = almostEquals(range, roundedRange, range / 1e3) ? roundedRange : range;
  const niceRange = Math.pow(10, Math.floor(log10(range)));
  const fraction = range / niceRange;
  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;
  return niceFraction * niceRange;
}
function _factorize(value) {
  const result = [];
  const sqrt = Math.sqrt(value);
  let i;
  for (i = 1; i < sqrt; i++) {
    if (value % i === 0) {
      result.push(i);
      result.push(value / i);
    }
  }
  if (sqrt === (sqrt | 0)) {
    result.push(sqrt);
  }
  result.sort((a, b) => a - b).pop();
  return result;
}
function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}
function almostWhole(x, epsilon) {
  const rounded = Math.round(x);
  return rounded - epsilon <= x && rounded + epsilon >= x;
}
function _setMinAndMaxByKey(array, target, property) {
  let i, ilen, value;
  for (i = 0, ilen = array.length; i < ilen; i++) {
    value = array[i][property];
    if (!isNaN(value)) {
      target.min = Math.min(target.min, value);
      target.max = Math.max(target.max, value);
    }
  }
}
function toRadians(degrees) {
  return degrees * (PI / 180);
}
function toDegrees(radians) {
  return radians * (180 / PI);
}
function _decimalPlaces(x) {
  if (!isNumberFinite(x)) {
    return;
  }
  let e = 1;
  let p = 0;
  while (Math.round(x * e) / e !== x) {
    e *= 10;
    p++;
  }
  return p;
}
function getAngleFromPoint(centrePoint, anglePoint) {
  const distanceFromXCenter = anglePoint.x - centrePoint.x;
  const distanceFromYCenter = anglePoint.y - centrePoint.y;
  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);
  if (angle < -0.5 * PI) {
    angle += TAU;
  }
  return {
    angle,
    distance: radialDistanceFromCenter
  };
}
function distanceBetweenPoints(pt1, pt2) {
  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));
}
function _normalizeAngle(a) {
  return (a % TAU + TAU) % TAU;
}
function _angleBetween(angle, start, end, sameAngleIsFullCircle) {
  const a = _normalizeAngle(angle);
  const s = _normalizeAngle(start);
  const e = _normalizeAngle(end);
  const angleToStart = _normalizeAngle(s - a);
  const angleToEnd = _normalizeAngle(e - a);
  const startToAngle = _normalizeAngle(a - s);
  const endToAngle = _normalizeAngle(a - e);
  return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;
}
function _limitValue(value, min, max) {
  return Math.max(min, Math.min(max, value));
}
function _int16Range(value) {
  return _limitValue(value, -32768, 32767);
}
function _isBetween(value, start, end, epsilon = 1e-6) {
  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;
}
function _lookup(table, value, cmp) {
  cmp = cmp || ((index) => table[index] < value);
  let hi = table.length - 1;
  let lo = 0;
  let mid;
  while (hi - lo > 1) {
    mid = lo + hi >> 1;
    if (cmp(mid)) {
      lo = mid;
    } else {
      hi = mid;
    }
  }
  return {
    lo,
    hi
  };
}
var _lookupByKey = (table, key, value, last) => _lookup(table, value, last ? (index) => {
  const ti = table[index][key];
  return ti < value || ti === value && table[index + 1][key] === value;
} : (index) => table[index][key] < value);
var _rlookupByKey = (table, key, value) => _lookup(table, value, (index) => table[index][key] >= value);
function _filterBetween(values, min, max) {
  let start = 0;
  let end = values.length;
  while (start < end && values[start] < min) {
    start++;
  }
  while (end > start && values[end - 1] > max) {
    end--;
  }
  return start > 0 || end < values.length ? values.slice(start, end) : values;
}
var arrayEvents = [
  "push",
  "pop",
  "shift",
  "splice",
  "unshift"
];
function listenArrayEvents(array, listener) {
  if (array._chartjs) {
    array._chartjs.listeners.push(listener);
    return;
  }
  Object.defineProperty(array, "_chartjs", {
    configurable: true,
    enumerable: false,
    value: {
      listeners: [
        listener
      ]
    }
  });
  arrayEvents.forEach((key) => {
    const method = "_onData" + _capitalize(key);
    const base = array[key];
    Object.defineProperty(array, key, {
      configurable: true,
      enumerable: false,
      value(...args) {
        const res = base.apply(this, args);
        array._chartjs.listeners.forEach((object) => {
          if (typeof object[method] === "function") {
            object[method](...args);
          }
        });
        return res;
      }
    });
  });
}
function unlistenArrayEvents(array, listener) {
  const stub = array._chartjs;
  if (!stub) {
    return;
  }
  const listeners = stub.listeners;
  const index = listeners.indexOf(listener);
  if (index !== -1) {
    listeners.splice(index, 1);
  }
  if (listeners.length > 0) {
    return;
  }
  arrayEvents.forEach((key) => {
    delete array[key];
  });
  delete array._chartjs;
}
function _arrayUnique(items) {
  const set2 = new Set(items);
  if (set2.size === items.length) {
    return items;
  }
  return Array.from(set2);
}
var requestAnimFrame = function() {
  if (typeof window === "undefined") {
    return function(callback2) {
      return callback2();
    };
  }
  return window.requestAnimationFrame;
}();
function throttled(fn, thisArg) {
  let argsToUse = [];
  let ticking = false;
  return function(...args) {
    argsToUse = args;
    if (!ticking) {
      ticking = true;
      requestAnimFrame.call(window, () => {
        ticking = false;
        fn.apply(thisArg, argsToUse);
      });
    }
  };
}
function debounce(fn, delay) {
  let timeout;
  return function(...args) {
    if (delay) {
      clearTimeout(timeout);
      timeout = setTimeout(fn, delay, args);
    } else {
      fn.apply(this, args);
    }
    return delay;
  };
}
var _toLeftRightCenter = (align) => align === "start" ? "left" : align === "end" ? "right" : "center";
var _alignStartEnd = (align, start, end) => align === "start" ? start : align === "end" ? end : (start + end) / 2;
var _textX = (align, left, right, rtl) => {
  const check = rtl ? "left" : "right";
  return align === check ? right : align === "center" ? (left + right) / 2 : left;
};
var atEdge = (t2) => t2 === 0 || t2 === 1;
var elasticIn = (t2, s, p) => -(Math.pow(2, 10 * (t2 -= 1)) * Math.sin((t2 - s) * TAU / p));
var elasticOut = (t2, s, p) => Math.pow(2, -10 * t2) * Math.sin((t2 - s) * TAU / p) + 1;
var effects = {
  linear: (t2) => t2,
  easeInQuad: (t2) => t2 * t2,
  easeOutQuad: (t2) => -t2 * (t2 - 2),
  easeInOutQuad: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 : -0.5 * (--t2 * (t2 - 2) - 1),
  easeInCubic: (t2) => t2 * t2 * t2,
  easeOutCubic: (t2) => (t2 -= 1) * t2 * t2 + 1,
  easeInOutCubic: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 : 0.5 * ((t2 -= 2) * t2 * t2 + 2),
  easeInQuart: (t2) => t2 * t2 * t2 * t2,
  easeOutQuart: (t2) => -((t2 -= 1) * t2 * t2 * t2 - 1),
  easeInOutQuart: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 * t2 : -0.5 * ((t2 -= 2) * t2 * t2 * t2 - 2),
  easeInQuint: (t2) => t2 * t2 * t2 * t2 * t2,
  easeOutQuint: (t2) => (t2 -= 1) * t2 * t2 * t2 * t2 + 1,
  easeInOutQuint: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 * t2 * t2 : 0.5 * ((t2 -= 2) * t2 * t2 * t2 * t2 + 2),
  easeInSine: (t2) => -Math.cos(t2 * HALF_PI) + 1,
  easeOutSine: (t2) => Math.sin(t2 * HALF_PI),
  easeInOutSine: (t2) => -0.5 * (Math.cos(PI * t2) - 1),
  easeInExpo: (t2) => t2 === 0 ? 0 : Math.pow(2, 10 * (t2 - 1)),
  easeOutExpo: (t2) => t2 === 1 ? 1 : -Math.pow(2, -10 * t2) + 1,
  easeInOutExpo: (t2) => atEdge(t2) ? t2 : t2 < 0.5 ? 0.5 * Math.pow(2, 10 * (t2 * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t2 * 2 - 1)) + 2),
  easeInCirc: (t2) => t2 >= 1 ? t2 : -(Math.sqrt(1 - t2 * t2) - 1),
  easeOutCirc: (t2) => Math.sqrt(1 - (t2 -= 1) * t2),
  easeInOutCirc: (t2) => (t2 /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t2 * t2) - 1) : 0.5 * (Math.sqrt(1 - (t2 -= 2) * t2) + 1),
  easeInElastic: (t2) => atEdge(t2) ? t2 : elasticIn(t2, 0.075, 0.3),
  easeOutElastic: (t2) => atEdge(t2) ? t2 : elasticOut(t2, 0.075, 0.3),
  easeInOutElastic(t2) {
    const s = 0.1125;
    const p = 0.45;
    return atEdge(t2) ? t2 : t2 < 0.5 ? 0.5 * elasticIn(t2 * 2, s, p) : 0.5 + 0.5 * elasticOut(t2 * 2 - 1, s, p);
  },
  easeInBack(t2) {
    const s = 1.70158;
    return t2 * t2 * ((s + 1) * t2 - s);
  },
  easeOutBack(t2) {
    const s = 1.70158;
    return (t2 -= 1) * t2 * ((s + 1) * t2 + s) + 1;
  },
  easeInOutBack(t2) {
    let s = 1.70158;
    if ((t2 /= 0.5) < 1) {
      return 0.5 * (t2 * t2 * (((s *= 1.525) + 1) * t2 - s));
    }
    return 0.5 * ((t2 -= 2) * t2 * (((s *= 1.525) + 1) * t2 + s) + 2);
  },
  easeInBounce: (t2) => 1 - effects.easeOutBounce(1 - t2),
  easeOutBounce(t2) {
    const m = 7.5625;
    const d = 2.75;
    if (t2 < 1 / d) {
      return m * t2 * t2;
    }
    if (t2 < 2 / d) {
      return m * (t2 -= 1.5 / d) * t2 + 0.75;
    }
    if (t2 < 2.5 / d) {
      return m * (t2 -= 2.25 / d) * t2 + 0.9375;
    }
    return m * (t2 -= 2.625 / d) * t2 + 0.984375;
  },
  easeInOutBounce: (t2) => t2 < 0.5 ? effects.easeInBounce(t2 * 2) * 0.5 : effects.easeOutBounce(t2 * 2 - 1) * 0.5 + 0.5
};
function isPatternOrGradient(value) {
  if (value && typeof value === "object") {
    const type = value.toString();
    return type === "[object CanvasPattern]" || type === "[object CanvasGradient]";
  }
  return false;
}
function color(value) {
  return isPatternOrGradient(value) ? value : new Color(value);
}
function getHoverColor(value) {
  return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();
}
var numbers = [
  "x",
  "y",
  "borderWidth",
  "radius",
  "tension"
];
var colors = [
  "color",
  "borderColor",
  "backgroundColor"
];
function applyAnimationsDefaults(defaults3) {
  defaults3.set("animation", {
    delay: void 0,
    duration: 1e3,
    easing: "easeOutQuart",
    fn: void 0,
    from: void 0,
    loop: void 0,
    to: void 0,
    type: void 0
  });
  defaults3.describe("animation", {
    _fallback: false,
    _indexable: false,
    _scriptable: (name) => name !== "onProgress" && name !== "onComplete" && name !== "fn"
  });
  defaults3.set("animations", {
    colors: {
      type: "color",
      properties: colors
    },
    numbers: {
      type: "number",
      properties: numbers
    }
  });
  defaults3.describe("animations", {
    _fallback: "animation"
  });
  defaults3.set("transitions", {
    active: {
      animation: {
        duration: 400
      }
    },
    resize: {
      animation: {
        duration: 0
      }
    },
    show: {
      animations: {
        colors: {
          from: "transparent"
        },
        visible: {
          type: "boolean",
          duration: 0
        }
      }
    },
    hide: {
      animations: {
        colors: {
          to: "transparent"
        },
        visible: {
          type: "boolean",
          easing: "linear",
          fn: (v) => v | 0
        }
      }
    }
  });
}
function applyLayoutsDefaults(defaults3) {
  defaults3.set("layout", {
    autoPadding: true,
    padding: {
      top: 0,
      right: 0,
      bottom: 0,
      left: 0
    }
  });
}
var intlCache = /* @__PURE__ */ new Map();
function getNumberFormat(locale2, options2) {
  options2 = options2 || {};
  const cacheKey = locale2 + JSON.stringify(options2);
  let formatter = intlCache.get(cacheKey);
  if (!formatter) {
    formatter = new Intl.NumberFormat(locale2, options2);
    intlCache.set(cacheKey, formatter);
  }
  return formatter;
}
function formatNumber(num, locale2, options2) {
  return getNumberFormat(locale2, options2).format(num);
}
var formatters = {
  values(value) {
    return isArray(value) ? value : "" + value;
  },
  numeric(tickValue, index, ticks) {
    if (tickValue === 0) {
      return "0";
    }
    const locale2 = this.chart.options.locale;
    let notation;
    let delta = tickValue;
    if (ticks.length > 1) {
      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));
      if (maxTick < 1e-4 || maxTick > 1e15) {
        notation = "scientific";
      }
      delta = calculateDelta(tickValue, ticks);
    }
    const logDelta = log10(Math.abs(delta));
    const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);
    const options2 = {
      notation,
      minimumFractionDigits: numDecimal,
      maximumFractionDigits: numDecimal
    };
    Object.assign(options2, this.options.ticks.format);
    return formatNumber(tickValue, locale2, options2);
  },
  logarithmic(tickValue, index, ticks) {
    if (tickValue === 0) {
      return "0";
    }
    const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));
    if ([
      1,
      2,
      3,
      5,
      10,
      15
    ].includes(remain) || index > 0.8 * ticks.length) {
      return formatters.numeric.call(this, tickValue, index, ticks);
    }
    return "";
  }
};
function calculateDelta(tickValue, ticks) {
  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;
  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {
    delta = tickValue - Math.floor(tickValue);
  }
  return delta;
}
var Ticks = {
  formatters
};
function applyScaleDefaults(defaults3) {
  defaults3.set("scale", {
    display: true,
    offset: false,
    reverse: false,
    beginAtZero: false,
    bounds: "ticks",
    clip: true,
    grace: 0,
    grid: {
      display: true,
      lineWidth: 1,
      drawOnChartArea: true,
      drawTicks: true,
      tickLength: 8,
      tickWidth: (_ctx, options2) => options2.lineWidth,
      tickColor: (_ctx, options2) => options2.color,
      offset: false
    },
    border: {
      display: true,
      dash: [],
      dashOffset: 0,
      width: 1
    },
    title: {
      display: false,
      text: "",
      padding: {
        top: 4,
        bottom: 4
      }
    },
    ticks: {
      minRotation: 0,
      maxRotation: 50,
      mirror: false,
      textStrokeWidth: 0,
      textStrokeColor: "",
      padding: 3,
      display: true,
      autoSkip: true,
      autoSkipPadding: 3,
      labelOffset: 0,
      callback: Ticks.formatters.values,
      minor: {},
      major: {},
      align: "center",
      crossAlign: "near",
      showLabelBackdrop: false,
      backdropColor: "rgba(255, 255, 255, 0.75)",
      backdropPadding: 2
    }
  });
  defaults3.route("scale.ticks", "color", "", "color");
  defaults3.route("scale.grid", "color", "", "borderColor");
  defaults3.route("scale.border", "color", "", "borderColor");
  defaults3.route("scale.title", "color", "", "color");
  defaults3.describe("scale", {
    _fallback: false,
    _scriptable: (name) => !name.startsWith("before") && !name.startsWith("after") && name !== "callback" && name !== "parser",
    _indexable: (name) => name !== "borderDash" && name !== "tickBorderDash" && name !== "dash"
  });
  defaults3.describe("scales", {
    _fallback: "scale"
  });
  defaults3.describe("scale.ticks", {
    _scriptable: (name) => name !== "backdropPadding" && name !== "callback",
    _indexable: (name) => name !== "backdropPadding"
  });
}
var overrides = /* @__PURE__ */ Object.create(null);
var descriptors = /* @__PURE__ */ Object.create(null);
function getScope$1(node, key) {
  if (!key) {
    return node;
  }
  const keys = key.split(".");
  for (let i = 0, n = keys.length; i < n; ++i) {
    const k = keys[i];
    node = node[k] || (node[k] = /* @__PURE__ */ Object.create(null));
  }
  return node;
}
function set(root, scope, values) {
  if (typeof scope === "string") {
    return merge(getScope$1(root, scope), values);
  }
  return merge(getScope$1(root, ""), scope);
}
var Defaults2 = class {
  constructor(_descriptors2, _appliers) {
    this.animation = void 0;
    this.backgroundColor = "rgba(0,0,0,0.1)";
    this.borderColor = "rgba(0,0,0,0.1)";
    this.color = "#666";
    this.datasets = {};
    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();
    this.elements = {};
    this.events = [
      "mousemove",
      "mouseout",
      "click",
      "touchstart",
      "touchmove"
    ];
    this.font = {
      family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
      size: 12,
      style: "normal",
      lineHeight: 1.2,
      weight: null
    };
    this.hover = {};
    this.hoverBackgroundColor = (ctx, options2) => getHoverColor(options2.backgroundColor);
    this.hoverBorderColor = (ctx, options2) => getHoverColor(options2.borderColor);
    this.hoverColor = (ctx, options2) => getHoverColor(options2.color);
    this.indexAxis = "x";
    this.interaction = {
      mode: "nearest",
      intersect: true,
      includeInvisible: false
    };
    this.maintainAspectRatio = true;
    this.onHover = null;
    this.onClick = null;
    this.parsing = true;
    this.plugins = {};
    this.responsive = true;
    this.scale = void 0;
    this.scales = {};
    this.showLine = true;
    this.drawActiveElementsOnTop = true;
    this.describe(_descriptors2);
    this.apply(_appliers);
  }
  set(scope, values) {
    return set(this, scope, values);
  }
  get(scope) {
    return getScope$1(this, scope);
  }
  describe(scope, values) {
    return set(descriptors, scope, values);
  }
  override(scope, values) {
    return set(overrides, scope, values);
  }
  route(scope, name, targetScope, targetName) {
    const scopeObject = getScope$1(this, scope);
    const targetScopeObject = getScope$1(this, targetScope);
    const privateName = "_" + name;
    Object.defineProperties(scopeObject, {
      [privateName]: {
        value: scopeObject[name],
        writable: true
      },
      [name]: {
        enumerable: true,
        get() {
          const local = this[privateName];
          const target = targetScopeObject[targetName];
          if (isObject(local)) {
            return Object.assign({}, target, local);
          }
          return valueOrDefault(local, target);
        },
        set(value) {
          this[privateName] = value;
        }
      }
    });
  }
  apply(appliers) {
    appliers.forEach((apply) => apply(this));
  }
};
var defaults2 = /* @__PURE__ */ new Defaults2({
  _scriptable: (name) => !name.startsWith("on"),
  _indexable: (name) => name !== "events",
  hover: {
    _fallback: "interaction"
  },
  interaction: {
    _scriptable: false,
    _indexable: false
  }
}, [
  applyAnimationsDefaults,
  applyLayoutsDefaults,
  applyScaleDefaults
]);
function toFontString(font) {
  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {
    return null;
  }
  return (font.style ? font.style + " " : "") + (font.weight ? font.weight + " " : "") + font.size + "px " + font.family;
}
function _measureText(ctx, data, gc, longest, string) {
  let textWidth = data[string];
  if (!textWidth) {
    textWidth = data[string] = ctx.measureText(string).width;
    gc.push(string);
  }
  if (textWidth > longest) {
    longest = textWidth;
  }
  return longest;
}
function _longestText(ctx, font, arrayOfThings, cache) {
  cache = cache || {};
  let data = cache.data = cache.data || {};
  let gc = cache.garbageCollect = cache.garbageCollect || [];
  if (cache.font !== font) {
    data = cache.data = {};
    gc = cache.garbageCollect = [];
    cache.font = font;
  }
  ctx.save();
  ctx.font = font;
  let longest = 0;
  const ilen = arrayOfThings.length;
  let i, j, jlen, thing, nestedThing;
  for (i = 0; i < ilen; i++) {
    thing = arrayOfThings[i];
    if (thing !== void 0 && thing !== null && !isArray(thing)) {
      longest = _measureText(ctx, data, gc, longest, thing);
    } else if (isArray(thing)) {
      for (j = 0, jlen = thing.length; j < jlen; j++) {
        nestedThing = thing[j];
        if (nestedThing !== void 0 && nestedThing !== null && !isArray(nestedThing)) {
          longest = _measureText(ctx, data, gc, longest, nestedThing);
        }
      }
    }
  }
  ctx.restore();
  const gcLen = gc.length / 2;
  if (gcLen > arrayOfThings.length) {
    for (i = 0; i < gcLen; i++) {
      delete data[gc[i]];
    }
    gc.splice(0, gcLen);
  }
  return longest;
}
function _alignPixel(chart, pixel, width) {
  const devicePixelRatio = chart.currentDevicePixelRatio;
  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;
  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;
}
function clearCanvas(canvas, ctx) {
  if (!ctx && !canvas) {
    return;
  }
  ctx = ctx || canvas.getContext("2d");
  ctx.save();
  ctx.resetTransform();
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.restore();
}
function drawPoint(ctx, options2, x, y) {
  drawPointLegend(ctx, options2, x, y, null);
}
function drawPointLegend(ctx, options2, x, y, w) {
  let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;
  const style = options2.pointStyle;
  const rotation = options2.rotation;
  const radius = options2.radius;
  let rad = (rotation || 0) * RAD_PER_DEG;
  if (style && typeof style === "object") {
    type = style.toString();
    if (type === "[object HTMLImageElement]" || type === "[object HTMLCanvasElement]") {
      ctx.save();
      ctx.translate(x, y);
      ctx.rotate(rad);
      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);
      ctx.restore();
      return;
    }
  }
  if (isNaN(radius) || radius <= 0) {
    return;
  }
  ctx.beginPath();
  switch (style) {
    // Default includes circle
    default:
      if (w) {
        ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);
      } else {
        ctx.arc(x, y, radius, 0, TAU);
      }
      ctx.closePath();
      break;
    case "triangle":
      width = w ? w / 2 : radius;
      ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
      rad += TWO_THIRDS_PI;
      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
      rad += TWO_THIRDS_PI;
      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
      ctx.closePath();
      break;
    case "rectRounded":
      cornerRadius = radius * 0.516;
      size = radius - cornerRadius;
      xOffset = Math.cos(rad + QUARTER_PI) * size;
      xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);
      yOffset = Math.sin(rad + QUARTER_PI) * size;
      yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);
      ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);
      ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);
      ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);
      ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);
      ctx.closePath();
      break;
    case "rect":
      if (!rotation) {
        size = Math.SQRT1_2 * radius;
        width = w ? w / 2 : size;
        ctx.rect(x - width, y - size, 2 * width, 2 * size);
        break;
      }
      rad += QUARTER_PI;
    /* falls through */
    case "rectRot":
      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
      xOffset = Math.cos(rad) * radius;
      yOffset = Math.sin(rad) * radius;
      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
      ctx.moveTo(x - xOffsetW, y - yOffset);
      ctx.lineTo(x + yOffsetW, y - xOffset);
      ctx.lineTo(x + xOffsetW, y + yOffset);
      ctx.lineTo(x - yOffsetW, y + xOffset);
      ctx.closePath();
      break;
    case "crossRot":
      rad += QUARTER_PI;
    /* falls through */
    case "cross":
      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
      xOffset = Math.cos(rad) * radius;
      yOffset = Math.sin(rad) * radius;
      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
      ctx.moveTo(x - xOffsetW, y - yOffset);
      ctx.lineTo(x + xOffsetW, y + yOffset);
      ctx.moveTo(x + yOffsetW, y - xOffset);
      ctx.lineTo(x - yOffsetW, y + xOffset);
      break;
    case "star":
      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
      xOffset = Math.cos(rad) * radius;
      yOffset = Math.sin(rad) * radius;
      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
      ctx.moveTo(x - xOffsetW, y - yOffset);
      ctx.lineTo(x + xOffsetW, y + yOffset);
      ctx.moveTo(x + yOffsetW, y - xOffset);
      ctx.lineTo(x - yOffsetW, y + xOffset);
      rad += QUARTER_PI;
      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
      xOffset = Math.cos(rad) * radius;
      yOffset = Math.sin(rad) * radius;
      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
      ctx.moveTo(x - xOffsetW, y - yOffset);
      ctx.lineTo(x + xOffsetW, y + yOffset);
      ctx.moveTo(x + yOffsetW, y - xOffset);
      ctx.lineTo(x - yOffsetW, y + xOffset);
      break;
    case "line":
      xOffset = w ? w / 2 : Math.cos(rad) * radius;
      yOffset = Math.sin(rad) * radius;
      ctx.moveTo(x - xOffset, y - yOffset);
      ctx.lineTo(x + xOffset, y + yOffset);
      break;
    case "dash":
      ctx.moveTo(x, y);
      ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);
      break;
    case false:
      ctx.closePath();
      break;
  }
  ctx.fill();
  if (options2.borderWidth > 0) {
    ctx.stroke();
  }
}
function _isPointInArea(point, area, margin) {
  margin = margin || 0.5;
  return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;
}
function clipArea(ctx, area) {
  ctx.save();
  ctx.beginPath();
  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);
  ctx.clip();
}
function unclipArea(ctx) {
  ctx.restore();
}
function setRenderOpts(ctx, opts) {
  if (opts.translation) {
    ctx.translate(opts.translation[0], opts.translation[1]);
  }
  if (!isNullOrUndef(opts.rotation)) {
    ctx.rotate(opts.rotation);
  }
  if (opts.color) {
    ctx.fillStyle = opts.color;
  }
  if (opts.textAlign) {
    ctx.textAlign = opts.textAlign;
  }
  if (opts.textBaseline) {
    ctx.textBaseline = opts.textBaseline;
  }
}
function decorateText(ctx, x, y, line, opts) {
  if (opts.strikethrough || opts.underline) {
    const metrics = ctx.measureText(line);
    const left = x - metrics.actualBoundingBoxLeft;
    const right = x + metrics.actualBoundingBoxRight;
    const top = y - metrics.actualBoundingBoxAscent;
    const bottom = y + metrics.actualBoundingBoxDescent;
    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;
    ctx.strokeStyle = ctx.fillStyle;
    ctx.beginPath();
    ctx.lineWidth = opts.decorationWidth || 2;
    ctx.moveTo(left, yDecoration);
    ctx.lineTo(right, yDecoration);
    ctx.stroke();
  }
}
function drawBackdrop(ctx, opts) {
  const oldColor = ctx.fillStyle;
  ctx.fillStyle = opts.color;
  ctx.fillRect(opts.left, opts.top, opts.width, opts.height);
  ctx.fillStyle = oldColor;
}
function renderText(ctx, text, x, y, font, opts = {}) {
  const lines = isArray(text) ? text : [
    text
  ];
  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== "";
  let i, line;
  ctx.save();
  ctx.font = font.string;
  setRenderOpts(ctx, opts);
  for (i = 0; i < lines.length; ++i) {
    line = lines[i];
    if (opts.backdrop) {
      drawBackdrop(ctx, opts.backdrop);
    }
    if (stroke) {
      if (opts.strokeColor) {
        ctx.strokeStyle = opts.strokeColor;
      }
      if (!isNullOrUndef(opts.strokeWidth)) {
        ctx.lineWidth = opts.strokeWidth;
      }
      ctx.strokeText(line, x, y, opts.maxWidth);
    }
    ctx.fillText(line, x, y, opts.maxWidth);
    decorateText(ctx, x, y, line, opts);
    y += Number(font.lineHeight);
  }
  ctx.restore();
}
function addRoundedRectPath(ctx, rect) {
  const { x, y, w, h: h4, radius } = rect;
  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);
  ctx.lineTo(x, y + h4 - radius.bottomLeft);
  ctx.arc(x + radius.bottomLeft, y + h4 - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);
  ctx.lineTo(x + w - radius.bottomRight, y + h4);
  ctx.arc(x + w - radius.bottomRight, y + h4 - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);
  ctx.lineTo(x + w, y + radius.topRight);
  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);
  ctx.lineTo(x + radius.topLeft, y);
}
var LINE_HEIGHT = /^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/;
var FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;
function toLineHeight(value, size) {
  const matches = ("" + value).match(LINE_HEIGHT);
  if (!matches || matches[1] === "normal") {
    return size * 1.2;
  }
  value = +matches[2];
  switch (matches[3]) {
    case "px":
      return value;
    case "%":
      value /= 100;
      break;
  }
  return size * value;
}
var numberOrZero = (v) => +v || 0;
function _readValueToProps(value, props) {
  const ret = {};
  const objProps = isObject(props);
  const keys = objProps ? Object.keys(props) : props;
  const read = isObject(value) ? objProps ? (prop) => valueOrDefault(value[prop], value[props[prop]]) : (prop) => value[prop] : () => value;
  for (const prop of keys) {
    ret[prop] = numberOrZero(read(prop));
  }
  return ret;
}
function toTRBL(value) {
  return _readValueToProps(value, {
    top: "y",
    right: "x",
    bottom: "y",
    left: "x"
  });
}
function toTRBLCorners(value) {
  return _readValueToProps(value, [
    "topLeft",
    "topRight",
    "bottomLeft",
    "bottomRight"
  ]);
}
function toPadding(value) {
  const obj = toTRBL(value);
  obj.width = obj.left + obj.right;
  obj.height = obj.top + obj.bottom;
  return obj;
}
function toFont(options2, fallback) {
  options2 = options2 || {};
  fallback = fallback || defaults2.font;
  let size = valueOrDefault(options2.size, fallback.size);
  if (typeof size === "string") {
    size = parseInt(size, 10);
  }
  let style = valueOrDefault(options2.style, fallback.style);
  if (style && !("" + style).match(FONT_STYLE)) {
    console.warn('Invalid font style specified: "' + style + '"');
    style = void 0;
  }
  const font = {
    family: valueOrDefault(options2.family, fallback.family),
    lineHeight: toLineHeight(valueOrDefault(options2.lineHeight, fallback.lineHeight), size),
    size,
    style,
    weight: valueOrDefault(options2.weight, fallback.weight),
    string: ""
  };
  font.string = toFontString(font);
  return font;
}
function resolve(inputs, context, index, info) {
  let cacheable = true;
  let i, ilen, value;
  for (i = 0, ilen = inputs.length; i < ilen; ++i) {
    value = inputs[i];
    if (value === void 0) {
      continue;
    }
    if (context !== void 0 && typeof value === "function") {
      value = value(context);
      cacheable = false;
    }
    if (index !== void 0 && isArray(value)) {
      value = value[index % value.length];
      cacheable = false;
    }
    if (value !== void 0) {
      if (info && !cacheable) {
        info.cacheable = false;
      }
      return value;
    }
  }
}
function _addGrace(minmax, grace, beginAtZero) {
  const { min, max } = minmax;
  const change = toDimension(grace, (max - min) / 2);
  const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;
  return {
    min: keepZero(min, -Math.abs(change)),
    max: keepZero(max, change)
  };
}
function createContext(parentContext, context) {
  return Object.assign(Object.create(parentContext), context);
}
function _createResolver(scopes, prefixes = [
  ""
], rootScopes, fallback, getTarget = () => scopes[0]) {
  const finalRootScopes = rootScopes || scopes;
  if (typeof fallback === "undefined") {
    fallback = _resolve("_fallback", scopes);
  }
  const cache = {
    [Symbol.toStringTag]: "Object",
    _cacheable: true,
    _scopes: scopes,
    _rootScopes: finalRootScopes,
    _fallback: fallback,
    _getTarget: getTarget,
    override: (scope) => _createResolver([
      scope,
      ...scopes
    ], prefixes, finalRootScopes, fallback)
  };
  return new Proxy(cache, {
    /**
    * A trap for the delete operator.
    */
    deleteProperty(target, prop) {
      delete target[prop];
      delete target._keys;
      delete scopes[0][prop];
      return true;
    },
    /**
    * A trap for getting property values.
    */
    get(target, prop) {
      return _cached(target, prop, () => _resolveWithPrefixes(prop, prefixes, scopes, target));
    },
    /**
    * A trap for Object.getOwnPropertyDescriptor.
    * Also used by Object.hasOwnProperty.
    */
    getOwnPropertyDescriptor(target, prop) {
      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);
    },
    /**
    * A trap for Object.getPrototypeOf.
    */
    getPrototypeOf() {
      return Reflect.getPrototypeOf(scopes[0]);
    },
    /**
    * A trap for the in operator.
    */
    has(target, prop) {
      return getKeysFromAllScopes(target).includes(prop);
    },
    /**
    * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
    */
    ownKeys(target) {
      return getKeysFromAllScopes(target);
    },
    /**
    * A trap for setting property values.
    */
    set(target, prop, value) {
      const storage = target._storage || (target._storage = getTarget());
      target[prop] = storage[prop] = value;
      delete target._keys;
      return true;
    }
  });
}
function _attachContext(proxy, context, subProxy, descriptorDefaults) {
  const cache = {
    _cacheable: false,
    _proxy: proxy,
    _context: context,
    _subProxy: subProxy,
    _stack: /* @__PURE__ */ new Set(),
    _descriptors: _descriptors(proxy, descriptorDefaults),
    setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),
    override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)
  };
  return new Proxy(cache, {
    /**
    * A trap for the delete operator.
    */
    deleteProperty(target, prop) {
      delete target[prop];
      delete proxy[prop];
      return true;
    },
    /**
    * A trap for getting property values.
    */
    get(target, prop, receiver) {
      return _cached(target, prop, () => _resolveWithContext(target, prop, receiver));
    },
    /**
    * A trap for Object.getOwnPropertyDescriptor.
    * Also used by Object.hasOwnProperty.
    */
    getOwnPropertyDescriptor(target, prop) {
      return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {
        enumerable: true,
        configurable: true
      } : void 0 : Reflect.getOwnPropertyDescriptor(proxy, prop);
    },
    /**
    * A trap for Object.getPrototypeOf.
    */
    getPrototypeOf() {
      return Reflect.getPrototypeOf(proxy);
    },
    /**
    * A trap for the in operator.
    */
    has(target, prop) {
      return Reflect.has(proxy, prop);
    },
    /**
    * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
    */
    ownKeys() {
      return Reflect.ownKeys(proxy);
    },
    /**
    * A trap for setting property values.
    */
    set(target, prop, value) {
      proxy[prop] = value;
      delete target[prop];
      return true;
    }
  });
}
function _descriptors(proxy, defaults3 = {
  scriptable: true,
  indexable: true
}) {
  const { _scriptable = defaults3.scriptable, _indexable = defaults3.indexable, _allKeys = defaults3.allKeys } = proxy;
  return {
    allKeys: _allKeys,
    scriptable: _scriptable,
    indexable: _indexable,
    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,
    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable
  };
}
var readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;
var needsSubResolver = (prop, value) => isObject(value) && prop !== "adapters" && (Object.getPrototypeOf(value) === null || value.constructor === Object);
function _cached(target, prop, resolve2) {
  if (Object.prototype.hasOwnProperty.call(target, prop) || prop === "constructor") {
    return target[prop];
  }
  const value = resolve2();
  target[prop] = value;
  return value;
}
function _resolveWithContext(target, prop, receiver) {
  const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target;
  let value = _proxy[prop];
  if (isFunction(value) && descriptors2.isScriptable(prop)) {
    value = _resolveScriptable(prop, value, target, receiver);
  }
  if (isArray(value) && value.length) {
    value = _resolveArray(prop, value, target, descriptors2.isIndexable);
  }
  if (needsSubResolver(prop, value)) {
    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors2);
  }
  return value;
}
function _resolveScriptable(prop, getValue, target, receiver) {
  const { _proxy, _context, _subProxy, _stack } = target;
  if (_stack.has(prop)) {
    throw new Error("Recursion detected: " + Array.from(_stack).join("->") + "->" + prop);
  }
  _stack.add(prop);
  let value = getValue(_context, _subProxy || receiver);
  _stack.delete(prop);
  if (needsSubResolver(prop, value)) {
    value = createSubResolver(_proxy._scopes, _proxy, prop, value);
  }
  return value;
}
function _resolveArray(prop, value, target, isIndexable) {
  const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target;
  if (typeof _context.index !== "undefined" && isIndexable(prop)) {
    return value[_context.index % value.length];
  } else if (isObject(value[0])) {
    const arr = value;
    const scopes = _proxy._scopes.filter((s) => s !== arr);
    value = [];
    for (const item of arr) {
      const resolver = createSubResolver(scopes, _proxy, prop, item);
      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors2));
    }
  }
  return value;
}
function resolveFallback(fallback, prop, value) {
  return isFunction(fallback) ? fallback(prop, value) : fallback;
}
var getScope = (key, parent) => key === true ? parent : typeof key === "string" ? resolveObjectKey(parent, key) : void 0;
function addScopes(set2, parentScopes, key, parentFallback, value) {
  for (const parent of parentScopes) {
    const scope = getScope(key, parent);
    if (scope) {
      set2.add(scope);
      const fallback = resolveFallback(scope._fallback, key, value);
      if (typeof fallback !== "undefined" && fallback !== key && fallback !== parentFallback) {
        return fallback;
      }
    } else if (scope === false && typeof parentFallback !== "undefined" && key !== parentFallback) {
      return null;
    }
  }
  return false;
}
function createSubResolver(parentScopes, resolver, prop, value) {
  const rootScopes = resolver._rootScopes;
  const fallback = resolveFallback(resolver._fallback, prop, value);
  const allScopes = [
    ...parentScopes,
    ...rootScopes
  ];
  const set2 = /* @__PURE__ */ new Set();
  set2.add(value);
  let key = addScopesFromKey(set2, allScopes, prop, fallback || prop, value);
  if (key === null) {
    return false;
  }
  if (typeof fallback !== "undefined" && fallback !== prop) {
    key = addScopesFromKey(set2, allScopes, fallback, key, value);
    if (key === null) {
      return false;
    }
  }
  return _createResolver(Array.from(set2), [
    ""
  ], rootScopes, fallback, () => subGetTarget(resolver, prop, value));
}
function addScopesFromKey(set2, allScopes, key, fallback, item) {
  while (key) {
    key = addScopes(set2, allScopes, key, fallback, item);
  }
  return key;
}
function subGetTarget(resolver, prop, value) {
  const parent = resolver._getTarget();
  if (!(prop in parent)) {
    parent[prop] = {};
  }
  const target = parent[prop];
  if (isArray(target) && isObject(value)) {
    return value;
  }
  return target || {};
}
function _resolveWithPrefixes(prop, prefixes, scopes, proxy) {
  let value;
  for (const prefix of prefixes) {
    value = _resolve(readKey(prefix, prop), scopes);
    if (typeof value !== "undefined") {
      return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;
    }
  }
}
function _resolve(key, scopes) {
  for (const scope of scopes) {
    if (!scope) {
      continue;
    }
    const value = scope[key];
    if (typeof value !== "undefined") {
      return value;
    }
  }
}
function getKeysFromAllScopes(target) {
  let keys = target._keys;
  if (!keys) {
    keys = target._keys = resolveKeysFromAllScopes(target._scopes);
  }
  return keys;
}
function resolveKeysFromAllScopes(scopes) {
  const set2 = /* @__PURE__ */ new Set();
  for (const scope of scopes) {
    for (const key of Object.keys(scope).filter((k) => !k.startsWith("_"))) {
      set2.add(key);
    }
  }
  return Array.from(set2);
}
var EPSILON = Number.EPSILON || 1e-14;
function _isDomSupported() {
  return typeof window !== "undefined" && typeof document !== "undefined";
}
function _getParentNode(domNode) {
  let parent = domNode.parentNode;
  if (parent && parent.toString() === "[object ShadowRoot]") {
    parent = parent.host;
  }
  return parent;
}
function parseMaxStyle(styleValue, node, parentProperty) {
  let valueInPixels;
  if (typeof styleValue === "string") {
    valueInPixels = parseInt(styleValue, 10);
    if (styleValue.indexOf("%") !== -1) {
      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];
    }
  } else {
    valueInPixels = styleValue;
  }
  return valueInPixels;
}
var getComputedStyle2 = (element) => element.ownerDocument.defaultView.getComputedStyle(element, null);
function getStyle(el, property) {
  return getComputedStyle2(el).getPropertyValue(property);
}
var positions = [
  "top",
  "right",
  "bottom",
  "left"
];
function getPositionedStyle(styles, style, suffix) {
  const result = {};
  suffix = suffix ? "-" + suffix : "";
  for (let i = 0; i < 4; i++) {
    const pos = positions[i];
    result[pos] = parseFloat(styles[style + "-" + pos + suffix]) || 0;
  }
  result.width = result.left + result.right;
  result.height = result.top + result.bottom;
  return result;
}
var useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);
function getCanvasPosition(e, canvas) {
  const touches = e.touches;
  const source = touches && touches.length ? touches[0] : e;
  const { offsetX, offsetY } = source;
  let box = false;
  let x, y;
  if (useOffsetPos(offsetX, offsetY, e.target)) {
    x = offsetX;
    y = offsetY;
  } else {
    const rect = canvas.getBoundingClientRect();
    x = source.clientX - rect.left;
    y = source.clientY - rect.top;
    box = true;
  }
  return {
    x,
    y,
    box
  };
}
function getRelativePosition(event, chart) {
  if ("native" in event) {
    return event;
  }
  const { canvas, currentDevicePixelRatio } = chart;
  const style = getComputedStyle2(canvas);
  const borderBox = style.boxSizing === "border-box";
  const paddings = getPositionedStyle(style, "padding");
  const borders = getPositionedStyle(style, "border", "width");
  const { x, y, box } = getCanvasPosition(event, canvas);
  const xOffset = paddings.left + (box && borders.left);
  const yOffset = paddings.top + (box && borders.top);
  let { width, height } = chart;
  if (borderBox) {
    width -= paddings.width + borders.width;
    height -= paddings.height + borders.height;
  }
  return {
    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),
    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)
  };
}
function getContainerSize(canvas, width, height) {
  let maxWidth, maxHeight;
  if (width === void 0 || height === void 0) {
    const container = canvas && _getParentNode(canvas);
    if (!container) {
      width = canvas.clientWidth;
      height = canvas.clientHeight;
    } else {
      const rect = container.getBoundingClientRect();
      const containerStyle = getComputedStyle2(container);
      const containerBorder = getPositionedStyle(containerStyle, "border", "width");
      const containerPadding = getPositionedStyle(containerStyle, "padding");
      width = rect.width - containerPadding.width - containerBorder.width;
      height = rect.height - containerPadding.height - containerBorder.height;
      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, "clientWidth");
      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, "clientHeight");
    }
  }
  return {
    width,
    height,
    maxWidth: maxWidth || INFINITY,
    maxHeight: maxHeight || INFINITY
  };
}
var round1 = (v) => Math.round(v * 10) / 10;
function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {
  const style = getComputedStyle2(canvas);
  const margins = getPositionedStyle(style, "margin");
  const maxWidth = parseMaxStyle(style.maxWidth, canvas, "clientWidth") || INFINITY;
  const maxHeight = parseMaxStyle(style.maxHeight, canvas, "clientHeight") || INFINITY;
  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);
  let { width, height } = containerSize;
  if (style.boxSizing === "content-box") {
    const borders = getPositionedStyle(style, "border", "width");
    const paddings = getPositionedStyle(style, "padding");
    width -= paddings.width + borders.width;
    height -= paddings.height + borders.height;
  }
  width = Math.max(0, width - margins.width);
  height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);
  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));
  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));
  if (width && !height) {
    height = round1(width / 2);
  }
  const maintainHeight = bbWidth !== void 0 || bbHeight !== void 0;
  if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {
    height = containerSize.height;
    width = round1(Math.floor(height * aspectRatio));
  }
  return {
    width,
    height
  };
}
function retinaScale(chart, forceRatio, forceStyle) {
  const pixelRatio = forceRatio || 1;
  const deviceHeight = Math.floor(chart.height * pixelRatio);
  const deviceWidth = Math.floor(chart.width * pixelRatio);
  chart.height = Math.floor(chart.height);
  chart.width = Math.floor(chart.width);
  const canvas = chart.canvas;
  if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {
    canvas.style.height = `${chart.height}px`;
    canvas.style.width = `${chart.width}px`;
  }
  if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {
    chart.currentDevicePixelRatio = pixelRatio;
    canvas.height = deviceHeight;
    canvas.width = deviceWidth;
    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
    return true;
  }
  return false;
}
var supportsEventListenerOptions = function() {
  let passiveSupported = false;
  try {
    const options2 = {
      get passive() {
        passiveSupported = true;
        return false;
      }
    };
    if (_isDomSupported()) {
      window.addEventListener("test", null, options2);
      window.removeEventListener("test", null, options2);
    }
  } catch (e) {
  }
  return passiveSupported;
}();
function readUsedSize(element, property) {
  const value = getStyle(element, property);
  const matches = value && value.match(/^(\d+)(\.\d+)?px$/);
  return matches ? +matches[1] : void 0;
}
var getRightToLeftAdapter = function(rectX, width) {
  return {
    x(x) {
      return rectX + rectX + width - x;
    },
    setWidth(w) {
      width = w;
    },
    textAlign(align) {
      if (align === "center") {
        return align;
      }
      return align === "right" ? "left" : "right";
    },
    xPlus(x, value) {
      return x - value;
    },
    leftForLtr(x, itemWidth) {
      return x - itemWidth;
    }
  };
};
var getLeftToRightAdapter = function() {
  return {
    x(x) {
      return x;
    },
    setWidth(w) {
    },
    textAlign(align) {
      return align;
    },
    xPlus(x, value) {
      return x + value;
    },
    leftForLtr(x, _itemWidth) {
      return x;
    }
  };
};
function getRtlAdapter(rtl, rectX, width) {
  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();
}
function overrideTextDirection(ctx, direction) {
  let style, original;
  if (direction === "ltr" || direction === "rtl") {
    style = ctx.canvas.style;
    original = [
      style.getPropertyValue("direction"),
      style.getPropertyPriority("direction")
    ];
    style.setProperty("direction", direction, "important");
    ctx.prevTextDirection = original;
  }
}
function restoreTextDirection(ctx, original) {
  if (original !== void 0) {
    delete ctx.prevTextDirection;
    ctx.canvas.style.setProperty("direction", original[0], original[1]);
  }
}

// node_modules/.pnpm/chart.js@4.4.4/node_modules/chart.js/dist/chart.js
var Animator = class {
  constructor() {
    this._request = null;
    this._charts = /* @__PURE__ */ new Map();
    this._running = false;
    this._lastDate = void 0;
  }
  _notify(chart, anims, date, type) {
    const callbacks = anims.listeners[type];
    const numSteps = anims.duration;
    callbacks.forEach((fn) => fn({
      chart,
      initial: anims.initial,
      numSteps,
      currentStep: Math.min(date - anims.start, numSteps)
    }));
  }
  _refresh() {
    if (this._request) {
      return;
    }
    this._running = true;
    this._request = requestAnimFrame.call(window, () => {
      this._update();
      this._request = null;
      if (this._running) {
        this._refresh();
      }
    });
  }
  _update(date = Date.now()) {
    let remaining = 0;
    this._charts.forEach((anims, chart) => {
      if (!anims.running || !anims.items.length) {
        return;
      }
      const items = anims.items;
      let i = items.length - 1;
      let draw = false;
      let item;
      for (; i >= 0; --i) {
        item = items[i];
        if (item._active) {
          if (item._total > anims.duration) {
            anims.duration = item._total;
          }
          item.tick(date);
          draw = true;
        } else {
          items[i] = items[items.length - 1];
          items.pop();
        }
      }
      if (draw) {
        chart.draw();
        this._notify(chart, anims, date, "progress");
      }
      if (!items.length) {
        anims.running = false;
        this._notify(chart, anims, date, "complete");
        anims.initial = false;
      }
      remaining += items.length;
    });
    this._lastDate = date;
    if (remaining === 0) {
      this._running = false;
    }
  }
  _getAnims(chart) {
    const charts = this._charts;
    let anims = charts.get(chart);
    if (!anims) {
      anims = {
        running: false,
        initial: true,
        items: [],
        listeners: {
          complete: [],
          progress: []
        }
      };
      charts.set(chart, anims);
    }
    return anims;
  }
  listen(chart, event, cb) {
    this._getAnims(chart).listeners[event].push(cb);
  }
  add(chart, items) {
    if (!items || !items.length) {
      return;
    }
    this._getAnims(chart).items.push(...items);
  }
  has(chart) {
    return this._getAnims(chart).items.length > 0;
  }
  start(chart) {
    const anims = this._charts.get(chart);
    if (!anims) {
      return;
    }
    anims.running = true;
    anims.start = Date.now();
    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);
    this._refresh();
  }
  running(chart) {
    if (!this._running) {
      return false;
    }
    const anims = this._charts.get(chart);
    if (!anims || !anims.running || !anims.items.length) {
      return false;
    }
    return true;
  }
  stop(chart) {
    const anims = this._charts.get(chart);
    if (!anims || !anims.items.length) {
      return;
    }
    const items = anims.items;
    let i = items.length - 1;
    for (; i >= 0; --i) {
      items[i].cancel();
    }
    anims.items = [];
    this._notify(chart, anims, Date.now(), "complete");
  }
  remove(chart) {
    return this._charts.delete(chart);
  }
};
var animator = /* @__PURE__ */ new Animator();
var transparent = "transparent";
var interpolators = {
  boolean(from2, to2, factor) {
    return factor > 0.5 ? to2 : from2;
  },
  color(from2, to2, factor) {
    const c0 = color(from2 || transparent);
    const c1 = c0.valid && color(to2 || transparent);
    return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to2;
  },
  number(from2, to2, factor) {
    return from2 + (to2 - from2) * factor;
  }
};
var Animation = class {
  constructor(cfg, target, prop, to2) {
    const currentValue = target[prop];
    to2 = resolve([
      cfg.to,
      to2,
      currentValue,
      cfg.from
    ]);
    const from2 = resolve([
      cfg.from,
      currentValue,
      to2
    ]);
    this._active = true;
    this._fn = cfg.fn || interpolators[cfg.type || typeof from2];
    this._easing = effects[cfg.easing] || effects.linear;
    this._start = Math.floor(Date.now() + (cfg.delay || 0));
    this._duration = this._total = Math.floor(cfg.duration);
    this._loop = !!cfg.loop;
    this._target = target;
    this._prop = prop;
    this._from = from2;
    this._to = to2;
    this._promises = void 0;
  }
  active() {
    return this._active;
  }
  update(cfg, to2, date) {
    if (this._active) {
      this._notify(false);
      const currentValue = this._target[this._prop];
      const elapsed = date - this._start;
      const remain = this._duration - elapsed;
      this._start = date;
      this._duration = Math.floor(Math.max(remain, cfg.duration));
      this._total += elapsed;
      this._loop = !!cfg.loop;
      this._to = resolve([
        cfg.to,
        to2,
        currentValue,
        cfg.from
      ]);
      this._from = resolve([
        cfg.from,
        currentValue,
        to2
      ]);
    }
  }
  cancel() {
    if (this._active) {
      this.tick(Date.now());
      this._active = false;
      this._notify(false);
    }
  }
  tick(date) {
    const elapsed = date - this._start;
    const duration = this._duration;
    const prop = this._prop;
    const from2 = this._from;
    const loop = this._loop;
    const to2 = this._to;
    let factor;
    this._active = from2 !== to2 && (loop || elapsed < duration);
    if (!this._active) {
      this._target[prop] = to2;
      this._notify(true);
      return;
    }
    if (elapsed < 0) {
      this._target[prop] = from2;
      return;
    }
    factor = elapsed / duration % 2;
    factor = loop && factor > 1 ? 2 - factor : factor;
    factor = this._easing(Math.min(1, Math.max(0, factor)));
    this._target[prop] = this._fn(from2, to2, factor);
  }
  wait() {
    const promises = this._promises || (this._promises = []);
    return new Promise((res, rej) => {
      promises.push({
        res,
        rej
      });
    });
  }
  _notify(resolved) {
    const method = resolved ? "res" : "rej";
    const promises = this._promises || [];
    for (let i = 0; i < promises.length; i++) {
      promises[i][method]();
    }
  }
};
var Animations = class {
  constructor(chart, config) {
    this._chart = chart;
    this._properties = /* @__PURE__ */ new Map();
    this.configure(config);
  }
  configure(config) {
    if (!isObject(config)) {
      return;
    }
    const animationOptions = Object.keys(defaults2.animation);
    const animatedProps = this._properties;
    Object.getOwnPropertyNames(config).forEach((key) => {
      const cfg = config[key];
      if (!isObject(cfg)) {
        return;
      }
      const resolved = {};
      for (const option of animationOptions) {
        resolved[option] = cfg[option];
      }
      (isArray(cfg.properties) && cfg.properties || [
        key
      ]).forEach((prop) => {
        if (prop === key || !animatedProps.has(prop)) {
          animatedProps.set(prop, resolved);
        }
      });
    });
  }
  _animateOptions(target, values) {
    const newOptions = values.options;
    const options2 = resolveTargetOptions(target, newOptions);
    if (!options2) {
      return [];
    }
    const animations = this._createAnimations(options2, newOptions);
    if (newOptions.$shared) {
      awaitAll(target.options.$animations, newOptions).then(() => {
        target.options = newOptions;
      }, () => {
      });
    }
    return animations;
  }
  _createAnimations(target, values) {
    const animatedProps = this._properties;
    const animations = [];
    const running = target.$animations || (target.$animations = {});
    const props = Object.keys(values);
    const date = Date.now();
    let i;
    for (i = props.length - 1; i >= 0; --i) {
      const prop = props[i];
      if (prop.charAt(0) === "$") {
        continue;
      }
      if (prop === "options") {
        animations.push(...this._animateOptions(target, values));
        continue;
      }
      const value = values[prop];
      let animation = running[prop];
      const cfg = animatedProps.get(prop);
      if (animation) {
        if (cfg && animation.active()) {
          animation.update(cfg, value, date);
          continue;
        } else {
          animation.cancel();
        }
      }
      if (!cfg || !cfg.duration) {
        target[prop] = value;
        continue;
      }
      running[prop] = animation = new Animation(cfg, target, prop, value);
      animations.push(animation);
    }
    return animations;
  }
  update(target, values) {
    if (this._properties.size === 0) {
      Object.assign(target, values);
      return;
    }
    const animations = this._createAnimations(target, values);
    if (animations.length) {
      animator.add(this._chart, animations);
      return true;
    }
  }
};
function awaitAll(animations, properties) {
  const running = [];
  const keys = Object.keys(properties);
  for (let i = 0; i < keys.length; i++) {
    const anim = animations[keys[i]];
    if (anim && anim.active()) {
      running.push(anim.wait());
    }
  }
  return Promise.all(running);
}
function resolveTargetOptions(target, newOptions) {
  if (!newOptions) {
    return;
  }
  let options2 = target.options;
  if (!options2) {
    target.options = newOptions;
    return;
  }
  if (options2.$shared) {
    target.options = options2 = Object.assign({}, options2, {
      $shared: false,
      $animations: {}
    });
  }
  return options2;
}
function scaleClip(scale, allowedOverflow) {
  const opts = scale && scale.options || {};
  const reverse = opts.reverse;
  const min = opts.min === void 0 ? allowedOverflow : 0;
  const max = opts.max === void 0 ? allowedOverflow : 0;
  return {
    start: reverse ? max : min,
    end: reverse ? min : max
  };
}
function defaultClip(xScale, yScale, allowedOverflow) {
  if (allowedOverflow === false) {
    return false;
  }
  const x = scaleClip(xScale, allowedOverflow);
  const y = scaleClip(yScale, allowedOverflow);
  return {
    top: y.end,
    right: x.end,
    bottom: y.start,
    left: x.start
  };
}
function toClip(value) {
  let t2, r, b, l;
  if (isObject(value)) {
    t2 = value.top;
    r = value.right;
    b = value.bottom;
    l = value.left;
  } else {
    t2 = r = b = l = value;
  }
  return {
    top: t2,
    right: r,
    bottom: b,
    left: l,
    disabled: value === false
  };
}
function getSortedDatasetIndices(chart, filterVisible) {
  const keys = [];
  const metasets = chart._getSortedDatasetMetas(filterVisible);
  let i, ilen;
  for (i = 0, ilen = metasets.length; i < ilen; ++i) {
    keys.push(metasets[i].index);
  }
  return keys;
}
function applyStack(stack2, value, dsIndex, options2 = {}) {
  const keys = stack2.keys;
  const singleMode = options2.mode === "single";
  let i, ilen, datasetIndex, otherValue;
  if (value === null) {
    return;
  }
  for (i = 0, ilen = keys.length; i < ilen; ++i) {
    datasetIndex = +keys[i];
    if (datasetIndex === dsIndex) {
      if (options2.all) {
        continue;
      }
      break;
    }
    otherValue = stack2.values[datasetIndex];
    if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {
      value += otherValue;
    }
  }
  return value;
}
function convertObjectDataToArray(data, meta) {
  const { iScale, vScale } = meta;
  const iAxisKey = iScale.axis === "x" ? "x" : "y";
  const vAxisKey = vScale.axis === "x" ? "x" : "y";
  const keys = Object.keys(data);
  const adata = new Array(keys.length);
  let i, ilen, key;
  for (i = 0, ilen = keys.length; i < ilen; ++i) {
    key = keys[i];
    adata[i] = {
      [iAxisKey]: key,
      [vAxisKey]: data[key]
    };
  }
  return adata;
}
function isStacked(scale, meta) {
  const stacked = scale && scale.options.stacked;
  return stacked || stacked === void 0 && meta.stack !== void 0;
}
function getStackKey(indexScale, valueScale, meta) {
  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;
}
function getUserBounds(scale) {
  const { min, max, minDefined, maxDefined } = scale.getUserBounds();
  return {
    min: minDefined ? min : Number.NEGATIVE_INFINITY,
    max: maxDefined ? max : Number.POSITIVE_INFINITY
  };
}
function getOrCreateStack(stacks, stackKey, indexValue) {
  const subStack = stacks[stackKey] || (stacks[stackKey] = {});
  return subStack[indexValue] || (subStack[indexValue] = {});
}
function getLastIndexInStack(stack2, vScale, positive, type) {
  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {
    const value = stack2[meta.index];
    if (positive && value > 0 || !positive && value < 0) {
      return meta.index;
    }
  }
  return null;
}
function updateStacks(controller, parsed) {
  const { chart, _cachedMeta: meta } = controller;
  const stacks = chart._stacks || (chart._stacks = {});
  const { iScale, vScale, index: datasetIndex } = meta;
  const iAxis = iScale.axis;
  const vAxis = vScale.axis;
  const key = getStackKey(iScale, vScale, meta);
  const ilen = parsed.length;
  let stack2;
  for (let i = 0; i < ilen; ++i) {
    const item = parsed[i];
    const { [iAxis]: index, [vAxis]: value } = item;
    const itemStacks = item._stacks || (item._stacks = {});
    stack2 = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);
    stack2[datasetIndex] = value;
    stack2._top = getLastIndexInStack(stack2, vScale, true, meta.type);
    stack2._bottom = getLastIndexInStack(stack2, vScale, false, meta.type);
    const visualValues = stack2._visualValues || (stack2._visualValues = {});
    visualValues[datasetIndex] = value;
  }
}
function getFirstScaleId(chart, axis) {
  const scales = chart.scales;
  return Object.keys(scales).filter((key) => scales[key].axis === axis).shift();
}
function createDatasetContext(parent, index) {
  return createContext(parent, {
    active: false,
    dataset: void 0,
    datasetIndex: index,
    index,
    mode: "default",
    type: "dataset"
  });
}
function createDataContext(parent, index, element) {
  return createContext(parent, {
    active: false,
    dataIndex: index,
    parsed: void 0,
    raw: void 0,
    element,
    index,
    mode: "default",
    type: "data"
  });
}
function clearStacks(meta, items) {
  const datasetIndex = meta.controller.index;
  const axis = meta.vScale && meta.vScale.axis;
  if (!axis) {
    return;
  }
  items = items || meta._parsed;
  for (const parsed of items) {
    const stacks = parsed._stacks;
    if (!stacks || stacks[axis] === void 0 || stacks[axis][datasetIndex] === void 0) {
      return;
    }
    delete stacks[axis][datasetIndex];
    if (stacks[axis]._visualValues !== void 0 && stacks[axis]._visualValues[datasetIndex] !== void 0) {
      delete stacks[axis]._visualValues[datasetIndex];
    }
  }
}
var isDirectUpdateMode = (mode) => mode === "reset" || mode === "none";
var cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);
var createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked && {
  keys: getSortedDatasetIndices(chart, true),
  values: null
};
var DatasetController = class {
  constructor(chart, datasetIndex) {
    this.chart = chart;
    this._ctx = chart.ctx;
    this.index = datasetIndex;
    this._cachedDataOpts = {};
    this._cachedMeta = this.getMeta();
    this._type = this._cachedMeta.type;
    this.options = void 0;
    this._parsing = false;
    this._data = void 0;
    this._objectData = void 0;
    this._sharedOptions = void 0;
    this._drawStart = void 0;
    this._drawCount = void 0;
    this.enableOptionSharing = false;
    this.supportsDecimation = false;
    this.$context = void 0;
    this._syncList = [];
    this.datasetElementType = new.target.datasetElementType;
    this.dataElementType = new.target.dataElementType;
    this.initialize();
  }
  initialize() {
    const meta = this._cachedMeta;
    this.configure();
    this.linkScales();
    meta._stacked = isStacked(meta.vScale, meta);
    this.addElements();
    if (this.options.fill && !this.chart.isPluginEnabled("filler")) {
      console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options");
    }
  }
  updateIndex(datasetIndex) {
    if (this.index !== datasetIndex) {
      clearStacks(this._cachedMeta);
    }
    this.index = datasetIndex;
  }
  linkScales() {
    const chart = this.chart;
    const meta = this._cachedMeta;
    const dataset = this.getDataset();
    const chooseId = (axis, x, y, r) => axis === "x" ? x : axis === "r" ? r : y;
    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, "x"));
    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, "y"));
    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, "r"));
    const indexAxis = meta.indexAxis;
    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);
    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);
    meta.xScale = this.getScaleForId(xid);
    meta.yScale = this.getScaleForId(yid);
    meta.rScale = this.getScaleForId(rid);
    meta.iScale = this.getScaleForId(iid);
    meta.vScale = this.getScaleForId(vid);
  }
  getDataset() {
    return this.chart.data.datasets[this.index];
  }
  getMeta() {
    return this.chart.getDatasetMeta(this.index);
  }
  getScaleForId(scaleID) {
    return this.chart.scales[scaleID];
  }
  _getOtherScale(scale) {
    const meta = this._cachedMeta;
    return scale === meta.iScale ? meta.vScale : meta.iScale;
  }
  reset() {
    this._update("reset");
  }
  _destroy() {
    const meta = this._cachedMeta;
    if (this._data) {
      unlistenArrayEvents(this._data, this);
    }
    if (meta._stacked) {
      clearStacks(meta);
    }
  }
  _dataCheck() {
    const dataset = this.getDataset();
    const data = dataset.data || (dataset.data = []);
    const _data = this._data;
    if (isObject(data)) {
      const meta = this._cachedMeta;
      this._data = convertObjectDataToArray(data, meta);
    } else if (_data !== data) {
      if (_data) {
        unlistenArrayEvents(_data, this);
        const meta = this._cachedMeta;
        clearStacks(meta);
        meta._parsed = [];
      }
      if (data && Object.isExtensible(data)) {
        listenArrayEvents(data, this);
      }
      this._syncList = [];
      this._data = data;
    }
  }
  addElements() {
    const meta = this._cachedMeta;
    this._dataCheck();
    if (this.datasetElementType) {
      meta.dataset = new this.datasetElementType();
    }
  }
  buildOrUpdateElements(resetNewElements) {
    const meta = this._cachedMeta;
    const dataset = this.getDataset();
    let stackChanged = false;
    this._dataCheck();
    const oldStacked = meta._stacked;
    meta._stacked = isStacked(meta.vScale, meta);
    if (meta.stack !== dataset.stack) {
      stackChanged = true;
      clearStacks(meta);
      meta.stack = dataset.stack;
    }
    this._resyncElements(resetNewElements);
    if (stackChanged || oldStacked !== meta._stacked) {
      updateStacks(this, meta._parsed);
    }
  }
  configure() {
    const config = this.chart.config;
    const scopeKeys = config.datasetScopeKeys(this._type);
    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);
    this.options = config.createResolver(scopes, this.getContext());
    this._parsing = this.options.parsing;
    this._cachedDataOpts = {};
  }
  parse(start, count) {
    const { _cachedMeta: meta, _data: data } = this;
    const { iScale, _stacked } = meta;
    const iAxis = iScale.axis;
    let sorted = start === 0 && count === data.length ? true : meta._sorted;
    let prev = start > 0 && meta._parsed[start - 1];
    let i, cur, parsed;
    if (this._parsing === false) {
      meta._parsed = data;
      meta._sorted = true;
      parsed = data;
    } else {
      if (isArray(data[start])) {
        parsed = this.parseArrayData(meta, data, start, count);
      } else if (isObject(data[start])) {
        parsed = this.parseObjectData(meta, data, start, count);
      } else {
        parsed = this.parsePrimitiveData(meta, data, start, count);
      }
      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];
      for (i = 0; i < count; ++i) {
        meta._parsed[i + start] = cur = parsed[i];
        if (sorted) {
          if (isNotInOrderComparedToPrev()) {
            sorted = false;
          }
          prev = cur;
        }
      }
      meta._sorted = sorted;
    }
    if (_stacked) {
      updateStacks(this, parsed);
    }
  }
  parsePrimitiveData(meta, data, start, count) {
    const { iScale, vScale } = meta;
    const iAxis = iScale.axis;
    const vAxis = vScale.axis;
    const labels = iScale.getLabels();
    const singleScale = iScale === vScale;
    const parsed = new Array(count);
    let i, ilen, index;
    for (i = 0, ilen = count; i < ilen; ++i) {
      index = i + start;
      parsed[i] = {
        [iAxis]: singleScale || iScale.parse(labels[index], index),
        [vAxis]: vScale.parse(data[index], index)
      };
    }
    return parsed;
  }
  parseArrayData(meta, data, start, count) {
    const { xScale, yScale } = meta;
    const parsed = new Array(count);
    let i, ilen, index, item;
    for (i = 0, ilen = count; i < ilen; ++i) {
      index = i + start;
      item = data[index];
      parsed[i] = {
        x: xScale.parse(item[0], index),
        y: yScale.parse(item[1], index)
      };
    }
    return parsed;
  }
  parseObjectData(meta, data, start, count) {
    const { xScale, yScale } = meta;
    const { xAxisKey = "x", yAxisKey = "y" } = this._parsing;
    const parsed = new Array(count);
    let i, ilen, index, item;
    for (i = 0, ilen = count; i < ilen; ++i) {
      index = i + start;
      item = data[index];
      parsed[i] = {
        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),
        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)
      };
    }
    return parsed;
  }
  getParsed(index) {
    return this._cachedMeta._parsed[index];
  }
  getDataElement(index) {
    return this._cachedMeta.data[index];
  }
  applyStack(scale, parsed, mode) {
    const chart = this.chart;
    const meta = this._cachedMeta;
    const value = parsed[scale.axis];
    const stack2 = {
      keys: getSortedDatasetIndices(chart, true),
      values: parsed._stacks[scale.axis]._visualValues
    };
    return applyStack(stack2, value, meta.index, {
      mode
    });
  }
  updateRangeFromParsed(range, scale, parsed, stack2) {
    const parsedValue = parsed[scale.axis];
    let value = parsedValue === null ? NaN : parsedValue;
    const values = stack2 && parsed._stacks[scale.axis];
    if (stack2 && values) {
      stack2.values = values;
      value = applyStack(stack2, parsedValue, this._cachedMeta.index);
    }
    range.min = Math.min(range.min, value);
    range.max = Math.max(range.max, value);
  }
  getMinMax(scale, canStack) {
    const meta = this._cachedMeta;
    const _parsed = meta._parsed;
    const sorted = meta._sorted && scale === meta.iScale;
    const ilen = _parsed.length;
    const otherScale = this._getOtherScale(scale);
    const stack2 = createStack(canStack, meta, this.chart);
    const range = {
      min: Number.POSITIVE_INFINITY,
      max: Number.NEGATIVE_INFINITY
    };
    const { min: otherMin, max: otherMax } = getUserBounds(otherScale);
    let i, parsed;
    function _skip() {
      parsed = _parsed[i];
      const otherValue = parsed[otherScale.axis];
      return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;
    }
    for (i = 0; i < ilen; ++i) {
      if (_skip()) {
        continue;
      }
      this.updateRangeFromParsed(range, scale, parsed, stack2);
      if (sorted) {
        break;
      }
    }
    if (sorted) {
      for (i = ilen - 1; i >= 0; --i) {
        if (_skip()) {
          continue;
        }
        this.updateRangeFromParsed(range, scale, parsed, stack2);
        break;
      }
    }
    return range;
  }
  getAllParsedValues(scale) {
    const parsed = this._cachedMeta._parsed;
    const values = [];
    let i, ilen, value;
    for (i = 0, ilen = parsed.length; i < ilen; ++i) {
      value = parsed[i][scale.axis];
      if (isNumberFinite(value)) {
        values.push(value);
      }
    }
    return values;
  }
  getMaxOverflow() {
    return false;
  }
  getLabelAndValue(index) {
    const meta = this._cachedMeta;
    const iScale = meta.iScale;
    const vScale = meta.vScale;
    const parsed = this.getParsed(index);
    return {
      label: iScale ? "" + iScale.getLabelForValue(parsed[iScale.axis]) : "",
      value: vScale ? "" + vScale.getLabelForValue(parsed[vScale.axis]) : ""
    };
  }
  _update(mode) {
    const meta = this._cachedMeta;
    this.update(mode || "default");
    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));
  }
  update(mode) {
  }
  draw() {
    const ctx = this._ctx;
    const chart = this.chart;
    const meta = this._cachedMeta;
    const elements = meta.data || [];
    const area = chart.chartArea;
    const active = [];
    const start = this._drawStart || 0;
    const count = this._drawCount || elements.length - start;
    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;
    let i;
    if (meta.dataset) {
      meta.dataset.draw(ctx, area, start, count);
    }
    for (i = start; i < start + count; ++i) {
      const element = elements[i];
      if (element.hidden) {
        continue;
      }
      if (element.active && drawActiveElementsOnTop) {
        active.push(element);
      } else {
        element.draw(ctx, area);
      }
    }
    for (i = 0; i < active.length; ++i) {
      active[i].draw(ctx, area);
    }
  }
  getStyle(index, active) {
    const mode = active ? "active" : "default";
    return index === void 0 && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);
  }
  getContext(index, active, mode) {
    const dataset = this.getDataset();
    let context;
    if (index >= 0 && index < this._cachedMeta.data.length) {
      const element = this._cachedMeta.data[index];
      context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));
      context.parsed = this.getParsed(index);
      context.raw = dataset.data[index];
      context.index = context.dataIndex = index;
    } else {
      context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));
      context.dataset = dataset;
      context.index = context.datasetIndex = this.index;
    }
    context.active = !!active;
    context.mode = mode;
    return context;
  }
  resolveDatasetElementOptions(mode) {
    return this._resolveElementOptions(this.datasetElementType.id, mode);
  }
  resolveDataElementOptions(index, mode) {
    return this._resolveElementOptions(this.dataElementType.id, mode, index);
  }
  _resolveElementOptions(elementType, mode = "default", index) {
    const active = mode === "active";
    const cache = this._cachedDataOpts;
    const cacheKey = elementType + "-" + mode;
    const cached = cache[cacheKey];
    const sharing = this.enableOptionSharing && defined(index);
    if (cached) {
      return cloneIfNotShared(cached, sharing);
    }
    const config = this.chart.config;
    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);
    const prefixes = active ? [
      `${elementType}Hover`,
      "hover",
      elementType,
      ""
    ] : [
      elementType,
      ""
    ];
    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
    const names2 = Object.keys(defaults2.elements[elementType]);
    const context = () => this.getContext(index, active, mode);
    const values = config.resolveNamedOptions(scopes, names2, context, prefixes);
    if (values.$shared) {
      values.$shared = sharing;
      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));
    }
    return values;
  }
  _resolveAnimations(index, transition, active) {
    const chart = this.chart;
    const cache = this._cachedDataOpts;
    const cacheKey = `animation-${transition}`;
    const cached = cache[cacheKey];
    if (cached) {
      return cached;
    }
    let options2;
    if (chart.options.animation !== false) {
      const config = this.chart.config;
      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);
      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
      options2 = config.createResolver(scopes, this.getContext(index, active, transition));
    }
    const animations = new Animations(chart, options2 && options2.animations);
    if (options2 && options2._cacheable) {
      cache[cacheKey] = Object.freeze(animations);
    }
    return animations;
  }
  getSharedOptions(options2) {
    if (!options2.$shared) {
      return;
    }
    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options2));
  }
  includeOptions(mode, sharedOptions) {
    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;
  }
  _getSharedOptions(start, mode) {
    const firstOpts = this.resolveDataElementOptions(start, mode);
    const previouslySharedOptions = this._sharedOptions;
    const sharedOptions = this.getSharedOptions(firstOpts);
    const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;
    this.updateSharedOptions(sharedOptions, mode, firstOpts);
    return {
      sharedOptions,
      includeOptions
    };
  }
  updateElement(element, index, properties, mode) {
    if (isDirectUpdateMode(mode)) {
      Object.assign(element, properties);
    } else {
      this._resolveAnimations(index, mode).update(element, properties);
    }
  }
  updateSharedOptions(sharedOptions, mode, newOptions) {
    if (sharedOptions && !isDirectUpdateMode(mode)) {
      this._resolveAnimations(void 0, mode).update(sharedOptions, newOptions);
    }
  }
  _setStyle(element, index, mode, active) {
    element.active = active;
    const options2 = this.getStyle(index, active);
    this._resolveAnimations(index, mode, active).update(element, {
      options: !active && this.getSharedOptions(options2) || options2
    });
  }
  removeHoverStyle(element, datasetIndex, index) {
    this._setStyle(element, index, "active", false);
  }
  setHoverStyle(element, datasetIndex, index) {
    this._setStyle(element, index, "active", true);
  }
  _removeDatasetHoverStyle() {
    const element = this._cachedMeta.dataset;
    if (element) {
      this._setStyle(element, void 0, "active", false);
    }
  }
  _setDatasetHoverStyle() {
    const element = this._cachedMeta.dataset;
    if (element) {
      this._setStyle(element, void 0, "active", true);
    }
  }
  _resyncElements(resetNewElements) {
    const data = this._data;
    const elements = this._cachedMeta.data;
    for (const [method, arg1, arg2] of this._syncList) {
      this[method](arg1, arg2);
    }
    this._syncList = [];
    const numMeta = elements.length;
    const numData = data.length;
    const count = Math.min(numData, numMeta);
    if (count) {
      this.parse(0, count);
    }
    if (numData > numMeta) {
      this._insertElements(numMeta, numData - numMeta, resetNewElements);
    } else if (numData < numMeta) {
      this._removeElements(numData, numMeta - numData);
    }
  }
  _insertElements(start, count, resetNewElements = true) {
    const meta = this._cachedMeta;
    const data = meta.data;
    const end = start + count;
    let i;
    const move = (arr) => {
      arr.length += count;
      for (i = arr.length - 1; i >= end; i--) {
        arr[i] = arr[i - count];
      }
    };
    move(data);
    for (i = start; i < end; ++i) {
      data[i] = new this.dataElementType();
    }
    if (this._parsing) {
      move(meta._parsed);
    }
    this.parse(start, count);
    if (resetNewElements) {
      this.updateElements(data, start, count, "reset");
    }
  }
  updateElements(element, start, count, mode) {
  }
  _removeElements(start, count) {
    const meta = this._cachedMeta;
    if (this._parsing) {
      const removed = meta._parsed.splice(start, count);
      if (meta._stacked) {
        clearStacks(meta, removed);
      }
    }
    meta.data.splice(start, count);
  }
  _sync(args) {
    if (this._parsing) {
      this._syncList.push(args);
    } else {
      const [method, arg1, arg2] = args;
      this[method](arg1, arg2);
    }
    this.chart._dataChanges.push([
      this.index,
      ...args
    ]);
  }
  _onDataPush() {
    const count = arguments.length;
    this._sync([
      "_insertElements",
      this.getDataset().data.length - count,
      count
    ]);
  }
  _onDataPop() {
    this._sync([
      "_removeElements",
      this._cachedMeta.data.length - 1,
      1
    ]);
  }
  _onDataShift() {
    this._sync([
      "_removeElements",
      0,
      1
    ]);
  }
  _onDataSplice(start, count) {
    if (count) {
      this._sync([
        "_removeElements",
        start,
        count
      ]);
    }
    const newCount = arguments.length - 2;
    if (newCount) {
      this._sync([
        "_insertElements",
        start,
        newCount
      ]);
    }
  }
  _onDataUnshift() {
    this._sync([
      "_insertElements",
      0,
      arguments.length
    ]);
  }
};
__publicField(DatasetController, "defaults", {});
__publicField(DatasetController, "datasetElementType", null);
__publicField(DatasetController, "dataElementType", null);
function getAllScaleValues(scale, type) {
  if (!scale._cache.$bar) {
    const visibleMetas = scale.getMatchingVisibleMetas(type);
    let values = [];
    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {
      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));
    }
    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));
  }
  return scale._cache.$bar;
}
function computeMinSampleSize(meta) {
  const scale = meta.iScale;
  const values = getAllScaleValues(scale, meta.type);
  let min = scale._length;
  let i, ilen, curr, prev;
  const updateMinAndPrev = () => {
    if (curr === 32767 || curr === -32768) {
      return;
    }
    if (defined(prev)) {
      min = Math.min(min, Math.abs(curr - prev) || min);
    }
    prev = curr;
  };
  for (i = 0, ilen = values.length; i < ilen; ++i) {
    curr = scale.getPixelForValue(values[i]);
    updateMinAndPrev();
  }
  prev = void 0;
  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {
    curr = scale.getPixelForTick(i);
    updateMinAndPrev();
  }
  return min;
}
function computeFitCategoryTraits(index, ruler, options2, stackCount) {
  const thickness = options2.barThickness;
  let size, ratio;
  if (isNullOrUndef(thickness)) {
    size = ruler.min * options2.categoryPercentage;
    ratio = options2.barPercentage;
  } else {
    size = thickness * stackCount;
    ratio = 1;
  }
  return {
    chunk: size / stackCount,
    ratio,
    start: ruler.pixels[index] - size / 2
  };
}
function computeFlexCategoryTraits(index, ruler, options2, stackCount) {
  const pixels = ruler.pixels;
  const curr = pixels[index];
  let prev = index > 0 ? pixels[index - 1] : null;
  let next = index < pixels.length - 1 ? pixels[index + 1] : null;
  const percent = options2.categoryPercentage;
  if (prev === null) {
    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);
  }
  if (next === null) {
    next = curr + curr - prev;
  }
  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;
  const size = Math.abs(next - prev) / 2 * percent;
  return {
    chunk: size / stackCount,
    ratio: options2.barPercentage,
    start
  };
}
function parseFloatBar(entry, item, vScale, i) {
  const startValue = vScale.parse(entry[0], i);
  const endValue = vScale.parse(entry[1], i);
  const min = Math.min(startValue, endValue);
  const max = Math.max(startValue, endValue);
  let barStart = min;
  let barEnd = max;
  if (Math.abs(min) > Math.abs(max)) {
    barStart = max;
    barEnd = min;
  }
  item[vScale.axis] = barEnd;
  item._custom = {
    barStart,
    barEnd,
    start: startValue,
    end: endValue,
    min,
    max
  };
}
function parseValue(entry, item, vScale, i) {
  if (isArray(entry)) {
    parseFloatBar(entry, item, vScale, i);
  } else {
    item[vScale.axis] = vScale.parse(entry, i);
  }
  return item;
}
function parseArrayOrPrimitive(meta, data, start, count) {
  const iScale = meta.iScale;
  const vScale = meta.vScale;
  const labels = iScale.getLabels();
  const singleScale = iScale === vScale;
  const parsed = [];
  let i, ilen, item, entry;
  for (i = start, ilen = start + count; i < ilen; ++i) {
    entry = data[i];
    item = {};
    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);
    parsed.push(parseValue(entry, item, vScale, i));
  }
  return parsed;
}
function isFloatBar(custom) {
  return custom && custom.barStart !== void 0 && custom.barEnd !== void 0;
}
function barSign(size, vScale, actualBase) {
  if (size !== 0) {
    return sign(size);
  }
  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);
}
function borderProps(properties) {
  let reverse, start, end, top, bottom;
  if (properties.horizontal) {
    reverse = properties.base > properties.x;
    start = "left";
    end = "right";
  } else {
    reverse = properties.base < properties.y;
    start = "bottom";
    end = "top";
  }
  if (reverse) {
    top = "end";
    bottom = "start";
  } else {
    top = "start";
    bottom = "end";
  }
  return {
    start,
    end,
    reverse,
    top,
    bottom
  };
}
function setBorderSkipped(properties, options2, stack2, index) {
  let edge = options2.borderSkipped;
  const res = {};
  if (!edge) {
    properties.borderSkipped = res;
    return;
  }
  if (edge === true) {
    properties.borderSkipped = {
      top: true,
      right: true,
      bottom: true,
      left: true
    };
    return;
  }
  const { start, end, reverse, top, bottom } = borderProps(properties);
  if (edge === "middle" && stack2) {
    properties.enableBorderRadius = true;
    if ((stack2._top || 0) === index) {
      edge = top;
    } else if ((stack2._bottom || 0) === index) {
      edge = bottom;
    } else {
      res[parseEdge(bottom, start, end, reverse)] = true;
      edge = top;
    }
  }
  res[parseEdge(edge, start, end, reverse)] = true;
  properties.borderSkipped = res;
}
function parseEdge(edge, a, b, reverse) {
  if (reverse) {
    edge = swap(edge, a, b);
    edge = startEnd(edge, b, a);
  } else {
    edge = startEnd(edge, a, b);
  }
  return edge;
}
function swap(orig, v1, v2) {
  return orig === v1 ? v2 : orig === v2 ? v1 : orig;
}
function startEnd(v, start, end) {
  return v === "start" ? start : v === "end" ? end : v;
}
function setInflateAmount(properties, { inflateAmount }, ratio) {
  properties.inflateAmount = inflateAmount === "auto" ? ratio === 1 ? 0.33 : 0 : inflateAmount;
}
var BarController = class extends DatasetController {
  parsePrimitiveData(meta, data, start, count) {
    return parseArrayOrPrimitive(meta, data, start, count);
  }
  parseArrayData(meta, data, start, count) {
    return parseArrayOrPrimitive(meta, data, start, count);
  }
  parseObjectData(meta, data, start, count) {
    const { iScale, vScale } = meta;
    const { xAxisKey = "x", yAxisKey = "y" } = this._parsing;
    const iAxisKey = iScale.axis === "x" ? xAxisKey : yAxisKey;
    const vAxisKey = vScale.axis === "x" ? xAxisKey : yAxisKey;
    const parsed = [];
    let i, ilen, item, obj;
    for (i = start, ilen = start + count; i < ilen; ++i) {
      obj = data[i];
      item = {};
      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);
      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));
    }
    return parsed;
  }
  updateRangeFromParsed(range, scale, parsed, stack2) {
    super.updateRangeFromParsed(range, scale, parsed, stack2);
    const custom = parsed._custom;
    if (custom && scale === this._cachedMeta.vScale) {
      range.min = Math.min(range.min, custom.min);
      range.max = Math.max(range.max, custom.max);
    }
  }
  getMaxOverflow() {
    return 0;
  }
  getLabelAndValue(index) {
    const meta = this._cachedMeta;
    const { iScale, vScale } = meta;
    const parsed = this.getParsed(index);
    const custom = parsed._custom;
    const value = isFloatBar(custom) ? "[" + custom.start + ", " + custom.end + "]" : "" + vScale.getLabelForValue(parsed[vScale.axis]);
    return {
      label: "" + iScale.getLabelForValue(parsed[iScale.axis]),
      value
    };
  }
  initialize() {
    this.enableOptionSharing = true;
    super.initialize();
    const meta = this._cachedMeta;
    meta.stack = this.getDataset().stack;
  }
  update(mode) {
    const meta = this._cachedMeta;
    this.updateElements(meta.data, 0, meta.data.length, mode);
  }
  updateElements(bars, start, count, mode) {
    const reset2 = mode === "reset";
    const { index, _cachedMeta: { vScale } } = this;
    const base = vScale.getBasePixel();
    const horizontal = vScale.isHorizontal();
    const ruler = this._getRuler();
    const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode);
    for (let i = start; i < start + count; i++) {
      const parsed = this.getParsed(i);
      const vpixels = reset2 || isNullOrUndef(parsed[vScale.axis]) ? {
        base,
        head: base
      } : this._calculateBarValuePixels(i);
      const ipixels = this._calculateBarIndexPixels(i, ruler);
      const stack2 = (parsed._stacks || {})[vScale.axis];
      const properties = {
        horizontal,
        base: vpixels.base,
        enableBorderRadius: !stack2 || isFloatBar(parsed._custom) || index === stack2._top || index === stack2._bottom,
        x: horizontal ? vpixels.head : ipixels.center,
        y: horizontal ? ipixels.center : vpixels.head,
        height: horizontal ? ipixels.size : Math.abs(vpixels.size),
        width: horizontal ? Math.abs(vpixels.size) : ipixels.size
      };
      if (includeOptions) {
        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? "active" : mode);
      }
      const options2 = properties.options || bars[i].options;
      setBorderSkipped(properties, options2, stack2, index);
      setInflateAmount(properties, options2, ruler.ratio);
      this.updateElement(bars[i], i, properties, mode);
    }
  }
  _getStacks(last, dataIndex) {
    const { iScale } = this._cachedMeta;
    const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta) => meta.controller.options.grouped);
    const stacked = iScale.options.stacked;
    const stacks = [];
    const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);
    const iScaleValue = currentParsed && currentParsed[iScale.axis];
    const skipNull = (meta) => {
      const parsed = meta._parsed.find((item) => item[iScale.axis] === iScaleValue);
      const val = parsed && parsed[meta.vScale.axis];
      if (isNullOrUndef(val) || isNaN(val)) {
        return true;
      }
    };
    for (const meta of metasets) {
      if (dataIndex !== void 0 && skipNull(meta)) {
        continue;
      }
      if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === void 0 && meta.stack === void 0) {
        stacks.push(meta.stack);
      }
      if (meta.index === last) {
        break;
      }
    }
    if (!stacks.length) {
      stacks.push(void 0);
    }
    return stacks;
  }
  _getStackCount(index) {
    return this._getStacks(void 0, index).length;
  }
  _getStackIndex(datasetIndex, name, dataIndex) {
    const stacks = this._getStacks(datasetIndex, dataIndex);
    const index = name !== void 0 ? stacks.indexOf(name) : -1;
    return index === -1 ? stacks.length - 1 : index;
  }
  _getRuler() {
    const opts = this.options;
    const meta = this._cachedMeta;
    const iScale = meta.iScale;
    const pixels = [];
    let i, ilen;
    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {
      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));
    }
    const barThickness = opts.barThickness;
    const min = barThickness || computeMinSampleSize(meta);
    return {
      min,
      pixels,
      start: iScale._startPixel,
      end: iScale._endPixel,
      stackCount: this._getStackCount(),
      scale: iScale,
      grouped: opts.grouped,
      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage
    };
  }
  _calculateBarValuePixels(index) {
    const { _cachedMeta: { vScale, _stacked, index: datasetIndex }, options: { base: baseValue, minBarLength } } = this;
    const actualBase = baseValue || 0;
    const parsed = this.getParsed(index);
    const custom = parsed._custom;
    const floating = isFloatBar(custom);
    let value = parsed[vScale.axis];
    let start = 0;
    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;
    let head, size;
    if (length !== value) {
      start = length - value;
      length = value;
    }
    if (floating) {
      value = custom.barStart;
      length = custom.barEnd - custom.barStart;
      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {
        start = 0;
      }
      start += value;
    }
    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;
    let base = vScale.getPixelForValue(startValue);
    if (this.chart.getDataVisibility(index)) {
      head = vScale.getPixelForValue(start + length);
    } else {
      head = base;
    }
    size = head - base;
    if (Math.abs(size) < minBarLength) {
      size = barSign(size, vScale, actualBase) * minBarLength;
      if (value === actualBase) {
        base -= size / 2;
      }
      const startPixel = vScale.getPixelForDecimal(0);
      const endPixel = vScale.getPixelForDecimal(1);
      const min = Math.min(startPixel, endPixel);
      const max = Math.max(startPixel, endPixel);
      base = Math.max(Math.min(base, max), min);
      head = base + size;
      if (_stacked && !floating) {
        parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);
      }
    }
    if (base === vScale.getPixelForValue(actualBase)) {
      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;
      base += halfGrid;
      size -= halfGrid;
    }
    return {
      size,
      base,
      head,
      center: head + size / 2
    };
  }
  _calculateBarIndexPixels(index, ruler) {
    const scale = ruler.scale;
    const options2 = this.options;
    const skipNull = options2.skipNull;
    const maxBarThickness = valueOrDefault(options2.maxBarThickness, Infinity);
    let center, size;
    if (ruler.grouped) {
      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;
      const range = options2.barThickness === "flex" ? computeFlexCategoryTraits(index, ruler, options2, stackCount) : computeFitCategoryTraits(index, ruler, options2, stackCount);
      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : void 0);
      center = range.start + range.chunk * stackIndex + range.chunk / 2;
      size = Math.min(maxBarThickness, range.chunk * range.ratio);
    } else {
      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);
      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);
    }
    return {
      base: center - size / 2,
      head: center + size / 2,
      center,
      size
    };
  }
  draw() {
    const meta = this._cachedMeta;
    const vScale = meta.vScale;
    const rects = meta.data;
    const ilen = rects.length;
    let i = 0;
    for (; i < ilen; ++i) {
      if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {
        rects[i].draw(this._ctx);
      }
    }
  }
};
__publicField(BarController, "id", "bar");
__publicField(BarController, "defaults", {
  datasetElementType: false,
  dataElementType: "bar",
  categoryPercentage: 0.8,
  barPercentage: 0.9,
  grouped: true,
  animations: {
    numbers: {
      type: "number",
      properties: [
        "x",
        "y",
        "base",
        "width",
        "height"
      ]
    }
  }
});
__publicField(BarController, "overrides", {
  scales: {
    _index_: {
      type: "category",
      offset: true,
      grid: {
        offset: true
      }
    },
    _value_: {
      type: "linear",
      beginAtZero: true
    }
  }
});
function getRatioAndOffset(rotation, circumference, cutout) {
  let ratioX = 1;
  let ratioY = 1;
  let offsetX = 0;
  let offsetY = 0;
  if (circumference < TAU) {
    const startAngle = rotation;
    const endAngle = startAngle + circumference;
    const startX = Math.cos(startAngle);
    const startY = Math.sin(startAngle);
    const endX = Math.cos(endAngle);
    const endY = Math.sin(endAngle);
    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);
    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);
    const maxX = calcMax(0, startX, endX);
    const maxY = calcMax(HALF_PI, startY, endY);
    const minX = calcMin(PI, startX, endX);
    const minY = calcMin(PI + HALF_PI, startY, endY);
    ratioX = (maxX - minX) / 2;
    ratioY = (maxY - minY) / 2;
    offsetX = -(maxX + minX) / 2;
    offsetY = -(maxY + minY) / 2;
  }
  return {
    ratioX,
    ratioY,
    offsetX,
    offsetY
  };
}
var DoughnutController = class extends DatasetController {
  constructor(chart, datasetIndex) {
    super(chart, datasetIndex);
    this.enableOptionSharing = true;
    this.innerRadius = void 0;
    this.outerRadius = void 0;
    this.offsetX = void 0;
    this.offsetY = void 0;
  }
  linkScales() {
  }
  parse(start, count) {
    const data = this.getDataset().data;
    const meta = this._cachedMeta;
    if (this._parsing === false) {
      meta._parsed = data;
    } else {
      let getter = (i2) => +data[i2];
      if (isObject(data[start])) {
        const { key = "value" } = this._parsing;
        getter = (i2) => +resolveObjectKey(data[i2], key);
      }
      let i, ilen;
      for (i = start, ilen = start + count; i < ilen; ++i) {
        meta._parsed[i] = getter(i);
      }
    }
  }
  _getRotation() {
    return toRadians(this.options.rotation - 90);
  }
  _getCircumference() {
    return toRadians(this.options.circumference);
  }
  _getRotationExtents() {
    let min = TAU;
    let max = -TAU;
    for (let i = 0; i < this.chart.data.datasets.length; ++i) {
      if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {
        const controller = this.chart.getDatasetMeta(i).controller;
        const rotation = controller._getRotation();
        const circumference = controller._getCircumference();
        min = Math.min(min, rotation);
        max = Math.max(max, rotation + circumference);
      }
    }
    return {
      rotation: min,
      circumference: max - min
    };
  }
  update(mode) {
    const chart = this.chart;
    const { chartArea } = chart;
    const meta = this._cachedMeta;
    const arcs = meta.data;
    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;
    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);
    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);
    const chartWeight = this._getRingWeight(this.index);
    const { circumference, rotation } = this._getRotationExtents();
    const { ratioX, ratioY, offsetX, offsetY } = getRatioAndOffset(rotation, circumference, cutout);
    const maxWidth = (chartArea.width - spacing) / ratioX;
    const maxHeight = (chartArea.height - spacing) / ratioY;
    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);
    const outerRadius = toDimension(this.options.radius, maxRadius);
    const innerRadius = Math.max(outerRadius * cutout, 0);
    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();
    this.offsetX = offsetX * outerRadius;
    this.offsetY = offsetY * outerRadius;
    meta.total = this.calculateTotal();
    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);
    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);
    this.updateElements(arcs, 0, arcs.length, mode);
  }
  _circumference(i, reset2) {
    const opts = this.options;
    const meta = this._cachedMeta;
    const circumference = this._getCircumference();
    if (reset2 && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {
      return 0;
    }
    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);
  }
  updateElements(arcs, start, count, mode) {
    const reset2 = mode === "reset";
    const chart = this.chart;
    const chartArea = chart.chartArea;
    const opts = chart.options;
    const animationOpts = opts.animation;
    const centerX = (chartArea.left + chartArea.right) / 2;
    const centerY = (chartArea.top + chartArea.bottom) / 2;
    const animateScale = reset2 && animationOpts.animateScale;
    const innerRadius = animateScale ? 0 : this.innerRadius;
    const outerRadius = animateScale ? 0 : this.outerRadius;
    const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode);
    let startAngle = this._getRotation();
    let i;
    for (i = 0; i < start; ++i) {
      startAngle += this._circumference(i, reset2);
    }
    for (i = start; i < start + count; ++i) {
      const circumference = this._circumference(i, reset2);
      const arc = arcs[i];
      const properties = {
        x: centerX + this.offsetX,
        y: centerY + this.offsetY,
        startAngle,
        endAngle: startAngle + circumference,
        circumference,
        outerRadius,
        innerRadius
      };
      if (includeOptions) {
        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? "active" : mode);
      }
      startAngle += circumference;
      this.updateElement(arc, i, properties, mode);
    }
  }
  calculateTotal() {
    const meta = this._cachedMeta;
    const metaData = meta.data;
    let total = 0;
    let i;
    for (i = 0; i < metaData.length; i++) {
      const value = meta._parsed[i];
      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {
        total += Math.abs(value);
      }
    }
    return total;
  }
  calculateCircumference(value) {
    const total = this._cachedMeta.total;
    if (total > 0 && !isNaN(value)) {
      return TAU * (Math.abs(value) / total);
    }
    return 0;
  }
  getLabelAndValue(index) {
    const meta = this._cachedMeta;
    const chart = this.chart;
    const labels = chart.data.labels || [];
    const value = formatNumber(meta._parsed[index], chart.options.locale);
    return {
      label: labels[index] || "",
      value
    };
  }
  getMaxBorderWidth(arcs) {
    let max = 0;
    const chart = this.chart;
    let i, ilen, meta, controller, options2;
    if (!arcs) {
      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {
        if (chart.isDatasetVisible(i)) {
          meta = chart.getDatasetMeta(i);
          arcs = meta.data;
          controller = meta.controller;
          break;
        }
      }
    }
    if (!arcs) {
      return 0;
    }
    for (i = 0, ilen = arcs.length; i < ilen; ++i) {
      options2 = controller.resolveDataElementOptions(i);
      if (options2.borderAlign !== "inner") {
        max = Math.max(max, options2.borderWidth || 0, options2.hoverBorderWidth || 0);
      }
    }
    return max;
  }
  getMaxOffset(arcs) {
    let max = 0;
    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {
      const options2 = this.resolveDataElementOptions(i);
      max = Math.max(max, options2.offset || 0, options2.hoverOffset || 0);
    }
    return max;
  }
  _getRingWeightOffset(datasetIndex) {
    let ringWeightOffset = 0;
    for (let i = 0; i < datasetIndex; ++i) {
      if (this.chart.isDatasetVisible(i)) {
        ringWeightOffset += this._getRingWeight(i);
      }
    }
    return ringWeightOffset;
  }
  _getRingWeight(datasetIndex) {
    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);
  }
  _getVisibleDatasetWeightTotal() {
    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;
  }
};
__publicField(DoughnutController, "id", "doughnut");
__publicField(DoughnutController, "defaults", {
  datasetElementType: false,
  dataElementType: "arc",
  animation: {
    animateRotate: true,
    animateScale: false
  },
  animations: {
    numbers: {
      type: "number",
      properties: [
        "circumference",
        "endAngle",
        "innerRadius",
        "outerRadius",
        "startAngle",
        "x",
        "y",
        "offset",
        "borderWidth",
        "spacing"
      ]
    }
  },
  cutout: "50%",
  rotation: 0,
  circumference: 360,
  radius: "100%",
  spacing: 0,
  indexAxis: "r"
});
__publicField(DoughnutController, "descriptors", {
  _scriptable: (name) => name !== "spacing",
  _indexable: (name) => name !== "spacing" && !name.startsWith("borderDash") && !name.startsWith("hoverBorderDash")
});
__publicField(DoughnutController, "overrides", {
  aspectRatio: 1,
  plugins: {
    legend: {
      labels: {
        generateLabels(chart) {
          const data = chart.data;
          if (data.labels.length && data.datasets.length) {
            const { labels: { pointStyle, color: color2 } } = chart.legend.options;
            return data.labels.map((label, i) => {
              const meta = chart.getDatasetMeta(0);
              const style = meta.controller.getStyle(i);
              return {
                text: label,
                fillStyle: style.backgroundColor,
                strokeStyle: style.borderColor,
                fontColor: color2,
                lineWidth: style.borderWidth,
                pointStyle,
                hidden: !chart.getDataVisibility(i),
                index: i
              };
            });
          }
          return [];
        }
      },
      onClick(e, legendItem, legend) {
        legend.chart.toggleDataVisibility(legendItem.index);
        legend.chart.update();
      }
    }
  }
});
var PieController = class extends DoughnutController {
};
__publicField(PieController, "id", "pie");
__publicField(PieController, "defaults", {
  cutout: 0,
  rotation: 0,
  circumference: 360,
  radius: "100%"
});
function abstract() {
  throw new Error("This method is not implemented: Check that a complete date adapter is provided.");
}
var DateAdapterBase = class _DateAdapterBase {
  constructor(options2) {
    __publicField(this, "options");
    this.options = options2 || {};
  }
  /**
  * Override default date adapter methods.
  * Accepts type parameter to define options type.
  * @example
  * Chart._adapters._date.override<{myAdapterOption: string}>({
  *   init() {
  *     console.log(this.options.myAdapterOption);
  *   }
  * })
  */
  static override(members) {
    Object.assign(_DateAdapterBase.prototype, members);
  }
  // eslint-disable-next-line @typescript-eslint/no-empty-function
  init() {
  }
  formats() {
    return abstract();
  }
  parse() {
    return abstract();
  }
  format() {
    return abstract();
  }
  add() {
    return abstract();
  }
  diff() {
    return abstract();
  }
  startOf() {
    return abstract();
  }
  endOf() {
    return abstract();
  }
};
var adapters = {
  _date: DateAdapterBase
};
function binarySearch(metaset, axis, value, intersect) {
  const { controller, data, _sorted } = metaset;
  const iScale = controller._cachedMeta.iScale;
  if (iScale && axis === iScale.axis && axis !== "r" && _sorted && data.length) {
    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;
    if (!intersect) {
      return lookupMethod(data, axis, value);
    } else if (controller._sharedOptions) {
      const el = data[0];
      const range = typeof el.getRange === "function" && el.getRange(axis);
      if (range) {
        const start = lookupMethod(data, axis, value - range);
        const end = lookupMethod(data, axis, value + range);
        return {
          lo: start.lo,
          hi: end.hi
        };
      }
    }
  }
  return {
    lo: 0,
    hi: data.length - 1
  };
}
function evaluateInteractionItems(chart, axis, position, handler, intersect) {
  const metasets = chart.getSortedVisibleDatasetMetas();
  const value = position[axis];
  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {
    const { index, data } = metasets[i];
    const { lo, hi } = binarySearch(metasets[i], axis, value, intersect);
    for (let j = lo; j <= hi; ++j) {
      const element = data[j];
      if (!element.skip) {
        handler(element, index, j);
      }
    }
  }
}
function getDistanceMetricForAxis(axis) {
  const useX = axis.indexOf("x") !== -1;
  const useY = axis.indexOf("y") !== -1;
  return function(pt1, pt2) {
    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;
    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;
    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
  };
}
function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {
  const items = [];
  if (!includeInvisible && !chart.isPointInArea(position)) {
    return items;
  }
  const evaluationFunc = function(element, datasetIndex, index) {
    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {
      return;
    }
    if (element.inRange(position.x, position.y, useFinalPosition)) {
      items.push({
        element,
        datasetIndex,
        index
      });
    }
  };
  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);
  return items;
}
function getNearestRadialItems(chart, position, axis, useFinalPosition) {
  let items = [];
  function evaluationFunc(element, datasetIndex, index) {
    const { startAngle, endAngle } = element.getProps([
      "startAngle",
      "endAngle"
    ], useFinalPosition);
    const { angle } = getAngleFromPoint(element, {
      x: position.x,
      y: position.y
    });
    if (_angleBetween(angle, startAngle, endAngle)) {
      items.push({
        element,
        datasetIndex,
        index
      });
    }
  }
  evaluateInteractionItems(chart, axis, position, evaluationFunc);
  return items;
}
function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
  let items = [];
  const distanceMetric = getDistanceMetricForAxis(axis);
  let minDistance = Number.POSITIVE_INFINITY;
  function evaluationFunc(element, datasetIndex, index) {
    const inRange2 = element.inRange(position.x, position.y, useFinalPosition);
    if (intersect && !inRange2) {
      return;
    }
    const center = element.getCenterPoint(useFinalPosition);
    const pointInArea = !!includeInvisible || chart.isPointInArea(center);
    if (!pointInArea && !inRange2) {
      return;
    }
    const distance = distanceMetric(position, center);
    if (distance < minDistance) {
      items = [
        {
          element,
          datasetIndex,
          index
        }
      ];
      minDistance = distance;
    } else if (distance === minDistance) {
      items.push({
        element,
        datasetIndex,
        index
      });
    }
  }
  evaluateInteractionItems(chart, axis, position, evaluationFunc);
  return items;
}
function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
  if (!includeInvisible && !chart.isPointInArea(position)) {
    return [];
  }
  return axis === "r" && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);
}
function getAxisItems(chart, position, axis, intersect, useFinalPosition) {
  const items = [];
  const rangeMethod = axis === "x" ? "inXRange" : "inYRange";
  let intersectsItem = false;
  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {
    if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {
      items.push({
        element,
        datasetIndex,
        index
      });
      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);
    }
  });
  if (intersect && !intersectsItem) {
    return [];
  }
  return items;
}
var Interaction = {
  evaluateInteractionItems,
  modes: {
    index(chart, e, options2, useFinalPosition) {
      const position = getRelativePosition(e, chart);
      const axis = options2.axis || "x";
      const includeInvisible = options2.includeInvisible || false;
      const items = options2.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
      const elements = [];
      if (!items.length) {
        return [];
      }
      chart.getSortedVisibleDatasetMetas().forEach((meta) => {
        const index = items[0].index;
        const element = meta.data[index];
        if (element && !element.skip) {
          elements.push({
            element,
            datasetIndex: meta.index,
            index
          });
        }
      });
      return elements;
    },
    dataset(chart, e, options2, useFinalPosition) {
      const position = getRelativePosition(e, chart);
      const axis = options2.axis || "xy";
      const includeInvisible = options2.includeInvisible || false;
      let items = options2.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
      if (items.length > 0) {
        const datasetIndex = items[0].datasetIndex;
        const data = chart.getDatasetMeta(datasetIndex).data;
        items = [];
        for (let i = 0; i < data.length; ++i) {
          items.push({
            element: data[i],
            datasetIndex,
            index: i
          });
        }
      }
      return items;
    },
    point(chart, e, options2, useFinalPosition) {
      const position = getRelativePosition(e, chart);
      const axis = options2.axis || "xy";
      const includeInvisible = options2.includeInvisible || false;
      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);
    },
    nearest(chart, e, options2, useFinalPosition) {
      const position = getRelativePosition(e, chart);
      const axis = options2.axis || "xy";
      const includeInvisible = options2.includeInvisible || false;
      return getNearestItems(chart, position, axis, options2.intersect, useFinalPosition, includeInvisible);
    },
    x(chart, e, options2, useFinalPosition) {
      const position = getRelativePosition(e, chart);
      return getAxisItems(chart, position, "x", options2.intersect, useFinalPosition);
    },
    y(chart, e, options2, useFinalPosition) {
      const position = getRelativePosition(e, chart);
      return getAxisItems(chart, position, "y", options2.intersect, useFinalPosition);
    }
  }
};
var STATIC_POSITIONS = [
  "left",
  "top",
  "right",
  "bottom"
];
function filterByPosition(array, position) {
  return array.filter((v) => v.pos === position);
}
function filterDynamicPositionByAxis(array, axis) {
  return array.filter((v) => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);
}
function sortByWeight(array, reverse) {
  return array.sort((a, b) => {
    const v0 = reverse ? b : a;
    const v1 = reverse ? a : b;
    return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;
  });
}
function wrapBoxes(boxes) {
  const layoutBoxes = [];
  let i, ilen, box, pos, stack2, stackWeight;
  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {
    box = boxes[i];
    ({ position: pos, options: { stack: stack2, stackWeight = 1 } } = box);
    layoutBoxes.push({
      index: i,
      box,
      pos,
      horizontal: box.isHorizontal(),
      weight: box.weight,
      stack: stack2 && pos + stack2,
      stackWeight
    });
  }
  return layoutBoxes;
}
function buildStacks(layouts2) {
  const stacks = {};
  for (const wrap of layouts2) {
    const { stack: stack2, pos, stackWeight } = wrap;
    if (!stack2 || !STATIC_POSITIONS.includes(pos)) {
      continue;
    }
    const _stack = stacks[stack2] || (stacks[stack2] = {
      count: 0,
      placed: 0,
      weight: 0,
      size: 0
    });
    _stack.count++;
    _stack.weight += stackWeight;
  }
  return stacks;
}
function setLayoutDims(layouts2, params) {
  const stacks = buildStacks(layouts2);
  const { vBoxMaxWidth, hBoxMaxHeight } = params;
  let i, ilen, layout;
  for (i = 0, ilen = layouts2.length; i < ilen; ++i) {
    layout = layouts2[i];
    const { fullSize } = layout.box;
    const stack2 = stacks[layout.stack];
    const factor = stack2 && layout.stackWeight / stack2.weight;
    if (layout.horizontal) {
      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;
      layout.height = hBoxMaxHeight;
    } else {
      layout.width = vBoxMaxWidth;
      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;
    }
  }
  return stacks;
}
function buildLayoutBoxes(boxes) {
  const layoutBoxes = wrapBoxes(boxes);
  const fullSize = sortByWeight(layoutBoxes.filter((wrap) => wrap.box.fullSize), true);
  const left = sortByWeight(filterByPosition(layoutBoxes, "left"), true);
  const right = sortByWeight(filterByPosition(layoutBoxes, "right"));
  const top = sortByWeight(filterByPosition(layoutBoxes, "top"), true);
  const bottom = sortByWeight(filterByPosition(layoutBoxes, "bottom"));
  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, "x");
  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, "y");
  return {
    fullSize,
    leftAndTop: left.concat(top),
    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),
    chartArea: filterByPosition(layoutBoxes, "chartArea"),
    vertical: left.concat(right).concat(centerVertical),
    horizontal: top.concat(bottom).concat(centerHorizontal)
  };
}
function getCombinedMax(maxPadding, chartArea, a, b) {
  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);
}
function updateMaxPadding(maxPadding, boxPadding) {
  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);
  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);
  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);
  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);
}
function updateDims(chartArea, params, layout, stacks) {
  const { pos, box } = layout;
  const maxPadding = chartArea.maxPadding;
  if (!isObject(pos)) {
    if (layout.size) {
      chartArea[pos] -= layout.size;
    }
    const stack2 = stacks[layout.stack] || {
      size: 0,
      count: 1
    };
    stack2.size = Math.max(stack2.size, layout.horizontal ? box.height : box.width);
    layout.size = stack2.size / stack2.count;
    chartArea[pos] += layout.size;
  }
  if (box.getPadding) {
    updateMaxPadding(maxPadding, box.getPadding());
  }
  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, "left", "right"));
  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, "top", "bottom"));
  const widthChanged = newWidth !== chartArea.w;
  const heightChanged = newHeight !== chartArea.h;
  chartArea.w = newWidth;
  chartArea.h = newHeight;
  return layout.horizontal ? {
    same: widthChanged,
    other: heightChanged
  } : {
    same: heightChanged,
    other: widthChanged
  };
}
function handleMaxPadding(chartArea) {
  const maxPadding = chartArea.maxPadding;
  function updatePos(pos) {
    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);
    chartArea[pos] += change;
    return change;
  }
  chartArea.y += updatePos("top");
  chartArea.x += updatePos("left");
  updatePos("right");
  updatePos("bottom");
}
function getMargins(horizontal, chartArea) {
  const maxPadding = chartArea.maxPadding;
  function marginForPositions(positions2) {
    const margin = {
      left: 0,
      top: 0,
      right: 0,
      bottom: 0
    };
    positions2.forEach((pos) => {
      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);
    });
    return margin;
  }
  return horizontal ? marginForPositions([
    "left",
    "right"
  ]) : marginForPositions([
    "top",
    "bottom"
  ]);
}
function fitBoxes(boxes, chartArea, params, stacks) {
  const refitBoxes = [];
  let i, ilen, layout, box, refit, changed;
  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {
    layout = boxes[i];
    box = layout.box;
    box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));
    const { same, other } = updateDims(chartArea, params, layout, stacks);
    refit |= same && refitBoxes.length;
    changed = changed || other;
    if (!box.fullSize) {
      refitBoxes.push(layout);
    }
  }
  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;
}
function setBoxDims(box, left, top, width, height) {
  box.top = top;
  box.left = left;
  box.right = left + width;
  box.bottom = top + height;
  box.width = width;
  box.height = height;
}
function placeBoxes(boxes, chartArea, params, stacks) {
  const userPadding = params.padding;
  let { x, y } = chartArea;
  for (const layout of boxes) {
    const box = layout.box;
    const stack2 = stacks[layout.stack] || {
      count: 1,
      placed: 0,
      weight: 1
    };
    const weight = layout.stackWeight / stack2.weight || 1;
    if (layout.horizontal) {
      const width = chartArea.w * weight;
      const height = stack2.size || box.height;
      if (defined(stack2.start)) {
        y = stack2.start;
      }
      if (box.fullSize) {
        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);
      } else {
        setBoxDims(box, chartArea.left + stack2.placed, y, width, height);
      }
      stack2.start = y;
      stack2.placed += width;
      y = box.bottom;
    } else {
      const height = chartArea.h * weight;
      const width = stack2.size || box.width;
      if (defined(stack2.start)) {
        x = stack2.start;
      }
      if (box.fullSize) {
        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);
      } else {
        setBoxDims(box, x, chartArea.top + stack2.placed, width, height);
      }
      stack2.start = x;
      stack2.placed += height;
      x = box.right;
    }
  }
  chartArea.x = x;
  chartArea.y = y;
}
var layouts = {
  addBox(chart, item) {
    if (!chart.boxes) {
      chart.boxes = [];
    }
    item.fullSize = item.fullSize || false;
    item.position = item.position || "top";
    item.weight = item.weight || 0;
    item._layers = item._layers || function() {
      return [
        {
          z: 0,
          draw(chartArea) {
            item.draw(chartArea);
          }
        }
      ];
    };
    chart.boxes.push(item);
  },
  removeBox(chart, layoutItem) {
    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;
    if (index !== -1) {
      chart.boxes.splice(index, 1);
    }
  },
  configure(chart, item, options2) {
    item.fullSize = options2.fullSize;
    item.position = options2.position;
    item.weight = options2.weight;
  },
  update(chart, width, height, minPadding) {
    if (!chart) {
      return;
    }
    const padding = toPadding(chart.options.layout.padding);
    const availableWidth = Math.max(width - padding.width, 0);
    const availableHeight = Math.max(height - padding.height, 0);
    const boxes = buildLayoutBoxes(chart.boxes);
    const verticalBoxes = boxes.vertical;
    const horizontalBoxes = boxes.horizontal;
    each(chart.boxes, (box) => {
      if (typeof box.beforeLayout === "function") {
        box.beforeLayout();
      }
    });
    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) => wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;
    const params = Object.freeze({
      outerWidth: width,
      outerHeight: height,
      padding,
      availableWidth,
      availableHeight,
      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,
      hBoxMaxHeight: availableHeight / 2
    });
    const maxPadding = Object.assign({}, padding);
    updateMaxPadding(maxPadding, toPadding(minPadding));
    const chartArea = Object.assign({
      maxPadding,
      w: availableWidth,
      h: availableHeight,
      x: padding.left,
      y: padding.top
    }, padding);
    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);
    fitBoxes(boxes.fullSize, chartArea, params, stacks);
    fitBoxes(verticalBoxes, chartArea, params, stacks);
    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {
      fitBoxes(verticalBoxes, chartArea, params, stacks);
    }
    handleMaxPadding(chartArea);
    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);
    chartArea.x += chartArea.w;
    chartArea.y += chartArea.h;
    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);
    chart.chartArea = {
      left: chartArea.left,
      top: chartArea.top,
      right: chartArea.left + chartArea.w,
      bottom: chartArea.top + chartArea.h,
      height: chartArea.h,
      width: chartArea.w
    };
    each(boxes.chartArea, (layout) => {
      const box = layout.box;
      Object.assign(box, chart.chartArea);
      box.update(chartArea.w, chartArea.h, {
        left: 0,
        top: 0,
        right: 0,
        bottom: 0
      });
    });
  }
};
var BasePlatform = class {
  acquireContext(canvas, aspectRatio) {
  }
  releaseContext(context) {
    return false;
  }
  addEventListener(chart, type, listener) {
  }
  removeEventListener(chart, type, listener) {
  }
  getDevicePixelRatio() {
    return 1;
  }
  getMaximumSize(element, width, height, aspectRatio) {
    width = Math.max(0, width || element.width);
    height = height || element.height;
    return {
      width,
      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)
    };
  }
  isAttached(canvas) {
    return true;
  }
  updateConfig(config) {
  }
};
var BasicPlatform = class extends BasePlatform {
  acquireContext(item) {
    return item && item.getContext && item.getContext("2d") || null;
  }
  updateConfig(config) {
    config.options.animation = false;
  }
};
var EXPANDO_KEY = "$chartjs";
var EVENT_TYPES = {
  touchstart: "mousedown",
  touchmove: "mousemove",
  touchend: "mouseup",
  pointerenter: "mouseenter",
  pointerdown: "mousedown",
  pointermove: "mousemove",
  pointerup: "mouseup",
  pointerleave: "mouseout",
  pointerout: "mouseout"
};
var isNullOrEmpty = (value) => value === null || value === "";
function initCanvas(canvas, aspectRatio) {
  const style = canvas.style;
  const renderHeight = canvas.getAttribute("height");
  const renderWidth = canvas.getAttribute("width");
  canvas[EXPANDO_KEY] = {
    initial: {
      height: renderHeight,
      width: renderWidth,
      style: {
        display: style.display,
        height: style.height,
        width: style.width
      }
    }
  };
  style.display = style.display || "block";
  style.boxSizing = style.boxSizing || "border-box";
  if (isNullOrEmpty(renderWidth)) {
    const displayWidth = readUsedSize(canvas, "width");
    if (displayWidth !== void 0) {
      canvas.width = displayWidth;
    }
  }
  if (isNullOrEmpty(renderHeight)) {
    if (canvas.style.height === "") {
      canvas.height = canvas.width / (aspectRatio || 2);
    } else {
      const displayHeight = readUsedSize(canvas, "height");
      if (displayHeight !== void 0) {
        canvas.height = displayHeight;
      }
    }
  }
  return canvas;
}
var eventListenerOptions = supportsEventListenerOptions ? {
  passive: true
} : false;
function addListener(node, type, listener) {
  if (node) {
    node.addEventListener(type, listener, eventListenerOptions);
  }
}
function removeListener(chart, type, listener) {
  if (chart && chart.canvas) {
    chart.canvas.removeEventListener(type, listener, eventListenerOptions);
  }
}
function fromNativeEvent(event, chart) {
  const type = EVENT_TYPES[event.type] || event.type;
  const { x, y } = getRelativePosition(event, chart);
  return {
    type,
    chart,
    native: event,
    x: x !== void 0 ? x : null,
    y: y !== void 0 ? y : null
  };
}
function nodeListContains(nodeList, canvas) {
  for (const node of nodeList) {
    if (node === canvas || node.contains(canvas)) {
      return true;
    }
  }
}
function createAttachObserver(chart, type, listener) {
  const canvas = chart.canvas;
  const observer = new MutationObserver((entries) => {
    let trigger = false;
    for (const entry of entries) {
      trigger = trigger || nodeListContains(entry.addedNodes, canvas);
      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);
    }
    if (trigger) {
      listener();
    }
  });
  observer.observe(document, {
    childList: true,
    subtree: true
  });
  return observer;
}
function createDetachObserver(chart, type, listener) {
  const canvas = chart.canvas;
  const observer = new MutationObserver((entries) => {
    let trigger = false;
    for (const entry of entries) {
      trigger = trigger || nodeListContains(entry.removedNodes, canvas);
      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);
    }
    if (trigger) {
      listener();
    }
  });
  observer.observe(document, {
    childList: true,
    subtree: true
  });
  return observer;
}
var drpListeningCharts = /* @__PURE__ */ new Map();
var oldDevicePixelRatio = 0;
function onWindowResize() {
  const dpr = window.devicePixelRatio;
  if (dpr === oldDevicePixelRatio) {
    return;
  }
  oldDevicePixelRatio = dpr;
  drpListeningCharts.forEach((resize, chart) => {
    if (chart.currentDevicePixelRatio !== dpr) {
      resize();
    }
  });
}
function listenDevicePixelRatioChanges(chart, resize) {
  if (!drpListeningCharts.size) {
    window.addEventListener("resize", onWindowResize);
  }
  drpListeningCharts.set(chart, resize);
}
function unlistenDevicePixelRatioChanges(chart) {
  drpListeningCharts.delete(chart);
  if (!drpListeningCharts.size) {
    window.removeEventListener("resize", onWindowResize);
  }
}
function createResizeObserver(chart, type, listener) {
  const canvas = chart.canvas;
  const container = canvas && _getParentNode(canvas);
  if (!container) {
    return;
  }
  const resize = throttled((width, height) => {
    const w = container.clientWidth;
    listener(width, height);
    if (w < container.clientWidth) {
      listener();
    }
  }, window);
  const observer = new ResizeObserver((entries) => {
    const entry = entries[0];
    const width = entry.contentRect.width;
    const height = entry.contentRect.height;
    if (width === 0 && height === 0) {
      return;
    }
    resize(width, height);
  });
  observer.observe(container);
  listenDevicePixelRatioChanges(chart, resize);
  return observer;
}
function releaseObserver(chart, type, observer) {
  if (observer) {
    observer.disconnect();
  }
  if (type === "resize") {
    unlistenDevicePixelRatioChanges(chart);
  }
}
function createProxyAndListen(chart, type, listener) {
  const canvas = chart.canvas;
  const proxy = throttled((event) => {
    if (chart.ctx !== null) {
      listener(fromNativeEvent(event, chart));
    }
  }, chart);
  addListener(canvas, type, proxy);
  return proxy;
}
var DomPlatform = class extends BasePlatform {
  acquireContext(canvas, aspectRatio) {
    const context = canvas && canvas.getContext && canvas.getContext("2d");
    if (context && context.canvas === canvas) {
      initCanvas(canvas, aspectRatio);
      return context;
    }
    return null;
  }
  releaseContext(context) {
    const canvas = context.canvas;
    if (!canvas[EXPANDO_KEY]) {
      return false;
    }
    const initial = canvas[EXPANDO_KEY].initial;
    [
      "height",
      "width"
    ].forEach((prop) => {
      const value = initial[prop];
      if (isNullOrUndef(value)) {
        canvas.removeAttribute(prop);
      } else {
        canvas.setAttribute(prop, value);
      }
    });
    const style = initial.style || {};
    Object.keys(style).forEach((key) => {
      canvas.style[key] = style[key];
    });
    canvas.width = canvas.width;
    delete canvas[EXPANDO_KEY];
    return true;
  }
  addEventListener(chart, type, listener) {
    this.removeEventListener(chart, type);
    const proxies = chart.$proxies || (chart.$proxies = {});
    const handlers = {
      attach: createAttachObserver,
      detach: createDetachObserver,
      resize: createResizeObserver
    };
    const handler = handlers[type] || createProxyAndListen;
    proxies[type] = handler(chart, type, listener);
  }
  removeEventListener(chart, type) {
    const proxies = chart.$proxies || (chart.$proxies = {});
    const proxy = proxies[type];
    if (!proxy) {
      return;
    }
    const handlers = {
      attach: releaseObserver,
      detach: releaseObserver,
      resize: releaseObserver
    };
    const handler = handlers[type] || removeListener;
    handler(chart, type, proxy);
    proxies[type] = void 0;
  }
  getDevicePixelRatio() {
    return window.devicePixelRatio;
  }
  getMaximumSize(canvas, width, height, aspectRatio) {
    return getMaximumSize(canvas, width, height, aspectRatio);
  }
  isAttached(canvas) {
    const container = canvas && _getParentNode(canvas);
    return !!(container && container.isConnected);
  }
};
function _detectPlatform(canvas) {
  if (!_isDomSupported() || typeof OffscreenCanvas !== "undefined" && canvas instanceof OffscreenCanvas) {
    return BasicPlatform;
  }
  return DomPlatform;
}
var Element = class {
  constructor() {
    __publicField(this, "x");
    __publicField(this, "y");
    __publicField(this, "active", false);
    __publicField(this, "options");
    __publicField(this, "$animations");
  }
  tooltipPosition(useFinalPosition) {
    const { x, y } = this.getProps([
      "x",
      "y"
    ], useFinalPosition);
    return {
      x,
      y
    };
  }
  hasValue() {
    return isNumber(this.x) && isNumber(this.y);
  }
  getProps(props, final) {
    const anims = this.$animations;
    if (!final || !anims) {
      return this;
    }
    const ret = {};
    props.forEach((prop) => {
      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];
    });
    return ret;
  }
};
__publicField(Element, "defaults", {});
__publicField(Element, "defaultRoutes");
function autoSkip(scale, ticks) {
  const tickOpts = scale.options.ticks;
  const determinedMaxTicks = determineMaxTicks(scale);
  const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);
  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];
  const numMajorIndices = majorIndices.length;
  const first = majorIndices[0];
  const last = majorIndices[numMajorIndices - 1];
  const newTicks = [];
  if (numMajorIndices > ticksLimit) {
    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);
    return newTicks;
  }
  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);
  if (numMajorIndices > 0) {
    let i, ilen;
    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;
    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);
    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {
      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);
    }
    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);
    return newTicks;
  }
  skip(ticks, newTicks, spacing);
  return newTicks;
}
function determineMaxTicks(scale) {
  const offset = scale.options.offset;
  const tickLength = scale._tickSize();
  const maxScale = scale._length / tickLength + (offset ? 0 : 1);
  const maxChart = scale._maxLength / tickLength;
  return Math.floor(Math.min(maxScale, maxChart));
}
function calculateSpacing(majorIndices, ticks, ticksLimit) {
  const evenMajorSpacing = getEvenSpacing(majorIndices);
  const spacing = ticks.length / ticksLimit;
  if (!evenMajorSpacing) {
    return Math.max(spacing, 1);
  }
  const factors = _factorize(evenMajorSpacing);
  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {
    const factor = factors[i];
    if (factor > spacing) {
      return factor;
    }
  }
  return Math.max(spacing, 1);
}
function getMajorIndices(ticks) {
  const result = [];
  let i, ilen;
  for (i = 0, ilen = ticks.length; i < ilen; i++) {
    if (ticks[i].major) {
      result.push(i);
    }
  }
  return result;
}
function skipMajors(ticks, newTicks, majorIndices, spacing) {
  let count = 0;
  let next = majorIndices[0];
  let i;
  spacing = Math.ceil(spacing);
  for (i = 0; i < ticks.length; i++) {
    if (i === next) {
      newTicks.push(ticks[i]);
      count++;
      next = majorIndices[count * spacing];
    }
  }
}
function skip(ticks, newTicks, spacing, majorStart, majorEnd) {
  const start = valueOrDefault(majorStart, 0);
  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);
  let count = 0;
  let length, i, next;
  spacing = Math.ceil(spacing);
  if (majorEnd) {
    length = majorEnd - majorStart;
    spacing = length / Math.floor(length / spacing);
  }
  next = start;
  while (next < 0) {
    count++;
    next = Math.round(start + count * spacing);
  }
  for (i = Math.max(start, 0); i < end; i++) {
    if (i === next) {
      newTicks.push(ticks[i]);
      count++;
      next = Math.round(start + count * spacing);
    }
  }
}
function getEvenSpacing(arr) {
  const len = arr.length;
  let i, diff;
  if (len < 2) {
    return false;
  }
  for (diff = arr[0], i = 1; i < len; ++i) {
    if (arr[i] - arr[i - 1] !== diff) {
      return false;
    }
  }
  return diff;
}
var reverseAlign = (align) => align === "left" ? "right" : align === "right" ? "left" : align;
var offsetFromEdge = (scale, edge, offset) => edge === "top" || edge === "left" ? scale[edge] + offset : scale[edge] - offset;
var getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);
function sample(arr, numItems) {
  const result = [];
  const increment = arr.length / numItems;
  const len = arr.length;
  let i = 0;
  for (; i < len; i += increment) {
    result.push(arr[Math.floor(i)]);
  }
  return result;
}
function getPixelForGridLine(scale, index, offsetGridLines) {
  const length = scale.ticks.length;
  const validIndex2 = Math.min(index, length - 1);
  const start = scale._startPixel;
  const end = scale._endPixel;
  const epsilon = 1e-6;
  let lineValue = scale.getPixelForTick(validIndex2);
  let offset;
  if (offsetGridLines) {
    if (length === 1) {
      offset = Math.max(lineValue - start, end - lineValue);
    } else if (index === 0) {
      offset = (scale.getPixelForTick(1) - lineValue) / 2;
    } else {
      offset = (lineValue - scale.getPixelForTick(validIndex2 - 1)) / 2;
    }
    lineValue += validIndex2 < index ? offset : -offset;
    if (lineValue < start - epsilon || lineValue > end + epsilon) {
      return;
    }
  }
  return lineValue;
}
function garbageCollect(caches, length) {
  each(caches, (cache) => {
    const gc = cache.gc;
    const gcLen = gc.length / 2;
    let i;
    if (gcLen > length) {
      for (i = 0; i < gcLen; ++i) {
        delete cache.data[gc[i]];
      }
      gc.splice(0, gcLen);
    }
  });
}
function getTickMarkLength(options2) {
  return options2.drawTicks ? options2.tickLength : 0;
}
function getTitleHeight(options2, fallback) {
  if (!options2.display) {
    return 0;
  }
  const font = toFont(options2.font, fallback);
  const padding = toPadding(options2.padding);
  const lines = isArray(options2.text) ? options2.text.length : 1;
  return lines * font.lineHeight + padding.height;
}
function createScaleContext(parent, scale) {
  return createContext(parent, {
    scale,
    type: "scale"
  });
}
function createTickContext(parent, index, tick) {
  return createContext(parent, {
    tick,
    index,
    type: "tick"
  });
}
function titleAlign(align, position, reverse) {
  let ret = _toLeftRightCenter(align);
  if (reverse && position !== "right" || !reverse && position === "right") {
    ret = reverseAlign(ret);
  }
  return ret;
}
function titleArgs(scale, offset, position, align) {
  const { top, left, bottom, right, chart } = scale;
  const { chartArea, scales } = chart;
  let rotation = 0;
  let maxWidth, titleX, titleY;
  const height = bottom - top;
  const width = right - left;
  if (scale.isHorizontal()) {
    titleX = _alignStartEnd(align, left, right);
    if (isObject(position)) {
      const positionAxisID = Object.keys(position)[0];
      const value = position[positionAxisID];
      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;
    } else if (position === "center") {
      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;
    } else {
      titleY = offsetFromEdge(scale, position, offset);
    }
    maxWidth = right - left;
  } else {
    if (isObject(position)) {
      const positionAxisID = Object.keys(position)[0];
      const value = position[positionAxisID];
      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;
    } else if (position === "center") {
      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;
    } else {
      titleX = offsetFromEdge(scale, position, offset);
    }
    titleY = _alignStartEnd(align, bottom, top);
    rotation = position === "left" ? -HALF_PI : HALF_PI;
  }
  return {
    titleX,
    titleY,
    maxWidth,
    rotation
  };
}
var Scale = class _Scale extends Element {
  constructor(cfg) {
    super();
    this.id = cfg.id;
    this.type = cfg.type;
    this.options = void 0;
    this.ctx = cfg.ctx;
    this.chart = cfg.chart;
    this.top = void 0;
    this.bottom = void 0;
    this.left = void 0;
    this.right = void 0;
    this.width = void 0;
    this.height = void 0;
    this._margins = {
      left: 0,
      right: 0,
      top: 0,
      bottom: 0
    };
    this.maxWidth = void 0;
    this.maxHeight = void 0;
    this.paddingTop = void 0;
    this.paddingBottom = void 0;
    this.paddingLeft = void 0;
    this.paddingRight = void 0;
    this.axis = void 0;
    this.labelRotation = void 0;
    this.min = void 0;
    this.max = void 0;
    this._range = void 0;
    this.ticks = [];
    this._gridLineItems = null;
    this._labelItems = null;
    this._labelSizes = null;
    this._length = 0;
    this._maxLength = 0;
    this._longestTextCache = {};
    this._startPixel = void 0;
    this._endPixel = void 0;
    this._reversePixels = false;
    this._userMax = void 0;
    this._userMin = void 0;
    this._suggestedMax = void 0;
    this._suggestedMin = void 0;
    this._ticksLength = 0;
    this._borderValue = 0;
    this._cache = {};
    this._dataLimitsCached = false;
    this.$context = void 0;
  }
  init(options2) {
    this.options = options2.setContext(this.getContext());
    this.axis = options2.axis;
    this._userMin = this.parse(options2.min);
    this._userMax = this.parse(options2.max);
    this._suggestedMin = this.parse(options2.suggestedMin);
    this._suggestedMax = this.parse(options2.suggestedMax);
  }
  parse(raw, index) {
    return raw;
  }
  getUserBounds() {
    let { _userMin, _userMax, _suggestedMin, _suggestedMax } = this;
    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);
    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);
    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);
    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);
    return {
      min: finiteOrDefault(_userMin, _suggestedMin),
      max: finiteOrDefault(_userMax, _suggestedMax),
      minDefined: isNumberFinite(_userMin),
      maxDefined: isNumberFinite(_userMax)
    };
  }
  getMinMax(canStack) {
    let { min, max, minDefined, maxDefined } = this.getUserBounds();
    let range;
    if (minDefined && maxDefined) {
      return {
        min,
        max
      };
    }
    const metas = this.getMatchingVisibleMetas();
    for (let i = 0, ilen = metas.length; i < ilen; ++i) {
      range = metas[i].controller.getMinMax(this, canStack);
      if (!minDefined) {
        min = Math.min(min, range.min);
      }
      if (!maxDefined) {
        max = Math.max(max, range.max);
      }
    }
    min = maxDefined && min > max ? max : min;
    max = minDefined && min > max ? min : max;
    return {
      min: finiteOrDefault(min, finiteOrDefault(max, min)),
      max: finiteOrDefault(max, finiteOrDefault(min, max))
    };
  }
  getPadding() {
    return {
      left: this.paddingLeft || 0,
      top: this.paddingTop || 0,
      right: this.paddingRight || 0,
      bottom: this.paddingBottom || 0
    };
  }
  getTicks() {
    return this.ticks;
  }
  getLabels() {
    const data = this.chart.data;
    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];
  }
  getLabelItems(chartArea = this.chart.chartArea) {
    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));
    return items;
  }
  beforeLayout() {
    this._cache = {};
    this._dataLimitsCached = false;
  }
  beforeUpdate() {
    callback(this.options.beforeUpdate, [
      this
    ]);
  }
  update(maxWidth, maxHeight, margins) {
    const { beginAtZero, grace, ticks: tickOpts } = this.options;
    const sampleSize = tickOpts.sampleSize;
    this.beforeUpdate();
    this.maxWidth = maxWidth;
    this.maxHeight = maxHeight;
    this._margins = margins = Object.assign({
      left: 0,
      right: 0,
      top: 0,
      bottom: 0
    }, margins);
    this.ticks = null;
    this._labelSizes = null;
    this._gridLineItems = null;
    this._labelItems = null;
    this.beforeSetDimensions();
    this.setDimensions();
    this.afterSetDimensions();
    this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;
    if (!this._dataLimitsCached) {
      this.beforeDataLimits();
      this.determineDataLimits();
      this.afterDataLimits();
      this._range = _addGrace(this, grace, beginAtZero);
      this._dataLimitsCached = true;
    }
    this.beforeBuildTicks();
    this.ticks = this.buildTicks() || [];
    this.afterBuildTicks();
    const samplingEnabled = sampleSize < this.ticks.length;
    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);
    this.configure();
    this.beforeCalculateLabelRotation();
    this.calculateLabelRotation();
    this.afterCalculateLabelRotation();
    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === "auto")) {
      this.ticks = autoSkip(this, this.ticks);
      this._labelSizes = null;
      this.afterAutoSkip();
    }
    if (samplingEnabled) {
      this._convertTicksToLabels(this.ticks);
    }
    this.beforeFit();
    this.fit();
    this.afterFit();
    this.afterUpdate();
  }
  configure() {
    let reversePixels = this.options.reverse;
    let startPixel, endPixel;
    if (this.isHorizontal()) {
      startPixel = this.left;
      endPixel = this.right;
    } else {
      startPixel = this.top;
      endPixel = this.bottom;
      reversePixels = !reversePixels;
    }
    this._startPixel = startPixel;
    this._endPixel = endPixel;
    this._reversePixels = reversePixels;
    this._length = endPixel - startPixel;
    this._alignToPixels = this.options.alignToPixels;
  }
  afterUpdate() {
    callback(this.options.afterUpdate, [
      this
    ]);
  }
  beforeSetDimensions() {
    callback(this.options.beforeSetDimensions, [
      this
    ]);
  }
  setDimensions() {
    if (this.isHorizontal()) {
      this.width = this.maxWidth;
      this.left = 0;
      this.right = this.width;
    } else {
      this.height = this.maxHeight;
      this.top = 0;
      this.bottom = this.height;
    }
    this.paddingLeft = 0;
    this.paddingTop = 0;
    this.paddingRight = 0;
    this.paddingBottom = 0;
  }
  afterSetDimensions() {
    callback(this.options.afterSetDimensions, [
      this
    ]);
  }
  _callHooks(name) {
    this.chart.notifyPlugins(name, this.getContext());
    callback(this.options[name], [
      this
    ]);
  }
  beforeDataLimits() {
    this._callHooks("beforeDataLimits");
  }
  determineDataLimits() {
  }
  afterDataLimits() {
    this._callHooks("afterDataLimits");
  }
  beforeBuildTicks() {
    this._callHooks("beforeBuildTicks");
  }
  buildTicks() {
    return [];
  }
  afterBuildTicks() {
    this._callHooks("afterBuildTicks");
  }
  beforeTickToLabelConversion() {
    callback(this.options.beforeTickToLabelConversion, [
      this
    ]);
  }
  generateTickLabels(ticks) {
    const tickOpts = this.options.ticks;
    let i, ilen, tick;
    for (i = 0, ilen = ticks.length; i < ilen; i++) {
      tick = ticks[i];
      tick.label = callback(tickOpts.callback, [
        tick.value,
        i,
        ticks
      ], this);
    }
  }
  afterTickToLabelConversion() {
    callback(this.options.afterTickToLabelConversion, [
      this
    ]);
  }
  beforeCalculateLabelRotation() {
    callback(this.options.beforeCalculateLabelRotation, [
      this
    ]);
  }
  calculateLabelRotation() {
    const options2 = this.options;
    const tickOpts = options2.ticks;
    const numTicks = getTicksLimit(this.ticks.length, options2.ticks.maxTicksLimit);
    const minRotation = tickOpts.minRotation || 0;
    const maxRotation = tickOpts.maxRotation;
    let labelRotation = minRotation;
    let tickWidth, maxHeight, maxLabelDiagonal;
    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {
      this.labelRotation = minRotation;
      return;
    }
    const labelSizes = this._getLabelSizes();
    const maxLabelWidth = labelSizes.widest.width;
    const maxLabelHeight = labelSizes.highest.height;
    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);
    tickWidth = options2.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);
    if (maxLabelWidth + 6 > tickWidth) {
      tickWidth = maxWidth / (numTicks - (options2.offset ? 0.5 : 1));
      maxHeight = this.maxHeight - getTickMarkLength(options2.grid) - tickOpts.padding - getTitleHeight(options2.title, this.chart.options.font);
      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);
      labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));
      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));
    }
    this.labelRotation = labelRotation;
  }
  afterCalculateLabelRotation() {
    callback(this.options.afterCalculateLabelRotation, [
      this
    ]);
  }
  afterAutoSkip() {
  }
  beforeFit() {
    callback(this.options.beforeFit, [
      this
    ]);
  }
  fit() {
    const minSize = {
      width: 0,
      height: 0
    };
    const { chart, options: { ticks: tickOpts, title: titleOpts, grid: gridOpts } } = this;
    const display = this._isVisible();
    const isHorizontal = this.isHorizontal();
    if (display) {
      const titleHeight = getTitleHeight(titleOpts, chart.options.font);
      if (isHorizontal) {
        minSize.width = this.maxWidth;
        minSize.height = getTickMarkLength(gridOpts) + titleHeight;
      } else {
        minSize.height = this.maxHeight;
        minSize.width = getTickMarkLength(gridOpts) + titleHeight;
      }
      if (tickOpts.display && this.ticks.length) {
        const { first, last, widest, highest } = this._getLabelSizes();
        const tickPadding = tickOpts.padding * 2;
        const angleRadians = toRadians(this.labelRotation);
        const cos = Math.cos(angleRadians);
        const sin = Math.sin(angleRadians);
        if (isHorizontal) {
          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;
          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);
        } else {
          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;
          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);
        }
        this._calculatePadding(first, last, sin, cos);
      }
    }
    this._handleMargins();
    if (isHorizontal) {
      this.width = this._length = chart.width - this._margins.left - this._margins.right;
      this.height = minSize.height;
    } else {
      this.width = minSize.width;
      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;
    }
  }
  _calculatePadding(first, last, sin, cos) {
    const { ticks: { align, padding }, position } = this.options;
    const isRotated = this.labelRotation !== 0;
    const labelsBelowTicks = position !== "top" && this.axis === "x";
    if (this.isHorizontal()) {
      const offsetLeft = this.getPixelForTick(0) - this.left;
      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);
      let paddingLeft = 0;
      let paddingRight = 0;
      if (isRotated) {
        if (labelsBelowTicks) {
          paddingLeft = cos * first.width;
          paddingRight = sin * last.height;
        } else {
          paddingLeft = sin * first.height;
          paddingRight = cos * last.width;
        }
      } else if (align === "start") {
        paddingRight = last.width;
      } else if (align === "end") {
        paddingLeft = first.width;
      } else if (align !== "inner") {
        paddingLeft = first.width / 2;
        paddingRight = last.width / 2;
      }
      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);
      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);
    } else {
      let paddingTop = last.height / 2;
      let paddingBottom = first.height / 2;
      if (align === "start") {
        paddingTop = 0;
        paddingBottom = first.height;
      } else if (align === "end") {
        paddingTop = last.height;
        paddingBottom = 0;
      }
      this.paddingTop = paddingTop + padding;
      this.paddingBottom = paddingBottom + padding;
    }
  }
  _handleMargins() {
    if (this._margins) {
      this._margins.left = Math.max(this.paddingLeft, this._margins.left);
      this._margins.top = Math.max(this.paddingTop, this._margins.top);
      this._margins.right = Math.max(this.paddingRight, this._margins.right);
      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);
    }
  }
  afterFit() {
    callback(this.options.afterFit, [
      this
    ]);
  }
  isHorizontal() {
    const { axis, position } = this.options;
    return position === "top" || position === "bottom" || axis === "x";
  }
  isFullSize() {
    return this.options.fullSize;
  }
  _convertTicksToLabels(ticks) {
    this.beforeTickToLabelConversion();
    this.generateTickLabels(ticks);
    let i, ilen;
    for (i = 0, ilen = ticks.length; i < ilen; i++) {
      if (isNullOrUndef(ticks[i].label)) {
        ticks.splice(i, 1);
        ilen--;
        i--;
      }
    }
    this.afterTickToLabelConversion();
  }
  _getLabelSizes() {
    let labelSizes = this._labelSizes;
    if (!labelSizes) {
      const sampleSize = this.options.ticks.sampleSize;
      let ticks = this.ticks;
      if (sampleSize < ticks.length) {
        ticks = sample(ticks, sampleSize);
      }
      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);
    }
    return labelSizes;
  }
  _computeLabelSizes(ticks, length, maxTicksLimit) {
    const { ctx, _longestTextCache: caches } = this;
    const widths = [];
    const heights = [];
    const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));
    let widestLabelSize = 0;
    let highestLabelSize = 0;
    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;
    for (i = 0; i < length; i += increment) {
      label = ticks[i].label;
      tickFont = this._resolveTickFontOptions(i);
      ctx.font = fontString = tickFont.string;
      cache = caches[fontString] = caches[fontString] || {
        data: {},
        gc: []
      };
      lineHeight = tickFont.lineHeight;
      width = height = 0;
      if (!isNullOrUndef(label) && !isArray(label)) {
        width = _measureText(ctx, cache.data, cache.gc, width, label);
        height = lineHeight;
      } else if (isArray(label)) {
        for (j = 0, jlen = label.length; j < jlen; ++j) {
          nestedLabel = label[j];
          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {
            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);
            height += lineHeight;
          }
        }
      }
      widths.push(width);
      heights.push(height);
      widestLabelSize = Math.max(width, widestLabelSize);
      highestLabelSize = Math.max(height, highestLabelSize);
    }
    garbageCollect(caches, length);
    const widest = widths.indexOf(widestLabelSize);
    const highest = heights.indexOf(highestLabelSize);
    const valueAt = (idx) => ({
      width: widths[idx] || 0,
      height: heights[idx] || 0
    });
    return {
      first: valueAt(0),
      last: valueAt(length - 1),
      widest: valueAt(widest),
      highest: valueAt(highest),
      widths,
      heights
    };
  }
  getLabelForValue(value) {
    return value;
  }
  getPixelForValue(value, index) {
    return NaN;
  }
  getValueForPixel(pixel) {
  }
  getPixelForTick(index) {
    const ticks = this.ticks;
    if (index < 0 || index > ticks.length - 1) {
      return null;
    }
    return this.getPixelForValue(ticks[index].value);
  }
  getPixelForDecimal(decimal) {
    if (this._reversePixels) {
      decimal = 1 - decimal;
    }
    const pixel = this._startPixel + decimal * this._length;
    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);
  }
  getDecimalForPixel(pixel) {
    const decimal = (pixel - this._startPixel) / this._length;
    return this._reversePixels ? 1 - decimal : decimal;
  }
  getBasePixel() {
    return this.getPixelForValue(this.getBaseValue());
  }
  getBaseValue() {
    const { min, max } = this;
    return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;
  }
  getContext(index) {
    const ticks = this.ticks || [];
    if (index >= 0 && index < ticks.length) {
      const tick = ticks[index];
      return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));
    }
    return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));
  }
  _tickSize() {
    const optionTicks = this.options.ticks;
    const rot = toRadians(this.labelRotation);
    const cos = Math.abs(Math.cos(rot));
    const sin = Math.abs(Math.sin(rot));
    const labelSizes = this._getLabelSizes();
    const padding = optionTicks.autoSkipPadding || 0;
    const w = labelSizes ? labelSizes.widest.width + padding : 0;
    const h4 = labelSizes ? labelSizes.highest.height + padding : 0;
    return this.isHorizontal() ? h4 * cos > w * sin ? w / cos : h4 / sin : h4 * sin < w * cos ? h4 / cos : w / sin;
  }
  _isVisible() {
    const display = this.options.display;
    if (display !== "auto") {
      return !!display;
    }
    return this.getMatchingVisibleMetas().length > 0;
  }
  _computeGridLineItems(chartArea) {
    const axis = this.axis;
    const chart = this.chart;
    const options2 = this.options;
    const { grid, position, border } = options2;
    const offset = grid.offset;
    const isHorizontal = this.isHorizontal();
    const ticks = this.ticks;
    const ticksLength = ticks.length + (offset ? 1 : 0);
    const tl = getTickMarkLength(grid);
    const items = [];
    const borderOpts = border.setContext(this.getContext());
    const axisWidth = borderOpts.display ? borderOpts.width : 0;
    const axisHalfWidth = axisWidth / 2;
    const alignBorderValue = function(pixel) {
      return _alignPixel(chart, pixel, axisWidth);
    };
    let borderValue, i, lineValue, alignedLineValue;
    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;
    if (position === "top") {
      borderValue = alignBorderValue(this.bottom);
      ty1 = this.bottom - tl;
      ty2 = borderValue - axisHalfWidth;
      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;
      y2 = chartArea.bottom;
    } else if (position === "bottom") {
      borderValue = alignBorderValue(this.top);
      y1 = chartArea.top;
      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;
      ty1 = borderValue + axisHalfWidth;
      ty2 = this.top + tl;
    } else if (position === "left") {
      borderValue = alignBorderValue(this.right);
      tx1 = this.right - tl;
      tx2 = borderValue - axisHalfWidth;
      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;
      x2 = chartArea.right;
    } else if (position === "right") {
      borderValue = alignBorderValue(this.left);
      x1 = chartArea.left;
      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;
      tx1 = borderValue + axisHalfWidth;
      tx2 = this.left + tl;
    } else if (axis === "x") {
      if (position === "center") {
        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);
      } else if (isObject(position)) {
        const positionAxisID = Object.keys(position)[0];
        const value = position[positionAxisID];
        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));
      }
      y1 = chartArea.top;
      y2 = chartArea.bottom;
      ty1 = borderValue + axisHalfWidth;
      ty2 = ty1 + tl;
    } else if (axis === "y") {
      if (position === "center") {
        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);
      } else if (isObject(position)) {
        const positionAxisID = Object.keys(position)[0];
        const value = position[positionAxisID];
        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));
      }
      tx1 = borderValue - axisHalfWidth;
      tx2 = tx1 - tl;
      x1 = chartArea.left;
      x2 = chartArea.right;
    }
    const limit = valueOrDefault(options2.ticks.maxTicksLimit, ticksLength);
    const step = Math.max(1, Math.ceil(ticksLength / limit));
    for (i = 0; i < ticksLength; i += step) {
      const context = this.getContext(i);
      const optsAtIndex = grid.setContext(context);
      const optsAtIndexBorder = border.setContext(context);
      const lineWidth = optsAtIndex.lineWidth;
      const lineColor = optsAtIndex.color;
      const borderDash = optsAtIndexBorder.dash || [];
      const borderDashOffset = optsAtIndexBorder.dashOffset;
      const tickWidth = optsAtIndex.tickWidth;
      const tickColor = optsAtIndex.tickColor;
      const tickBorderDash = optsAtIndex.tickBorderDash || [];
      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;
      lineValue = getPixelForGridLine(this, i, offset);
      if (lineValue === void 0) {
        continue;
      }
      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);
      if (isHorizontal) {
        tx1 = tx2 = x1 = x2 = alignedLineValue;
      } else {
        ty1 = ty2 = y1 = y2 = alignedLineValue;
      }
      items.push({
        tx1,
        ty1,
        tx2,
        ty2,
        x1,
        y1,
        x2,
        y2,
        width: lineWidth,
        color: lineColor,
        borderDash,
        borderDashOffset,
        tickWidth,
        tickColor,
        tickBorderDash,
        tickBorderDashOffset
      });
    }
    this._ticksLength = ticksLength;
    this._borderValue = borderValue;
    return items;
  }
  _computeLabelItems(chartArea) {
    const axis = this.axis;
    const options2 = this.options;
    const { position, ticks: optionTicks } = options2;
    const isHorizontal = this.isHorizontal();
    const ticks = this.ticks;
    const { align, crossAlign, padding, mirror } = optionTicks;
    const tl = getTickMarkLength(options2.grid);
    const tickAndPadding = tl + padding;
    const hTickAndPadding = mirror ? -padding : tickAndPadding;
    const rotation = -toRadians(this.labelRotation);
    const items = [];
    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;
    let textBaseline = "middle";
    if (position === "top") {
      y = this.bottom - hTickAndPadding;
      textAlign = this._getXAxisLabelAlignment();
    } else if (position === "bottom") {
      y = this.top + hTickAndPadding;
      textAlign = this._getXAxisLabelAlignment();
    } else if (position === "left") {
      const ret = this._getYAxisLabelAlignment(tl);
      textAlign = ret.textAlign;
      x = ret.x;
    } else if (position === "right") {
      const ret = this._getYAxisLabelAlignment(tl);
      textAlign = ret.textAlign;
      x = ret.x;
    } else if (axis === "x") {
      if (position === "center") {
        y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;
      } else if (isObject(position)) {
        const positionAxisID = Object.keys(position)[0];
        const value = position[positionAxisID];
        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;
      }
      textAlign = this._getXAxisLabelAlignment();
    } else if (axis === "y") {
      if (position === "center") {
        x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;
      } else if (isObject(position)) {
        const positionAxisID = Object.keys(position)[0];
        const value = position[positionAxisID];
        x = this.chart.scales[positionAxisID].getPixelForValue(value);
      }
      textAlign = this._getYAxisLabelAlignment(tl).textAlign;
    }
    if (axis === "y") {
      if (align === "start") {
        textBaseline = "top";
      } else if (align === "end") {
        textBaseline = "bottom";
      }
    }
    const labelSizes = this._getLabelSizes();
    for (i = 0, ilen = ticks.length; i < ilen; ++i) {
      tick = ticks[i];
      label = tick.label;
      const optsAtIndex = optionTicks.setContext(this.getContext(i));
      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;
      font = this._resolveTickFontOptions(i);
      lineHeight = font.lineHeight;
      lineCount = isArray(label) ? label.length : 1;
      const halfCount = lineCount / 2;
      const color2 = optsAtIndex.color;
      const strokeColor = optsAtIndex.textStrokeColor;
      const strokeWidth = optsAtIndex.textStrokeWidth;
      let tickTextAlign = textAlign;
      if (isHorizontal) {
        x = pixel;
        if (textAlign === "inner") {
          if (i === ilen - 1) {
            tickTextAlign = !this.options.reverse ? "right" : "left";
          } else if (i === 0) {
            tickTextAlign = !this.options.reverse ? "left" : "right";
          } else {
            tickTextAlign = "center";
          }
        }
        if (position === "top") {
          if (crossAlign === "near" || rotation !== 0) {
            textOffset = -lineCount * lineHeight + lineHeight / 2;
          } else if (crossAlign === "center") {
            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;
          } else {
            textOffset = -labelSizes.highest.height + lineHeight / 2;
          }
        } else {
          if (crossAlign === "near" || rotation !== 0) {
            textOffset = lineHeight / 2;
          } else if (crossAlign === "center") {
            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;
          } else {
            textOffset = labelSizes.highest.height - lineCount * lineHeight;
          }
        }
        if (mirror) {
          textOffset *= -1;
        }
        if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {
          x += lineHeight / 2 * Math.sin(rotation);
        }
      } else {
        y = pixel;
        textOffset = (1 - lineCount) * lineHeight / 2;
      }
      let backdrop;
      if (optsAtIndex.showLabelBackdrop) {
        const labelPadding = toPadding(optsAtIndex.backdropPadding);
        const height = labelSizes.heights[i];
        const width = labelSizes.widths[i];
        let top = textOffset - labelPadding.top;
        let left = 0 - labelPadding.left;
        switch (textBaseline) {
          case "middle":
            top -= height / 2;
            break;
          case "bottom":
            top -= height;
            break;
        }
        switch (textAlign) {
          case "center":
            left -= width / 2;
            break;
          case "right":
            left -= width;
            break;
          case "inner":
            if (i === ilen - 1) {
              left -= width;
            } else if (i > 0) {
              left -= width / 2;
            }
            break;
        }
        backdrop = {
          left,
          top,
          width: width + labelPadding.width,
          height: height + labelPadding.height,
          color: optsAtIndex.backdropColor
        };
      }
      items.push({
        label,
        font,
        textOffset,
        options: {
          rotation,
          color: color2,
          strokeColor,
          strokeWidth,
          textAlign: tickTextAlign,
          textBaseline,
          translation: [
            x,
            y
          ],
          backdrop
        }
      });
    }
    return items;
  }
  _getXAxisLabelAlignment() {
    const { position, ticks } = this.options;
    const rotation = -toRadians(this.labelRotation);
    if (rotation) {
      return position === "top" ? "left" : "right";
    }
    let align = "center";
    if (ticks.align === "start") {
      align = "left";
    } else if (ticks.align === "end") {
      align = "right";
    } else if (ticks.align === "inner") {
      align = "inner";
    }
    return align;
  }
  _getYAxisLabelAlignment(tl) {
    const { position, ticks: { crossAlign, mirror, padding } } = this.options;
    const labelSizes = this._getLabelSizes();
    const tickAndPadding = tl + padding;
    const widest = labelSizes.widest.width;
    let textAlign;
    let x;
    if (position === "left") {
      if (mirror) {
        x = this.right + padding;
        if (crossAlign === "near") {
          textAlign = "left";
        } else if (crossAlign === "center") {
          textAlign = "center";
          x += widest / 2;
        } else {
          textAlign = "right";
          x += widest;
        }
      } else {
        x = this.right - tickAndPadding;
        if (crossAlign === "near") {
          textAlign = "right";
        } else if (crossAlign === "center") {
          textAlign = "center";
          x -= widest / 2;
        } else {
          textAlign = "left";
          x = this.left;
        }
      }
    } else if (position === "right") {
      if (mirror) {
        x = this.left + padding;
        if (crossAlign === "near") {
          textAlign = "right";
        } else if (crossAlign === "center") {
          textAlign = "center";
          x -= widest / 2;
        } else {
          textAlign = "left";
          x -= widest;
        }
      } else {
        x = this.left + tickAndPadding;
        if (crossAlign === "near") {
          textAlign = "left";
        } else if (crossAlign === "center") {
          textAlign = "center";
          x += widest / 2;
        } else {
          textAlign = "right";
          x = this.right;
        }
      }
    } else {
      textAlign = "right";
    }
    return {
      textAlign,
      x
    };
  }
  _computeLabelArea() {
    if (this.options.ticks.mirror) {
      return;
    }
    const chart = this.chart;
    const position = this.options.position;
    if (position === "left" || position === "right") {
      return {
        top: 0,
        left: this.left,
        bottom: chart.height,
        right: this.right
      };
    }
    if (position === "top" || position === "bottom") {
      return {
        top: this.top,
        left: 0,
        bottom: this.bottom,
        right: chart.width
      };
    }
  }
  drawBackground() {
    const { ctx, options: { backgroundColor }, left, top, width, height } = this;
    if (backgroundColor) {
      ctx.save();
      ctx.fillStyle = backgroundColor;
      ctx.fillRect(left, top, width, height);
      ctx.restore();
    }
  }
  getLineWidthForValue(value) {
    const grid = this.options.grid;
    if (!this._isVisible() || !grid.display) {
      return 0;
    }
    const ticks = this.ticks;
    const index = ticks.findIndex((t2) => t2.value === value);
    if (index >= 0) {
      const opts = grid.setContext(this.getContext(index));
      return opts.lineWidth;
    }
    return 0;
  }
  drawGrid(chartArea) {
    const grid = this.options.grid;
    const ctx = this.ctx;
    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));
    let i, ilen;
    const drawLine = (p1, p2, style) => {
      if (!style.width || !style.color) {
        return;
      }
      ctx.save();
      ctx.lineWidth = style.width;
      ctx.strokeStyle = style.color;
      ctx.setLineDash(style.borderDash || []);
      ctx.lineDashOffset = style.borderDashOffset;
      ctx.beginPath();
      ctx.moveTo(p1.x, p1.y);
      ctx.lineTo(p2.x, p2.y);
      ctx.stroke();
      ctx.restore();
    };
    if (grid.display) {
      for (i = 0, ilen = items.length; i < ilen; ++i) {
        const item = items[i];
        if (grid.drawOnChartArea) {
          drawLine({
            x: item.x1,
            y: item.y1
          }, {
            x: item.x2,
            y: item.y2
          }, item);
        }
        if (grid.drawTicks) {
          drawLine({
            x: item.tx1,
            y: item.ty1
          }, {
            x: item.tx2,
            y: item.ty2
          }, {
            color: item.tickColor,
            width: item.tickWidth,
            borderDash: item.tickBorderDash,
            borderDashOffset: item.tickBorderDashOffset
          });
        }
      }
    }
  }
  drawBorder() {
    const { chart, ctx, options: { border, grid } } = this;
    const borderOpts = border.setContext(this.getContext());
    const axisWidth = border.display ? borderOpts.width : 0;
    if (!axisWidth) {
      return;
    }
    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;
    const borderValue = this._borderValue;
    let x1, x2, y1, y2;
    if (this.isHorizontal()) {
      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;
      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;
      y1 = y2 = borderValue;
    } else {
      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;
      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;
      x1 = x2 = borderValue;
    }
    ctx.save();
    ctx.lineWidth = borderOpts.width;
    ctx.strokeStyle = borderOpts.color;
    ctx.beginPath();
    ctx.moveTo(x1, y1);
    ctx.lineTo(x2, y2);
    ctx.stroke();
    ctx.restore();
  }
  drawLabels(chartArea) {
    const optionTicks = this.options.ticks;
    if (!optionTicks.display) {
      return;
    }
    const ctx = this.ctx;
    const area = this._computeLabelArea();
    if (area) {
      clipArea(ctx, area);
    }
    const items = this.getLabelItems(chartArea);
    for (const item of items) {
      const renderTextOptions = item.options;
      const tickFont = item.font;
      const label = item.label;
      const y = item.textOffset;
      renderText(ctx, label, 0, y, tickFont, renderTextOptions);
    }
    if (area) {
      unclipArea(ctx);
    }
  }
  drawTitle() {
    const { ctx, options: { position, title, reverse } } = this;
    if (!title.display) {
      return;
    }
    const font = toFont(title.font);
    const padding = toPadding(title.padding);
    const align = title.align;
    let offset = font.lineHeight / 2;
    if (position === "bottom" || position === "center" || isObject(position)) {
      offset += padding.bottom;
      if (isArray(title.text)) {
        offset += font.lineHeight * (title.text.length - 1);
      }
    } else {
      offset += padding.top;
    }
    const { titleX, titleY, maxWidth, rotation } = titleArgs(this, offset, position, align);
    renderText(ctx, title.text, 0, 0, font, {
      color: title.color,
      maxWidth,
      rotation,
      textAlign: titleAlign(align, position, reverse),
      textBaseline: "middle",
      translation: [
        titleX,
        titleY
      ]
    });
  }
  draw(chartArea) {
    if (!this._isVisible()) {
      return;
    }
    this.drawBackground();
    this.drawGrid(chartArea);
    this.drawBorder();
    this.drawTitle();
    this.drawLabels(chartArea);
  }
  _layers() {
    const opts = this.options;
    const tz = opts.ticks && opts.ticks.z || 0;
    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);
    const bz = valueOrDefault(opts.border && opts.border.z, 0);
    if (!this._isVisible() || this.draw !== _Scale.prototype.draw) {
      return [
        {
          z: tz,
          draw: (chartArea) => {
            this.draw(chartArea);
          }
        }
      ];
    }
    return [
      {
        z: gz,
        draw: (chartArea) => {
          this.drawBackground();
          this.drawGrid(chartArea);
          this.drawTitle();
        }
      },
      {
        z: bz,
        draw: () => {
          this.drawBorder();
        }
      },
      {
        z: tz,
        draw: (chartArea) => {
          this.drawLabels(chartArea);
        }
      }
    ];
  }
  getMatchingVisibleMetas(type) {
    const metas = this.chart.getSortedVisibleDatasetMetas();
    const axisID = this.axis + "AxisID";
    const result = [];
    let i, ilen;
    for (i = 0, ilen = metas.length; i < ilen; ++i) {
      const meta = metas[i];
      if (meta[axisID] === this.id && (!type || meta.type === type)) {
        result.push(meta);
      }
    }
    return result;
  }
  _resolveTickFontOptions(index) {
    const opts = this.options.ticks.setContext(this.getContext(index));
    return toFont(opts.font);
  }
  _maxDigits() {
    const fontSize = this._resolveTickFontOptions(0).lineHeight;
    return (this.isHorizontal() ? this.width : this.height) / fontSize;
  }
};
var TypedRegistry = class {
  constructor(type, scope, override) {
    this.type = type;
    this.scope = scope;
    this.override = override;
    this.items = /* @__PURE__ */ Object.create(null);
  }
  isForType(type) {
    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);
  }
  register(item) {
    const proto = Object.getPrototypeOf(item);
    let parentScope;
    if (isIChartComponent(proto)) {
      parentScope = this.register(proto);
    }
    const items = this.items;
    const id = item.id;
    const scope = this.scope + "." + id;
    if (!id) {
      throw new Error("class does not have id: " + item);
    }
    if (id in items) {
      return scope;
    }
    items[id] = item;
    registerDefaults(item, scope, parentScope);
    if (this.override) {
      defaults2.override(item.id, item.overrides);
    }
    return scope;
  }
  get(id) {
    return this.items[id];
  }
  unregister(item) {
    const items = this.items;
    const id = item.id;
    const scope = this.scope;
    if (id in items) {
      delete items[id];
    }
    if (scope && id in defaults2[scope]) {
      delete defaults2[scope][id];
      if (this.override) {
        delete overrides[id];
      }
    }
  }
};
function registerDefaults(item, scope, parentScope) {
  const itemDefaults = merge(/* @__PURE__ */ Object.create(null), [
    parentScope ? defaults2.get(parentScope) : {},
    defaults2.get(scope),
    item.defaults
  ]);
  defaults2.set(scope, itemDefaults);
  if (item.defaultRoutes) {
    routeDefaults(scope, item.defaultRoutes);
  }
  if (item.descriptors) {
    defaults2.describe(scope, item.descriptors);
  }
}
function routeDefaults(scope, routes) {
  Object.keys(routes).forEach((property) => {
    const propertyParts = property.split(".");
    const sourceName = propertyParts.pop();
    const sourceScope = [
      scope
    ].concat(propertyParts).join(".");
    const parts = routes[property].split(".");
    const targetName = parts.pop();
    const targetScope = parts.join(".");
    defaults2.route(sourceScope, sourceName, targetScope, targetName);
  });
}
function isIChartComponent(proto) {
  return "id" in proto && "defaults" in proto;
}
var Registry = class {
  constructor() {
    this.controllers = new TypedRegistry(DatasetController, "datasets", true);
    this.elements = new TypedRegistry(Element, "elements");
    this.plugins = new TypedRegistry(Object, "plugins");
    this.scales = new TypedRegistry(Scale, "scales");
    this._typedRegistries = [
      this.controllers,
      this.scales,
      this.elements
    ];
  }
  add(...args) {
    this._each("register", args);
  }
  remove(...args) {
    this._each("unregister", args);
  }
  addControllers(...args) {
    this._each("register", args, this.controllers);
  }
  addElements(...args) {
    this._each("register", args, this.elements);
  }
  addPlugins(...args) {
    this._each("register", args, this.plugins);
  }
  addScales(...args) {
    this._each("register", args, this.scales);
  }
  getController(id) {
    return this._get(id, this.controllers, "controller");
  }
  getElement(id) {
    return this._get(id, this.elements, "element");
  }
  getPlugin(id) {
    return this._get(id, this.plugins, "plugin");
  }
  getScale(id) {
    return this._get(id, this.scales, "scale");
  }
  removeControllers(...args) {
    this._each("unregister", args, this.controllers);
  }
  removeElements(...args) {
    this._each("unregister", args, this.elements);
  }
  removePlugins(...args) {
    this._each("unregister", args, this.plugins);
  }
  removeScales(...args) {
    this._each("unregister", args, this.scales);
  }
  _each(method, args, typedRegistry) {
    [
      ...args
    ].forEach((arg) => {
      const reg = typedRegistry || this._getRegistryForType(arg);
      if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {
        this._exec(method, reg, arg);
      } else {
        each(arg, (item) => {
          const itemReg = typedRegistry || this._getRegistryForType(item);
          this._exec(method, itemReg, item);
        });
      }
    });
  }
  _exec(method, registry2, component) {
    const camelMethod = _capitalize(method);
    callback(component["before" + camelMethod], [], component);
    registry2[method](component);
    callback(component["after" + camelMethod], [], component);
  }
  _getRegistryForType(type) {
    for (let i = 0; i < this._typedRegistries.length; i++) {
      const reg = this._typedRegistries[i];
      if (reg.isForType(type)) {
        return reg;
      }
    }
    return this.plugins;
  }
  _get(id, typedRegistry, type) {
    const item = typedRegistry.get(id);
    if (item === void 0) {
      throw new Error('"' + id + '" is not a registered ' + type + ".");
    }
    return item;
  }
};
var registry = /* @__PURE__ */ new Registry();
var PluginService = class {
  constructor() {
    this._init = [];
  }
  notify(chart, hook, args, filter2) {
    if (hook === "beforeInit") {
      this._init = this._createDescriptors(chart, true);
      this._notify(this._init, chart, "install");
    }
    const descriptors2 = filter2 ? this._descriptors(chart).filter(filter2) : this._descriptors(chart);
    const result = this._notify(descriptors2, chart, hook, args);
    if (hook === "afterDestroy") {
      this._notify(descriptors2, chart, "stop");
      this._notify(this._init, chart, "uninstall");
    }
    return result;
  }
  _notify(descriptors2, chart, hook, args) {
    args = args || {};
    for (const descriptor of descriptors2) {
      const plugin = descriptor.plugin;
      const method = plugin[hook];
      const params = [
        chart,
        args,
        descriptor.options
      ];
      if (callback(method, params, plugin) === false && args.cancelable) {
        return false;
      }
    }
    return true;
  }
  invalidate() {
    if (!isNullOrUndef(this._cache)) {
      this._oldCache = this._cache;
      this._cache = void 0;
    }
  }
  _descriptors(chart) {
    if (this._cache) {
      return this._cache;
    }
    const descriptors2 = this._cache = this._createDescriptors(chart);
    this._notifyStateChanges(chart);
    return descriptors2;
  }
  _createDescriptors(chart, all) {
    const config = chart && chart.config;
    const options2 = valueOrDefault(config.options && config.options.plugins, {});
    const plugins = allPlugins(config);
    return options2 === false && !all ? [] : createDescriptors(chart, plugins, options2, all);
  }
  _notifyStateChanges(chart) {
    const previousDescriptors = this._oldCache || [];
    const descriptors2 = this._cache;
    const diff = (a, b) => a.filter((x) => !b.some((y) => x.plugin.id === y.plugin.id));
    this._notify(diff(previousDescriptors, descriptors2), chart, "stop");
    this._notify(diff(descriptors2, previousDescriptors), chart, "start");
  }
};
function allPlugins(config) {
  const localIds = {};
  const plugins = [];
  const keys = Object.keys(registry.plugins.items);
  for (let i = 0; i < keys.length; i++) {
    plugins.push(registry.getPlugin(keys[i]));
  }
  const local = config.plugins || [];
  for (let i = 0; i < local.length; i++) {
    const plugin = local[i];
    if (plugins.indexOf(plugin) === -1) {
      plugins.push(plugin);
      localIds[plugin.id] = true;
    }
  }
  return {
    plugins,
    localIds
  };
}
function getOpts(options2, all) {
  if (!all && options2 === false) {
    return null;
  }
  if (options2 === true) {
    return {};
  }
  return options2;
}
function createDescriptors(chart, { plugins, localIds }, options2, all) {
  const result = [];
  const context = chart.getContext();
  for (const plugin of plugins) {
    const id = plugin.id;
    const opts = getOpts(options2[id], all);
    if (opts === null) {
      continue;
    }
    result.push({
      plugin,
      options: pluginOpts(chart.config, {
        plugin,
        local: localIds[id]
      }, opts, context)
    });
  }
  return result;
}
function pluginOpts(config, { plugin, local }, opts, context) {
  const keys = config.pluginScopeKeys(plugin);
  const scopes = config.getOptionScopes(opts, keys);
  if (local && plugin.defaults) {
    scopes.push(plugin.defaults);
  }
  return config.createResolver(scopes, context, [
    ""
  ], {
    scriptable: false,
    indexable: false,
    allKeys: true
  });
}
function getIndexAxis(type, options2) {
  const datasetDefaults = defaults2.datasets[type] || {};
  const datasetOptions = (options2.datasets || {})[type] || {};
  return datasetOptions.indexAxis || options2.indexAxis || datasetDefaults.indexAxis || "x";
}
function getAxisFromDefaultScaleID(id, indexAxis) {
  let axis = id;
  if (id === "_index_") {
    axis = indexAxis;
  } else if (id === "_value_") {
    axis = indexAxis === "x" ? "y" : "x";
  }
  return axis;
}
function getDefaultScaleIDFromAxis(axis, indexAxis) {
  return axis === indexAxis ? "_index_" : "_value_";
}
function idMatchesAxis(id) {
  if (id === "x" || id === "y" || id === "r") {
    return id;
  }
}
function axisFromPosition(position) {
  if (position === "top" || position === "bottom") {
    return "x";
  }
  if (position === "left" || position === "right") {
    return "y";
  }
}
function determineAxis(id, ...scaleOptions) {
  if (idMatchesAxis(id)) {
    return id;
  }
  for (const opts of scaleOptions) {
    const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());
    if (axis) {
      return axis;
    }
  }
  throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);
}
function getAxisFromDataset(id, axis, dataset) {
  if (dataset[axis + "AxisID"] === id) {
    return {
      axis
    };
  }
}
function retrieveAxisFromDatasets(id, config) {
  if (config.data && config.data.datasets) {
    const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);
    if (boundDs.length) {
      return getAxisFromDataset(id, "x", boundDs[0]) || getAxisFromDataset(id, "y", boundDs[0]);
    }
  }
  return {};
}
function mergeScaleConfig(config, options2) {
  const chartDefaults = overrides[config.type] || {
    scales: {}
  };
  const configScales = options2.scales || {};
  const chartIndexAxis = getIndexAxis(config.type, options2);
  const scales = /* @__PURE__ */ Object.create(null);
  Object.keys(configScales).forEach((id) => {
    const scaleConf = configScales[id];
    if (!isObject(scaleConf)) {
      return console.error(`Invalid scale configuration for scale: ${id}`);
    }
    if (scaleConf._proxy) {
      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);
    }
    const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults2.scales[scaleConf.type]);
    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);
    const defaultScaleOptions = chartDefaults.scales || {};
    scales[id] = mergeIf(/* @__PURE__ */ Object.create(null), [
      {
        axis
      },
      scaleConf,
      defaultScaleOptions[axis],
      defaultScaleOptions[defaultId]
    ]);
  });
  config.data.datasets.forEach((dataset) => {
    const type = dataset.type || config.type;
    const indexAxis = dataset.indexAxis || getIndexAxis(type, options2);
    const datasetDefaults = overrides[type] || {};
    const defaultScaleOptions = datasetDefaults.scales || {};
    Object.keys(defaultScaleOptions).forEach((defaultID) => {
      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);
      const id = dataset[axis + "AxisID"] || axis;
      scales[id] = scales[id] || /* @__PURE__ */ Object.create(null);
      mergeIf(scales[id], [
        {
          axis
        },
        configScales[id],
        defaultScaleOptions[defaultID]
      ]);
    });
  });
  Object.keys(scales).forEach((key) => {
    const scale = scales[key];
    mergeIf(scale, [
      defaults2.scales[scale.type],
      defaults2.scale
    ]);
  });
  return scales;
}
function initOptions(config) {
  const options2 = config.options || (config.options = {});
  options2.plugins = valueOrDefault(options2.plugins, {});
  options2.scales = mergeScaleConfig(config, options2);
}
function initData(data) {
  data = data || {};
  data.datasets = data.datasets || [];
  data.labels = data.labels || [];
  return data;
}
function initConfig(config) {
  config = config || {};
  config.data = initData(config.data);
  initOptions(config);
  return config;
}
var keyCache = /* @__PURE__ */ new Map();
var keysCached = /* @__PURE__ */ new Set();
function cachedKeys(cacheKey, generate2) {
  let keys = keyCache.get(cacheKey);
  if (!keys) {
    keys = generate2();
    keyCache.set(cacheKey, keys);
    keysCached.add(keys);
  }
  return keys;
}
var addIfFound = (set2, obj, key) => {
  const opts = resolveObjectKey(obj, key);
  if (opts !== void 0) {
    set2.add(opts);
  }
};
var Config = class {
  constructor(config) {
    this._config = initConfig(config);
    this._scopeCache = /* @__PURE__ */ new Map();
    this._resolverCache = /* @__PURE__ */ new Map();
  }
  get platform() {
    return this._config.platform;
  }
  get type() {
    return this._config.type;
  }
  set type(type) {
    this._config.type = type;
  }
  get data() {
    return this._config.data;
  }
  set data(data) {
    this._config.data = initData(data);
  }
  get options() {
    return this._config.options;
  }
  set options(options2) {
    this._config.options = options2;
  }
  get plugins() {
    return this._config.plugins;
  }
  update() {
    const config = this._config;
    this.clearCache();
    initOptions(config);
  }
  clearCache() {
    this._scopeCache.clear();
    this._resolverCache.clear();
  }
  datasetScopeKeys(datasetType) {
    return cachedKeys(datasetType, () => [
      [
        `datasets.${datasetType}`,
        ""
      ]
    ]);
  }
  datasetAnimationScopeKeys(datasetType, transition) {
    return cachedKeys(`${datasetType}.transition.${transition}`, () => [
      [
        `datasets.${datasetType}.transitions.${transition}`,
        `transitions.${transition}`
      ],
      [
        `datasets.${datasetType}`,
        ""
      ]
    ]);
  }
  datasetElementScopeKeys(datasetType, elementType) {
    return cachedKeys(`${datasetType}-${elementType}`, () => [
      [
        `datasets.${datasetType}.elements.${elementType}`,
        `datasets.${datasetType}`,
        `elements.${elementType}`,
        ""
      ]
    ]);
  }
  pluginScopeKeys(plugin) {
    const id = plugin.id;
    const type = this.type;
    return cachedKeys(`${type}-plugin-${id}`, () => [
      [
        `plugins.${id}`,
        ...plugin.additionalOptionScopes || []
      ]
    ]);
  }
  _cachedScopes(mainScope, resetCache) {
    const _scopeCache = this._scopeCache;
    let cache = _scopeCache.get(mainScope);
    if (!cache || resetCache) {
      cache = /* @__PURE__ */ new Map();
      _scopeCache.set(mainScope, cache);
    }
    return cache;
  }
  getOptionScopes(mainScope, keyLists, resetCache) {
    const { options: options2, type } = this;
    const cache = this._cachedScopes(mainScope, resetCache);
    const cached = cache.get(keyLists);
    if (cached) {
      return cached;
    }
    const scopes = /* @__PURE__ */ new Set();
    keyLists.forEach((keys) => {
      if (mainScope) {
        scopes.add(mainScope);
        keys.forEach((key) => addIfFound(scopes, mainScope, key));
      }
      keys.forEach((key) => addIfFound(scopes, options2, key));
      keys.forEach((key) => addIfFound(scopes, overrides[type] || {}, key));
      keys.forEach((key) => addIfFound(scopes, defaults2, key));
      keys.forEach((key) => addIfFound(scopes, descriptors, key));
    });
    const array = Array.from(scopes);
    if (array.length === 0) {
      array.push(/* @__PURE__ */ Object.create(null));
    }
    if (keysCached.has(keyLists)) {
      cache.set(keyLists, array);
    }
    return array;
  }
  chartOptionScopes() {
    const { options: options2, type } = this;
    return [
      options2,
      overrides[type] || {},
      defaults2.datasets[type] || {},
      {
        type
      },
      defaults2,
      descriptors
    ];
  }
  resolveNamedOptions(scopes, names2, context, prefixes = [
    ""
  ]) {
    const result = {
      $shared: true
    };
    const { resolver, subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);
    let options2 = resolver;
    if (needContext(resolver, names2)) {
      result.$shared = false;
      context = isFunction(context) ? context() : context;
      const subResolver = this.createResolver(scopes, context, subPrefixes);
      options2 = _attachContext(resolver, context, subResolver);
    }
    for (const prop of names2) {
      result[prop] = options2[prop];
    }
    return result;
  }
  createResolver(scopes, context, prefixes = [
    ""
  ], descriptorDefaults) {
    const { resolver } = getResolver(this._resolverCache, scopes, prefixes);
    return isObject(context) ? _attachContext(resolver, context, void 0, descriptorDefaults) : resolver;
  }
};
function getResolver(resolverCache, scopes, prefixes) {
  let cache = resolverCache.get(scopes);
  if (!cache) {
    cache = /* @__PURE__ */ new Map();
    resolverCache.set(scopes, cache);
  }
  const cacheKey = prefixes.join();
  let cached = cache.get(cacheKey);
  if (!cached) {
    const resolver = _createResolver(scopes, prefixes);
    cached = {
      resolver,
      subPrefixes: prefixes.filter((p) => !p.toLowerCase().includes("hover"))
    };
    cache.set(cacheKey, cached);
  }
  return cached;
}
var hasFunction = (value) => isObject(value) && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));
function needContext(proxy, names2) {
  const { isScriptable, isIndexable } = _descriptors(proxy);
  for (const prop of names2) {
    const scriptable = isScriptable(prop);
    const indexable = isIndexable(prop);
    const value = (indexable || scriptable) && proxy[prop];
    if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {
      return true;
    }
  }
  return false;
}
var version2 = "4.4.4";
var KNOWN_POSITIONS = [
  "top",
  "bottom",
  "left",
  "right",
  "chartArea"
];
function positionIsHorizontal(position, axis) {
  return position === "top" || position === "bottom" || KNOWN_POSITIONS.indexOf(position) === -1 && axis === "x";
}
function compare2Level(l1, l2) {
  return function(a, b) {
    return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];
  };
}
function onAnimationsComplete(context) {
  const chart = context.chart;
  const animationOptions = chart.options.animation;
  chart.notifyPlugins("afterRender");
  callback(animationOptions && animationOptions.onComplete, [
    context
  ], chart);
}
function onAnimationProgress(context) {
  const chart = context.chart;
  const animationOptions = chart.options.animation;
  callback(animationOptions && animationOptions.onProgress, [
    context
  ], chart);
}
function getCanvas(item) {
  if (_isDomSupported() && typeof item === "string") {
    item = document.getElementById(item);
  } else if (item && item.length) {
    item = item[0];
  }
  if (item && item.canvas) {
    item = item.canvas;
  }
  return item;
}
var instances = {};
var getChart = (key) => {
  const canvas = getCanvas(key);
  return Object.values(instances).filter((c) => c.canvas === canvas).pop();
};
function moveNumericKeys(obj, start, move) {
  const keys = Object.keys(obj);
  for (const key of keys) {
    const intKey = +key;
    if (intKey >= start) {
      const value = obj[key];
      delete obj[key];
      if (move > 0 || intKey > start) {
        obj[intKey + move] = value;
      }
    }
  }
}
function determineLastEvent(e, lastEvent, inChartArea, isClick) {
  if (!inChartArea || e.type === "mouseout") {
    return null;
  }
  if (isClick) {
    return lastEvent;
  }
  return e;
}
function getSizeForArea(scale, chartArea, field) {
  return scale.options.clip ? scale[field] : chartArea[field];
}
function getDatasetArea(meta, chartArea) {
  const { xScale, yScale } = meta;
  if (xScale && yScale) {
    return {
      left: getSizeForArea(xScale, chartArea, "left"),
      right: getSizeForArea(xScale, chartArea, "right"),
      top: getSizeForArea(yScale, chartArea, "top"),
      bottom: getSizeForArea(yScale, chartArea, "bottom")
    };
  }
  return chartArea;
}
var Chart = class {
  static register(...items) {
    registry.add(...items);
    invalidatePlugins();
  }
  static unregister(...items) {
    registry.remove(...items);
    invalidatePlugins();
  }
  constructor(item, userConfig) {
    const config = this.config = new Config(userConfig);
    const initialCanvas = getCanvas(item);
    const existingChart = getChart(initialCanvas);
    if (existingChart) {
      throw new Error("Canvas is already in use. Chart with ID '" + existingChart.id + "' must be destroyed before the canvas with ID '" + existingChart.canvas.id + "' can be reused.");
    }
    const options2 = config.createResolver(config.chartOptionScopes(), this.getContext());
    this.platform = new (config.platform || _detectPlatform(initialCanvas))();
    this.platform.updateConfig(config);
    const context = this.platform.acquireContext(initialCanvas, options2.aspectRatio);
    const canvas = context && context.canvas;
    const height = canvas && canvas.height;
    const width = canvas && canvas.width;
    this.id = uid();
    this.ctx = context;
    this.canvas = canvas;
    this.width = width;
    this.height = height;
    this._options = options2;
    this._aspectRatio = this.aspectRatio;
    this._layers = [];
    this._metasets = [];
    this._stacks = void 0;
    this.boxes = [];
    this.currentDevicePixelRatio = void 0;
    this.chartArea = void 0;
    this._active = [];
    this._lastEvent = void 0;
    this._listeners = {};
    this._responsiveListeners = void 0;
    this._sortedMetasets = [];
    this.scales = {};
    this._plugins = new PluginService();
    this.$proxies = {};
    this._hiddenIndices = {};
    this.attached = false;
    this._animationsDisabled = void 0;
    this.$context = void 0;
    this._doResize = debounce((mode) => this.update(mode), options2.resizeDelay || 0);
    this._dataChanges = [];
    instances[this.id] = this;
    if (!context || !canvas) {
      console.error("Failed to create chart: can't acquire context from the given item");
      return;
    }
    animator.listen(this, "complete", onAnimationsComplete);
    animator.listen(this, "progress", onAnimationProgress);
    this._initialize();
    if (this.attached) {
      this.update();
    }
  }
  get aspectRatio() {
    const { options: { aspectRatio, maintainAspectRatio }, width, height, _aspectRatio } = this;
    if (!isNullOrUndef(aspectRatio)) {
      return aspectRatio;
    }
    if (maintainAspectRatio && _aspectRatio) {
      return _aspectRatio;
    }
    return height ? width / height : null;
  }
  get data() {
    return this.config.data;
  }
  set data(data) {
    this.config.data = data;
  }
  get options() {
    return this._options;
  }
  set options(options2) {
    this.config.options = options2;
  }
  get registry() {
    return registry;
  }
  _initialize() {
    this.notifyPlugins("beforeInit");
    if (this.options.responsive) {
      this.resize();
    } else {
      retinaScale(this, this.options.devicePixelRatio);
    }
    this.bindEvents();
    this.notifyPlugins("afterInit");
    return this;
  }
  clear() {
    clearCanvas(this.canvas, this.ctx);
    return this;
  }
  stop() {
    animator.stop(this);
    return this;
  }
  resize(width, height) {
    if (!animator.running(this)) {
      this._resize(width, height);
    } else {
      this._resizeBeforeDraw = {
        width,
        height
      };
    }
  }
  _resize(width, height) {
    const options2 = this.options;
    const canvas = this.canvas;
    const aspectRatio = options2.maintainAspectRatio && this.aspectRatio;
    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);
    const newRatio = options2.devicePixelRatio || this.platform.getDevicePixelRatio();
    const mode = this.width ? "resize" : "attach";
    this.width = newSize.width;
    this.height = newSize.height;
    this._aspectRatio = this.aspectRatio;
    if (!retinaScale(this, newRatio, true)) {
      return;
    }
    this.notifyPlugins("resize", {
      size: newSize
    });
    callback(options2.onResize, [
      this,
      newSize
    ], this);
    if (this.attached) {
      if (this._doResize(mode)) {
        this.render();
      }
    }
  }
  ensureScalesHaveIDs() {
    const options2 = this.options;
    const scalesOptions = options2.scales || {};
    each(scalesOptions, (axisOptions, axisID) => {
      axisOptions.id = axisID;
    });
  }
  buildOrUpdateScales() {
    const options2 = this.options;
    const scaleOpts = options2.scales;
    const scales = this.scales;
    const updated = Object.keys(scales).reduce((obj, id) => {
      obj[id] = false;
      return obj;
    }, {});
    let items = [];
    if (scaleOpts) {
      items = items.concat(Object.keys(scaleOpts).map((id) => {
        const scaleOptions = scaleOpts[id];
        const axis = determineAxis(id, scaleOptions);
        const isRadial = axis === "r";
        const isHorizontal = axis === "x";
        return {
          options: scaleOptions,
          dposition: isRadial ? "chartArea" : isHorizontal ? "bottom" : "left",
          dtype: isRadial ? "radialLinear" : isHorizontal ? "category" : "linear"
        };
      }));
    }
    each(items, (item) => {
      const scaleOptions = item.options;
      const id = scaleOptions.id;
      const axis = determineAxis(id, scaleOptions);
      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);
      if (scaleOptions.position === void 0 || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {
        scaleOptions.position = item.dposition;
      }
      updated[id] = true;
      let scale = null;
      if (id in scales && scales[id].type === scaleType) {
        scale = scales[id];
      } else {
        const scaleClass = registry.getScale(scaleType);
        scale = new scaleClass({
          id,
          type: scaleType,
          ctx: this.ctx,
          chart: this
        });
        scales[scale.id] = scale;
      }
      scale.init(scaleOptions, options2);
    });
    each(updated, (hasUpdated, id) => {
      if (!hasUpdated) {
        delete scales[id];
      }
    });
    each(scales, (scale) => {
      layouts.configure(this, scale, scale.options);
      layouts.addBox(this, scale);
    });
  }
  _updateMetasets() {
    const metasets = this._metasets;
    const numData = this.data.datasets.length;
    const numMeta = metasets.length;
    metasets.sort((a, b) => a.index - b.index);
    if (numMeta > numData) {
      for (let i = numData; i < numMeta; ++i) {
        this._destroyDatasetMeta(i);
      }
      metasets.splice(numData, numMeta - numData);
    }
    this._sortedMetasets = metasets.slice(0).sort(compare2Level("order", "index"));
  }
  _removeUnreferencedMetasets() {
    const { _metasets: metasets, data: { datasets } } = this;
    if (metasets.length > datasets.length) {
      delete this._stacks;
    }
    metasets.forEach((meta, index) => {
      if (datasets.filter((x) => x === meta._dataset).length === 0) {
        this._destroyDatasetMeta(index);
      }
    });
  }
  buildOrUpdateControllers() {
    const newControllers = [];
    const datasets = this.data.datasets;
    let i, ilen;
    this._removeUnreferencedMetasets();
    for (i = 0, ilen = datasets.length; i < ilen; i++) {
      const dataset = datasets[i];
      let meta = this.getDatasetMeta(i);
      const type = dataset.type || this.config.type;
      if (meta.type && meta.type !== type) {
        this._destroyDatasetMeta(i);
        meta = this.getDatasetMeta(i);
      }
      meta.type = type;
      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);
      meta.order = dataset.order || 0;
      meta.index = i;
      meta.label = "" + dataset.label;
      meta.visible = this.isDatasetVisible(i);
      if (meta.controller) {
        meta.controller.updateIndex(i);
        meta.controller.linkScales();
      } else {
        const ControllerClass = registry.getController(type);
        const { datasetElementType, dataElementType } = defaults2.datasets[type];
        Object.assign(ControllerClass, {
          dataElementType: registry.getElement(dataElementType),
          datasetElementType: datasetElementType && registry.getElement(datasetElementType)
        });
        meta.controller = new ControllerClass(this, i);
        newControllers.push(meta.controller);
      }
    }
    this._updateMetasets();
    return newControllers;
  }
  _resetElements() {
    each(this.data.datasets, (dataset, datasetIndex) => {
      this.getDatasetMeta(datasetIndex).controller.reset();
    }, this);
  }
  reset() {
    this._resetElements();
    this.notifyPlugins("reset");
  }
  update(mode) {
    const config = this.config;
    config.update();
    const options2 = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());
    const animsDisabled = this._animationsDisabled = !options2.animation;
    this._updateScales();
    this._checkEventBindings();
    this._updateHiddenIndices();
    this._plugins.invalidate();
    if (this.notifyPlugins("beforeUpdate", {
      mode,
      cancelable: true
    }) === false) {
      return;
    }
    const newControllers = this.buildOrUpdateControllers();
    this.notifyPlugins("beforeElementsUpdate");
    let minPadding = 0;
    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {
      const { controller } = this.getDatasetMeta(i);
      const reset2 = !animsDisabled && newControllers.indexOf(controller) === -1;
      controller.buildOrUpdateElements(reset2);
      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);
    }
    minPadding = this._minPadding = options2.layout.autoPadding ? minPadding : 0;
    this._updateLayout(minPadding);
    if (!animsDisabled) {
      each(newControllers, (controller) => {
        controller.reset();
      });
    }
    this._updateDatasets(mode);
    this.notifyPlugins("afterUpdate", {
      mode
    });
    this._layers.sort(compare2Level("z", "_idx"));
    const { _active, _lastEvent } = this;
    if (_lastEvent) {
      this._eventHandler(_lastEvent, true);
    } else if (_active.length) {
      this._updateHoverStyles(_active, _active, true);
    }
    this.render();
  }
  _updateScales() {
    each(this.scales, (scale) => {
      layouts.removeBox(this, scale);
    });
    this.ensureScalesHaveIDs();
    this.buildOrUpdateScales();
  }
  _checkEventBindings() {
    const options2 = this.options;
    const existingEvents = new Set(Object.keys(this._listeners));
    const newEvents = new Set(options2.events);
    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options2.responsive) {
      this.unbindEvents();
      this.bindEvents();
    }
  }
  _updateHiddenIndices() {
    const { _hiddenIndices } = this;
    const changes = this._getUniformDataChanges() || [];
    for (const { method, start, count } of changes) {
      const move = method === "_removeElements" ? -count : count;
      moveNumericKeys(_hiddenIndices, start, move);
    }
  }
  _getUniformDataChanges() {
    const _dataChanges = this._dataChanges;
    if (!_dataChanges || !_dataChanges.length) {
      return;
    }
    this._dataChanges = [];
    const datasetCount = this.data.datasets.length;
    const makeSet = (idx) => new Set(_dataChanges.filter((c) => c[0] === idx).map((c, i) => i + "," + c.splice(1).join(",")));
    const changeSet = makeSet(0);
    for (let i = 1; i < datasetCount; i++) {
      if (!setsEqual(changeSet, makeSet(i))) {
        return;
      }
    }
    return Array.from(changeSet).map((c) => c.split(",")).map((a) => ({
      method: a[1],
      start: +a[2],
      count: +a[3]
    }));
  }
  _updateLayout(minPadding) {
    if (this.notifyPlugins("beforeLayout", {
      cancelable: true
    }) === false) {
      return;
    }
    layouts.update(this, this.width, this.height, minPadding);
    const area = this.chartArea;
    const noArea = area.width <= 0 || area.height <= 0;
    this._layers = [];
    each(this.boxes, (box) => {
      if (noArea && box.position === "chartArea") {
        return;
      }
      if (box.configure) {
        box.configure();
      }
      this._layers.push(...box._layers());
    }, this);
    this._layers.forEach((item, index) => {
      item._idx = index;
    });
    this.notifyPlugins("afterLayout");
  }
  _updateDatasets(mode) {
    if (this.notifyPlugins("beforeDatasetsUpdate", {
      mode,
      cancelable: true
    }) === false) {
      return;
    }
    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
      this.getDatasetMeta(i).controller.configure();
    }
    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
      this._updateDataset(i, isFunction(mode) ? mode({
        datasetIndex: i
      }) : mode);
    }
    this.notifyPlugins("afterDatasetsUpdate", {
      mode
    });
  }
  _updateDataset(index, mode) {
    const meta = this.getDatasetMeta(index);
    const args = {
      meta,
      index,
      mode,
      cancelable: true
    };
    if (this.notifyPlugins("beforeDatasetUpdate", args) === false) {
      return;
    }
    meta.controller._update(mode);
    args.cancelable = false;
    this.notifyPlugins("afterDatasetUpdate", args);
  }
  render() {
    if (this.notifyPlugins("beforeRender", {
      cancelable: true
    }) === false) {
      return;
    }
    if (animator.has(this)) {
      if (this.attached && !animator.running(this)) {
        animator.start(this);
      }
    } else {
      this.draw();
      onAnimationsComplete({
        chart: this
      });
    }
  }
  draw() {
    let i;
    if (this._resizeBeforeDraw) {
      const { width, height } = this._resizeBeforeDraw;
      this._resizeBeforeDraw = null;
      this._resize(width, height);
    }
    this.clear();
    if (this.width <= 0 || this.height <= 0) {
      return;
    }
    if (this.notifyPlugins("beforeDraw", {
      cancelable: true
    }) === false) {
      return;
    }
    const layers = this._layers;
    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {
      layers[i].draw(this.chartArea);
    }
    this._drawDatasets();
    for (; i < layers.length; ++i) {
      layers[i].draw(this.chartArea);
    }
    this.notifyPlugins("afterDraw");
  }
  _getSortedDatasetMetas(filterVisible) {
    const metasets = this._sortedMetasets;
    const result = [];
    let i, ilen;
    for (i = 0, ilen = metasets.length; i < ilen; ++i) {
      const meta = metasets[i];
      if (!filterVisible || meta.visible) {
        result.push(meta);
      }
    }
    return result;
  }
  getSortedVisibleDatasetMetas() {
    return this._getSortedDatasetMetas(true);
  }
  _drawDatasets() {
    if (this.notifyPlugins("beforeDatasetsDraw", {
      cancelable: true
    }) === false) {
      return;
    }
    const metasets = this.getSortedVisibleDatasetMetas();
    for (let i = metasets.length - 1; i >= 0; --i) {
      this._drawDataset(metasets[i]);
    }
    this.notifyPlugins("afterDatasetsDraw");
  }
  _drawDataset(meta) {
    const ctx = this.ctx;
    const clip = meta._clip;
    const useClip = !clip.disabled;
    const area = getDatasetArea(meta, this.chartArea);
    const args = {
      meta,
      index: meta.index,
      cancelable: true
    };
    if (this.notifyPlugins("beforeDatasetDraw", args) === false) {
      return;
    }
    if (useClip) {
      clipArea(ctx, {
        left: clip.left === false ? 0 : area.left - clip.left,
        right: clip.right === false ? this.width : area.right + clip.right,
        top: clip.top === false ? 0 : area.top - clip.top,
        bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom
      });
    }
    meta.controller.draw();
    if (useClip) {
      unclipArea(ctx);
    }
    args.cancelable = false;
    this.notifyPlugins("afterDatasetDraw", args);
  }
  isPointInArea(point) {
    return _isPointInArea(point, this.chartArea, this._minPadding);
  }
  getElementsAtEventForMode(e, mode, options2, useFinalPosition) {
    const method = Interaction.modes[mode];
    if (typeof method === "function") {
      return method(this, e, options2, useFinalPosition);
    }
    return [];
  }
  getDatasetMeta(datasetIndex) {
    const dataset = this.data.datasets[datasetIndex];
    const metasets = this._metasets;
    let meta = metasets.filter((x) => x && x._dataset === dataset).pop();
    if (!meta) {
      meta = {
        type: null,
        data: [],
        dataset: null,
        controller: null,
        hidden: null,
        xAxisID: null,
        yAxisID: null,
        order: dataset && dataset.order || 0,
        index: datasetIndex,
        _dataset: dataset,
        _parsed: [],
        _sorted: false
      };
      metasets.push(meta);
    }
    return meta;
  }
  getContext() {
    return this.$context || (this.$context = createContext(null, {
      chart: this,
      type: "chart"
    }));
  }
  getVisibleDatasetCount() {
    return this.getSortedVisibleDatasetMetas().length;
  }
  isDatasetVisible(datasetIndex) {
    const dataset = this.data.datasets[datasetIndex];
    if (!dataset) {
      return false;
    }
    const meta = this.getDatasetMeta(datasetIndex);
    return typeof meta.hidden === "boolean" ? !meta.hidden : !dataset.hidden;
  }
  setDatasetVisibility(datasetIndex, visible) {
    const meta = this.getDatasetMeta(datasetIndex);
    meta.hidden = !visible;
  }
  toggleDataVisibility(index) {
    this._hiddenIndices[index] = !this._hiddenIndices[index];
  }
  getDataVisibility(index) {
    return !this._hiddenIndices[index];
  }
  _updateVisibility(datasetIndex, dataIndex, visible) {
    const mode = visible ? "show" : "hide";
    const meta = this.getDatasetMeta(datasetIndex);
    const anims = meta.controller._resolveAnimations(void 0, mode);
    if (defined(dataIndex)) {
      meta.data[dataIndex].hidden = !visible;
      this.update();
    } else {
      this.setDatasetVisibility(datasetIndex, visible);
      anims.update(meta, {
        visible
      });
      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : void 0);
    }
  }
  hide(datasetIndex, dataIndex) {
    this._updateVisibility(datasetIndex, dataIndex, false);
  }
  show(datasetIndex, dataIndex) {
    this._updateVisibility(datasetIndex, dataIndex, true);
  }
  _destroyDatasetMeta(datasetIndex) {
    const meta = this._metasets[datasetIndex];
    if (meta && meta.controller) {
      meta.controller._destroy();
    }
    delete this._metasets[datasetIndex];
  }
  _stop() {
    let i, ilen;
    this.stop();
    animator.remove(this);
    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
      this._destroyDatasetMeta(i);
    }
  }
  destroy() {
    this.notifyPlugins("beforeDestroy");
    const { canvas, ctx } = this;
    this._stop();
    this.config.clearCache();
    if (canvas) {
      this.unbindEvents();
      clearCanvas(canvas, ctx);
      this.platform.releaseContext(ctx);
      this.canvas = null;
      this.ctx = null;
    }
    delete instances[this.id];
    this.notifyPlugins("afterDestroy");
  }
  toBase64Image(...args) {
    return this.canvas.toDataURL(...args);
  }
  bindEvents() {
    this.bindUserEvents();
    if (this.options.responsive) {
      this.bindResponsiveEvents();
    } else {
      this.attached = true;
    }
  }
  bindUserEvents() {
    const listeners = this._listeners;
    const platform = this.platform;
    const _add = (type, listener2) => {
      platform.addEventListener(this, type, listener2);
      listeners[type] = listener2;
    };
    const listener = (e, x, y) => {
      e.offsetX = x;
      e.offsetY = y;
      this._eventHandler(e);
    };
    each(this.options.events, (type) => _add(type, listener));
  }
  bindResponsiveEvents() {
    if (!this._responsiveListeners) {
      this._responsiveListeners = {};
    }
    const listeners = this._responsiveListeners;
    const platform = this.platform;
    const _add = (type, listener2) => {
      platform.addEventListener(this, type, listener2);
      listeners[type] = listener2;
    };
    const _remove = (type, listener2) => {
      if (listeners[type]) {
        platform.removeEventListener(this, type, listener2);
        delete listeners[type];
      }
    };
    const listener = (width, height) => {
      if (this.canvas) {
        this.resize(width, height);
      }
    };
    let detached;
    const attached = () => {
      _remove("attach", attached);
      this.attached = true;
      this.resize();
      _add("resize", listener);
      _add("detach", detached);
    };
    detached = () => {
      this.attached = false;
      _remove("resize", listener);
      this._stop();
      this._resize(0, 0);
      _add("attach", attached);
    };
    if (platform.isAttached(this.canvas)) {
      attached();
    } else {
      detached();
    }
  }
  unbindEvents() {
    each(this._listeners, (listener, type) => {
      this.platform.removeEventListener(this, type, listener);
    });
    this._listeners = {};
    each(this._responsiveListeners, (listener, type) => {
      this.platform.removeEventListener(this, type, listener);
    });
    this._responsiveListeners = void 0;
  }
  updateHoverStyle(items, mode, enabled) {
    const prefix = enabled ? "set" : "remove";
    let meta, item, i, ilen;
    if (mode === "dataset") {
      meta = this.getDatasetMeta(items[0].datasetIndex);
      meta.controller["_" + prefix + "DatasetHoverStyle"]();
    }
    for (i = 0, ilen = items.length; i < ilen; ++i) {
      item = items[i];
      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;
      if (controller) {
        controller[prefix + "HoverStyle"](item.element, item.datasetIndex, item.index);
      }
    }
  }
  getActiveElements() {
    return this._active || [];
  }
  setActiveElements(activeElements) {
    const lastActive = this._active || [];
    const active = activeElements.map(({ datasetIndex, index }) => {
      const meta = this.getDatasetMeta(datasetIndex);
      if (!meta) {
        throw new Error("No dataset found at index " + datasetIndex);
      }
      return {
        datasetIndex,
        element: meta.data[index],
        index
      };
    });
    const changed = !_elementsEqual(active, lastActive);
    if (changed) {
      this._active = active;
      this._lastEvent = null;
      this._updateHoverStyles(active, lastActive);
    }
  }
  notifyPlugins(hook, args, filter2) {
    return this._plugins.notify(this, hook, args, filter2);
  }
  isPluginEnabled(pluginId) {
    return this._plugins._cache.filter((p) => p.plugin.id === pluginId).length === 1;
  }
  _updateHoverStyles(active, lastActive, replay) {
    const hoverOptions = this.options.hover;
    const diff = (a, b) => a.filter((x) => !b.some((y) => x.datasetIndex === y.datasetIndex && x.index === y.index));
    const deactivated = diff(lastActive, active);
    const activated = replay ? active : diff(active, lastActive);
    if (deactivated.length) {
      this.updateHoverStyle(deactivated, hoverOptions.mode, false);
    }
    if (activated.length && hoverOptions.mode) {
      this.updateHoverStyle(activated, hoverOptions.mode, true);
    }
  }
  _eventHandler(e, replay) {
    const args = {
      event: e,
      replay,
      cancelable: true,
      inChartArea: this.isPointInArea(e)
    };
    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);
    if (this.notifyPlugins("beforeEvent", args, eventFilter) === false) {
      return;
    }
    const changed = this._handleEvent(e, replay, args.inChartArea);
    args.cancelable = false;
    this.notifyPlugins("afterEvent", args, eventFilter);
    if (changed || args.changed) {
      this.render();
    }
    return this;
  }
  _handleEvent(e, replay, inChartArea) {
    const { _active: lastActive = [], options: options2 } = this;
    const useFinalPosition = replay;
    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);
    const isClick = _isClickEvent(e);
    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);
    if (inChartArea) {
      this._lastEvent = null;
      callback(options2.onHover, [
        e,
        active,
        this
      ], this);
      if (isClick) {
        callback(options2.onClick, [
          e,
          active,
          this
        ], this);
      }
    }
    const changed = !_elementsEqual(active, lastActive);
    if (changed || replay) {
      this._active = active;
      this._updateHoverStyles(active, lastActive, replay);
    }
    this._lastEvent = lastEvent;
    return changed;
  }
  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {
    if (e.type === "mouseout") {
      return [];
    }
    if (!inChartArea) {
      return lastActive;
    }
    const hoverOptions = this.options.hover;
    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);
  }
};
__publicField(Chart, "defaults", defaults2);
__publicField(Chart, "instances", instances);
__publicField(Chart, "overrides", overrides);
__publicField(Chart, "registry", registry);
__publicField(Chart, "version", version2);
__publicField(Chart, "getChart", getChart);
function invalidatePlugins() {
  return each(Chart.instances, (chart) => chart._plugins.invalidate());
}
function clipArc(ctx, element, endAngle) {
  const { startAngle, pixelMargin, x, y, outerRadius, innerRadius } = element;
  let angleMargin = pixelMargin / outerRadius;
  ctx.beginPath();
  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);
  if (innerRadius > pixelMargin) {
    angleMargin = pixelMargin / innerRadius;
    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);
  } else {
    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);
  }
  ctx.closePath();
  ctx.clip();
}
function toRadiusCorners(value) {
  return _readValueToProps(value, [
    "outerStart",
    "outerEnd",
    "innerStart",
    "innerEnd"
  ]);
}
function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {
  const o = toRadiusCorners(arc.options.borderRadius);
  const halfThickness = (outerRadius - innerRadius) / 2;
  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);
  const computeOuterLimit = (val) => {
    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;
    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));
  };
  return {
    outerStart: computeOuterLimit(o.outerStart),
    outerEnd: computeOuterLimit(o.outerEnd),
    innerStart: _limitValue(o.innerStart, 0, innerLimit),
    innerEnd: _limitValue(o.innerEnd, 0, innerLimit)
  };
}
function rThetaToXY(r, theta, x, y) {
  return {
    x: x + r * Math.cos(theta),
    y: y + r * Math.sin(theta)
  };
}
function pathArc(ctx, element, offset, spacing, end, circular) {
  const { x, y, startAngle: start, pixelMargin, innerRadius: innerR } = element;
  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);
  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;
  let spacingOffset = 0;
  const alpha2 = end - start;
  if (spacing) {
    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;
    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;
    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;
    const adjustedAngle = avNogSpacingRadius !== 0 ? alpha2 * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha2;
    spacingOffset = (alpha2 - adjustedAngle) / 2;
  }
  const beta = Math.max(1e-3, alpha2 * outerRadius - offset / PI) / outerRadius;
  const angleOffset = (alpha2 - beta) / 2;
  const startAngle = start + angleOffset + spacingOffset;
  const endAngle = end - angleOffset - spacingOffset;
  const { outerStart, outerEnd, innerStart, innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);
  const outerStartAdjustedRadius = outerRadius - outerStart;
  const outerEndAdjustedRadius = outerRadius - outerEnd;
  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;
  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;
  const innerStartAdjustedRadius = innerRadius + innerStart;
  const innerEndAdjustedRadius = innerRadius + innerEnd;
  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;
  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;
  ctx.beginPath();
  if (circular) {
    const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;
    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);
    ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);
    if (outerEnd > 0) {
      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);
      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);
    }
    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);
    ctx.lineTo(p4.x, p4.y);
    if (innerEnd > 0) {
      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);
      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);
    }
    const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;
    ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);
    ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);
    if (innerStart > 0) {
      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);
      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);
    }
    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);
    ctx.lineTo(p8.x, p8.y);
    if (outerStart > 0) {
      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);
      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);
    }
  } else {
    ctx.moveTo(x, y);
    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;
    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;
    ctx.lineTo(outerStartX, outerStartY);
    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;
    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;
    ctx.lineTo(outerEndX, outerEndY);
  }
  ctx.closePath();
}
function drawArc(ctx, element, offset, spacing, circular) {
  const { fullCircles, startAngle, circumference } = element;
  let endAngle = element.endAngle;
  if (fullCircles) {
    pathArc(ctx, element, offset, spacing, endAngle, circular);
    for (let i = 0; i < fullCircles; ++i) {
      ctx.fill();
    }
    if (!isNaN(circumference)) {
      endAngle = startAngle + (circumference % TAU || TAU);
    }
  }
  pathArc(ctx, element, offset, spacing, endAngle, circular);
  ctx.fill();
  return endAngle;
}
function drawBorder(ctx, element, offset, spacing, circular) {
  const { fullCircles, startAngle, circumference, options: options2 } = element;
  const { borderWidth, borderJoinStyle, borderDash, borderDashOffset } = options2;
  const inner = options2.borderAlign === "inner";
  if (!borderWidth) {
    return;
  }
  ctx.setLineDash(borderDash || []);
  ctx.lineDashOffset = borderDashOffset;
  if (inner) {
    ctx.lineWidth = borderWidth * 2;
    ctx.lineJoin = borderJoinStyle || "round";
  } else {
    ctx.lineWidth = borderWidth;
    ctx.lineJoin = borderJoinStyle || "bevel";
  }
  let endAngle = element.endAngle;
  if (fullCircles) {
    pathArc(ctx, element, offset, spacing, endAngle, circular);
    for (let i = 0; i < fullCircles; ++i) {
      ctx.stroke();
    }
    if (!isNaN(circumference)) {
      endAngle = startAngle + (circumference % TAU || TAU);
    }
  }
  if (inner) {
    clipArc(ctx, element, endAngle);
  }
  if (!fullCircles) {
    pathArc(ctx, element, offset, spacing, endAngle, circular);
    ctx.stroke();
  }
}
var ArcElement = class extends Element {
  constructor(cfg) {
    super();
    __publicField(this, "circumference");
    __publicField(this, "endAngle");
    __publicField(this, "fullCircles");
    __publicField(this, "innerRadius");
    __publicField(this, "outerRadius");
    __publicField(this, "pixelMargin");
    __publicField(this, "startAngle");
    this.options = void 0;
    this.circumference = void 0;
    this.startAngle = void 0;
    this.endAngle = void 0;
    this.innerRadius = void 0;
    this.outerRadius = void 0;
    this.pixelMargin = 0;
    this.fullCircles = 0;
    if (cfg) {
      Object.assign(this, cfg);
    }
  }
  inRange(chartX, chartY, useFinalPosition) {
    const point = this.getProps([
      "x",
      "y"
    ], useFinalPosition);
    const { angle, distance } = getAngleFromPoint(point, {
      x: chartX,
      y: chartY
    });
    const { startAngle, endAngle, innerRadius, outerRadius, circumference } = this.getProps([
      "startAngle",
      "endAngle",
      "innerRadius",
      "outerRadius",
      "circumference"
    ], useFinalPosition);
    const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;
    const _circumference = valueOrDefault(circumference, endAngle - startAngle);
    const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;
    const betweenAngles = _circumference >= TAU || nonZeroBetween;
    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);
    return betweenAngles && withinRadius;
  }
  getCenterPoint(useFinalPosition) {
    const { x, y, startAngle, endAngle, innerRadius, outerRadius } = this.getProps([
      "x",
      "y",
      "startAngle",
      "endAngle",
      "innerRadius",
      "outerRadius"
    ], useFinalPosition);
    const { offset, spacing } = this.options;
    const halfAngle = (startAngle + endAngle) / 2;
    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;
    return {
      x: x + Math.cos(halfAngle) * halfRadius,
      y: y + Math.sin(halfAngle) * halfRadius
    };
  }
  tooltipPosition(useFinalPosition) {
    return this.getCenterPoint(useFinalPosition);
  }
  draw(ctx) {
    const { options: options2, circumference } = this;
    const offset = (options2.offset || 0) / 4;
    const spacing = (options2.spacing || 0) / 2;
    const circular = options2.circular;
    this.pixelMargin = options2.borderAlign === "inner" ? 0.33 : 0;
    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;
    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {
      return;
    }
    ctx.save();
    const halfAngle = (this.startAngle + this.endAngle) / 2;
    ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);
    const fix = 1 - Math.sin(Math.min(PI, circumference || 0));
    const radiusOffset = offset * fix;
    ctx.fillStyle = options2.backgroundColor;
    ctx.strokeStyle = options2.borderColor;
    drawArc(ctx, this, radiusOffset, spacing, circular);
    drawBorder(ctx, this, radiusOffset, spacing, circular);
    ctx.restore();
  }
};
__publicField(ArcElement, "id", "arc");
__publicField(ArcElement, "defaults", {
  borderAlign: "center",
  borderColor: "#fff",
  borderDash: [],
  borderDashOffset: 0,
  borderJoinStyle: void 0,
  borderRadius: 0,
  borderWidth: 2,
  offset: 0,
  spacing: 0,
  angle: void 0,
  circular: true
});
__publicField(ArcElement, "defaultRoutes", {
  backgroundColor: "backgroundColor"
});
__publicField(ArcElement, "descriptors", {
  _scriptable: true,
  _indexable: (name) => name !== "borderDash"
});
function getBarBounds(bar, useFinalPosition) {
  const { x, y, base, width, height } = bar.getProps([
    "x",
    "y",
    "base",
    "width",
    "height"
  ], useFinalPosition);
  let left, right, top, bottom, half;
  if (bar.horizontal) {
    half = height / 2;
    left = Math.min(x, base);
    right = Math.max(x, base);
    top = y - half;
    bottom = y + half;
  } else {
    half = width / 2;
    left = x - half;
    right = x + half;
    top = Math.min(y, base);
    bottom = Math.max(y, base);
  }
  return {
    left,
    top,
    right,
    bottom
  };
}
function skipOrLimit(skip2, value, min, max) {
  return skip2 ? 0 : _limitValue(value, min, max);
}
function parseBorderWidth(bar, maxW, maxH) {
  const value = bar.options.borderWidth;
  const skip2 = bar.borderSkipped;
  const o = toTRBL(value);
  return {
    t: skipOrLimit(skip2.top, o.top, 0, maxH),
    r: skipOrLimit(skip2.right, o.right, 0, maxW),
    b: skipOrLimit(skip2.bottom, o.bottom, 0, maxH),
    l: skipOrLimit(skip2.left, o.left, 0, maxW)
  };
}
function parseBorderRadius(bar, maxW, maxH) {
  const { enableBorderRadius } = bar.getProps([
    "enableBorderRadius"
  ]);
  const value = bar.options.borderRadius;
  const o = toTRBLCorners(value);
  const maxR = Math.min(maxW, maxH);
  const skip2 = bar.borderSkipped;
  const enableBorder = enableBorderRadius || isObject(value);
  return {
    topLeft: skipOrLimit(!enableBorder || skip2.top || skip2.left, o.topLeft, 0, maxR),
    topRight: skipOrLimit(!enableBorder || skip2.top || skip2.right, o.topRight, 0, maxR),
    bottomLeft: skipOrLimit(!enableBorder || skip2.bottom || skip2.left, o.bottomLeft, 0, maxR),
    bottomRight: skipOrLimit(!enableBorder || skip2.bottom || skip2.right, o.bottomRight, 0, maxR)
  };
}
function boundingRects(bar) {
  const bounds = getBarBounds(bar);
  const width = bounds.right - bounds.left;
  const height = bounds.bottom - bounds.top;
  const border = parseBorderWidth(bar, width / 2, height / 2);
  const radius = parseBorderRadius(bar, width / 2, height / 2);
  return {
    outer: {
      x: bounds.left,
      y: bounds.top,
      w: width,
      h: height,
      radius
    },
    inner: {
      x: bounds.left + border.l,
      y: bounds.top + border.t,
      w: width - border.l - border.r,
      h: height - border.t - border.b,
      radius: {
        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),
        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),
        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),
        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))
      }
    }
  };
}
function inRange(bar, x, y, useFinalPosition) {
  const skipX = x === null;
  const skipY = y === null;
  const skipBoth = skipX && skipY;
  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);
  return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));
}
function hasRadius(radius) {
  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;
}
function addNormalRectPath(ctx, rect) {
  ctx.rect(rect.x, rect.y, rect.w, rect.h);
}
function inflateRect(rect, amount, refRect = {}) {
  const x = rect.x !== refRect.x ? -amount : 0;
  const y = rect.y !== refRect.y ? -amount : 0;
  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;
  const h4 = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;
  return {
    x: rect.x + x,
    y: rect.y + y,
    w: rect.w + w,
    h: rect.h + h4,
    radius: rect.radius
  };
}
var BarElement = class extends Element {
  constructor(cfg) {
    super();
    this.options = void 0;
    this.horizontal = void 0;
    this.base = void 0;
    this.width = void 0;
    this.height = void 0;
    this.inflateAmount = void 0;
    if (cfg) {
      Object.assign(this, cfg);
    }
  }
  draw(ctx) {
    const { inflateAmount, options: { borderColor, backgroundColor } } = this;
    const { inner, outer } = boundingRects(this);
    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;
    ctx.save();
    if (outer.w !== inner.w || outer.h !== inner.h) {
      ctx.beginPath();
      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));
      ctx.clip();
      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));
      ctx.fillStyle = borderColor;
      ctx.fill("evenodd");
    }
    ctx.beginPath();
    addRectPath(ctx, inflateRect(inner, inflateAmount));
    ctx.fillStyle = backgroundColor;
    ctx.fill();
    ctx.restore();
  }
  inRange(mouseX, mouseY, useFinalPosition) {
    return inRange(this, mouseX, mouseY, useFinalPosition);
  }
  inXRange(mouseX, useFinalPosition) {
    return inRange(this, mouseX, null, useFinalPosition);
  }
  inYRange(mouseY, useFinalPosition) {
    return inRange(this, null, mouseY, useFinalPosition);
  }
  getCenterPoint(useFinalPosition) {
    const { x, y, base, horizontal } = this.getProps([
      "x",
      "y",
      "base",
      "horizontal"
    ], useFinalPosition);
    return {
      x: horizontal ? (x + base) / 2 : x,
      y: horizontal ? y : (y + base) / 2
    };
  }
  getRange(axis) {
    return axis === "x" ? this.width / 2 : this.height / 2;
  }
};
__publicField(BarElement, "id", "bar");
__publicField(BarElement, "defaults", {
  borderSkipped: "start",
  borderWidth: 0,
  borderRadius: 0,
  inflateAmount: "auto",
  pointStyle: void 0
});
__publicField(BarElement, "defaultRoutes", {
  backgroundColor: "backgroundColor",
  borderColor: "borderColor"
});
var getBoxSize = (labelOpts, fontSize) => {
  let { boxHeight = fontSize, boxWidth = fontSize } = labelOpts;
  if (labelOpts.usePointStyle) {
    boxHeight = Math.min(boxHeight, fontSize);
    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);
  }
  return {
    boxWidth,
    boxHeight,
    itemHeight: Math.max(fontSize, boxHeight)
  };
};
var itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;
var Legend = class extends Element {
  constructor(config) {
    super();
    this._added = false;
    this.legendHitBoxes = [];
    this._hoveredItem = null;
    this.doughnutMode = false;
    this.chart = config.chart;
    this.options = config.options;
    this.ctx = config.ctx;
    this.legendItems = void 0;
    this.columnSizes = void 0;
    this.lineWidths = void 0;
    this.maxHeight = void 0;
    this.maxWidth = void 0;
    this.top = void 0;
    this.bottom = void 0;
    this.left = void 0;
    this.right = void 0;
    this.height = void 0;
    this.width = void 0;
    this._margins = void 0;
    this.position = void 0;
    this.weight = void 0;
    this.fullSize = void 0;
  }
  update(maxWidth, maxHeight, margins) {
    this.maxWidth = maxWidth;
    this.maxHeight = maxHeight;
    this._margins = margins;
    this.setDimensions();
    this.buildLabels();
    this.fit();
  }
  setDimensions() {
    if (this.isHorizontal()) {
      this.width = this.maxWidth;
      this.left = this._margins.left;
      this.right = this.width;
    } else {
      this.height = this.maxHeight;
      this.top = this._margins.top;
      this.bottom = this.height;
    }
  }
  buildLabels() {
    const labelOpts = this.options.labels || {};
    let legendItems = callback(labelOpts.generateLabels, [
      this.chart
    ], this) || [];
    if (labelOpts.filter) {
      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));
    }
    if (labelOpts.sort) {
      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));
    }
    if (this.options.reverse) {
      legendItems.reverse();
    }
    this.legendItems = legendItems;
  }
  fit() {
    const { options: options2, ctx } = this;
    if (!options2.display) {
      this.width = this.height = 0;
      return;
    }
    const labelOpts = options2.labels;
    const labelFont = toFont(labelOpts.font);
    const fontSize = labelFont.size;
    const titleHeight = this._computeTitleHeight();
    const { boxWidth, itemHeight } = getBoxSize(labelOpts, fontSize);
    let width, height;
    ctx.font = labelFont.string;
    if (this.isHorizontal()) {
      width = this.maxWidth;
      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;
    } else {
      height = this.maxHeight;
      width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;
    }
    this.width = Math.min(width, options2.maxWidth || this.maxWidth);
    this.height = Math.min(height, options2.maxHeight || this.maxHeight);
  }
  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {
    const { ctx, maxWidth, options: { labels: { padding } } } = this;
    const hitboxes = this.legendHitBoxes = [];
    const lineWidths = this.lineWidths = [
      0
    ];
    const lineHeight = itemHeight + padding;
    let totalHeight = titleHeight;
    ctx.textAlign = "left";
    ctx.textBaseline = "middle";
    let row = -1;
    let top = -lineHeight;
    this.legendItems.forEach((legendItem, i) => {
      const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;
      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {
        totalHeight += lineHeight;
        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;
        top += lineHeight;
        row++;
      }
      hitboxes[i] = {
        left: 0,
        top,
        row,
        width: itemWidth,
        height: itemHeight
      };
      lineWidths[lineWidths.length - 1] += itemWidth + padding;
    });
    return totalHeight;
  }
  _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {
    const { ctx, maxHeight, options: { labels: { padding } } } = this;
    const hitboxes = this.legendHitBoxes = [];
    const columnSizes = this.columnSizes = [];
    const heightLimit = maxHeight - titleHeight;
    let totalWidth = padding;
    let currentColWidth = 0;
    let currentColHeight = 0;
    let left = 0;
    let col = 0;
    this.legendItems.forEach((legendItem, i) => {
      const { itemWidth, itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);
      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {
        totalWidth += currentColWidth + padding;
        columnSizes.push({
          width: currentColWidth,
          height: currentColHeight
        });
        left += currentColWidth + padding;
        col++;
        currentColWidth = currentColHeight = 0;
      }
      hitboxes[i] = {
        left,
        top: currentColHeight,
        col,
        width: itemWidth,
        height: itemHeight
      };
      currentColWidth = Math.max(currentColWidth, itemWidth);
      currentColHeight += itemHeight + padding;
    });
    totalWidth += currentColWidth;
    columnSizes.push({
      width: currentColWidth,
      height: currentColHeight
    });
    return totalWidth;
  }
  adjustHitBoxes() {
    if (!this.options.display) {
      return;
    }
    const titleHeight = this._computeTitleHeight();
    const { legendHitBoxes: hitboxes, options: { align, labels: { padding }, rtl } } = this;
    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);
    if (this.isHorizontal()) {
      let row = 0;
      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
      for (const hitbox of hitboxes) {
        if (row !== hitbox.row) {
          row = hitbox.row;
          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
        }
        hitbox.top += this.top + titleHeight + padding;
        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);
        left += hitbox.width + padding;
      }
    } else {
      let col = 0;
      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
      for (const hitbox of hitboxes) {
        if (hitbox.col !== col) {
          col = hitbox.col;
          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
        }
        hitbox.top = top;
        hitbox.left += this.left + padding;
        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);
        top += hitbox.height + padding;
      }
    }
  }
  isHorizontal() {
    return this.options.position === "top" || this.options.position === "bottom";
  }
  draw() {
    if (this.options.display) {
      const ctx = this.ctx;
      clipArea(ctx, this);
      this._draw();
      unclipArea(ctx);
    }
  }
  _draw() {
    const { options: opts, columnSizes, lineWidths, ctx } = this;
    const { align, labels: labelOpts } = opts;
    const defaultColor = defaults2.color;
    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);
    const labelFont = toFont(labelOpts.font);
    const { padding } = labelOpts;
    const fontSize = labelFont.size;
    const halfFontSize = fontSize / 2;
    let cursor;
    this.drawTitle();
    ctx.textAlign = rtlHelper.textAlign("left");
    ctx.textBaseline = "middle";
    ctx.lineWidth = 0.5;
    ctx.font = labelFont.string;
    const { boxWidth, boxHeight, itemHeight } = getBoxSize(labelOpts, fontSize);
    const drawLegendBox = function(x, y, legendItem) {
      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {
        return;
      }
      ctx.save();
      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);
      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);
      ctx.lineCap = valueOrDefault(legendItem.lineCap, "butt");
      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);
      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, "miter");
      ctx.lineWidth = lineWidth;
      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);
      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));
      if (labelOpts.usePointStyle) {
        const drawOptions = {
          radius: boxHeight * Math.SQRT2 / 2,
          pointStyle: legendItem.pointStyle,
          rotation: legendItem.rotation,
          borderWidth: lineWidth
        };
        const centerX = rtlHelper.xPlus(x, boxWidth / 2);
        const centerY = y + halfFontSize;
        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);
      } else {
        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);
        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);
        const borderRadius = toTRBLCorners(legendItem.borderRadius);
        ctx.beginPath();
        if (Object.values(borderRadius).some((v) => v !== 0)) {
          addRoundedRectPath(ctx, {
            x: xBoxLeft,
            y: yBoxTop,
            w: boxWidth,
            h: boxHeight,
            radius: borderRadius
          });
        } else {
          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);
        }
        ctx.fill();
        if (lineWidth !== 0) {
          ctx.stroke();
        }
      }
      ctx.restore();
    };
    const fillText = function(x, y, legendItem) {
      renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {
        strikethrough: legendItem.hidden,
        textAlign: rtlHelper.textAlign(legendItem.textAlign)
      });
    };
    const isHorizontal = this.isHorizontal();
    const titleHeight = this._computeTitleHeight();
    if (isHorizontal) {
      cursor = {
        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),
        y: this.top + padding + titleHeight,
        line: 0
      };
    } else {
      cursor = {
        x: this.left + padding,
        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),
        line: 0
      };
    }
    overrideTextDirection(this.ctx, opts.textDirection);
    const lineHeight = itemHeight + padding;
    this.legendItems.forEach((legendItem, i) => {
      ctx.strokeStyle = legendItem.fontColor;
      ctx.fillStyle = legendItem.fontColor;
      const textWidth = ctx.measureText(legendItem.text).width;
      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));
      const width = boxWidth + halfFontSize + textWidth;
      let x = cursor.x;
      let y = cursor.y;
      rtlHelper.setWidth(this.width);
      if (isHorizontal) {
        if (i > 0 && x + width + padding > this.right) {
          y = cursor.y += lineHeight;
          cursor.line++;
          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);
        }
      } else if (i > 0 && y + lineHeight > this.bottom) {
        x = cursor.x = x + columnSizes[cursor.line].width + padding;
        cursor.line++;
        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);
      }
      const realX = rtlHelper.x(x);
      drawLegendBox(realX, y, legendItem);
      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);
      fillText(rtlHelper.x(x), y, legendItem);
      if (isHorizontal) {
        cursor.x += width + padding;
      } else if (typeof legendItem.text !== "string") {
        const fontLineHeight = labelFont.lineHeight;
        cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;
      } else {
        cursor.y += lineHeight;
      }
    });
    restoreTextDirection(this.ctx, opts.textDirection);
  }
  drawTitle() {
    const opts = this.options;
    const titleOpts = opts.title;
    const titleFont = toFont(titleOpts.font);
    const titlePadding = toPadding(titleOpts.padding);
    if (!titleOpts.display) {
      return;
    }
    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);
    const ctx = this.ctx;
    const position = titleOpts.position;
    const halfFontSize = titleFont.size / 2;
    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;
    let y;
    let left = this.left;
    let maxWidth = this.width;
    if (this.isHorizontal()) {
      maxWidth = Math.max(...this.lineWidths);
      y = this.top + topPaddingPlusHalfFontSize;
      left = _alignStartEnd(opts.align, left, this.right - maxWidth);
    } else {
      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);
      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());
    }
    const x = _alignStartEnd(position, left, left + maxWidth);
    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));
    ctx.textBaseline = "middle";
    ctx.strokeStyle = titleOpts.color;
    ctx.fillStyle = titleOpts.color;
    ctx.font = titleFont.string;
    renderText(ctx, titleOpts.text, x, y, titleFont);
  }
  _computeTitleHeight() {
    const titleOpts = this.options.title;
    const titleFont = toFont(titleOpts.font);
    const titlePadding = toPadding(titleOpts.padding);
    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;
  }
  _getLegendItemAt(x, y) {
    let i, hitBox, lh;
    if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {
      lh = this.legendHitBoxes;
      for (i = 0; i < lh.length; ++i) {
        hitBox = lh[i];
        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {
          return this.legendItems[i];
        }
      }
    }
    return null;
  }
  handleEvent(e) {
    const opts = this.options;
    if (!isListened(e.type, opts)) {
      return;
    }
    const hoveredItem = this._getLegendItemAt(e.x, e.y);
    if (e.type === "mousemove" || e.type === "mouseout") {
      const previous = this._hoveredItem;
      const sameItem = itemsEqual(previous, hoveredItem);
      if (previous && !sameItem) {
        callback(opts.onLeave, [
          e,
          previous,
          this
        ], this);
      }
      this._hoveredItem = hoveredItem;
      if (hoveredItem && !sameItem) {
        callback(opts.onHover, [
          e,
          hoveredItem,
          this
        ], this);
      }
    } else if (hoveredItem) {
      callback(opts.onClick, [
        e,
        hoveredItem,
        this
      ], this);
    }
  }
};
function calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {
  const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);
  const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);
  return {
    itemWidth,
    itemHeight
  };
}
function calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {
  let legendItemText = legendItem.text;
  if (legendItemText && typeof legendItemText !== "string") {
    legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);
  }
  return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;
}
function calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {
  let itemHeight = _itemHeight;
  if (typeof legendItem.text !== "string") {
    itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);
  }
  return itemHeight;
}
function calculateLegendItemHeight(legendItem, fontLineHeight) {
  const labelHeight = legendItem.text ? legendItem.text.length : 0;
  return fontLineHeight * labelHeight;
}
function isListened(type, opts) {
  if ((type === "mousemove" || type === "mouseout") && (opts.onHover || opts.onLeave)) {
    return true;
  }
  if (opts.onClick && (type === "click" || type === "mouseup")) {
    return true;
  }
  return false;
}
var plugin_legend = {
  id: "legend",
  _element: Legend,
  start(chart, _args, options2) {
    const legend = chart.legend = new Legend({
      ctx: chart.ctx,
      options: options2,
      chart
    });
    layouts.configure(chart, legend, options2);
    layouts.addBox(chart, legend);
  },
  stop(chart) {
    layouts.removeBox(chart, chart.legend);
    delete chart.legend;
  },
  beforeUpdate(chart, _args, options2) {
    const legend = chart.legend;
    layouts.configure(chart, legend, options2);
    legend.options = options2;
  },
  afterUpdate(chart) {
    const legend = chart.legend;
    legend.buildLabels();
    legend.adjustHitBoxes();
  },
  afterEvent(chart, args) {
    if (!args.replay) {
      chart.legend.handleEvent(args.event);
    }
  },
  defaults: {
    display: true,
    position: "top",
    align: "center",
    fullSize: true,
    reverse: false,
    weight: 1e3,
    onClick(e, legendItem, legend) {
      const index = legendItem.datasetIndex;
      const ci = legend.chart;
      if (ci.isDatasetVisible(index)) {
        ci.hide(index);
        legendItem.hidden = true;
      } else {
        ci.show(index);
        legendItem.hidden = false;
      }
    },
    onHover: null,
    onLeave: null,
    labels: {
      color: (ctx) => ctx.chart.options.color,
      boxWidth: 40,
      padding: 10,
      generateLabels(chart) {
        const datasets = chart.data.datasets;
        const { labels: { usePointStyle, pointStyle, textAlign, color: color2, useBorderRadius, borderRadius } } = chart.legend.options;
        return chart._getSortedDatasetMetas().map((meta) => {
          const style = meta.controller.getStyle(usePointStyle ? 0 : void 0);
          const borderWidth = toPadding(style.borderWidth);
          return {
            text: datasets[meta.index].label,
            fillStyle: style.backgroundColor,
            fontColor: color2,
            hidden: !meta.visible,
            lineCap: style.borderCapStyle,
            lineDash: style.borderDash,
            lineDashOffset: style.borderDashOffset,
            lineJoin: style.borderJoinStyle,
            lineWidth: (borderWidth.width + borderWidth.height) / 4,
            strokeStyle: style.borderColor,
            pointStyle: pointStyle || style.pointStyle,
            rotation: style.rotation,
            textAlign: textAlign || style.textAlign,
            borderRadius: useBorderRadius && (borderRadius || style.borderRadius),
            datasetIndex: meta.index
          };
        }, this);
      }
    },
    title: {
      color: (ctx) => ctx.chart.options.color,
      display: false,
      position: "center",
      text: ""
    }
  },
  descriptors: {
    _scriptable: (name) => !name.startsWith("on"),
    labels: {
      _scriptable: (name) => ![
        "generateLabels",
        "filter",
        "sort"
      ].includes(name)
    }
  }
};
var Title = class extends Element {
  constructor(config) {
    super();
    this.chart = config.chart;
    this.options = config.options;
    this.ctx = config.ctx;
    this._padding = void 0;
    this.top = void 0;
    this.bottom = void 0;
    this.left = void 0;
    this.right = void 0;
    this.width = void 0;
    this.height = void 0;
    this.position = void 0;
    this.weight = void 0;
    this.fullSize = void 0;
  }
  update(maxWidth, maxHeight) {
    const opts = this.options;
    this.left = 0;
    this.top = 0;
    if (!opts.display) {
      this.width = this.height = this.right = this.bottom = 0;
      return;
    }
    this.width = this.right = maxWidth;
    this.height = this.bottom = maxHeight;
    const lineCount = isArray(opts.text) ? opts.text.length : 1;
    this._padding = toPadding(opts.padding);
    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;
    if (this.isHorizontal()) {
      this.height = textSize;
    } else {
      this.width = textSize;
    }
  }
  isHorizontal() {
    const pos = this.options.position;
    return pos === "top" || pos === "bottom";
  }
  _drawArgs(offset) {
    const { top, left, bottom, right, options: options2 } = this;
    const align = options2.align;
    let rotation = 0;
    let maxWidth, titleX, titleY;
    if (this.isHorizontal()) {
      titleX = _alignStartEnd(align, left, right);
      titleY = top + offset;
      maxWidth = right - left;
    } else {
      if (options2.position === "left") {
        titleX = left + offset;
        titleY = _alignStartEnd(align, bottom, top);
        rotation = PI * -0.5;
      } else {
        titleX = right - offset;
        titleY = _alignStartEnd(align, top, bottom);
        rotation = PI * 0.5;
      }
      maxWidth = bottom - top;
    }
    return {
      titleX,
      titleY,
      maxWidth,
      rotation
    };
  }
  draw() {
    const ctx = this.ctx;
    const opts = this.options;
    if (!opts.display) {
      return;
    }
    const fontOpts = toFont(opts.font);
    const lineHeight = fontOpts.lineHeight;
    const offset = lineHeight / 2 + this._padding.top;
    const { titleX, titleY, maxWidth, rotation } = this._drawArgs(offset);
    renderText(ctx, opts.text, 0, 0, fontOpts, {
      color: opts.color,
      maxWidth,
      rotation,
      textAlign: _toLeftRightCenter(opts.align),
      textBaseline: "middle",
      translation: [
        titleX,
        titleY
      ]
    });
  }
};
function createTitle(chart, titleOpts) {
  const title = new Title({
    ctx: chart.ctx,
    options: titleOpts,
    chart
  });
  layouts.configure(chart, title, titleOpts);
  layouts.addBox(chart, title);
  chart.titleBlock = title;
}
var plugin_title = {
  id: "title",
  _element: Title,
  start(chart, _args, options2) {
    createTitle(chart, options2);
  },
  stop(chart) {
    const titleBlock = chart.titleBlock;
    layouts.removeBox(chart, titleBlock);
    delete chart.titleBlock;
  },
  beforeUpdate(chart, _args, options2) {
    const title = chart.titleBlock;
    layouts.configure(chart, title, options2);
    title.options = options2;
  },
  defaults: {
    align: "center",
    display: false,
    font: {
      weight: "bold"
    },
    fullSize: true,
    padding: 10,
    position: "top",
    text: "",
    weight: 2e3
  },
  defaultRoutes: {
    color: "color"
  },
  descriptors: {
    _scriptable: true,
    _indexable: false
  }
};
var map2 = /* @__PURE__ */ new WeakMap();
var plugin_subtitle = {
  id: "subtitle",
  start(chart, _args, options2) {
    const title = new Title({
      ctx: chart.ctx,
      options: options2,
      chart
    });
    layouts.configure(chart, title, options2);
    layouts.addBox(chart, title);
    map2.set(chart, title);
  },
  stop(chart) {
    layouts.removeBox(chart, map2.get(chart));
    map2.delete(chart);
  },
  beforeUpdate(chart, _args, options2) {
    const title = map2.get(chart);
    layouts.configure(chart, title, options2);
    title.options = options2;
  },
  defaults: {
    align: "center",
    display: false,
    font: {
      weight: "normal"
    },
    fullSize: true,
    padding: 0,
    position: "top",
    text: "",
    weight: 1500
  },
  defaultRoutes: {
    color: "color"
  },
  descriptors: {
    _scriptable: true,
    _indexable: false
  }
};
var positioners = {
  average(items) {
    if (!items.length) {
      return false;
    }
    let i, len;
    let xSet = /* @__PURE__ */ new Set();
    let y = 0;
    let count = 0;
    for (i = 0, len = items.length; i < len; ++i) {
      const el = items[i].element;
      if (el && el.hasValue()) {
        const pos = el.tooltipPosition();
        xSet.add(pos.x);
        y += pos.y;
        ++count;
      }
    }
    if (count === 0 || xSet.size === 0) {
      return false;
    }
    const xAverage = [
      ...xSet
    ].reduce((a, b) => a + b) / xSet.size;
    return {
      x: xAverage,
      y: y / count
    };
  },
  nearest(items, eventPosition) {
    if (!items.length) {
      return false;
    }
    let x = eventPosition.x;
    let y = eventPosition.y;
    let minDistance = Number.POSITIVE_INFINITY;
    let i, len, nearestElement;
    for (i = 0, len = items.length; i < len; ++i) {
      const el = items[i].element;
      if (el && el.hasValue()) {
        const center = el.getCenterPoint();
        const d = distanceBetweenPoints(eventPosition, center);
        if (d < minDistance) {
          minDistance = d;
          nearestElement = el;
        }
      }
    }
    if (nearestElement) {
      const tp = nearestElement.tooltipPosition();
      x = tp.x;
      y = tp.y;
    }
    return {
      x,
      y
    };
  }
};
function pushOrConcat(base, toPush) {
  if (toPush) {
    if (isArray(toPush)) {
      Array.prototype.push.apply(base, toPush);
    } else {
      base.push(toPush);
    }
  }
  return base;
}
function splitNewlines(str) {
  if ((typeof str === "string" || str instanceof String) && str.indexOf("\n") > -1) {
    return str.split("\n");
  }
  return str;
}
function createTooltipItem(chart, item) {
  const { element, datasetIndex, index } = item;
  const controller = chart.getDatasetMeta(datasetIndex).controller;
  const { label, value } = controller.getLabelAndValue(index);
  return {
    chart,
    label,
    parsed: controller.getParsed(index),
    raw: chart.data.datasets[datasetIndex].data[index],
    formattedValue: value,
    dataset: controller.getDataset(),
    dataIndex: index,
    datasetIndex,
    element
  };
}
function getTooltipSize(tooltip, options2) {
  const ctx = tooltip.chart.ctx;
  const { body, footer, title } = tooltip;
  const { boxWidth, boxHeight } = options2;
  const bodyFont = toFont(options2.bodyFont);
  const titleFont = toFont(options2.titleFont);
  const footerFont = toFont(options2.footerFont);
  const titleLineCount = title.length;
  const footerLineCount = footer.length;
  const bodyLineItemCount = body.length;
  const padding = toPadding(options2.padding);
  let height = padding.height;
  let width = 0;
  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);
  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;
  if (titleLineCount) {
    height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options2.titleSpacing + options2.titleMarginBottom;
  }
  if (combinedBodyLength) {
    const bodyLineHeight = options2.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;
    height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options2.bodySpacing;
  }
  if (footerLineCount) {
    height += options2.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options2.footerSpacing;
  }
  let widthPadding = 0;
  const maxLineWidth = function(line) {
    width = Math.max(width, ctx.measureText(line).width + widthPadding);
  };
  ctx.save();
  ctx.font = titleFont.string;
  each(tooltip.title, maxLineWidth);
  ctx.font = bodyFont.string;
  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);
  widthPadding = options2.displayColors ? boxWidth + 2 + options2.boxPadding : 0;
  each(body, (bodyItem) => {
    each(bodyItem.before, maxLineWidth);
    each(bodyItem.lines, maxLineWidth);
    each(bodyItem.after, maxLineWidth);
  });
  widthPadding = 0;
  ctx.font = footerFont.string;
  each(tooltip.footer, maxLineWidth);
  ctx.restore();
  width += padding.width;
  return {
    width,
    height
  };
}
function determineYAlign(chart, size) {
  const { y, height } = size;
  if (y < height / 2) {
    return "top";
  } else if (y > chart.height - height / 2) {
    return "bottom";
  }
  return "center";
}
function doesNotFitWithAlign(xAlign, chart, options2, size) {
  const { x, width } = size;
  const caret = options2.caretSize + options2.caretPadding;
  if (xAlign === "left" && x + width + caret > chart.width) {
    return true;
  }
  if (xAlign === "right" && x - width - caret < 0) {
    return true;
  }
}
function determineXAlign(chart, options2, size, yAlign) {
  const { x, width } = size;
  const { width: chartWidth, chartArea: { left, right } } = chart;
  let xAlign = "center";
  if (yAlign === "center") {
    xAlign = x <= (left + right) / 2 ? "left" : "right";
  } else if (x <= width / 2) {
    xAlign = "left";
  } else if (x >= chartWidth - width / 2) {
    xAlign = "right";
  }
  if (doesNotFitWithAlign(xAlign, chart, options2, size)) {
    xAlign = "center";
  }
  return xAlign;
}
function determineAlignment(chart, options2, size) {
  const yAlign = size.yAlign || options2.yAlign || determineYAlign(chart, size);
  return {
    xAlign: size.xAlign || options2.xAlign || determineXAlign(chart, options2, size, yAlign),
    yAlign
  };
}
function alignX(size, xAlign) {
  let { x, width } = size;
  if (xAlign === "right") {
    x -= width;
  } else if (xAlign === "center") {
    x -= width / 2;
  }
  return x;
}
function alignY(size, yAlign, paddingAndSize) {
  let { y, height } = size;
  if (yAlign === "top") {
    y += paddingAndSize;
  } else if (yAlign === "bottom") {
    y -= height + paddingAndSize;
  } else {
    y -= height / 2;
  }
  return y;
}
function getBackgroundPoint(options2, size, alignment, chart) {
  const { caretSize, caretPadding, cornerRadius } = options2;
  const { xAlign, yAlign } = alignment;
  const paddingAndSize = caretSize + caretPadding;
  const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius);
  let x = alignX(size, xAlign);
  const y = alignY(size, yAlign, paddingAndSize);
  if (yAlign === "center") {
    if (xAlign === "left") {
      x += paddingAndSize;
    } else if (xAlign === "right") {
      x -= paddingAndSize;
    }
  } else if (xAlign === "left") {
    x -= Math.max(topLeft, bottomLeft) + caretSize;
  } else if (xAlign === "right") {
    x += Math.max(topRight, bottomRight) + caretSize;
  }
  return {
    x: _limitValue(x, 0, chart.width - size.width),
    y: _limitValue(y, 0, chart.height - size.height)
  };
}
function getAlignedX(tooltip, align, options2) {
  const padding = toPadding(options2.padding);
  return align === "center" ? tooltip.x + tooltip.width / 2 : align === "right" ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;
}
function getBeforeAfterBodyLines(callback2) {
  return pushOrConcat([], splitNewlines(callback2));
}
function createTooltipContext(parent, tooltip, tooltipItems) {
  return createContext(parent, {
    tooltip,
    tooltipItems,
    type: "tooltip"
  });
}
function overrideCallbacks(callbacks, context) {
  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;
  return override ? callbacks.override(override) : callbacks;
}
var defaultCallbacks = {
  beforeTitle: noop,
  title(tooltipItems) {
    if (tooltipItems.length > 0) {
      const item = tooltipItems[0];
      const labels = item.chart.data.labels;
      const labelCount = labels ? labels.length : 0;
      if (this && this.options && this.options.mode === "dataset") {
        return item.dataset.label || "";
      } else if (item.label) {
        return item.label;
      } else if (labelCount > 0 && item.dataIndex < labelCount) {
        return labels[item.dataIndex];
      }
    }
    return "";
  },
  afterTitle: noop,
  beforeBody: noop,
  beforeLabel: noop,
  label(tooltipItem) {
    if (this && this.options && this.options.mode === "dataset") {
      return tooltipItem.label + ": " + tooltipItem.formattedValue || tooltipItem.formattedValue;
    }
    let label = tooltipItem.dataset.label || "";
    if (label) {
      label += ": ";
    }
    const value = tooltipItem.formattedValue;
    if (!isNullOrUndef(value)) {
      label += value;
    }
    return label;
  },
  labelColor(tooltipItem) {
    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
    const options2 = meta.controller.getStyle(tooltipItem.dataIndex);
    return {
      borderColor: options2.borderColor,
      backgroundColor: options2.backgroundColor,
      borderWidth: options2.borderWidth,
      borderDash: options2.borderDash,
      borderDashOffset: options2.borderDashOffset,
      borderRadius: 0
    };
  },
  labelTextColor() {
    return this.options.bodyColor;
  },
  labelPointStyle(tooltipItem) {
    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
    const options2 = meta.controller.getStyle(tooltipItem.dataIndex);
    return {
      pointStyle: options2.pointStyle,
      rotation: options2.rotation
    };
  },
  afterLabel: noop,
  afterBody: noop,
  beforeFooter: noop,
  footer: noop,
  afterFooter: noop
};
function invokeCallbackWithFallback(callbacks, name, ctx, arg) {
  const result = callbacks[name].call(ctx, arg);
  if (typeof result === "undefined") {
    return defaultCallbacks[name].call(ctx, arg);
  }
  return result;
}
var Tooltip = class extends Element {
  constructor(config) {
    super();
    this.opacity = 0;
    this._active = [];
    this._eventPosition = void 0;
    this._size = void 0;
    this._cachedAnimations = void 0;
    this._tooltipItems = [];
    this.$animations = void 0;
    this.$context = void 0;
    this.chart = config.chart;
    this.options = config.options;
    this.dataPoints = void 0;
    this.title = void 0;
    this.beforeBody = void 0;
    this.body = void 0;
    this.afterBody = void 0;
    this.footer = void 0;
    this.xAlign = void 0;
    this.yAlign = void 0;
    this.x = void 0;
    this.y = void 0;
    this.height = void 0;
    this.width = void 0;
    this.caretX = void 0;
    this.caretY = void 0;
    this.labelColors = void 0;
    this.labelPointStyles = void 0;
    this.labelTextColors = void 0;
  }
  initialize(options2) {
    this.options = options2;
    this._cachedAnimations = void 0;
    this.$context = void 0;
  }
  _resolveAnimations() {
    const cached = this._cachedAnimations;
    if (cached) {
      return cached;
    }
    const chart = this.chart;
    const options2 = this.options.setContext(this.getContext());
    const opts = options2.enabled && chart.options.animation && options2.animations;
    const animations = new Animations(this.chart, opts);
    if (opts._cacheable) {
      this._cachedAnimations = Object.freeze(animations);
    }
    return animations;
  }
  getContext() {
    return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));
  }
  getTitle(context, options2) {
    const { callbacks } = options2;
    const beforeTitle = invokeCallbackWithFallback(callbacks, "beforeTitle", this, context);
    const title = invokeCallbackWithFallback(callbacks, "title", this, context);
    const afterTitle = invokeCallbackWithFallback(callbacks, "afterTitle", this, context);
    let lines = [];
    lines = pushOrConcat(lines, splitNewlines(beforeTitle));
    lines = pushOrConcat(lines, splitNewlines(title));
    lines = pushOrConcat(lines, splitNewlines(afterTitle));
    return lines;
  }
  getBeforeBody(tooltipItems, options2) {
    return getBeforeAfterBodyLines(invokeCallbackWithFallback(options2.callbacks, "beforeBody", this, tooltipItems));
  }
  getBody(tooltipItems, options2) {
    const { callbacks } = options2;
    const bodyItems = [];
    each(tooltipItems, (context) => {
      const bodyItem = {
        before: [],
        lines: [],
        after: []
      };
      const scoped = overrideCallbacks(callbacks, context);
      pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, "beforeLabel", this, context)));
      pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, "label", this, context));
      pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, "afterLabel", this, context)));
      bodyItems.push(bodyItem);
    });
    return bodyItems;
  }
  getAfterBody(tooltipItems, options2) {
    return getBeforeAfterBodyLines(invokeCallbackWithFallback(options2.callbacks, "afterBody", this, tooltipItems));
  }
  getFooter(tooltipItems, options2) {
    const { callbacks } = options2;
    const beforeFooter = invokeCallbackWithFallback(callbacks, "beforeFooter", this, tooltipItems);
    const footer = invokeCallbackWithFallback(callbacks, "footer", this, tooltipItems);
    const afterFooter = invokeCallbackWithFallback(callbacks, "afterFooter", this, tooltipItems);
    let lines = [];
    lines = pushOrConcat(lines, splitNewlines(beforeFooter));
    lines = pushOrConcat(lines, splitNewlines(footer));
    lines = pushOrConcat(lines, splitNewlines(afterFooter));
    return lines;
  }
  _createItems(options2) {
    const active = this._active;
    const data = this.chart.data;
    const labelColors = [];
    const labelPointStyles = [];
    const labelTextColors = [];
    let tooltipItems = [];
    let i, len;
    for (i = 0, len = active.length; i < len; ++i) {
      tooltipItems.push(createTooltipItem(this.chart, active[i]));
    }
    if (options2.filter) {
      tooltipItems = tooltipItems.filter((element, index, array) => options2.filter(element, index, array, data));
    }
    if (options2.itemSort) {
      tooltipItems = tooltipItems.sort((a, b) => options2.itemSort(a, b, data));
    }
    each(tooltipItems, (context) => {
      const scoped = overrideCallbacks(options2.callbacks, context);
      labelColors.push(invokeCallbackWithFallback(scoped, "labelColor", this, context));
      labelPointStyles.push(invokeCallbackWithFallback(scoped, "labelPointStyle", this, context));
      labelTextColors.push(invokeCallbackWithFallback(scoped, "labelTextColor", this, context));
    });
    this.labelColors = labelColors;
    this.labelPointStyles = labelPointStyles;
    this.labelTextColors = labelTextColors;
    this.dataPoints = tooltipItems;
    return tooltipItems;
  }
  update(changed, replay) {
    const options2 = this.options.setContext(this.getContext());
    const active = this._active;
    let properties;
    let tooltipItems = [];
    if (!active.length) {
      if (this.opacity !== 0) {
        properties = {
          opacity: 0
        };
      }
    } else {
      const position = positioners[options2.position].call(this, active, this._eventPosition);
      tooltipItems = this._createItems(options2);
      this.title = this.getTitle(tooltipItems, options2);
      this.beforeBody = this.getBeforeBody(tooltipItems, options2);
      this.body = this.getBody(tooltipItems, options2);
      this.afterBody = this.getAfterBody(tooltipItems, options2);
      this.footer = this.getFooter(tooltipItems, options2);
      const size = this._size = getTooltipSize(this, options2);
      const positionAndSize = Object.assign({}, position, size);
      const alignment = determineAlignment(this.chart, options2, positionAndSize);
      const backgroundPoint = getBackgroundPoint(options2, positionAndSize, alignment, this.chart);
      this.xAlign = alignment.xAlign;
      this.yAlign = alignment.yAlign;
      properties = {
        opacity: 1,
        x: backgroundPoint.x,
        y: backgroundPoint.y,
        width: size.width,
        height: size.height,
        caretX: position.x,
        caretY: position.y
      };
    }
    this._tooltipItems = tooltipItems;
    this.$context = void 0;
    if (properties) {
      this._resolveAnimations().update(this, properties);
    }
    if (changed && options2.external) {
      options2.external.call(this, {
        chart: this.chart,
        tooltip: this,
        replay
      });
    }
  }
  drawCaret(tooltipPoint, ctx, size, options2) {
    const caretPosition = this.getCaretPosition(tooltipPoint, size, options2);
    ctx.lineTo(caretPosition.x1, caretPosition.y1);
    ctx.lineTo(caretPosition.x2, caretPosition.y2);
    ctx.lineTo(caretPosition.x3, caretPosition.y3);
  }
  getCaretPosition(tooltipPoint, size, options2) {
    const { xAlign, yAlign } = this;
    const { caretSize, cornerRadius } = options2;
    const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius);
    const { x: ptX, y: ptY } = tooltipPoint;
    const { width, height } = size;
    let x1, x2, x3, y1, y2, y3;
    if (yAlign === "center") {
      y2 = ptY + height / 2;
      if (xAlign === "left") {
        x1 = ptX;
        x2 = x1 - caretSize;
        y1 = y2 + caretSize;
        y3 = y2 - caretSize;
      } else {
        x1 = ptX + width;
        x2 = x1 + caretSize;
        y1 = y2 - caretSize;
        y3 = y2 + caretSize;
      }
      x3 = x1;
    } else {
      if (xAlign === "left") {
        x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;
      } else if (xAlign === "right") {
        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;
      } else {
        x2 = this.caretX;
      }
      if (yAlign === "top") {
        y1 = ptY;
        y2 = y1 - caretSize;
        x1 = x2 - caretSize;
        x3 = x2 + caretSize;
      } else {
        y1 = ptY + height;
        y2 = y1 + caretSize;
        x1 = x2 + caretSize;
        x3 = x2 - caretSize;
      }
      y3 = y1;
    }
    return {
      x1,
      x2,
      x3,
      y1,
      y2,
      y3
    };
  }
  drawTitle(pt, ctx, options2) {
    const title = this.title;
    const length = title.length;
    let titleFont, titleSpacing, i;
    if (length) {
      const rtlHelper = getRtlAdapter(options2.rtl, this.x, this.width);
      pt.x = getAlignedX(this, options2.titleAlign, options2);
      ctx.textAlign = rtlHelper.textAlign(options2.titleAlign);
      ctx.textBaseline = "middle";
      titleFont = toFont(options2.titleFont);
      titleSpacing = options2.titleSpacing;
      ctx.fillStyle = options2.titleColor;
      ctx.font = titleFont.string;
      for (i = 0; i < length; ++i) {
        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);
        pt.y += titleFont.lineHeight + titleSpacing;
        if (i + 1 === length) {
          pt.y += options2.titleMarginBottom - titleSpacing;
        }
      }
    }
  }
  _drawColorBox(ctx, pt, i, rtlHelper, options2) {
    const labelColor = this.labelColors[i];
    const labelPointStyle = this.labelPointStyles[i];
    const { boxHeight, boxWidth } = options2;
    const bodyFont = toFont(options2.bodyFont);
    const colorX = getAlignedX(this, "left", options2);
    const rtlColorX = rtlHelper.x(colorX);
    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;
    const colorY = pt.y + yOffSet;
    if (options2.usePointStyle) {
      const drawOptions = {
        radius: Math.min(boxWidth, boxHeight) / 2,
        pointStyle: labelPointStyle.pointStyle,
        rotation: labelPointStyle.rotation,
        borderWidth: 1
      };
      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;
      const centerY = colorY + boxHeight / 2;
      ctx.strokeStyle = options2.multiKeyBackground;
      ctx.fillStyle = options2.multiKeyBackground;
      drawPoint(ctx, drawOptions, centerX, centerY);
      ctx.strokeStyle = labelColor.borderColor;
      ctx.fillStyle = labelColor.backgroundColor;
      drawPoint(ctx, drawOptions, centerX, centerY);
    } else {
      ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;
      ctx.strokeStyle = labelColor.borderColor;
      ctx.setLineDash(labelColor.borderDash || []);
      ctx.lineDashOffset = labelColor.borderDashOffset || 0;
      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);
      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);
      const borderRadius = toTRBLCorners(labelColor.borderRadius);
      if (Object.values(borderRadius).some((v) => v !== 0)) {
        ctx.beginPath();
        ctx.fillStyle = options2.multiKeyBackground;
        addRoundedRectPath(ctx, {
          x: outerX,
          y: colorY,
          w: boxWidth,
          h: boxHeight,
          radius: borderRadius
        });
        ctx.fill();
        ctx.stroke();
        ctx.fillStyle = labelColor.backgroundColor;
        ctx.beginPath();
        addRoundedRectPath(ctx, {
          x: innerX,
          y: colorY + 1,
          w: boxWidth - 2,
          h: boxHeight - 2,
          radius: borderRadius
        });
        ctx.fill();
      } else {
        ctx.fillStyle = options2.multiKeyBackground;
        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);
        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);
        ctx.fillStyle = labelColor.backgroundColor;
        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);
      }
    }
    ctx.fillStyle = this.labelTextColors[i];
  }
  drawBody(pt, ctx, options2) {
    const { body } = this;
    const { bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding } = options2;
    const bodyFont = toFont(options2.bodyFont);
    let bodyLineHeight = bodyFont.lineHeight;
    let xLinePadding = 0;
    const rtlHelper = getRtlAdapter(options2.rtl, this.x, this.width);
    const fillLineOfText = function(line) {
      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);
      pt.y += bodyLineHeight + bodySpacing;
    };
    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);
    let bodyItem, textColor, lines, i, j, ilen, jlen;
    ctx.textAlign = bodyAlign;
    ctx.textBaseline = "middle";
    ctx.font = bodyFont.string;
    pt.x = getAlignedX(this, bodyAlignForCalculation, options2);
    ctx.fillStyle = options2.bodyColor;
    each(this.beforeBody, fillLineOfText);
    xLinePadding = displayColors && bodyAlignForCalculation !== "right" ? bodyAlign === "center" ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;
    for (i = 0, ilen = body.length; i < ilen; ++i) {
      bodyItem = body[i];
      textColor = this.labelTextColors[i];
      ctx.fillStyle = textColor;
      each(bodyItem.before, fillLineOfText);
      lines = bodyItem.lines;
      if (displayColors && lines.length) {
        this._drawColorBox(ctx, pt, i, rtlHelper, options2);
        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);
      }
      for (j = 0, jlen = lines.length; j < jlen; ++j) {
        fillLineOfText(lines[j]);
        bodyLineHeight = bodyFont.lineHeight;
      }
      each(bodyItem.after, fillLineOfText);
    }
    xLinePadding = 0;
    bodyLineHeight = bodyFont.lineHeight;
    each(this.afterBody, fillLineOfText);
    pt.y -= bodySpacing;
  }
  drawFooter(pt, ctx, options2) {
    const footer = this.footer;
    const length = footer.length;
    let footerFont, i;
    if (length) {
      const rtlHelper = getRtlAdapter(options2.rtl, this.x, this.width);
      pt.x = getAlignedX(this, options2.footerAlign, options2);
      pt.y += options2.footerMarginTop;
      ctx.textAlign = rtlHelper.textAlign(options2.footerAlign);
      ctx.textBaseline = "middle";
      footerFont = toFont(options2.footerFont);
      ctx.fillStyle = options2.footerColor;
      ctx.font = footerFont.string;
      for (i = 0; i < length; ++i) {
        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);
        pt.y += footerFont.lineHeight + options2.footerSpacing;
      }
    }
  }
  drawBackground(pt, ctx, tooltipSize, options2) {
    const { xAlign, yAlign } = this;
    const { x, y } = pt;
    const { width, height } = tooltipSize;
    const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(options2.cornerRadius);
    ctx.fillStyle = options2.backgroundColor;
    ctx.strokeStyle = options2.borderColor;
    ctx.lineWidth = options2.borderWidth;
    ctx.beginPath();
    ctx.moveTo(x + topLeft, y);
    if (yAlign === "top") {
      this.drawCaret(pt, ctx, tooltipSize, options2);
    }
    ctx.lineTo(x + width - topRight, y);
    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);
    if (yAlign === "center" && xAlign === "right") {
      this.drawCaret(pt, ctx, tooltipSize, options2);
    }
    ctx.lineTo(x + width, y + height - bottomRight);
    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);
    if (yAlign === "bottom") {
      this.drawCaret(pt, ctx, tooltipSize, options2);
    }
    ctx.lineTo(x + bottomLeft, y + height);
    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);
    if (yAlign === "center" && xAlign === "left") {
      this.drawCaret(pt, ctx, tooltipSize, options2);
    }
    ctx.lineTo(x, y + topLeft);
    ctx.quadraticCurveTo(x, y, x + topLeft, y);
    ctx.closePath();
    ctx.fill();
    if (options2.borderWidth > 0) {
      ctx.stroke();
    }
  }
  _updateAnimationTarget(options2) {
    const chart = this.chart;
    const anims = this.$animations;
    const animX = anims && anims.x;
    const animY = anims && anims.y;
    if (animX || animY) {
      const position = positioners[options2.position].call(this, this._active, this._eventPosition);
      if (!position) {
        return;
      }
      const size = this._size = getTooltipSize(this, options2);
      const positionAndSize = Object.assign({}, position, this._size);
      const alignment = determineAlignment(chart, options2, positionAndSize);
      const point = getBackgroundPoint(options2, positionAndSize, alignment, chart);
      if (animX._to !== point.x || animY._to !== point.y) {
        this.xAlign = alignment.xAlign;
        this.yAlign = alignment.yAlign;
        this.width = size.width;
        this.height = size.height;
        this.caretX = position.x;
        this.caretY = position.y;
        this._resolveAnimations().update(this, point);
      }
    }
  }
  _willRender() {
    return !!this.opacity;
  }
  draw(ctx) {
    const options2 = this.options.setContext(this.getContext());
    let opacity = this.opacity;
    if (!opacity) {
      return;
    }
    this._updateAnimationTarget(options2);
    const tooltipSize = {
      width: this.width,
      height: this.height
    };
    const pt = {
      x: this.x,
      y: this.y
    };
    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;
    const padding = toPadding(options2.padding);
    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;
    if (options2.enabled && hasTooltipContent) {
      ctx.save();
      ctx.globalAlpha = opacity;
      this.drawBackground(pt, ctx, tooltipSize, options2);
      overrideTextDirection(ctx, options2.textDirection);
      pt.y += padding.top;
      this.drawTitle(pt, ctx, options2);
      this.drawBody(pt, ctx, options2);
      this.drawFooter(pt, ctx, options2);
      restoreTextDirection(ctx, options2.textDirection);
      ctx.restore();
    }
  }
  getActiveElements() {
    return this._active || [];
  }
  setActiveElements(activeElements, eventPosition) {
    const lastActive = this._active;
    const active = activeElements.map(({ datasetIndex, index }) => {
      const meta = this.chart.getDatasetMeta(datasetIndex);
      if (!meta) {
        throw new Error("Cannot find a dataset at index " + datasetIndex);
      }
      return {
        datasetIndex,
        element: meta.data[index],
        index
      };
    });
    const changed = !_elementsEqual(lastActive, active);
    const positionChanged = this._positionChanged(active, eventPosition);
    if (changed || positionChanged) {
      this._active = active;
      this._eventPosition = eventPosition;
      this._ignoreReplayEvents = true;
      this.update(true);
    }
  }
  handleEvent(e, replay, inChartArea = true) {
    if (replay && this._ignoreReplayEvents) {
      return false;
    }
    this._ignoreReplayEvents = false;
    const options2 = this.options;
    const lastActive = this._active || [];
    const active = this._getActiveElements(e, lastActive, replay, inChartArea);
    const positionChanged = this._positionChanged(active, e);
    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;
    if (changed) {
      this._active = active;
      if (options2.enabled || options2.external) {
        this._eventPosition = {
          x: e.x,
          y: e.y
        };
        this.update(true, replay);
      }
    }
    return changed;
  }
  _getActiveElements(e, lastActive, replay, inChartArea) {
    const options2 = this.options;
    if (e.type === "mouseout") {
      return [];
    }
    if (!inChartArea) {
      return lastActive.filter((i) => this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== void 0);
    }
    const active = this.chart.getElementsAtEventForMode(e, options2.mode, options2, replay);
    if (options2.reverse) {
      active.reverse();
    }
    return active;
  }
  _positionChanged(active, e) {
    const { caretX, caretY, options: options2 } = this;
    const position = positioners[options2.position].call(this, active, e);
    return position !== false && (caretX !== position.x || caretY !== position.y);
  }
};
__publicField(Tooltip, "positioners", positioners);
var plugin_tooltip = {
  id: "tooltip",
  _element: Tooltip,
  positioners,
  afterInit(chart, _args, options2) {
    if (options2) {
      chart.tooltip = new Tooltip({
        chart,
        options: options2
      });
    }
  },
  beforeUpdate(chart, _args, options2) {
    if (chart.tooltip) {
      chart.tooltip.initialize(options2);
    }
  },
  reset(chart, _args, options2) {
    if (chart.tooltip) {
      chart.tooltip.initialize(options2);
    }
  },
  afterDraw(chart) {
    const tooltip = chart.tooltip;
    if (tooltip && tooltip._willRender()) {
      const args = {
        tooltip
      };
      if (chart.notifyPlugins("beforeTooltipDraw", {
        ...args,
        cancelable: true
      }) === false) {
        return;
      }
      tooltip.draw(chart.ctx);
      chart.notifyPlugins("afterTooltipDraw", args);
    }
  },
  afterEvent(chart, args) {
    if (chart.tooltip) {
      const useFinalPosition = args.replay;
      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {
        args.changed = true;
      }
    }
  },
  defaults: {
    enabled: true,
    external: null,
    position: "average",
    backgroundColor: "rgba(0,0,0,0.8)",
    titleColor: "#fff",
    titleFont: {
      weight: "bold"
    },
    titleSpacing: 2,
    titleMarginBottom: 6,
    titleAlign: "left",
    bodyColor: "#fff",
    bodySpacing: 2,
    bodyFont: {},
    bodyAlign: "left",
    footerColor: "#fff",
    footerSpacing: 2,
    footerMarginTop: 6,
    footerFont: {
      weight: "bold"
    },
    footerAlign: "left",
    padding: 6,
    caretPadding: 2,
    caretSize: 5,
    cornerRadius: 6,
    boxHeight: (ctx, opts) => opts.bodyFont.size,
    boxWidth: (ctx, opts) => opts.bodyFont.size,
    multiKeyBackground: "#fff",
    displayColors: true,
    boxPadding: 0,
    borderColor: "rgba(0,0,0,0)",
    borderWidth: 0,
    animation: {
      duration: 400,
      easing: "easeOutQuart"
    },
    animations: {
      numbers: {
        type: "number",
        properties: [
          "x",
          "y",
          "width",
          "height",
          "caretX",
          "caretY"
        ]
      },
      opacity: {
        easing: "linear",
        duration: 200
      }
    },
    callbacks: defaultCallbacks
  },
  defaultRoutes: {
    bodyFont: "font",
    footerFont: "font",
    titleFont: "font"
  },
  descriptors: {
    _scriptable: (name) => name !== "filter" && name !== "itemSort" && name !== "external",
    _indexable: false,
    callbacks: {
      _scriptable: false,
      _indexable: false
    },
    animation: {
      _fallback: false
    },
    animations: {
      _fallback: "animation"
    }
  },
  additionalOptionScopes: [
    "interaction"
  ]
};
var addIfString = (labels, raw, index, addedLabels) => {
  if (typeof raw === "string") {
    index = labels.push(raw) - 1;
    addedLabels.unshift({
      index,
      label: raw
    });
  } else if (isNaN(raw)) {
    index = null;
  }
  return index;
};
function findOrAddLabel(labels, raw, index, addedLabels) {
  const first = labels.indexOf(raw);
  if (first === -1) {
    return addIfString(labels, raw, index, addedLabels);
  }
  const last = labels.lastIndexOf(raw);
  return first !== last ? index : first;
}
var validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);
function _getLabelForValue(value) {
  const labels = this.getLabels();
  if (value >= 0 && value < labels.length) {
    return labels[value];
  }
  return value;
}
var CategoryScale = class extends Scale {
  constructor(cfg) {
    super(cfg);
    this._startValue = void 0;
    this._valueRange = 0;
    this._addedLabels = [];
  }
  init(scaleOptions) {
    const added = this._addedLabels;
    if (added.length) {
      const labels = this.getLabels();
      for (const { index, label } of added) {
        if (labels[index] === label) {
          labels.splice(index, 1);
        }
      }
      this._addedLabels = [];
    }
    super.init(scaleOptions);
  }
  parse(raw, index) {
    if (isNullOrUndef(raw)) {
      return null;
    }
    const labels = this.getLabels();
    index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);
    return validIndex(index, labels.length - 1);
  }
  determineDataLimits() {
    const { minDefined, maxDefined } = this.getUserBounds();
    let { min, max } = this.getMinMax(true);
    if (this.options.bounds === "ticks") {
      if (!minDefined) {
        min = 0;
      }
      if (!maxDefined) {
        max = this.getLabels().length - 1;
      }
    }
    this.min = min;
    this.max = max;
  }
  buildTicks() {
    const min = this.min;
    const max = this.max;
    const offset = this.options.offset;
    const ticks = [];
    let labels = this.getLabels();
    labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);
    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);
    this._startValue = this.min - (offset ? 0.5 : 0);
    for (let value = min; value <= max; value++) {
      ticks.push({
        value
      });
    }
    return ticks;
  }
  getLabelForValue(value) {
    return _getLabelForValue.call(this, value);
  }
  configure() {
    super.configure();
    if (!this.isHorizontal()) {
      this._reversePixels = !this._reversePixels;
    }
  }
  getPixelForValue(value) {
    if (typeof value !== "number") {
      value = this.parse(value);
    }
    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
  }
  getPixelForTick(index) {
    const ticks = this.ticks;
    if (index < 0 || index > ticks.length - 1) {
      return null;
    }
    return this.getPixelForValue(ticks[index].value);
  }
  getValueForPixel(pixel) {
    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);
  }
  getBasePixel() {
    return this.bottom;
  }
};
__publicField(CategoryScale, "id", "category");
__publicField(CategoryScale, "defaults", {
  ticks: {
    callback: _getLabelForValue
  }
});
function generateTicks$1(generationOptions, dataRange) {
  const ticks = [];
  const MIN_SPACING = 1e-14;
  const { bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds } = generationOptions;
  const unit = step || 1;
  const maxSpaces = maxTicks - 1;
  const { min: rmin, max: rmax } = dataRange;
  const minDefined = !isNullOrUndef(min);
  const maxDefined = !isNullOrUndef(max);
  const countDefined = !isNullOrUndef(count);
  const minSpacing = (rmax - rmin) / (maxDigits + 1);
  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;
  let factor, niceMin, niceMax, numSpaces;
  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {
    return [
      {
        value: rmin
      },
      {
        value: rmax
      }
    ];
  }
  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);
  if (numSpaces > maxSpaces) {
    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;
  }
  if (!isNullOrUndef(precision)) {
    factor = Math.pow(10, precision);
    spacing = Math.ceil(spacing * factor) / factor;
  }
  if (bounds === "ticks") {
    niceMin = Math.floor(rmin / spacing) * spacing;
    niceMax = Math.ceil(rmax / spacing) * spacing;
  } else {
    niceMin = rmin;
    niceMax = rmax;
  }
  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1e3)) {
    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));
    spacing = (max - min) / numSpaces;
    niceMin = min;
    niceMax = max;
  } else if (countDefined) {
    niceMin = minDefined ? min : niceMin;
    niceMax = maxDefined ? max : niceMax;
    numSpaces = count - 1;
    spacing = (niceMax - niceMin) / numSpaces;
  } else {
    numSpaces = (niceMax - niceMin) / spacing;
    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1e3)) {
      numSpaces = Math.round(numSpaces);
    } else {
      numSpaces = Math.ceil(numSpaces);
    }
  }
  const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));
  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);
  niceMin = Math.round(niceMin * factor) / factor;
  niceMax = Math.round(niceMax * factor) / factor;
  let j = 0;
  if (minDefined) {
    if (includeBounds && niceMin !== min) {
      ticks.push({
        value: min
      });
      if (niceMin < min) {
        j++;
      }
      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {
        j++;
      }
    } else if (niceMin < min) {
      j++;
    }
  }
  for (; j < numSpaces; ++j) {
    const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;
    if (maxDefined && tickValue > max) {
      break;
    }
    ticks.push({
      value: tickValue
    });
  }
  if (maxDefined && includeBounds && niceMax !== max) {
    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {
      ticks[ticks.length - 1].value = max;
    } else {
      ticks.push({
        value: max
      });
    }
  } else if (!maxDefined || niceMax === max) {
    ticks.push({
      value: niceMax
    });
  }
  return ticks;
}
function relativeLabelSize(value, minSpacing, { horizontal, minRotation }) {
  const rad = toRadians(minRotation);
  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 1e-3;
  const length = 0.75 * minSpacing * ("" + value).length;
  return Math.min(minSpacing / ratio, length);
}
var LinearScaleBase = class extends Scale {
  constructor(cfg) {
    super(cfg);
    this.start = void 0;
    this.end = void 0;
    this._startValue = void 0;
    this._endValue = void 0;
    this._valueRange = 0;
  }
  parse(raw, index) {
    if (isNullOrUndef(raw)) {
      return null;
    }
    if ((typeof raw === "number" || raw instanceof Number) && !isFinite(+raw)) {
      return null;
    }
    return +raw;
  }
  handleTickRangeOptions() {
    const { beginAtZero } = this.options;
    const { minDefined, maxDefined } = this.getUserBounds();
    let { min, max } = this;
    const setMin = (v) => min = minDefined ? min : v;
    const setMax = (v) => max = maxDefined ? max : v;
    if (beginAtZero) {
      const minSign = sign(min);
      const maxSign = sign(max);
      if (minSign < 0 && maxSign < 0) {
        setMax(0);
      } else if (minSign > 0 && maxSign > 0) {
        setMin(0);
      }
    }
    if (min === max) {
      let offset = max === 0 ? 1 : Math.abs(max * 0.05);
      setMax(max + offset);
      if (!beginAtZero) {
        setMin(min - offset);
      }
    }
    this.min = min;
    this.max = max;
  }
  getTickLimit() {
    const tickOpts = this.options.ticks;
    let { maxTicksLimit, stepSize } = tickOpts;
    let maxTicks;
    if (stepSize) {
      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;
      if (maxTicks > 1e3) {
        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);
        maxTicks = 1e3;
      }
    } else {
      maxTicks = this.computeTickLimit();
      maxTicksLimit = maxTicksLimit || 11;
    }
    if (maxTicksLimit) {
      maxTicks = Math.min(maxTicksLimit, maxTicks);
    }
    return maxTicks;
  }
  computeTickLimit() {
    return Number.POSITIVE_INFINITY;
  }
  buildTicks() {
    const opts = this.options;
    const tickOpts = opts.ticks;
    let maxTicks = this.getTickLimit();
    maxTicks = Math.max(2, maxTicks);
    const numericGeneratorOptions = {
      maxTicks,
      bounds: opts.bounds,
      min: opts.min,
      max: opts.max,
      precision: tickOpts.precision,
      step: tickOpts.stepSize,
      count: tickOpts.count,
      maxDigits: this._maxDigits(),
      horizontal: this.isHorizontal(),
      minRotation: tickOpts.minRotation || 0,
      includeBounds: tickOpts.includeBounds !== false
    };
    const dataRange = this._range || this;
    const ticks = generateTicks$1(numericGeneratorOptions, dataRange);
    if (opts.bounds === "ticks") {
      _setMinAndMaxByKey(ticks, this, "value");
    }
    if (opts.reverse) {
      ticks.reverse();
      this.start = this.max;
      this.end = this.min;
    } else {
      this.start = this.min;
      this.end = this.max;
    }
    return ticks;
  }
  configure() {
    const ticks = this.ticks;
    let start = this.min;
    let end = this.max;
    super.configure();
    if (this.options.offset && ticks.length) {
      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;
      start -= offset;
      end += offset;
    }
    this._startValue = start;
    this._endValue = end;
    this._valueRange = end - start;
  }
  getLabelForValue(value) {
    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);
  }
};
var LinearScale = class extends LinearScaleBase {
  determineDataLimits() {
    const { min, max } = this.getMinMax(true);
    this.min = isNumberFinite(min) ? min : 0;
    this.max = isNumberFinite(max) ? max : 1;
    this.handleTickRangeOptions();
  }
  computeTickLimit() {
    const horizontal = this.isHorizontal();
    const length = horizontal ? this.width : this.height;
    const minRotation = toRadians(this.options.ticks.minRotation);
    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 1e-3;
    const tickFont = this._resolveTickFontOptions(0);
    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));
  }
  getPixelForValue(value) {
    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
  }
  getValueForPixel(pixel) {
    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;
  }
};
__publicField(LinearScale, "id", "linear");
__publicField(LinearScale, "defaults", {
  ticks: {
    callback: Ticks.formatters.numeric
  }
});
var log10Floor = (v) => Math.floor(log10(v));
var changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);
function isMajor(tickVal) {
  const remain = tickVal / Math.pow(10, log10Floor(tickVal));
  return remain === 1;
}
function steps(min, max, rangeExp) {
  const rangeStep = Math.pow(10, rangeExp);
  const start = Math.floor(min / rangeStep);
  const end = Math.ceil(max / rangeStep);
  return end - start;
}
function startExp(min, max) {
  const range = max - min;
  let rangeExp = log10Floor(range);
  while (steps(min, max, rangeExp) > 10) {
    rangeExp++;
  }
  while (steps(min, max, rangeExp) < 10) {
    rangeExp--;
  }
  return Math.min(rangeExp, log10Floor(min));
}
function generateTicks(generationOptions, { min, max }) {
  min = finiteOrDefault(generationOptions.min, min);
  const ticks = [];
  const minExp = log10Floor(min);
  let exp = startExp(min, max);
  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;
  const stepSize = Math.pow(10, exp);
  const base = minExp > exp ? Math.pow(10, minExp) : 0;
  const start = Math.round((min - base) * precision) / precision;
  const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;
  let significand = Math.floor((start - offset) / Math.pow(10, exp));
  let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);
  while (value < max) {
    ticks.push({
      value,
      major: isMajor(value),
      significand
    });
    if (significand >= 10) {
      significand = significand < 15 ? 15 : 20;
    } else {
      significand++;
    }
    if (significand >= 20) {
      exp++;
      significand = 2;
      precision = exp >= 0 ? 1 : precision;
    }
    value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;
  }
  const lastTick = finiteOrDefault(generationOptions.max, value);
  ticks.push({
    value: lastTick,
    major: isMajor(lastTick),
    significand
  });
  return ticks;
}
var LogarithmicScale = class extends Scale {
  constructor(cfg) {
    super(cfg);
    this.start = void 0;
    this.end = void 0;
    this._startValue = void 0;
    this._valueRange = 0;
  }
  parse(raw, index) {
    const value = LinearScaleBase.prototype.parse.apply(this, [
      raw,
      index
    ]);
    if (value === 0) {
      this._zero = true;
      return void 0;
    }
    return isNumberFinite(value) && value > 0 ? value : null;
  }
  determineDataLimits() {
    const { min, max } = this.getMinMax(true);
    this.min = isNumberFinite(min) ? Math.max(0, min) : null;
    this.max = isNumberFinite(max) ? Math.max(0, max) : null;
    if (this.options.beginAtZero) {
      this._zero = true;
    }
    if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {
      this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);
    }
    this.handleTickRangeOptions();
  }
  handleTickRangeOptions() {
    const { minDefined, maxDefined } = this.getUserBounds();
    let min = this.min;
    let max = this.max;
    const setMin = (v) => min = minDefined ? min : v;
    const setMax = (v) => max = maxDefined ? max : v;
    if (min === max) {
      if (min <= 0) {
        setMin(1);
        setMax(10);
      } else {
        setMin(changeExponent(min, -1));
        setMax(changeExponent(max, 1));
      }
    }
    if (min <= 0) {
      setMin(changeExponent(max, -1));
    }
    if (max <= 0) {
      setMax(changeExponent(min, 1));
    }
    this.min = min;
    this.max = max;
  }
  buildTicks() {
    const opts = this.options;
    const generationOptions = {
      min: this._userMin,
      max: this._userMax
    };
    const ticks = generateTicks(generationOptions, this);
    if (opts.bounds === "ticks") {
      _setMinAndMaxByKey(ticks, this, "value");
    }
    if (opts.reverse) {
      ticks.reverse();
      this.start = this.max;
      this.end = this.min;
    } else {
      this.start = this.min;
      this.end = this.max;
    }
    return ticks;
  }
  getLabelForValue(value) {
    return value === void 0 ? "0" : formatNumber(value, this.chart.options.locale, this.options.ticks.format);
  }
  configure() {
    const start = this.min;
    super.configure();
    this._startValue = log10(start);
    this._valueRange = log10(this.max) - log10(start);
  }
  getPixelForValue(value) {
    if (value === void 0 || value === 0) {
      value = this.min;
    }
    if (value === null || isNaN(value)) {
      return NaN;
    }
    return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);
  }
  getValueForPixel(pixel) {
    const decimal = this.getDecimalForPixel(pixel);
    return Math.pow(10, this._startValue + decimal * this._valueRange);
  }
};
__publicField(LogarithmicScale, "id", "logarithmic");
__publicField(LogarithmicScale, "defaults", {
  ticks: {
    callback: Ticks.formatters.logarithmic,
    major: {
      enabled: true
    }
  }
});
function getTickBackdropHeight(opts) {
  const tickOpts = opts.ticks;
  if (tickOpts.display && opts.display) {
    const padding = toPadding(tickOpts.backdropPadding);
    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults2.font.size) + padding.height;
  }
  return 0;
}
function measureLabelSize(ctx, font, label) {
  label = isArray(label) ? label : [
    label
  ];
  return {
    w: _longestText(ctx, font.string, label),
    h: label.length * font.lineHeight
  };
}
function determineLimits(angle, pos, size, min, max) {
  if (angle === min || angle === max) {
    return {
      start: pos - size / 2,
      end: pos + size / 2
    };
  } else if (angle < min || angle > max) {
    return {
      start: pos - size,
      end: pos
    };
  }
  return {
    start: pos,
    end: pos + size
  };
}
function fitWithPointLabels(scale) {
  const orig = {
    l: scale.left + scale._padding.left,
    r: scale.right - scale._padding.right,
    t: scale.top + scale._padding.top,
    b: scale.bottom - scale._padding.bottom
  };
  const limits = Object.assign({}, orig);
  const labelSizes = [];
  const padding = [];
  const valueCount = scale._pointLabels.length;
  const pointLabelOpts = scale.options.pointLabels;
  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;
  for (let i = 0; i < valueCount; i++) {
    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));
    padding[i] = opts.padding;
    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);
    const plFont = toFont(opts.font);
    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);
    labelSizes[i] = textSize;
    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);
    const angle = Math.round(toDegrees(angleRadians));
    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);
    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);
    updateLimits(limits, orig, angleRadians, hLimits, vLimits);
  }
  scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);
  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);
}
function updateLimits(limits, orig, angle, hLimits, vLimits) {
  const sin = Math.abs(Math.sin(angle));
  const cos = Math.abs(Math.cos(angle));
  let x = 0;
  let y = 0;
  if (hLimits.start < orig.l) {
    x = (orig.l - hLimits.start) / sin;
    limits.l = Math.min(limits.l, orig.l - x);
  } else if (hLimits.end > orig.r) {
    x = (hLimits.end - orig.r) / sin;
    limits.r = Math.max(limits.r, orig.r + x);
  }
  if (vLimits.start < orig.t) {
    y = (orig.t - vLimits.start) / cos;
    limits.t = Math.min(limits.t, orig.t - y);
  } else if (vLimits.end > orig.b) {
    y = (vLimits.end - orig.b) / cos;
    limits.b = Math.max(limits.b, orig.b + y);
  }
}
function createPointLabelItem(scale, index, itemOpts) {
  const outerDistance = scale.drawingArea;
  const { extra, additionalAngle, padding, size } = itemOpts;
  const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);
  const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));
  const y = yForAngle(pointLabelPosition.y, size.h, angle);
  const textAlign = getTextAlignForAngle(angle);
  const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);
  return {
    visible: true,
    x: pointLabelPosition.x,
    y,
    textAlign,
    left,
    top: y,
    right: left + size.w,
    bottom: y + size.h
  };
}
function isNotOverlapped(item, area) {
  if (!area) {
    return true;
  }
  const { left, top, right, bottom } = item;
  const apexesInArea = _isPointInArea({
    x: left,
    y: top
  }, area) || _isPointInArea({
    x: left,
    y: bottom
  }, area) || _isPointInArea({
    x: right,
    y: top
  }, area) || _isPointInArea({
    x: right,
    y: bottom
  }, area);
  return !apexesInArea;
}
function buildPointLabelItems(scale, labelSizes, padding) {
  const items = [];
  const valueCount = scale._pointLabels.length;
  const opts = scale.options;
  const { centerPointLabels, display } = opts.pointLabels;
  const itemOpts = {
    extra: getTickBackdropHeight(opts) / 2,
    additionalAngle: centerPointLabels ? PI / valueCount : 0
  };
  let area;
  for (let i = 0; i < valueCount; i++) {
    itemOpts.padding = padding[i];
    itemOpts.size = labelSizes[i];
    const item = createPointLabelItem(scale, i, itemOpts);
    items.push(item);
    if (display === "auto") {
      item.visible = isNotOverlapped(item, area);
      if (item.visible) {
        area = item;
      }
    }
  }
  return items;
}
function getTextAlignForAngle(angle) {
  if (angle === 0 || angle === 180) {
    return "center";
  } else if (angle < 180) {
    return "left";
  }
  return "right";
}
function leftForTextAlign(x, w, align) {
  if (align === "right") {
    x -= w;
  } else if (align === "center") {
    x -= w / 2;
  }
  return x;
}
function yForAngle(y, h4, angle) {
  if (angle === 90 || angle === 270) {
    y -= h4 / 2;
  } else if (angle > 270 || angle < 90) {
    y -= h4;
  }
  return y;
}
function drawPointLabelBox(ctx, opts, item) {
  const { left, top, right, bottom } = item;
  const { backdropColor } = opts;
  if (!isNullOrUndef(backdropColor)) {
    const borderRadius = toTRBLCorners(opts.borderRadius);
    const padding = toPadding(opts.backdropPadding);
    ctx.fillStyle = backdropColor;
    const backdropLeft = left - padding.left;
    const backdropTop = top - padding.top;
    const backdropWidth = right - left + padding.width;
    const backdropHeight = bottom - top + padding.height;
    if (Object.values(borderRadius).some((v) => v !== 0)) {
      ctx.beginPath();
      addRoundedRectPath(ctx, {
        x: backdropLeft,
        y: backdropTop,
        w: backdropWidth,
        h: backdropHeight,
        radius: borderRadius
      });
      ctx.fill();
    } else {
      ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);
    }
  }
}
function drawPointLabels(scale, labelCount) {
  const { ctx, options: { pointLabels } } = scale;
  for (let i = labelCount - 1; i >= 0; i--) {
    const item = scale._pointLabelItems[i];
    if (!item.visible) {
      continue;
    }
    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));
    drawPointLabelBox(ctx, optsAtIndex, item);
    const plFont = toFont(optsAtIndex.font);
    const { x, y, textAlign } = item;
    renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {
      color: optsAtIndex.color,
      textAlign,
      textBaseline: "middle"
    });
  }
}
function pathRadiusLine(scale, radius, circular, labelCount) {
  const { ctx } = scale;
  if (circular) {
    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);
  } else {
    let pointPosition = scale.getPointPosition(0, radius);
    ctx.moveTo(pointPosition.x, pointPosition.y);
    for (let i = 1; i < labelCount; i++) {
      pointPosition = scale.getPointPosition(i, radius);
      ctx.lineTo(pointPosition.x, pointPosition.y);
    }
  }
}
function drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {
  const ctx = scale.ctx;
  const circular = gridLineOpts.circular;
  const { color: color2, lineWidth } = gridLineOpts;
  if (!circular && !labelCount || !color2 || !lineWidth || radius < 0) {
    return;
  }
  ctx.save();
  ctx.strokeStyle = color2;
  ctx.lineWidth = lineWidth;
  ctx.setLineDash(borderOpts.dash);
  ctx.lineDashOffset = borderOpts.dashOffset;
  ctx.beginPath();
  pathRadiusLine(scale, radius, circular, labelCount);
  ctx.closePath();
  ctx.stroke();
  ctx.restore();
}
function createPointLabelContext(parent, index, label) {
  return createContext(parent, {
    label,
    index,
    type: "pointLabel"
  });
}
var RadialLinearScale = class extends LinearScaleBase {
  constructor(cfg) {
    super(cfg);
    this.xCenter = void 0;
    this.yCenter = void 0;
    this.drawingArea = void 0;
    this._pointLabels = [];
    this._pointLabelItems = [];
  }
  setDimensions() {
    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);
    const w = this.width = this.maxWidth - padding.width;
    const h4 = this.height = this.maxHeight - padding.height;
    this.xCenter = Math.floor(this.left + w / 2 + padding.left);
    this.yCenter = Math.floor(this.top + h4 / 2 + padding.top);
    this.drawingArea = Math.floor(Math.min(w, h4) / 2);
  }
  determineDataLimits() {
    const { min, max } = this.getMinMax(false);
    this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;
    this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;
    this.handleTickRangeOptions();
  }
  computeTickLimit() {
    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));
  }
  generateTickLabels(ticks) {
    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);
    this._pointLabels = this.getLabels().map((value, index) => {
      const label = callback(this.options.pointLabels.callback, [
        value,
        index
      ], this);
      return label || label === 0 ? label : "";
    }).filter((v, i) => this.chart.getDataVisibility(i));
  }
  fit() {
    const opts = this.options;
    if (opts.display && opts.pointLabels.display) {
      fitWithPointLabels(this);
    } else {
      this.setCenterPoint(0, 0, 0, 0);
    }
  }
  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {
    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);
    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);
    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));
  }
  getIndexAngle(index) {
    const angleMultiplier = TAU / (this._pointLabels.length || 1);
    const startAngle = this.options.startAngle || 0;
    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));
  }
  getDistanceFromCenterForValue(value) {
    if (isNullOrUndef(value)) {
      return NaN;
    }
    const scalingFactor = this.drawingArea / (this.max - this.min);
    if (this.options.reverse) {
      return (this.max - value) * scalingFactor;
    }
    return (value - this.min) * scalingFactor;
  }
  getValueForDistanceFromCenter(distance) {
    if (isNullOrUndef(distance)) {
      return NaN;
    }
    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));
    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;
  }
  getPointLabelContext(index) {
    const pointLabels = this._pointLabels || [];
    if (index >= 0 && index < pointLabels.length) {
      const pointLabel = pointLabels[index];
      return createPointLabelContext(this.getContext(), index, pointLabel);
    }
  }
  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {
    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;
    return {
      x: Math.cos(angle) * distanceFromCenter + this.xCenter,
      y: Math.sin(angle) * distanceFromCenter + this.yCenter,
      angle
    };
  }
  getPointPositionForValue(index, value) {
    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));
  }
  getBasePosition(index) {
    return this.getPointPositionForValue(index || 0, this.getBaseValue());
  }
  getPointLabelPosition(index) {
    const { left, top, right, bottom } = this._pointLabelItems[index];
    return {
      left,
      top,
      right,
      bottom
    };
  }
  drawBackground() {
    const { backgroundColor, grid: { circular } } = this.options;
    if (backgroundColor) {
      const ctx = this.ctx;
      ctx.save();
      ctx.beginPath();
      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);
      ctx.closePath();
      ctx.fillStyle = backgroundColor;
      ctx.fill();
      ctx.restore();
    }
  }
  drawGrid() {
    const ctx = this.ctx;
    const opts = this.options;
    const { angleLines, grid, border } = opts;
    const labelCount = this._pointLabels.length;
    let i, offset, position;
    if (opts.pointLabels.display) {
      drawPointLabels(this, labelCount);
    }
    if (grid.display) {
      this.ticks.forEach((tick, index) => {
        if (index !== 0 || index === 0 && this.min < 0) {
          offset = this.getDistanceFromCenterForValue(tick.value);
          const context = this.getContext(index);
          const optsAtIndex = grid.setContext(context);
          const optsAtIndexBorder = border.setContext(context);
          drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);
        }
      });
    }
    if (angleLines.display) {
      ctx.save();
      for (i = labelCount - 1; i >= 0; i--) {
        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));
        const { color: color2, lineWidth } = optsAtIndex;
        if (!lineWidth || !color2) {
          continue;
        }
        ctx.lineWidth = lineWidth;
        ctx.strokeStyle = color2;
        ctx.setLineDash(optsAtIndex.borderDash);
        ctx.lineDashOffset = optsAtIndex.borderDashOffset;
        offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);
        position = this.getPointPosition(i, offset);
        ctx.beginPath();
        ctx.moveTo(this.xCenter, this.yCenter);
        ctx.lineTo(position.x, position.y);
        ctx.stroke();
      }
      ctx.restore();
    }
  }
  drawBorder() {
  }
  drawLabels() {
    const ctx = this.ctx;
    const opts = this.options;
    const tickOpts = opts.ticks;
    if (!tickOpts.display) {
      return;
    }
    const startAngle = this.getIndexAngle(0);
    let offset, width;
    ctx.save();
    ctx.translate(this.xCenter, this.yCenter);
    ctx.rotate(startAngle);
    ctx.textAlign = "center";
    ctx.textBaseline = "middle";
    this.ticks.forEach((tick, index) => {
      if (index === 0 && this.min >= 0 && !opts.reverse) {
        return;
      }
      const optsAtIndex = tickOpts.setContext(this.getContext(index));
      const tickFont = toFont(optsAtIndex.font);
      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);
      if (optsAtIndex.showLabelBackdrop) {
        ctx.font = tickFont.string;
        width = ctx.measureText(tick.label).width;
        ctx.fillStyle = optsAtIndex.backdropColor;
        const padding = toPadding(optsAtIndex.backdropPadding);
        ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);
      }
      renderText(ctx, tick.label, 0, -offset, tickFont, {
        color: optsAtIndex.color,
        strokeColor: optsAtIndex.textStrokeColor,
        strokeWidth: optsAtIndex.textStrokeWidth
      });
    });
    ctx.restore();
  }
  drawTitle() {
  }
};
__publicField(RadialLinearScale, "id", "radialLinear");
__publicField(RadialLinearScale, "defaults", {
  display: true,
  animate: true,
  position: "chartArea",
  angleLines: {
    display: true,
    lineWidth: 1,
    borderDash: [],
    borderDashOffset: 0
  },
  grid: {
    circular: false
  },
  startAngle: 0,
  ticks: {
    showLabelBackdrop: true,
    callback: Ticks.formatters.numeric
  },
  pointLabels: {
    backdropColor: void 0,
    backdropPadding: 2,
    display: true,
    font: {
      size: 10
    },
    callback(label) {
      return label;
    },
    padding: 5,
    centerPointLabels: false
  }
});
__publicField(RadialLinearScale, "defaultRoutes", {
  "angleLines.color": "borderColor",
  "pointLabels.color": "color",
  "ticks.color": "color"
});
__publicField(RadialLinearScale, "descriptors", {
  angleLines: {
    _fallback: "grid"
  }
});
var INTERVALS = {
  millisecond: {
    common: true,
    size: 1,
    steps: 1e3
  },
  second: {
    common: true,
    size: 1e3,
    steps: 60
  },
  minute: {
    common: true,
    size: 6e4,
    steps: 60
  },
  hour: {
    common: true,
    size: 36e5,
    steps: 24
  },
  day: {
    common: true,
    size: 864e5,
    steps: 30
  },
  week: {
    common: false,
    size: 6048e5,
    steps: 4
  },
  month: {
    common: true,
    size: 2628e6,
    steps: 12
  },
  quarter: {
    common: false,
    size: 7884e6,
    steps: 4
  },
  year: {
    common: true,
    size: 3154e7
  }
};
var UNITS = /* @__PURE__ */ Object.keys(INTERVALS);
function sorter(a, b) {
  return a - b;
}
function parse2(scale, input) {
  if (isNullOrUndef(input)) {
    return null;
  }
  const adapter = scale._adapter;
  const { parser: parser3, round: round2, isoWeekday } = scale._parseOpts;
  let value = input;
  if (typeof parser3 === "function") {
    value = parser3(value);
  }
  if (!isNumberFinite(value)) {
    value = typeof parser3 === "string" ? adapter.parse(value, parser3) : adapter.parse(value);
  }
  if (value === null) {
    return null;
  }
  if (round2) {
    value = round2 === "week" && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, "isoWeek", isoWeekday) : adapter.startOf(value, round2);
  }
  return +value;
}
function determineUnitForAutoTicks(minUnit, min, max, capacity) {
  const ilen = UNITS.length;
  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {
    const interval = INTERVALS[UNITS[i]];
    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;
    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {
      return UNITS[i];
    }
  }
  return UNITS[ilen - 1];
}
function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {
  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {
    const unit = UNITS[i];
    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {
      return unit;
    }
  }
  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];
}
function determineMajorUnit(unit) {
  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {
    if (INTERVALS[UNITS[i]].common) {
      return UNITS[i];
    }
  }
}
function addTick(ticks, time, timestamps) {
  if (!timestamps) {
    ticks[time] = true;
  } else if (timestamps.length) {
    const { lo, hi } = _lookup(timestamps, time);
    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];
    ticks[timestamp] = true;
  }
}
function setMajorTicks(scale, ticks, map3, majorUnit) {
  const adapter = scale._adapter;
  const first = +adapter.startOf(ticks[0].value, majorUnit);
  const last = ticks[ticks.length - 1].value;
  let major, index;
  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {
    index = map3[major];
    if (index >= 0) {
      ticks[index].major = true;
    }
  }
  return ticks;
}
function ticksFromTimestamps(scale, values, majorUnit) {
  const ticks = [];
  const map3 = {};
  const ilen = values.length;
  let i, value;
  for (i = 0; i < ilen; ++i) {
    value = values[i];
    map3[value] = i;
    ticks.push({
      value,
      major: false
    });
  }
  return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map3, majorUnit);
}
var TimeScale = class extends Scale {
  constructor(props) {
    super(props);
    this._cache = {
      data: [],
      labels: [],
      all: []
    };
    this._unit = "day";
    this._majorUnit = void 0;
    this._offsets = {};
    this._normalized = false;
    this._parseOpts = void 0;
  }
  init(scaleOpts, opts = {}) {
    const time = scaleOpts.time || (scaleOpts.time = {});
    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);
    adapter.init(opts);
    mergeIf(time.displayFormats, adapter.formats());
    this._parseOpts = {
      parser: time.parser,
      round: time.round,
      isoWeekday: time.isoWeekday
    };
    super.init(scaleOpts);
    this._normalized = opts.normalized;
  }
  parse(raw, index) {
    if (raw === void 0) {
      return null;
    }
    return parse2(this, raw);
  }
  beforeLayout() {
    super.beforeLayout();
    this._cache = {
      data: [],
      labels: [],
      all: []
    };
  }
  determineDataLimits() {
    const options2 = this.options;
    const adapter = this._adapter;
    const unit = options2.time.unit || "day";
    let { min, max, minDefined, maxDefined } = this.getUserBounds();
    function _applyBounds(bounds) {
      if (!minDefined && !isNaN(bounds.min)) {
        min = Math.min(min, bounds.min);
      }
      if (!maxDefined && !isNaN(bounds.max)) {
        max = Math.max(max, bounds.max);
      }
    }
    if (!minDefined || !maxDefined) {
      _applyBounds(this._getLabelBounds());
      if (options2.bounds !== "ticks" || options2.ticks.source !== "labels") {
        _applyBounds(this.getMinMax(false));
      }
    }
    min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);
    max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;
    this.min = Math.min(min, max - 1);
    this.max = Math.max(min + 1, max);
  }
  _getLabelBounds() {
    const arr = this.getLabelTimestamps();
    let min = Number.POSITIVE_INFINITY;
    let max = Number.NEGATIVE_INFINITY;
    if (arr.length) {
      min = arr[0];
      max = arr[arr.length - 1];
    }
    return {
      min,
      max
    };
  }
  buildTicks() {
    const options2 = this.options;
    const timeOpts = options2.time;
    const tickOpts = options2.ticks;
    const timestamps = tickOpts.source === "labels" ? this.getLabelTimestamps() : this._generate();
    if (options2.bounds === "ticks" && timestamps.length) {
      this.min = this._userMin || timestamps[0];
      this.max = this._userMax || timestamps[timestamps.length - 1];
    }
    const min = this.min;
    const max = this.max;
    const ticks = _filterBetween(timestamps, min, max);
    this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));
    this._majorUnit = !tickOpts.major.enabled || this._unit === "year" ? void 0 : determineMajorUnit(this._unit);
    this.initOffsets(timestamps);
    if (options2.reverse) {
      ticks.reverse();
    }
    return ticksFromTimestamps(this, ticks, this._majorUnit);
  }
  afterAutoSkip() {
    if (this.options.offsetAfterAutoskip) {
      this.initOffsets(this.ticks.map((tick) => +tick.value));
    }
  }
  initOffsets(timestamps = []) {
    let start = 0;
    let end = 0;
    let first, last;
    if (this.options.offset && timestamps.length) {
      first = this.getDecimalForValue(timestamps[0]);
      if (timestamps.length === 1) {
        start = 1 - first;
      } else {
        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;
      }
      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);
      if (timestamps.length === 1) {
        end = last;
      } else {
        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;
      }
    }
    const limit = timestamps.length < 3 ? 0.5 : 0.25;
    start = _limitValue(start, 0, limit);
    end = _limitValue(end, 0, limit);
    this._offsets = {
      start,
      end,
      factor: 1 / (start + 1 + end)
    };
  }
  _generate() {
    const adapter = this._adapter;
    const min = this.min;
    const max = this.max;
    const options2 = this.options;
    const timeOpts = options2.time;
    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));
    const stepSize = valueOrDefault(options2.ticks.stepSize, 1);
    const weekday = minor === "week" ? timeOpts.isoWeekday : false;
    const hasWeekday = isNumber(weekday) || weekday === true;
    const ticks = {};
    let first = min;
    let time, count;
    if (hasWeekday) {
      first = +adapter.startOf(first, "isoWeek", weekday);
    }
    first = +adapter.startOf(first, hasWeekday ? "day" : minor);
    if (adapter.diff(max, min, minor) > 1e5 * stepSize) {
      throw new Error(min + " and " + max + " are too far apart with stepSize of " + stepSize + " " + minor);
    }
    const timestamps = options2.ticks.source === "data" && this.getDataTimestamps();
    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {
      addTick(ticks, time, timestamps);
    }
    if (time === max || options2.bounds === "ticks" || count === 1) {
      addTick(ticks, time, timestamps);
    }
    return Object.keys(ticks).sort(sorter).map((x) => +x);
  }
  getLabelForValue(value) {
    const adapter = this._adapter;
    const timeOpts = this.options.time;
    if (timeOpts.tooltipFormat) {
      return adapter.format(value, timeOpts.tooltipFormat);
    }
    return adapter.format(value, timeOpts.displayFormats.datetime);
  }
  format(value, format) {
    const options2 = this.options;
    const formats = options2.time.displayFormats;
    const unit = this._unit;
    const fmt = format || formats[unit];
    return this._adapter.format(value, fmt);
  }
  _tickFormatFunction(time, index, ticks, format) {
    const options2 = this.options;
    const formatter = options2.ticks.callback;
    if (formatter) {
      return callback(formatter, [
        time,
        index,
        ticks
      ], this);
    }
    const formats = options2.time.displayFormats;
    const unit = this._unit;
    const majorUnit = this._majorUnit;
    const minorFormat = unit && formats[unit];
    const majorFormat = majorUnit && formats[majorUnit];
    const tick = ticks[index];
    const major = majorUnit && majorFormat && tick && tick.major;
    return this._adapter.format(time, format || (major ? majorFormat : minorFormat));
  }
  generateTickLabels(ticks) {
    let i, ilen, tick;
    for (i = 0, ilen = ticks.length; i < ilen; ++i) {
      tick = ticks[i];
      tick.label = this._tickFormatFunction(tick.value, i, ticks);
    }
  }
  getDecimalForValue(value) {
    return value === null ? NaN : (value - this.min) / (this.max - this.min);
  }
  getPixelForValue(value) {
    const offsets = this._offsets;
    const pos = this.getDecimalForValue(value);
    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);
  }
  getValueForPixel(pixel) {
    const offsets = this._offsets;
    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
    return this.min + pos * (this.max - this.min);
  }
  _getLabelSize(label) {
    const ticksOpts = this.options.ticks;
    const tickLabelWidth = this.ctx.measureText(label).width;
    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);
    const cosRotation = Math.cos(angle);
    const sinRotation = Math.sin(angle);
    const tickFontSize = this._resolveTickFontOptions(0).size;
    return {
      w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,
      h: tickLabelWidth * sinRotation + tickFontSize * cosRotation
    };
  }
  _getLabelCapacity(exampleTime) {
    const timeOpts = this.options.time;
    const displayFormats = timeOpts.displayFormats;
    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;
    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [
      exampleTime
    ], this._majorUnit), format);
    const size = this._getLabelSize(exampleLabel);
    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;
    return capacity > 0 ? capacity : 1;
  }
  getDataTimestamps() {
    let timestamps = this._cache.data || [];
    let i, ilen;
    if (timestamps.length) {
      return timestamps;
    }
    const metas = this.getMatchingVisibleMetas();
    if (this._normalized && metas.length) {
      return this._cache.data = metas[0].controller.getAllParsedValues(this);
    }
    for (i = 0, ilen = metas.length; i < ilen; ++i) {
      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));
    }
    return this._cache.data = this.normalize(timestamps);
  }
  getLabelTimestamps() {
    const timestamps = this._cache.labels || [];
    let i, ilen;
    if (timestamps.length) {
      return timestamps;
    }
    const labels = this.getLabels();
    for (i = 0, ilen = labels.length; i < ilen; ++i) {
      timestamps.push(parse2(this, labels[i]));
    }
    return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);
  }
  normalize(values) {
    return _arrayUnique(values.sort(sorter));
  }
};
__publicField(TimeScale, "id", "time");
__publicField(TimeScale, "defaults", {
  bounds: "data",
  adapters: {},
  time: {
    parser: false,
    unit: false,
    round: false,
    isoWeekday: false,
    minUnit: "millisecond",
    displayFormats: {}
  },
  ticks: {
    source: "auto",
    callback: false,
    major: {
      enabled: false
    }
  }
});
function interpolate3(table, val, reverse) {
  let lo = 0;
  let hi = table.length - 1;
  let prevSource, nextSource, prevTarget, nextTarget;
  if (reverse) {
    if (val >= table[lo].pos && val <= table[hi].pos) {
      ({ lo, hi } = _lookupByKey(table, "pos", val));
    }
    ({ pos: prevSource, time: prevTarget } = table[lo]);
    ({ pos: nextSource, time: nextTarget } = table[hi]);
  } else {
    if (val >= table[lo].time && val <= table[hi].time) {
      ({ lo, hi } = _lookupByKey(table, "time", val));
    }
    ({ time: prevSource, pos: prevTarget } = table[lo]);
    ({ time: nextSource, pos: nextTarget } = table[hi]);
  }
  const span = nextSource - prevSource;
  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;
}
var TimeSeriesScale = class extends TimeScale {
  constructor(props) {
    super(props);
    this._table = [];
    this._minPos = void 0;
    this._tableRange = void 0;
  }
  initOffsets() {
    const timestamps = this._getTimestampsForTable();
    const table = this._table = this.buildLookupTable(timestamps);
    this._minPos = interpolate3(table, this.min);
    this._tableRange = interpolate3(table, this.max) - this._minPos;
    super.initOffsets(timestamps);
  }
  buildLookupTable(timestamps) {
    const { min, max } = this;
    const items = [];
    const table = [];
    let i, ilen, prev, curr, next;
    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {
      curr = timestamps[i];
      if (curr >= min && curr <= max) {
        items.push(curr);
      }
    }
    if (items.length < 2) {
      return [
        {
          time: min,
          pos: 0
        },
        {
          time: max,
          pos: 1
        }
      ];
    }
    for (i = 0, ilen = items.length; i < ilen; ++i) {
      next = items[i + 1];
      prev = items[i - 1];
      curr = items[i];
      if (Math.round((next + prev) / 2) !== curr) {
        table.push({
          time: curr,
          pos: i / (ilen - 1)
        });
      }
    }
    return table;
  }
  _generate() {
    const min = this.min;
    const max = this.max;
    let timestamps = super.getDataTimestamps();
    if (!timestamps.includes(min) || !timestamps.length) {
      timestamps.splice(0, 0, min);
    }
    if (!timestamps.includes(max) || timestamps.length === 1) {
      timestamps.push(max);
    }
    return timestamps.sort((a, b) => a - b);
  }
  _getTimestampsForTable() {
    let timestamps = this._cache.all || [];
    if (timestamps.length) {
      return timestamps;
    }
    const data = this.getDataTimestamps();
    const label = this.getLabelTimestamps();
    if (data.length && label.length) {
      timestamps = this.normalize(data.concat(label));
    } else {
      timestamps = data.length ? data : label;
    }
    timestamps = this._cache.all = timestamps;
    return timestamps;
  }
  getDecimalForValue(value) {
    return (interpolate3(this._table, value) - this._minPos) / this._tableRange;
  }
  getValueForPixel(pixel) {
    const offsets = this._offsets;
    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
    return interpolate3(this._table, decimal * this._tableRange + this._minPos, true);
  }
};
__publicField(TimeSeriesScale, "id", "timeseries");
__publicField(TimeSeriesScale, "defaults", TimeScale.defaults);

// src/gui/stats-modal.tsx
var import_obsidian10 = require("obsidian");
var import_vhtml2 = __toESM(require_vhtml());
Chart.register(
  BarElement,
  BarController,
  plugin_legend,
  plugin_title,
  plugin_tooltip,
  plugin_subtitle,
  CategoryScale,
  LinearScale,
  PieController,
  ArcElement
);
var StatsModal = class extends import_obsidian10.Modal {
  constructor(app, osrCore) {
    super(app);
    this.osrCore = osrCore;
    this.titleEl.setText(`${t("STATS_TITLE")} `);
    this.titleEl.addClass("sr-centered");
    this.titleEl.innerHTML += /* @__PURE__ */ (0, import_vhtml2.default)("select", { id: "sr-chart-period" }, /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "month", selected: true }, t("MONTH")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "quarter" }, t("QUARTER")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "year" }, t("YEAR")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "lifetime" }, t("LIFETIME")));
    this.modalEl.style.height = "100%";
    this.modalEl.style.width = "100%";
    if (import_obsidian10.Platform.isMobile) {
      this.contentEl.style.display = "block";
    }
  }
  onOpen() {
    const { contentEl } = this;
    contentEl.style.textAlign = "center";
    const cardStats = this.osrCore.cardStats;
    let maxN = cardStats.delayedDays.getMaxValue();
    for (let dueOffset = 0; dueOffset <= maxN; dueOffset++) {
      cardStats.delayedDays.clearCountIfMissing(dueOffset);
    }
    const dueDatesFlashcardsCopy = { 0: 0 };
    for (const [dueOffset, dueCount] of getTypedObjectEntries(cardStats.delayedDays.dict)) {
      if (dueOffset <= 0) {
        dueDatesFlashcardsCopy[0] += dueCount;
      } else {
        dueDatesFlashcardsCopy[dueOffset] = dueCount;
      }
    }
    const scheduledCount = cardStats.youngCount + cardStats.matureCount;
    maxN = Math.max(maxN, 1);
    contentEl.innerHTML += /* @__PURE__ */ (0, import_vhtml2.default)("div", null, /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "forecastChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "forecastChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "intervalsChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "intervalsChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "easesChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "easesChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "cardTypesChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "cardTypesChartSummary" }));
    createStatsChart(
      "bar",
      "forecastChart",
      t("FORECAST"),
      t("FORECAST_DESC"),
      Object.keys(dueDatesFlashcardsCopy),
      Object.values(dueDatesFlashcardsCopy),
      t("REVIEWS_PER_DAY", { avg: (scheduledCount / maxN).toFixed(1) }),
      t("SCHEDULED"),
      t("DAYS"),
      t("NUMBER_OF_CARDS")
    );
    maxN = cardStats.intervals.getMaxValue();
    for (let interval = 0; interval <= maxN; interval++) {
      cardStats.intervals.clearCountIfMissing(interval);
    }
    const average_interval = textInterval(
      Math.round(
        cardStats.intervals.getTotalOfValueMultiplyCount() / scheduledCount * 10
      ) / 10 || 0,
      false
    ), longest_interval = textInterval(cardStats.intervals.getMaxValue(), false);
    createStatsChart(
      "bar",
      "intervalsChart",
      t("INTERVALS"),
      t("INTERVALS_DESC"),
      Object.keys(cardStats.intervals.dict),
      Object.values(cardStats.intervals.dict),
      t("INTERVALS_SUMMARY", {
        avg: average_interval,
        longest: longest_interval
      }),
      t("COUNT"),
      t("DAYS"),
      t("NUMBER_OF_CARDS")
    );
    const eases = getKeysPreserveType(cardStats.eases.dict);
    for (let ease = Math.min(...eases); ease <= Math.max(...eases); ease++) {
      cardStats.eases.clearCountIfMissing(ease);
    }
    const average_ease = Math.round(cardStats.eases.getTotalOfValueMultiplyCount() / scheduledCount) || 0;
    createStatsChart(
      "bar",
      "easesChart",
      t("EASES"),
      "",
      Object.keys(cardStats.eases.dict),
      Object.values(cardStats.eases.dict),
      t("EASES_SUMMARY", { avgEase: average_ease }),
      t("COUNT"),
      t("EASES"),
      t("NUMBER_OF_CARDS")
    );
    const totalCardsCount = this.osrCore.reviewableDeckTree.getDistinctCardCount(
      2 /* All */,
      true
    );
    createStatsChart(
      "pie",
      "cardTypesChart",
      t("CARD_TYPES"),
      t("CARD_TYPES_DESC"),
      [
        `${t("CARD_TYPE_NEW")} - ${Math.round(
          cardStats.newCount / totalCardsCount * 100
        )}%`,
        `${t("CARD_TYPE_YOUNG")} - ${Math.round(
          cardStats.youngCount / totalCardsCount * 100
        )}%`,
        `${t("CARD_TYPE_MATURE")} - ${Math.round(
          cardStats.matureCount / totalCardsCount * 100
        )}%`
      ],
      [cardStats.newCount, cardStats.youngCount, cardStats.matureCount],
      t("CARD_TYPES_SUMMARY", { totalCardsCount })
    );
  }
  onClose() {
    const { contentEl } = this;
    contentEl.empty();
  }
};
function createStatsChart(type, canvasId, title, subtitle, labels, data, summary, seriesTitle = "", xAxisTitle = "", yAxisTitle = "") {
  const style = getComputedStyle(document.body);
  const textColor = style.getPropertyValue("--text-normal");
  let scales = {}, backgroundColor = ["#2196f3"];
  if (type !== "pie") {
    scales = {
      x: {
        title: {
          display: true,
          text: xAxisTitle,
          color: textColor
        }
      },
      y: {
        title: {
          display: true,
          text: yAxisTitle,
          color: textColor
        }
      }
    };
  } else {
    backgroundColor = ["#2196f3", "#4caf50", "green"];
  }
  const shouldFilter = canvasId === "forecastChart" || canvasId === "intervalsChart";
  const statsChart = new Chart(document.getElementById(canvasId), {
    type,
    data: {
      labels: shouldFilter ? labels.slice(0, 31) : labels,
      datasets: [
        {
          label: seriesTitle,
          backgroundColor,
          data: shouldFilter ? data.slice(0, 31) : data
        }
      ]
    },
    options: {
      scales,
      plugins: {
        title: {
          display: true,
          text: title,
          font: {
            size: 22
          },
          color: textColor
        },
        subtitle: {
          display: true,
          text: subtitle,
          font: {
            size: 16,
            style: "italic"
          },
          color: textColor
        },
        legend: {
          display: false
        }
      },
      aspectRatio: 2
    }
  });
  if (shouldFilter) {
    const chartPeriodEl = document.getElementById("sr-chart-period");
    chartPeriodEl.addEventListener("click", () => {
      let filteredLabels, filteredData;
      const chartPeriod = chartPeriodEl.value;
      if (chartPeriod === "month") {
        filteredLabels = labels.slice(0, 31);
        filteredData = data.slice(0, 31);
      } else if (chartPeriod === "quarter") {
        filteredLabels = labels.slice(0, 91);
        filteredData = data.slice(0, 91);
      } else if (chartPeriod === "year") {
        filteredLabels = labels.slice(0, 366);
        filteredData = data.slice(0, 366);
      } else {
        filteredLabels = labels;
        filteredData = data;
      }
      statsChart.data.labels = filteredLabels;
      statsChart.data.datasets[0] = {
        label: seriesTitle,
        backgroundColor,
        data: filteredData
      };
      statsChart.update();
    });
  }
  document.getElementById(`${canvasId}Summary`).innerText = summary;
}

// src/icons/app-icon.ts
var import_obsidian11 = require("obsidian");
function appIcon() {
  (0, import_obsidian11.addIcon)(
    "SpacedRepIcon",
    `
        
        
        `
  );
}

// src/next-note-review-handler.ts
var import_obsidian13 = require("obsidian");

// src/gui/review-deck-selection-modal.tsx
var import_obsidian12 = require("obsidian");
var ReviewDeckSelectionModal = class extends import_obsidian12.FuzzySuggestModal {
  constructor(app, deckKeys) {
    super(app);
    this.deckKeys = [];
    this.deckKeys = deckKeys;
  }
  getItems() {
    return this.deckKeys;
  }
  getItemText(item) {
    return item;
  }
  onChooseItem(deckKey, _) {
    this.close();
    this.submitCallback(deckKey);
  }
};

// src/next-note-review-handler.ts
var NextNoteReviewHandler = class {
  get lastSelectedReviewDeck() {
    return this._lastSelectedReviewDeck;
  }
  get noteReviewQueue() {
    return this._noteReviewQueue;
  }
  constructor(app, settings, workspace, noteReviewQueue) {
    this.app = app;
    this.settings = settings;
    this.workspace = workspace;
    this._noteReviewQueue = noteReviewQueue;
  }
  async autoReviewNextNote() {
    if (this.settings.autoNextNote) {
      if (!this._lastSelectedReviewDeck) {
        const reviewDeckKeys = this._noteReviewQueue.reviewDeckNameList;
        if (reviewDeckKeys.length > 0) this._lastSelectedReviewDeck = reviewDeckKeys[0];
        else {
          new import_obsidian13.Notice(t("ALL_CAUGHT_UP"));
          return;
        }
      }
      this.reviewNextNote(this._lastSelectedReviewDeck);
    }
  }
  async reviewNextNoteModal() {
    const reviewDeckNames = this._noteReviewQueue.reviewDeckNameList;
    if (reviewDeckNames.length === 1) {
      this.reviewNextNote(reviewDeckNames[0]);
    } else {
      const deckSelectionModal = new ReviewDeckSelectionModal(this.app, reviewDeckNames);
      deckSelectionModal.submitCallback = (deckKey) => this.reviewNextNote(deckKey);
      deckSelectionModal.open();
    }
  }
  async reviewNextNote(deckKey) {
    if (!this._noteReviewQueue.reviewDeckNameList.contains(deckKey)) {
      new import_obsidian13.Notice(t("NO_DECK_EXISTS", { deckName: deckKey }));
      return;
    }
    this._lastSelectedReviewDeck = deckKey;
    const deck = this._noteReviewQueue.reviewDecks.get(deckKey);
    const notefile = deck.determineNextNote(this.settings.openRandomNote);
    if (notefile) {
      await this.openNote(deckKey, notefile.tfile);
    } else {
      new import_obsidian13.Notice(t("ALL_CAUGHT_UP"));
    }
  }
  async openNote(deckName, file) {
    this._lastSelectedReviewDeck = deckName;
    await this.app.workspace.getLeaf().openFile(file);
  }
};

// src/plugin-data.ts
var DEFAULT_DATA = {
  settings: DEFAULT_SETTINGS,
  buryDate: "",
  buryList: [],
  historyDeck: null
};

// src/question-postponement-list.ts
var QuestionPostponementList = class {
  constructor(plugin, settings, list) {
    this.plugin = plugin;
    this.settings = settings;
    this.list = list;
  }
  async clearIfNewDay(data) {
    const now2 = window.moment(Date.now());
    const todayDate = now2.format("YYYY-MM-DD");
    const isNewDay = todayDate !== data.buryDate;
    if (isNewDay) {
      data.buryDate = todayDate;
      this.clear();
      await this.write();
    }
  }
  clear() {
    this.list.splice(0);
  }
  add(question) {
    if (!this.includes(question)) this.list.push(question.questionText.textHash);
  }
  includes(question) {
    return this.list.includes(question.questionText.textHash);
  }
  async write() {
    if (this.plugin == null) return;
    await this.plugin.savePluginData();
  }
};

// src/main.ts
var SRPlugin = class _SRPlugin extends import_obsidian14.Plugin {
  constructor() {
    super(...arguments);
    this.debouncedGenerateParserTimeout = null;
    this.ribbonIcon = null;
    this.statusBar = null;
  }
  async onload() {
    await this.loadPluginData();
    this.initLogicClasses();
    this.initGuiItems();
  }
  initLogicClasses() {
    const questionPostponementList = new QuestionPostponementList(
      this,
      this.data.settings,
      this.data.buryList
    );
    const osrNoteLinkInfoFinder = new ObsidianVaultNoteLinkInfoFinder(this.app.metadataCache);
    this.osrAppCore = new OsrAppCore(this.app);
    this.osrAppCore.init(
      questionPostponementList,
      osrNoteLinkInfoFinder,
      this.data.settings,
      this.onOsrVaultDataChanged.bind(this)
    );
  }
  initGuiItems() {
    this.nextNoteReviewHandler = new NextNoteReviewHandler(
      this.app,
      this.data.settings,
      this.app.workspace,
      this.osrAppCore.noteReviewQueue
    );
    appIcon();
    this.showStatusBar(this.data.settings.showStatusBar);
    this.showRibbonIcon(this.data.settings.showRibbonIcon);
    this.showFileMenuItems(!this.data.settings.disableFileMenuReviewOptions);
    this.addPluginCommands();
    this.addSettingTab(new SRSettingTab(this.app, this));
    this.osrSidebar = new OsrSidebar(this, this.data.settings, this.nextNoteReviewHandler);
    this.app.workspace.onLayoutReady(async () => {
      await this.osrSidebar.init();
      setTimeout(async () => {
        if (!this.osrAppCore.syncLock) {
          await this.sync();
        }
      }, 2e3);
    });
  }
  showFileMenuItems(status) {
    if (this.fileMenuHandler === void 0) {
      this.fileMenuHandler = (menu, fileish) => {
        if (fileish instanceof import_obsidian14.TFile && fileish.extension === "md") {
          menu.addItem((item) => {
            item.setTitle(
              t("REVIEW_DIFFICULTY_FILE_MENU", {
                difficulty: this.data.settings.flashcardEasyText
              })
            ).setIcon("SpacedRepIcon").onClick(() => {
              this.saveNoteReviewResponse(fileish, 0 /* Easy */);
            });
          });
          menu.addItem((item) => {
            item.setTitle(
              t("REVIEW_DIFFICULTY_FILE_MENU", {
                difficulty: this.data.settings.flashcardGoodText
              })
            ).setIcon("SpacedRepIcon").onClick(() => {
              this.saveNoteReviewResponse(fileish, 1 /* Good */);
            });
          });
          menu.addItem((item) => {
            item.setTitle(
              t("REVIEW_DIFFICULTY_FILE_MENU", {
                difficulty: this.data.settings.flashcardHardText
              })
            ).setIcon("SpacedRepIcon").onClick(() => {
              this.saveNoteReviewResponse(fileish, 2 /* Hard */);
            });
          });
        }
      };
    }
    if (status) {
      this.registerEvent(this.app.workspace.on("file-menu", this.fileMenuHandler));
    } else {
      this.app.workspace.off("file-menu", this.fileMenuHandler);
    }
  }
  addPluginCommands() {
    this.addCommand({
      id: "srs-note-review-open-note",
      name: t("OPEN_NOTE_FOR_REVIEW"),
      callback: async () => {
        if (!this.osrAppCore.syncLock) {
          await this.sync();
          this.nextNoteReviewHandler.reviewNextNoteModal();
        }
      }
    });
    this.addCommand({
      id: "srs-note-review-easy",
      name: t("REVIEW_NOTE_DIFFICULTY_CMD", {
        difficulty: this.data.settings.flashcardEasyText
      }),
      callback: () => {
        const openFile = this.app.workspace.getActiveFile();
        if (openFile && openFile.extension === "md") {
          this.saveNoteReviewResponse(openFile, 0 /* Easy */);
        }
      }
    });
    this.addCommand({
      id: "srs-note-review-good",
      name: t("REVIEW_NOTE_DIFFICULTY_CMD", {
        difficulty: this.data.settings.flashcardGoodText
      }),
      callback: () => {
        const openFile = this.app.workspace.getActiveFile();
        if (openFile && openFile.extension === "md") {
          this.saveNoteReviewResponse(openFile, 1 /* Good */);
        }
      }
    });
    this.addCommand({
      id: "srs-note-review-hard",
      name: t("REVIEW_NOTE_DIFFICULTY_CMD", {
        difficulty: this.data.settings.flashcardHardText
      }),
      callback: () => {
        const openFile = this.app.workspace.getActiveFile();
        if (openFile && openFile.extension === "md") {
          this.saveNoteReviewResponse(openFile, 2 /* Hard */);
        }
      }
    });
    this.addCommand({
      id: "srs-review-flashcards",
      name: t("REVIEW_ALL_CARDS"),
      callback: async () => {
        if (!this.osrAppCore.syncLock) {
          await this.sync();
          this.openFlashcardModal(
            this.osrAppCore.reviewableDeckTree,
            this.osrAppCore.remainingDeckTree,
            1 /* Review */
          );
        }
      }
    });
    this.addCommand({
      id: "srs-cram-flashcards",
      name: t("CRAM_ALL_CARDS"),
      callback: async () => {
        await this.sync();
        this.openFlashcardModal(
          this.osrAppCore.reviewableDeckTree,
          this.osrAppCore.reviewableDeckTree,
          0 /* Cram */
        );
      }
    });
    this.addCommand({
      id: "srs-review-flashcards-in-note",
      name: t("REVIEW_CARDS_IN_NOTE"),
      callback: async () => {
        const openFile = this.app.workspace.getActiveFile();
        if (openFile && openFile.extension === "md") {
          this.openFlashcardModalForSingleNote(openFile, 1 /* Review */);
        }
      }
    });
    this.addCommand({
      id: "srs-cram-flashcards-in-note",
      name: t("CRAM_CARDS_IN_NOTE"),
      callback: async () => {
        const openFile = this.app.workspace.getActiveFile();
        if (openFile && openFile.extension === "md") {
          this.openFlashcardModalForSingleNote(openFile, 0 /* Cram */);
        }
      }
    });
    this.addCommand({
      id: "srs-view-stats",
      name: t("VIEW_STATS"),
      callback: async () => {
        if (!this.osrAppCore.syncLock) {
          await this.sync();
          new StatsModal(this.app, this.osrAppCore).open();
        }
      }
    });
    this.addCommand({
      id: "srs-open-review-queue-view",
      name: t("OPEN_REVIEW_QUEUE_VIEW"),
      callback: async () => {
        await this.osrSidebar.openReviewQueueView();
      }
    });
  }
  onunload() {
    this.app.workspace.getLeavesOfType(REVIEW_QUEUE_VIEW_TYPE).forEach((leaf) => leaf.detach());
  }
  async openFlashcardModalForSingleNote(noteFile, reviewMode) {
    const note = await this.loadNote(noteFile);
    const deckTree = new Deck2("root", null);
    note.appendCardsToDeck(deckTree);
    const remainingDeckTree = DeckTreeFilter.filterForRemainingCards(
      this.osrAppCore.questionPostponementList,
      deckTree,
      reviewMode
    );
    this.openFlashcardModal(deckTree, remainingDeckTree, reviewMode);
  }
  openFlashcardModal(fullDeckTree, remainingDeckTree, reviewMode) {
    const deckIterator = _SRPlugin.createDeckTreeIterator(this.data.settings);
    const reviewSequencer = new FlashcardReviewSequencer(
      reviewMode,
      deckIterator,
      this.data.settings,
      SrsAlgorithm.getInstance(),
      this.osrAppCore.questionPostponementList,
      this.osrAppCore.dueDateFlashcardHistogram
    );
    reviewSequencer.setDeckTree(fullDeckTree, remainingDeckTree);
    new FlashcardModal(this.app, this, this.data.settings, reviewSequencer, reviewMode).open();
  }
  static createDeckTreeIterator(settings) {
    let cardOrder = CardOrder[settings.flashcardCardOrder];
    if (cardOrder === void 0) cardOrder = 2 /* DueFirstSequential */;
    let deckOrder = DeckOrder[settings.flashcardDeckOrder];
    if (deckOrder === void 0) deckOrder = 0 /* PrevDeckComplete_Sequential */;
    const iteratorOrder = {
      deckOrder,
      cardOrder
    };
    return new DeckTreeIterator(iteratorOrder, null);
  }
  async sync() {
    if (this.osrAppCore.syncLock) {
      return;
    }
    const now2 = window.moment(Date.now());
    this.osrAppCore.defaultTextDirection = this.getObsidianRtlSetting();
    await this.osrAppCore.loadVault();
    if (this.data.settings.showDebugMessages) {
      console.log(`SR: ${t("DECKS")}`, this.osrAppCore.reviewableDeckTree);
      console.log(
        "SR: " + t("SYNC_TIME_TAKEN", {
          t: Date.now() - now2.valueOf()
        })
      );
    }
  }
  onOsrVaultDataChanged() {
    this.statusBar.setText(
      t("STATUS_BAR", {
        dueNotesCount: this.osrAppCore.noteReviewQueue.dueNotesCount,
        dueFlashcardsCount: this.osrAppCore.remainingDeckTree.getCardCount(
          2 /* All */,
          true
        )
      })
    );
    this.osrSidebar.redraw();
  }
  async loadNote(noteFile) {
    const loader = new NoteFileLoader(this.data.settings);
    const srFile = this.createSrTFile(noteFile);
    const folderTopicPath = TopicPath.getFolderPathFromFilename(
      srFile,
      this.data.settings
    );
    const note = await loader.load(
      this.createSrTFile(noteFile),
      this.getObsidianRtlSetting(),
      folderTopicPath
    );
    if (note.hasChanged) {
      note.writeNoteFile(this.data.settings);
    }
    return note;
  }
  getObsidianRtlSetting() {
    const v = this.app.vault.getConfig("rightToLeft");
    return convertToStringOrEmpty(v) == "true" ? 2 /* Rtl */ : 1 /* Ltr */;
  }
  async saveNoteReviewResponse(note, response) {
    const noteSrTFile = this.createSrTFile(note);
    if (SettingsUtil.isPathInNoteIgnoreFolder(this.data.settings, note.path)) {
      new import_obsidian14.Notice(t("NOTE_IN_IGNORED_FOLDER"));
      return;
    }
    const tags = noteSrTFile.getAllTagsFromCache();
    if (!SettingsUtil.isAnyTagANoteReviewTag(this.data.settings, tags)) {
      new import_obsidian14.Notice(t("PLEASE_TAG_NOTE"));
      return;
    }
    await this.osrAppCore.saveNoteReviewResponse(noteSrTFile, response, this.data.settings);
    new import_obsidian14.Notice(t("RESPONSE_RECEIVED"));
    if (this.data.settings.autoNextNote) {
      this.nextNoteReviewHandler.autoReviewNextNote();
    }
  }
  createSrTFile(note) {
    return new SrTFile(this.app.vault, this.app.metadataCache, note);
  }
  async loadPluginData() {
    const loadedData = await this.loadData();
    if (loadedData == null ? void 0 : loadedData.settings) upgradeSettings(loadedData.settings);
    this.data = Object.assign({}, DEFAULT_DATA, loadedData);
    this.data.settings = Object.assign({}, DEFAULT_SETTINGS, this.data.settings);
    setDebugParser(this.data.settings.showPaserDebugMessages);
    this.setupDataStoreAndAlgorithmInstances(this.data.settings);
  }
  setupDataStoreAndAlgorithmInstances(settings) {
    DataStore.instance = new StoreInNote(settings);
    SrsAlgorithm.instance = new SrsAlgorithm_Osr(settings);
    DataStoreAlgorithm.instance = new DataStoreInNote_AlgorithmOsr(settings);
  }
  async savePluginData() {
    await this.saveData(this.data);
  }
  async debouncedGenerateParser(timeout_ms = 250) {
    if (this.debouncedGenerateParserTimeout) {
      clearTimeout(this.debouncedGenerateParserTimeout);
    }
    this.debouncedGenerateParserTimeout = window.setTimeout(async () => {
      const parserOptions = {
        singleLineCardSeparator: this.data.settings.singleLineCardSeparator,
        singleLineReversedCardSeparator: this.data.settings.singleLineReversedCardSeparator,
        multilineCardSeparator: this.data.settings.multilineCardSeparator,
        multilineReversedCardSeparator: this.data.settings.multilineReversedCardSeparator,
        multilineCardEndMarker: this.data.settings.multilineCardEndMarker,
        convertHighlightsToClozes: this.data.settings.convertHighlightsToClozes,
        convertBoldTextToClozes: this.data.settings.convertBoldTextToClozes,
        convertCurlyBracketsToClozes: this.data.settings.convertCurlyBracketsToClozes
      };
      generateParser(parserOptions);
      this.debouncedGenerateParserTimeout = null;
    }, timeout_ms);
  }
  showRibbonIcon(status) {
    if (!this.ribbonIcon) {
      this.ribbonIcon = this.addRibbonIcon("SpacedRepIcon", t("REVIEW_CARDS"), async () => {
        if (!this.osrAppCore.syncLock) {
          await this.sync();
          this.openFlashcardModal(
            this.osrAppCore.reviewableDeckTree,
            this.osrAppCore.remainingDeckTree,
            1 /* Review */
          );
        }
      });
    }
    if (status) {
      this.ribbonIcon.style.display = "";
    } else {
      this.ribbonIcon.style.display = "none";
    }
  }
  showStatusBar(status) {
    if (!this.statusBar) {
      this.statusBar = this.addStatusBarItem();
      this.statusBar.classList.add("mod-clickable");
      this.statusBar.setAttribute("aria-label", t("OPEN_NOTE_FOR_REVIEW"));
      this.statusBar.setAttribute("aria-label-position", "top");
      this.statusBar.addEventListener("click", async () => {
        if (!this.osrAppCore.syncLock) {
          await this.sync();
          this.nextNoteReviewHandler.reviewNextNoteModal();
        }
      });
    }
    if (status) {
      this.statusBar.style.display = "";
    } else {
      this.statusBar.style.display = "none";
    }
  }
};
/*! Bundled license information:

moment/moment.js:
  (*! moment.js *)
  (*! version : 2.30.1 *)
  (*! authors : Tim Wood, Iskren Chernev, Moment.js contributors *)
  (*! license : MIT *)
  (*! momentjs.com *)

@kurkle/color/dist/color.esm.js:
  (*!
   * @kurkle/color v0.3.2
   * https://github.com/kurkle/color#readme
   * (c) 2023 Jukka Kurkela
   * Released under the MIT License
   *)

chart.js/dist/chunks/helpers.segment.js:
  (*!
   * Chart.js v4.4.4
   * https://www.chartjs.org
   * (c) 2024 Chart.js Contributors
   * Released under the MIT License
   *)

chart.js/dist/chart.js:
  (*!
   * Chart.js v4.4.4
   * https://www.chartjs.org
   * (c) 2024 Chart.js Contributors
   * Released under the MIT License
   *)
*/
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21vbWVudEAyLjMwLjEvbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3BhZ2VyYW5rLmpzQDEuMC4yL25vZGVfbW9kdWxlcy9wYWdlcmFuay5qcy9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JhbGFuY2VkLW1hdGNoQDEuMC4yL25vZGVfbW9kdWxlcy9iYWxhbmNlZC1tYXRjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYnJhY2UtZXhwYW5zaW9uQDIuMC4xL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3BlZ2d5QDQuMC4zL25vZGVfbW9kdWxlcy9wZWdneS9icm93c2VyL3BlZ2d5Lm1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdmh0bWxAMi4yLjAvbm9kZV9tb2R1bGVzL3ZodG1sL3NyYy9lbXB0eS10YWdzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS92aHRtbEAyLjIuMC9ub2RlX21vZHVsZXMvdmh0bWwvc3JjL3ZodG1sLmpzIiwgIi4uL3NyYy9tYWluLnRzIiwgIi4uL3NyYy9hbGdvcml0aG1zL2Jhc2UvcmVwZXRpdGlvbi1pdGVtLnRzIiwgIi4uL3NyYy9hbGdvcml0aG1zL2Jhc2Uvc3JzLWFsZ29yaXRobS50cyIsICIuLi9zcmMvYWxnb3JpdGhtcy9vc3Ivb2JzaWRpYW4tdmF1bHQtbm90ZWxpbmstaW5mby1maW5kZXIudHMiLCAiLi4vc3JjL2FsZ29yaXRobXMvb3NyL3Nycy1hbGdvcml0aG0tb3NyLnRzIiwgIi4uL3NyYy9jb25zdGFudHMudHMiLCAiLi4vc3JjL2xhbmcvaGVscGVycy50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvYWYudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2FyLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9ibi50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvY3oudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2RhLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9kZS50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvZW4udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2VuLWdiLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9lcy50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvZnIudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2hpLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9pZC50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvaXQudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2phLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9rby50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvbXIudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL25sLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9uby50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvcGwudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3B0LnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9wdC1ici50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvcm8udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3J1LnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9zdy50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvdGEudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3RlLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS90aC50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvdHIudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3VrLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS91ci50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvdmkudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3poLWNuLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS96aC10dy50cyIsICIuLi9zcmMvYWxnb3JpdGhtcy9vc3Ivbm90ZS1zY2hlZHVsaW5nLnRzIiwgIi4uL3NyYy91dGlscy9kYXRlcy50cyIsICIuLi9zcmMvYWxnb3JpdGhtcy9iYXNlL3JlcC1pdGVtLXNjaGVkdWxlLWluZm8udHMiLCAiLi4vc3JjL2FsZ29yaXRobXMvb3NyL3JlcC1pdGVtLXNjaGVkdWxlLWluZm8tb3NyLnRzIiwgIi4uL3NyYy9ub3RlLWVhc2UtbGlzdC50cyIsICIuLi9zcmMvYWxnb3JpdGhtcy9vc3Ivb3NyLW5vdGUtZ3JhcGgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pbmltYXRjaEAxMC4wLjEvbm9kZV9tb2R1bGVzL21pbmltYXRjaC9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pbmltYXRjaEAxMC4wLjEvbm9kZV9tb2R1bGVzL21pbmltYXRjaC9zcmMvYXNzZXJ0LXZhbGlkLXBhdHRlcm4udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pbmltYXRjaEAxMC4wLjEvbm9kZV9tb2R1bGVzL21pbmltYXRjaC9zcmMvYnJhY2UtZXhwcmVzc2lvbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pbmltYXRjaEAxMC4wLjEvbm9kZV9tb2R1bGVzL21pbmltYXRjaC9zcmMvdW5lc2NhcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pbmltYXRjaEAxMC4wLjEvbm9kZV9tb2R1bGVzL21pbmltYXRjaC9zcmMvYXN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taW5pbWF0Y2hAMTAuMC4xL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvc3JjL2VzY2FwZS50cyIsICIuLi9zcmMvdXRpbHMvZnMudHMiLCAiLi4vc3JjL2RhdGEtc3RvcmUtYWxnb3JpdGhtL2RhdGEtc3RvcmUtYWxnb3JpdGhtLnRzIiwgIi4uL3NyYy9kYXRhLXN0b3Jlcy9iYXNlL2RhdGEtc3RvcmUudHMiLCAiLi4vc3JjL3RvcGljLXBhdGgudHMiLCAiLi4vc3JjL2ZsYXNoY2FyZC1yZXZpZXctc2VxdWVuY2VyLnRzIiwgIi4uL3NyYy9kZWNrLnRzIiwgIi4uL3NyYy91dGlscy90eXBlcy50cyIsICIuLi9zcmMvdXRpbHMvbnVtYmVycy50cyIsICIuLi9zcmMvZGVjay10cmVlLWl0ZXJhdG9yLnRzIiwgIi4uL3NyYy9zdGF0cy50cyIsICIuLi9zcmMvZGVjay10cmVlLXN0YXRzLWNhbGN1bGF0b3IudHMiLCAiLi4vc3JjL2R1ZS1kYXRlLWhpc3RvZ3JhbS50cyIsICIuLi9zcmMvbm90ZS50cyIsICIuLi9zcmMvY2FyZC50cyIsICIuLi9zcmMvcGFyc2VyLnRzIiwgIi4uL3NyYy91dGlscy9zdHJpbmdzLnRzIiwgIi4uL3NyYy9xdWVzdGlvbi50cyIsICIuLi9zcmMvcXVlc3Rpb24tdHlwZS50cyIsICIuLi9zcmMvc2V0dGluZ3MudHMiLCAiLi4vc3JjL2d1aS90YWJzLnRzeCIsICIuLi9zcmMvc3ItZmlsZS50cyIsICIuLi9zcmMvbm90ZS1xdWVzdGlvbi1wYXJzZXIudHMiLCAiLi4vc3JjL25vdGUtZmlsZS1sb2FkZXIudHMiLCAiLi4vc3JjL25vdGUtcmV2aWV3LWRlY2sudHMiLCAiLi4vc3JjL25vdGUtcmV2aWV3LXF1ZXVlLnRzIiwgIi4uL3NyYy9jb3JlLnRzIiwgIi4uL3NyYy9hcHAtY29yZS50cyIsICIuLi9zcmMvZGF0YS1zdG9yZS1hbGdvcml0aG0vZGF0YS1zdG9yZS1pbi1ub3RlLWFsZ29yaXRobS1vc3IudHMiLCAiLi4vc3JjL2RhdGEtc3RvcmVzL3N0b3JlLWluLW5vdGUvbm90ZS50cyIsICIuLi9zcmMvZ3VpL2ZsYXNoY2FyZC1tb2RhbC50c3giLCAiLi4vc3JjL2d1aS9kZWNrLWxpc3Qtdmlldy50c3giLCAiLi4vc3JjL2d1aS9lZGl0LW1vZGFsLnRzeCIsICIuLi9zcmMvZ3VpL2ZsYXNoY2FyZC1yZXZpZXctdmlldy50c3giLCAiLi4vc3JjL3V0aWxzL3JlbmRlcmVycy50cyIsICIuLi9zcmMvZ3VpL3Jldmlldy1xdWV1ZS1saXN0LXZpZXcudHN4IiwgIi4uL3NyYy9ndWkvc2lkZWJhci50c3giLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BrdXJrbGUrY29sb3JAMC4zLjIvbm9kZV9tb2R1bGVzL0BrdXJrbGUvY29sb3IvZGlzdC9jb2xvci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmNvcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLm1hdGgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmNvbGxlY3Rpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmV4dHJhcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuZWFzaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jb2xvci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYW5pbWF0aW9ucy5kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUubGF5b3V0cy5kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuaW50bC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUudGlja3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnNjYWxlLmRlZmF1bHRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuY2FudmFzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5vcHRpb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jb25maWcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmN1cnZlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5kb20udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmludGVycG9sYXRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLnJ0bC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuc2VnbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYW5pbWF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmFuaW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYW5pbWF0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuZGF0YXNldENvbnRyb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5iYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5idWJibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5kb3VnaG51dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLmxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5wb2xhckFyZWEuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5waWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5yYWRhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLnNjYXR0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmFkYXB0ZXJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5pbnRlcmFjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUubGF5b3V0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbGF0Zm9ybS9wbGF0Zm9ybS5iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsYXRmb3JtL3BsYXRmb3JtLmJhc2ljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsYXRmb3JtL3BsYXRmb3JtLmRvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuZWxlbWVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuc2NhbGUuYXV0b3NraXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnNjYWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS50eXBlZFJlZ2lzdHJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5yZWdpc3RyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUucGx1Z2lucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuY29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5jb250cm9sbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2VsZW1lbnRzL2VsZW1lbnQuYXJjLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2VsZW1lbnRzL2VsZW1lbnQubGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9lbGVtZW50cy9lbGVtZW50LnBvaW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2VsZW1lbnRzL2VsZW1lbnQuYmFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmNvbG9ycy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5kZWNpbWF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmZpbGxlci9maWxsZXIuc2VnbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvZmlsbGVyLmhlbHBlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvZmlsbGVyLm9wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2ZpbGxlci50YXJnZXQuc3RhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL3NpbXBsZUFyYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvZmlsbGVyLnRhcmdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvZmlsbGVyLmRyYXdpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC40L25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmxlZ2VuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi50aXRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5zdWJ0aXRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi50b29sdGlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5jYXRlZ29yeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9zY2FsZXMvc2NhbGUubGluZWFyYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9zY2FsZXMvc2NhbGUubGluZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5sb2dhcml0aG1pYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjQvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9zY2FsZXMvc2NhbGUucmFkaWFsTGluZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS50aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS50aW1lc2VyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuNC9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9ndWkvc3RhdHMtbW9kYWwudHN4IiwgIi4uL3NyYy9pY29ucy9hcHAtaWNvbi50cyIsICIuLi9zcmMvbmV4dC1ub3RlLXJldmlldy1oYW5kbGVyLnRzIiwgIi4uL3NyYy9ndWkvcmV2aWV3LWRlY2stc2VsZWN0aW9uLW1vZGFsLnRzeCIsICIuLi9zcmMvcGx1Z2luLWRhdGEudHMiLCAiLi4vc3JjL3F1ZXN0aW9uLXBvc3Rwb25lbWVudC1saXN0LnRzIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSxtRUFBQUEsVUFBQUMsU0FBQTtBQU1DLEtBQUMsU0FBVUMsU0FBUSxT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RSxDQUFDLEdBQUVDLEtBQUUsR0FBRUEsS0FBRSxVQUFVLFFBQU9BLEtBQUksQ0FBQUQsR0FBRUMsS0FBRSxDQUFDLElBQUUsVUFBVUEsRUFBQztBQUFFLGlCQUFPLEVBQUVKLEdBQUUsSUFBSSxFQUFFLE1BQU0sR0FBRSxnQkFBZ0IsQ0FBQ0EsRUFBQyxHQUFFRyxJQUFFLEtBQUUsQ0FBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxJQUFHO0FBQUEsUUFBQztBQUFDLGlCQUFTLEVBQUVELElBQUU7QUFBQyxtQkFBUUMsS0FBRSxDQUFDLEdBQUVDLEtBQUUsR0FBRUEsS0FBRSxVQUFVLFFBQU9BLEtBQUksQ0FBQUQsR0FBRUMsS0FBRSxDQUFDLElBQUUsVUFBVUEsRUFBQztBQUFFLGlCQUFPSixHQUFFLE1BQU0sUUFBTyxnQkFBZ0IsQ0FBQ0UsR0FBRSxVQUFVLEdBQUVDLElBQUUsS0FBRSxDQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEVBQUVELElBQUU7QUFBQyxpQkFBTyxTQUFTQyxJQUFFO0FBQUMscUJBQVFDLEtBQUUsQ0FBQyxHQUFFQyxLQUFFLEdBQUVBLEtBQUUsVUFBVSxRQUFPQSxLQUFJLENBQUFELEdBQUVDLEtBQUUsQ0FBQyxJQUFFLFVBQVVBLEVBQUM7QUFBRSxZQUFBRixHQUFFRCxFQUFDLEVBQUUsUUFBUyxTQUFTQSxJQUFFO0FBQUMscUJBQU9GLEdBQUUsTUFBTSxRQUFPLGdCQUFnQixDQUFDRSxFQUFDLEdBQUVFLElBQUUsS0FBRSxDQUFDO0FBQUEsWUFBQyxDQUFFO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxZQUFJLElBQUUsRUFBQyxTQUFRLFNBQVNGLElBQUU7QUFBQyxtQkFBUUMsS0FBRSxDQUFDLEdBQUVDLEtBQUUsR0FBRUEsS0FBRSxVQUFVLFFBQU9BLEtBQUksQ0FBQUQsR0FBRUMsS0FBRSxDQUFDLElBQUUsVUFBVUEsRUFBQztBQUFFLG1CQUFRQyxLQUFFLEdBQUVDLEtBQUVKLEdBQUUsU0FBUUcsS0FBRUMsR0FBRSxRQUFPRCxNQUFJO0FBQUMsZ0JBQUksSUFBRUMs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SUFBRSxFQUFFQyxJQUFFLENBQUMsS0FBSyxZQUFZLEdBQUUsRUFBRSxDQUFDLEtBQUssZ0JBQWUsQ0FBQyxHQUFFQyxHQUFFQyxJQUFFLEdBQUVMLElBQUVILEdBQUUsS0FBRyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsR0FBRSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUVLO0FBQUEsUUFBQyxHQUFFLFVBQVMsU0FBU0gsSUFBRUYsSUFBRTtBQUFDLGlCQUFPLEVBQUUsQ0FBQyxLQUFLLGFBQWEsR0FBRSxTQUFTQSxHQUFFRyxJQUFFQyxJQUFFO0FBQUMsZ0JBQUdELEdBQUUsU0FBTyxHQUFFO0FBQUMsa0JBQUlFLEtBQUVILEdBQUUsU0FBUyxTQUFPQyxHQUFFLFNBQU87QUFBRSxxQkFBTyxFQUFFLEVBQUVBLEdBQUUsQ0FBQyxHQUFFLEVBQUMsSUFBR0MsR0FBRSxJQUFHLEtBQUlBLEdBQUUsS0FBSSxPQUFNQSxHQUFFLE9BQU0sUUFBTyxLQUFJLENBQUMsR0FBRSxFQUFFRCxHQUFFLENBQUMsRUFBRSxTQUFPLEdBQUUsQ0FBQyxLQUFLLFlBQVksR0FBRUgsR0FBRUcsR0FBRSxNQUFNLENBQUMsR0FBRSxFQUFDLElBQUdDLEdBQUUsS0FBRyxHQUFFLEtBQUlBLEdBQUUsS0FBSSxPQUFNQSxHQUFFLE9BQU0sUUFBT0EsR0FBRSxPQUFNLENBQUMsR0FBRSxFQUFFQyxLQUFFLElBQUUsQ0FBQyxLQUFLLE9BQU1BLEVBQUMsSUFBRSxDQUFDLEtBQUssR0FBRyxHQUFFLENBQUMsS0FBSyxZQUFZLEdBQUUsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFBQSxZQUFDO0FBQUMsZ0JBQUdELEdBQUUsU0FBT0EsR0FBRSxNQUFNLFNBQU8sRUFBRSxRQUFPLEVBQUUsQ0FBQyxLQUFLLE9BQU1GLEdBQUUsU0FBUyxTQUFPLEdBQUVFLEdBQUUsTUFBTSxNQUFNLEdBQUVBLEdBQUUsTUFBTSxJQUFLLFNBQVNGLElBQUU7QUFBQyxxQkFBT0UsR0FBRSxLQUFHRjtBQUFBLFlBQUMsQ0FBRSxDQUFDO0FBQUUsZ0JBQUdFLEdBQUUsUUFBTztBQUFDLGtCQUFJRSxLQUFFLEVBQUUsT0FBRyxPQUFPLEtBQUtGLEdBQUUsR0FBRyxHQUFFQSxHQUFFLE1BQU07QUFBRSxxQkFBTyxFQUFFLENBQUMsS0FBSyxnQkFBZUYsR0FBRSxTQUFTLE1BQU0sR0FBRUssR0FBRUQsSUFBRUosR0FBRSxTQUFTLFNBQU8sR0FBRUUsR0FBRSxLQUFJQSxHQUFFLEVBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQyxtQkFBTyxFQUFFLENBQUMsS0FBSyxNQUFLRixHQUFFLFNBQVMsTUFBTSxHQUFFLENBQUMsS0FBSyxHQUFHLENBQUM7QUFBQSxVQUFDLEVBQUVBLEdBQUUsVUFBUyxFQUFDLElBQUdGLEdBQUUsS0FBRyxHQUFFLEtBQUlBLEdBQUUsS0FBSSxPQUFNLENBQUMsR0FBRSxRQUFPQSxHQUFFLE9BQU0sQ0FBQyxDQUFDO0FBQUEsUUFBQyxHQUFFLFNBQVEsU0FBU0UsSUFBRUUsSUFBRTtBQUFDLGNBQUlDLEtBQUVELEdBQUUsS0FBSUUsS0FBRUosR0FBRSxPQUFNTSxLQUFFSixHQUFFLEtBQUc7QUFBRSxVQUFBRSxPQUFJRCxLQUFFLEVBQUVELEdBQUUsR0FBRyxHQUFFQSxHQUFFLElBQUlFLEVBQUMsSUFBRUUsS0FBR04sR0FBRSxRQUFNRSxHQUFFLE1BQU0sS0FBS0ksRUFBQztBQUFFLGNBQUlDLEtBQUUsRUFBRVAsR0FBRSxZQUFXLEVBQUMsSUFBR0UsR0FBRSxJQUFHLEtBQUlDLElBQUUsUUFBTyxLQUFJLENBQUM7QUFBRSxpQkFBT0MsTUFBR0osR0FBRSxpQkFBZUYsTUFBRyxxQkFBbUJBLEdBQUUsU0FBTyxFQUFFLENBQUMsS0FBSyx1QkFBc0JRLElBQUUsRUFBRSxJQUFJRixFQUFDLEdBQUUsRUFBRUosR0FBRSxhQUFhLENBQUMsR0FBRU8sSUFBRSxDQUFDLEtBQUssc0JBQXFCRCxFQUFDLENBQUMsSUFBRUM7QUFBQSxRQUFDLEdBQUUsTUFBSyxTQUFTUCxJQUFFRixJQUFFO0FBQUMsaUJBQU8sRUFBRSxDQUFDLEtBQUssYUFBYSxHQUFFLEVBQUVFLEdBQUUsWUFBVyxFQUFDLElBQUdGLEdBQUUsS0FBRyxHQUFFLEtBQUksRUFBRUEsR0FBRSxHQUFHLEdBQUUsUUFBTyxLQUFJLENBQUMsR0FBRSxFQUFFRSxHQUFFLFNBQU8sR0FBRSxDQUFDLEtBQUssWUFBWSxHQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsR0FBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQUEsUUFBQyxHQUFFLFlBQVcsU0FBU0EsSUFBRUYsSUFBRTtBQUFDLGlCQUFPLEVBQUVFLEdBQUUsWUFBVyxPQUFHRixFQUFDO0FBQUEsUUFBQyxHQUFFLFlBQVcsU0FBU0UsSUFBRUYsSUFBRTtBQUFDLGlCQUFPLEVBQUVFLEdBQUUsWUFBVyxNQUFHRixFQUFDO0FBQUEsUUFBQyxHQUFFLFVBQVMsU0FBU0UsSUFBRUYsSUFBRTtBQUFDLGlCQUFPLEVBQUUsRUFBRUUsR0FBRSxZQUFXLEVBQUMsSUFBR0YsR0FBRSxJQUFHLEtBQUksRUFBRUEsR0FBRSxHQUFHLEdBQUUsUUFBTyxLQUFJLENBQUMsR0FBRSxFQUFFLEVBQUVFLEdBQUUsV0FBVyxTQUFPLElBQUcsQ0FBQyxLQUFLLFFBQVEsR0FBRSxFQUFFLENBQUMsS0FBSyxHQUFHLEdBQUUsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDO0FBQUEsUUFBQyxHQUFFLGNBQWEsU0FBU0EsSUFBRUYsSUFBRTtBQUFDLGNBQUlHLEtBQUUsRUFBRUQsR0FBRSxZQUFXLEVBQUMsSUFBR0YsR0FBRSxLQUFHLEdBQUUsS0FBSSxFQUFFQSxHQUFFLEdBQUcsR0FBRSxRQUFPLEtBQUksQ0FBQztBQUFFLGlCQUFPLEVBQUUsQ0FBQyxLQUFLLGdCQUFnQixHQUFFRyxJQUFFLEVBQUVBLEVBQUMsR0FBRSxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQUEsUUFBQyxHQUFFLGFBQVksU0FBU0QsSUFBRUYsSUFBRTtBQUFDLGNBQUlHLEtBQUUsRUFBRUQsR0FBRSxZQUFX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RUc7QUFBRSxtQkFBT0gsS0FBRSxJQUFHRyxLQUFFLElBQUcsR0FBRyxHQUFFQSxLQUFFLEVBQUUsVUFBVUEsSUFBRSxFQUFFLEdBQUUsS0FBR0gsSUFBRSxHQUFHRyxFQUFDO0FBQUEsVUFBQyxFQUFFLEdBQUVFLEtBQUUsV0FBVTtBQUFDLGdCQUFJTCxJQUFFRyxJQUFFRSxJQUFFQztBQUFFLGlCQUFJTixLQUFFLElBQUdHLEtBQUUsSUFBR0UsS0FBRSxDQUFDLEdBQUUsRUFBRSxTQUFPLE1BQUlDLEtBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLElBQUcsQ0FBQUQsR0FBRSxLQUFLQyxFQUFDLEdBQUUsRUFBRSxTQUFPLE1BQUlBLEtBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRTtBQUFHLG1CQUFPSCxLQUFFLEVBQUUsVUFBVUEsSUFBRSxFQUFFLEdBQUUsS0FBR0gsSUFBRSxHQUFHRyxFQUFDO0FBQUEsVUFBQyxFQUFFLEdBQUUsS0FBR0gsSUFBRSxHQUFHRyxJQUFFRSxFQUFDO0FBQUEsUUFBQyxFQUFDLEdBQUUsSUFBRSxJQUFHLElBQUUsVUFBUyxJQUFFLEtBQUksSUFBRSxLQUFJLElBQUUsS0FBSSxJQUFFLE1BQUssSUFBRSxLQUFJRSxLQUFFLEtBQUksSUFBRSxRQUFPLElBQUUsS0FBSSxJQUFFLEtBQUksSUFBRSxLQUFJLElBQUUsS0FBSSxJQUFFLEtBQUksSUFBRSxNQUFLLElBQUUsS0FBSSxJQUFFLEtBQUksSUFBRSxLQUFJLElBQUUsTUFBSyxJQUFFLFFBQU8sSUFBRSxNQUFLLElBQUUsTUFBSyxJQUFFLE1BQUssSUFBRSxNQUFLLElBQUUsS0FBSSxJQUFFLEtBQUksSUFBRSxLQUFJLElBQUUsS0FBSSxJQUFFLEtBQUksSUFBRSxLQUFJLElBQUUsS0FBSSxJQUFFLEtBQUksSUFBRSxLQUFJLElBQUUsS0FBSSxJQUFFLEtBQUksSUFBRSxLQUFJLElBQUUsS0FBSSxJQUFFLEtBQUksSUFBRSxLQUFJLElBQUUsS0FBSSxJQUFFLFVBQVMsSUFBRSxXQUFVLElBQUUsU0FBUSxJQUFFLDhEQUE2RCxJQUFFLHVCQUFzQixJQUFFLHNCQUFxQixJQUFFLDJzSUFBMHNJLElBQUUsMGhGQUF5aEYsS0FBRywyQkFBMEIsS0FBRywyQkFBMEIsS0FBRyw2QkFBNEIsS0FBRyxXQUFVLEtBQUcsWUFBVyxLQUFHLFVBQVMsS0FBRyxjQUFhLEtBQUcsU0FBUSxLQUFHLEVBQUMsTUFBSyxNQUFLLEdBQUUsS0FBRyxHQUFHLFVBQVMsS0FBRSxHQUFFLEtBQUcsR0FBRyxLQUFJLEtBQUUsR0FBRSxLQUFHLEdBQUcsS0FBSSxLQUFFLEdBQUUsS0FBRyxHQUFHLEtBQUksS0FBRSxHQUFFLEtBQUcsR0FBRyxNQUFLLEtBQUUsR0FBRSxLQUFHLEdBQUcsS0FBSSxLQUFFLEdBQUUsS0FBRyxHQUFHLEtBQUksS0FBRSxHQUFFLEtBQUcsR0FBRyxRQUFPLEtBQUUsR0FBRSxLQUFHLEdBQUcsS0FBSSxLQUFFLEdBQUUsS0FBRyxHQUFHLEtBQUksS0FBRSxHQUFFLEtBQUcsR0FBRyxLQUFJLEtBQUUsR0FBRSxLQUFHLEdBQUcsS0FBSSxLQUFFLEdBQUUsS0FBRyxHQUFHLENBQUMsS0FBSSxLQUFJLEdBQUcsR0FBRSxPQUFHLEtBQUUsR0FBRSxLQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUksR0FBRyxHQUFFLEdBQUcsR0FBRSxPQUFHLEtBQUUsR0FBRSxLQUFHLEdBQUcsS0FBSSxLQUFFLEdBQUUsS0FBRyxHQUFHLE1BQUssS0FBRSxHQUFFLEtBQUcsR0FBRyxLQUFJLEtBQUUsR0FBRSxLQUFHLEdBQUcsS0FBSSxLQUFFLEdBQUUsS0FBRyxHQUFHLEtBQUksS0FBRSxHQUFFLEtBQUcsR0FBRyxDQUFDLEtBQUksR0FBRyxHQUFFLE9BQUcsS0FBRSxHQUFFLEtBQUcsR0FBRyxZQUFZLEdBQUUsS0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQUssSUFBSSxHQUFFLEtBQUksUUFBSSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxVQUFJLFVBQUksUUFBUSxHQUFFLE9BQUcsS0FBRSxHQUFFLEtBQUcsR0FBRyxDQUFDLE1BQUssTUFBSyxVQUFTLFFBQVEsR0FBRSxPQUFHLEtBQUUsR0FBRSxLQUFHLEdBQUcsYUFBYSxHQUFFLEtBQUcsR0FBRyxNQUFLLEtBQUUsR0FBRSxLQUFHLEdBQUcsUUFBTyxLQUFFLEdBQUUsS0FBRyxHQUFHLENBQUMsTUFBSyxDQUFDLFVBQVMsUUFBUSxDQUFDLEdBQUUsT0FBRyxLQUFFLEdBQUUsS0FBRyxHQUFHLFNBQVMsR0FBRSxLQUFHLEdBQUcsTUFBSyxLQUFFLEdBQUUsS0FBRyxHQUFHLE1BQUssS0FBRSxHQUFFLEtBQUcsR0FBRyxNQUFLLEtBQUUsR0FBRSxLQUFHLEdBQUcsWUFBWSxHQUFFLEtBQUcsR0FBRyxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsS0FBSSxDQUFDLEtBQUksR0FBRyxHQUFFLFFBQUksUUFBSSxRQUFJLENBQUMsUUFBSSxNQUFHLEdBQUUsQ0FBQyxRQUFJLE1BQUcsR0FBRSxDQUFDLFFBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksVUFBSSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksVUFBSSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxVQUFJLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxDQUFDLEdBQUUsT0FBRyxLQUFFLEdBQUUsS0FBRyxHQUFHLE1BQUssS0FBRSxHQUFFLEtBQUcsR0FBRyxDQUFDLEtBQUksQ0FBQyxLQUFJLEdBQUcsR0FBRSxLQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksVUFBSSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxVQUFJLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLFVBQUksQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsVUFBSSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxVQUFJLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxDQUFDLFVBQUksUUFBRyxHQUFFLENBQUMsVUFBSSxRQUFHLEdBQUUsQ0FBQyxVQUFJLFFBQUcsR0FBRSxRQUFHLEdBQUUsT0FBRyxLQUFFLEdBQUUsS0FBRyxHQUFHLFNBQVMsR0FBRSxLQUFHLEdBQUcsS0FBSSxLQUFFLEdBQUUsS0FBRyxHQUFHLFFBQVEsR0FBRSxLQUFHLEdBQUcsS0FBSSxLQUFFLEdBQUUsS0FBRyxHQUFHLEtBQUksS0FBRSxHQUFFLEtBQUcsR0FBRyxDQUFDLE1BQUssTUFBSyxLQUFJLE1BQUssQ0FBQyxVQUFTLFFBQVEsQ0FBQyxHQUFFLE9BQUcsS0FBRSxHQUFFLEtBQUcsR0FBRyxDQUFDLE1BQUssTUFBSyxLQUFJLE1BQUssQ0FBQyxVQUFTLFFBQVEsQ0FBQyxHQUFFLE9BQUcsS0FBRSxHQUFFLEtBQUcsR0FBRyxpQkFBaUIsR0FBRSxLQUFHLEdBQUcsS0FBSSxLQUFFLEdBQUUsS0FBRyxHQUFHLEtBQUksS0FBRSxHQUFFLEtBQUcsR0FBRyxLQUFJLEtBQUUsR0FBRSxLQUFHLEdBQUcsS0FBSSxLQUFFLEdBQUUsS0FBRyxHQUFHLENBQUMsTUFBSyxNQUFLLENBQUMsTUFBSyxHQUFHLEdBQUUsQ0FBQyxVQUFTLFFBQVEsQ0FBQyxHQUFFLE9BQUcsS0FBRSxHQUFFLEtBQUcsR0FBRyxLQUFJLEtBQUUsR0FBRSxLQUFHLEdBQUcsQ0FBQyxLQUFJLEtBQUksSUFBSSxHQUFFLE9BQUcsS0FBRSxHQUFFLEtBQUcsR0FBRyxLQUFJLEtBQUUsR0FBRSxLQUFHLEdBQUcsS0FBSSxLQUFFLEdBQUUsS0FBRyxHQUFHLEtBQUksS0FBRSxHQUFFLEtBQUcsR0FBRyxLQUFJLEtBQUUsR0FBRSxLQUFHLEdBQUcsS0FBSSxLQUFFLEdBQUUsS0FBRyxHQUFHLEtBQUksS0FBRSxHQUFFLEtBQUcsR0FBRyxDQUFDLENBQUMsS0FBSSxHQUFHLEdBQUUsS0FBSSxHQUFHLEdBQUUsT0FBRyxLQUFFLEdBQUUsS0FBRyxHQUFHLEtBQUksS0FBRSxHQUFFLEtBQUcsR0FBRyxLQUFJLEtBQUUsR0FBRSxLQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsT0FBRyxLQUFFLEdBQUUsS0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFJLEdBQUcsR0FBRSxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUUsT0FBRyxJQUFFLEdBQUUsS0FBRyxHQUFHLFlBQVksR0FBRSxLQUFHLEdBQUcsQ0FBQyxLQUFJLEdBQUcsR0FBRSxPQUFHLEtBQUUsR0FBRSxLQUFHLFNBQVNMLElBQUVGLElBQUVHLElBQUVDLElBQUU7QUFBQyxpQkFBTSxFQUFDLE1BQUssV0FBVSxTQUFRRixJQUFFLHFCQUFvQkYsSUFBRSxhQUFZRyxJQUFFLE9B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RSxJQUFFQztBQUFFLG1CQUFPTixLQUFFLElBQUcsUUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFHRyxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxNQUFJRSxLQUFFLEdBQUcsT0FBSyxLQUFHLFFBQU0sRUFBRSxXQUFXLEVBQUUsS0FBR0MsS0FBRUMsSUFBRSxTQUFPRCxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEtBQUcsR0FBRyxNQUFJLEtBQUcsS0FBR04sSUFBRUEsS0FBRSxHQUFHSyxFQUFDLE1BQUksS0FBR0wsSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsSUFBR0E7QUFBQSxVQUFDLEVBQUUsR0FBRVEsT0FBSSxJQUFFSCxLQUFFRyxNQUFHLEtBQUdILElBQUVBLEtBQUUsSUFBR0EsT0FBSSxNQUFJQSxLQUFFLE9BQU1DLEtBQUUsSUFBR0UsS0FBRSxHQUFHLEdBQUVDLEtBQUUsV0FBVTtBQUFDLGdCQUFJUCxJQUFFRjtBQUFFLG1CQUFPRSxLQUFFLEtBQUlGLEtBQUUsR0FBRyxPQUFLLEtBQUcsR0FBRyxNQUFJLEtBQUcsS0FBR0UsSUFBRUEsS0FBRSxHQUFHRixFQUFDLE1BQUksS0FBR0UsSUFBRUEsS0FBRSxJQUFHQTtBQUFBLFVBQUMsRUFBRSxHQUFFTyxPQUFJLElBQUVILEtBQUVHLE1BQUcsS0FBR0gsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlBLEtBQUUsT0FBTUUsS0FBRSxHQUFHLEdBQUVDLEtBQUUsQ0FBQyxHQUFFQyxLQUFFLEtBQUlDLEtBQUUsR0FBRyxPQUFLLEtBQUcsR0FBRyxHQUFFRCxLQUFFQyxPQUFJLEtBQUdELElBQUVBLEtBQUUsSUFBR0EsT0FBSSxFQUFFLFFBQUtBLE9BQUksSUFBRyxDQUFBRCxHQUFFLEtBQUtDLEVBQUMsR0FBRUEsS0FBRSxLQUFJQyxLQUFFLEdBQUcsT0FBSyxLQUFHLEdBQUcsR0FBRUQsS0FBRUMsT0FBSSxLQUFHRCxJQUFFQSxLQUFFO0FBQUEsY0FBUSxDQUFBRCxLQUFFO0FBQUUsaUJBQU9BLE9BQUksS0FBRyxLQUFHVCxJQUFFQSxLQUFFLEdBQUdHLElBQUVFLElBQUVDLElBQUVHLEVBQUMsTUFBSSxLQUFHVCxJQUFFQSxLQUFFLElBQUdBO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJRSxJQUFFRjtBQUFFLGVBQUlFLEtBQUUsQ0FBQyxHQUFFRixLQUFFLEdBQUcsR0FBRUEsT0FBSSxJQUFHLENBQUFFLEdBQUUsS0FBS0YsRUFBQyxHQUFFQSxLQUFFLEdBQUc7QUFBRSxpQkFBT0U7QUFBQSxRQUFDO0FBQUMsaUJBQVMsS0FBSTtBQUFDLGNBQUlGLElBQUVHLElBQUVFLElBQUVDLElBQUVFLElBQUVPLElBQUVDLElBQUVDO0FBQUUsaUJBQU9qQixLQUFFLElBQUcsR0FBRyxHQUFFLEVBQUUsT0FBTyxJQUFHLENBQUMsTUFBSSxLQUFHRyxLQUFFLEdBQUUsTUFBSSxNQUFJQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEtBQUcsR0FBRyxHQUFFRSxLQUFFLFdBQVU7QUFBQyxnQkFBSUwsSUFBRUcsSUFBRUUsSUFBRUMsSUFBRUU7QUFBRSxvQkFBT1IsS0FBRSxHQUFHLE9BQUssTUFBSUEsS0FBRSxHQUFHLE9BQUssTUFBSUEsS0FBRSxJQUFHRyxLQUFFLFdBQVU7QUFBQyxrQkFBSUQsSUFBRUY7QUFBRSxxQkFBT0UsS0FBRSxLQUFJRixLQUFFLEdBQUcsT0FBSyxNQUFJLEtBQUdFLElBQUVGLEtBQUUsR0FBR0EsRUFBQyxJQUFHRSxLQUFFRjtBQUFBLFlBQUMsRUFBRSxHQUFFRyxPQUFJLEtBQUdFLEtBQUUsSUFBRyxHQUFHLEdBQUUsT0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFHQyxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxLQUFHLEdBQUcsSUFBR0UsS0FBRSxHQUFHLE9BQUssTUFBSUEsS0FBRSxHQUFHLElBQUdBLE9BQUksSUFBRUgsS0FBRUcsTUFBRyxLQUFHSCxJQUFFQSxLQUFFLE9BQUssS0FBR0EsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlBLEtBQUUsT0FBTSxLQUFHTCxJQUFFQSxLQUFFLEdBQUdHLElBQUVFLEVBQUMsTUFBSSxLQUFHTCxJQUFFQSxLQUFFLEtBQUlBO0FBQUEsVUFBQyxFQUFFLEdBQUVLLE9BQUksS0FBR0MsS0FBRSxHQUFHLEdBQUVFLEtBQUUsV0FBVTtBQUFDLGdCQUFJUixJQUFFRyxJQUFFRTtBQUFFLG1CQUFPTCxLQUFFLElBQUcsRUFBRSxPQUFPLElBQUcsQ0FBQyxNQUFJLEtBQUdHLEtBQUUsR0FBRSxNQUFJLE1BQUlBLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksS0FBRyxHQUFHLElBQUdFLEtBQUUsR0FBRyxPQUFLLElBQUVMLEtBQUVLLE1BQUcsS0FBR0wsSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsSUFBR0E7QUFBQSxVQUFDLEVBQUUsR0FBRVEsT0FBSSxLQUFHTyxLQUFFLElBQUdDLEtBQUUsR0FBRyxHQUFFLE9BQUssRUFBRSxXQUFXLEVBQUUsS0FBR0MsS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksSUFBRUYsS0FBRUMsS0FBRSxDQUFDQSxJQUFFQyxFQUFDLEtBQUcsS0FBR0YsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlBLEtBQUUsT0FBTSxLQUFHZixJQUFFQSxLQUFFLEdBQUdLLElBQUVHLEVBQUMsTUFBSSxLQUFHUixJQUFFQSxLQUFFLE9BQUssS0FBR0EsSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsSUFBR0EsT0FBSSxNQUFJQSxLQUFFLElBQUcsR0FBRyxHQUFFLEVBQUUsT0FBTyxJQUFHLENBQUMsTUFBSSxLQUFHRyxLQUFFLEdBQUUsTUFBSSxNQUFJQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEtBQUcsR0FBRyxJQUFHRSxLQUFFLEdBQUcsT0FBSyxLQUFHQyxLQUFFLElBQUdFLEtBQUUsR0FBRyxHQUFFLE9BQUssRUFBRSxXQUFXLEVBQUUsS0FBR08sS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksSUFBRVQsS0FBRUUsS0FBRSxDQUFDQSxJQUFFTyxFQUFDLEtBQUcsS0FBR1QsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlBLEtBQUUsT0FBTSxLQUFHTixJQUFFQSxLQUFFLEdBQUdLLEVBQUMsTUFBSSxLQUFHTCxJQUFFQSxLQUFFLE9BQUssS0FBR0EsSUFBRUEsS0FBRSxLQUFJQTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxLQUFJO0FBQUMsY0FBSUEsSUFBRUcsSUFBRUUsSUFBRUM7QUFBRSxpQkFBT04sS0FBRSxJQUFHLE9BQUssRUFBRSxXQUFXLEVBQUUsS0FBR0csS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksS0FBRyxHQUFHLEdBQUUsRUFBRSxPQUFPLElBQUcsQ0FBQyxNQUFJLEtBQUdFLEtBQUUsR0FBRSxNQUFJLE1BQUlBLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksS0FBRyxHQUFHLElBQUdDLEtBQUUsR0FBRyxPQUFLLEtBQUcsS0FBR04sSUFBRUEsS0FBRSxHQUFHTSxFQUFDLE1BQUksS0FBR04sSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsT0FBSyxLQUFHQSxJQUFFQSxLQUFFLElBQUdBO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJQSxJQUFFRyxJQUFFRSxJQUFFQyxJQUFFRTtBQUFFLGlCQUFPUixLQUFFLElBQUcsUUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFHRyxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxLQUFHLEdBQUcsR0FBRSxRQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUdFLEtBQUVFLElBQUUsU0FBT0YsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxLQUFHLEtBQUdMLElBQUVBLEtBQUUsR0FBRyxNQUFJLEtBQUdBLElBQUVBLEtBQUUsT0FBSyxLQUFHQSxJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUEsS0FBRSxJQUFHLFFBQU0sRUFBRSxXQUFXLEVBQUUsS0FBR0csS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksS0FBRyxHQUFHLEdBQUVFLEtBQUUsV0FBVTtBQUFDLGdCQUFJTCxJQUFFRyxJQUFFRSxJQUFFQyxJQUFFRSxJQUFFQztBQUFFLGlCQUFJVCxLQUFFLElBQUdHLEtBQUUsQ0FBQyxHQUFFRSxLQUFFLEdBQUcsR0FBRUEsT0FBSSxJQUFHLENBQUFGLEdBQUUsS0FBS0UsRUFBQyxHQUFFQSxLQUFFLElBQUdDLEtBQUUsSUFBR0UsS0FBRSxHQUFHLEdBQUUsT0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFHQyxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxJQUFFSCxLQUFFRSxLQUFFLENBQUNBLElBQUVDLElBQUUsR0FBRyxDQUFDLEtBQUcsS0FBR0gsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlBLEtBQUUsR0FBRyxPQUFLLEtBQUcsS0FBR0QsSUFBRUEsS0FBRSxLQUFHQSxLQUFFQztBQUFFLG1CQUFPSCxHQUFFLFNBQU8sS0FBRyxLQUFHSCxJQUFFQSxLQUFFLEtBQUdBLEtBQUVHLElBQUVIO0FBQUEsVUFBQyxFQUFFLEdBQUVLLE9BQUksS0FBRyxHQUFHLEdBQUVDLEtBQUUsSUFBRyxPQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdFLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLElBQUVGLEtBQUVFLEtBQUUsQ0FBQ0EsSUFBRSxHQUFHLENBQUMsS0FBRyxLQUFHRixJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUEsS0FBRSxPQUFNLFFBQU0sRUFBRSxXQUFXLEVBQUUsS0FBR0UsS0FBRUQsSUFBRSxTQUFPQyxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLElBQUVSLEtBQUVLLE1BQUcsS0FBR0wsSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsT0FBSyxLQUFHQSxJQUFFQSxLQUFFLEtBQUlBO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJQSxJQUFFRyxJQUFFRSxJQUFFQztBQUFFLGlCQUFPTixLQUFFLElBQUdHLEtBQUUsV0FBVTtBQUFDLGdCQUFJRCxJQUFFRjtBQUFFLG9CQUFPRSxLQUFFLEdBQUcsT0FBSyxNQUFJQSxLQUFFLEtBQUlGLEtBQUUsR0FBRyxPQUFLLE1BQUksS0FBR0UsSUFBRUYsS0FBRSxHQUFHQSxFQUFDLElBQUdFLEtBQUVGLEtBQUdFO0FBQUEsVUFBQyxFQUFFLEdBQUVDLE9BQUksS0FBRyxHQUFHLEdBQUUsRUFBRSxPQUFPLElBQUcsQ0FBQyxNQUFJLEtBQUdFLEtBQUUsR0FBRSxNQUFJLE1BQUlBLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksS0FBRyxHQUFHLElBQUdDLEtBQUUsR0FBRyxPQUFLLEtBQUcsS0FBR04sSUFBRUEsS0FBRSxHQUFHRyxJQUFFRyxFQUFDLE1BQUksS0FBR04sSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsT0FBSyxLQUFHQSxJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUEsS0FBRSxLQUFJRyxLQUFFLEdBQUcsT0FBSyxNQUFJLEtBQUdILElBQUVHLEtBQUUsR0FBR0EsRUFBQyxJQUFHSCxLQUFFRyxLQUFHSDtBQUFBLFFBQUM7QUFBQyxpQkFBUyxLQUFJO0FBQUMsY0FBSUUsSUFBRUY7QUFBRSxpQkFBT0UsS0FBRSxLQUFJRixLQUFFLEdBQUcsT0FBSyxNQUFJLEtBQUdFLElBQUVGLEtBQUUsR0FBR0EsRUFBQyxJQUFHQTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxLQUFJO0FBQUMsY0FBSUUsSUFBRUY7QUFBRSxpQkFBT0UsS0FBRSxJQUFHRixLQUFFLFdBQVU7QUFBQyxnQkFBSUUsSUFBRUY7QUFBRSxtQkFBT0UsS0FBRSxLQUFJRixLQUFFLEdBQUcsT0FBSyxNQUFJLEtBQUdFLElBQUVGLEtBQUUsR0FBR0EsRUFBQyxJQUFHRSxLQUFFRjtBQUFBLFVBQUMsRUFBRSxHQUFFQSxPQUFJLE1BQUksS0FBR0UsSUFBRUYsS0FBRSxHQUFHQSxFQUFDLElBQUdBO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJQSxJQUFFRyxJQUFFRSxJQUFFQyxJQUFFRTtBQUFFLGlCQUFPUixLQUFFLEtBQUlHLEtBQUUsR0FBRyxPQUFLLEtBQUcsR0FBRyxHQUFFRSxLQUFFLEtBQUlDLEtBQUUsR0FBRyxPQUFLLEtBQUcsR0FBRyxHQUFFRCxLQUFFQyxPQUFJLEtBQUdELElBQUVBLEtBQUUsSUFBR0EsT0FBSSxNQUFJQSxLQUFFLE9BQU0sT0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFHQyxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxLQUFHLEdBQUcsSUFBR0UsS0FBRSxHQUFHLE9BQUssS0FBRyxHQUFHLE1BQUksS0FBRyxLQUFHUixJQUFFQSxLQUFFLEdBQUdHLElBQUVFLElBQUVHLEVBQUMsTUFBSSxLQUFHUixJQUFFQSxLQUFFLE9BQUssS0FBR0EsSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsSUFBR0E7QUFBQSxRQUFDO0FBQUMsaUJBQVMsS0FBSTtBQUFDLGNBQUlBLElBQUVHLElBQUVFLElBQUVDLElBQUVFLElBQUVDO0FBQUUsY0FBR1QsS0FBRSxLQUFJRyxLQUFFLEdBQUcsT0FBSyxHQUFFO0FBQUMsaUJBQUlFLEtBQUUsQ0FBQyxHQUFFQyxLQUFFLElBQUcsR0FBRyxHQUFFLE9BQUssRUFBRSxXQUFXLEVBQUUsS0FBR0UsS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksS0FBRyxHQUFHLElBQUdDLEtBQUUsR0FBRyxPQUFLLElBQUVILEtBQUVHLE1BQUcsS0FBR0gsSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsSUFBR0EsT0FBSSxJQUFHLENBQUFELEdBQUUsS0FBS0MsRUFBQyxHQUFFQSxLQUFFLElBQUcsR0FBRyxHQUFFLE9BQUssRUFBRSxXQUFXLEVBQUUsS0FBR0UsS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksS0FBRyxHQUFHLElBQUdDLEtBQUUsR0FBRyxPQUFLLElBQUVILEtBQUVHLE1BQUcsS0FBR0gsSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUU7QUFBRyxpQkFBR04sSUFBRUEsS0FBRSxHQUFHRyxJQUFFRSxFQUFDO0FBQUEsVUFBQyxNQUFNLE1BQUdMLElBQUVBLEtBQUU7QUFBRSxpQkFBT0E7QUFBQSxRQUFDO0FBQUMsaUJBQVMsS0FBSTtBQUFDLGNBQUlFLElBQUVGLElBQUVHLElBQUVFO0FBQUUsaUJBQU9ILEtBQUUsSUFBR0YsS0FBRSxXQUFVO0FBQUMsZ0JBQUlFLElBQUVGLElBQUVHLElBQUVFLElBQUVDO0FBQUUsZ0JBQUdKLEtBQUUsS0FBSUYsS0FBRSxHQUFHLE9BQUssR0FBRTtBQUFDLG1CQUFJRyxLQUFFLENBQUMsR0FBRUUsS0FBRSxJQUFHLEdBQUcsSUFBR0MsS0FBRSxHQUFHLE9BQUssSUFBRUQsS0FBRUMsTUFBRyxLQUFHRCxJQUFFQSxLQUFFLElBQUdBLE9BQUksSUFBRyxDQUFBRixHQUFFLEtBQUtFLEVBQUMsR0FBRUEsS0FBRSxJQUFHLEdBQUcsSUFBR0MsS0FBRSxHQUFHLE9BQUssSUFBRUQsS0FBRUMsTUFBRyxLQUFHRCxJQUFFQSxLQUFFO0FBQUcsbUJBQUdILElBQUVBLEtBQUUsR0FBR0YsSUFBRUcsRUFBQztBQUFBLFlBQUMsTUFBTSxNQUFHRCxJQUFFQSxLQUFFO0FBQUUsbUJBQU9BO0FBQUEsVUFBQyxFQUFFLEdBQUVGLE9BQUksS0FBR0csS0FBRSxJQUFHLEdBQUcsSUFBR0UsS0FBRSxHQUFHLE9BQUssSUFBRUYsS0FBRUUsTUFBRyxLQUFHRixJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUEsS0FBRSxPQUFNLEtBQUdELElBQUVBLEtBQUUsR0FBR0YsSUFBRUcsRUFBQyxNQUFJLEtBQUdELElBQUVBLEtBQUUsSUFBR0E7QUFBQSxRQUFDO0FBQUMsaUJBQVMsS0FBSTtBQUFDLGNBQUlGLElBQUVHLElBQUVFLElBQUVDO0FBQUUsaUJBQU9OLEtBQUUsSUFBR0csS0FBRSxXQUFVO0FBQUMsZ0JBQUlILElBQUVHO0FBQUUsbUJBQU9ILEtBQUUsSUFBRyxPQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdHLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLE1BQUksS0FBR0gsSUFBRUcsS0FBRSxHQUFHLElBQUdILEtBQUVHO0FBQUEsVUFBQyxFQUFFLEdBQUVBLE9BQUksTUFBSUUsS0FBRSxHQUFHLE9BQUssTUFBSUEsS0FBRSxRQUFPQyxLQUFFLEdBQUcsT0FBSyxLQUFHLEtBQUdOLElBQUVBLEtBQUUsR0FBR0csSUFBRUUsSUFBRUMsRUFBQyxNQUFJLEtBQUdOLElBQUVBLEtBQUUsT0FBSyxLQUFHQSxJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUEsS0FBRSxLQUFJRyxLQUFFLEdBQUcsT0FBSyxNQUFJRSxLQUFFLEdBQUcsT0FBSyxLQUFHLEtBQUdMLElBQUVBLEtBQUUsR0FBR0csSUFBRUUsRUFBQyxNQUFJLEtBQUdMLElBQUVBLEtBQUUsSUFBR0EsT0FBSSxNQUFJQSxLQUFFLEdBQUcsS0FBSUE7QUFBQSxRQUFDO0FBQUMsaUJBQVMsS0FBSTtBQUFDLGNBQUlBLElBQUVHLElBQUVFO0FBQUUsaUJBQU9MLEtBQUUsS0FBSUcsS0FBRSxHQUFHLE9BQUssS0FBRyxHQUFHLEdBQUUsT0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFHRSxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxLQUFHLEdBQUcsR0FBRSxLQUFHTCxJQUFFQSxLQUFFLEdBQUdHLEVBQUMsTUFBSSxLQUFHSCxJQUFFQSxLQUFFLE9BQUssS0FBR0EsSUFBRUEsS0FBRSxJQUFHQTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxLQUFJO0FBQUMsY0FBSUEsSUFBRUcsSUFBRUU7QUFBRSxpQkFBT0wsS0FBRSxJQUFHRyxLQUFFLFdBQVU7QUFBQyxnQkFBSUg7QUFBRSxtQkFBT0EsS0FBRSxFQUFFLE9BQU8sRUFBRSxHQUFFLEVBQUUsS0FBS0EsRUFBQyxJQUFFLFFBQU1BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBO0FBQUEsVUFBQyxFQUFFLEdBQUVHLE9BQUksS0FBRyxHQUFHLElBQUdFLEtBQUUsR0FBRyxPQUFLLEtBQUcsS0FBR0wsSUFBRUEsS0FBRSxHQUFHRyxJQUFFRSxFQUFDLE1BQUksS0FBR0wsSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsSUFBR0EsT0FBSSxNQUFJQSxLQUFFLEdBQUcsSUFBR0E7QUFBQSxRQUFDO0FBQUMsaUJBQVMsS0FBSTtBQUFDLGNBQUlBLElBQUVHLElBQUVFO0FBQUUsaUJBQU9MLEtBQUUsS0FBSUcsS0FBRSxHQUFHLE9BQUssS0FBRyxHQUFHLEdBQUVFLEtBQUUsV0FBVTtBQUFDLGdCQUFJTDtBQUFFLG1CQUFPQSxLQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsRUFBRSxLQUFLQSxFQUFDLElBQUUsUUFBTUEsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0E7QUFBQSxVQUFDLEVBQUUsR0FBRUssT0FBSSxLQUFHLEtBQUdMLElBQUVBLEtBQUUsR0FBR0csSUFBRUUsRUFBQyxNQUFJLEtBQUdMLElBQUVBLEtBQUUsT0FBSyxLQUFHQSxJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUEsS0FBRSxXQUFVO0FBQUMsZ0JBQUlBLElBQUVHLElBQUVFLElBQUVDLElBQUVFLElBQUVDLElBQUVDO0FBQUUsbUJBQU9WLEtBQUUsS0FBSUcsS0FBRSxHQUFHLE9BQUssS0FBRyxHQUFHLEdBQUUsUUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFHRSxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxLQUFHLEdBQUcsR0FBRUMsS0FBRSxXQUFVO0FBQUMsa0JBQUlOLElBQUVHLElBQUVFLElBQUVDO0FBQUUscUJBQU9OLEtBQUUsS0FBSUcsS0FBRSxHQUFHLE9BQUssTUFBSUEsS0FBRSxPQUFNLEdBQUcsR0FBRSxFQUFFLE9BQU8sSUFBRyxDQUFDLE1BQUksS0FBR0UsS0FBRSxHQUFFLE1BQUksTUFBSUEsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxLQUFHLEdBQUcsSUFBR0MsS0FBRSxHQUFHLE9BQUssTUFBSUEsS0FBRSxPQUFNLEtBQUdOLElBQUVBLEtBQUUsR0FBR0csSUFBRUcsRUFBQyxNQUFJLEtBQUdOLElBQUVBLEtBQUUsSUFBR0EsT0FBSSxNQUFJQSxLQUFFLEtBQUlHLEtBQUUsR0FBRyxPQUFLLE1BQUksS0FBR0gsSUFBRUcsS0FBRSxHQUFHQSxFQUFDLElBQUdILEtBQUVHLEtBQUdIO0FBQUEsWUFBQyxFQUFFLEdBQUVNLE9BQUksS0FBRyxHQUFHLEdBQUVFLEtBQUUsSUFBRyxPQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdDLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEtBQUcsR0FBRyxJQUFHQyxLQUFFLEdBQUcsT0FBSyxLQUFHLEdBQUcsR0FBRUYsS0FBRUUsT0FBSSxLQUFHRixJQUFFQSxLQUFFLE9BQUssS0FBR0EsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlBLEtBQUUsT0FBTSxRQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUdDLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEtBQUcsS0FBR1QsSUFBRUEsS0FBRSxHQUFHRyxJQUFFRyxJQUFFRSxFQUFDLE1BQUksS0FBR1IsSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsT0FBSyxLQUFHQSxJQUFFQSxLQUFFLE9BQUssS0FBR0EsSUFBRUEsS0FBRSxJQUFHQTtBQUFBLFVBQUMsRUFBRSxHQUFFQSxPQUFJLE1BQUlBLEtBQUUsR0FBRyxLQUFJQTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxLQUFJO0FBQUMsY0FBSUEsSUFBRUc7QUFBRSxpQkFBT0gsS0FBRSxJQUFHRyxLQUFFLFdBQVU7QUFBQyxnQkFBSUgsSUFBRUcsSUFBRUUsSUFBRUM7QUFBRSxnQkFBR04sS0FBRSxJQUFHRyxLQUFFLElBQUdFLEtBQUUsQ0FBQyxJQUFHQyxLQUFFLEdBQUcsT0FBSyxFQUFFLFFBQUtBLE9BQUksSUFBRyxDQUFBRCxHQUFFLEtBQUtDLEVBQUMsR0FBRUEsS0FBRSxHQUFHO0FBQUEsZ0JBQU8sQ0FBQUQsS0FBRTtBQUFFLG9CQUFPRixLQUFFRSxPQUFJLElBQUUsRUFBRSxVQUFVRixJQUFFLEVBQUUsSUFBRUUsUUFBSyxNQUFJLEtBQUdMLElBQUVHLEtBQUUsR0FBR0EsRUFBQyxJQUFHSCxLQUFFRztBQUFBLFVBQUMsRUFBRSxHQUFFQSxPQUFJLE1BQUksS0FBR0gsSUFBRUcsS0FBRSxHQUFHQSxFQUFDLEtBQUlILEtBQUVHLFFBQUssTUFBSUgsS0FBRSxLQUFJRyxLQUFFLEdBQUcsT0FBSyxNQUFJLEtBQUdILElBQUVHLEtBQUUsR0FBR0EsRUFBQyxLQUFJSCxLQUFFRyxRQUFLLE1BQUlILEtBQUUsS0FBSUcsS0FBRSxHQUFHLE9BQUssTUFBSSxLQUFHSCxJQUFFRyxLQUFFLEdBQUdBLEVBQUMsSUFBR0gsS0FBRUcsTUFBSUg7QUFBQSxRQUFDO0FBQUMsaUJBQVMsS0FBSTtBQUFDLGNBQUlBLElBQUVHLElBQUVFLElBQUVDO0FBQUUsaUJBQU9OLEtBQUUsV0FBVTtBQUFDLGdCQUFJQSxJQUFFRyxJQUFFRTtBQUFFLG1CQUFPLE1BQUtMLEtBQUUsS0FBSUcsS0FBRSxHQUFHLE9BQUssS0FBRyxRQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUdFLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLE1BQUlBLEtBQUUsT0FBTSxLQUFHTCxJQUFFQSxLQUFFLEdBQUdHLElBQUVFLEVBQUMsTUFBSSxLQUFHTCxJQUFFQSxLQUFFLElBQUcsTUFBS0EsT0FBSSxNQUFJRyxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHSDtBQUFBLFVBQUMsRUFBRSxHQUFFQSxPQUFJLE1BQUlBLEtBQUUsV0FBVTtBQUFDLGdCQUFJQSxJQUFFRyxJQUFFRSxJQUFFQyxJQUFFRSxJQUFFQztBQUFFLGdCQUFHLE1BQUtULEtBQUUsSUFBRyxPQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdHLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEdBQUU7QUFBQyxtQkFBSSxPQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdFLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLE1BQUlBLEtBQUUsT0FBTUMsS0FBRSxDQUFDLElBQUdFLEtBQUUsR0FBRyxPQUFLLE1BQUlBLEtBQUUsR0FBRyxJQUFHQSxPQUFJLElBQUcsQ0FBQUYsR0FBRSxLQUFLRSxFQUFDLElBQUdBLEtBQUUsR0FBRyxPQUFLLE1BQUlBLEtBQUUsR0FBRztBQUFHLHFCQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdBLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEtBQUcsUUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFHQyxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxNQUFJQSxLQUFFLE9BQU0sS0FBR1QsSUFBRUEsS0FBRSxHQUFHSyxJQUFFQyxJQUFFRyxFQUFDLE1BQUksS0FBR1QsSUFBRUEsS0FBRTtBQUFBLFlBQUUsTUFBTSxNQUFHQSxJQUFFQSxLQUFFO0FBQUUsbUJBQU8sTUFBS0EsT0FBSSxNQUFJRyxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHSDtBQUFBLFVBQUMsRUFBRSxHQUFFQSxPQUFJLE1BQUlBLEtBQUUsV0FBVTtBQUFDLGdCQUFJQSxJQUFFRztBQUFFLG1CQUFPSCxLQUFFLElBQUcsT0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFHRyxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxNQUFJLEtBQUdILElBQUVHLEtBQUUsR0FBRyxJQUFHSCxLQUFFRztBQUFBLFVBQUMsRUFBRSxHQUFFSCxPQUFJLE1BQUlBLEtBQUUsV0FBVTtBQUFDLGdCQUFJQSxJQUFFRyxJQUFFRSxJQUFFQyxJQUFFRSxJQUFFQyxJQUFFQztBQUFFLG1CQUFPVixLQUFFLEtBQUlHLEtBQUUsR0FBRyxPQUFLLEtBQUcsT0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFHRSxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxNQUFJQyxLQUFFLEdBQUcsT0FBSyxLQUFHLEtBQUdOLElBQUVBLEtBQUUsR0FBR0csSUFBRUcsRUFBQyxNQUFJLEtBQUdOLElBQUVBLEtBQUUsT0FBSyxLQUFHQSxJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUEsS0FBRSxLQUFJRyxLQUFFLEdBQUcsT0FBSyxLQUFHRSxLQUFFLElBQUcsTUFBS0MsS0FBRSxJQUFHRSxLQUFFLEdBQUcsR0FBRUMsS0FBRSxLQUFJQyxLQUFFLEdBQUcsT0FBSyxJQUFFRCxLQUFFQyxLQUFFLENBQUNBLElBQUUsR0FBRyxDQUFDLEtBQUcsS0FBR0QsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlBLEtBQUUsT0FBTSxPQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdDLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLElBQUVKLEtBQUVFLEtBQUUsQ0FBQ0EsSUFBRUMsSUFBRUMsRUFBQyxLQUFHLEtBQUdKLElBQUVBLEtBQUUsSUFBRyxNQUFLQSxPQUFJLElBQUVELEtBQUUsVUFBUSxLQUFHQSxJQUFFQSxLQUFFLElBQUdBLE9BQUksS0FBRyxLQUFHTCxJQUFFQSxLQUFFLEdBQUdHLEVBQUMsTUFBSSxLQUFHSCxJQUFFQSxLQUFFLE9BQUssS0FBR0EsSUFBRUEsS0FBRSxLQUFJQTtBQUFBLFVBQUMsRUFBRSxHQUFFQSxPQUFJLE1BQUlBLEtBQUUsV0FBVTtBQUFDLGdCQUFJQSxJQUFFRyxJQUFFRTtBQUFFLG1CQUFPTCxLQUFFLElBQUdHLEtBQUUsV0FBVTtBQUFDLGtCQUFJSDtBQUFFLHFCQUFPQSxLQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsRUFBRSxLQUFLQSxFQUFDLElBQUUsUUFBTUEsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0E7QUFBQSxZQUFDLEVBQUUsR0FBRUcsT0FBSSxLQUFHLEdBQUcsSUFBR0UsS0FBRSxHQUFHLE9BQUssS0FBRyxLQUFHTCxJQUFFQSxLQUFFLEdBQUdHLElBQUVFLEVBQUMsTUFBSSxLQUFHTCxJQUFFQSxLQUFFLE9BQUssS0FBR0EsSUFBRUEsS0FBRSxJQUFHQTtBQUFBLFVBQUMsRUFBRSxHQUFFQSxPQUFJLE1BQUlBLEtBQUUsSUFBRyxPQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdHLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEtBQUcsR0FBRyxJQUFHRSxLQUFFLEdBQUcsT0FBSyxLQUFHLEdBQUcsR0FBRSxPQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdDLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEtBQUcsS0FBR04sSUFBRUEsS0FBRSxHQUFHSyxFQUFDLE1BQUksS0FBR0wsSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsT0FBSyxLQUFHQSxJQUFFQSxLQUFFLFNBQVFBO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJQTtBQUFFLGlCQUFPLEVBQUUsU0FBTyxNQUFJQSxLQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0E7QUFBQSxRQUFDO0FBQUMsaUJBQVMsS0FBSTtBQUFDLGNBQUlBO0FBQUUsaUJBQU8sTUFBS0EsS0FBRSxFQUFFLE9BQU8sRUFBRSxHQUFFLEVBQUUsS0FBS0EsRUFBQyxJQUFFLFFBQU1BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUcsTUFBS0EsT0FBSSxLQUFHLE1BQUksTUFBSSxHQUFHLEVBQUUsR0FBRUE7QUFBQSxRQUFDO0FBQUMsaUJBQVMsS0FBSTtBQUFDLGNBQUlBO0FBQUUsaUJBQU9BLEtBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRSxFQUFFLEtBQUtBLEVBQUMsSUFBRSxRQUFNQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxLQUFJO0FBQUMsY0FBSUE7QUFBRSxpQkFBTyxNQUFLLE9BQUssRUFBRSxXQUFXLEVBQUUsS0FBR0EsS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksTUFBSSxFQUFFLE9BQU8sSUFBRyxDQUFDLE1BQUksS0FBR0EsS0FBRSxHQUFFLE1BQUksTUFBSUEsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxNQUFJQSxLQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsRUFBRSxLQUFLQSxFQUFDLElBQUUsUUFBTUEsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsTUFBSyxNQUFLQSxPQUFJLEtBQUcsTUFBSSxNQUFJLEdBQUcsRUFBRSxHQUFFQTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxLQUFJO0FBQUMsY0FBSUE7QUFBRSxpQkFBTyxPQUFNQSxLQUFFLFdBQVU7QUFBQyxnQkFBSUEsSUFBRUcsSUFBRUUsSUFBRUMsSUFBRUUsSUFBRUM7QUFBRSxnQkFBR1QsS0FBRSxJQUFHLEVBQUUsT0FBTyxJQUFHLENBQUMsTUFBSSxLQUFHRyxLQUFFLEdBQUUsTUFBSSxNQUFJQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEdBQUU7QUFBQyxtQkFBSUUsS0FBRSxDQUFDLEdBQUVDLEtBQUUsSUFBR0UsS0FBRSxJQUFHLE1BQUssRUFBRSxPQUFPLElBQUcsQ0FBQyxNQUFJLEtBQUdDLEtBQUUsR0FBRSxNQUFJLE1BQUlBLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUcsTUFBS0EsT0FBSSxJQUFFRCxLQUFFLFVBQVEsS0FBR0EsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlDLEtBQUUsR0FBRyxPQUFLLElBQUVILEtBQUVFLEtBQUUsQ0FBQ0EsSUFBRUMsRUFBQyxLQUFHLEtBQUdILElBQUVBLEtBQUUsSUFBR0EsT0FBSSxJQUFHLENBQUFELEdBQUUsS0FBS0MsRUFBQyxHQUFFQSxLQUFFLElBQUdFLEtBQUUsSUFBRyxNQUFLLEVBQUUsT0FBTyxJQUFHLENBQUMsTUFBSSxLQUFHQyxLQUFFLEdBQUUsTUFBSSxNQUFJQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHLE1BQUtBLE9BQUksSUFBRUQsS0FBRSxVQUFRLEtBQUdBLElBQUVBLEtBQUUsSUFBR0EsT0FBSSxNQUFJQyxLQUFFLEdBQUcsT0FBSyxJQUFFSCxLQUFFRSxLQUFFLENBQUNBLElBQUVDLEVBQUMsS0FBRyxLQUFHSCxJQUFFQSxLQUFFO0FBQUcsZ0JBQUUsT0FBTyxJQUFHLENBQUMsTUFBSSxLQUFHQSxLQUFFLEdBQUUsTUFBSSxNQUFJQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLElBQUVOLEtBQUVHLEtBQUUsQ0FBQ0EsSUFBRUUsSUFBRUMsRUFBQyxLQUFHLEtBQUdOLElBQUVBLEtBQUU7QUFBQSxZQUFFLE1BQU0sTUFBR0EsSUFBRUEsS0FBRTtBQUFFLG1CQUFPQTtBQUFBLFVBQUMsRUFBRSxPQUFLLE1BQUlBLEtBQUUsR0FBRyxJQUFHLE1BQUtBLE9BQUksS0FBRyxNQUFJLE1BQUksR0FBRyxFQUFFLEdBQUVBO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJQSxJQUFFRyxJQUFFRSxJQUFFQyxJQUFFRSxJQUFFQztBQUFFLGNBQUdULEtBQUUsSUFBRyxFQUFFLE9BQU8sSUFBRyxDQUFDLE1BQUksS0FBR0csS0FBRSxHQUFFLE1BQUksTUFBSUEsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxHQUFFO0FBQUMsaUJBQUlFLEtBQUUsQ0FBQyxHQUFFQyxLQUFFLElBQUdFLEtBQUUsSUFBRyxNQUFLLEVBQUUsT0FBTyxJQUFHLENBQUMsTUFBSSxLQUFHQyxLQUFFLEdBQUUsTUFBSSxNQUFJQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLE1BQUlBLEtBQUUsR0FBRyxJQUFHLE1BQUtBLE9BQUksSUFBRUQsS0FBRSxVQUFRLEtBQUdBLElBQUVBLEtBQUUsSUFBR0EsT0FBSSxNQUFJQyxLQUFFLEdBQUcsT0FBSyxJQUFFSCxLQUFFRSxLQUFFLENBQUNBLElBQUVDLEVBQUMsS0FBRyxLQUFHSCxJQUFFQSxLQUFFLElBQUdBLE9BQUksSUFBRyxDQUFBRCxHQUFFLEtBQUtDLEVBQUMsR0FBRUEsS0FBRSxJQUFHRSxLQUFFLElBQUcsTUFBSyxFQUFFLE9BQU8sSUFBRyxDQUFDLE1BQUksS0FBR0MsS0FBRSxHQUFFLE1BQUksTUFBSUEsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxNQUFJQSxLQUFFLEdBQUcsSUFBRyxNQUFLQSxPQUFJLElBQUVELEtBQUUsVUFBUSxLQUFHQSxJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUMsS0FBRSxHQUFHLE9BQUssSUFBRUgsS0FBRUUsS0FBRSxDQUFDQSxJQUFFQyxFQUFDLEtBQUcsS0FBR0gsSUFBRUEsS0FBRTtBQUFHLGNBQUUsT0FBTyxJQUFHLENBQUMsTUFBSSxLQUFHQSxLQUFFLEdBQUUsTUFBSSxNQUFJQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLElBQUVOLEtBQUVHLEtBQUUsQ0FBQ0EsSUFBRUUsSUFBRUMsRUFBQyxLQUFHLEtBQUdOLElBQUVBLEtBQUU7QUFBQSxVQUFFLE1BQU0sTUFBR0EsSUFBRUEsS0FBRTtBQUFFLGlCQUFPQTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxLQUFJO0FBQUMsY0FBSUEsSUFBRUcsSUFBRUUsSUFBRUMsSUFBRUUsSUFBRUM7QUFBRSxjQUFHVCxLQUFFLElBQUcsRUFBRSxPQUFPLElBQUcsQ0FBQyxNQUFJLEtBQUdHLEtBQUUsR0FBRSxNQUFJLE1BQUlBLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksR0FBRTtBQUFDLGlCQUFJRSxLQUFFLENBQUMsR0FBRUMsS0FBRSxJQUFHRSxLQUFFLElBQUcsTUFBS0MsS0FBRSxHQUFHLEdBQUUsTUFBS0EsT0FBSSxJQUFFRCxLQUFFLFVBQVEsS0FBR0EsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlDLEtBQUUsR0FBRyxPQUFLLElBQUVILEtBQUVFLEtBQUUsQ0FBQ0EsSUFBRUMsRUFBQyxLQUFHLEtBQUdILElBQUVBLEtBQUUsSUFBR0EsT0FBSSxJQUFHLENBQUFELEdBQUUsS0FBS0MsRUFBQyxHQUFFQSxLQUFFLElBQUdFLEtBQUUsSUFBRyxNQUFLQyxLQUFFLEdBQUcsR0FBRSxNQUFLQSxPQUFJLElBQUVELEtBQUUsVUFBUSxLQUFHQSxJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUMsS0FBRSxHQUFHLE9BQUssSUFBRUgsS0FBRUUsS0FBRSxDQUFDQSxJQUFFQyxFQUFDLEtBQUcsS0FBR0gsSUFBRUEsS0FBRTtBQUFHLFlBQUFOLEtBQUVHLEtBQUUsQ0FBQ0EsSUFBRUUsRUFBQztBQUFBLFVBQUMsTUFBTSxNQUFHTCxJQUFFQSxLQUFFO0FBQUUsaUJBQU9BO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJRSxJQUFFRixJQUFFRyxJQUFFRTtBQUFFLGNBQUcsTUFBS0gsS0FBRSxLQUFJRixLQUFFLEdBQUcsT0FBSyxHQUFFO0FBQUMsaUJBQUlHLEtBQUUsQ0FBQyxHQUFFRSxLQUFFLEdBQUcsR0FBRUEsT0FBSSxJQUFHLENBQUFGLEdBQUUsS0FBS0UsRUFBQyxHQUFFQSxLQUFFLEdBQUc7QUFBRSxpQkFBR0gsSUFBRUEsS0FBRSxHQUFHRixJQUFFRyxFQUFDO0FBQUEsVUFBQyxNQUFNLE1BQUdELElBQUVBLEtBQUU7QUFBRSxpQkFBTyxNQUFLQSxPQUFJLE1BQUlGLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdFO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJRixJQUFFRyxJQUFFRTtBQUFFLGlCQUFPTCxLQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsRUFBRSxLQUFLQSxFQUFDLElBQUUsUUFBTUEsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxNQUFJQSxLQUFFLElBQUcsT0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFHRyxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxNQUFJRSxLQUFFLEdBQUcsT0FBSyxJQUFFTCxLQUFFSyxNQUFHLEtBQUdMLElBQUVBLEtBQUUsS0FBSUE7QUFBQSxRQUFDO0FBQUMsaUJBQVMsS0FBSTtBQUFDLGNBQUlBO0FBQUUsa0JBQU9BLEtBQUUsR0FBRyxPQUFLLE1BQUlBLEtBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRSxFQUFFLEtBQUtBLEVBQUMsSUFBRSxRQUFNQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxLQUFJQTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxLQUFJO0FBQUMsY0FBSUEsSUFBRUcsSUFBRUUsSUFBRUM7QUFBRSxjQUFHLE1BQUtOLEtBQUUsSUFBRyxPQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdHLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEdBQUU7QUFBQyxpQkFBSUUsS0FBRSxDQUFDLEdBQUVDLEtBQUUsR0FBRyxHQUFFQSxPQUFJLElBQUcsQ0FBQUQsR0FBRSxLQUFLQyxFQUFDLEdBQUVBLEtBQUUsR0FBRztBQUFFLG1CQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdBLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEtBQUcsS0FBR04sSUFBRUEsS0FBRSxHQUFHSyxFQUFDLE1BQUksS0FBR0wsSUFBRUEsS0FBRTtBQUFBLFVBQUUsTUFBTSxNQUFHQSxJQUFFQSxLQUFFO0FBQUUsY0FBR0EsT0FBSSxFQUFFLEtBQUdBLEtBQUUsSUFBRyxPQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdHLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEdBQUU7QUFBQyxpQkFBSUUsS0FBRSxDQUFDLEdBQUVDLEtBQUUsR0FBRyxHQUFFQSxPQUFJLElBQUcsQ0FBQUQsR0FBRSxLQUFLQyxFQUFDLEdBQUVBLEtBQUUsR0FBRztBQUFFLG1CQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdBLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEtBQUcsS0FBR04sSUFBRUEsS0FBRSxHQUFHSyxFQUFDLE1BQUksS0FBR0wsSUFBRUEsS0FBRTtBQUFBLFVBQUUsTUFBTSxNQUFHQSxJQUFFQSxLQUFFO0FBQUUsaUJBQU8sTUFBS0EsT0FBSSxNQUFJRyxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHSDtBQUFBLFFBQUM7QUFBQyxpQkFBUyxLQUFJO0FBQUMsY0FBSUEsSUFBRUcsSUFBRUUsSUFBRUM7QUFBRSxpQkFBT04sS0FBRSxJQUFHRyxLQUFFLElBQUdFLEtBQUUsSUFBRyxNQUFLQyxLQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsR0FBRyxLQUFLQSxFQUFDLElBQUUsUUFBTUEsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBRyxNQUFLQSxPQUFJLElBQUVELEtBQUUsVUFBUSxLQUFHQSxJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUMsS0FBRSxHQUFHLE9BQUssSUFBRUgsS0FBRUUsS0FBRSxDQUFDQSxJQUFFQyxFQUFDLEtBQUcsS0FBR0gsSUFBRUEsS0FBRSxLQUFJSCxLQUFFRyxPQUFJLElBQUUsRUFBRSxVQUFVSCxJQUFFLEVBQUUsSUFBRUcsUUFBSyxNQUFJSCxLQUFFLElBQUcsT0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFHRyxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxNQUFJRSxLQUFFLEdBQUcsT0FBSyxJQUFFTCxLQUFFSyxNQUFHLEtBQUdMLElBQUVBLEtBQUUsSUFBR0EsT0FBSSxNQUFJQSxLQUFFLEdBQUcsS0FBSUE7QUFBQSxRQUFDO0FBQUMsaUJBQVMsS0FBSTtBQUFDLGNBQUlBLElBQUVHLElBQUVFLElBQUVDO0FBQUUsaUJBQU9OLEtBQUUsSUFBR0csS0FBRSxJQUFHRSxLQUFFLElBQUcsTUFBS0MsS0FBRSxFQUFFLE9BQU8sRUFBRSxHQUFFLEdBQUcsS0FBS0EsRUFBQyxJQUFFLFFBQU1BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUcsTUFBS0EsT0FBSSxJQUFFRCxLQUFFLFVBQVEsS0FBR0EsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlDLEtBQUUsR0FBRyxPQUFLLElBQUVILEtBQUVFLEtBQUUsQ0FBQ0EsSUFBRUMsRUFBQyxLQUFHLEtBQUdILElBQUVBLEtBQUUsS0FBSUgsS0FBRUcsT0FBSSxJQUFFLEVBQUUsVUFBVUgsSUFBRSxFQUFFLElBQUVHLFFBQUssTUFBSUgsS0FBRSxJQUFHLE9BQUssRUFBRSxXQUFXLEVBQUUsS0FBR0csS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksTUFBSUUsS0FBRSxHQUFHLE9BQUssSUFBRUwsS0FBRUssTUFBRyxLQUFHTCxJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUEsS0FBRSxHQUFHLEtBQUlBO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJQSxJQUFFRyxJQUFFRSxJQUFFQztBQUFFLGlCQUFPTixLQUFFLEtBQUlHLEtBQUUsR0FBRyxPQUFLLEtBQUcsT0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFHRSxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxNQUFJQyxLQUFFLEdBQUcsT0FBSyxLQUFHLEtBQUdOLElBQUVBLEtBQUUsR0FBR0csSUFBRUcsRUFBQyxNQUFJLEtBQUdOLElBQUVBLEtBQUUsT0FBSyxLQUFHQSxJQUFFQSxLQUFFLElBQUdBO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJQSxJQUFFRyxJQUFFRSxJQUFFQztBQUFFLGlCQUFPTixLQUFFLElBQUdHLEtBQUUsSUFBR0UsS0FBRSxJQUFHLE1BQUtDLEtBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRSxHQUFHLEtBQUtBLEVBQUMsSUFBRSxRQUFNQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHLE1BQUtBLE9BQUksSUFBRUQsS0FBRSxVQUFRLEtBQUdBLElBQUVBLEtBQUUsSUFBR0EsT0FBSSxNQUFJQyxLQUFFLEdBQUcsT0FBSyxJQUFFSCxLQUFFRSxLQUFFLENBQUNBLElBQUVDLEVBQUMsS0FBRyxLQUFHSCxJQUFFQSxLQUFFLEtBQUlILEtBQUVHLE9BQUksSUFBRSxFQUFFLFVBQVVILElBQUUsRUFBRSxJQUFFRyxRQUFLLE1BQUlILEtBQUUsSUFBRyxPQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdHLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLE1BQUlFLEtBQUUsR0FBRyxPQUFLLElBQUVMLEtBQUVLLE1BQUcsS0FBR0wsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlBLEtBQUUsR0FBRyxLQUFJQTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxLQUFJO0FBQUMsY0FBSUEsSUFBRUc7QUFBRSxpQkFBT0gsS0FBRSxJQUFHLE9BQUssRUFBRSxXQUFXLEVBQUUsS0FBR0csS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksS0FBRyxHQUFHLE1BQUksS0FBRyxLQUFHSCxJQUFFQSxLQUFFLEdBQUcsTUFBSSxLQUFHQSxJQUFFQSxLQUFFLElBQUdBO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJQSxJQUFFRyxJQUFFRSxJQUFFQztBQUFFLGlCQUFPTixLQUFFLFdBQVU7QUFBQyxnQkFBSUE7QUFBRSxvQkFBT0EsS0FBRSxHQUFHLE9BQUssTUFBSUEsS0FBRSxXQUFVO0FBQUMsa0JBQUlBLElBQUVHLElBQUVFLElBQUVDO0FBQUUscUJBQU9OLEtBQUUsSUFBR0csS0FBRSxJQUFHRSxLQUFFLElBQUcsTUFBS0MsS0FBRSxXQUFVO0FBQUMsb0JBQUlOO0FBQUUsd0JBQU9BLEtBQUUsR0FBRyxPQUFLLE1BQUlBLEtBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRSxHQUFHLEtBQUtBLEVBQUMsSUFBRSxRQUFNQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxLQUFJQTtBQUFBLGNBQUMsRUFBRSxHQUFFTSxPQUFJLE1BQUlBLEtBQUUsR0FBRyxJQUFHLE1BQUtBLE9BQUksSUFBRUQsS0FBRSxVQUFRLEtBQUdBLElBQUVBLEtBQUUsSUFBR0EsT0FBSSxNQUFJQyxLQUFFLEdBQUcsT0FBSyxJQUFFSCxLQUFFRSxLQUFFLENBQUNBLElBQUVDLEVBQUMsS0FBRyxLQUFHSCxJQUFFQSxLQUFFLElBQUdILEtBQUVHLE9BQUksSUFBRSxFQUFFLFVBQVVILElBQUUsRUFBRSxJQUFFRztBQUFBLFlBQUMsRUFBRSxJQUFHSDtBQUFBLFVBQUMsRUFBRSxHQUFFQSxPQUFJLE1BQUlBLEtBQUUsSUFBRyxPQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUdHLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEtBQUdFLEtBQUUsSUFBRyxNQUFLQyxLQUFFLEdBQUcsR0FBRSxNQUFLQSxPQUFJLElBQUVELEtBQUUsVUFBUSxLQUFHQSxJQUFFQSxLQUFFLElBQUdBLE9BQUksS0FBRyxLQUFHTCxJQUFFQSxLQUFFLEdBQUcsTUFBSSxLQUFHQSxJQUFFQSxLQUFFLE9BQUssS0FBR0EsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlBLEtBQUUsV0FBVTtBQUFDLGdCQUFJQSxJQUFFRyxJQUFFRSxJQUFFQyxJQUFFRSxJQUFFQztBQUFFLG1CQUFPVCxLQUFFLElBQUcsUUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFHRyxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxLQUFHRSxLQUFFLElBQUdDLEtBQUUsS0FBSUUsS0FBRSxHQUFHLE9BQUssTUFBSUMsS0FBRSxHQUFHLE9BQUssSUFBRUgsS0FBRUUsS0FBRSxDQUFDQSxJQUFFQyxFQUFDLEtBQUcsS0FBR0gsSUFBRUEsS0FBRSxLQUFJRCxLQUFFQyxPQUFJLElBQUUsRUFBRSxVQUFVRCxJQUFFLEVBQUUsSUFBRUMsUUFBSyxLQUFHLEtBQUdOLElBQUVBLEtBQUUsR0FBR0ssRUFBQyxNQUFJLEtBQUdMLElBQUVBLEtBQUUsT0FBSyxLQUFHQSxJQUFFQSxLQUFFLElBQUdBO0FBQUEsVUFBQyxFQUFFLEdBQUVBLE9BQUksTUFBSUEsS0FBRSxHQUFHLE1BQUtBO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJQSxJQUFFRztBQUFFLGlCQUFPSCxLQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsR0FBRyxLQUFLQSxFQUFDLElBQUUsUUFBTUEsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxNQUFJQSxLQUFFLElBQUcsT0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFHRyxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxNQUFJLEtBQUdILElBQUVHLEtBQUUsR0FBRyxLQUFJSCxLQUFFRyxRQUFLLE1BQUlILEtBQUUsSUFBRyxRQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUdHLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLE1BQUksS0FBR0gsSUFBRUcsS0FBRSxHQUFHLEtBQUlILEtBQUVHLFFBQUssTUFBSUgsS0FBRSxJQUFHLFFBQU0sRUFBRSxXQUFXLEVBQUUsS0FBR0csS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksTUFBSSxLQUFHSCxJQUFFRyxLQUFFLEdBQUcsS0FBSUgsS0FBRUcsUUFBSyxNQUFJSCxLQUFFLElBQUcsUUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFHRyxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxNQUFJLEtBQUdILElBQUVHLEtBQUUsR0FBRyxLQUFJSCxLQUFFRyxRQUFLLE1BQUlILEtBQUUsSUFBRyxRQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUdHLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLE1BQUksS0FBR0gsSUFBRUcsS0FBRSxHQUFHLEtBQUlILEtBQUVHLFFBQUssTUFBSUgsS0FBRSxJQUFHLFFBQU0sRUFBRSxXQUFXLEVBQUUsS0FBR0csS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksTUFBSSxLQUFHSCxJQUFFRyxLQUFFLEdBQUcsSUFBR0gsS0FBRUcsVUFBUUg7QUFBQSxRQUFDO0FBQUMsaUJBQVMsS0FBSTtBQUFDLGNBQUlBLElBQUVHLElBQUVFLElBQUVDLElBQUVFLElBQUVDLElBQUVDLElBQUVDO0FBQUUsaUJBQU9YLEtBQUUsSUFBRyxRQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUdHLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEtBQUdFLEtBQUUsSUFBR0MsS0FBRSxLQUFJRSxLQUFFLEdBQUcsT0FBSyxNQUFJQyxLQUFFLEdBQUcsT0FBSyxNQUFJQyxLQUFFLEdBQUcsT0FBSyxNQUFJQyxLQUFFLEdBQUcsT0FBSyxJQUFFTCxLQUFFRSxLQUFFLENBQUNBLElBQUVDLElBQUVDLElBQUVDLEVBQUMsS0FBRyxLQUFHTCxJQUFFQSxLQUFFLEtBQUlELEtBQUVDLE9BQUksSUFBRSxFQUFFLFVBQVVELElBQUUsRUFBRSxJQUFFQyxRQUFLLEtBQUcsS0FBR04sSUFBRUEsS0FBRSxHQUFHSyxFQUFDLE1BQUksS0FBR0wsSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsSUFBR0E7QUFBQSxRQUFDO0FBQUMsaUJBQVMsS0FBSTtBQUFDLGNBQUlBO0FBQUUsaUJBQU9BLEtBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRSxHQUFHLEtBQUtBLEVBQUMsSUFBRSxRQUFNQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxLQUFJO0FBQUMsY0FBSUE7QUFBRSxpQkFBT0EsS0FBRSxFQUFFLE9BQU8sRUFBRSxHQUFFLEdBQUcsS0FBS0EsRUFBQyxJQUFFLFFBQU1BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJQSxJQUFFRyxJQUFFRSxJQUFFQztBQUFFLGlCQUFPLE1BQUtOLEtBQUUsSUFBRyxRQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUdHLEtBQUUsR0FBRSxTQUFPQSxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLEtBQUdFLEtBQUUsV0FBVTtBQUFDLGdCQUFJSCxJQUFFRjtBQUFFLG1CQUFPRSxLQUFFLElBQUdGLEtBQUUsR0FBRyxHQUFFLEtBQUdFLElBQUVBLEtBQUVGLEtBQUUsR0FBR0EsRUFBQztBQUFBLFVBQUMsRUFBRSxHQUFFLFFBQU0sRUFBRSxXQUFXLEVBQUUsS0FBR00sS0FBRUMsSUFBRSxTQUFPRCxLQUFFLEdBQUUsTUFBSSxNQUFJLEdBQUcsRUFBRSxJQUFHQSxPQUFJLElBQUVOLEtBQUVLLE1BQUcsS0FBR0wsSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsSUFBRyxNQUFLQSxPQUFJLE1BQUlHLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdIO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJQSxJQUFFRyxJQUFFRSxJQUFFQyxJQUFFRSxJQUFFQztBQUFFLGNBQUdULEtBQUUsSUFBR0csS0FBRSxDQUFDLEdBQUVFLEtBQUUsQ0FBQyxHQUFFQyxLQUFFLElBQUdFLEtBQUUsSUFBRyxNQUFLQyxLQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsR0FBRyxLQUFLQSxFQUFDLElBQUUsUUFBTUEsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBRyxNQUFLQSxPQUFJLElBQUVELEtBQUUsVUFBUSxLQUFHQSxJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUMsS0FBRSxHQUFHLE9BQUssSUFBRUgsS0FBRUUsS0FBRSxDQUFDQSxJQUFFQyxFQUFDLEtBQUcsS0FBR0gsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLEVBQUUsUUFBS0EsT0FBSSxJQUFHLENBQUFELEdBQUUsS0FBS0MsRUFBQyxHQUFFQSxLQUFFLElBQUdFLEtBQUUsSUFBRyxNQUFLQyxLQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsR0FBRyxLQUFLQSxFQUFDLElBQUUsUUFBTUEsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBRyxNQUFLQSxPQUFJLElBQUVELEtBQUUsVUFBUSxLQUFHQSxJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUMsS0FBRSxHQUFHLE9BQUssSUFBRUgsS0FBRUUsS0FBRSxDQUFDQSxJQUFFQyxFQUFDLEtBQUcsS0FBR0gsSUFBRUEsS0FBRTtBQUFBLGNBQVEsQ0FBQUQsS0FBRTtBQUFFLGVBQUlBLE9BQUksTUFBSUEsS0FBRSxJQUFHLFFBQU0sRUFBRSxXQUFXLEVBQUUsS0FBR0MsS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksS0FBR0UsS0FBRSxHQUFHLEdBQUUsUUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFHQyxLQUFFRixJQUFFLFNBQU9FLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksSUFBRUosS0FBRUMsS0FBRSxDQUFDQSxJQUFFRSxJQUFFQyxFQUFDLEtBQUcsS0FBR0osSUFBRUEsS0FBRSxPQUFLLEtBQUdBLElBQUVBLEtBQUUsS0FBSUEsT0FBSSxLQUFHO0FBQUMsZ0JBQUdGLEdBQUUsS0FBS0UsRUFBQyxHQUFFQSxLQUFFLENBQUMsR0FBRUMsS0FBRSxJQUFHRSxLQUFFLElBQUcsTUFBS0MsS0FBRSxFQUFFLE9BQU8sRUFBRSxHQUFFLEdBQUcsS0FBS0EsRUFBQyxJQUFFLFFBQU1BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUcsTUFBS0EsT0FBSSxJQUFFRCxLQUFFLFVBQVEsS0FBR0EsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlDLEtBQUUsR0FBRyxPQUFLLElBQUVILEtBQUVFLEtBQUUsQ0FBQ0EsSUFBRUMsRUFBQyxLQUFHLEtBQUdILElBQUVBLEtBQUUsSUFBR0EsT0FBSSxFQUFFLFFBQUtBLE9BQUksSUFBRyxDQUFBRCxHQUFFLEtBQUtDLEVBQUMsR0FBRUEsS0FBRSxJQUFHRSxLQUFFLElBQUcsTUFBS0MsS0FBRSxFQUFFLE9BQU8sRUFBRSxHQUFFLEdBQUcsS0FBS0EsRUFBQyxJQUFFLFFBQU1BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUcsTUFBS0EsT0FBSSxJQUFFRCxLQUFFLFVBQVEsS0FBR0EsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLE1BQUlDLEtBQUUsR0FBRyxPQUFLLElBQUVILEtBQUVFLEtBQUUsQ0FBQ0EsSUFBRUMsRUFBQyxLQUFHLEtBQUdILElBQUVBLEtBQUU7QUFBQSxnQkFBUSxDQUFBRCxLQUFFO0FBQUUsWUFBQUEsT0FBSSxNQUFJQSxLQUFFLElBQUcsUUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFHQyxLQUFFLEdBQUUsU0FBT0EsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxLQUFHRSxLQUFFLEdBQUcsR0FBRSxRQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUdDLEtBQUVGLElBQUUsU0FBT0UsS0FBRSxHQUFFLE1BQUksTUFBSSxHQUFHLEVBQUUsSUFBR0EsT0FBSSxJQUFFSixLQUFFQyxLQUFFLENBQUNBLElBQUVFLElBQUVDLEVBQUMsS0FBRyxLQUFHSixJQUFFQSxLQUFFLE9BQUssS0FBR0EsSUFBRUEsS0FBRTtBQUFBLFVBQUc7QUFBQyxpQkFBTyxFQUFFLFVBQVVMLElBQUUsRUFBRTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxLQUFJO0FBQUMsY0FBSUUsSUFBRUY7QUFBRSxlQUFJRSxLQUFFLENBQUMsSUFBR0YsS0FBRSxHQUFHLE9BQUssTUFBSUEsS0FBRSxHQUFHLE9BQUssTUFBSUEsS0FBRSxHQUFHLElBQUdBLE9BQUksSUFBRyxDQUFBRSxHQUFFLEtBQUtGLEVBQUMsSUFBR0EsS0FBRSxHQUFHLE9BQUssTUFBSUEsS0FBRSxHQUFHLE9BQUssTUFBSUEsS0FBRSxHQUFHO0FBQUcsaUJBQU9FO0FBQUEsUUFBQztBQUFDLGlCQUFTLEtBQUk7QUFBQyxjQUFJRixJQUFFRyxJQUFFRSxJQUFFQztBQUFFLGNBQUdOLEtBQUUsQ0FBQyxHQUFFRyxLQUFFLElBQUdFLEtBQUUsR0FBRyxHQUFFLE9BQUssRUFBRSxXQUFXLEVBQUUsS0FBR0MsS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksSUFBRUgsS0FBRUUsS0FBRSxDQUFDQSxJQUFFQyxFQUFDLEtBQUcsS0FBR0gsSUFBRUEsS0FBRSxJQUFHQSxPQUFJLEVBQUUsUUFBS0EsT0FBSSxJQUFHLENBQUFILEdBQUUsS0FBS0csRUFBQyxHQUFFQSxLQUFFLElBQUdFLEtBQUUsR0FBRyxHQUFFLE9BQUssRUFBRSxXQUFXLEVBQUUsS0FBR0MsS0FBRSxHQUFFLFNBQU9BLEtBQUUsR0FBRSxNQUFJLE1BQUksR0FBRyxFQUFFLElBQUdBLE9BQUksSUFBRUgsS0FBRUUsS0FBRSxDQUFDQSxJQUFFQyxFQUFDLEtBQUcsS0FBR0gsSUFBRUEsS0FBRTtBQUFBLGNBQVEsQ0FBQUgsS0FBRTtBQUFFLGlCQUFPQSxPQUFJLE1BQUlBLEtBQUUsSUFBR0csS0FBRSxXQUFVO0FBQUMsZ0JBQUlELElBQUVGO0FBQUUsaUJBQUlFLEtBQUUsQ0FBQyxJQUFHRixLQUFFLEdBQUcsT0FBSyxNQUFJQSxLQUFFLEdBQUcsSUFBR0EsT0FBSSxJQUFHLENBQUFFLEdBQUUsS0FBS0YsRUFBQyxJQUFHQSxLQUFFLEdBQUcsT0FBSyxNQUFJQSxLQUFFLEdBQUc7QUFBRyxtQkFBT0U7QUFBQSxVQUFDLEVBQUUsSUFBR0csS0FBRSxHQUFHLE9BQUssTUFBSUEsS0FBRSxRQUFPQyxLQUFFLEdBQUcsT0FBSyxJQUFFTixLQUFFRyxLQUFFLENBQUNBLElBQUVFLElBQUVDLEVBQUMsS0FBRyxLQUFHTixJQUFFQSxLQUFFLElBQUdBLE9BQUksTUFBSUEsS0FBRSxJQUFHRyxLQUFFLEdBQUcsR0FBRUUsS0FBRSxXQUFVO0FBQUMsZ0JBQUlMLElBQUVHO0FBQUUsbUJBQU9ILEtBQUUsSUFBRyxNQUFLLEVBQUUsU0FBTyxNQUFJRyxLQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUs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QUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFDTDtBQUNBLElBQU0sVUFBVTtBQUFBLEVBQ2QsUUFBUTtBQUFBLEVBQ1IsYUFBYTtBQUFBLEVBQ2IsTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsY0FBYztBQUFBLEVBQ2QsSUFBSTtBQUFBLEVBQ0osU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1YsU0FBUztBQUFBLEVBQ1QsS0FBSztBQUFBLEVBQ0wsYUFBYTtBQUFBLEVBQ2IsU0FBUztBQUFBLEVBQ1QsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sS0FBSztBQUFBLEVBQ0wsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsVUFBVTtBQUFBLEVBQ1YsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1YsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsV0FBVztBQUFBLEVBQ1gsS0FBSztBQUFBLEVBQ0wsUUFBUTtBQUFBLEVBQ1IsS0FBSztBQUFBLEVBQ0wsS0FBSztBQUFBLEVBQ0wsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsU0FBUztBQUFBLEVBQ1QsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsT0FBTztBQUFBLEVBQ1AsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsWUFBWTtBQUFBLEVBQ1osS0FBSztBQUFBLEVBQ0wsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsS0FBSztBQUFBLEVBQ0wsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsS0FBSztBQUFBLEVBQ0wsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsWUFBWTtBQUFBLEVBQ1osS0FBSztBQUFBLEVBQ0wsT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsS0FBSztBQUFBLEVBQ0wsVUFBVTtBQUFBLEVBQ1YsWUFBWTtBQUFBLEVBQ1osU0FBUztBQUFBLEVBQ1QsVUFBVTtBQUFBLEVBQ1YsU0FBUztB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QUFFNUIsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNsQixXQUFLLGFBQWEsS0FBSyxjQUFjLGlCQUFpQixFQUFFLGNBQWMsR0FBRyxZQUFZO0FBQ2pGLFlBQUksQ0FBQyxLQUFLLFdBQVcsVUFBVTtBQUMzQixnQkFBTSxLQUFLLEtBQUs7QUFDaEIsZUFBSztBQUFBLFlBQ0QsS0FBSyxXQUFXO0FBQUEsWUFDaEIsS0FBSyxXQUFXO0FBQUE7QUFBQSxVQUVwQjtBQUFBLFFBQ0o7QUFBQSxNQUNKLENBQUM7QUFBQSxJQUNMO0FBQ0EsUUFBSSxRQUFRO0FBQ1IsV0FBSyxXQUFXLE1BQU0sVUFBVTtBQUFBLElBQ3BDLE9BQU87QUFDSCxXQUFLLFdBQVcsTUFBTSxVQUFVO0FBQUEsSUFDcEM7QUFBQSxFQUNKO0FBQUEsRUFFQSxjQUFjLFFBQWlCO0FBRTNCLFFBQUksQ0FBQyxLQUFLLFdBQVc7QUFDakIsV0FBSyxZQUFZLEtBQUssaUJBQWlCO0FBQ3ZDLFdBQUssVUFBVSxVQUFVLElBQUksZUFBZTtBQUM1QyxXQUFLLFVBQVUsYUFBYSxjQUFjLEVBQUUsc0JBQXNCLENBQUM7QUFDbkUsV0FBSyxVQUFVLGFBQWEsdUJBQXVCLEtBQUs7QUFDeEQsV0FBSyxVQUFVLGlCQUFpQixTQUFTLFlBQVk7QUFDakQsWUFBSSxDQUFDLEtBQUssV0FBVyxVQUFVO0FBQzNCLGdCQUFNLEtBQUssS0FBSztBQUNoQixlQUFLLHNCQUFzQixvQkFBb0I7QUFBQSxRQUNuRDtBQUFBLE1BQ0osQ0FBQztBQUFBLElBQ0w7QUFFQSxRQUFJLFFBQVE7QUFDUixXQUFLLFVBQVUsTUFBTSxVQUFVO0FBQUEsSUFDbkMsT0FBTztBQUNILFdBQUssVUFBVSxNQUFNLFVBQVU7QUFBQSxJQUNuQztBQUFBLEVBQ0o7QUFDSjsiLAogICJuYW1lcyI6IFsiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImNhbGxiYWNrIiwgImlzQXJyYXkiLCAiaXNPYmplY3QiLCAiaXNOdW1iZXIiLCAibWFwIiwgImZvcm1hdCIsICJsb2NhbGUiLCAidCIsICJ0byIsICJmcm9tIiwgIk1vbWVudCIsICJpc0Z1bmN0aW9uIiwgInNldCIsICJub3ciLCAic2lnbiIsICJ0b2tlbiIsICJvcmRpbmFsIiwgImkiLCAiZGlmZiIsICJsb2NhbGVEYXRhIiwgImgiLCAiaG91cnMiLCAibWludXRlcyIsICJuYW1lcyIsICJtYXRjaCIsICJkZWZhdWx0cyIsICJ0b2tlbnMiLCAibWVyaWRpZW0iLCAieWVhcnMiLCAibW9udGhzIiwgIndlZWtzIiwgImRheXMiLCAic2Vjb25kcyIsICJtaWxsaXNlY29uZHMiLCAib2Zmc2V0IiwgImNsb25lIiwgInJvdW5kIiwgInRocmVzaG9sZHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY2FsbGJhY2siLCAic2VsZiIsICJhbHBoYSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBhbmQiLCAidCIsICJHcmFtbWFyTG9jYXRpb24iLCAiZSIsICJyIiwgIm4iLCAibyIsICJ1IiwgImgiLCAiYSIsICJpIiwgInMiLCAiYyIsICJkIiwgImciLCAiRSIsICJsIiwgInAiLCAiZiIsICJtIiwgIl8iLCAidiIsICJQIiwgIngiLCAiRCIsICJDIiwgInkiLCAiJCIsICJTIiwgIkYiLCAiYiIsICJlc2MiLCAiU3RyaW5nIiwgInN0ciIsICJyZXBsYWNlIiwgIm1hcCIsICJzIiwgInNldElubmVySFRNTEF0dHIiLCAiRE9NQXR0cmlidXRlTmFtZXMiLCAic2FuaXRpemVkIiwgImgiLCAibmFtZSIsICJhdHRycyIsICJzdGFjayIsICJpIiwgImFyZ3VtZW50cyIsICJsZW5ndGgiLCAicHVzaCIsICJjaGlsZHJlbiIsICJyZXZlcnNlIiwgImVtcHR5VGFncyIsICJpbmRleE9mIiwgIl9faHRtbCIsICJjaGlsZCIsICJwb3AiLCAiaW1wb3J0X29ic2lkaWFuIiwgInBhdGgiLCAiaW1wb3J0X21vbWVudCIsICJuYW1lcyIsICJtb21lbnQiLCAibW9tZW50IiwgInBhdGgiLCAibW9tZW50IiwgInBhdGgiLCAib3B0aW9ucyIsICJfYSIsICJhc3QiLCAic3RhcnQiLCAiZmluYWwiLCAiaSIsICJhY2MiLCAiZXh0IiwgIl9oYXNNYWdpYyIsICJvcHRpb25zIiwgImV4dCIsICJxbWFyayIsICJzdGFyIiwgImV4cGFuZCIsICJyZWdFeHBFc2NhcGUiLCAic2V0IiwgInBhdGgiLCAicGF0aCIsICJyYW5rIiwgInBhdGgiLCAiX2EiLCAic2VwIiwgIl9hIiwgIkRlY2siLCAidCIsICJDYXJkT3JkZXIiLCAiRGVja09yZGVyIiwgIkRlY2siLCAiX2EiLCAiX2EiLCAiaDEiLCAiaDIiLCAiQ2FyZFR5cGUiLCAibWF0Y2giLCAic2VwIiwgInBhcnNlciIsICJvcHRpb25zIiwgInRleHQiLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJfYSIsICJ0YWJfaGVhZGVyIiwgImNvbnRhaW5lcl9lbGVtZW50IiwgInRhYl9jb250ZW50IiwgInRhYl9idXR0b24iLCAicGF0aCIsICJjYWxsYmFjayIsICJpbXBvcnRfb2JzaWRpYW4iLCAiT2JzaWRpYW5HZXRBbGxUYWdzIiwgIl9hIiwgInN0YWNrIiwgIkRlY2siLCAiaW1wb3J0X21vbWVudCIsICJtb21lbnQiLCAibWF0Y2giLCAiaW1wb3J0X29ic2lkaWFuIiwgImgiLCAiaW1wb3J0X29ic2lkaWFuIiwgInJlc29sdmUiLCAiX2EiLCAiY2FsbGJhY2siLCAiaW1wb3J0X21vbWVudCIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImVsIiwgImxpbmsiLCAiX2EiLCAiaW1wb3J0X29ic2lkaWFuIiwgIm5vdyIsICJoIiwgImhleCIsICJoIiwgImludGVycG9sYXRlIiwgInQiLCAiY29sb3IiLCAibm9vcCIsICJ1aWQiLCAiaWQiLCAiaXNOdWxsT3JVbmRlZiIsICJ2YWx1ZSIsICJpc0FycmF5IiwgIkFycmF5IiwgInR5cGUiLCAiT2JqZWN0IiwgInByb3RvdHlwZSIsICJ0b1N0cmluZyIsICJjYWxsIiwgInNsaWNlIiwgImlzT2JqZWN0IiwgImlzTnVtYmVyRmluaXRlIiwgIk51bWJlciIsICJpc0Zpbml0ZSIsICJmaW5pdGVPckRlZmF1bHQiLCAiZGVmYXVsdFZhbHVlIiwgInZhbHVlT3JEZWZhdWx0IiwgInRvUGVyY2VudGFnZSIsICJkaW1lbnNpb24iLCAiZW5kc1dpdGgiLCAicGFyc2VGbG9hdCIsICJ0b0RpbWVuc2lvbiIsICJjYWxsYmFjayIsICJmbiIsICJhcmdzIiwgInRoaXNBcmciLCAiYXBwbHkiLCAiZWFjaCIsICJsb29wYWJsZSIsICJyZXZlcnNlIiwgImkiLCAibGVuIiwgImtleXMiLCAibGVuZ3RoIiwgIl9lbGVtZW50c0VxdWFsIiwgImEwIiwgImExIiwgImlsZW4iLCAidjAiLCAidjEiLCAiZGF0YXNldEluZGV4IiwgImluZGV4IiwgImNsb25lIiwgInNvdXJjZSIsICJtYXAiLCAidGFyZ2V0IiwgImNyZWF0ZSIsICJrbGVuIiwgImsiLCAiaXNWYWxpZEtleSIsICJrZXkiLCAiaW5kZXhPZiIsICJfbWVyZ2VyIiwgIm9wdGlvbnMiLCAidHZhbCIsICJzdmFsIiwgIm1lcmdlIiwgInNvdXJjZXMiLCAibWVyZ2VyIiwgImN1cnJlbnQiLCAibWVyZ2VJZiIsICJfbWVyZ2VySWYiLCAiaGFzT3duUHJvcGVydHkiLCAia2V5UmVzb2x2ZXJzIiwgInYiLCAieCIsICJvIiwgInkiLCAiX3NwbGl0S2V5IiwgImtleSIsICJwYXJ0cyIsICJzcGxpdCIsICJrZXlzIiwgInRtcCIsICJwYXJ0IiwgImVuZHNXaXRoIiwgInNsaWNlIiwgInB1c2giLCAiX2dldEtleVJlc29sdmVyIiwgIm9iaiIsICJrIiwgInJlc29sdmVPYmplY3RLZXkiLCAicmVzb2x2ZXIiLCAiX2NhcGl0YWxpemUiLCAic3RyIiwgImNoYXJBdCIsICJ0b1VwcGVyQ2FzZSIsICJkZWZpbmVkIiwgInZhbHVlIiwgImlzRnVuY3Rpb24iLCAic2V0c0VxdWFsIiwgImEiLCAiYiIsICJzaXplIiwgIml0ZW0iLCAiaGFzIiwgIl9pc0NsaWNrRXZlbnQiLCAiZSIsICJ0eXBlIiwgIlBJIiwgIk1hdGgiLCAiVEFVIiwgIlBJVEFVIiwgIklORklOSVRZIiwgIk51bWJlciIsICJQT1NJVElWRV9JTkZJTklUWSIsICJSQURfUEVSX0RFRyIsICJIQUxGX1BJIiwgIlFVQVJURVJfUEkiLCAiVFdPX1RISVJEU19QSSIsICJsb2cxMCIsICJzaWduIiwgImFsbW9zdEVxdWFscyIsICJlcHNpbG9uIiwgImFicyIsICJuaWNlTnVtIiwgInJhbmdlIiwgInJvdW5kZWRSYW5nZSIsICJyb3VuZCIsICJuaWNlUmFuZ2UiLCAicG93IiwgImZsb29yIiwgImZyYWN0aW9uIiwgIm5pY2VGcmFjdGlvbiIsICJfZmFjdG9yaXplIiwgInJlc3VsdCIsICJzcXJ0IiwgImkiLCAic29ydCIsICJwb3AiLCAiaXNOdW1iZXIiLCAibiIsICJpc05hTiIsICJwYXJzZUZsb2F0IiwgImlzRmluaXRlIiwgImFsbW9zdFdob2xlIiwgInJvdW5kZWQiLCAiX3NldE1pbkFuZE1heEJ5S2V5IiwgImFycmF5IiwgInRhcmdldCIsICJwcm9wZXJ0eSIsICJpbGVuIiwgImxlbmd0aCIsICJtaW4iLCAibWF4IiwgInRvUmFkaWFucyIsICJkZWdyZWVzIiwgInRvRGVncmVlcyIsICJyYWRpYW5zIiwgIl9kZWNpbWFsUGxhY2VzIiwgImlzRmluaXRlTnVtYmVyIiwgInAiLCAiZ2V0QW5nbGVGcm9tUG9pbnQiLCAiY2VudHJlUG9pbnQiLCAiYW5nbGVQb2ludCIsICJkaXN0YW5jZUZyb21YQ2VudGVyIiwgImRpc3RhbmNlRnJvbVlDZW50ZXIiLCAicmFkaWFsRGlzdGFuY2VGcm9tQ2VudGVyIiwgImFuZ2xlIiwgImF0YW4yIiwgImRpc3RhbmNlIiwgImRpc3RhbmNlQmV0d2VlblBvaW50cyIsICJwdDEiLCAicHQyIiwgIl9ub3JtYWxpemVBbmdsZSIsICJhIiwgIlRBVSIsICJfYW5nbGVCZXR3ZWVuIiwgImFuZ2xlIiwgInN0YXJ0IiwgImVuZCIsICJzYW1lQW5nbGVJc0Z1bGxDaXJjbGUiLCAicyIsICJlIiwgImFuZ2xlVG9TdGFydCIsICJhbmdsZVRvRW5kIiwgInN0YXJ0VG9BbmdsZSIsICJlbmRUb0FuZ2xlIiwgIl9saW1pdFZhbHVlIiwgInZhbHVlIiwgIm1pbiIsICJtYXgiLCAiTWF0aCIsICJfaW50MTZSYW5nZSIsICJfaXNCZXR3ZWVuIiwgImVwc2lsb24iLCAiX2xvb2t1cCIsICJ0YWJsZSIsICJjbXAiLCAiaW5kZXgiLCAiaGkiLCAibGVuZ3RoIiwgImxvIiwgIm1pZCIsICJfbG9va3VwQnlLZXkiLCAia2V5IiwgImxhc3QiLCAidGkiLCAiX3Jsb29rdXBCeUtleSIsICJfZmlsdGVyQmV0d2VlbiIsICJ2YWx1ZXMiLCAic2xpY2UiLCAiYXJyYXlFdmVudHMiLCAibGlzdGVuQXJyYXlFdmVudHMiLCAiYXJyYXkiLCAibGlzdGVuZXIiLCAiX2NoYXJ0anMiLCAibGlzdGVuZXJzIiwgInB1c2giLCAiT2JqZWN0IiwgImRlZmluZVByb3BlcnR5IiwgImNvbmZpZ3VyYWJsZSIsICJlbnVtZXJhYmxlIiwgImZvckVhY2giLCAibWV0aG9kIiwgIl9jYXBpdGFsaXplIiwgImJhc2UiLCAiYXJncyIsICJyZXMiLCAiYXBwbHkiLCAib2JqZWN0IiwgInVubGlzdGVuQXJyYXlFdmVudHMiLCAic3R1YiIsICJpbmRleE9mIiwgInNwbGljZSIsICJfYXJyYXlVbmlxdWUiLCAiaXRlbXMiLCAic2V0IiwgIlNldCIsICJzaXplIiwgIkFycmF5IiwgImZyb20iLCAicmVxdWVzdEFuaW1GcmFtZSIsICJ3aW5kb3ciLCAiY2FsbGJhY2siLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgInRocm90dGxlZCIsICJmbiIsICJ0aGlzQXJnIiwgImFyZ3NUb1VzZSIsICJ0aWNraW5nIiwgImFyZ3MiLCAiY2FsbCIsICJhcHBseSIsICJkZWJvdW5jZSIsICJkZWxheSIsICJ0aW1lb3V0IiwgImNsZWFyVGltZW91dCIsICJzZXRUaW1lb3V0IiwgIl90b0xlZnRSaWdodENlbnRlciIsICJhbGlnbiIsICJfYWxpZ25TdGFydEVuZCIsICJzdGFydCIsICJlbmQiLCAiX3RleHRYIiwgImxlZnQiLCAicmlnaHQiLCAicnRsIiwgImNoZWNrIiwgImF0RWRnZSIsICJ0IiwgImVsYXN0aWNJbiIsICJzIiwgInAiLCAiTWF0aCIsICJwb3ciLCAic2luIiwgIlRBVSIsICJlbGFzdGljT3V0IiwgImVmZmVjdHMiLCAibGluZWFyIiwgImVhc2VJblF1YWQiLCAiZWFzZU91dFF1YWQiLCAiZWFzZUluT3V0UXVhZCIsICJlYXNlSW5DdWJpYyIsICJlYXNlT3V0Q3ViaWMiLCAiZWFzZUluT3V0Q3ViaWMiLCAiZWFzZUluUXVhcnQiLCAiZWFzZU91dFF1YXJ0IiwgImVhc2VJbk91dFF1YXJ0IiwgImVhc2VJblF1aW50IiwgImVhc2VPdXRRdWludCIsICJlYXNlSW5PdXRRdWludCIsICJlYXNlSW5TaW5lIiwgImNvcyIsICJIQUxGX1BJIiwgImVhc2VPdXRTaW5lIiwgImVhc2VJbk91dFNpbmUiLCAiUEkiLCAiZWFzZUluRXhwbyIsICJlYXNlT3V0RXhwbyIsICJlYXNlSW5PdXRFeHBvIiwgImVhc2VJbkNpcmMiLCAic3FydCIsICJlYXNlT3V0Q2lyYyIsICJlYXNlSW5PdXRDaXJjIiwgImVhc2VJbkVsYXN0aWMiLCAiZWFzZU91dEVsYXN0aWMiLCAiZWFzZUluT3V0RWxhc3RpYyIsICJlYXNlSW5CYWNrIiwgImVhc2VPdXRCYWNrIiwgImVhc2VJbk91dEJhY2siLCAiZWFzZUluQm91bmNlIiwgImVhc2VPdXRCb3VuY2UiLCAibSIsICJkIiwgImVhc2VJbk91dEJvdW5jZSIsICJpc1BhdHRlcm5PckdyYWRpZW50IiwgInZhbHVlIiwgInR5cGUiLCAidG9TdHJpbmciLCAiY29sb3IiLCAiQ29sb3IiLCAiZ2V0SG92ZXJDb2xvciIsICJzYXR1cmF0ZSIsICJkYXJrZW4iLCAiaGV4U3RyaW5nIiwgIm51bWJlcnMiLCAiY29sb3JzIiwgImFwcGx5QW5pbWF0aW9uc0RlZmF1bHRzIiwgImRlZmF1bHRzIiwgInNldCIsICJkZWxheSIsICJ1bmRlZmluZWQiLCAiZHVyYXRpb24iLCAiZWFzaW5nIiwgImZuIiwgImZyb20iLCAibG9vcCIsICJ0byIsICJkZXNjcmliZSIsICJfZmFsbGJhY2siLCAiX2luZGV4YWJsZSIsICJfc2NyaXB0YWJsZSIsICJuYW1lIiwgInByb3BlcnRpZXMiLCAiYWN0aXZlIiwgImFuaW1hdGlvbiIsICJyZXNpemUiLCAic2hvdyIsICJhbmltYXRpb25zIiwgInZpc2libGUiLCAiaGlkZSIsICJ2IiwgImFwcGx5TGF5b3V0c0RlZmF1bHRzIiwgImF1dG9QYWRkaW5nIiwgInBhZGRpbmciLCAidG9wIiwgInJpZ2h0IiwgImJvdHRvbSIsICJsZWZ0IiwgImludGxDYWNoZSIsICJNYXAiLCAiZ2V0TnVtYmVyRm9ybWF0IiwgImxvY2FsZSIsICJvcHRpb25zIiwgImNhY2hlS2V5IiwgIkpTT04iLCAic3RyaW5naWZ5IiwgImZvcm1hdHRlciIsICJnZXQiLCAiSW50bCIsICJOdW1iZXJGb3JtYXQiLCAiZm9ybWF0TnVtYmVyIiwgIm51bSIsICJmb3JtYXQiLCAiZm9ybWF0dGVycyIsICJ2YWx1ZXMiLCAiaXNBcnJheSIsICJudW1lcmljIiwgInRpY2tWYWx1ZSIsICJpbmRleCIsICJ0aWNrcyIsICJjaGFydCIsICJub3RhdGlvbiIsICJkZWx0YSIsICJsZW5ndGgiLCAibWF4VGljayIsICJtYXgiLCAiYWJzIiwgImNhbGN1bGF0ZURlbHRhIiwgImxvZ0RlbHRhIiwgImxvZzEwIiwgIm51bURlY2ltYWwiLCAiaXNOYU4iLCAibWluIiwgImZsb29yIiwgIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIsICJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiLCAiT2JqZWN0IiwgImFzc2lnbiIsICJsb2dhcml0aG1pYyIsICJyZW1haW4iLCAic2lnbmlmaWNhbmQiLCAiaW5jbHVkZXMiLCAiY2FsbCIsICJhcHBseVNjYWxlRGVmYXVsdHMiLCAiZGlzcGxheSIsICJvZmZzZXQiLCAicmV2ZXJzZSIsICJiZWdpbkF0WmVybyIsICJib3VuZHMiLCAiY2xpcCIsICJncmFjZSIsICJncmlkIiwgImxpbmVXaWR0aCIsICJkcmF3T25DaGFydEFyZWEiLCAiZHJhd1RpY2tzIiwgInRpY2tMZW5ndGgiLCAidGlja1dpZHRoIiwgIl9jdHgiLCAidGlja0NvbG9yIiwgImJvcmRlciIsICJkYXNoIiwgImRhc2hPZmZzZXQiLCAid2lkdGgiLCAidGl0bGUiLCAidGV4dCIsICJtaW5Sb3RhdGlvbiIsICJtYXhSb3RhdGlvbiIsICJtaXJyb3IiLCAidGV4dFN0cm9rZVdpZHRoIiwgInRleHRTdHJva2VDb2xvciIsICJhdXRvU2tpcCIsICJhdXRvU2tpcFBhZGRpbmciLCAibGFiZWxPZmZzZXQiLCAiY2FsbGJhY2siLCAiVGlja3MiLCAibWlub3IiLCAibWFqb3IiLCAiYWxpZ24iLCAiY3Jvc3NBbGlnbiIsICJzaG93TGFiZWxCYWNrZHJvcCIsICJiYWNrZHJvcENvbG9yIiwgImJhY2tkcm9wUGFkZGluZyIsICJyb3V0ZSIsICJzdGFydHNXaXRoIiwgIm92ZXJyaWRlcyIsICJjcmVhdGUiLCAiZGVzY3JpcHRvcnMiLCAiZ2V0U2NvcGUiLCAibm9kZSIsICJrZXkiLCAia2V5cyIsICJzcGxpdCIsICJpIiwgIm4iLCAiayIsICJyb290IiwgInNjb3BlIiwgIm1lcmdlIiwgIkRlZmF1bHRzIiwgImNvbnN0cnVjdG9yIiwgIl9kZXNjcmlwdG9ycyIsICJfYXBwbGllcnMiLCAiYmFja2dyb3VuZENvbG9yIiwgImJvcmRlckNvbG9yIiwgImRhdGFzZXRzIiwgImRldmljZVBpeGVsUmF0aW8iLCAiY29udGV4dCIsICJwbGF0Zm9ybSIsICJnZXREZXZpY2VQaXhlbFJhdGlvIiwgImVsZW1lbnRzIiwgImV2ZW50cyIsICJmb250IiwgImZhbWlseSIsICJzaXplIiwgInN0eWxlIiwgImxpbmVIZWlnaHQiLCAid2VpZ2h0IiwgImhvdmVyIiwgImhvdmVyQmFja2dyb3VuZENvbG9yIiwgImN0eCIsICJob3ZlckJvcmRlckNvbG9yIiwgImhvdmVyQ29sb3IiLCAiaW5kZXhBeGlzIiwgImludGVyYWN0aW9uIiwgIm1vZGUiLCAiaW50ZXJzZWN0IiwgImluY2x1ZGVJbnZpc2libGUiLCAibWFpbnRhaW5Bc3BlY3RSYXRpbyIsICJvbkhvdmVyIiwgIm9uQ2xpY2siLCAicGFyc2luZyIsICJwbHVnaW5zIiwgInJlc3BvbnNpdmUiLCAic2NhbGUiLCAic2NhbGVzIiwgInNob3dMaW5lIiwgImRyYXdBY3RpdmVFbGVtZW50c09uVG9wIiwgImFwcGx5IiwgIm92ZXJyaWRlIiwgInRhcmdldFNjb3BlIiwgInRhcmdldE5hbWUiLCAic2NvcGVPYmplY3QiLCAidGFyZ2V0U2NvcGVPYmplY3QiLCAicHJpdmF0ZU5hbWUiLCAiZGVmaW5lUHJvcGVydGllcyIsICJ3cml0YWJsZSIsICJlbnVtZXJhYmxlIiwgImxvY2FsIiwgInRhcmdldCIsICJpc09iamVjdCIsICJ2YWx1ZU9yRGVmYXVsdCIsICJhcHBsaWVycyIsICJmb3JFYWNoIiwgInRvRm9udFN0cmluZyIsICJpc051bGxPclVuZGVmIiwgIl9tZWFzdXJlVGV4dCIsICJkYXRhIiwgImdjIiwgImxvbmdlc3QiLCAic3RyaW5nIiwgInRleHRXaWR0aCIsICJtZWFzdXJlVGV4dCIsICJwdXNoIiwgIl9sb25nZXN0VGV4dCIsICJhcnJheU9mVGhpbmdzIiwgImNhY2hlIiwgImdhcmJhZ2VDb2xsZWN0IiwgInNhdmUiLCAiaWxlbiIsICJqIiwgImpsZW4iLCAidGhpbmciLCAibmVzdGVkVGhpbmciLCAicmVzdG9yZSIsICJnY0xlbiIsICJzcGxpY2UiLCAiX2FsaWduUGl4ZWwiLCAicGl4ZWwiLCAiY3VycmVudERldmljZVBpeGVsUmF0aW8iLCAiaGFsZldpZHRoIiwgInJvdW5kIiwgImNsZWFyQ2FudmFzIiwgImNhbnZhcyIsICJnZXRDb250ZXh0IiwgInJlc2V0VHJhbnNmb3JtIiwgImNsZWFyUmVjdCIsICJoZWlnaHQiLCAiZHJhd1BvaW50IiwgIngiLCAieSIsICJkcmF3UG9pbnRMZWdlbmQiLCAidyIsICJ4T2Zmc2V0IiwgInlPZmZzZXQiLCAiY29ybmVyUmFkaXVzIiwgInhPZmZzZXRXIiwgInlPZmZzZXRXIiwgInBvaW50U3R5bGUiLCAicm90YXRpb24iLCAicmFkaXVzIiwgInJhZCIsICJSQURfUEVSX0RFRyIsICJ0cmFuc2xhdGUiLCAicm90YXRlIiwgImRyYXdJbWFnZSIsICJiZWdpblBhdGgiLCAiZWxsaXBzZSIsICJhcmMiLCAiY2xvc2VQYXRoIiwgIm1vdmVUbyIsICJUV09fVEhJUkRTX1BJIiwgImxpbmVUbyIsICJRVUFSVEVSX1BJIiwgIlNRUlQxXzIiLCAicmVjdCIsICJmaWxsIiwgImJvcmRlcldpZHRoIiwgInN0cm9rZSIsICJfaXNQb2ludEluQXJlYSIsICJwb2ludCIsICJhcmVhIiwgIm1hcmdpbiIsICJjbGlwQXJlYSIsICJ1bmNsaXBBcmVhIiwgInNldFJlbmRlck9wdHMiLCAiY3R4IiwgIm9wdHMiLCAidHJhbnNsYXRpb24iLCAidHJhbnNsYXRlIiwgImlzTnVsbE9yVW5kZWYiLCAicm90YXRpb24iLCAicm90YXRlIiwgImNvbG9yIiwgImZpbGxTdHlsZSIsICJ0ZXh0QWxpZ24iLCAidGV4dEJhc2VsaW5lIiwgImRlY29yYXRlVGV4dCIsICJ4IiwgInkiLCAibGluZSIsICJzdHJpa2V0aHJvdWdoIiwgInVuZGVybGluZSIsICJtZXRyaWNzIiwgIm1lYXN1cmVUZXh0IiwgImxlZnQiLCAiYWN0dWFsQm91bmRpbmdCb3hMZWZ0IiwgInJpZ2h0IiwgImFjdHVhbEJvdW5kaW5nQm94UmlnaHQiLCAidG9wIiwgImFjdHVhbEJvdW5kaW5nQm94QXNjZW50IiwgImJvdHRvbSIsICJhY3R1YWxCb3VuZGluZ0JveERlc2NlbnQiLCAieURlY29yYXRpb24iLCAic3Ryb2tlU3R5bGUiLCAiYmVnaW5QYXRoIiwgImxpbmVXaWR0aCIsICJkZWNvcmF0aW9uV2lkdGgiLCAibW92ZVRvIiwgImxpbmVUbyIsICJzdHJva2UiLCAiZHJhd0JhY2tkcm9wIiwgIm9sZENvbG9yIiwgImZpbGxSZWN0IiwgIndpZHRoIiwgImhlaWdodCIsICJyZW5kZXJUZXh0IiwgInRleHQiLCAiZm9udCIsICJsaW5lcyIsICJpc0FycmF5IiwgInN0cm9rZVdpZHRoIiwgInN0cm9rZUNvbG9yIiwgImkiLCAic2F2ZSIsICJzdHJpbmciLCAibGVuZ3RoIiwgImJhY2tkcm9wIiwgInN0cm9rZVRleHQiLCAibWF4V2lkdGgiLCAiZmlsbFRleHQiLCAiTnVtYmVyIiwgImxpbmVIZWlnaHQiLCAicmVzdG9yZSIsICJhZGRSb3VuZGVkUmVjdFBhdGgiLCAicmVjdCIsICJ3IiwgImgiLCAicmFkaXVzIiwgImFyYyIsICJ0b3BMZWZ0IiwgIlBJIiwgImJvdHRvbUxlZnQiLCAiSEFMRl9QSSIsICJib3R0b21SaWdodCIsICJ0b3BSaWdodCIsICJMSU5FX0hFSUdIVCIsICJGT05UX1NUWUxFIiwgInRvTGluZUhlaWdodCIsICJ2YWx1ZSIsICJzaXplIiwgIm1hdGNoZXMiLCAibWF0Y2giLCAibnVtYmVyT3JaZXJvIiwgInYiLCAiX3JlYWRWYWx1ZVRvUHJvcHMiLCAicHJvcHMiLCAicmV0IiwgIm9ialByb3BzIiwgImlzT2JqZWN0IiwgImtleXMiLCAiT2JqZWN0IiwgInJlYWQiLCAicHJvcCIsICJ2YWx1ZU9yRGVmYXVsdCIsICJ0b1RSQkwiLCAidG9UUkJMQ29ybmVycyIsICJ0b1BhZGRpbmciLCAib2JqIiwgInRvRm9udCIsICJvcHRpb25zIiwgImZhbGxiYWNrIiwgImRlZmF1bHRzIiwgInBhcnNlSW50IiwgInN0eWxlIiwgImNvbnNvbGUiLCAid2FybiIsICJ1bmRlZmluZWQiLCAiZmFtaWx5IiwgIndlaWdodCIsICJ0b0ZvbnRTdHJpbmciLCAicmVzb2x2ZSIsICJpbnB1dHMiLCAiY29udGV4dCIsICJpbmRleCIsICJpbmZvIiwgImNhY2hlYWJsZSIsICJpbGVuIiwgIl9hZGRHcmFjZSIsICJtaW5tYXgiLCAiZ3JhY2UiLCAiYmVnaW5BdFplcm8iLCAibWluIiwgIm1heCIsICJjaGFuZ2UiLCAidG9EaW1lbnNpb24iLCAia2VlcFplcm8iLCAiYWRkIiwgIk1hdGgiLCAiYWJzIiwgImNyZWF0ZUNvbnRleHQiLCAicGFyZW50Q29udGV4dCIsICJhc3NpZ24iLCAiY3JlYXRlIiwgIl9jcmVhdGVSZXNvbHZlciIsICJzY29wZXMiLCAicHJlZml4ZXMiLCAicm9vdFNjb3BlcyIsICJnZXRUYXJnZXQiLCAiZmluYWxSb290U2NvcGVzIiwgIl9yZXNvbHZlIiwgImNhY2hlIiwgIlN5bWJvbCIsICJ0b1N0cmluZ1RhZyIsICJfY2FjaGVhYmxlIiwgIl9zY29wZXMiLCAiX3Jvb3RTY29wZXMiLCAiX2ZhbGxiYWNrIiwgIl9nZXRUYXJnZXQiLCAib3ZlcnJpZGUiLCAic2NvcGUiLCAiUHJveHkiLCAiZGVsZXRlUHJvcGVydHkiLCAidGFyZ2V0IiwgIl9rZXlzIiwgImdldCIsICJfY2FjaGVkIiwgIl9yZXNvbHZlV2l0aFByZWZpeGVzIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJSZWZsZWN0IiwgImdldFByb3RvdHlwZU9mIiwgImhhcyIsICJnZXRLZXlzRnJvbUFsbFNjb3BlcyIsICJpbmNsdWRlcyIsICJvd25LZXlzIiwgInNldCIsICJzdG9yYWdlIiwgIl9zdG9yYWdlIiwgIl9hdHRhY2hDb250ZXh0IiwgInByb3h5IiwgInN1YlByb3h5IiwgImRlc2NyaXB0b3JEZWZhdWx0cyIsICJfcHJveHkiLCAiX2NvbnRleHQiLCAiX3N1YlByb3h5IiwgIl9zdGFjayIsICJTZXQiLCAiX2Rlc2NyaXB0b3JzIiwgInNldENvbnRleHQiLCAicmVjZWl2ZXIiLCAiX3Jlc29sdmVXaXRoQ29udGV4dCIsICJhbGxLZXlzIiwgImVudW1lcmFibGUiLCAiY29uZmlndXJhYmxlIiwgInNjcmlwdGFibGUiLCAiaW5kZXhhYmxlIiwgIl9zY3JpcHRhYmxlIiwgIl9pbmRleGFibGUiLCAiX2FsbEtleXMiLCAiaXNTY3JpcHRhYmxlIiwgImlzRnVuY3Rpb24iLCAiaXNJbmRleGFibGUiLCAicmVhZEtleSIsICJwcmVmaXgiLCAibmFtZSIsICJfY2FwaXRhbGl6ZSIsICJuZWVkc1N1YlJlc29sdmVyIiwgImNvbnN0cnVjdG9yIiwgInByb3RvdHlwZSIsICJoYXNPd25Qcm9wZXJ0eSIsICJjYWxsIiwgImRlc2NyaXB0b3JzIiwgIl9yZXNvbHZlU2NyaXB0YWJsZSIsICJfcmVzb2x2ZUFycmF5IiwgImdldFZhbHVlIiwgIkVycm9yIiwgIkFycmF5IiwgImZyb20iLCAiam9pbiIsICJkZWxldGUiLCAiY3JlYXRlU3ViUmVzb2x2ZXIiLCAiYXJyIiwgImZpbHRlciIsICJzIiwgIml0ZW0iLCAicmVzb2x2ZXIiLCAicHVzaCIsICJyZXNvbHZlRmFsbGJhY2siLCAiZ2V0U2NvcGUiLCAia2V5IiwgInBhcmVudCIsICJyZXNvbHZlT2JqZWN0S2V5IiwgImFkZFNjb3BlcyIsICJwYXJlbnRTY29wZXMiLCAicGFyZW50RmFsbGJhY2siLCAiYWxsU2NvcGVzIiwgImFkZFNjb3Blc0Zyb21LZXkiLCAic3ViR2V0VGFyZ2V0IiwgInJlc29sdmVLZXlzRnJvbUFsbFNjb3BlcyIsICJrIiwgInN0YXJ0c1dpdGgiLCAiRVBTSUxPTiIsICJOdW1iZXIiLCAiX2lzRG9tU3VwcG9ydGVkIiwgIndpbmRvdyIsICJkb2N1bWVudCIsICJfZ2V0UGFyZW50Tm9kZSIsICJkb21Ob2RlIiwgInBhcmVudCIsICJwYXJlbnROb2RlIiwgInRvU3RyaW5nIiwgImhvc3QiLCAicGFyc2VNYXhTdHlsZSIsICJzdHlsZVZhbHVlIiwgIm5vZGUiLCAicGFyZW50UHJvcGVydHkiLCAidmFsdWVJblBpeGVscyIsICJwYXJzZUludCIsICJpbmRleE9mIiwgImdldENvbXB1dGVkU3R5bGUiLCAiZWxlbWVudCIsICJvd25lckRvY3VtZW50IiwgImRlZmF1bHRWaWV3IiwgImdldFN0eWxlIiwgImVsIiwgInByb3BlcnR5IiwgImdldFByb3BlcnR5VmFsdWUiLCAicG9zaXRpb25zIiwgImdldFBvc2l0aW9uZWRTdHlsZSIsICJzdHlsZXMiLCAic3R5bGUiLCAic3VmZml4IiwgInJlc3VsdCIsICJpIiwgInBvcyIsICJwYXJzZUZsb2F0IiwgIndpZHRoIiwgImxlZnQiLCAicmlnaHQiLCAiaGVpZ2h0IiwgInRvcCIsICJib3R0b20iLCAidXNlT2Zmc2V0UG9zIiwgIngiLCAieSIsICJ0YXJnZXQiLCAic2hhZG93Um9vdCIsICJnZXRDYW52YXNQb3NpdGlvbiIsICJlIiwgImNhbnZhcyIsICJ0b3VjaGVzIiwgInNvdXJjZSIsICJsZW5ndGgiLCAib2Zmc2V0WCIsICJvZmZzZXRZIiwgImJveCIsICJyZWN0IiwgImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsICJjbGllbnRYIiwgImNsaWVudFkiLCAiZ2V0UmVsYXRpdmVQb3NpdGlvbiIsICJldmVudCIsICJjaGFydCIsICJjdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyIsICJib3JkZXJCb3giLCAiYm94U2l6aW5nIiwgInBhZGRpbmdzIiwgImJvcmRlcnMiLCAieE9mZnNldCIsICJ5T2Zmc2V0IiwgIk1hdGgiLCAicm91bmQiLCAiZ2V0Q29udGFpbmVyU2l6ZSIsICJtYXhXaWR0aCIsICJtYXhIZWlnaHQiLCAidW5kZWZpbmVkIiwgImNvbnRhaW5lciIsICJjbGllbnRXaWR0aCIsICJjbGllbnRIZWlnaHQiLCAiY29udGFpbmVyU3R5bGUiLCAiY29udGFpbmVyQm9yZGVyIiwgImNvbnRhaW5lclBhZGRpbmciLCAiSU5GSU5JVFkiLCAicm91bmQxIiwgInYiLCAiZ2V0TWF4aW11bVNpemUiLCAiYmJXaWR0aCIsICJiYkhlaWdodCIsICJhc3BlY3RSYXRpbyIsICJtYXJnaW5zIiwgImNvbnRhaW5lclNpemUiLCAibWF4IiwgIm1pbiIsICJtYWludGFpbkhlaWdodCIsICJmbG9vciIsICJyZXRpbmFTY2FsZSIsICJmb3JjZVJhdGlvIiwgImZvcmNlU3R5bGUiLCAicGl4ZWxSYXRpbyIsICJkZXZpY2VIZWlnaHQiLCAiZGV2aWNlV2lkdGgiLCAiY3R4IiwgInNldFRyYW5zZm9ybSIsICJzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zIiwgInBhc3NpdmVTdXBwb3J0ZWQiLCAib3B0aW9ucyIsICJwYXNzaXZlIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJyZWFkVXNlZFNpemUiLCAidmFsdWUiLCAibWF0Y2hlcyIsICJtYXRjaCIsICJnZXRSaWdodFRvTGVmdEFkYXB0ZXIiLCAicmVjdFgiLCAid2lkdGgiLCAieCIsICJzZXRXaWR0aCIsICJ3IiwgInRleHRBbGlnbiIsICJhbGlnbiIsICJ4UGx1cyIsICJ2YWx1ZSIsICJsZWZ0Rm9yTHRyIiwgIml0ZW1XaWR0aCIsICJnZXRMZWZ0VG9SaWdodEFkYXB0ZXIiLCAiX2l0ZW1XaWR0aCIsICJnZXRSdGxBZGFwdGVyIiwgInJ0bCIsICJvdmVycmlkZVRleHREaXJlY3Rpb24iLCAiY3R4IiwgImRpcmVjdGlvbiIsICJzdHlsZSIsICJvcmlnaW5hbCIsICJjYW52YXMiLCAiZ2V0UHJvcGVydHlWYWx1ZSIsICJnZXRQcm9wZXJ0eVByaW9yaXR5IiwgInNldFByb3BlcnR5IiwgInByZXZUZXh0RGlyZWN0aW9uIiwgInJlc3RvcmVUZXh0RGlyZWN0aW9uIiwgInVuZGVmaW5lZCIsICJBbmltYXRvciIsICJjb25zdHJ1Y3RvciIsICJfcmVxdWVzdCIsICJfY2hhcnRzIiwgIk1hcCIsICJfcnVubmluZyIsICJfbGFzdERhdGUiLCAidW5kZWZpbmVkIiwgIl9ub3RpZnkiLCAiY2hhcnQiLCAiYW5pbXMiLCAiZGF0ZSIsICJ0eXBlIiwgImNhbGxiYWNrcyIsICJsaXN0ZW5lcnMiLCAibnVtU3RlcHMiLCAiZHVyYXRpb24iLCAiZm9yRWFjaCIsICJmbiIsICJpbml0aWFsIiwgImN1cnJlbnRTdGVwIiwgIk1hdGgiLCAibWluIiwgInN0YXJ0IiwgIl9yZWZyZXNoIiwgInJlcXVlc3RBbmltRnJhbWUiLCAiY2FsbCIsICJ3aW5kb3ciLCAiX3VwZGF0ZSIsICJEYXRlIiwgIm5vdyIsICJyZW1haW5pbmciLCAicnVubmluZyIsICJpdGVtcyIsICJsZW5ndGgiLCAiaSIsICJkcmF3IiwgIml0ZW0iLCAiX2FjdGl2ZSIsICJfdG90YWwiLCAidGljayIsICJwb3AiLCAiX2dldEFuaW1zIiwgImNoYXJ0cyIsICJnZXQiLCAiY29tcGxldGUiLCAicHJvZ3Jlc3MiLCAic2V0IiwgImxpc3RlbiIsICJldmVudCIsICJjYiIsICJwdXNoIiwgImFkZCIsICJoYXMiLCAicmVkdWNlIiwgImFjYyIsICJjdXIiLCAibWF4IiwgIl9kdXJhdGlvbiIsICJzdG9wIiwgImNhbmNlbCIsICJyZW1vdmUiLCAiZGVsZXRlIiwgInRyYW5zcGFyZW50IiwgImludGVycG9sYXRvcnMiLCAiYm9vbGVhbiIsICJmcm9tIiwgInRvIiwgImZhY3RvciIsICJjb2xvciIsICJjMCIsICJoZWxwZXJzQ29sb3IiLCAiYzEiLCAidmFsaWQiLCAibWl4IiwgImhleFN0cmluZyIsICJudW1iZXIiLCAiQW5pbWF0aW9uIiwgImNmZyIsICJ0YXJnZXQiLCAicHJvcCIsICJjdXJyZW50VmFsdWUiLCAicmVzb2x2ZSIsICJfZm4iLCAiX2Vhc2luZyIsICJlZmZlY3RzIiwgImVhc2luZyIsICJsaW5lYXIiLCAiX3N0YXJ0IiwgImZsb29yIiwgImRlbGF5IiwgIl9sb29wIiwgImxvb3AiLCAiX3RhcmdldCIsICJfcHJvcCIsICJfZnJvbSIsICJfdG8iLCAiX3Byb21pc2VzIiwgImFjdGl2ZSIsICJ1cGRhdGUiLCAiZWxhcHNlZCIsICJyZW1haW4iLCAid2FpdCIsICJwcm9taXNlcyIsICJQcm9taXNlIiwgInJlcyIsICJyZWoiLCAicmVzb2x2ZWQiLCAibWV0aG9kIiwgIkFuaW1hdGlvbnMiLCAiY29uZmlnIiwgIl9jaGFydCIsICJfcHJvcGVydGllcyIsICJjb25maWd1cmUiLCAiaXNPYmplY3QiLCAiYW5pbWF0aW9uT3B0aW9ucyIsICJPYmplY3QiLCAia2V5cyIsICJkZWZhdWx0cyIsICJhbmltYXRpb24iLCAiYW5pbWF0ZWRQcm9wcyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImtleSIsICJvcHRpb24iLCAiaXNBcnJheSIsICJwcm9wZXJ0aWVzIiwgIl9hbmltYXRlT3B0aW9ucyIsICJ2YWx1ZXMiLCAibmV3T3B0aW9ucyIsICJvcHRpb25zIiwgInJlc29sdmVUYXJnZXRPcHRpb25zIiwgImFuaW1hdGlvbnMiLCAiX2NyZWF0ZUFuaW1hdGlvbnMiLCAiJHNoYXJlZCIsICJhd2FpdEFsbCIsICIkYW5pbWF0aW9ucyIsICJ0aGVuIiwgInByb3BzIiwgImNoYXJBdCIsICJ2YWx1ZSIsICJzaXplIiwgImFzc2lnbiIsICJhbmltYXRvciIsICJhbmltIiwgImFsbCIsICJzY2FsZUNsaXAiLCAic2NhbGUiLCAiYWxsb3dlZE92ZXJmbG93IiwgIm9wdHMiLCAicmV2ZXJzZSIsICJlbmQiLCAiZGVmYXVsdENsaXAiLCAieFNjYWxlIiwgInlTY2FsZSIsICJ4IiwgInkiLCAidG9wIiwgInJpZ2h0IiwgImJvdHRvbSIsICJsZWZ0IiwgInRvQ2xpcCIsICJ0IiwgInIiLCAiYiIsICJsIiwgImRpc2FibGVkIiwgImdldFNvcnRlZERhdGFzZXRJbmRpY2VzIiwgImZpbHRlclZpc2libGUiLCAibWV0YXNldHMiLCAiX2dldFNvcnRlZERhdGFzZXRNZXRhcyIsICJpbGVuIiwgImluZGV4IiwgImFwcGx5U3RhY2siLCAic3RhY2siLCAiZHNJbmRleCIsICJzaW5nbGVNb2RlIiwgIm1vZGUiLCAiZGF0YXNldEluZGV4IiwgIm90aGVyVmFsdWUiLCAiaXNGaW5pdGUiLCAic2lnbiIsICJjb252ZXJ0T2JqZWN0RGF0YVRvQXJyYXkiLCAiZGF0YSIsICJtZXRhIiwgImlTY2FsZSIsICJ2U2NhbGUiLCAiaUF4aXNLZXkiLCAiYXhpcyIsICJ2QXhpc0tleSIsICJhZGF0YSIsICJBcnJheSIsICJpc1N0YWNrZWQiLCAic3RhY2tlZCIsICJnZXRTdGFja0tleSIsICJpbmRleFNjYWxlIiwgInZhbHVlU2NhbGUiLCAiaWQiLCAiZ2V0VXNlckJvdW5kcyIsICJtaW5EZWZpbmVkIiwgIm1heERlZmluZWQiLCAiTnVtYmVyIiwgIk5FR0FUSVZFX0lORklOSVRZIiwgIlBPU0lUSVZFX0lORklOSVRZIiwgImdldE9yQ3JlYXRlU3RhY2siLCAic3RhY2tzIiwgInN0YWNrS2V5IiwgImluZGV4VmFsdWUiLCAic3ViU3RhY2siLCAiZ2V0TGFzdEluZGV4SW5TdGFjayIsICJwb3NpdGl2ZSIsICJnZXRNYXRjaGluZ1Zpc2libGVNZXRhcyIsICJ1cGRhdGVTdGFja3MiLCAiY29udHJvbGxlciIsICJwYXJzZWQiLCAiX2NhY2hlZE1ldGEiLCAiX3N0YWNrcyIsICJpQXhpcyIsICJ2QXhpcyIsICJpdGVtU3RhY2tzIiwgIl90b3AiLCAiX2JvdHRvbSIsICJ2aXN1YWxWYWx1ZXMiLCAiX3Zpc3VhbFZhbHVlcyIsICJnZXRGaXJzdFNjYWxlSWQiLCAic2NhbGVzIiwgImZpbHRlciIsICJzaGlmdCIsICJjcmVhdGVEYXRhc2V0Q29udGV4dCIsICJwYXJlbnQiLCAiY3JlYXRlQ29udGV4dCIsICJkYXRhc2V0IiwgImNyZWF0ZURhdGFDb250ZXh0IiwgImVsZW1lbnQiLCAiZGF0YUluZGV4IiwgInJhdyIsICJjbGVhclN0YWNrcyIsICJfcGFyc2VkIiwgImlzRGlyZWN0VXBkYXRlTW9kZSIsICJjbG9uZUlmTm90U2hhcmVkIiwgImNhY2hlZCIsICJzaGFyZWQiLCAiY3JlYXRlU3RhY2siLCAiY2FuU3RhY2siLCAiaGlkZGVuIiwgIl9zdGFja2VkIiwgIkRhdGFzZXRDb250cm9sbGVyIiwgIl9jdHgiLCAiY3R4IiwgIl9jYWNoZWREYXRhT3B0cyIsICJnZXRNZXRhIiwgIl90eXBlIiwgIl9wYXJzaW5nIiwgIl9kYXRhIiwgIl9vYmplY3REYXRhIiwgIl9zaGFyZWRPcHRpb25zIiwgIl9kcmF3U3RhcnQiLCAiX2RyYXdDb3VudCIsICJlbmFibGVPcHRpb25TaGFyaW5nIiwgInN1cHBvcnRzRGVjaW1hdGlvbiIsICIkY29udGV4dCIsICJfc3luY0xpc3QiLCAiZGF0YXNldEVsZW1lbnRUeXBlIiwgImRhdGFFbGVtZW50VHlwZSIsICJpbml0aWFsaXplIiwgImxpbmtTY2FsZXMiLCAiYWRkRWxlbWVudHMiLCAiZmlsbCIsICJpc1BsdWdpbkVuYWJsZWQiLCAiY29uc29sZSIsICJ3YXJuIiwgInVwZGF0ZUluZGV4IiwgImdldERhdGFzZXQiLCAiY2hvb3NlSWQiLCAieGlkIiwgInhBeGlzSUQiLCAidmFsdWVPckRlZmF1bHQiLCAieWlkIiwgInlBeGlzSUQiLCAicmlkIiwgInJBeGlzSUQiLCAiaW5kZXhBeGlzIiwgImlpZCIsICJpQXhpc0lEIiwgInZpZCIsICJ2QXhpc0lEIiwgImdldFNjYWxlRm9ySWQiLCAiclNjYWxlIiwgImRhdGFzZXRzIiwgImdldERhdGFzZXRNZXRhIiwgInNjYWxlSUQiLCAiX2dldE90aGVyU2NhbGUiLCAicmVzZXQiLCAiX2Rlc3Ryb3kiLCAidW5saXN0ZW5BcnJheUV2ZW50cyIsICJfZGF0YUNoZWNrIiwgImlzRXh0ZW5zaWJsZSIsICJsaXN0ZW5BcnJheUV2ZW50cyIsICJidWlsZE9yVXBkYXRlRWxlbWVudHMiLCAicmVzZXROZXdFbGVtZW50cyIsICJzdGFja0NoYW5nZWQiLCAib2xkU3RhY2tlZCIsICJfcmVzeW5jRWxlbWVudHMiLCAic2NvcGVLZXlzIiwgImRhdGFzZXRTY29wZUtleXMiLCAic2NvcGVzIiwgImdldE9wdGlvblNjb3BlcyIsICJjcmVhdGVSZXNvbHZlciIsICJnZXRDb250ZXh0IiwgInBhcnNpbmciLCAicGFyc2UiLCAiY291bnQiLCAic29ydGVkIiwgIl9zb3J0ZWQiLCAicHJldiIsICJwYXJzZUFycmF5RGF0YSIsICJwYXJzZU9iamVjdERhdGEiLCAicGFyc2VQcmltaXRpdmVEYXRhIiwgImlzTm90SW5PcmRlckNvbXBhcmVkVG9QcmV2IiwgImxhYmVscyIsICJnZXRMYWJlbHMiLCAic2luZ2xlU2NhbGUiLCAieEF4aXNLZXkiLCAieUF4aXNLZXkiLCAicmVzb2x2ZU9iamVjdEtleSIsICJnZXRQYXJzZWQiLCAiZ2V0RGF0YUVsZW1lbnQiLCAidXBkYXRlUmFuZ2VGcm9tUGFyc2VkIiwgInJhbmdlIiwgInBhcnNlZFZhbHVlIiwgIk5hTiIsICJnZXRNaW5NYXgiLCAib3RoZXJTY2FsZSIsICJvdGhlck1pbiIsICJvdGhlck1heCIsICJfc2tpcCIsICJnZXRBbGxQYXJzZWRWYWx1ZXMiLCAiZ2V0TWF4T3ZlcmZsb3ciLCAiZ2V0TGFiZWxBbmRWYWx1ZSIsICJsYWJlbCIsICJnZXRMYWJlbEZvclZhbHVlIiwgIl9jbGlwIiwgImNsaXAiLCAiZWxlbWVudHMiLCAiYXJlYSIsICJjaGFydEFyZWEiLCAiZHJhd0FjdGl2ZUVsZW1lbnRzT25Ub3AiLCAiZ2V0U3R5bGUiLCAicmVzb2x2ZURhdGFzZXRFbGVtZW50T3B0aW9ucyIsICJyZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zIiwgImNvbnRleHQiLCAiX3Jlc29sdmVFbGVtZW50T3B0aW9ucyIsICJlbGVtZW50VHlwZSIsICJjYWNoZSIsICJjYWNoZUtleSIsICJzaGFyaW5nIiwgImRlZmluZWQiLCAiZGF0YXNldEVsZW1lbnRTY29wZUtleXMiLCAicHJlZml4ZXMiLCAibmFtZXMiLCAicmVzb2x2ZU5hbWVkT3B0aW9ucyIsICJmcmVlemUiLCAiX3Jlc29sdmVBbmltYXRpb25zIiwgInRyYW5zaXRpb24iLCAiZGF0YXNldEFuaW1hdGlvblNjb3BlS2V5cyIsICJfY2FjaGVhYmxlIiwgImdldFNoYXJlZE9wdGlvbnMiLCAiaW5jbHVkZU9wdGlvbnMiLCAic2hhcmVkT3B0aW9ucyIsICJfYW5pbWF0aW9uc0Rpc2FibGVkIiwgIl9nZXRTaGFyZWRPcHRpb25zIiwgImZpcnN0T3B0cyIsICJwcmV2aW91c2x5U2hhcmVkT3B0aW9ucyIsICJ1cGRhdGVTaGFyZWRPcHRpb25zIiwgInVwZGF0ZUVsZW1lbnQiLCAiX3NldFN0eWxlIiwgInJlbW92ZUhvdmVyU3R5bGUiLCAic2V0SG92ZXJTdHlsZSIsICJfcmVtb3ZlRGF0YXNldEhvdmVyU3R5bGUiLCAiX3NldERhdGFzZXRIb3ZlclN0eWxlIiwgImFyZzEiLCAiYXJnMiIsICJudW1NZXRhIiwgIm51bURhdGEiLCAiX2luc2VydEVsZW1lbnRzIiwgIl9yZW1vdmVFbGVtZW50cyIsICJtb3ZlIiwgImFyciIsICJ1cGRhdGVFbGVtZW50cyIsICJyZW1vdmVkIiwgInNwbGljZSIsICJfc3luYyIsICJhcmdzIiwgIl9kYXRhQ2hhbmdlcyIsICJfb25EYXRhUHVzaCIsICJhcmd1bWVudHMiLCAiX29uRGF0YVBvcCIsICJfb25EYXRhU2hpZnQiLCAiX29uRGF0YVNwbGljZSIsICJuZXdDb3VudCIsICJfb25EYXRhVW5zaGlmdCIsICJnZXRBbGxTY2FsZVZhbHVlcyIsICJfY2FjaGUiLCAiJGJhciIsICJ2aXNpYmxlTWV0YXMiLCAiY29uY2F0IiwgIl9hcnJheVVuaXF1ZSIsICJzb3J0IiwgImEiLCAiY29tcHV0ZU1pblNhbXBsZVNpemUiLCAiX2xlbmd0aCIsICJjdXJyIiwgInVwZGF0ZU1pbkFuZFByZXYiLCAiYWJzIiwgImdldFBpeGVsRm9yVmFsdWUiLCAidGlja3MiLCAiZ2V0UGl4ZWxGb3JUaWNrIiwgImNvbXB1dGVGaXRDYXRlZ29yeVRyYWl0cyIsICJydWxlciIsICJzdGFja0NvdW50IiwgInRoaWNrbmVzcyIsICJiYXJUaGlja25lc3MiLCAicmF0aW8iLCAiaXNOdWxsT3JVbmRlZiIsICJjYXRlZ29yeVBlcmNlbnRhZ2UiLCAiYmFyUGVyY2VudGFnZSIsICJjaHVuayIsICJwaXhlbHMiLCAiY29tcHV0ZUZsZXhDYXRlZ29yeVRyYWl0cyIsICJuZXh0IiwgInBlcmNlbnQiLCAicGFyc2VGbG9hdEJhciIsICJlbnRyeSIsICJzdGFydFZhbHVlIiwgImVuZFZhbHVlIiwgImJhclN0YXJ0IiwgImJhckVuZCIsICJfY3VzdG9tIiwgInBhcnNlVmFsdWUiLCAicGFyc2VBcnJheU9yUHJpbWl0aXZlIiwgImlzRmxvYXRCYXIiLCAiY3VzdG9tIiwgImJhclNpZ24iLCAiYWN0dWFsQmFzZSIsICJpc0hvcml6b250YWwiLCAiYm9yZGVyUHJvcHMiLCAiaG9yaXpvbnRhbCIsICJiYXNlIiwgInNldEJvcmRlclNraXBwZWQiLCAiZWRnZSIsICJib3JkZXJTa2lwcGVkIiwgImVuYWJsZUJvcmRlclJhZGl1cyIsICJwYXJzZUVkZ2UiLCAic3dhcCIsICJzdGFydEVuZCIsICJvcmlnIiwgInYxIiwgInYyIiwgInYiLCAic2V0SW5mbGF0ZUFtb3VudCIsICJpbmZsYXRlQW1vdW50IiwgIkJhckNvbnRyb2xsZXIiLCAib2JqIiwgImJhcnMiLCAiZ2V0QmFzZVBpeGVsIiwgIl9nZXRSdWxlciIsICJ2cGl4ZWxzIiwgImhlYWQiLCAiX2NhbGN1bGF0ZUJhclZhbHVlUGl4ZWxzIiwgImlwaXhlbHMiLCAiX2NhbGN1bGF0ZUJhckluZGV4UGl4ZWxzIiwgImNlbnRlciIsICJoZWlnaHQiLCAid2lkdGgiLCAiX2dldFN0YWNrcyIsICJsYXN0IiwgImdyb3VwZWQiLCAiY3VycmVudFBhcnNlZCIsICJpU2NhbGVWYWx1ZSIsICJza2lwTnVsbCIsICJmaW5kIiwgInZhbCIsICJpc05hTiIsICJpbmRleE9mIiwgIl9nZXRTdGFja0NvdW50IiwgIl9nZXRTdGFja0luZGV4IiwgIm5hbWUiLCAiX3N0YXJ0UGl4ZWwiLCAiX2VuZFBpeGVsIiwgImJhc2VWYWx1ZSIsICJtaW5CYXJMZW5ndGgiLCAiZmxvYXRpbmciLCAiZ2V0RGF0YVZpc2liaWxpdHkiLCAic3RhcnRQaXhlbCIsICJnZXRQaXhlbEZvckRlY2ltYWwiLCAiZW5kUGl4ZWwiLCAiZ2V0VmFsdWVGb3JQaXhlbCIsICJoYWxmR3JpZCIsICJnZXRMaW5lV2lkdGhGb3JWYWx1ZSIsICJtYXhCYXJUaGlja25lc3MiLCAiSW5maW5pdHkiLCAic3RhY2tJbmRleCIsICJyZWN0cyIsICJudW1iZXJzIiwgIm92ZXJyaWRlcyIsICJfaW5kZXhfIiwgIm9mZnNldCIsICJncmlkIiwgIl92YWx1ZV8iLCAiYmVnaW5BdFplcm8iLCAiZ2V0UmF0aW9BbmRPZmZzZXQiLCAicm90YXRpb24iLCAiY2lyY3VtZmVyZW5jZSIsICJjdXRvdXQiLCAicmF0aW9YIiwgInJhdGlvWSIsICJvZmZzZXRYIiwgIm9mZnNldFkiLCAiVEFVIiwgInN0YXJ0QW5nbGUiLCAiZW5kQW5nbGUiLCAic3RhcnRYIiwgIk1hdGgiLCAiY29zIiwgInN0YXJ0WSIsICJzaW4iLCAiZW5kWCIsICJlbmRZIiwgImNhbGNNYXgiLCAiYW5nbGUiLCAiYSIsICJiIiwgIl9hbmdsZUJldHdlZW4iLCAibWF4IiwgImNhbGNNaW4iLCAibWluIiwgIm1heFgiLCAibWF4WSIsICJIQUxGX1BJIiwgIm1pblgiLCAiUEkiLCAibWluWSIsICJEb3VnaG51dENvbnRyb2xsZXIiLCAiRGF0YXNldENvbnRyb2xsZXIiLCAiY29uc3RydWN0b3IiLCAiY2hhcnQiLCAiZGF0YXNldEluZGV4IiwgImVuYWJsZU9wdGlvblNoYXJpbmciLCAiaW5uZXJSYWRpdXMiLCAidW5kZWZpbmVkIiwgIm91dGVyUmFkaXVzIiwgImxpbmtTY2FsZXMiLCAicGFyc2UiLCAic3RhcnQiLCAiY291bnQiLCAiZGF0YSIsICJnZXREYXRhc2V0IiwgIm1ldGEiLCAiX2NhY2hlZE1ldGEiLCAiX3BhcnNpbmciLCAiX3BhcnNlZCIsICJnZXR0ZXIiLCAiaSIsICJpc09iamVjdCIsICJrZXkiLCAicmVzb2x2ZU9iamVjdEtleSIsICJpbGVuIiwgIl9nZXRSb3RhdGlvbiIsICJ0b1JhZGlhbnMiLCAib3B0aW9ucyIsICJfZ2V0Q2lyY3VtZmVyZW5jZSIsICJfZ2V0Um90YXRpb25FeHRlbnRzIiwgImRhdGFzZXRzIiwgImxlbmd0aCIsICJpc0RhdGFzZXRWaXNpYmxlIiwgImdldERhdGFzZXRNZXRhIiwgInR5cGUiLCAiX3R5cGUiLCAiY29udHJvbGxlciIsICJ1cGRhdGUiLCAibW9kZSIsICJjaGFydEFyZWEiLCAiYXJjcyIsICJzcGFjaW5nIiwgImdldE1heEJvcmRlcldpZHRoIiwgImdldE1heE9mZnNldCIsICJtYXhTaXplIiwgIndpZHRoIiwgImhlaWdodCIsICJ0b1BlcmNlbnRhZ2UiLCAiY2hhcnRXZWlnaHQiLCAiX2dldFJpbmdXZWlnaHQiLCAiaW5kZXgiLCAibWF4V2lkdGgiLCAibWF4SGVpZ2h0IiwgIm1heFJhZGl1cyIsICJ0b0RpbWVuc2lvbiIsICJyYWRpdXMiLCAicmFkaXVzTGVuZ3RoIiwgIl9nZXRWaXNpYmxlRGF0YXNldFdlaWdodFRvdGFsIiwgInRvdGFsIiwgImNhbGN1bGF0ZVRvdGFsIiwgIl9nZXRSaW5nV2VpZ2h0T2Zmc2V0IiwgInVwZGF0ZUVsZW1lbnRzIiwgIl9jaXJjdW1mZXJlbmNlIiwgInJlc2V0IiwgIm9wdHMiLCAiYW5pbWF0aW9uIiwgImFuaW1hdGVSb3RhdGUiLCAiZ2V0RGF0YVZpc2liaWxpdHkiLCAiaGlkZGVuIiwgImNhbGN1bGF0ZUNpcmN1bWZlcmVuY2UiLCAiYW5pbWF0aW9uT3B0cyIsICJjZW50ZXJYIiwgImxlZnQiLCAicmlnaHQiLCAiY2VudGVyWSIsICJ0b3AiLCAiYm90dG9tIiwgImFuaW1hdGVTY2FsZSIsICJzaGFyZWRPcHRpb25zIiwgImluY2x1ZGVPcHRpb25zIiwgIl9nZXRTaGFyZWRPcHRpb25zIiwgImFyYyIsICJwcm9wZXJ0aWVzIiwgIngiLCAieSIsICJyZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zIiwgImFjdGl2ZSIsICJ1cGRhdGVFbGVtZW50IiwgIm1ldGFEYXRhIiwgInZhbHVlIiwgImlzTmFOIiwgImFicyIsICJnZXRMYWJlbEFuZFZhbHVlIiwgImxhYmVscyIsICJmb3JtYXROdW1iZXIiLCAibG9jYWxlIiwgImxhYmVsIiwgImJvcmRlckFsaWduIiwgImJvcmRlcldpZHRoIiwgImhvdmVyQm9yZGVyV2lkdGgiLCAib2Zmc2V0IiwgImhvdmVyT2Zmc2V0IiwgInJpbmdXZWlnaHRPZmZzZXQiLCAidmFsdWVPckRlZmF1bHQiLCAid2VpZ2h0IiwgImlkIiwgImRlZmF1bHRzIiwgImRhdGFzZXRFbGVtZW50VHlwZSIsICJkYXRhRWxlbWVudFR5cGUiLCAiYW5pbWF0aW9ucyIsICJudW1iZXJzIiwgImluZGV4QXhpcyIsICJkZXNjcmlwdG9ycyIsICJfc2NyaXB0YWJsZSIsICJuYW1lIiwgIl9pbmRleGFibGUiLCAic3RhcnRzV2l0aCIsICJvdmVycmlkZXMiLCAiYXNwZWN0UmF0aW8iLCAicGx1Z2lucyIsICJsZWdlbmQiLCAiZ2VuZXJhdGVMYWJlbHMiLCAicG9pbnRTdHlsZSIsICJjb2xvciIsICJtYXAiLCAic3R5bGUiLCAiZ2V0U3R5bGUiLCAidGV4dCIsICJmaWxsU3R5bGUiLCAiYmFja2dyb3VuZENvbG9yIiwgInN0cm9rZVN0eWxlIiwgImJvcmRlckNvbG9yIiwgImZvbnRDb2xvciIsICJsaW5lV2lkdGgiLCAib25DbGljayIsICJlIiwgImxlZ2VuZEl0ZW0iLCAidG9nZ2xlRGF0YVZpc2liaWxpdHkiLCAiUGllQ29udHJvbGxlciIsICJEb3VnaG51dENvbnRyb2xsZXIiLCAiaWQiLCAiZGVmYXVsdHMiLCAiY3V0b3V0IiwgInJvdGF0aW9uIiwgImNpcmN1bWZlcmVuY2UiLCAicmFkaXVzIiwgImFic3RyYWN0IiwgIkVycm9yIiwgIkRhdGVBZGFwdGVyQmFzZSIsICJjb25zdHJ1Y3RvciIsICJvcHRpb25zIiwgIm92ZXJyaWRlIiwgIm1lbWJlcnMiLCAiT2JqZWN0IiwgImFzc2lnbiIsICJwcm90b3R5cGUiLCAiaW5pdCIsICJmb3JtYXRzIiwgInBhcnNlIiwgImZvcm1hdCIsICJhZGQiLCAiZGlmZiIsICJzdGFydE9mIiwgImVuZE9mIiwgIl9kYXRlIiwgImJpbmFyeVNlYXJjaCIsICJtZXRhc2V0IiwgImF4aXMiLCAidmFsdWUiLCAiaW50ZXJzZWN0IiwgImNvbnRyb2xsZXIiLCAiZGF0YSIsICJfc29ydGVkIiwgImlTY2FsZSIsICJfY2FjaGVkTWV0YSIsICJsZW5ndGgiLCAibG9va3VwTWV0aG9kIiwgIl9yZXZlcnNlUGl4ZWxzIiwgIl9ybG9va3VwQnlLZXkiLCAiX2xvb2t1cEJ5S2V5IiwgIl9zaGFyZWRPcHRpb25zIiwgImVsIiwgInJhbmdlIiwgImdldFJhbmdlIiwgInN0YXJ0IiwgImVuZCIsICJsbyIsICJoaSIsICJldmFsdWF0ZUludGVyYWN0aW9uSXRlbXMiLCAiY2hhcnQiLCAicG9zaXRpb24iLCAiaGFuZGxlciIsICJtZXRhc2V0cyIsICJnZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzIiwgImkiLCAiaWxlbiIsICJpbmRleCIsICJqIiwgImVsZW1lbnQiLCAic2tpcCIsICJnZXREaXN0YW5jZU1ldHJpY0ZvckF4aXMiLCAidXNlWCIsICJpbmRleE9mIiwgInVzZVkiLCAicHQxIiwgInB0MiIsICJkZWx0YVgiLCAiTWF0aCIsICJhYnMiLCAieCIsICJkZWx0YVkiLCAieSIsICJzcXJ0IiwgInBvdyIsICJnZXRJbnRlcnNlY3RJdGVtcyIsICJ1c2VGaW5hbFBvc2l0aW9uIiwgImluY2x1ZGVJbnZpc2libGUiLCAiaXRlbXMiLCAiaXNQb2ludEluQXJlYSIsICJldmFsdWF0aW9uRnVuYyIsICJkYXRhc2V0SW5kZXgiLCAiX2lzUG9pbnRJbkFyZWEiLCAiY2hhcnRBcmVhIiwgImluUmFuZ2UiLCAicHVzaCIsICJnZXROZWFyZXN0UmFkaWFsSXRlbXMiLCAic3RhcnRBbmdsZSIsICJlbmRBbmdsZSIsICJnZXRQcm9wcyIsICJhbmdsZSIsICJnZXRBbmdsZUZyb21Qb2ludCIsICJfYW5nbGVCZXR3ZWVuIiwgImdldE5lYXJlc3RDYXJ0ZXNpYW5JdGVtcyIsICJkaXN0YW5jZU1ldHJpYyIsICJtaW5EaXN0YW5jZSIsICJOdW1iZXIiLCAiUE9TSVRJVkVfSU5GSU5JVFkiLCAiY2VudGVyIiwgImdldENlbnRlclBvaW50IiwgInBvaW50SW5BcmVhIiwgImRpc3RhbmNlIiwgImdldE5lYXJlc3RJdGVtcyIsICJnZXRBeGlzSXRlbXMiLCAicmFuZ2VNZXRob2QiLCAiaW50ZXJzZWN0c0l0ZW0iLCAibW9kZXMiLCAiZSIsICJnZXRSZWxhdGl2ZVBvc2l0aW9uIiwgImVsZW1lbnRzIiwgImZvckVhY2giLCAibWV0YSIsICJkYXRhc2V0IiwgImdldERhdGFzZXRNZXRhIiwgInBvaW50IiwgIm5lYXJlc3QiLCAiU1RBVElDX1BPU0lUSU9OUyIsICJmaWx0ZXJCeVBvc2l0aW9uIiwgImFycmF5IiwgImZpbHRlciIsICJ2IiwgInBvcyIsICJmaWx0ZXJEeW5hbWljUG9zaXRpb25CeUF4aXMiLCAiYm94IiwgInNvcnRCeVdlaWdodCIsICJyZXZlcnNlIiwgInNvcnQiLCAiYSIsICJiIiwgInYwIiwgInYxIiwgIndlaWdodCIsICJ3cmFwQm94ZXMiLCAiYm94ZXMiLCAibGF5b3V0Qm94ZXMiLCAic3RhY2siLCAic3RhY2tXZWlnaHQiLCAiaG9yaXpvbnRhbCIsICJpc0hvcml6b250YWwiLCAiYnVpbGRTdGFja3MiLCAibGF5b3V0cyIsICJzdGFja3MiLCAid3JhcCIsICJpbmNsdWRlcyIsICJfc3RhY2siLCAiY291bnQiLCAicGxhY2VkIiwgInNpemUiLCAic2V0TGF5b3V0RGltcyIsICJwYXJhbXMiLCAidkJveE1heFdpZHRoIiwgImhCb3hNYXhIZWlnaHQiLCAibGF5b3V0IiwgImZ1bGxTaXplIiwgImZhY3RvciIsICJ3aWR0aCIsICJhdmFpbGFibGVXaWR0aCIsICJoZWlnaHQiLCAiYXZhaWxhYmxlSGVpZ2h0IiwgImJ1aWxkTGF5b3V0Qm94ZXMiLCAibGVmdCIsICJyaWdodCIsICJ0b3AiLCAiYm90dG9tIiwgImNlbnRlckhvcml6b250YWwiLCAiY2VudGVyVmVydGljYWwiLCAibGVmdEFuZFRvcCIsICJjb25jYXQiLCAicmlnaHRBbmRCb3R0b20iLCAidmVydGljYWwiLCAiZ2V0Q29tYmluZWRNYXgiLCAibWF4UGFkZGluZyIsICJtYXgiLCAidXBkYXRlTWF4UGFkZGluZyIsICJib3hQYWRkaW5nIiwgInVwZGF0ZURpbXMiLCAiaXNPYmplY3QiLCAiZ2V0UGFkZGluZyIsICJuZXdXaWR0aCIsICJvdXRlcldpZHRoIiwgIm5ld0hlaWdodCIsICJvdXRlckhlaWdodCIsICJ3aWR0aENoYW5nZWQiLCAidyIsICJoZWlnaHRDaGFuZ2VkIiwgImgiLCAic2FtZSIsICJvdGhlciIsICJoYW5kbGVNYXhQYWRkaW5nIiwgInVwZGF0ZVBvcyIsICJjaGFuZ2UiLCAiZ2V0TWFyZ2lucyIsICJtYXJnaW5Gb3JQb3NpdGlvbnMiLCAicG9zaXRpb25zIiwgIm1hcmdpbiIsICJmaXRCb3hlcyIsICJyZWZpdEJveGVzIiwgInJlZml0IiwgImNoYW5nZWQiLCAidXBkYXRlIiwgInNldEJveERpbXMiLCAicGxhY2VCb3hlcyIsICJ1c2VyUGFkZGluZyIsICJwYWRkaW5nIiwgImRlZmluZWQiLCAiYWRkQm94IiwgIml0ZW0iLCAiX2xheWVycyIsICJ6IiwgImRyYXciLCAicmVtb3ZlQm94IiwgImxheW91dEl0ZW0iLCAic3BsaWNlIiwgImNvbmZpZ3VyZSIsICJtaW5QYWRkaW5nIiwgInRvUGFkZGluZyIsICJ2ZXJ0aWNhbEJveGVzIiwgImhvcml6b250YWxCb3hlcyIsICJlYWNoIiwgImJlZm9yZUxheW91dCIsICJ2aXNpYmxlVmVydGljYWxCb3hDb3VudCIsICJyZWR1Y2UiLCAidG90YWwiLCAiZGlzcGxheSIsICJmcmVlemUiLCAiQmFzZVBsYXRmb3JtIiwgImFjcXVpcmVDb250ZXh0IiwgImNhbnZhcyIsICJhc3BlY3RSYXRpbyIsICJyZWxlYXNlQ29udGV4dCIsICJjb250ZXh0IiwgImFkZEV2ZW50TGlzdGVuZXIiLCAidHlwZSIsICJsaXN0ZW5lciIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgImdldERldmljZVBpeGVsUmF0aW8iLCAiZ2V0TWF4aW11bVNpemUiLCAiZmxvb3IiLCAiaXNBdHRhY2hlZCIsICJ1cGRhdGVDb25maWciLCAiY29uZmlnIiwgIkJhc2ljUGxhdGZvcm0iLCAiZ2V0Q29udGV4dCIsICJhbmltYXRpb24iLCAiRVhQQU5ET19LRVkiLCAiRVZFTlRfVFlQRVMiLCAidG91Y2hzdGFydCIsICJ0b3VjaG1vdmUiLCAidG91Y2hlbmQiLCAicG9pbnRlcmVudGVyIiwgInBvaW50ZXJkb3duIiwgInBvaW50ZXJtb3ZlIiwgInBvaW50ZXJ1cCIsICJwb2ludGVybGVhdmUiLCAicG9pbnRlcm91dCIsICJpc051bGxPckVtcHR5IiwgImluaXRDYW52YXMiLCAic3R5bGUiLCAicmVuZGVySGVpZ2h0IiwgImdldEF0dHJpYnV0ZSIsICJyZW5kZXJXaWR0aCIsICJpbml0aWFsIiwgImJveFNpemluZyIsICJkaXNwbGF5V2lkdGgiLCAicmVhZFVzZWRTaXplIiwgInVuZGVmaW5lZCIsICJkaXNwbGF5SGVpZ2h0IiwgImV2ZW50TGlzdGVuZXJPcHRpb25zIiwgInN1cHBvcnRzRXZlbnRMaXN0ZW5lck9wdGlvbnMiLCAicGFzc2l2ZSIsICJhZGRMaXN0ZW5lciIsICJub2RlIiwgInJlbW92ZUxpc3RlbmVyIiwgImZyb21OYXRpdmVFdmVudCIsICJldmVudCIsICJuYXRpdmUiLCAibm9kZUxpc3RDb250YWlucyIsICJub2RlTGlzdCIsICJjb250YWlucyIsICJjcmVhdGVBdHRhY2hPYnNlcnZlciIsICJvYnNlcnZlciIsICJNdXRhdGlvbk9ic2VydmVyIiwgImVudHJpZXMiLCAidHJpZ2dlciIsICJlbnRyeSIsICJhZGRlZE5vZGVzIiwgInJlbW92ZWROb2RlcyIsICJvYnNlcnZlIiwgImRvY3VtZW50IiwgImNoaWxkTGlzdCIsICJzdWJ0cmVlIiwgImNyZWF0ZURldGFjaE9ic2VydmVyIiwgImRycExpc3RlbmluZ0NoYXJ0cyIsICJNYXAiLCAib2xkRGV2aWNlUGl4ZWxSYXRpbyIsICJvbldpbmRvd1Jlc2l6ZSIsICJkcHIiLCAid2luZG93IiwgImRldmljZVBpeGVsUmF0aW8iLCAicmVzaXplIiwgImN1cnJlbnREZXZpY2VQaXhlbFJhdGlvIiwgImxpc3RlbkRldmljZVBpeGVsUmF0aW9DaGFuZ2VzIiwgInNldCIsICJ1bmxpc3RlbkRldmljZVBpeGVsUmF0aW9DaGFuZ2VzIiwgImRlbGV0ZSIsICJjcmVhdGVSZXNpemVPYnNlcnZlciIsICJjb250YWluZXIiLCAiX2dldFBhcmVudE5vZGUiLCAidGhyb3R0bGVkIiwgImNsaWVudFdpZHRoIiwgIlJlc2l6ZU9ic2VydmVyIiwgImNvbnRlbnRSZWN0IiwgInJlbGVhc2VPYnNlcnZlciIsICJkaXNjb25uZWN0IiwgImNyZWF0ZVByb3h5QW5kTGlzdGVuIiwgInByb3h5IiwgImN0eCIsICJEb21QbGF0Zm9ybSIsICJwcm9wIiwgImlzTnVsbE9yVW5kZWYiLCAicmVtb3ZlQXR0cmlidXRlIiwgInNldEF0dHJpYnV0ZSIsICJrZXlzIiwgImtleSIsICJwcm94aWVzIiwgIiRwcm94aWVzIiwgImhhbmRsZXJzIiwgImF0dGFjaCIsICJkZXRhY2giLCAiaXNDb25uZWN0ZWQiLCAiX2RldGVjdFBsYXRmb3JtIiwgIl9pc0RvbVN1cHBvcnRlZCIsICJPZmZzY3JlZW5DYW52YXMiLCAiRWxlbWVudCIsICJhY3RpdmUiLCAiJGFuaW1hdGlvbnMiLCAidG9vbHRpcFBvc2l0aW9uIiwgImhhc1ZhbHVlIiwgImlzTnVtYmVyIiwgInByb3BzIiwgImZpbmFsIiwgImFuaW1zIiwgInJldCIsICJfdG8iLCAiZGVmYXVsdHMiLCAiZGVmYXVsdFJvdXRlcyIsICJhdXRvU2tpcCIsICJzY2FsZSIsICJ0aWNrcyIsICJ0aWNrT3B0cyIsICJkZXRlcm1pbmVkTWF4VGlja3MiLCAiZGV0ZXJtaW5lTWF4VGlja3MiLCAidGlja3NMaW1pdCIsICJtaW4iLCAibWF4VGlja3NMaW1pdCIsICJtYWpvckluZGljZXMiLCAibWFqb3IiLCAiZW5hYmxlZCIsICJnZXRNYWpvckluZGljZXMiLCAibnVtTWFqb3JJbmRpY2VzIiwgImZpcnN0IiwgImxhc3QiLCAibmV3VGlja3MiLCAic2tpcE1ham9ycyIsICJzcGFjaW5nIiwgImNhbGN1bGF0ZVNwYWNpbmciLCAiYXZnTWFqb3JTcGFjaW5nIiwgInJvdW5kIiwgIm9mZnNldCIsICJ0aWNrTGVuZ3RoIiwgIl90aWNrU2l6ZSIsICJtYXhTY2FsZSIsICJfbGVuZ3RoIiwgIm1heENoYXJ0IiwgIl9tYXhMZW5ndGgiLCAiZXZlbk1ham9yU3BhY2luZyIsICJnZXRFdmVuU3BhY2luZyIsICJmYWN0b3JzIiwgIl9mYWN0b3JpemUiLCAicmVzdWx0IiwgIm5leHQiLCAiY2VpbCIsICJtYWpvclN0YXJ0IiwgIm1ham9yRW5kIiwgInZhbHVlT3JEZWZhdWx0IiwgImFyciIsICJsZW4iLCAicmV2ZXJzZUFsaWduIiwgImFsaWduIiwgIm9mZnNldEZyb21FZGdlIiwgImVkZ2UiLCAiZ2V0VGlja3NMaW1pdCIsICJ0aWNrc0xlbmd0aCIsICJzYW1wbGUiLCAibnVtSXRlbXMiLCAiaW5jcmVtZW50IiwgImdldFBpeGVsRm9yR3JpZExpbmUiLCAib2Zmc2V0R3JpZExpbmVzIiwgInZhbGlkSW5kZXgiLCAiX3N0YXJ0UGl4ZWwiLCAiX2VuZFBpeGVsIiwgImVwc2lsb24iLCAibGluZVZhbHVlIiwgImdldFBpeGVsRm9yVGljayIsICJnYXJiYWdlQ29sbGVjdCIsICJjYWNoZXMiLCAiY2FjaGUiLCAiZ2MiLCAiZ2NMZW4iLCAiZ2V0VGlja01hcmtMZW5ndGgiLCAiZHJhd1RpY2tzIiwgImdldFRpdGxlSGVpZ2h0IiwgImZhbGxiYWNrIiwgImZvbnQiLCAidG9Gb250IiwgImxpbmVzIiwgImlzQXJyYXkiLCAidGV4dCIsICJsaW5lSGVpZ2h0IiwgImNyZWF0ZVNjYWxlQ29udGV4dCIsICJwYXJlbnQiLCAiY3JlYXRlQ29udGV4dCIsICJjcmVhdGVUaWNrQ29udGV4dCIsICJ0aWNrIiwgInRpdGxlQWxpZ24iLCAiX3RvTGVmdFJpZ2h0Q2VudGVyIiwgInRpdGxlQXJncyIsICJzY2FsZXMiLCAicm90YXRpb24iLCAibWF4V2lkdGgiLCAidGl0bGVYIiwgInRpdGxlWSIsICJfYWxpZ25TdGFydEVuZCIsICJwb3NpdGlvbkF4aXNJRCIsICJnZXRQaXhlbEZvclZhbHVlIiwgIkhBTEZfUEkiLCAiU2NhbGUiLCAiY2ZnIiwgImlkIiwgIl9tYXJnaW5zIiwgIm1heEhlaWdodCIsICJwYWRkaW5nVG9wIiwgInBhZGRpbmdCb3R0b20iLCAicGFkZGluZ0xlZnQiLCAicGFkZGluZ1JpZ2h0IiwgImxhYmVsUm90YXRpb24iLCAiX3JhbmdlIiwgIl9ncmlkTGluZUl0ZW1zIiwgIl9sYWJlbEl0ZW1zIiwgIl9sYWJlbFNpemVzIiwgIl9sb25nZXN0VGV4dENhY2hlIiwgIl91c2VyTWF4IiwgIl91c2VyTWluIiwgIl9zdWdnZXN0ZWRNYXgiLCAiX3N1Z2dlc3RlZE1pbiIsICJfdGlja3NMZW5ndGgiLCAiX2JvcmRlclZhbHVlIiwgIl9jYWNoZSIsICJfZGF0YUxpbWl0c0NhY2hlZCIsICIkY29udGV4dCIsICJzZXRDb250ZXh0IiwgInN1Z2dlc3RlZE1pbiIsICJzdWdnZXN0ZWRNYXgiLCAicmF3IiwgImdldFVzZXJCb3VuZHMiLCAiZmluaXRlT3JEZWZhdWx0IiwgIk5FR0FUSVZFX0lORklOSVRZIiwgIm1pbkRlZmluZWQiLCAiaXNGaW5pdGUiLCAibWF4RGVmaW5lZCIsICJnZXRNaW5NYXgiLCAiY2FuU3RhY2siLCAibWV0YXMiLCAiZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMiLCAiZ2V0VGlja3MiLCAiZ2V0TGFiZWxzIiwgImxhYmVscyIsICJ4TGFiZWxzIiwgInlMYWJlbHMiLCAiZ2V0TGFiZWxJdGVtcyIsICJfY29tcHV0ZUxhYmVsSXRlbXMiLCAiYmVmb3JlVXBkYXRlIiwgImNhbGwiLCAibWFyZ2lucyIsICJiZWdpbkF0WmVybyIsICJncmFjZSIsICJzYW1wbGVTaXplIiwgImJlZm9yZVNldERpbWVuc2lvbnMiLCAic2V0RGltZW5zaW9ucyIsICJhZnRlclNldERpbWVuc2lvbnMiLCAiYmVmb3JlRGF0YUxpbWl0cyIsICJkZXRlcm1pbmVEYXRhTGltaXRzIiwgImFmdGVyRGF0YUxpbWl0cyIsICJfYWRkR3JhY2UiLCAiYmVmb3JlQnVpbGRUaWNrcyIsICJidWlsZFRpY2tzIiwgImFmdGVyQnVpbGRUaWNrcyIsICJzYW1wbGluZ0VuYWJsZWQiLCAiX2NvbnZlcnRUaWNrc1RvTGFiZWxzIiwgImJlZm9yZUNhbGN1bGF0ZUxhYmVsUm90YXRpb24iLCAiY2FsY3VsYXRlTGFiZWxSb3RhdGlvbiIsICJhZnRlckNhbGN1bGF0ZUxhYmVsUm90YXRpb24iLCAic291cmNlIiwgImFmdGVyQXV0b1NraXAiLCAiYmVmb3JlRml0IiwgImZpdCIsICJhZnRlckZpdCIsICJhZnRlclVwZGF0ZSIsICJyZXZlcnNlUGl4ZWxzIiwgInN0YXJ0UGl4ZWwiLCAiZW5kUGl4ZWwiLCAiX2FsaWduVG9QaXhlbHMiLCAiYWxpZ25Ub1BpeGVscyIsICJfY2FsbEhvb2tzIiwgIm5hbWUiLCAibm90aWZ5UGx1Z2lucyIsICJiZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24iLCAiZ2VuZXJhdGVUaWNrTGFiZWxzIiwgImxhYmVsIiwgImNhbGxiYWNrIiwgImFmdGVyVGlja1RvTGFiZWxDb252ZXJzaW9uIiwgIm51bVRpY2tzIiwgIm1pblJvdGF0aW9uIiwgIm1heFJvdGF0aW9uIiwgInRpY2tXaWR0aCIsICJtYXhMYWJlbERpYWdvbmFsIiwgIl9pc1Zpc2libGUiLCAibGFiZWxTaXplcyIsICJfZ2V0TGFiZWxTaXplcyIsICJtYXhMYWJlbFdpZHRoIiwgIndpZGVzdCIsICJtYXhMYWJlbEhlaWdodCIsICJoaWdoZXN0IiwgIl9saW1pdFZhbHVlIiwgImdyaWQiLCAidGl0bGUiLCAidG9EZWdyZWVzIiwgImFzaW4iLCAibWluU2l6ZSIsICJ0aXRsZU9wdHMiLCAiZ3JpZE9wdHMiLCAidGl0bGVIZWlnaHQiLCAidGlja1BhZGRpbmciLCAiYW5nbGVSYWRpYW5zIiwgInRvUmFkaWFucyIsICJjb3MiLCAic2luIiwgImxhYmVsSGVpZ2h0IiwgIm1pcnJvciIsICJsYWJlbFdpZHRoIiwgIl9jYWxjdWxhdGVQYWRkaW5nIiwgIl9oYW5kbGVNYXJnaW5zIiwgImlzUm90YXRlZCIsICJsYWJlbHNCZWxvd1RpY2tzIiwgIm9mZnNldExlZnQiLCAib2Zmc2V0UmlnaHQiLCAiaXNGdWxsU2l6ZSIsICJfY29tcHV0ZUxhYmVsU2l6ZXMiLCAid2lkdGhzIiwgImhlaWdodHMiLCAid2lkZXN0TGFiZWxTaXplIiwgImhpZ2hlc3RMYWJlbFNpemUiLCAiamxlbiIsICJ0aWNrRm9udCIsICJmb250U3RyaW5nIiwgIm5lc3RlZExhYmVsIiwgIl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zIiwgInN0cmluZyIsICJfbWVhc3VyZVRleHQiLCAidmFsdWVBdCIsICJpZHgiLCAiZ2V0TGFiZWxGb3JWYWx1ZSIsICJOYU4iLCAiZ2V0VmFsdWVGb3JQaXhlbCIsICJwaXhlbCIsICJnZXRQaXhlbEZvckRlY2ltYWwiLCAiZGVjaW1hbCIsICJfaW50MTZSYW5nZSIsICJfYWxpZ25QaXhlbCIsICJnZXREZWNpbWFsRm9yUGl4ZWwiLCAiZ2V0QmFzZVBpeGVsIiwgImdldEJhc2VWYWx1ZSIsICJvcHRpb25UaWNrcyIsICJyb3QiLCAiYXV0b1NraXBQYWRkaW5nIiwgIl9jb21wdXRlR3JpZExpbmVJdGVtcyIsICJib3JkZXIiLCAidGwiLCAiYm9yZGVyT3B0cyIsICJheGlzV2lkdGgiLCAiYXhpc0hhbGZXaWR0aCIsICJhbGlnbkJvcmRlclZhbHVlIiwgImJvcmRlclZhbHVlIiwgImFsaWduZWRMaW5lVmFsdWUiLCAidHgxIiwgInR5MSIsICJ0eDIiLCAidHkyIiwgIngxIiwgInkxIiwgIngyIiwgInkyIiwgImxpbWl0IiwgInN0ZXAiLCAib3B0c0F0SW5kZXgiLCAib3B0c0F0SW5kZXhCb3JkZXIiLCAibGluZVdpZHRoIiwgImxpbmVDb2xvciIsICJjb2xvciIsICJib3JkZXJEYXNoIiwgImRhc2giLCAiYm9yZGVyRGFzaE9mZnNldCIsICJkYXNoT2Zmc2V0IiwgInRpY2tDb2xvciIsICJ0aWNrQm9yZGVyRGFzaCIsICJ0aWNrQm9yZGVyRGFzaE9mZnNldCIsICJjcm9zc0FsaWduIiwgInRpY2tBbmRQYWRkaW5nIiwgImhUaWNrQW5kUGFkZGluZyIsICJ0ZXh0QWxpZ24iLCAibGluZUNvdW50IiwgInRleHRPZmZzZXQiLCAidGV4dEJhc2VsaW5lIiwgIl9nZXRYQXhpc0xhYmVsQWxpZ25tZW50IiwgIl9nZXRZQXhpc0xhYmVsQWxpZ25tZW50IiwgImxhYmVsT2Zmc2V0IiwgImhhbGZDb3VudCIsICJzdHJva2VDb2xvciIsICJ0ZXh0U3Ryb2tlQ29sb3IiLCAic3Ryb2tlV2lkdGgiLCAidGV4dFN0cm9rZVdpZHRoIiwgInRpY2tUZXh0QWxpZ24iLCAic2hvd0xhYmVsQmFja2Ryb3AiLCAiYmFja2Ryb3AiLCAibGFiZWxQYWRkaW5nIiwgImJhY2tkcm9wUGFkZGluZyIsICJiYWNrZHJvcENvbG9yIiwgInRyYW5zbGF0aW9uIiwgIl9jb21wdXRlTGFiZWxBcmVhIiwgImRyYXdCYWNrZ3JvdW5kIiwgImJhY2tncm91bmRDb2xvciIsICJzYXZlIiwgImZpbGxTdHlsZSIsICJmaWxsUmVjdCIsICJyZXN0b3JlIiwgImdldExpbmVXaWR0aEZvclZhbHVlIiwgImZpbmRJbmRleCIsICJ0IiwgIm9wdHMiLCAiZHJhd0dyaWQiLCAiZHJhd0xpbmUiLCAicDEiLCAicDIiLCAic3Ryb2tlU3R5bGUiLCAic2V0TGluZURhc2giLCAibGluZURhc2hPZmZzZXQiLCAiYmVnaW5QYXRoIiwgIm1vdmVUbyIsICJsaW5lVG8iLCAic3Ryb2tlIiwgImRyYXdPbkNoYXJ0QXJlYSIsICJkcmF3Qm9yZGVyIiwgImxhc3RMaW5lV2lkdGgiLCAiZHJhd0xhYmVscyIsICJhcmVhIiwgImNsaXBBcmVhIiwgInJlbmRlclRleHRPcHRpb25zIiwgInJlbmRlclRleHQiLCAidW5jbGlwQXJlYSIsICJkcmF3VGl0bGUiLCAidHoiLCAiZ3oiLCAiYnoiLCAiYXhpc0lEIiwgIl9tYXhEaWdpdHMiLCAiZm9udFNpemUiLCAiVHlwZWRSZWdpc3RyeSIsICJzY29wZSIsICJjcmVhdGUiLCAiaXNGb3JUeXBlIiwgImlzUHJvdG90eXBlT2YiLCAicmVnaXN0ZXIiLCAicHJvdG8iLCAiZ2V0UHJvdG90eXBlT2YiLCAicGFyZW50U2NvcGUiLCAiaXNJQ2hhcnRDb21wb25lbnQiLCAicmVnaXN0ZXJEZWZhdWx0cyIsICJvdmVycmlkZXMiLCAiZ2V0IiwgInVucmVnaXN0ZXIiLCAiaXRlbURlZmF1bHRzIiwgIm1lcmdlIiwgInJvdXRlRGVmYXVsdHMiLCAiZGVzY3JpcHRvcnMiLCAiZGVzY3JpYmUiLCAicm91dGVzIiwgInByb3BlcnR5IiwgInByb3BlcnR5UGFydHMiLCAic3BsaXQiLCAic291cmNlTmFtZSIsICJwb3AiLCAic291cmNlU2NvcGUiLCAiam9pbiIsICJwYXJ0cyIsICJ0YXJnZXROYW1lIiwgInRhcmdldFNjb3BlIiwgInJvdXRlIiwgIlJlZ2lzdHJ5IiwgImNvbnRyb2xsZXJzIiwgIkRhdGFzZXRDb250cm9sbGVyIiwgInBsdWdpbnMiLCAiX3R5cGVkUmVnaXN0cmllcyIsICJhcmdzIiwgIl9lYWNoIiwgInJlbW92ZSIsICJhZGRDb250cm9sbGVycyIsICJhZGRFbGVtZW50cyIsICJhZGRQbHVnaW5zIiwgImFkZFNjYWxlcyIsICJnZXRDb250cm9sbGVyIiwgIl9nZXQiLCAiZ2V0RWxlbWVudCIsICJnZXRQbHVnaW4iLCAiZ2V0U2NhbGUiLCAicmVtb3ZlQ29udHJvbGxlcnMiLCAicmVtb3ZlRWxlbWVudHMiLCAicmVtb3ZlUGx1Z2lucyIsICJyZW1vdmVTY2FsZXMiLCAibWV0aG9kIiwgInR5cGVkUmVnaXN0cnkiLCAiYXJnIiwgInJlZyIsICJfZ2V0UmVnaXN0cnlGb3JUeXBlIiwgIl9leGVjIiwgIml0ZW1SZWciLCAicmVnaXN0cnkiLCAiY29tcG9uZW50IiwgImNhbWVsTWV0aG9kIiwgIl9jYXBpdGFsaXplIiwgIlBsdWdpblNlcnZpY2UiLCAiX2luaXQiLCAibm90aWZ5IiwgImhvb2siLCAiX2NyZWF0ZURlc2NyaXB0b3JzIiwgIl9ub3RpZnkiLCAiX2Rlc2NyaXB0b3JzIiwgImRlc2NyaXB0b3IiLCAicGx1Z2luIiwgImNhbGxDYWxsYmFjayIsICJjYW5jZWxhYmxlIiwgImludmFsaWRhdGUiLCAiX29sZENhY2hlIiwgIl9ub3RpZnlTdGF0ZUNoYW5nZXMiLCAiYWxsIiwgImFsbFBsdWdpbnMiLCAiY3JlYXRlRGVzY3JpcHRvcnMiLCAicHJldmlvdXNEZXNjcmlwdG9ycyIsICJzb21lIiwgImxvY2FsSWRzIiwgImxvY2FsIiwgImdldE9wdHMiLCAicGx1Z2luT3B0cyIsICJwbHVnaW5TY29wZUtleXMiLCAic2NvcGVzIiwgImdldE9wdGlvblNjb3BlcyIsICJjcmVhdGVSZXNvbHZlciIsICJzY3JpcHRhYmxlIiwgImluZGV4YWJsZSIsICJhbGxLZXlzIiwgImdldEluZGV4QXhpcyIsICJkYXRhc2V0RGVmYXVsdHMiLCAiZGF0YXNldHMiLCAiZGF0YXNldE9wdGlvbnMiLCAiaW5kZXhBeGlzIiwgImdldEF4aXNGcm9tRGVmYXVsdFNjYWxlSUQiLCAiZ2V0RGVmYXVsdFNjYWxlSURGcm9tQXhpcyIsICJpZE1hdGNoZXNBeGlzIiwgImF4aXNGcm9tUG9zaXRpb24iLCAiZGV0ZXJtaW5lQXhpcyIsICJzY2FsZU9wdGlvbnMiLCAidG9Mb3dlckNhc2UiLCAiZ2V0QXhpc0Zyb21EYXRhc2V0IiwgInJldHJpZXZlQXhpc0Zyb21EYXRhc2V0cyIsICJib3VuZERzIiwgImQiLCAieEF4aXNJRCIsICJ5QXhpc0lEIiwgIm1lcmdlU2NhbGVDb25maWciLCAiY2hhcnREZWZhdWx0cyIsICJjb25maWdTY2FsZXMiLCAiY2hhcnRJbmRleEF4aXMiLCAic2NhbGVDb25mIiwgImNvbnNvbGUiLCAiZXJyb3IiLCAiX3Byb3h5IiwgIndhcm4iLCAiZGVmYXVsdElkIiwgImRlZmF1bHRTY2FsZU9wdGlvbnMiLCAibWVyZ2VJZiIsICJkZWZhdWx0SUQiLCAiaW5pdE9wdGlvbnMiLCAiaW5pdERhdGEiLCAiaW5pdENvbmZpZyIsICJrZXlDYWNoZSIsICJrZXlzQ2FjaGVkIiwgIlNldCIsICJjYWNoZWRLZXlzIiwgImNhY2hlS2V5IiwgImdlbmVyYXRlIiwgImFkZElmRm91bmQiLCAib2JqIiwgInJlc29sdmVPYmplY3RLZXkiLCAiQ29uZmlnIiwgIl9jb25maWciLCAiX3Njb3BlQ2FjaGUiLCAiX3Jlc29sdmVyQ2FjaGUiLCAicGxhdGZvcm0iLCAiY2xlYXJDYWNoZSIsICJjbGVhciIsICJkYXRhc2V0U2NvcGVLZXlzIiwgImRhdGFzZXRUeXBlIiwgImRhdGFzZXRBbmltYXRpb25TY29wZUtleXMiLCAidHJhbnNpdGlvbiIsICJkYXRhc2V0RWxlbWVudFNjb3BlS2V5cyIsICJlbGVtZW50VHlwZSIsICJhZGRpdGlvbmFsT3B0aW9uU2NvcGVzIiwgIl9jYWNoZWRTY29wZXMiLCAibWFpblNjb3BlIiwgInJlc2V0Q2FjaGUiLCAia2V5TGlzdHMiLCAiY2FjaGVkIiwgIkFycmF5IiwgImZyb20iLCAiaGFzIiwgImNoYXJ0T3B0aW9uU2NvcGVzIiwgInJlc29sdmVOYW1lZE9wdGlvbnMiLCAibmFtZXMiLCAicHJlZml4ZXMiLCAiJHNoYXJlZCIsICJyZXNvbHZlciIsICJzdWJQcmVmaXhlcyIsICJnZXRSZXNvbHZlciIsICJuZWVkQ29udGV4dCIsICJpc0Z1bmN0aW9uIiwgInN1YlJlc29sdmVyIiwgIl9hdHRhY2hDb250ZXh0IiwgImRlc2NyaXB0b3JEZWZhdWx0cyIsICJyZXNvbHZlckNhY2hlIiwgIl9jcmVhdGVSZXNvbHZlciIsICJwIiwgImhhc0Z1bmN0aW9uIiwgImdldE93blByb3BlcnR5TmFtZXMiLCAiaXNTY3JpcHRhYmxlIiwgImlzSW5kZXhhYmxlIiwgIktOT1dOX1BPU0lUSU9OUyIsICJwb3NpdGlvbklzSG9yaXpvbnRhbCIsICJjb21wYXJlMkxldmVsIiwgImwxIiwgImwyIiwgIm9uQW5pbWF0aW9uc0NvbXBsZXRlIiwgImFuaW1hdGlvbk9wdGlvbnMiLCAib25Db21wbGV0ZSIsICJvbkFuaW1hdGlvblByb2dyZXNzIiwgIm9uUHJvZ3Jlc3MiLCAiZ2V0Q2FudmFzIiwgImdldEVsZW1lbnRCeUlkIiwgImluc3RhbmNlcyIsICJnZXRDaGFydCIsICJ2YWx1ZXMiLCAiYyIsICJtb3ZlTnVtZXJpY0tleXMiLCAibW92ZSIsICJpbnRLZXkiLCAiZGV0ZXJtaW5lTGFzdEV2ZW50IiwgImxhc3RFdmVudCIsICJpbkNoYXJ0QXJlYSIsICJpc0NsaWNrIiwgImdldFNpemVGb3JBcmVhIiwgImZpZWxkIiwgImNsaXAiLCAiZ2V0RGF0YXNldEFyZWEiLCAieFNjYWxlIiwgInlTY2FsZSIsICJDaGFydCIsICJpbnZhbGlkYXRlUGx1Z2lucyIsICJ1c2VyQ29uZmlnIiwgImluaXRpYWxDYW52YXMiLCAiZXhpc3RpbmdDaGFydCIsICJ1aWQiLCAiX29wdGlvbnMiLCAiX2FzcGVjdFJhdGlvIiwgIl9tZXRhc2V0cyIsICJfc3RhY2tzIiwgIl9hY3RpdmUiLCAiX2xhc3RFdmVudCIsICJfbGlzdGVuZXJzIiwgIl9yZXNwb25zaXZlTGlzdGVuZXJzIiwgIl9zb3J0ZWRNZXRhc2V0cyIsICJfcGx1Z2lucyIsICJfaGlkZGVuSW5kaWNlcyIsICJhdHRhY2hlZCIsICJfYW5pbWF0aW9uc0Rpc2FibGVkIiwgIl9kb1Jlc2l6ZSIsICJkZWJvdW5jZSIsICJtb2RlIiwgInJlc2l6ZURlbGF5IiwgIl9kYXRhQ2hhbmdlcyIsICJhbmltYXRvciIsICJsaXN0ZW4iLCAiX2luaXRpYWxpemUiLCAibWFpbnRhaW5Bc3BlY3RSYXRpbyIsICJyZXNwb25zaXZlIiwgInJldGluYVNjYWxlIiwgImJpbmRFdmVudHMiLCAiY2xlYXJDYW52YXMiLCAic3RvcCIsICJydW5uaW5nIiwgIl9yZXNpemUiLCAiX3Jlc2l6ZUJlZm9yZURyYXciLCAibmV3U2l6ZSIsICJuZXdSYXRpbyIsICJvblJlc2l6ZSIsICJyZW5kZXIiLCAiZW5zdXJlU2NhbGVzSGF2ZUlEcyIsICJzY2FsZXNPcHRpb25zIiwgImF4aXNPcHRpb25zIiwgImJ1aWxkT3JVcGRhdGVTY2FsZXMiLCAic2NhbGVPcHRzIiwgInVwZGF0ZWQiLCAibWFwIiwgImlzUmFkaWFsIiwgImRwb3NpdGlvbiIsICJkdHlwZSIsICJzY2FsZVR5cGUiLCAic2NhbGVDbGFzcyIsICJoYXNVcGRhdGVkIiwgIl91cGRhdGVNZXRhc2V0cyIsICJudW1EYXRhIiwgIm51bU1ldGEiLCAiX2Rlc3Ryb3lEYXRhc2V0TWV0YSIsICJzbGljZSIsICJfcmVtb3ZlVW5yZWZlcmVuY2VkTWV0YXNldHMiLCAiX2RhdGFzZXQiLCAiYnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzIiwgIm5ld0NvbnRyb2xsZXJzIiwgIm9yZGVyIiwgInZpc2libGUiLCAiaXNEYXRhc2V0VmlzaWJsZSIsICJ1cGRhdGVJbmRleCIsICJsaW5rU2NhbGVzIiwgIkNvbnRyb2xsZXJDbGFzcyIsICJkYXRhc2V0RWxlbWVudFR5cGUiLCAiZGF0YUVsZW1lbnRUeXBlIiwgIl9yZXNldEVsZW1lbnRzIiwgInJlc2V0IiwgImFuaW1zRGlzYWJsZWQiLCAiX3VwZGF0ZVNjYWxlcyIsICJfY2hlY2tFdmVudEJpbmRpbmdzIiwgIl91cGRhdGVIaWRkZW5JbmRpY2VzIiwgImJ1aWxkT3JVcGRhdGVFbGVtZW50cyIsICJnZXRNYXhPdmVyZmxvdyIsICJfbWluUGFkZGluZyIsICJhdXRvUGFkZGluZyIsICJfdXBkYXRlTGF5b3V0IiwgIl91cGRhdGVEYXRhc2V0cyIsICJfZXZlbnRIYW5kbGVyIiwgIl91cGRhdGVIb3ZlclN0eWxlcyIsICJleGlzdGluZ0V2ZW50cyIsICJuZXdFdmVudHMiLCAiZXZlbnRzIiwgInNldHNFcXVhbCIsICJ1bmJpbmRFdmVudHMiLCAiY2hhbmdlcyIsICJfZ2V0VW5pZm9ybURhdGFDaGFuZ2VzIiwgImRhdGFzZXRDb3VudCIsICJtYWtlU2V0IiwgImNoYW5nZVNldCIsICJub0FyZWEiLCAiX2lkeCIsICJfdXBkYXRlRGF0YXNldCIsICJfdXBkYXRlIiwgImxheWVycyIsICJfZHJhd0RhdGFzZXRzIiwgIl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMiLCAiZmlsdGVyVmlzaWJsZSIsICJfZHJhd0RhdGFzZXQiLCAiX2NsaXAiLCAidXNlQ2xpcCIsICJkaXNhYmxlZCIsICJnZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlIiwgIkludGVyYWN0aW9uIiwgImhpZGRlbiIsICJfcGFyc2VkIiwgImdldFZpc2libGVEYXRhc2V0Q291bnQiLCAic2V0RGF0YXNldFZpc2liaWxpdHkiLCAidG9nZ2xlRGF0YVZpc2liaWxpdHkiLCAiZ2V0RGF0YVZpc2liaWxpdHkiLCAiX3VwZGF0ZVZpc2liaWxpdHkiLCAiZGF0YUluZGV4IiwgIl9yZXNvbHZlQW5pbWF0aW9ucyIsICJoaWRlIiwgInNob3ciLCAiX2Rlc3Ryb3kiLCAiX3N0b3AiLCAiZGVzdHJveSIsICJ0b0Jhc2U2NEltYWdlIiwgInRvRGF0YVVSTCIsICJiaW5kVXNlckV2ZW50cyIsICJiaW5kUmVzcG9uc2l2ZUV2ZW50cyIsICJsaXN0ZW5lcnMiLCAiX2FkZCIsICJvZmZzZXRYIiwgIm9mZnNldFkiLCAiX3JlbW92ZSIsICJkZXRhY2hlZCIsICJ1cGRhdGVIb3ZlclN0eWxlIiwgInByZWZpeCIsICJnZXRBY3RpdmVFbGVtZW50cyIsICJzZXRBY3RpdmVFbGVtZW50cyIsICJhY3RpdmVFbGVtZW50cyIsICJsYXN0QWN0aXZlIiwgIl9lbGVtZW50c0VxdWFsIiwgImlzUGx1Z2luRW5hYmxlZCIsICJwbHVnaW5JZCIsICJyZXBsYXkiLCAiaG92ZXJPcHRpb25zIiwgImhvdmVyIiwgImRlYWN0aXZhdGVkIiwgImFjdGl2YXRlZCIsICJldmVudEZpbHRlciIsICJfaGFuZGxlRXZlbnQiLCAiX2dldEFjdGl2ZUVsZW1lbnRzIiwgIl9pc0NsaWNrRXZlbnQiLCAib25Ib3ZlciIsICJvbkNsaWNrIiwgInZlcnNpb24iLCAiY2xpcEFyYyIsICJwaXhlbE1hcmdpbiIsICJvdXRlclJhZGl1cyIsICJpbm5lclJhZGl1cyIsICJhbmdsZU1hcmdpbiIsICJhcmMiLCAiY2xvc2VQYXRoIiwgInRvUmFkaXVzQ29ybmVycyIsICJfcmVhZFZhbHVlVG9Qcm9wcyIsICJwYXJzZUJvcmRlclJhZGl1cyIsICJhbmdsZURlbHRhIiwgIm8iLCAiYm9yZGVyUmFkaXVzIiwgImhhbGZUaGlja25lc3MiLCAiaW5uZXJMaW1pdCIsICJjb21wdXRlT3V0ZXJMaW1pdCIsICJ2YWwiLCAib3V0ZXJBcmNMaW1pdCIsICJvdXRlclN0YXJ0IiwgIm91dGVyRW5kIiwgImlubmVyU3RhcnQiLCAiaW5uZXJFbmQiLCAiclRoZXRhVG9YWSIsICJyIiwgInRoZXRhIiwgInBhdGhBcmMiLCAiY2lyY3VsYXIiLCAiaW5uZXJSIiwgInNwYWNpbmdPZmZzZXQiLCAiYWxwaGEiLCAibm9TcGFjaW5nSW5uZXJSYWRpdXMiLCAibm9TcGFjaW5nT3V0ZXJSYWRpdXMiLCAiYXZOb2dTcGFjaW5nUmFkaXVzIiwgImFkanVzdGVkQW5nbGUiLCAiYmV0YSIsICJQSSIsICJhbmdsZU9mZnNldCIsICJvdXRlclN0YXJ0QWRqdXN0ZWRSYWRpdXMiLCAib3V0ZXJFbmRBZGp1c3RlZFJhZGl1cyIsICJvdXRlclN0YXJ0QWRqdXN0ZWRBbmdsZSIsICJvdXRlckVuZEFkanVzdGVkQW5nbGUiLCAiaW5uZXJTdGFydEFkanVzdGVkUmFkaXVzIiwgImlubmVyRW5kQWRqdXN0ZWRSYWRpdXMiLCAiaW5uZXJTdGFydEFkanVzdGVkQW5nbGUiLCAiaW5uZXJFbmRBZGp1c3RlZEFuZ2xlIiwgIm91dGVyTWlkQWRqdXN0ZWRBbmdsZSIsICJwQ2VudGVyIiwgInA0IiwgImlubmVyTWlkQWRqdXN0ZWRBbmdsZSIsICJwOCIsICJvdXRlclN0YXJ0WCIsICJvdXRlclN0YXJ0WSIsICJvdXRlckVuZFgiLCAib3V0ZXJFbmRZIiwgImRyYXdBcmMiLCAiZnVsbENpcmNsZXMiLCAiY2lyY3VtZmVyZW5jZSIsICJmaWxsIiwgImlzTmFOIiwgIlRBVSIsICJib3JkZXJXaWR0aCIsICJib3JkZXJKb2luU3R5bGUiLCAiaW5uZXIiLCAiYm9yZGVyQWxpZ24iLCAibGluZUpvaW4iLCAiQXJjRWxlbWVudCIsICJjaGFydFgiLCAiY2hhcnRZIiwgInJBZGp1c3QiLCAiX2NpcmN1bWZlcmVuY2UiLCAibm9uWmVyb0JldHdlZW4iLCAiYmV0d2VlbkFuZ2xlcyIsICJ3aXRoaW5SYWRpdXMiLCAiX2lzQmV0d2VlbiIsICJoYWxmQW5nbGUiLCAiaGFsZlJhZGl1cyIsICJ0cmFuc2xhdGUiLCAiZml4IiwgInJhZGl1c09mZnNldCIsICJib3JkZXJDb2xvciIsICJfc2NyaXB0YWJsZSIsICJfaW5kZXhhYmxlIiwgImdldEJhckJvdW5kcyIsICJiYXIiLCAidXNlRmluYWxQb3NpdGlvbiIsICJ4IiwgInkiLCAiYmFzZSIsICJ3aWR0aCIsICJoZWlnaHQiLCAiZ2V0UHJvcHMiLCAibGVmdCIsICJyaWdodCIsICJ0b3AiLCAiYm90dG9tIiwgImhhbGYiLCAiaG9yaXpvbnRhbCIsICJNYXRoIiwgIm1pbiIsICJtYXgiLCAic2tpcE9yTGltaXQiLCAic2tpcCIsICJ2YWx1ZSIsICJfbGltaXRWYWx1ZSIsICJwYXJzZUJvcmRlcldpZHRoIiwgIm1heFciLCAibWF4SCIsICJvcHRpb25zIiwgImJvcmRlcldpZHRoIiwgImJvcmRlclNraXBwZWQiLCAibyIsICJ0b1RSQkwiLCAidCIsICJyIiwgImIiLCAibCIsICJwYXJzZUJvcmRlclJhZGl1cyIsICJlbmFibGVCb3JkZXJSYWRpdXMiLCAiYm9yZGVyUmFkaXVzIiwgInRvVFJCTENvcm5lcnMiLCAibWF4UiIsICJlbmFibGVCb3JkZXIiLCAiaXNPYmplY3QiLCAidG9wTGVmdCIsICJ0b3BSaWdodCIsICJib3R0b21MZWZ0IiwgImJvdHRvbVJpZ2h0IiwgImJvdW5kaW5nUmVjdHMiLCAiYm91bmRzIiwgImJvcmRlciIsICJyYWRpdXMiLCAib3V0ZXIiLCAidyIsICJoIiwgImlubmVyIiwgImluUmFuZ2UiLCAic2tpcFgiLCAic2tpcFkiLCAic2tpcEJvdGgiLCAiX2lzQmV0d2VlbiIsICJoYXNSYWRpdXMiLCAiYWRkTm9ybWFsUmVjdFBhdGgiLCAiY3R4IiwgInJlY3QiLCAiaW5mbGF0ZVJlY3QiLCAiYW1vdW50IiwgInJlZlJlY3QiLCAiQmFyRWxlbWVudCIsICJFbGVtZW50IiwgImNvbnN0cnVjdG9yIiwgImNmZyIsICJ1bmRlZmluZWQiLCAiaW5mbGF0ZUFtb3VudCIsICJPYmplY3QiLCAiYXNzaWduIiwgImRyYXciLCAiYm9yZGVyQ29sb3IiLCAiYmFja2dyb3VuZENvbG9yIiwgImFkZFJlY3RQYXRoIiwgImFkZFJvdW5kZWRSZWN0UGF0aCIsICJzYXZlIiwgImJlZ2luUGF0aCIsICJjbGlwIiwgImZpbGxTdHlsZSIsICJmaWxsIiwgInJlc3RvcmUiLCAibW91c2VYIiwgIm1vdXNlWSIsICJpblhSYW5nZSIsICJpbllSYW5nZSIsICJnZXRDZW50ZXJQb2ludCIsICJnZXRSYW5nZSIsICJheGlzIiwgImlkIiwgImRlZmF1bHRzIiwgInBvaW50U3R5bGUiLCAiZGVmYXVsdFJvdXRlcyIsICJnZXRCb3hTaXplIiwgImxhYmVsT3B0cyIsICJmb250U2l6ZSIsICJib3hIZWlnaHQiLCAiYm94V2lkdGgiLCAidXNlUG9pbnRTdHlsZSIsICJNYXRoIiwgIm1pbiIsICJwb2ludFN0eWxlV2lkdGgiLCAiaXRlbUhlaWdodCIsICJtYXgiLCAiaXRlbXNFcXVhbCIsICJhIiwgImIiLCAiZGF0YXNldEluZGV4IiwgImluZGV4IiwgIkxlZ2VuZCIsICJFbGVtZW50IiwgImNvbnN0cnVjdG9yIiwgImNvbmZpZyIsICJfYWRkZWQiLCAibGVnZW5kSGl0Qm94ZXMiLCAiX2hvdmVyZWRJdGVtIiwgImRvdWdobnV0TW9kZSIsICJjaGFydCIsICJvcHRpb25zIiwgImN0eCIsICJsZWdlbmRJdGVtcyIsICJ1bmRlZmluZWQiLCAiY29sdW1uU2l6ZXMiLCAibGluZVdpZHRocyIsICJtYXhIZWlnaHQiLCAibWF4V2lkdGgiLCAidG9wIiwgImJvdHRvbSIsICJsZWZ0IiwgInJpZ2h0IiwgImhlaWdodCIsICJ3aWR0aCIsICJfbWFyZ2lucyIsICJwb3NpdGlvbiIsICJ3ZWlnaHQiLCAiZnVsbFNpemUiLCAidXBkYXRlIiwgIm1hcmdpbnMiLCAic2V0RGltZW5zaW9ucyIsICJidWlsZExhYmVscyIsICJmaXQiLCAiaXNIb3Jpem9udGFsIiwgImxhYmVscyIsICJjYWxsIiwgImdlbmVyYXRlTGFiZWxzIiwgImZpbHRlciIsICJpdGVtIiwgImRhdGEiLCAic29ydCIsICJyZXZlcnNlIiwgImRpc3BsYXkiLCAibGFiZWxGb250IiwgInRvRm9udCIsICJmb250IiwgInNpemUiLCAidGl0bGVIZWlnaHQiLCAiX2NvbXB1dGVUaXRsZUhlaWdodCIsICJzdHJpbmciLCAiX2ZpdFJvd3MiLCAiX2ZpdENvbHMiLCAicGFkZGluZyIsICJoaXRib3hlcyIsICJsaW5lSGVpZ2h0IiwgInRvdGFsSGVpZ2h0IiwgInRleHRBbGlnbiIsICJ0ZXh0QmFzZWxpbmUiLCAicm93IiwgImZvckVhY2giLCAibGVnZW5kSXRlbSIsICJpIiwgIml0ZW1XaWR0aCIsICJtZWFzdXJlVGV4dCIsICJ0ZXh0IiwgImxlbmd0aCIsICJfaXRlbUhlaWdodCIsICJoZWlnaHRMaW1pdCIsICJ0b3RhbFdpZHRoIiwgImN1cnJlbnRDb2xXaWR0aCIsICJjdXJyZW50Q29sSGVpZ2h0IiwgImNvbCIsICJjYWxjdWxhdGVJdGVtU2l6ZSIsICJwdXNoIiwgImFkanVzdEhpdEJveGVzIiwgImFsaWduIiwgInJ0bCIsICJydGxIZWxwZXIiLCAiZ2V0UnRsQWRhcHRlciIsICJfYWxpZ25TdGFydEVuZCIsICJoaXRib3giLCAibGVmdEZvckx0ciIsICJ4IiwgImRyYXciLCAiY2xpcEFyZWEiLCAiX2RyYXciLCAidW5jbGlwQXJlYSIsICJvcHRzIiwgImRlZmF1bHRDb2xvciIsICJkZWZhdWx0cyIsICJjb2xvciIsICJoYWxmRm9udFNpemUiLCAiY3Vyc29yIiwgImRyYXdUaXRsZSIsICJsaW5lV2lkdGgiLCAiZHJhd0xlZ2VuZEJveCIsICJ5IiwgImlzTmFOIiwgInNhdmUiLCAidmFsdWVPckRlZmF1bHQiLCAiZmlsbFN0eWxlIiwgImxpbmVDYXAiLCAibGluZURhc2hPZmZzZXQiLCAibGluZUpvaW4iLCAic3Ryb2tlU3R5bGUiLCAic2V0TGluZURhc2giLCAibGluZURhc2giLCAiZHJhd09wdGlvbnMiLCAicmFkaXVzIiwgIlNRUlQyIiwgInBvaW50U3R5bGUiLCAicm90YXRpb24iLCAiYm9yZGVyV2lkdGgiLCAiY2VudGVyWCIsICJ4UGx1cyIsICJjZW50ZXJZIiwgImRyYXdQb2ludExlZ2VuZCIsICJ5Qm94VG9wIiwgInhCb3hMZWZ0IiwgImJvcmRlclJhZGl1cyIsICJ0b1RSQkxDb3JuZXJzIiwgImJlZ2luUGF0aCIsICJPYmplY3QiLCAidmFsdWVzIiwgInNvbWUiLCAidiIsICJhZGRSb3VuZGVkUmVjdFBhdGgiLCAidyIsICJoIiwgInJlY3QiLCAiZmlsbCIsICJzdHJva2UiLCAicmVzdG9yZSIsICJmaWxsVGV4dCIsICJyZW5kZXJUZXh0IiwgInN0cmlrZXRocm91Z2giLCAiaGlkZGVuIiwgImxpbmUiLCAib3ZlcnJpZGVUZXh0RGlyZWN0aW9uIiwgInRleHREaXJlY3Rpb24iLCAiZm9udENvbG9yIiwgInRleHRXaWR0aCIsICJzZXRXaWR0aCIsICJyZWFsWCIsICJfdGV4dFgiLCAiZm9udExpbmVIZWlnaHQiLCAiY2FsY3VsYXRlTGVnZW5kSXRlbUhlaWdodCIsICJyZXN0b3JlVGV4dERpcmVjdGlvbiIsICJ0aXRsZU9wdHMiLCAidGl0bGUiLCAidGl0bGVGb250IiwgInRpdGxlUGFkZGluZyIsICJ0b1BhZGRpbmciLCAidG9wUGFkZGluZ1BsdXNIYWxmRm9udFNpemUiLCAicmVkdWNlIiwgImFjYyIsICJfdG9MZWZ0UmlnaHRDZW50ZXIiLCAiX2dldExlZ2VuZEl0ZW1BdCIsICJoaXRCb3giLCAibGgiLCAiX2lzQmV0d2VlbiIsICJoYW5kbGVFdmVudCIsICJlIiwgImlzTGlzdGVuZWQiLCAidHlwZSIsICJob3ZlcmVkSXRlbSIsICJwcmV2aW91cyIsICJzYW1lSXRlbSIsICJvbkxlYXZlIiwgIm9uSG92ZXIiLCAib25DbGljayIsICJjYWxjdWxhdGVJdGVtV2lkdGgiLCAiY2FsY3VsYXRlSXRlbUhlaWdodCIsICJsZWdlbmRJdGVtVGV4dCIsICJsYWJlbEhlaWdodCIsICJpZCIsICJfZWxlbWVudCIsICJzdGFydCIsICJfYXJncyIsICJsZWdlbmQiLCAibGF5b3V0cyIsICJjb25maWd1cmUiLCAiYWRkQm94IiwgInN0b3AiLCAicmVtb3ZlQm94IiwgImJlZm9yZVVwZGF0ZSIsICJhZnRlclVwZGF0ZSIsICJhZnRlckV2ZW50IiwgImFyZ3MiLCAicmVwbGF5IiwgImV2ZW50IiwgImNpIiwgImlzRGF0YXNldFZpc2libGUiLCAiaGlkZSIsICJzaG93IiwgImRhdGFzZXRzIiwgInVzZUJvcmRlclJhZGl1cyIsICJfZ2V0U29ydGVkRGF0YXNldE1ldGFzIiwgIm1hcCIsICJtZXRhIiwgInN0eWxlIiwgImNvbnRyb2xsZXIiLCAiZ2V0U3R5bGUiLCAibGFiZWwiLCAiYmFja2dyb3VuZENvbG9yIiwgInZpc2libGUiLCAiYm9yZGVyQ2FwU3R5bGUiLCAiYm9yZGVyRGFzaCIsICJib3JkZXJEYXNoT2Zmc2V0IiwgImJvcmRlckpvaW5TdHlsZSIsICJib3JkZXJDb2xvciIsICJkZXNjcmlwdG9ycyIsICJfc2NyaXB0YWJsZSIsICJuYW1lIiwgInN0YXJ0c1dpdGgiLCAiaW5jbHVkZXMiLCAiVGl0bGUiLCAiX3BhZGRpbmciLCAibGluZUNvdW50IiwgImlzQXJyYXkiLCAidGV4dFNpemUiLCAicG9zIiwgIl9kcmF3QXJncyIsICJvZmZzZXQiLCAidGl0bGVYIiwgInRpdGxlWSIsICJQSSIsICJmb250T3B0cyIsICJ0cmFuc2xhdGlvbiIsICJjcmVhdGVUaXRsZSIsICJ0aXRsZUJsb2NrIiwgImRlZmF1bHRSb3V0ZXMiLCAiX2luZGV4YWJsZSIsICJXZWFrTWFwIiwgInNldCIsICJnZXQiLCAiZGVsZXRlIiwgInBvc2l0aW9uZXJzIiwgImF2ZXJhZ2UiLCAiaXRlbXMiLCAibGVuIiwgInhTZXQiLCAiU2V0IiwgImNvdW50IiwgImVsIiwgImVsZW1lbnQiLCAiaGFzVmFsdWUiLCAidG9vbHRpcFBvc2l0aW9uIiwgImFkZCIsICJ4QXZlcmFnZSIsICJuZWFyZXN0IiwgImV2ZW50UG9zaXRpb24iLCAibWluRGlzdGFuY2UiLCAiTnVtYmVyIiwgIlBPU0lUSVZFX0lORklOSVRZIiwgIm5lYXJlc3RFbGVtZW50IiwgImNlbnRlciIsICJnZXRDZW50ZXJQb2ludCIsICJkIiwgImRpc3RhbmNlQmV0d2VlblBvaW50cyIsICJ0cCIsICJwdXNoT3JDb25jYXQiLCAiYmFzZSIsICJ0b1B1c2giLCAiQXJyYXkiLCAicHJvdG90eXBlIiwgImFwcGx5IiwgInNwbGl0TmV3bGluZXMiLCAic3RyIiwgIlN0cmluZyIsICJpbmRleE9mIiwgInNwbGl0IiwgImNyZWF0ZVRvb2x0aXBJdGVtIiwgImdldERhdGFzZXRNZXRhIiwgInZhbHVlIiwgImdldExhYmVsQW5kVmFsdWUiLCAicGFyc2VkIiwgImdldFBhcnNlZCIsICJyYXciLCAiZm9ybWF0dGVkVmFsdWUiLCAiZGF0YXNldCIsICJnZXREYXRhc2V0IiwgImRhdGFJbmRleCIsICJnZXRUb29sdGlwU2l6ZSIsICJ0b29sdGlwIiwgImJvZHkiLCAiZm9vdGVyIiwgImJvZHlGb250IiwgImZvb3RlckZvbnQiLCAidGl0bGVMaW5lQ291bnQiLCAiZm9vdGVyTGluZUNvdW50IiwgImJvZHlMaW5lSXRlbUNvdW50IiwgImNvbWJpbmVkQm9keUxlbmd0aCIsICJib2R5SXRlbSIsICJiZWZvcmUiLCAibGluZXMiLCAiYWZ0ZXIiLCAiYmVmb3JlQm9keSIsICJhZnRlckJvZHkiLCAidGl0bGVTcGFjaW5nIiwgInRpdGxlTWFyZ2luQm90dG9tIiwgImJvZHlMaW5lSGVpZ2h0IiwgImRpc3BsYXlDb2xvcnMiLCAiYm9keVNwYWNpbmciLCAiZm9vdGVyTWFyZ2luVG9wIiwgImZvb3RlclNwYWNpbmciLCAid2lkdGhQYWRkaW5nIiwgIm1heExpbmVXaWR0aCIsICJlYWNoIiwgImNvbmNhdCIsICJib3hQYWRkaW5nIiwgImRldGVybWluZVlBbGlnbiIsICJkb2VzTm90Rml0V2l0aEFsaWduIiwgInhBbGlnbiIsICJjYXJldCIsICJjYXJldFNpemUiLCAiY2FyZXRQYWRkaW5nIiwgImRldGVybWluZVhBbGlnbiIsICJ5QWxpZ24iLCAiY2hhcnRXaWR0aCIsICJjaGFydEFyZWEiLCAiZGV0ZXJtaW5lQWxpZ25tZW50IiwgImFsaWduWCIsICJhbGlnblkiLCAicGFkZGluZ0FuZFNpemUiLCAiZ2V0QmFja2dyb3VuZFBvaW50IiwgImFsaWdubWVudCIsICJjb3JuZXJSYWRpdXMiLCAidG9wTGVmdCIsICJ0b3BSaWdodCIsICJib3R0b21MZWZ0IiwgImJvdHRvbVJpZ2h0IiwgIl9saW1pdFZhbHVlIiwgImdldEFsaWduZWRYIiwgImdldEJlZm9yZUFmdGVyQm9keUxpbmVzIiwgImNhbGxiYWNrIiwgImNyZWF0ZVRvb2x0aXBDb250ZXh0IiwgInBhcmVudCIsICJ0b29sdGlwSXRlbXMiLCAiY3JlYXRlQ29udGV4dCIsICJvdmVycmlkZUNhbGxiYWNrcyIsICJjYWxsYmFja3MiLCAiY29udGV4dCIsICJvdmVycmlkZSIsICJkZWZhdWx0Q2FsbGJhY2tzIiwgImJlZm9yZVRpdGxlIiwgIm5vb3AiLCAibGFiZWxDb3VudCIsICJtb2RlIiwgImFmdGVyVGl0bGUiLCAiYmVmb3JlTGFiZWwiLCAidG9vbHRpcEl0ZW0iLCAiaXNOdWxsT3JVbmRlZiIsICJsYWJlbENvbG9yIiwgImxhYmVsVGV4dENvbG9yIiwgImJvZHlDb2xvciIsICJsYWJlbFBvaW50U3R5bGUiLCAiYWZ0ZXJMYWJlbCIsICJiZWZvcmVGb290ZXIiLCAiYWZ0ZXJGb290ZXIiLCAiaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2siLCAiYXJnIiwgInJlc3VsdCIsICJUb29sdGlwIiwgIm9wYWNpdHkiLCAiX2FjdGl2ZSIsICJfZXZlbnRQb3NpdGlvbiIsICJfc2l6ZSIsICJfY2FjaGVkQW5pbWF0aW9ucyIsICJfdG9vbHRpcEl0ZW1zIiwgIiRhbmltYXRpb25zIiwgIiRjb250ZXh0IiwgImRhdGFQb2ludHMiLCAiY2FyZXRYIiwgImNhcmV0WSIsICJsYWJlbENvbG9ycyIsICJsYWJlbFBvaW50U3R5bGVzIiwgImxhYmVsVGV4dENvbG9ycyIsICJpbml0aWFsaXplIiwgIl9yZXNvbHZlQW5pbWF0aW9ucyIsICJjYWNoZWQiLCAic2V0Q29udGV4dCIsICJnZXRDb250ZXh0IiwgImVuYWJsZWQiLCAiYW5pbWF0aW9uIiwgImFuaW1hdGlvbnMiLCAiQW5pbWF0aW9ucyIsICJfY2FjaGVhYmxlIiwgImZyZWV6ZSIsICJnZXRUaXRsZSIsICJnZXRCZWZvcmVCb2R5IiwgImdldEJvZHkiLCAiYm9keUl0ZW1zIiwgInNjb3BlZCIsICJnZXRBZnRlckJvZHkiLCAiZ2V0Rm9vdGVyIiwgIl9jcmVhdGVJdGVtcyIsICJhY3RpdmUiLCAiYXJyYXkiLCAiaXRlbVNvcnQiLCAiY2hhbmdlZCIsICJwcm9wZXJ0aWVzIiwgInBvc2l0aW9uQW5kU2l6ZSIsICJhc3NpZ24iLCAiYmFja2dyb3VuZFBvaW50IiwgImV4dGVybmFsIiwgImRyYXdDYXJldCIsICJ0b29sdGlwUG9pbnQiLCAiY2FyZXRQb3NpdGlvbiIsICJnZXRDYXJldFBvc2l0aW9uIiwgImxpbmVUbyIsICJ4MSIsICJ5MSIsICJ4MiIsICJ5MiIsICJ4MyIsICJ5MyIsICJwdFgiLCAicHRZIiwgInB0IiwgInRpdGxlQWxpZ24iLCAidGl0bGVDb2xvciIsICJfZHJhd0NvbG9yQm94IiwgImNvbG9yWCIsICJydGxDb2xvclgiLCAieU9mZlNldCIsICJjb2xvclkiLCAibXVsdGlLZXlCYWNrZ3JvdW5kIiwgImRyYXdQb2ludCIsICJpc09iamVjdCIsICJvdXRlclgiLCAiaW5uZXJYIiwgImZpbGxSZWN0IiwgInN0cm9rZVJlY3QiLCAiZHJhd0JvZHkiLCAiYm9keUFsaWduIiwgInhMaW5lUGFkZGluZyIsICJmaWxsTGluZU9mVGV4dCIsICJib2R5QWxpZ25Gb3JDYWxjdWxhdGlvbiIsICJ0ZXh0Q29sb3IiLCAiaiIsICJpbGVuIiwgImpsZW4iLCAiZHJhd0Zvb3RlciIsICJmb290ZXJBbGlnbiIsICJmb290ZXJDb2xvciIsICJkcmF3QmFja2dyb3VuZCIsICJ0b29sdGlwU2l6ZSIsICJtb3ZlVG8iLCAicXVhZHJhdGljQ3VydmVUbyIsICJjbG9zZVBhdGgiLCAiX3VwZGF0ZUFuaW1hdGlvblRhcmdldCIsICJhbmltcyIsICJhbmltWCIsICJhbmltWSIsICJwb2ludCIsICJfdG8iLCAiX3dpbGxSZW5kZXIiLCAiYWJzIiwgImhhc1Rvb2x0aXBDb250ZW50IiwgImdsb2JhbEFscGhhIiwgImdldEFjdGl2ZUVsZW1lbnRzIiwgInNldEFjdGl2ZUVsZW1lbnRzIiwgImFjdGl2ZUVsZW1lbnRzIiwgImxhc3RBY3RpdmUiLCAiRXJyb3IiLCAiX2VsZW1lbnRzRXF1YWwiLCAicG9zaXRpb25DaGFuZ2VkIiwgIl9wb3NpdGlvbkNoYW5nZWQiLCAiX2lnbm9yZVJlcGxheUV2ZW50cyIsICJpbkNoYXJ0QXJlYSIsICJfZ2V0QWN0aXZlRWxlbWVudHMiLCAiZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZSIsICJhZnRlckluaXQiLCAicmVzZXQiLCAiYWZ0ZXJEcmF3IiwgIm5vdGlmeVBsdWdpbnMiLCAiY2FuY2VsYWJsZSIsICJ1c2VGaW5hbFBvc2l0aW9uIiwgImR1cmF0aW9uIiwgImVhc2luZyIsICJudW1iZXJzIiwgIl9mYWxsYmFjayIsICJhZGRpdGlvbmFsT3B0aW9uU2NvcGVzIiwgImFkZElmU3RyaW5nIiwgImxhYmVscyIsICJyYXciLCAiaW5kZXgiLCAiYWRkZWRMYWJlbHMiLCAicHVzaCIsICJ1bnNoaWZ0IiwgImxhYmVsIiwgImlzTmFOIiwgImZpbmRPckFkZExhYmVsIiwgImZpcnN0IiwgImluZGV4T2YiLCAibGFzdCIsICJsYXN0SW5kZXhPZiIsICJ2YWxpZEluZGV4IiwgIm1heCIsICJfbGltaXRWYWx1ZSIsICJNYXRoIiwgInJvdW5kIiwgIl9nZXRMYWJlbEZvclZhbHVlIiwgInZhbHVlIiwgImdldExhYmVscyIsICJsZW5ndGgiLCAiQ2F0ZWdvcnlTY2FsZSIsICJTY2FsZSIsICJjb25zdHJ1Y3RvciIsICJjZmciLCAiX3N0YXJ0VmFsdWUiLCAidW5kZWZpbmVkIiwgIl92YWx1ZVJhbmdlIiwgIl9hZGRlZExhYmVscyIsICJpbml0IiwgInNjYWxlT3B0aW9ucyIsICJhZGRlZCIsICJzcGxpY2UiLCAicGFyc2UiLCAiaXNOdWxsT3JVbmRlZiIsICJpc0Zpbml0ZSIsICJ2YWx1ZU9yRGVmYXVsdCIsICJkZXRlcm1pbmVEYXRhTGltaXRzIiwgIm1pbkRlZmluZWQiLCAibWF4RGVmaW5lZCIsICJnZXRVc2VyQm91bmRzIiwgIm1pbiIsICJnZXRNaW5NYXgiLCAib3B0aW9ucyIsICJib3VuZHMiLCAiYnVpbGRUaWNrcyIsICJvZmZzZXQiLCAidGlja3MiLCAic2xpY2UiLCAiZ2V0TGFiZWxGb3JWYWx1ZSIsICJjYWxsIiwgImNvbmZpZ3VyZSIsICJpc0hvcml6b250YWwiLCAiX3JldmVyc2VQaXhlbHMiLCAiZ2V0UGl4ZWxGb3JWYWx1ZSIsICJOYU4iLCAiZ2V0UGl4ZWxGb3JEZWNpbWFsIiwgImdldFBpeGVsRm9yVGljayIsICJnZXRWYWx1ZUZvclBpeGVsIiwgInBpeGVsIiwgImdldERlY2ltYWxGb3JQaXhlbCIsICJnZXRCYXNlUGl4ZWwiLCAiYm90dG9tIiwgImlkIiwgImRlZmF1bHRzIiwgImNhbGxiYWNrIiwgImdlbmVyYXRlVGlja3MiLCAiZ2VuZXJhdGlvbk9wdGlvbnMiLCAiZGF0YVJhbmdlIiwgIk1JTl9TUEFDSU5HIiwgInN0ZXAiLCAicHJlY2lzaW9uIiwgImNvdW50IiwgIm1heFRpY2tzIiwgIm1heERpZ2l0cyIsICJpbmNsdWRlQm91bmRzIiwgInVuaXQiLCAibWF4U3BhY2VzIiwgInJtaW4iLCAicm1heCIsICJjb3VudERlZmluZWQiLCAibWluU3BhY2luZyIsICJzcGFjaW5nIiwgIm5pY2VOdW0iLCAiZmFjdG9yIiwgIm5pY2VNaW4iLCAibmljZU1heCIsICJudW1TcGFjZXMiLCAiY2VpbCIsICJmbG9vciIsICJwb3ciLCAiYWxtb3N0V2hvbGUiLCAiYWxtb3N0RXF1YWxzIiwgImRlY2ltYWxQbGFjZXMiLCAiX2RlY2ltYWxQbGFjZXMiLCAiaiIsICJyZWxhdGl2ZUxhYmVsU2l6ZSIsICJ0aWNrVmFsdWUiLCAiaG9yaXpvbnRhbCIsICJtaW5Sb3RhdGlvbiIsICJyYWQiLCAidG9SYWRpYW5zIiwgInJhdGlvIiwgInNpbiIsICJjb3MiLCAiTGluZWFyU2NhbGVCYXNlIiwgInN0YXJ0IiwgImVuZCIsICJfZW5kVmFsdWUiLCAiTnVtYmVyIiwgImhhbmRsZVRpY2tSYW5nZU9wdGlvbnMiLCAiYmVnaW5BdFplcm8iLCAic2V0TWluIiwgInYiLCAic2V0TWF4IiwgIm1pblNpZ24iLCAic2lnbiIsICJtYXhTaWduIiwgImFicyIsICJnZXRUaWNrTGltaXQiLCAidGlja09wdHMiLCAibWF4VGlja3NMaW1pdCIsICJzdGVwU2l6ZSIsICJjb25zb2xlIiwgIndhcm4iLCAiY29tcHV0ZVRpY2tMaW1pdCIsICJQT1NJVElWRV9JTkZJTklUWSIsICJvcHRzIiwgIm51bWVyaWNHZW5lcmF0b3JPcHRpb25zIiwgIl9tYXhEaWdpdHMiLCAiX3JhbmdlIiwgIl9zZXRNaW5BbmRNYXhCeUtleSIsICJyZXZlcnNlIiwgImZvcm1hdE51bWJlciIsICJjaGFydCIsICJsb2NhbGUiLCAiZm9ybWF0IiwgIkxpbmVhclNjYWxlIiwgIndpZHRoIiwgImhlaWdodCIsICJ0aWNrRm9udCIsICJfcmVzb2x2ZVRpY2tGb250T3B0aW9ucyIsICJsaW5lSGVpZ2h0IiwgIlRpY2tzIiwgImZvcm1hdHRlcnMiLCAibnVtZXJpYyIsICJsb2cxMEZsb29yIiwgImxvZzEwIiwgImNoYW5nZUV4cG9uZW50IiwgIm0iLCAiaXNNYWpvciIsICJ0aWNrVmFsIiwgInJlbWFpbiIsICJzdGVwcyIsICJyYW5nZUV4cCIsICJyYW5nZVN0ZXAiLCAic3RhcnRFeHAiLCAicmFuZ2UiLCAiZmluaXRlT3JEZWZhdWx0IiwgIm1pbkV4cCIsICJleHAiLCAiYmFzZSIsICJzaWduaWZpY2FuZCIsICJtYWpvciIsICJsYXN0VGljayIsICJMb2dhcml0aG1pY1NjYWxlIiwgInByb3RvdHlwZSIsICJhcHBseSIsICJfemVybyIsICJfc3VnZ2VzdGVkTWluIiwgIl91c2VyTWluIiwgIl91c2VyTWF4IiwgImRlY2ltYWwiLCAibG9nYXJpdGhtaWMiLCAiZW5hYmxlZCIsICJnZXRUaWNrQmFja2Ryb3BIZWlnaHQiLCAiZGlzcGxheSIsICJwYWRkaW5nIiwgInRvUGFkZGluZyIsICJiYWNrZHJvcFBhZGRpbmciLCAiZm9udCIsICJzaXplIiwgIm1lYXN1cmVMYWJlbFNpemUiLCAiY3R4IiwgImlzQXJyYXkiLCAidyIsICJfbG9uZ2VzdFRleHQiLCAic3RyaW5nIiwgImgiLCAiZGV0ZXJtaW5lTGltaXRzIiwgImFuZ2xlIiwgInBvcyIsICJmaXRXaXRoUG9pbnRMYWJlbHMiLCAic2NhbGUiLCAib3JpZyIsICJsIiwgImxlZnQiLCAiX3BhZGRpbmciLCAiciIsICJyaWdodCIsICJ0IiwgInRvcCIsICJiIiwgImxpbWl0cyIsICJPYmplY3QiLCAiYXNzaWduIiwgImxhYmVsU2l6ZXMiLCAidmFsdWVDb3VudCIsICJfcG9pbnRMYWJlbHMiLCAicG9pbnRMYWJlbE9wdHMiLCAicG9pbnRMYWJlbHMiLCAiYWRkaXRpb25hbEFuZ2xlIiwgImNlbnRlclBvaW50TGFiZWxzIiwgIlBJIiwgImkiLCAic2V0Q29udGV4dCIsICJnZXRQb2ludExhYmVsQ29udGV4dCIsICJwb2ludFBvc2l0aW9uIiwgImdldFBvaW50UG9zaXRpb24iLCAiZHJhd2luZ0FyZWEiLCAicGxGb250IiwgInRvRm9udCIsICJ0ZXh0U2l6ZSIsICJhbmdsZVJhZGlhbnMiLCAiX25vcm1hbGl6ZUFuZ2xlIiwgImdldEluZGV4QW5nbGUiLCAidG9EZWdyZWVzIiwgImhMaW1pdHMiLCAieCIsICJ2TGltaXRzIiwgInkiLCAidXBkYXRlTGltaXRzIiwgInNldENlbnRlclBvaW50IiwgIl9wb2ludExhYmVsSXRlbXMiLCAiYnVpbGRQb2ludExhYmVsSXRlbXMiLCAiY3JlYXRlUG9pbnRMYWJlbEl0ZW0iLCAiaXRlbU9wdHMiLCAib3V0ZXJEaXN0YW5jZSIsICJleHRyYSIsICJwb2ludExhYmVsUG9zaXRpb24iLCAiSEFMRl9QSSIsICJ5Rm9yQW5nbGUiLCAidGV4dEFsaWduIiwgImdldFRleHRBbGlnbkZvckFuZ2xlIiwgImxlZnRGb3JUZXh0QWxpZ24iLCAidmlzaWJsZSIsICJpc05vdE92ZXJsYXBwZWQiLCAiaXRlbSIsICJhcmVhIiwgImFwZXhlc0luQXJlYSIsICJfaXNQb2ludEluQXJlYSIsICJpdGVtcyIsICJhbGlnbiIsICJkcmF3UG9pbnRMYWJlbEJveCIsICJiYWNrZHJvcENvbG9yIiwgImJvcmRlclJhZGl1cyIsICJ0b1RSQkxDb3JuZXJzIiwgImZpbGxTdHlsZSIsICJiYWNrZHJvcExlZnQiLCAiYmFja2Ryb3BUb3AiLCAiYmFja2Ryb3BXaWR0aCIsICJiYWNrZHJvcEhlaWdodCIsICJ2YWx1ZXMiLCAic29tZSIsICJiZWdpblBhdGgiLCAiYWRkUm91bmRlZFJlY3RQYXRoIiwgInJhZGl1cyIsICJmaWxsIiwgImZpbGxSZWN0IiwgImRyYXdQb2ludExhYmVscyIsICJsYWJlbENvdW50IiwgIm9wdHNBdEluZGV4IiwgInJlbmRlclRleHQiLCAiY29sb3IiLCAidGV4dEJhc2VsaW5lIiwgInBhdGhSYWRpdXNMaW5lIiwgImNpcmN1bGFyIiwgImFyYyIsICJ4Q2VudGVyIiwgInlDZW50ZXIiLCAiVEFVIiwgIm1vdmVUbyIsICJsaW5lVG8iLCAiZHJhd1JhZGl1c0xpbmUiLCAiZ3JpZExpbmVPcHRzIiwgImJvcmRlck9wdHMiLCAibGluZVdpZHRoIiwgInNhdmUiLCAic3Ryb2tlU3R5bGUiLCAic2V0TGluZURhc2giLCAiZGFzaCIsICJsaW5lRGFzaE9mZnNldCIsICJkYXNoT2Zmc2V0IiwgImNsb3NlUGF0aCIsICJzdHJva2UiLCAicmVzdG9yZSIsICJjcmVhdGVQb2ludExhYmVsQ29udGV4dCIsICJwYXJlbnQiLCAiY3JlYXRlQ29udGV4dCIsICJ0eXBlIiwgIlJhZGlhbExpbmVhclNjYWxlIiwgInNldERpbWVuc2lvbnMiLCAibWF4V2lkdGgiLCAibWF4SGVpZ2h0IiwgImdlbmVyYXRlVGlja0xhYmVscyIsICJtYXAiLCAiY2FsbENhbGxiYWNrIiwgImZpbHRlciIsICJnZXREYXRhVmlzaWJpbGl0eSIsICJmaXQiLCAibGVmdE1vdmVtZW50IiwgInJpZ2h0TW92ZW1lbnQiLCAidG9wTW92ZW1lbnQiLCAiYm90dG9tTW92ZW1lbnQiLCAiYW5nbGVNdWx0aXBsaWVyIiwgInN0YXJ0QW5nbGUiLCAiZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUiLCAic2NhbGluZ0ZhY3RvciIsICJnZXRWYWx1ZUZvckRpc3RhbmNlRnJvbUNlbnRlciIsICJkaXN0YW5jZSIsICJzY2FsZWREaXN0YW5jZSIsICJwb2ludExhYmVsIiwgImdldENvbnRleHQiLCAiZGlzdGFuY2VGcm9tQ2VudGVyIiwgImdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZSIsICJnZXRCYXNlUG9zaXRpb24iLCAiZ2V0QmFzZVZhbHVlIiwgImdldFBvaW50TGFiZWxQb3NpdGlvbiIsICJkcmF3QmFja2dyb3VuZCIsICJiYWNrZ3JvdW5kQ29sb3IiLCAiZ3JpZCIsICJkcmF3R3JpZCIsICJhbmdsZUxpbmVzIiwgImJvcmRlciIsICJwb3NpdGlvbiIsICJmb3JFYWNoIiwgInRpY2siLCAiY29udGV4dCIsICJvcHRzQXRJbmRleEJvcmRlciIsICJib3JkZXJEYXNoIiwgImJvcmRlckRhc2hPZmZzZXQiLCAiZHJhd0JvcmRlciIsICJkcmF3TGFiZWxzIiwgInRyYW5zbGF0ZSIsICJyb3RhdGUiLCAic2hvd0xhYmVsQmFja2Ryb3AiLCAibWVhc3VyZVRleHQiLCAic3Ryb2tlQ29sb3IiLCAidGV4dFN0cm9rZUNvbG9yIiwgInN0cm9rZVdpZHRoIiwgInRleHRTdHJva2VXaWR0aCIsICJkcmF3VGl0bGUiLCAiYW5pbWF0ZSIsICJkZWZhdWx0Um91dGVzIiwgImRlc2NyaXB0b3JzIiwgIl9mYWxsYmFjayIsICJJTlRFUlZBTFMiLCAibWlsbGlzZWNvbmQiLCAiY29tbW9uIiwgInNlY29uZCIsICJtaW51dGUiLCAiaG91ciIsICJkYXkiLCAid2VlayIsICJtb250aCIsICJxdWFydGVyIiwgInllYXIiLCAiVU5JVFMiLCAia2V5cyIsICJzb3J0ZXIiLCAiYSIsICJpbnB1dCIsICJhZGFwdGVyIiwgIl9hZGFwdGVyIiwgInBhcnNlciIsICJpc29XZWVrZGF5IiwgIl9wYXJzZU9wdHMiLCAiaXNOdW1iZXIiLCAic3RhcnRPZiIsICJkZXRlcm1pbmVVbml0Rm9yQXV0b1RpY2tzIiwgIm1pblVuaXQiLCAiY2FwYWNpdHkiLCAiaWxlbiIsICJpbnRlcnZhbCIsICJNQVhfU0FGRV9JTlRFR0VSIiwgImRldGVybWluZVVuaXRGb3JGb3JtYXR0aW5nIiwgIm51bVRpY2tzIiwgImRpZmYiLCAiZGV0ZXJtaW5lTWFqb3JVbml0IiwgImFkZFRpY2siLCAidGltZSIsICJ0aW1lc3RhbXBzIiwgImxvIiwgImhpIiwgIl9sb29rdXAiLCAidGltZXN0YW1wIiwgInNldE1ham9yVGlja3MiLCAibWFqb3JVbml0IiwgImFkZCIsICJ0aWNrc0Zyb21UaW1lc3RhbXBzIiwgIlRpbWVTY2FsZSIsICJwcm9wcyIsICJfY2FjaGUiLCAiZGF0YSIsICJhbGwiLCAiX3VuaXQiLCAiX21ham9yVW5pdCIsICJfb2Zmc2V0cyIsICJfbm9ybWFsaXplZCIsICJzY2FsZU9wdHMiLCAiYWRhcHRlcnMiLCAiX2RhdGUiLCAiZGF0ZSIsICJtZXJnZUlmIiwgImRpc3BsYXlGb3JtYXRzIiwgImZvcm1hdHMiLCAibm9ybWFsaXplZCIsICJiZWZvcmVMYXlvdXQiLCAiX2FwcGx5Qm91bmRzIiwgIl9nZXRMYWJlbEJvdW5kcyIsICJzb3VyY2UiLCAiRGF0ZSIsICJub3ciLCAiZW5kT2YiLCAiYXJyIiwgImdldExhYmVsVGltZXN0YW1wcyIsICJORUdBVElWRV9JTkZJTklUWSIsICJ0aW1lT3B0cyIsICJfZ2VuZXJhdGUiLCAiX2ZpbHRlckJldHdlZW4iLCAiYXV0b1NraXAiLCAiX2dldExhYmVsQ2FwYWNpdHkiLCAiaW5pdE9mZnNldHMiLCAiYWZ0ZXJBdXRvU2tpcCIsICJvZmZzZXRBZnRlckF1dG9za2lwIiwgImdldERlY2ltYWxGb3JWYWx1ZSIsICJsaW1pdCIsICJtaW5vciIsICJ3ZWVrZGF5IiwgImhhc1dlZWtkYXkiLCAiRXJyb3IiLCAiZ2V0RGF0YVRpbWVzdGFtcHMiLCAic29ydCIsICJ0b29sdGlwRm9ybWF0IiwgImRhdGV0aW1lIiwgImZtdCIsICJfdGlja0Zvcm1hdEZ1bmN0aW9uIiwgImZvcm1hdHRlciIsICJtaW5vckZvcm1hdCIsICJtYWpvckZvcm1hdCIsICJvZmZzZXRzIiwgIl9nZXRMYWJlbFNpemUiLCAidGlja3NPcHRzIiwgInRpY2tMYWJlbFdpZHRoIiwgIm1heFJvdGF0aW9uIiwgImNvc1JvdGF0aW9uIiwgInNpblJvdGF0aW9uIiwgInRpY2tGb250U2l6ZSIsICJleGFtcGxlVGltZSIsICJleGFtcGxlTGFiZWwiLCAibWV0YXMiLCAiZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMiLCAiY29udHJvbGxlciIsICJnZXRBbGxQYXJzZWRWYWx1ZXMiLCAiY29uY2F0IiwgIm5vcm1hbGl6ZSIsICJfYXJyYXlVbmlxdWUiLCAiaW50ZXJwb2xhdGUiLCAidGFibGUiLCAidmFsIiwgInByZXZTb3VyY2UiLCAibmV4dFNvdXJjZSIsICJwcmV2VGFyZ2V0IiwgIm5leHRUYXJnZXQiLCAiX2xvb2t1cEJ5S2V5IiwgInNwYW4iLCAiVGltZVNlcmllc1NjYWxlIiwgIl90YWJsZSIsICJfbWluUG9zIiwgIl90YWJsZVJhbmdlIiwgIl9nZXRUaW1lc3RhbXBzRm9yVGFibGUiLCAiYnVpbGRMb29rdXBUYWJsZSIsICJwcmV2IiwgImN1cnIiLCAibmV4dCIsICJpbmNsdWRlcyIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X3ZodG1sIiwgImgiLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAibm93IiwgIkRlY2siLCAibm93Il0KfQo=