"use strict"; 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 __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __esm = (fn, res) => function __init() { return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; }; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all3) => { for (var name in all3) __defProp(target, name, { get: all3[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; 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); // node_modules/lodash.deburr/index.js var require_lodash = __commonJS({ "node_modules/lodash.deburr/index.js"(exports2, module2) { var INFINITY = 1 / 0; var symbolTag = "[object Symbol]"; var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; var rsComboMarksRange = "\\u0300-\\u036f\\ufe20-\\ufe23"; var rsComboSymbolsRange = "\\u20d0-\\u20f0"; var rsCombo = "[" + rsComboMarksRange + rsComboSymbolsRange + "]"; var reComboMark = RegExp(rsCombo, "g"); var deburredLetters = { // Latin-1 Supplement block. "\xC0": "A", "\xC1": "A", "\xC2": "A", "\xC3": "A", "\xC4": "A", "\xC5": "A", "\xE0": "a", "\xE1": "a", "\xE2": "a", "\xE3": "a", "\xE4": "a", "\xE5": "a", "\xC7": "C", "\xE7": "c", "\xD0": "D", "\xF0": "d", "\xC8": "E", "\xC9": "E", "\xCA": "E", "\xCB": "E", "\xE8": "e", "\xE9": "e", "\xEA": "e", "\xEB": "e", "\xCC": "I", "\xCD": "I", "\xCE": "I", "\xCF": "I", "\xEC": "i", "\xED": "i", "\xEE": "i", "\xEF": "i", "\xD1": "N", "\xF1": "n", "\xD2": "O", "\xD3": "O", "\xD4": "O", "\xD5": "O", "\xD6": "O", "\xD8": "O", "\xF2": "o", "\xF3": "o", "\xF4": "o", "\xF5": "o", "\xF6": "o", "\xF8": "o", "\xD9": "U", "\xDA": "U", "\xDB": "U", "\xDC": "U", "\xF9": "u", "\xFA": "u", "\xFB": "u", "\xFC": "u", "\xDD": "Y", "\xFD": "y", "\xFF": "y", "\xC6": "Ae", "\xE6": "ae", "\xDE": "Th", "\xFE": "th", "\xDF": "ss", // Latin Extended-A block. "\u0100": "A", "\u0102": "A", "\u0104": "A", "\u0101": "a", "\u0103": "a", "\u0105": "a", "\u0106": "C", "\u0108": "C", "\u010A": "C", "\u010C": "C", "\u0107": "c", "\u0109": "c", "\u010B": "c", "\u010D": "c", "\u010E": "D", "\u0110": "D", "\u010F": "d", "\u0111": "d", "\u0112": "E", "\u0114": "E", "\u0116": "E", "\u0118": "E", "\u011A": "E", "\u0113": "e", "\u0115": "e", "\u0117": "e", "\u0119": "e", "\u011B": "e", "\u011C": "G", "\u011E": "G", "\u0120": "G", "\u0122": "G", "\u011D": "g", "\u011F": "g", "\u0121": "g", "\u0123": "g", "\u0124": "H", "\u0126": "H", "\u0125": "h", "\u0127": "h", "\u0128": "I", "\u012A": "I", "\u012C": "I", "\u012E": "I", "\u0130": "I", "\u0129": "i", "\u012B": "i", "\u012D": "i", "\u012F": "i", "\u0131": "i", "\u0134": "J", "\u0135": "j", "\u0136": "K", "\u0137": "k", "\u0138": "k", "\u0139": "L", "\u013B": "L", "\u013D": "L", "\u013F": "L", "\u0141": "L", "\u013A": "l", "\u013C": "l", "\u013E": "l", "\u0140": "l", "\u0142": "l", "\u0143": "N", "\u0145": "N", "\u0147": "N", "\u014A": "N", "\u0144": "n", "\u0146": "n", "\u0148": "n", "\u014B": "n", "\u014C": "O", "\u014E": "O", "\u0150": "O", "\u014D": "o", "\u014F": "o", "\u0151": "o", "\u0154": "R", "\u0156": "R", "\u0158": "R", "\u0155": "r", "\u0157": "r", "\u0159": "r", "\u015A": "S", "\u015C": "S", "\u015E": "S", "\u0160": "S", "\u015B": "s", "\u015D": "s", "\u015F": "s", "\u0161": "s", "\u0162": "T", "\u0164": "T", "\u0166": "T", "\u0163": "t", "\u0165": "t", "\u0167": "t", "\u0168": "U", "\u016A": "U", "\u016C": "U", "\u016E": "U", "\u0170": "U", "\u0172": "U", "\u0169": "u", "\u016B": "u", "\u016D": "u", "\u016F": "u", "\u0171": "u", "\u0173": "u", "\u0174": "W", "\u0175": "w", "\u0176": "Y", "\u0177": "y", "\u0178": "Y", "\u0179": "Z", "\u017B": "Z", "\u017D": "Z", "\u017A": "z", "\u017C": "z", "\u017E": "z", "\u0132": "IJ", "\u0133": "ij", "\u0152": "Oe", "\u0153": "oe", "\u0149": "'n", "\u017F": "ss" }; var freeGlobal = typeof global == "object" && global && global.Object === Object && global; var freeSelf = typeof self == "object" && self && self.Object === Object && self; var root2 = freeGlobal || freeSelf || Function("return this")(); function basePropertyOf(object) { return function(key) { return object == null ? void 0 : object[key]; }; } var deburrLetter = basePropertyOf(deburredLetters); var objectProto = Object.prototype; var objectToString = objectProto.toString; var Symbol2 = root2.Symbol; var symbolProto = Symbol2 ? Symbol2.prototype : void 0; var symbolToString = symbolProto ? symbolProto.toString : void 0; function baseToString(value) { if (typeof value == "string") { return value; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ""; } var result = value + ""; return result == "0" && 1 / value == -INFINITY ? "-0" : result; } function isObjectLike(value) { return !!value && typeof value == "object"; } function isSymbol(value) { return typeof value == "symbol" || isObjectLike(value) && objectToString.call(value) == symbolTag; } function toString2(value) { return value == null ? "" : baseToString(value); } function deburr(string3) { string3 = toString2(string3); return string3 && string3.replace(reLatin, deburrLetter).replace(reComboMark, ""); } module2.exports = deburr; } }); // node_modules/@stream-io/transliterate/dist/index.modern.js var index_modern_exports = {}; __export(index_modern_exports, { default: () => h }); function t() { return t = Object.assign || function(e2) { for (var t2 = 1; t2 < arguments.length; t2++) { var o2 = arguments[t2]; for (var a2 in o2) Object.prototype.hasOwnProperty.call(o2, a2) && (e2[a2] = o2[a2]); } return e2; }, t.apply(this, arguments); } function h(o2, h2) { if ("string" != typeof o2) throw new TypeError(`Expected a string, got \`${typeof o2}\``); h2 = t({ customReplacements: [] }, h2); const r = new Map([...s, ...h2.customReplacements]); return o2 = ((e2, t2) => { for (const [o3, s2] of t2) e2 = e2.replace(new RegExp(a(o3), "g"), s2); return e2; })(o2 = o2.normalize(), r), (0, import_lodash.default)(o2); } var import_lodash, o, a, s; var init_index_modern = __esm({ "node_modules/@stream-io/transliterate/dist/index.modern.js"() { import_lodash = __toESM(require_lodash(), 1); o = /[|\\{}()[\]^$+*?.]/g; a = function(e2) { if ("string" != typeof e2) throw new TypeError("Expected a string"); return e2.replace(o, "\\$&"); }; s = [["\xDF", "ss"], ["\u1E9E", "Ss"], ["\xE4", "ae"], ["\xC4", "Ae"], ["\xF6", "oe"], ["\xD6", "Oe"], ["\xFC", "ue"], ["\xDC", "Ue"], ["\xC0", "A"], ["\xC1", "A"], ["\xC2", "A"], ["\xC3", "A"], ["\xC4", "Ae"], ["\xC5", "A"], ["\xC6", "AE"], ["\xC7", "C"], ["\xC8", "E"], ["\xC9", "E"], ["\xCA", "E"], ["\xCB", "E"], ["\xCC", "I"], ["\xCD", "I"], ["\xCE", "I"], ["\xCF", "I"], ["\xD0", "D"], ["\xD1", "N"], ["\xD2", "O"], ["\xD3", "O"], ["\xD4", "O"], ["\xD5", "O"], ["\xD6", "Oe"], ["\u0150", "O"], ["\xD8", "O"], ["\xD9", "U"], ["\xDA", "U"], ["\xDB", "U"], ["\xDC", "Ue"], ["\u0170", "U"], ["\xDD", "Y"], ["\xDE", "TH"], ["\xDF", "ss"], ["\xE0", "a"], ["\xE1", "a"], ["\xE2", "a"], ["\xE3", "a"], ["\xE4", "ae"], ["\xE5", "a"], ["\xE6", "ae"], ["\xE7", "c"], ["\xE8", "e"], ["\xE9", "e"], ["\xEA", "e"], ["\xEB", "e"], ["\xEC", "i"], ["\xED", "i"], ["\xEE", "i"], ["\xEF", "i"], ["\xF0", "d"], ["\xF1", "n"], ["\xF2", "o"], ["\xF3", "o"], ["\xF4", "o"], ["\xF5", "o"], ["\xF6", "oe"], ["\u0151", "o"], ["\xF8", "o"], ["\xF9", "u"], ["\xFA", "u"], ["\xFB", "u"], ["\xFC", "ue"], ["\u0171", "u"], ["\xFD", "y"], ["\xFE", "th"], ["\xFF", "y"], ["\u1E9E", "SS"], ["\xE0", "a"], ["\xC0", "A"], ["\xE1", "a"], ["\xC1", "A"], ["\xE2", "a"], ["\xC2", "A"], ["\xE3", "a"], ["\xC3", "A"], ["\xE8", "e"], ["\xC8", "E"], ["\xE9", "e"], ["\xC9", "E"], ["\xEA", "e"], ["\xCA", "E"], ["\xEC", "i"], ["\xCC", "I"], ["\xED", "i"], ["\xCD", "I"], ["\xF2", "o"], ["\xD2", "O"], ["\xF3", "o"], ["\xD3", "O"], ["\xF4", "o"], ["\xD4", "O"], ["\xF5", "o"], ["\xD5", "O"], ["\xF9", "u"], ["\xD9", "U"], ["\xFA", "u"], ["\xDA", "U"], ["\xFD", "y"], ["\xDD", "Y"], ["\u0103", "a"], ["\u0102", "A"], ["\u0110", "D"], ["\u0111", "d"], ["\u0129", "i"], ["\u0128", "I"], ["\u0169", "u"], ["\u0168", "U"], ["\u01A1", "o"], ["\u01A0", "O"], ["\u01B0", "u"], ["\u01AF", "U"], ["\u1EA1", "a"], ["\u1EA0", "A"], ["\u1EA3", "a"], ["\u1EA2", "A"], ["\u1EA5", "a"], ["\u1EA4", "A"], ["\u1EA7", "a"], ["\u1EA6", "A"], ["\u1EA9", "a"], ["\u1EA8", "A"], ["\u1EAB", "a"], ["\u1EAA", "A"], ["\u1EAD", "a"], ["\u1EAC", "A"], ["\u1EAF", "a"], ["\u1EAE", "A"], ["\u1EB1", "a"], ["\u1EB0", "A"], ["\u1EB3", "a"], ["\u1EB2", "A"], ["\u1EB5", "a"], ["\u1EB4", "A"], ["\u1EB7", "a"], ["\u1EB6", "A"], ["\u1EB9", "e"], ["\u1EB8", "E"], ["\u1EBB", "e"], ["\u1EBA", "E"], ["\u1EBD", "e"], ["\u1EBC", "E"], ["\u1EBF", "e"], ["\u1EBE", "E"], ["\u1EC1", "e"], ["\u1EC0", "E"], ["\u1EC3", "e"], ["\u1EC2", "E"], ["\u1EC5", "e"], ["\u1EC4", "E"], ["\u1EC7", "e"], ["\u1EC6", "E"], ["\u1EC9", "i"], ["\u1EC8", "I"], ["\u1ECB", "i"], ["\u1ECA", "I"], ["\u1ECD", "o"], ["\u1ECC", "O"], ["\u1ECF", "o"], ["\u1ECE", "O"], ["\u1ED1", "o"], ["\u1ED0", "O"], ["\u1ED3", "o"], ["\u1ED2", "O"], ["\u1ED5", "o"], ["\u1ED4", "O"], ["\u1ED7", "o"], ["\u1ED6", "O"], ["\u1ED9", "o"], ["\u1ED8", "O"], ["\u1EDB", "o"], ["\u1EDA", "O"], ["\u1EDD", "o"], ["\u1EDC", "O"], ["\u1EDF", "o"], ["\u1EDE", "O"], ["\u1EE1", "o"], ["\u1EE0", "O"], ["\u1EE3", "o"], ["\u1EE2", "O"], ["\u1EE5", "u"], ["\u1EE4", "U"], ["\u1EE7", "u"], ["\u1EE6", "U"], ["\u1EE9", "u"], ["\u1EE8", "U"], ["\u1EEB", "u"], ["\u1EEA", "U"], ["\u1EED", "u"], ["\u1EEC", "U"], ["\u1EEF", "u"], ["\u1EEE", "U"], ["\u1EF1", "u"], ["\u1EF0", "U"], ["\u1EF3", "y"], ["\u1EF2", "Y"], ["\u1EF5", "y"], ["\u1EF4", "Y"], ["\u1EF7", "y"], ["\u1EF6", "Y"], ["\u1EF9", "y"], ["\u1EF8", "Y"], ["\u0621", "e"], ["\u0622", "a"], ["\u0623", "a"], ["\u0624", "w"], ["\u0625", "i"], ["\u0626", "y"], ["\u0627", "a"], ["\u0628", "b"], ["\u0629", "t"], ["\u062A", "t"], ["\u062B", "th"], ["\u062C", "j"], ["\u062D", "h"], ["\u062E", "kh"], ["\u062F", "d"], ["\u0630", "dh"], ["\u0631", "r"], ["\u0632", "z"], ["\u0633", "s"], ["\u0634", "sh"], ["\u0635", "s"], ["\u0636", "d"], ["\u0637", "t"], ["\u0638", "z"], ["\u0639", "e"], ["\u063A", "gh"], ["\u0640", "_"], ["\u0641", "f"], ["\u0642", "q"], ["\u0643", "k"], ["\u0644", "l"], ["\u0645", "m"], ["\u0646", "n"], ["\u0647", "h"], ["\u0648", "w"], ["\u0649", "a"], ["\u064A", "y"], ["\u064E\u200E", "a"], ["\u064F", "u"], ["\u0650\u200E", "i"], ["\u0660", "0"], ["\u0661", "1"], ["\u0662", "2"], ["\u0663", "3"], ["\u0664", "4"], ["\u0665", "5"], ["\u0666", "6"], ["\u0667", "7"], ["\u0668", "8"], ["\u0669", "9"], ["\u0686", "ch"], ["\u06A9", "k"], ["\u06AF", "g"], ["\u067E", "p"], ["\u0698", "zh"], ["\u06CC", "y"], ["\u06F0", "0"], ["\u06F1", "1"], ["\u06F2", "2"], ["\u06F3", "3"], ["\u06F4", "4"], ["\u06F5", "5"], ["\u06F6", "6"], ["\u06F7", "7"], ["\u06F8", "8"], ["\u06F9", "9"], ["\u067C", "p"], ["\u0681", "z"], ["\u0685", "c"], ["\u0689", "d"], ["\uFEAB", "d"], ["\uFEAD", "r"], ["\u0693", "r"], ["\uFEAF", "z"], ["\u0696", "g"], ["\u069A", "x"], ["\u06AB", "g"], ["\u06BC", "n"], ["\u06C0", "e"], ["\u06D0", "e"], ["\u06CD", "ai"], ["\u0679", "t"], ["\u0688", "d"], ["\u0691", "r"], ["\u06BA", "n"], ["\u06C1", "h"], ["\u06BE", "h"], ["\u06D2", "e"], ["\u0410", "A"], ["\u0430", "a"], ["\u0411", "B"], ["\u0431", "b"], ["\u0412", "V"], ["\u0432", "v"], ["\u0413", "G"], ["\u0433", "g"], ["\u0414", "D"], ["\u0434", "d"], ["\u044A\u0435", "ye"], ["\u042A\u0435", "Ye"], ["\u044A\u0415", "yE"], ["\u042A\u0415", "YE"], ["\u0415", "E"], ["\u0435", "e"], ["\u0401", "Yo"], ["\u0451", "yo"], ["\u0416", "Zh"], ["\u0436", "zh"], ["\u0417", "Z"], ["\u0437", "z"], ["\u0418", "I"], ["\u0438", "i"], ["\u044B\u0439", "iy"], ["\u042B\u0439", "Iy"], ["\u042B\u0419", "IY"], ["\u044B\u0419", "iY"], ["\u0419", "Y"], ["\u0439", "y"], ["\u041A", "K"], ["\u043A", "k"], ["\u041B", "L"], ["\u043B", "l"], ["\u041C", "M"], ["\u043C", "m"], ["\u041D", "N"], ["\u043D", "n"], ["\u041E", "O"], ["\u043E", "o"], ["\u041F", "P"], ["\u043F", "p"], ["\u0420", "R"], ["\u0440", "r"], ["\u0421", "S"], ["\u0441", "s"], ["\u0422", "T"], ["\u0442", "t"], ["\u0423", "U"], ["\u0443", "u"], ["\u0424", "F"], ["\u0444", "f"], ["\u0425", "Kh"], ["\u0445", "kh"], ["\u0426", "Ts"], ["\u0446", "ts"], ["\u0427", "Ch"], ["\u0447", "ch"], ["\u0428", "Sh"], ["\u0448", "sh"], ["\u0429", "Sch"], ["\u0449", "sch"], ["\u042A", ""], ["\u044A", ""], ["\u042B", "Y"], ["\u044B", "y"], ["\u042C", ""], ["\u044C", ""], ["\u042D", "E"], ["\u044D", "e"], ["\u042E", "Yu"], ["\u044E", "yu"], ["\u042F", "Ya"], ["\u044F", "ya"], ["\u0103", "a"], ["\u0102", "A"], ["\u0219", "s"], ["\u0218", "S"], ["\u021B", "t"], ["\u021A", "T"], ["\u0163", "t"], ["\u0162", "T"], ["\u015F", "s"], ["\u015E", "S"], ["\xE7", "c"], ["\xC7", "C"], ["\u011F", "g"], ["\u011E", "G"], ["\u0131", "i"], ["\u0130", "I"], ["\u0561", "a"], ["\u0531", "A"], ["\u0562", "b"], ["\u0532", "B"], ["\u0563", "g"], ["\u0533", "G"], ["\u0564", "d"], ["\u0534", "D"], ["\u0565", "ye"], ["\u0535", "Ye"], ["\u0566", "z"], ["\u0536", "Z"], ["\u0567", "e"], ["\u0537", "E"], ["\u0568", "y"], ["\u0538", "Y"], ["\u0569", "t"], ["\u0539", "T"], ["\u056A", "zh"], ["\u053A", "Zh"], ["\u056B", "i"], ["\u053B", "I"], ["\u056C", "l"], ["\u053C", "L"], ["\u056D", "kh"], ["\u053D", "Kh"], ["\u056E", "ts"], ["\u053E", "Ts"], ["\u056F", "k"], ["\u053F", "K"], ["\u0570", "h"], ["\u0540", "H"], ["\u0571", "dz"], ["\u0541", "Dz"], ["\u0572", "gh"], ["\u0542", "Gh"], ["\u0573", "tch"], ["\u0543", "Tch"], ["\u0574", "m"], ["\u0544", "M"], ["\u0575", "y"], ["\u0545", "Y"], ["\u0576", "n"], ["\u0546", "N"], ["\u0577", "sh"], ["\u0547", "Sh"], ["\u0578", "vo"], ["\u0548", "Vo"], ["\u0579", "ch"], ["\u0549", "Ch"], ["\u057A", "p"], ["\u054A", "P"], ["\u057B", "j"], ["\u054B", "J"], ["\u057C", "r"], ["\u054C", "R"], ["\u057D", "s"], ["\u054D", "S"], ["\u057E", "v"], ["\u054E", "V"], ["\u057F", "t"], ["\u054F", "T"], ["\u0580", "r"], ["\u0550", "R"], ["\u0581", "c"], ["\u0551", "C"], ["\u0578\u0582", "u"], ["\u0548\u0552", "U"], ["\u0548\u0582", "U"], ["\u0583", "p"], ["\u0553", "P"], ["\u0584", "q"], ["\u0554", "Q"], ["\u0585", "o"], ["\u0555", "O"], ["\u0586", "f"], ["\u0556", "F"], ["\u0587", "yev"], ["\u10D0", "a"], ["\u10D1", "b"], ["\u10D2", "g"], ["\u10D3", "d"], ["\u10D4", "e"], ["\u10D5", "v"], ["\u10D6", "z"], ["\u10D7", "t"], ["\u10D8", "i"], ["\u10D9", "k"], ["\u10DA", "l"], ["\u10DB", "m"], ["\u10DC", "n"], ["\u10DD", "o"], ["\u10DE", "p"], ["\u10DF", "zh"], ["\u10E0", "r"], ["\u10E1", "s"], ["\u10E2", "t"], ["\u10E3", "u"], ["\u10E4", "ph"], ["\u10E5", "q"], ["\u10E6", "gh"], ["\u10E7", "k"], ["\u10E8", "sh"], ["\u10E9", "ch"], ["\u10EA", "ts"], ["\u10EB", "dz"], ["\u10EC", "ts"], ["\u10ED", "tch"], ["\u10EE", "kh"], ["\u10EF", "j"], ["\u10F0", "h"], ["\u010D", "c"], ["\u010F", "d"], ["\u011B", "e"], ["\u0148", "n"], ["\u0159", "r"], ["\u0161", "s"], ["\u0165", "t"], ["\u016F", "u"], ["\u017E", "z"], ["\u010C", "C"], ["\u010E", "D"], ["\u011A", "E"], ["\u0147", "N"], ["\u0158", "R"], ["\u0160", "S"], ["\u0164", "T"], ["\u016E", "U"], ["\u017D", "Z"], ["\u0780", "h"], ["\u0781", "sh"], ["\u0782", "n"], ["\u0783", "r"], ["\u0784", "b"], ["\u0785", "lh"], ["\u0786", "k"], ["\u0787", "a"], ["\u0788", "v"], ["\u0789", "m"], ["\u078A", "f"], ["\u078B", "dh"], ["\u078C", "th"], ["\u078D", "l"], ["\u078E", "g"], ["\u078F", "gn"], ["\u0790", "s"], ["\u0791", "d"], ["\u0792", "z"], ["\u0793", "t"], ["\u0794", "y"], ["\u0795", "p"], ["\u0796", "j"], ["\u0797", "ch"], ["\u0798", "tt"], ["\u0799", "hh"], ["\u079A", "kh"], ["\u079B", "th"], ["\u079C", "z"], ["\u079D", "sh"], ["\u079E", "s"], ["\u079F", "d"], ["\u07A0", "t"], ["\u07A1", "z"], ["\u07A2", "a"], ["\u07A3", "gh"], ["\u07A4", "q"], ["\u07A5", "w"], ["\u07A6", "a"], ["\u07A7", "aa"], ["\u07A8", "i"], ["\u07A9", "ee"], ["\u07AA", "u"], ["\u07AB", "oo"], ["\u07AC", "e"], ["\u07AD", "ey"], ["\u07AE", "o"], ["\u07AF", "oa"], ["\u07B0", ""], ["\u03B1", "a"], ["\u03B2", "v"], ["\u03B3", "g"], ["\u03B4", "d"], ["\u03B5", "e"], ["\u03B6", "z"], ["\u03B7", "i"], ["\u03B8", "th"], ["\u03B9", "i"], ["\u03BA", "k"], ["\u03BB", "l"], ["\u03BC", "m"], ["\u03BD", "n"], ["\u03BE", "ks"], ["\u03BF", "o"], ["\u03C0", "p"], ["\u03C1", "r"], ["\u03C3", "s"], ["\u03C4", "t"], ["\u03C5", "y"], ["\u03C6", "f"], ["\u03C7", "x"], ["\u03C8", "ps"], ["\u03C9", "o"], ["\u03AC", "a"], ["\u03AD", "e"], ["\u03AF", "i"], ["\u03CC", "o"], ["\u03CD", "y"], ["\u03AE", "i"], ["\u03CE", "o"], ["\u03C2", "s"], ["\u03CA", "i"], ["\u03B0", "y"], ["\u03CB", "y"], ["\u0390", "i"], ["\u0391", "A"], ["\u0392", "B"], ["\u0393", "G"], ["\u0394", "D"], ["\u0395", "E"], ["\u0396", "Z"], ["\u0397", "I"], ["\u0398", "TH"], ["\u0399", "I"], ["\u039A", "K"], ["\u039B", "L"], ["\u039C", "M"], ["\u039D", "N"], ["\u039E", "KS"], ["\u039F", "O"], ["\u03A0", "P"], ["\u03A1", "R"], ["\u03A3", "S"], ["\u03A4", "T"], ["\u03A5", "Y"], ["\u03A6", "F"], ["\u03A7", "X"], ["\u03A8", "PS"], ["\u03A9", "O"], ["\u0386", "A"], ["\u0388", "E"], ["\u038A", "I"], ["\u038C", "O"], ["\u038E", "Y"], ["\u0389", "I"], ["\u038F", "O"], ["\u03AA", "I"], ["\u03AB", "Y"], ["\u0101", "a"], ["\u0113", "e"], ["\u0123", "g"], ["\u012B", "i"], ["\u0137", "k"], ["\u013C", "l"], ["\u0146", "n"], ["\u016B", "u"], ["\u0100", "A"], ["\u0112", "E"], ["\u0122", "G"], ["\u012A", "I"], ["\u0136", "K"], ["\u013B", "L"], ["\u0145", "N"], ["\u016A", "U"], ["\u010D", "c"], ["\u0161", "s"], ["\u017E", "z"], ["\u010C", "C"], ["\u0160", "S"], ["\u017D", "Z"], ["\u0105", "a"], ["\u010D", "c"], ["\u0119", "e"], ["\u0117", "e"], ["\u012F", "i"], ["\u0161", "s"], ["\u0173", "u"], ["\u016B", "u"], ["\u017E", "z"], ["\u0104", "A"], ["\u010C", "C"], ["\u0118", "E"], ["\u0116", "E"], ["\u012E", "I"], ["\u0160", "S"], ["\u0172", "U"], ["\u016A", "U"], ["\u040C", "Kj"], ["\u045C", "kj"], ["\u0409", "Lj"], ["\u0459", "lj"], ["\u040A", "Nj"], ["\u045A", "nj"], ["\u0422\u0441", "Ts"], ["\u0442\u0441", "ts"], ["\u0105", "a"], ["\u0107", "c"], ["\u0119", "e"], ["\u0142", "l"], ["\u0144", "n"], ["\u015B", "s"], ["\u017A", "z"], ["\u017C", "z"], ["\u0104", "A"], ["\u0106", "C"], ["\u0118", "E"], ["\u0141", "L"], ["\u0143", "N"], ["\u015A", "S"], ["\u0179", "Z"], ["\u017B", "Z"], ["\u0404", "Ye"], ["\u0406", "I"], ["\u0407", "Yi"], ["\u0490", "G"], ["\u0454", "ye"], ["\u0456", "i"], ["\u0457", "yi"], ["\u0491", "g"], ["\u0132", "IJ"], ["\u0133", "ij"], ["\xA2", "c"], ["\xA5", "Y"], ["\u07FF", "b"], ["\u09F3", "t"], ["\u0AF1", "Bo"], ["\u0E3F", "B"], ["\u20A0", "CE"], ["\u20A1", "C"], ["\u20A2", "Cr"], ["\u20A3", "F"], ["\u20A5", "m"], ["\u20A6", "N"], ["\u20A7", "Pt"], ["\u20A8", "Rs"], ["\u20A9", "W"], ["\u20AB", "s"], ["\u20AC", "E"], ["\u20AD", "K"], ["\u20AE", "T"], ["\u20AF", "Dp"], ["\u20B0", "S"], ["\u20B1", "P"], ["\u20B2", "G"], ["\u20B3", "A"], ["\u20B4", "S"], ["\u20B5", "C"], ["\u20B6", "tt"], ["\u20B7", "S"], ["\u20B8", "T"], ["\u20B9", "R"], ["\u20BA", "L"], ["\u20BD", "P"], ["\u20BF", "B"], ["\uFE69", "$"], ["\uFFE0", "c"], ["\uFFE5", "Y"], ["\uFFE6", "W"], ["\u{1D400}", "A"], ["\u{1D401}", "B"], ["\u{1D402}", "C"], ["\u{1D403}", "D"], ["\u{1D404}", "E"], ["\u{1D405}", "F"], ["\u{1D406}", "G"], ["\u{1D407}", "H"], ["\u{1D408}", "I"], ["\u{1D409}", "J"], ["\u{1D40A}", "K"], ["\u{1D40B}", "L"], ["\u{1D40C}", "M"], ["\u{1D40D}", "N"], ["\u{1D40E}", "O"], ["\u{1D40F}", "P"], ["\u{1D410}", "Q"], ["\u{1D411}", "R"], ["\u{1D412}", "S"], ["\u{1D413}", "T"], ["\u{1D414}", "U"], ["\u{1D415}", "V"], ["\u{1D416}", "W"], ["\u{1D417}", "X"], ["\u{1D418}", "Y"], ["\u{1D419}", "Z"], ["\u{1D41A}", "a"], ["\u{1D41B}", "b"], ["\u{1D41C}", "c"], ["\u{1D41D}", "d"], ["\u{1D41E}", "e"], ["\u{1D41F}", "f"], ["\u{1D420}", "g"], ["\u{1D421}", "h"], ["\u{1D422}", "i"], ["\u{1D423}", "j"], ["\u{1D424}", "k"], ["\u{1D425}", "l"], ["\u{1D426}", "m"], ["\u{1D427}", "n"], ["\u{1D428}", "o"], ["\u{1D429}", "p"], ["\u{1D42A}", "q"], ["\u{1D42B}", "r"], ["\u{1D42C}", "s"], ["\u{1D42D}", "t"], ["\u{1D42E}", "u"], ["\u{1D42F}", "v"], ["\u{1D430}", "w"], ["\u{1D431}", "x"], ["\u{1D432}", "y"], ["\u{1D433}", "z"], ["\u{1D434}", "A"], ["\u{1D435}", "B"], ["\u{1D436}", "C"], ["\u{1D437}", "D"], ["\u{1D438}", "E"], ["\u{1D439}", "F"], ["\u{1D43A}", "G"], ["\u{1D43B}", "H"], ["\u{1D43C}", "I"], ["\u{1D43D}", "J"], ["\u{1D43E}", "K"], ["\u{1D43F}", "L"], ["\u{1D440}", "M"], ["\u{1D441}", "N"], ["\u{1D442}", "O"], ["\u{1D443}", "P"], ["\u{1D444}", "Q"], ["\u{1D445}", "R"], ["\u{1D446}", "S"], ["\u{1D447}", "T"], ["\u{1D448}", "U"], ["\u{1D449}", "V"], ["\u{1D44A}", "W"], ["\u{1D44B}", "X"], ["\u{1D44C}", "Y"], ["\u{1D44D}", "Z"], ["\u{1D44E}", "a"], ["\u{1D44F}", "b"], ["\u{1D450}", "c"], ["\u{1D451}", "d"], ["\u{1D452}", "e"], ["\u{1D453}", "f"], ["\u{1D454}", "g"], ["\u{1D456}", "i"], ["\u{1D457}", "j"], ["\u{1D458}", "k"], ["\u{1D459}", "l"], ["\u{1D45A}", "m"], ["\u{1D45B}", "n"], ["\u{1D45C}", "o"], ["\u{1D45D}", "p"], ["\u{1D45E}", "q"], ["\u{1D45F}", "r"], ["\u{1D460}", "s"], ["\u{1D461}", "t"], ["\u{1D462}", "u"], ["\u{1D463}", "v"], ["\u{1D464}", "w"], ["\u{1D465}", "x"], ["\u{1D466}", "y"], ["\u{1D467}", "z"], ["\u{1D468}", "A"], ["\u{1D469}", "B"], ["\u{1D46A}", "C"], ["\u{1D46B}", "D"], ["\u{1D46C}", "E"], ["\u{1D46D}", "F"], ["\u{1D46E}", "G"], ["\u{1D46F}", "H"], ["\u{1D470}", "I"], ["\u{1D471}", "J"], ["\u{1D472}", "K"], ["\u{1D473}", "L"], ["\u{1D474}", "M"], ["\u{1D475}", "N"], ["\u{1D476}", "O"], ["\u{1D477}", "P"], ["\u{1D478}", "Q"], ["\u{1D479}", "R"], ["\u{1D47A}", "S"], ["\u{1D47B}", "T"], ["\u{1D47C}", "U"], ["\u{1D47D}", "V"], ["\u{1D47E}", "W"], ["\u{1D47F}", "X"], ["\u{1D480}", "Y"], ["\u{1D481}", "Z"], ["\u{1D482}", "a"], ["\u{1D483}", "b"], ["\u{1D484}", "c"], ["\u{1D485}", "d"], ["\u{1D486}", "e"], ["\u{1D487}", "f"], ["\u{1D488}", "g"], ["\u{1D489}", "h"], ["\u{1D48A}", "i"], ["\u{1D48B}", "j"], ["\u{1D48C}", "k"], ["\u{1D48D}", "l"], ["\u{1D48E}", "m"], ["\u{1D48F}", "n"], ["\u{1D490}", "o"], ["\u{1D491}", "p"], ["\u{1D492}", "q"], ["\u{1D493}", "r"], ["\u{1D494}", "s"], ["\u{1D495}", "t"], ["\u{1D496}", "u"], ["\u{1D497}", "v"], ["\u{1D498}", "w"], ["\u{1D499}", "x"], ["\u{1D49A}", "y"], ["\u{1D49B}", "z"], ["\u{1D49C}", "A"], ["\u{1D49E}", "C"], ["\u{1D49F}", "D"], ["\u{1D4A2}", "g"], ["\u{1D4A5}", "J"], ["\u{1D4A6}", "K"], ["\u{1D4A9}", "N"], ["\u{1D4AA}", "O"], ["\u{1D4AB}", "P"], ["\u{1D4AC}", "Q"], ["\u{1D4AE}", "S"], ["\u{1D4AF}", "T"], ["\u{1D4B0}", "U"], ["\u{1D4B1}", "V"], ["\u{1D4B2}", "W"], ["\u{1D4B3}", "X"], ["\u{1D4B4}", "Y"], ["\u{1D4B5}", "Z"], ["\u{1D4B6}", "a"], ["\u{1D4B7}", "b"], ["\u{1D4B8}", "c"], ["\u{1D4B9}", "d"], ["\u{1D4BB}", "f"], ["\u{1D4BD}", "h"], ["\u{1D4BE}", "i"], ["\u{1D4BF}", "j"], ["\u{1D4C0}", "h"], ["\u{1D4C1}", "l"], ["\u{1D4C2}", "m"], ["\u{1D4C3}", "n"], ["\u{1D4C5}", "p"], ["\u{1D4C6}", "q"], ["\u{1D4C7}", "r"], ["\u{1D4C8}", "s"], ["\u{1D4C9}", "t"], ["\u{1D4CA}", "u"], ["\u{1D4CB}", "v"], ["\u{1D4CC}", "w"], ["\u{1D4CD}", "x"], ["\u{1D4CE}", "y"], ["\u{1D4CF}", "z"], ["\u{1D4D0}", "A"], ["\u{1D4D1}", "B"], ["\u{1D4D2}", "C"], ["\u{1D4D3}", "D"], ["\u{1D4D4}", "E"], ["\u{1D4D5}", "F"], ["\u{1D4D6}", "G"], ["\u{1D4D7}", "H"], ["\u{1D4D8}", "I"], ["\u{1D4D9}", "J"], ["\u{1D4DA}", "K"], ["\u{1D4DB}", "L"], ["\u{1D4DC}", "M"], ["\u{1D4DD}", "N"], ["\u{1D4DE}", "O"], ["\u{1D4DF}", "P"], ["\u{1D4E0}", "Q"], ["\u{1D4E1}", "R"], ["\u{1D4E2}", "S"], ["\u{1D4E3}", "T"], ["\u{1D4E4}", "U"], ["\u{1D4E5}", "V"], ["\u{1D4E6}", "W"], ["\u{1D4E7}", "X"], ["\u{1D4E8}", "Y"], ["\u{1D4E9}", "Z"], ["\u{1D4EA}", "a"], ["\u{1D4EB}", "b"], ["\u{1D4EC}", "c"], ["\u{1D4ED}", "d"], ["\u{1D4EE}", "e"], ["\u{1D4EF}", "f"], ["\u{1D4F0}", "g"], ["\u{1D4F1}", "h"], ["\u{1D4F2}", "i"], ["\u{1D4F3}", "j"], ["\u{1D4F4}", "k"], ["\u{1D4F5}", "l"], ["\u{1D4F6}", "m"], ["\u{1D4F7}", "n"], ["\u{1D4F8}", "o"], ["\u{1D4F9}", "p"], ["\u{1D4FA}", "q"], ["\u{1D4FB}", "r"], ["\u{1D4FC}", "s"], ["\u{1D4FD}", "t"], ["\u{1D4FE}", "u"], ["\u{1D4FF}", "v"], ["\u{1D500}", "w"], ["\u{1D501}", "x"], ["\u{1D502}", "y"], ["\u{1D503}", "z"], ["\u{1D504}", "A"], ["\u{1D505}", "B"], ["\u{1D507}", "D"], ["\u{1D508}", "E"], ["\u{1D509}", "F"], ["\u{1D50A}", "G"], ["\u{1D50D}", "J"], ["\u{1D50E}", "K"], ["\u{1D50F}", "L"], ["\u{1D510}", "M"], ["\u{1D511}", "N"], ["\u{1D512}", "O"], ["\u{1D513}", "P"], ["\u{1D514}", "Q"], ["\u{1D516}", "S"], ["\u{1D517}", "T"], ["\u{1D518}", "U"], ["\u{1D519}", "V"], ["\u{1D51A}", "W"], ["\u{1D51B}", "X"], ["\u{1D51C}", "Y"], ["\u{1D51E}", "a"], ["\u{1D51F}", "b"], ["\u{1D520}", "c"], ["\u{1D521}", "d"], ["\u{1D522}", "e"], ["\u{1D523}", "f"], ["\u{1D524}", "g"], ["\u{1D525}", "h"], ["\u{1D526}", "i"], ["\u{1D527}", "j"], ["\u{1D528}", "k"], ["\u{1D529}", "l"], ["\u{1D52A}", "m"], ["\u{1D52B}", "n"], ["\u{1D52C}", "o"], ["\u{1D52D}", "p"], ["\u{1D52E}", "q"], ["\u{1D52F}", "r"], ["\u{1D530}", "s"], ["\u{1D531}", "t"], ["\u{1D532}", "u"], ["\u{1D533}", "v"], ["\u{1D534}", "w"], ["\u{1D535}", "x"], ["\u{1D536}", "y"], ["\u{1D537}", "z"], ["\u{1D538}", "A"], ["\u{1D539}", "B"], ["\u{1D53B}", "D"], ["\u{1D53C}", "E"], ["\u{1D53D}", "F"], ["\u{1D53E}", "G"], ["\u{1D540}", "I"], ["\u{1D541}", "J"], ["\u{1D542}", "K"], ["\u{1D543}", "L"], ["\u{1D544}", "M"], ["\u{1D546}", "N"], ["\u{1D54A}", "S"], ["\u{1D54B}", "T"], ["\u{1D54C}", "U"], ["\u{1D54D}", "V"], ["\u{1D54E}", "W"], ["\u{1D54F}", "X"], ["\u{1D550}", "Y"], ["\u{1D552}", "a"], ["\u{1D553}", "b"], ["\u{1D554}", "c"], ["\u{1D555}", "d"], ["\u{1D556}", "e"], ["\u{1D557}", "f"], ["\u{1D558}", "g"], ["\u{1D559}", "h"], ["\u{1D55A}", "i"], ["\u{1D55B}", "j"], ["\u{1D55C}", "k"], ["\u{1D55D}", "l"], ["\u{1D55E}", "m"], ["\u{1D55F}", "n"], ["\u{1D560}", "o"], ["\u{1D561}", "p"], ["\u{1D562}", "q"], ["\u{1D563}", "r"], ["\u{1D564}", "s"], ["\u{1D565}", "t"], ["\u{1D566}", "u"], ["\u{1D567}", "v"], ["\u{1D568}", "w"], ["\u{1D569}", "x"], ["\u{1D56A}", "y"], ["\u{1D56B}", "z"], ["\u{1D56C}", "A"], ["\u{1D56D}", "B"], ["\u{1D56E}", "C"], ["\u{1D56F}", "D"], ["\u{1D570}", "E"], ["\u{1D571}", "F"], ["\u{1D572}", "G"], ["\u{1D573}", "H"], ["\u{1D574}", "I"], ["\u{1D575}", "J"], ["\u{1D576}", "K"], ["\u{1D577}", "L"], ["\u{1D578}", "M"], ["\u{1D579}", "N"], ["\u{1D57A}", "O"], ["\u{1D57B}", "P"], ["\u{1D57C}", "Q"], ["\u{1D57D}", "R"], ["\u{1D57E}", "S"], ["\u{1D57F}", "T"], ["\u{1D580}", "U"], ["\u{1D581}", "V"], ["\u{1D582}", "W"], ["\u{1D583}", "X"], ["\u{1D584}", "Y"], ["\u{1D585}", "Z"], ["\u{1D586}", "a"], ["\u{1D587}", "b"], ["\u{1D588}", "c"], ["\u{1D589}", "d"], ["\u{1D58A}", "e"], ["\u{1D58B}", "f"], ["\u{1D58C}", "g"], ["\u{1D58D}", "h"], ["\u{1D58E}", "i"], ["\u{1D58F}", "j"], ["\u{1D590}", "k"], ["\u{1D591}", "l"], ["\u{1D592}", "m"], ["\u{1D593}", "n"], ["\u{1D594}", "o"], ["\u{1D595}", "p"], ["\u{1D596}", "q"], ["\u{1D597}", "r"], ["\u{1D598}", "s"], ["\u{1D599}", "t"], ["\u{1D59A}", "u"], ["\u{1D59B}", "v"], ["\u{1D59C}", "w"], ["\u{1D59D}", "x"], ["\u{1D59E}", "y"], ["\u{1D59F}", "z"], ["\u{1D5A0}", "A"], ["\u{1D5A1}", "B"], ["\u{1D5A2}", "C"], ["\u{1D5A3}", "D"], ["\u{1D5A4}", "E"], ["\u{1D5A5}", "F"], ["\u{1D5A6}", "G"], ["\u{1D5A7}", "H"], ["\u{1D5A8}", "I"], ["\u{1D5A9}", "J"], ["\u{1D5AA}", "K"], ["\u{1D5AB}", "L"], ["\u{1D5AC}", "M"], ["\u{1D5AD}", "N"], ["\u{1D5AE}", "O"], ["\u{1D5AF}", "P"], ["\u{1D5B0}", "Q"], ["\u{1D5B1}", "R"], ["\u{1D5B2}", "S"], ["\u{1D5B3}", "T"], ["\u{1D5B4}", "U"], ["\u{1D5B5}", "V"], ["\u{1D5B6}", "W"], ["\u{1D5B7}", "X"], ["\u{1D5B8}", "Y"], ["\u{1D5B9}", "Z"], ["\u{1D5BA}", "a"], ["\u{1D5BB}", "b"], ["\u{1D5BC}", "c"], ["\u{1D5BD}", "d"], ["\u{1D5BE}", "e"], ["\u{1D5BF}", "f"], ["\u{1D5C0}", "g"], ["\u{1D5C1}", "h"], ["\u{1D5C2}", "i"], ["\u{1D5C3}", "j"], ["\u{1D5C4}", "k"], ["\u{1D5C5}", "l"], ["\u{1D5C6}", "m"], ["\u{1D5C7}", "n"], ["\u{1D5C8}", "o"], ["\u{1D5C9}", "p"], ["\u{1D5CA}", "q"], ["\u{1D5CB}", "r"], ["\u{1D5CC}", "s"], ["\u{1D5CD}", "t"], ["\u{1D5CE}", "u"], ["\u{1D5CF}", "v"], ["\u{1D5D0}", "w"], ["\u{1D5D1}", "x"], ["\u{1D5D2}", "y"], ["\u{1D5D3}", "z"], ["\u{1D5D4}", "A"], ["\u{1D5D5}", "B"], ["\u{1D5D6}", "C"], ["\u{1D5D7}", "D"], ["\u{1D5D8}", "E"], ["\u{1D5D9}", "F"], ["\u{1D5DA}", "G"], ["\u{1D5DB}", "H"], ["\u{1D5DC}", "I"], ["\u{1D5DD}", "J"], ["\u{1D5DE}", "K"], ["\u{1D5DF}", "L"], ["\u{1D5E0}", "M"], ["\u{1D5E1}", "N"], ["\u{1D5E2}", "O"], ["\u{1D5E3}", "P"], ["\u{1D5E4}", "Q"], ["\u{1D5E5}", "R"], ["\u{1D5E6}", "S"], ["\u{1D5E7}", "T"], ["\u{1D5E8}", "U"], ["\u{1D5E9}", "V"], ["\u{1D5EA}", "W"], ["\u{1D5EB}", "X"], ["\u{1D5EC}", "Y"], ["\u{1D5ED}", "Z"], ["\u{1D5EE}", "a"], ["\u{1D5EF}", "b"], ["\u{1D5F0}", "c"], ["\u{1D5F1}", "d"], ["\u{1D5F2}", "e"], ["\u{1D5F3}", "f"], ["\u{1D5F4}", "g"], ["\u{1D5F5}", "h"], ["\u{1D5F6}", "i"], ["\u{1D5F7}", "j"], ["\u{1D5F8}", "k"], ["\u{1D5F9}", "l"], ["\u{1D5FA}", "m"], ["\u{1D5FB}", "n"], ["\u{1D5FC}", "o"], ["\u{1D5FD}", "p"], ["\u{1D5FE}", "q"], ["\u{1D5FF}", "r"], ["\u{1D600}", "s"], ["\u{1D601}", "t"], ["\u{1D602}", "u"], ["\u{1D603}", "v"], ["\u{1D604}", "w"], ["\u{1D605}", "x"], ["\u{1D606}", "y"], ["\u{1D607}", "z"], ["\u{1D608}", "A"], ["\u{1D609}", "B"], ["\u{1D60A}", "C"], ["\u{1D60B}", "D"], ["\u{1D60C}", "E"], ["\u{1D60D}", "F"], ["\u{1D60E}", "G"], ["\u{1D60F}", "H"], ["\u{1D610}", "I"], ["\u{1D611}", "J"], ["\u{1D612}", "K"], ["\u{1D613}", "L"], ["\u{1D614}", "M"], ["\u{1D615}", "N"], ["\u{1D616}", "O"], ["\u{1D617}", "P"], ["\u{1D618}", "Q"], ["\u{1D619}", "R"], ["\u{1D61A}", "S"], ["\u{1D61B}", "T"], ["\u{1D61C}", "U"], ["\u{1D61D}", "V"], ["\u{1D61E}", "W"], ["\u{1D61F}", "X"], ["\u{1D620}", "Y"], ["\u{1D621}", "Z"], ["\u{1D622}", "a"], ["\u{1D623}", "b"], ["\u{1D624}", "c"], ["\u{1D625}", "d"], ["\u{1D626}", "e"], ["\u{1D627}", "f"], ["\u{1D628}", "g"], ["\u{1D629}", "h"], ["\u{1D62A}", "i"], ["\u{1D62B}", "j"], ["\u{1D62C}", "k"], ["\u{1D62D}", "l"], ["\u{1D62E}", "m"], ["\u{1D62F}", "n"], ["\u{1D630}", "o"], ["\u{1D631}", "p"], ["\u{1D632}", "q"], ["\u{1D633}", "r"], ["\u{1D634}", "s"], ["\u{1D635}", "t"], ["\u{1D636}", "u"], ["\u{1D637}", "v"], ["\u{1D638}", "w"], ["\u{1D639}", "x"], ["\u{1D63A}", "y"], ["\u{1D63B}", "z"], ["\u{1D63C}", "A"], ["\u{1D63D}", "B"], ["\u{1D63E}", "C"], ["\u{1D63F}", "D"], ["\u{1D640}", "E"], ["\u{1D641}", "F"], ["\u{1D642}", "G"], ["\u{1D643}", "H"], ["\u{1D644}", "I"], ["\u{1D645}", "J"], ["\u{1D646}", "K"], ["\u{1D647}", "L"], ["\u{1D648}", "M"], ["\u{1D649}", "N"], ["\u{1D64A}", "O"], ["\u{1D64B}", "P"], ["\u{1D64C}", "Q"], ["\u{1D64D}", "R"], ["\u{1D64E}", "S"], ["\u{1D64F}", "T"], ["\u{1D650}", "U"], ["\u{1D651}", "V"], ["\u{1D652}", "W"], ["\u{1D653}", "X"], ["\u{1D654}", "Y"], ["\u{1D655}", "Z"], ["\u{1D656}", "a"], ["\u{1D657}", "b"], ["\u{1D658}", "c"], ["\u{1D659}", "d"], ["\u{1D65A}", "e"], ["\u{1D65B}", "f"], ["\u{1D65C}", "g"], ["\u{1D65D}", "h"], ["\u{1D65E}", "i"], ["\u{1D65F}", "j"], ["\u{1D660}", "k"], ["\u{1D661}", "l"], ["\u{1D662}", "m"], ["\u{1D663}", "n"], ["\u{1D664}", "o"], ["\u{1D665}", "p"], ["\u{1D666}", "q"], ["\u{1D667}", "r"], ["\u{1D668}", "s"], ["\u{1D669}", "t"], ["\u{1D66A}", "u"], ["\u{1D66B}", "v"], ["\u{1D66C}", "w"], ["\u{1D66D}", "x"], ["\u{1D66E}", "y"], ["\u{1D66F}", "z"], ["\u{1D670}", "A"], ["\u{1D671}", "B"], ["\u{1D672}", "C"], ["\u{1D673}", "D"], ["\u{1D674}", "E"], ["\u{1D675}", "F"], ["\u{1D676}", "G"], ["\u{1D677}", "H"], ["\u{1D678}", "I"], ["\u{1D679}", "J"], ["\u{1D67A}", "K"], ["\u{1D67B}", "L"], ["\u{1D67C}", "M"], ["\u{1D67D}", "N"], ["\u{1D67E}", "O"], ["\u{1D67F}", "P"], ["\u{1D680}", "Q"], ["\u{1D681}", "R"], ["\u{1D682}", "S"], ["\u{1D683}", "T"], ["\u{1D684}", "U"], ["\u{1D685}", "V"], ["\u{1D686}", "W"], ["\u{1D687}", "X"], ["\u{1D688}", "Y"], ["\u{1D689}", "Z"], ["\u{1D68A}", "a"], ["\u{1D68B}", "b"], ["\u{1D68C}", "c"], ["\u{1D68D}", "d"], ["\u{1D68E}", "e"], ["\u{1D68F}", "f"], ["\u{1D690}", "g"], ["\u{1D691}", "h"], ["\u{1D692}", "i"], ["\u{1D693}", "j"], ["\u{1D694}", "k"], ["\u{1D695}", "l"], ["\u{1D696}", "m"], ["\u{1D697}", "n"], ["\u{1D698}", "o"], ["\u{1D699}", "p"], ["\u{1D69A}", "q"], ["\u{1D69B}", "r"], ["\u{1D69C}", "s"], ["\u{1D69D}", "t"], ["\u{1D69E}", "u"], ["\u{1D69F}", "v"], ["\u{1D6A0}", "w"], ["\u{1D6A1}", "x"], ["\u{1D6A2}", "y"], ["\u{1D6A3}", "z"], ["\u{1D6A4}", "l"], ["\u{1D6A5}", "j"], ["\u{1D6E2}", "A"], ["\u{1D6E3}", "B"], ["\u{1D6E4}", "G"], ["\u{1D6E5}", "D"], ["\u{1D6E6}", "E"], ["\u{1D6E7}", "Z"], ["\u{1D6E8}", "I"], ["\u{1D6E9}", "TH"], ["\u{1D6EA}", "I"], ["\u{1D6EB}", "K"], ["\u{1D6EC}", "L"], ["\u{1D6ED}", "M"], ["\u{1D6EE}", "N"], ["\u{1D6EF}", "KS"], ["\u{1D6F0}", "O"], ["\u{1D6F1}", "P"], ["\u{1D6F2}", "R"], ["\u{1D6F3}", "TH"], ["\u{1D6F4}", "S"], ["\u{1D6F5}", "T"], ["\u{1D6F6}", "Y"], ["\u{1D6F7}", "F"], ["\u{1D6F8}", "x"], ["\u{1D6F9}", "PS"], ["\u{1D6FA}", "O"], ["\u{1D6FB}", "D"], ["\u{1D6FC}", "a"], ["\u{1D6FD}", "b"], ["\u{1D6FE}", "g"], ["\u{1D6FF}", "d"], ["\u{1D700}", "e"], ["\u{1D701}", "z"], ["\u{1D702}", "i"], ["\u{1D703}", "th"], ["\u{1D704}", "i"], ["\u{1D705}", "k"], ["\u{1D706}", "l"], ["\u{1D707}", "m"], ["\u{1D708}", "n"], ["\u{1D709}", "ks"], ["\u{1D70A}", "o"], ["\u{1D70B}", "p"], ["\u{1D70C}", "r"], ["\u{1D70D}", "s"], ["\u{1D70E}", "s"], ["\u{1D70F}", "t"], ["\u{1D710}", "y"], ["\u{1D711}", "f"], ["\u{1D712}", "x"], ["\u{1D713}", "ps"], ["\u{1D714}", "o"], ["\u{1D715}", "d"], ["\u{1D716}", "E"], ["\u{1D717}", "TH"], ["\u{1D718}", "K"], ["\u{1D719}", "f"], ["\u{1D71A}", "r"], ["\u{1D71B}", "p"], ["\u{1D71C}", "A"], ["\u{1D71D}", "V"], ["\u{1D71E}", "G"], ["\u{1D71F}", "D"], ["\u{1D720}", "E"], ["\u{1D721}", "Z"], ["\u{1D722}", "I"], ["\u{1D723}", "TH"], ["\u{1D724}", "I"], ["\u{1D725}", "K"], ["\u{1D726}", "L"], ["\u{1D727}", "M"], ["\u{1D728}", "N"], ["\u{1D729}", "KS"], ["\u{1D72A}", "O"], ["\u{1D72B}", "P"], ["\u{1D72C}", "S"], ["\u{1D72D}", "TH"], ["\u{1D72E}", "S"], ["\u{1D72F}", "T"], ["\u{1D730}", "Y"], ["\u{1D731}", "F"], ["\u{1D732}", "X"], ["\u{1D733}", "PS"], ["\u{1D734}", "O"], ["\u{1D735}", "D"], ["\u{1D736}", "a"], ["\u{1D737}", "v"], ["\u{1D738}", "g"], ["\u{1D739}", "d"], ["\u{1D73A}", "e"], ["\u{1D73B}", "z"], ["\u{1D73C}", "i"], ["\u{1D73D}", "th"], ["\u{1D73E}", "i"], ["\u{1D73F}", "k"], ["\u{1D740}", "l"], ["\u{1D741}", "m"], ["\u{1D742}", "n"], ["\u{1D743}", "ks"], ["\u{1D744}", "o"], ["\u{1D745}", "p"], ["\u{1D746}", "r"], ["\u{1D747}", "s"], ["\u{1D748}", "s"], ["\u{1D749}", "t"], ["\u{1D74A}", "y"], ["\u{1D74B}", "f"], ["\u{1D74C}", "x"], ["\u{1D74D}", "ps"], ["\u{1D74E}", "o"], ["\u{1D74F}", "a"], ["\u{1D750}", "e"], ["\u{1D751}", "i"], ["\u{1D752}", "k"], ["\u{1D753}", "f"], ["\u{1D754}", "r"], ["\u{1D755}", "p"], ["\u{1D756}", "A"], ["\u{1D757}", "B"], ["\u{1D758}", "G"], ["\u{1D759}", "D"], ["\u{1D75A}", "E"], ["\u{1D75B}", "Z"], ["\u{1D75C}", "I"], ["\u{1D75D}", "TH"], ["\u{1D75E}", "I"], ["\u{1D75F}", "K"], ["\u{1D760}", "L"], ["\u{1D761}", "M"], ["\u{1D762}", "N"], ["\u{1D763}", "KS"], ["\u{1D764}", "O"], ["\u{1D765}", "P"], ["\u{1D766}", "R"], ["\u{1D767}", "TH"], ["\u{1D768}", "S"], ["\u{1D769}", "T"], ["\u{1D76A}", "Y"], ["\u{1D76B}", "F"], ["\u{1D76C}", "X"], ["\u{1D76D}", "PS"], ["\u{1D76E}", "O"], ["\u{1D76F}", "D"], ["\u{1D770}", "a"], ["\u{1D771}", "v"], ["\u{1D772}", "g"], ["\u{1D773}", "d"], ["\u{1D774}", "e"], ["\u{1D775}", "z"], ["\u{1D776}", "i"], ["\u{1D777}", "th"], ["\u{1D778}", "i"], ["\u{1D779}", "k"], ["\u{1D77A}", "l"], ["\u{1D77B}", "m"], ["\u{1D77C}", "n"], ["\u{1D77D}", "ks"], ["\u{1D77E}", "o"], ["\u{1D77F}", "p"], ["\u{1D780}", "r"], ["\u{1D781}", "s"], ["\u{1D782}", "s"], ["\u{1D783}", "t"], ["\u{1D784}", "y"], ["\u{1D785}", "f"], ["\u{1D786}", "x"], ["\u{1D787}", "ps"], ["\u{1D788}", "o"], ["\u{1D789}", "a"], ["\u{1D78A}", "e"], ["\u{1D78B}", "i"], ["\u{1D78C}", "k"], ["\u{1D78D}", "f"], ["\u{1D78E}", "r"], ["\u{1D78F}", "p"], ["\u{1D790}", "A"], ["\u{1D791}", "V"], ["\u{1D792}", "G"], ["\u{1D793}", "D"], ["\u{1D794}", "E"], ["\u{1D795}", "Z"], ["\u{1D796}", "I"], ["\u{1D797}", "TH"], ["\u{1D798}", "I"], ["\u{1D799}", "K"], ["\u{1D79A}", "L"], ["\u{1D79B}", "M"], ["\u{1D79C}", "N"], ["\u{1D79D}", "KS"], ["\u{1D79E}", "O"], ["\u{1D79F}", "P"], ["\u{1D7A0}", "S"], ["\u{1D7A1}", "TH"], ["\u{1D7A2}", "S"], ["\u{1D7A3}", "T"], ["\u{1D7A4}", "Y"], ["\u{1D7A5}", "F"], ["\u{1D7A6}", "X"], ["\u{1D7A7}", "PS"], ["\u{1D7A8}", "O"], ["\u{1D7A9}", "D"], ["\u{1D7AA}", "av"], ["\u{1D7AB}", "g"], ["\u{1D7AC}", "d"], ["\u{1D7AD}", "e"], ["\u{1D7AE}", "z"], ["\u{1D7AF}", "i"], ["\u{1D7B0}", "i"], ["\u{1D7B1}", "th"], ["\u{1D7B2}", "i"], ["\u{1D7B3}", "k"], ["\u{1D7B4}", "l"], ["\u{1D7B5}", "m"], ["\u{1D7B6}", "n"], ["\u{1D7B7}", "ks"], ["\u{1D7B8}", "o"], ["\u{1D7B9}", "p"], ["\u{1D7BA}", "r"], ["\u{1D7BB}", "s"], ["\u{1D7BC}", "s"], ["\u{1D7BD}", "t"], ["\u{1D7BE}", "y"], ["\u{1D7BF}", "f"], ["\u{1D7C0}", "x"], ["\u{1D7C1}", "ps"], ["\u{1D7C2}", "o"], ["\u{1D7C3}", "a"], ["\u{1D7C4}", "e"], ["\u{1D7C5}", "i"], ["\u{1D7C6}", "k"], ["\u{1D7C7}", "f"], ["\u{1D7C8}", "r"], ["\u{1D7C9}", "p"], ["\u{1D7CA}", "F"], ["\u{1D7CB}", "f"], ["\u249C", "(a)"], ["\u249D", "(b)"], ["\u249E", "(c)"], ["\u249F", "(d)"], ["\u24A0", "(e)"], ["\u24A1", "(f)"], ["\u24A2", "(g)"], ["\u24A3", "(h)"], ["\u24A4", "(i)"], ["\u24A5", "(j)"], ["\u24A6", "(k)"], ["\u24A7", "(l)"], ["\u24A8", "(m)"], ["\u24A9", "(n)"], ["\u24AA", "(o)"], ["\u24AB", "(p)"], ["\u24AC", "(q)"], ["\u24AD", "(r)"], ["\u24AE", "(s)"], ["\u24AF", "(t)"], ["\u24B0", "(u)"], ["\u24B1", "(v)"], ["\u24B2", "(w)"], ["\u24B3", "(x)"], ["\u24B4", "(y)"], ["\u24B5", "(z)"], ["\u24B6", "(A)"], ["\u24B7", "(B)"], ["\u24B8", "(C)"], ["\u24B9", "(D)"], ["\u24BA", "(E)"], ["\u24BB", "(F)"], ["\u24BC", "(G)"], ["\u24BD", "(H)"], ["\u24BE", "(I)"], ["\u24BF", "(J)"], ["\u24C0", "(K)"], ["\u24C1", "(L)"], ["\u24C3", "(N)"], ["\u24C4", "(O)"], ["\u24C5", "(P)"], ["\u24C6", "(Q)"], ["\u24C7", "(R)"], ["\u24C8", "(S)"], ["\u24C9", "(T)"], ["\u24CA", "(U)"], ["\u24CB", "(V)"], ["\u24CC", "(W)"], ["\u24CD", "(X)"], ["\u24CE", "(Y)"], ["\u24CF", "(Z)"], ["\u24D0", "(a)"], ["\u24D1", "(b)"], ["\u24D2", "(b)"], ["\u24D3", "(c)"], ["\u24D4", "(e)"], ["\u24D5", "(f)"], ["\u24D6", "(g)"], ["\u24D7", "(h)"], ["\u24D8", "(i)"], ["\u24D9", "(j)"], ["\u24DA", "(k)"], ["\u24DB", "(l)"], ["\u24DC", "(m)"], ["\u24DD", "(n)"], ["\u24DE", "(o)"], ["\u24DF", "(p)"], ["\u24E0", "(q)"], ["\u24E1", "(r)"], ["\u24E2", "(s)"], ["\u24E3", "(t)"], ["\u24E4", "(u)"], ["\u24E5", "(v)"], ["\u24E6", "(w)"], ["\u24E7", "(x)"], ["\u24E8", "(y)"], ["\u24E9", "(z)"], ["\u010A", "C"], ["\u010B", "c"], ["\u0120", "G"], ["\u0121", "g"], ["\u0126", "H"], ["\u0127", "h"], ["\u017B", "Z"], ["\u017C", "z"], ["\u{1D7CE}", "0"], ["\u{1D7CF}", "1"], ["\u{1D7D0}", "2"], ["\u{1D7D1}", "3"], ["\u{1D7D2}", "4"], ["\u{1D7D3}", "5"], ["\u{1D7D4}", "6"], ["\u{1D7D5}", "7"], ["\u{1D7D6}", "8"], ["\u{1D7D7}", "9"], ["\u{1D7D8}", "0"], ["\u{1D7D9}", "1"], ["\u{1D7DA}", "2"], ["\u{1D7DB}", "3"], ["\u{1D7DC}", "4"], ["\u{1D7DD}", "5"], ["\u{1D7DE}", "6"], ["\u{1D7DF}", "7"], ["\u{1D7E0}", "8"], ["\u{1D7E1}", "9"], ["\u{1D7E2}", "0"], ["\u{1D7E3}", "1"], ["\u{1D7E4}", "2"], ["\u{1D7E5}", "3"], ["\u{1D7E6}", "4"], ["\u{1D7E7}", "5"], ["\u{1D7E8}", "6"], ["\u{1D7E9}", "7"], ["\u{1D7EA}", "8"], ["\u{1D7EB}", "9"], ["\u{1D7EC}", "0"], ["\u{1D7ED}", "1"], ["\u{1D7EE}", "2"], ["\u{1D7EF}", "3"], ["\u{1D7F0}", "4"], ["\u{1D7F1}", "5"], ["\u{1D7F2}", "6"], ["\u{1D7F3}", "7"], ["\u{1D7F4}", "8"], ["\u{1D7F5}", "9"], ["\u{1D7F6}", "0"], ["\u{1D7F7}", "1"], ["\u{1D7F8}", "2"], ["\u{1D7F9}", "3"], ["\u{1D7FA}", "4"], ["\u{1D7FB}", "5"], ["\u{1D7FC}", "6"], ["\u{1D7FD}", "7"], ["\u{1D7FE}", "8"], ["\u{1D7FF}", "9"], ["\u2460", "1"], ["\u2461", "2"], ["\u2462", "3"], ["\u2463", "4"], ["\u2464", "5"], ["\u2465", "6"], ["\u2466", "7"], ["\u2467", "8"], ["\u2468", "9"], ["\u2469", "10"], ["\u246A", "11"], ["\u246B", "12"], ["\u246C", "13"], ["\u246D", "14"], ["\u246E", "15"], ["\u246F", "16"], ["\u2470", "17"], ["\u2471", "18"], ["\u2472", "19"], ["\u2473", "20"], ["\u2474", "1"], ["\u2475", "2"], ["\u2476", "3"], ["\u2477", "4"], ["\u2478", "5"], ["\u2479", "6"], ["\u247A", "7"], ["\u247B", "8"], ["\u247C", "9"], ["\u247D", "10"], ["\u247E", "11"], ["\u247F", "12"], ["\u2480", "13"], ["\u2481", "14"], ["\u2482", "15"], ["\u2483", "16"], ["\u2484", "17"], ["\u2485", "18"], ["\u2486", "19"], ["\u2487", "20"], ["\u2488", "1."], ["\u2489", "2."], ["\u248A", "3."], ["\u248B", "4."], ["\u248C", "5."], ["\u248D", "6."], ["\u248E", "7."], ["\u248F", "8."], ["\u2490", "9."], ["\u2491", "10."], ["\u2492", "11."], ["\u2493", "12."], ["\u2494", "13."], ["\u2495", "14."], ["\u2496", "15."], ["\u2497", "16."], ["\u2498", "17."], ["\u2499", "18."], ["\u249A", "19."], ["\u249B", "20."], ["\u24EA", "0"], ["\u24EB", "11"], ["\u24EC", "12"], ["\u24ED", "13"], ["\u24EE", "14"], ["\u24EF", "15"], ["\u24F0", "16"], ["\u24F1", "17"], ["\u24F2", "18"], ["\u24F3", "19"], ["\u24F4", "20"], ["\u24F5", "1"], ["\u24F6", "2"], ["\u24F7", "3"], ["\u24F8", "4"], ["\u24F9", "5"], ["\u24FA", "6"], ["\u24FB", "7"], ["\u24FC", "8"], ["\u24FD", "9"], ["\u24FE", "10"], ["\u24FF", "0"], ["\u{1F670}", "&"], ["\u{1F671}", "&"], ["\u{1F672}", "&"], ["\u{1F673}", "&"], ["\u{1F674}", "&"], ["\u{1F675}", "&"], ["\u{1F676}", '"'], ["\u{1F677}", '"'], ["\u{1F678}", '"'], ["\u203D", "?!"], ["\u{1F679}", "?!"], ["\u{1F67A}", "?!"], ["\u{1F67B}", "?!"], ["\u{1F67C}", "/"], ["\u{1F67D}", "\\"], ["\u{1F707}", "AR"], ["\u{1F708}", "V"], ["\u{1F709}", "V"], ["\u{1F706}", "VR"], ["\u{1F705}", "VF"], ["\u{1F729}", "2"], ["\u{1F72A}", "5"], ["\u{1F761}", "f"], ["\u{1F762}", "W"], ["\u{1F763}", "U"], ["\u{1F767}", "V"], ["\u{1F768}", "T"], ["\u{1F76A}", "V"], ["\u{1F76B}", "MB"], ["\u{1F76C}", "VB"], ["\u{1F772}", "3B"], ["\u{1F773}", "3B"], ["\u{1F4AF}", "100"], ["\u{1F519}", "BACK"], ["\u{1F51A}", "END"], ["\u{1F51B}", "ON!"], ["\u{1F51C}", "SOON"], ["\u{1F51D}", "TOP"], ["\u{1F51E}", "18"], ["\u{1F524}", "abc"], ["\u{1F520}", "ABCD"], ["\u{1F521}", "abcd"], ["\u{1F522}", "1234"], ["\u{1F523}", "T&@%"], ["#\uFE0F\u20E3", "#"], ["*\uFE0F\u20E3", "*"], ["0\uFE0F\u20E3", "0"], ["1\uFE0F\u20E3", "1"], ["2\uFE0F\u20E3", "2"], ["3\uFE0F\u20E3", "3"], ["4\uFE0F\u20E3", "4"], ["5\uFE0F\u20E3", "5"], ["6\uFE0F\u20E3", "6"], ["7\uFE0F\u20E3", "7"], ["8\uFE0F\u20E3", "8"], ["9\uFE0F\u20E3", "9"], ["\u{1F51F}", "10"], ["\u{1F170}\uFE0F", "A"], ["\u{1F171}\uFE0F", "B"], ["\u{1F18E}", "AB"], ["\u{1F191}", "CL"], ["\u{1F17E}\uFE0F", "O"], ["\u{1F17F}", "P"], ["\u{1F198}", "SOS"], ["\u{1F172}", "C"], ["\u{1F173}", "D"], ["\u{1F174}", "E"], ["\u{1F175}", "F"], ["\u{1F176}", "G"], ["\u{1F177}", "H"], ["\u{1F178}", "I"], ["\u{1F179}", "J"], ["\u{1F17A}", "K"], ["\u{1F17B}", "L"], ["\u{1F17C}", "M"], ["\u{1F17D}", "N"], ["\u{1F180}", "Q"], ["\u{1F181}", "R"], ["\u{1F182}", "S"], ["\u{1F183}", "T"], ["\u{1F184}", "U"], ["\u{1F185}", "V"], ["\u{1F186}", "W"], ["\u{1F187}", "X"], ["\u{1F188}", "Y"], ["\u{1F189}", "Z"]]; } }); // node_modules/is-buffer/index.js var require_is_buffer = __commonJS({ "node_modules/is-buffer/index.js"(exports2, module2) { module2.exports = function isBuffer2(obj) { return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj); }; } }); // node_modules/extend/index.js var require_extend = __commonJS({ "node_modules/extend/index.js"(exports2, module2) { "use strict"; var hasOwn = Object.prototype.hasOwnProperty; var toStr = Object.prototype.toString; var defineProperty = Object.defineProperty; var gOPD = Object.getOwnPropertyDescriptor; var isArray = function isArray2(arr) { if (typeof Array.isArray === "function") { return Array.isArray(arr); } return toStr.call(arr) === "[object Array]"; }; var isPlainObject2 = function isPlainObject3(obj) { if (!obj || toStr.call(obj) !== "[object Object]") { return false; } var hasOwnConstructor = hasOwn.call(obj, "constructor"); var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, "isPrototypeOf"); if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { return false; } var key; for (key in obj) { } return typeof key === "undefined" || hasOwn.call(obj, key); }; var setProperty = function setProperty2(target, options) { if (defineProperty && options.name === "__proto__") { defineProperty(target, options.name, { enumerable: true, configurable: true, value: options.newValue, writable: true }); } else { target[options.name] = options.newValue; } }; var getProperty = function getProperty2(obj, name) { if (name === "__proto__") { if (!hasOwn.call(obj, name)) { return void 0; } else if (gOPD) { return gOPD(obj, name).value; } } return obj[name]; }; module2.exports = function extend2() { var options, name, src, copy, copyIsArray, clone; var target = arguments[0]; var i = 1; var length = arguments.length; var deep = false; if (typeof target === "boolean") { deep = target; target = arguments[1] || {}; i = 2; } if (target == null || typeof target !== "object" && typeof target !== "function") { target = {}; } for (; i < length; ++i) { options = arguments[i]; if (options != null) { for (name in options) { src = getProperty(target, name); copy = getProperty(options, name); if (target !== copy) { if (deep && copy && (isPlainObject2(copy) || (copyIsArray = isArray(copy)))) { if (copyIsArray) { copyIsArray = false; clone = src && isArray(src) ? src : []; } else { clone = src && isPlainObject2(src) ? src : {}; } setProperty(target, { name, newValue: extend2(deep, clone, copy) }); } else if (typeof copy !== "undefined") { setProperty(target, { name, newValue: copy }); } } } } } return target; }; } }); // node_modules/inline-style-parser/index.js var require_inline_style_parser = __commonJS({ "node_modules/inline-style-parser/index.js"(exports2, module2) { var COMMENT_REGEX = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//g; var NEWLINE_REGEX = /\n/g; var WHITESPACE_REGEX = /^\s*/; var PROPERTY_REGEX = /^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/; var COLON_REGEX = /^:\s*/; var VALUE_REGEX = /^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/; var SEMICOLON_REGEX = /^[;\s]*/; var TRIM_REGEX = /^\s+|\s+$/g; var NEWLINE = "\n"; var FORWARD_SLASH = "/"; var ASTERISK = "*"; var EMPTY_STRING = ""; var TYPE_COMMENT = "comment"; var TYPE_DECLARATION = "declaration"; module2.exports = function(style, options) { if (typeof style !== "string") { throw new TypeError("First argument must be a string"); } if (!style) return []; options = options || {}; var lineno = 1; var column = 1; function updatePosition(str) { var lines = str.match(NEWLINE_REGEX); if (lines) lineno += lines.length; var i = str.lastIndexOf(NEWLINE); column = ~i ? str.length - i : column + str.length; } function position4() { var start = { line: lineno, column }; return function(node2) { node2.position = new Position(start); whitespace2(); return node2; }; } function Position(start) { this.start = start; this.end = { line: lineno, column }; this.source = options.source; } Position.prototype.content = style; var errorsList = []; function error(msg) { var err = new Error( options.source + ":" + lineno + ":" + column + ": " + msg ); err.reason = msg; err.filename = options.source; err.line = lineno; err.column = column; err.source = style; if (options.silent) { errorsList.push(err); } else { throw err; } } function match(re) { var m = re.exec(style); if (!m) return; var str = m[0]; updatePosition(str); style = style.slice(str.length); return m; } function whitespace2() { match(WHITESPACE_REGEX); } function comments(rules) { var c; rules = rules || []; while (c = comment()) { if (c !== false) { rules.push(c); } } return rules; } function comment() { var pos = position4(); if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return; var i = 2; while (EMPTY_STRING != style.charAt(i) && (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))) { ++i; } i += 2; if (EMPTY_STRING === style.charAt(i - 1)) { return error("End of comment missing"); } var str = style.slice(2, i - 2); column += 2; updatePosition(str); style = style.slice(i); column += 2; return pos({ type: TYPE_COMMENT, comment: str }); } function declaration() { var pos = position4(); var prop = match(PROPERTY_REGEX); if (!prop) return; comment(); if (!match(COLON_REGEX)) return error("property missing ':'"); var val = match(VALUE_REGEX); var ret = pos({ type: TYPE_DECLARATION, property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)), value: val ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING)) : EMPTY_STRING }); match(SEMICOLON_REGEX); return ret; } function declarations() { var decls = []; comments(decls); var decl; while (decl = declaration()) { if (decl !== false) { decls.push(decl); comments(decls); } } return decls; } whitespace2(); return declarations(); }; function trim(str) { return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING; } } }); // node_modules/style-to-object/index.js var require_style_to_object = __commonJS({ "node_modules/style-to-object/index.js"(exports2, module2) { var parse2 = require_inline_style_parser(); function StyleToObject2(style, iterator) { var output = null; if (!style || typeof style !== "string") { return output; } var declaration; var declarations = parse2(style); var hasIterator = typeof iterator === "function"; var property; var value; for (var i = 0, len = declarations.length; i < len; i++) { declaration = declarations[i]; property = declaration.property; value = declaration.value; if (hasIterator) { iterator(property, value, declaration); } else if (value) { output || (output = {}); output[property] = value; } } return output; } module2.exports = StyleToObject2; module2.exports.default = StyleToObject2; } }); // node_modules/@rgrove/parse-xml/src/lib/StringScanner.js var require_StringScanner = __commonJS({ "node_modules/@rgrove/parse-xml/src/lib/StringScanner.js"(exports2, module2) { "use strict"; var emptyString = ""; var StringScanner = class { /** @param {string} string */ constructor(string3) { this.chars = [...string3]; this.charCount = this.chars.length; this.charIndex = 0; this.charsToBytes = new Array(this.charCount); this.multiByteMode = false; this.string = string3; let { chars, charCount, charsToBytes } = this; if (charCount === string3.length) { for (let i = 0; i < charCount; ++i) { charsToBytes[i] = i; } } else { for (let byteIndex = 0, charIndex = 0; charIndex < charCount; ++charIndex) { charsToBytes[charIndex] = byteIndex; byteIndex += chars[charIndex].length; } this.multiByteMode = true; } } /** Whether the current character index is at the end of the input string. @type {boolean} */ get isEnd() { return this.charIndex >= this.charCount; } // -- Protected Methods ------------------------------------------------------ /** Returns the number of characters in the given _string_, which may differ from the byte length if the string contains multibyte characters. @param {string} string @returns {number} */ _charLength(string3) { let { length } = string3; if (length < 2 || !this.multiByteMode) { return length; } return string3.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, "_").length; } // -- Public Methods --------------------------------------------------------- /** Advances the scanner by the given number of characters, stopping if the end of the string is reached. @param {number} [count] */ advance(count = 1) { this.charIndex = Math.min(this.charCount, this.charIndex + count); } /** Consumes and returns the given number of characters if possible, advancing the scanner and stopping if the end of the string is reached. If no characters could be consumed, an empty string will be returned. @param {number} [count] @returns {string} */ consume(count = 1) { let chars = this.peek(count); this.advance(count); return chars; } /** Consumes a match for the given sticky regex, advances the scanner, updates the `lastIndex` property of the regex, and returns the matching string. The regex must have a sticky flag ("y") so that its `lastIndex` prop can be used to anchor the match at the current scanner position. Returns the consumed string, or an empty string if nothing was consumed. @param {RegExp} regex @returns {string} */ consumeMatch(regex) { if (!regex.sticky) { throw new Error('`regex` must have a sticky flag ("y")'); } regex.lastIndex = this.charsToBytes[this.charIndex]; let result = regex.exec(this.string); if (result === null) { return emptyString; } let match = result[0]; this.advance(this._charLength(match)); return match; } /** Consumes and returns all characters for which the given function returns a truthy value, stopping on the first falsy return value or if the end of the input is reached. @param {(char: string) => boolean} fn @returns {string} */ consumeMatchFn(fn) { let startIndex = this.charIndex; while (!this.isEnd && fn(this.peek())) { this.advance(); } return this.charIndex > startIndex ? this.string.slice(this.charsToBytes[startIndex], this.charsToBytes[this.charIndex]) : emptyString; } /** Consumes the given string if it exists at the current character index, and advances the scanner. If the given string doesn't exist at the current character index, an empty string will be returned and the scanner will not be advanced. @param {string} stringToConsume @returns {string} */ consumeString(stringToConsume) { if (this.consumeStringFast(stringToConsume)) { return stringToConsume; } if (!this.multiByteMode) { return emptyString; } let { length } = stringToConsume; let charLengthToMatch = this._charLength(stringToConsume); if (charLengthToMatch !== length && stringToConsume === this.peek(charLengthToMatch)) { this.advance(charLengthToMatch); return stringToConsume; } return emptyString; } /** * Does the same thing as `consumeString()`, but doesn't support consuming * multibyte characters. This can be much faster if you only need to match * single byte characters. * * @param {string} stringToConsume * @returns {string} */ consumeStringFast(stringToConsume) { if (this.peek() === stringToConsume[0]) { let { length } = stringToConsume; if (length === 1) { this.advance(); return stringToConsume; } if (this.peek(length) === stringToConsume) { this.advance(length); return stringToConsume; } } return emptyString; } /** Consumes characters until the given global regex is matched, advancing the scanner up to (but not beyond) the beginning of the match and updating the `lastIndex` property of the regex. The regex must have a global flag ("g") so that its `lastIndex` prop can be used to begin the search at the current scanner position. Returns the consumed string, or an empty string if nothing was consumed. @param {RegExp} regex @returns {string} */ consumeUntilMatch(regex) { if (!regex.global) { throw new Error('`regex` must have a global flag ("g")'); } let byteIndex = this.charsToBytes[this.charIndex]; regex.lastIndex = byteIndex; let match = regex.exec(this.string); if (match === null || match.index === byteIndex) { return emptyString; } let result = this.string.slice(byteIndex, match.index); this.advance(this._charLength(result)); return result; } /** Consumes characters until the given string is found, advancing the scanner up to (but not beyond) that point. Returns the consumed string, or an empty string if nothing was consumed. @param {string} searchString @returns {string} */ consumeUntilString(searchString) { let { charIndex, charsToBytes, string: string3 } = this; let byteIndex = charsToBytes[charIndex]; let matchByteIndex = string3.indexOf(searchString, byteIndex); if (matchByteIndex <= 0) { return emptyString; } let result = string3.slice(byteIndex, matchByteIndex); this.advance(this._charLength(result)); return result; } /** Returns the given number of characters starting at the current character index, without advancing the scanner and without exceeding the end of the input string. @param {number} [count] @returns {string} */ peek(count = 1) { if (this.charIndex >= this.charCount) { return emptyString; } if (count === 1) { return this.chars[this.charIndex]; } let { charsToBytes, charIndex } = this; return this.string.slice(charsToBytes[charIndex], charsToBytes[charIndex + count]); } /** Resets the scanner position to the given character _index_, or to the start of the input string if no index is given. If _index_ is negative, the scanner position will be moved backward by that many characters, stopping if the beginning of the string is reached. @param {number} [index] */ reset(index3 = 0) { this.charIndex = index3 >= 0 ? Math.min(this.charCount, index3) : Math.max(0, this.charIndex + index3); } }; module2.exports = StringScanner; } }); // node_modules/@rgrove/parse-xml/src/lib/syntax.js var require_syntax = __commonJS({ "node_modules/@rgrove/parse-xml/src/lib/syntax.js"(exports2) { "use strict"; var predefinedEntities = Object.freeze(Object.assign(/* @__PURE__ */ Object.create(null), { amp: "&", apos: "'", gt: ">", lt: "<", quot: '"' })); exports2.predefinedEntities = predefinedEntities; function isNameChar(char) { if (isNameStartChar(char)) { return true; } let cp = getCodePoint(char); return cp === 45 || cp === 46 || cp >= 48 && cp <= 57 || cp === 183 || cp >= 768 && cp <= 879 || cp >= 8255 && cp <= 8256; } exports2.isNameChar = isNameChar; function isNameStartChar(char) { let cp = getCodePoint(char); return cp === 58 || cp === 95 || cp >= 65 && cp <= 90 || cp >= 97 && cp <= 122 || cp >= 192 && cp <= 214 || cp >= 216 && cp <= 246 || cp >= 248 && cp <= 767 || cp >= 880 && cp <= 893 || cp >= 895 && cp <= 8191 || cp >= 8204 && cp <= 8205 || cp >= 8304 && cp <= 8591 || cp >= 11264 && cp <= 12271 || cp >= 12289 && cp <= 55295 || cp >= 63744 && cp <= 64975 || cp >= 65008 && cp <= 65533 || cp >= 65536 && cp <= 983039; } exports2.isNameStartChar = isNameStartChar; function isNotXmlChar(char) { return !isXmlChar(char); } exports2.isNotXmlChar = isNotXmlChar; function isReferenceChar(char) { return char === "#" || isNameChar(char); } exports2.isReferenceChar = isReferenceChar; function isWhitespace(char) { let cp = getCodePoint(char); return cp === 32 || cp === 9 || cp === 10 || cp === 13; } exports2.isWhitespace = isWhitespace; function isXmlChar(char) { let cp = getCodePoint(char); return cp === 9 || cp === 10 || cp === 13 || cp >= 32 && cp <= 55295 || cp >= 57344 && cp <= 65533 || cp >= 65536 && cp <= 1114111; } exports2.isXmlChar = isXmlChar; function getCodePoint(char) { return char.codePointAt(0) || -1; } } }); // node_modules/@rgrove/parse-xml/src/lib/XmlNode.js var require_XmlNode = __commonJS({ "node_modules/@rgrove/parse-xml/src/lib/XmlNode.js"(exports2, module2) { "use strict"; var XmlNode = class { constructor() { this.parent = null; } /** Document that contains this node, or `null` if this node is not associated with a document. @type {XmlDocument?} @public */ get document() { return this.parent ? this.parent.document : null; } /** Whether this node is the root node of the document. @returns {boolean} @public */ get isRootNode() { return this.parent ? this.parent === this.document : false; } /** Whether whitespace should be preserved in the content of this element and its children. This is influenced by the value of the special `xml:space` attribute, and will be `true` for any node whose `xml:space` attribute is set to "preserve". If a node has no such attribute, it will inherit the value of the nearest ancestor that does (if any). @type {boolean} @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-white-space @public */ get preserveWhitespace() { return Boolean(this.parent && this.parent.preserveWhitespace); } /** Type of this node. The value of this property is a string that matches one of the static `TYPE_*` properties on the `XmlNode` class (e.g. `TYPE_ELEMENT`, `TYPE_TEXT`, etc.). The `XmlNode` class itself is a base class and doesn't have its own type name. @type {string} @public */ get type() { return ""; } /** Returns a JSON-serializable object representing this node, minus properties that could result in circular references. @returns {{[key: string]: any}} @public */ toJSON() { let json = { type: this.type }; if (this.isRootNode) { json.isRootNode = true; } if (this.preserveWhitespace) { json.preserveWhitespace = true; } return json; } }; XmlNode.TYPE_CDATA = "cdata"; XmlNode.TYPE_COMMENT = "comment"; XmlNode.TYPE_DOCUMENT = "document"; XmlNode.TYPE_ELEMENT = "element"; XmlNode.TYPE_PROCESSING_INSTRUCTION = "pi"; XmlNode.TYPE_TEXT = "text"; module2.exports = XmlNode; } }); // node_modules/@rgrove/parse-xml/src/lib/XmlText.js var require_XmlText = __commonJS({ "node_modules/@rgrove/parse-xml/src/lib/XmlText.js"(exports2, module2) { "use strict"; var XmlNode = require_XmlNode(); var XmlText = class extends XmlNode { /** @param {string} [text] */ constructor(text5 = "") { super(); this.text = text5; } get type() { return XmlNode.TYPE_TEXT; } toJSON() { return Object.assign(XmlNode.prototype.toJSON.call(this), { text: this.text }); } }; module2.exports = XmlText; } }); // node_modules/@rgrove/parse-xml/src/lib/XmlCdata.js var require_XmlCdata = __commonJS({ "node_modules/@rgrove/parse-xml/src/lib/XmlCdata.js"(exports2, module2) { "use strict"; var XmlNode = require_XmlNode(); var XmlText = require_XmlText(); var XmlCdata = class extends XmlText { get type() { return XmlNode.TYPE_CDATA; } }; module2.exports = XmlCdata; } }); // node_modules/@rgrove/parse-xml/src/lib/XmlComment.js var require_XmlComment = __commonJS({ "node_modules/@rgrove/parse-xml/src/lib/XmlComment.js"(exports2, module2) { "use strict"; var XmlNode = require_XmlNode(); var XmlComment = class extends XmlNode { /** @param {string} [content] */ constructor(content3 = "") { super(); this.content = content3; } get type() { return XmlNode.TYPE_COMMENT; } toJSON() { return Object.assign(XmlNode.prototype.toJSON.call(this), { content: this.content }); } }; module2.exports = XmlComment; } }); // node_modules/@rgrove/parse-xml/src/lib/XmlElement.js var require_XmlElement = __commonJS({ "node_modules/@rgrove/parse-xml/src/lib/XmlElement.js"(exports2, module2) { "use strict"; var XmlNode = require_XmlNode(); var XmlElement = class _XmlElement extends XmlNode { /** @param {string} name @param {{[attrName: string]: string}} [attributes] @param {Array} [children] */ constructor(name, attributes = /* @__PURE__ */ Object.create(null), children = []) { super(); this.name = name; this.attributes = attributes; this.children = children; } /** Whether this node is empty (meaning it has no children). @type {boolean} @public */ get isEmpty() { return this.children.length === 0; } /** @type {boolean} */ get preserveWhitespace() { let node2 = this; while (node2 instanceof _XmlElement) { if ("xml:space" in node2.attributes) { return node2.attributes["xml:space"] === "preserve"; } node2 = node2.parent; } return false; } /** Text content of this element and all its descendants. @type {string} @public */ get text() { return this.children.map((child) => "text" in child ? child.text : "").join(""); } get type() { return XmlNode.TYPE_ELEMENT; } /** @returns {{[key: string]: any}} */ toJSON() { return Object.assign(XmlNode.prototype.toJSON.call(this), { name: this.name, attributes: this.attributes, children: this.children.map((child) => child.toJSON()) }); } }; module2.exports = XmlElement; } }); // node_modules/@rgrove/parse-xml/src/lib/XmlDocument.js var require_XmlDocument = __commonJS({ "node_modules/@rgrove/parse-xml/src/lib/XmlDocument.js"(exports2, module2) { "use strict"; var XmlElement = require_XmlElement(); var XmlNode = require_XmlNode(); var XmlDocument = class extends XmlNode { /** @param {Array} [children] */ constructor(children = []) { super(); this.children = children; } get document() { return this; } /** Root element of this document, or `null` if this document is empty. @type {XmlElement?} @public */ get root() { return this.children.find((child) => child instanceof XmlElement) || null; } /** Text content of this document and all its descendants. @type {string} @public */ get text() { return this.children.map((child) => "text" in child ? child.text : "").join(""); } get type() { return XmlNode.TYPE_DOCUMENT; } toJSON() { return Object.assign(XmlNode.prototype.toJSON.call(this), { children: this.children.map((child) => child.toJSON()) }); } }; module2.exports = XmlDocument; } }); // node_modules/@rgrove/parse-xml/src/lib/XmlProcessingInstruction.js var require_XmlProcessingInstruction = __commonJS({ "node_modules/@rgrove/parse-xml/src/lib/XmlProcessingInstruction.js"(exports2, module2) { "use strict"; var XmlNode = require_XmlNode(); var XmlProcessingInstruction = class extends XmlNode { /** @param {string} name @param {string} [content] */ constructor(name, content3 = "") { super(); this.name = name; this.content = content3; } get type() { return XmlNode.TYPE_PROCESSING_INSTRUCTION; } toJSON() { return Object.assign(XmlNode.prototype.toJSON.call(this), { name: this.name, content: this.content }); } }; module2.exports = XmlProcessingInstruction; } }); // node_modules/@rgrove/parse-xml/src/lib/Parser.js var require_Parser = __commonJS({ "node_modules/@rgrove/parse-xml/src/lib/Parser.js"(exports2, module2) { "use strict"; var StringScanner = require_StringScanner(); var syntax = require_syntax(); var XmlCdata = require_XmlCdata(); var XmlComment = require_XmlComment(); var XmlDocument = require_XmlDocument(); var XmlElement = require_XmlElement(); var XmlProcessingInstruction = require_XmlProcessingInstruction(); var XmlText = require_XmlText(); var emptyString = ""; var Parser = class { /** @param {string} xml XML string to parse. @param {object} [options] Parsing options. @param {boolean} [options.ignoreUndefinedEntities=false] @param {boolean} [options.preserveCdata=false] @param {boolean} [options.preserveComments=false] @param {(entity: string) => string?} [options.resolveUndefinedEntity] @param {boolean} [options.sortAttributes=false] */ constructor(xml2, options = {}) { this.document = new XmlDocument(); this.currentNode = this.document; this.options = options; this.scanner = new StringScanner(normalizeXmlString(xml2)); this.consumeProlog(); if (!this.consumeElement()) { this.error("Root element is missing or invalid"); } while (this.consumeMisc()) { } if (!this.scanner.isEnd) { this.error("Extra content at the end of the document"); } } /** Adds the given `XmlNode` as a child of `this.currentNode`. @param {XmlNode} node */ addNode(node2) { node2.parent = this.currentNode; this.currentNode.children.push(node2); } /** Adds the given _text_ to the document, either by appending it to a preceding `XmlText` node (if possible) or by creating a new `XmlText` node. @param {string} text */ addText(text5) { let { children } = this.currentNode; if (children.length > 0) { let prevNode = children[children.length - 1]; if (prevNode instanceof XmlText) { prevNode.text += text5; return; } } this.addNode(new XmlText(text5)); } /** Consumes an `AttValue` (attribute value) if possible. @returns {string|false} Contents of the `AttValue` minus quotes, or `false` if nothing was consumed. An empty string indicates that an `AttValue` was consumed but was empty. @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-AttValue */ consumeAttributeValue() { let { scanner } = this; let quote = scanner.peek(); if (quote !== '"' && quote !== "'") { return false; } scanner.advance(); let chars; let isClosed = false; let value = emptyString; let regex = quote === '"' ? /[^"&<]+/y : /[^'&<]+/y; matchLoop: while (!scanner.isEnd) { chars = scanner.consumeMatch(regex); if (chars) { this.validateChars(chars); value += chars.replace(/[\t\r\n]/g, " "); } let nextChar = scanner.peek(); switch (nextChar) { case quote: isClosed = true; break matchLoop; case "&": value += this.consumeReference(); continue; case "<": this.error("Unescaped `<` is not allowed in an attribute value"); break; case emptyString: this.error("Unclosed attribute"); break; } } if (!isClosed) { this.error("Unclosed attribute"); } scanner.advance(); return value; } /** Consumes a CDATA section if possible. @returns {boolean} Whether a CDATA section was consumed. @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-cdata-sect */ consumeCdataSection() { let { scanner } = this; if (!scanner.consumeStringFast(""); this.validateChars(text5); if (!scanner.consumeStringFast("]]>")) { this.error("Unclosed CDATA section"); } if (this.options.preserveCdata) { this.addNode(new XmlCdata(text5)); } else { this.addText(text5); } return true; } /** Consumes character data if possible. @returns {boolean} Whether character data was consumed. @see https://www.w3.org/TR/2008/REC-xml-20081126/#dt-chardata */ consumeCharData() { let { scanner } = this; let charData = scanner.consumeUntilMatch(/<|&|]]>/g); if (!charData) { return false; } this.validateChars(charData); if (scanner.peek() === "]" && scanner.peek(3) === "]]>") { this.error("Element content may not contain the CDATA section close delimiter `]]>`"); } this.addText(charData); return true; } /** Consumes a comment if possible. @returns {boolean} Whether a comment was consumed. @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Comment */ consumeComment() { let { scanner } = this; if (!scanner.consumeStringFast("")) { if (scanner.peek(2) === "--") { this.error("The string `--` isn't allowed inside a comment"); } else { this.error("Unclosed comment"); } } if (this.options.preserveComments) { this.addNode(new XmlComment(content3.trim())); } return true; } /** Consumes a reference in a content context if possible. This differs from `consumeReference()` in that a consumed reference will be added to the document as a text node instead of returned. @returns {boolean} Whether a reference was consumed. @see https://www.w3.org/TR/2008/REC-xml-20081126/#entproc */ consumeContentReference() { let ref = this.consumeReference(); if (ref) { this.addText(ref); return true; } return false; } /** Consumes a doctype declaration if possible. This is a loose implementation since doctype declarations are currently discarded without further parsing. @returns {boolean} Whether a doctype declaration was consumed. @see https://www.w3.org/TR/2008/REC-xml-20081126/#dtd */ consumeDoctypeDeclaration() { let { scanner } = this; if (!scanner.consumeStringFast("]+/y); if (scanner.consumeMatch(/\[[\s\S]+?\][\x20\t\r\n]*>/y)) { return true; } if (!scanner.consumeStringFast(">")) { this.error("Unclosed doctype declaration"); } return true; } /** Consumes an element if possible. @returns {boolean} Whether an element was consumed. @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-element */ consumeElement() { let { scanner } = this; let mark2 = scanner.charIndex; if (scanner.peek() !== "<") { return false; } scanner.advance(); let name = this.consumeName(); if (!name) { scanner.reset(mark2); return false; } let attributes = /* @__PURE__ */ Object.create(null); while (this.consumeWhitespace()) { let attrName = this.consumeName(); if (!attrName) { continue; } let attrValue = this.consumeEqual() && this.consumeAttributeValue(); if (attrValue === false) { this.error("Attribute value expected"); } if (attrName in attributes) { this.error(`Duplicate attribute: ${attrName}`); } if (attrName === "xml:space" && attrValue !== "default" && attrValue !== "preserve") { this.error('Value of the `xml:space` attribute must be "default" or "preserve"'); } attributes[attrName] = attrValue; } if (this.options.sortAttributes) { let attrNames = Object.keys(attributes).sort(); let sortedAttributes = /* @__PURE__ */ Object.create(null); for (let i = 0; i < attrNames.length; ++i) { let attrName = attrNames[i]; sortedAttributes[attrName] = attributes[attrName]; } attributes = sortedAttributes; } let isEmpty = Boolean(scanner.consumeStringFast("/>")); let element2 = new XmlElement(name, attributes); element2.parent = this.currentNode; if (!isEmpty) { if (!scanner.consumeStringFast(">")) { this.error(`Unclosed start tag for element \`${name}\``); } this.currentNode = element2; this.consumeCharData(); while (this.consumeElement() || this.consumeContentReference() || this.consumeCdataSection() || this.consumeProcessingInstruction() || this.consumeComment()) { this.consumeCharData(); } let endTagMark = scanner.charIndex; let endTagName; if (!scanner.consumeStringFast("")) { this.error(`Unclosed end tag for element ${name}`); } this.currentNode = element2.parent; } this.addNode(element2); return true; } /** Consumes an `Eq` production if possible. @returns {boolean} Whether an `Eq` production was consumed. @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Eq */ consumeEqual() { this.consumeWhitespace(); if (this.scanner.consumeStringFast("=")) { this.consumeWhitespace(); return true; } return false; } /** Consumes `Misc` content if possible. @returns {boolean} Whether anything was consumed. @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Misc */ consumeMisc() { return this.consumeComment() || this.consumeProcessingInstruction() || this.consumeWhitespace(); } /** Consumes one or more `Name` characters if possible. @returns {string} `Name` characters, or an empty string if none were consumed. @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Name */ consumeName() { return syntax.isNameStartChar(this.scanner.peek()) ? this.scanner.consumeMatchFn(syntax.isNameChar) : emptyString; } /** Consumes a processing instruction if possible. @returns {boolean} Whether a processing instruction was consumed. @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-pi */ consumeProcessingInstruction() { let { scanner } = this; let mark2 = scanner.charIndex; if (!scanner.consumeStringFast("")) { this.addNode(new XmlProcessingInstruction(name)); return true; } this.error("Whitespace is required after a processing instruction name"); } let content3 = scanner.consumeUntilString("?>"); this.validateChars(content3); if (!scanner.consumeStringFast("?>")) { this.error("Unterminated processing instruction"); } this.addNode(new XmlProcessingInstruction(name, content3)); return true; } /** Consumes a prolog if possible. @returns {boolean} Whether a prolog was consumed. @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-prolog-dtd */ consumeProlog() { let { scanner } = this; let mark2 = scanner.charIndex; this.consumeXmlDeclaration(); while (this.consumeMisc()) { } if (this.consumeDoctypeDeclaration()) { while (this.consumeMisc()) { } } return mark2 < scanner.charIndex; } /** Consumes a reference if possible. This differs from `consumeContentReference()` in that a consumed reference will be returned rather than added to the document. @returns {string|false} Parsed reference value, or `false` if nothing was consumed (to distinguish from a reference that resolves to an empty string). @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Reference */ consumeReference() { let { scanner } = this; if (scanner.peek() !== "&") { return false; } scanner.advance(); let ref = scanner.consumeMatchFn(syntax.isReferenceChar); if (scanner.consume() !== ";") { this.error("Unterminated reference (a reference must end with `;`)"); } let parsedValue; if (ref[0] === "#") { let codePoint = ref[1] === "x" ? parseInt(ref.slice(2), 16) : parseInt(ref.slice(1), 10); if (isNaN(codePoint)) { this.error("Invalid character reference"); } parsedValue = String.fromCodePoint(codePoint); if (!syntax.isXmlChar(parsedValue)) { this.error("Character reference resolves to an invalid character"); } } else { parsedValue = syntax.predefinedEntities[ref]; if (parsedValue === void 0) { let { ignoreUndefinedEntities, resolveUndefinedEntity } = this.options; let wrappedRef = `&${ref};`; if (resolveUndefinedEntity) { let resolvedValue = resolveUndefinedEntity(wrappedRef); if (resolvedValue !== null && resolvedValue !== void 0) { let type = typeof resolvedValue; if (type !== "string") { throw new TypeError(`\`resolveUndefinedEntity()\` must return a string, \`null\`, or \`undefined\`, but returned a value of type ${type}`); } return resolvedValue; } } if (ignoreUndefinedEntities) { return wrappedRef; } scanner.reset(-wrappedRef.length); this.error(`Named entity isn't defined: ${wrappedRef}`); } } return parsedValue; } /** Consumes a `SystemLiteral` if possible. A `SystemLiteral` is similar to an attribute value, but allows the characters `<` and `&` and doesn't replace references. @returns {string|false} Value of the `SystemLiteral` minus quotes, or `false` if nothing was consumed. An empty string indicates that a `SystemLiteral` was consumed but was empty. @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-SystemLiteral */ consumeSystemLiteral() { let { scanner } = this; let quote = scanner.consumeStringFast('"') || scanner.consumeStringFast("'"); if (!quote) { return false; } let value = scanner.consumeUntilString(quote); this.validateChars(value); if (!scanner.consumeStringFast(quote)) { this.error("Missing end quote"); } return value; } /** Consumes one or more whitespace characters if possible. @returns {boolean} Whether any whitespace characters were consumed. @see https://www.w3.org/TR/2008/REC-xml-20081126/#white */ consumeWhitespace() { return Boolean(this.scanner.consumeMatchFn(syntax.isWhitespace)); } /** Consumes an XML declaration if possible. @returns {boolean} Whether an XML declaration was consumed. @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-XMLDecl */ consumeXmlDeclaration() { let { scanner } = this; if (!scanner.consumeStringFast("")) { this.error("Invalid or unclosed XML declaration"); } return true; } /** Throws an error at the current scanner position. @param {string} message */ error(message) { let { charIndex, string: xml2 } = this.scanner; let column = 1; let excerpt = ""; let line = 1; for (let i = 0; i < charIndex; ++i) { let char = xml2[i]; if (char === "\n") { column = 1; excerpt = ""; line += 1; } else { column += 1; excerpt += char; } } let eol2 = xml2.indexOf("\n", charIndex); excerpt += eol2 === -1 ? xml2.slice(charIndex) : xml2.slice(charIndex, eol2); let excerptStart = 0; if (excerpt.length > 50) { if (column < 40) { excerpt = excerpt.slice(0, 50); } else { excerptStart = column - 20; excerpt = excerpt.slice(excerptStart, column + 30); } } let err = new Error( `${message} (line ${line}, column ${column}) ${excerpt} ` + " ".repeat(column - excerptStart + 1) + "^\n" ); Object.assign(err, { column, excerpt, line, pos: charIndex }); throw err; } /** Throws an invalid character error if any character in the given _string_ isn't a valid XML character. @param {string} string */ validateChars(string3) { let charIndex = 0; for (let char of string3) { if (syntax.isNotXmlChar(char)) { this.scanner.reset(-([...string3].length - charIndex)); this.error("Invalid character"); } charIndex += 1; } } }; module2.exports = Parser; function normalizeXmlString(xml2) { if (xml2[0] === "\uFEFF") { xml2 = xml2.slice(1); } return xml2.replace(/\r\n?/g, "\n"); } } }); // node_modules/@rgrove/parse-xml/src/index.js var require_src = __commonJS({ "node_modules/@rgrove/parse-xml/src/index.js"(exports2, module2) { "use strict"; var Parser = require_Parser(); var XmlCdata = require_XmlCdata(); var XmlComment = require_XmlComment(); var XmlDocument = require_XmlDocument(); var XmlElement = require_XmlElement(); var XmlNode = require_XmlNode(); var XmlProcessingInstruction = require_XmlProcessingInstruction(); var XmlText = require_XmlText(); function parseXml(xml2, options) { return new Parser(xml2, options).document; } parseXml.XmlCdata = XmlCdata; parseXml.XmlComment = XmlComment; parseXml.XmlDocument = XmlDocument; parseXml.XmlElement = XmlElement; parseXml.XmlNode = XmlNode; parseXml.XmlProcessingInstruction = XmlProcessingInstruction; parseXml.XmlText = XmlText; module2.exports = parseXml; } }); // node_modules/xtend/immutable.js var require_immutable = __commonJS({ "node_modules/xtend/immutable.js"(exports2, module2) { module2.exports = extend2; var hasOwnProperty2 = Object.prototype.hasOwnProperty; function extend2() { var target = {}; for (var i = 0; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (hasOwnProperty2.call(source, key)) { target[key] = source[key]; } } } return target; } } }); // node_modules/mml-react/node_modules/bail/index.js var require_bail = __commonJS({ "node_modules/mml-react/node_modules/bail/index.js"(exports2, module2) { "use strict"; module2.exports = bail2; function bail2(err) { if (err) { throw err; } } } }); // node_modules/mml-react/node_modules/is-plain-obj/index.js var require_is_plain_obj = __commonJS({ "node_modules/mml-react/node_modules/is-plain-obj/index.js"(exports2, module2) { "use strict"; module2.exports = (value) => { if (Object.prototype.toString.call(value) !== "[object Object]") { return false; } const prototype = Object.getPrototypeOf(value); return prototype === null || prototype === Object.prototype; }; } }); // node_modules/mml-react/node_modules/trough/wrap.js var require_wrap = __commonJS({ "node_modules/mml-react/node_modules/trough/wrap.js"(exports2, module2) { "use strict"; var slice = [].slice; module2.exports = wrap3; function wrap3(fn, callback) { var invoked; return wrapped; function wrapped() { var params = slice.call(arguments, 0); var callback2 = fn.length > params.length; var result; if (callback2) { params.push(done); } try { result = fn.apply(null, params); } catch (error) { if (callback2 && invoked) { throw error; } return done(error); } if (!callback2) { if (result && typeof result.then === "function") { result.then(then, done); } else if (result instanceof Error) { done(result); } else { then(result); } } } function done() { if (!invoked) { invoked = true; callback.apply(null, arguments); } } function then(value) { done(null, value); } } } }); // node_modules/mml-react/node_modules/trough/index.js var require_trough = __commonJS({ "node_modules/mml-react/node_modules/trough/index.js"(exports2, module2) { "use strict"; var wrap3 = require_wrap(); module2.exports = trough2; trough2.wrap = wrap3; var slice = [].slice; function trough2() { var fns = []; var middleware = {}; middleware.run = run; middleware.use = use; return middleware; function run() { var index3 = -1; var input = slice.call(arguments, 0, -1); var done = arguments[arguments.length - 1]; if (typeof done !== "function") { throw new Error("Expected function as last argument, not " + done); } next.apply(null, [null].concat(input)); function next(err) { var fn = fns[++index3]; var params = slice.call(arguments, 0); var values = params.slice(1); var length = input.length; var pos = -1; if (err) { done(err); return; } while (++pos < length) { if (values[pos] === null || values[pos] === void 0) { values[pos] = input[pos]; } } input = values; if (fn) { wrap3(fn, next).apply(null, input); } else { done.apply(null, [null].concat(input)); } } } function use(fn) { if (typeof fn !== "function") { throw new Error("Expected `fn` to be a function, not " + fn); } fns.push(fn); return middleware; } } } }); // node_modules/unist-util-stringify-position/index.js var require_unist_util_stringify_position = __commonJS({ "node_modules/unist-util-stringify-position/index.js"(exports2, module2) { "use strict"; var own10 = {}.hasOwnProperty; module2.exports = stringify3; function stringify3(value) { if (!value || typeof value !== "object") { return ""; } if (own10.call(value, "position") || own10.call(value, "type")) { return position4(value.position); } if (own10.call(value, "start") || own10.call(value, "end")) { return position4(value); } if (own10.call(value, "line") || own10.call(value, "column")) { return point5(value); } return ""; } function point5(point6) { if (!point6 || typeof point6 !== "object") { point6 = {}; } return index3(point6.line) + ":" + index3(point6.column); } function position4(pos) { if (!pos || typeof pos !== "object") { pos = {}; } return point5(pos.start) + "-" + point5(pos.end); } function index3(value) { return value && typeof value === "number" ? value : 1; } } }); // node_modules/mml-react/node_modules/vfile-message/index.js var require_vfile_message = __commonJS({ "node_modules/mml-react/node_modules/vfile-message/index.js"(exports2, module2) { "use strict"; var stringify3 = require_unist_util_stringify_position(); module2.exports = VMessage; function VMessagePrototype() { } VMessagePrototype.prototype = Error.prototype; VMessage.prototype = new VMessagePrototype(); var proto = VMessage.prototype; proto.file = ""; proto.name = ""; proto.reason = ""; proto.message = ""; proto.stack = ""; proto.fatal = null; proto.column = null; proto.line = null; function VMessage(reason, position4, origin) { var parts; var range; var location; if (typeof position4 === "string") { origin = position4; position4 = null; } parts = parseOrigin(origin); range = stringify3(position4) || "1:1"; location = { start: { line: null, column: null }, end: { line: null, column: null } }; if (position4 && position4.position) { position4 = position4.position; } if (position4) { if (position4.start) { location = position4; position4 = position4.start; } else { location.start = position4; } } if (reason.stack) { this.stack = reason.stack; reason = reason.message; } this.message = reason; this.name = range; this.reason = reason; this.line = position4 ? position4.line : null; this.column = position4 ? position4.column : null; this.location = location; this.source = parts[0]; this.ruleId = parts[1]; } function parseOrigin(origin) { var result = [null, null]; var index3; if (typeof origin === "string") { index3 = origin.indexOf(":"); if (index3 === -1) { result[1] = origin; } else { result[0] = origin.slice(0, index3); result[1] = origin.slice(index3 + 1); } } return result; } } }); // node_modules/mml-react/node_modules/vfile/lib/minpath.js var require_minpath = __commonJS({ "node_modules/mml-react/node_modules/vfile/lib/minpath.js"(exports2, module2) { "use strict"; module2.exports = require("path"); } }); // node_modules/mml-react/node_modules/vfile/lib/minproc.js var require_minproc = __commonJS({ "node_modules/mml-react/node_modules/vfile/lib/minproc.js"(exports2, module2) { "use strict"; module2.exports = process; } }); // node_modules/mml-react/node_modules/vfile/lib/core.js var require_core = __commonJS({ "node_modules/mml-react/node_modules/vfile/lib/core.js"(exports2, module2) { "use strict"; var p = require_minpath(); var proc = require_minproc(); var buffer2 = require_is_buffer(); module2.exports = VFile2; var own10 = {}.hasOwnProperty; var order2 = ["history", "path", "basename", "stem", "extname", "dirname"]; VFile2.prototype.toString = toString2; Object.defineProperty(VFile2.prototype, "path", { get: getPath, set: setPath }); Object.defineProperty(VFile2.prototype, "dirname", { get: getDirname, set: setDirname }); Object.defineProperty(VFile2.prototype, "basename", { get: getBasename, set: setBasename }); Object.defineProperty(VFile2.prototype, "extname", { get: getExtname, set: setExtname }); Object.defineProperty(VFile2.prototype, "stem", { get: getStem, set: setStem }); function VFile2(options) { var prop; var index3; if (!options) { options = {}; } else if (typeof options === "string" || buffer2(options)) { options = { contents: options }; } else if ("message" in options && "messages" in options) { return options; } if (!(this instanceof VFile2)) { return new VFile2(options); } this.data = {}; this.messages = []; this.history = []; this.cwd = proc.cwd(); index3 = -1; while (++index3 < order2.length) { prop = order2[index3]; if (own10.call(options, prop)) { this[prop] = options[prop]; } } for (prop in options) { if (order2.indexOf(prop) < 0) { this[prop] = options[prop]; } } } function getPath() { return this.history[this.history.length - 1]; } function setPath(path2) { assertNonEmpty2(path2, "path"); if (this.path !== path2) { this.history.push(path2); } } function getDirname() { return typeof this.path === "string" ? p.dirname(this.path) : void 0; } function setDirname(dirname) { assertPath2(this.path, "dirname"); this.path = p.join(dirname || "", this.basename); } function getBasename() { return typeof this.path === "string" ? p.basename(this.path) : void 0; } function setBasename(basename) { assertNonEmpty2(basename, "basename"); assertPart2(basename, "basename"); this.path = p.join(this.dirname || "", basename); } function getExtname() { return typeof this.path === "string" ? p.extname(this.path) : void 0; } function setExtname(extname) { assertPart2(extname, "extname"); assertPath2(this.path, "extname"); if (extname) { if (extname.charCodeAt(0) !== 46) { throw new Error("`extname` must start with `.`"); } if (extname.indexOf(".", 1) > -1) { throw new Error("`extname` cannot contain multiple dots"); } } this.path = p.join(this.dirname, this.stem + (extname || "")); } function getStem() { return typeof this.path === "string" ? p.basename(this.path, this.extname) : void 0; } function setStem(stem) { assertNonEmpty2(stem, "stem"); assertPart2(stem, "stem"); this.path = p.join(this.dirname || "", stem + (this.extname || "")); } function toString2(encoding) { return (this.contents || "").toString(encoding); } function assertPart2(part, name) { if (part && part.indexOf(p.sep) > -1) { throw new Error( "`" + name + "` cannot be a path: did not expect `" + p.sep + "`" ); } } function assertNonEmpty2(part, name) { if (!part) { throw new Error("`" + name + "` cannot be empty"); } } function assertPath2(path2, name) { if (!path2) { throw new Error("Setting `" + name + "` requires `path` to be set too"); } } } }); // node_modules/mml-react/node_modules/vfile/lib/index.js var require_lib = __commonJS({ "node_modules/mml-react/node_modules/vfile/lib/index.js"(exports2, module2) { "use strict"; var VMessage = require_vfile_message(); var VFile2 = require_core(); module2.exports = VFile2; VFile2.prototype.message = message; VFile2.prototype.info = info; VFile2.prototype.fail = fail; function message(reason, position4, origin) { var message2 = new VMessage(reason, position4, origin); if (this.path) { message2.name = this.path + ":" + message2.name; message2.file = this.path; } message2.fatal = false; this.messages.push(message2); return message2; } function fail() { var message2 = this.message.apply(this, arguments); message2.fatal = true; throw message2; } function info() { var message2 = this.message.apply(this, arguments); message2.fatal = null; return message2; } } }); // node_modules/mml-react/node_modules/vfile/index.js var require_vfile = __commonJS({ "node_modules/mml-react/node_modules/vfile/index.js"(exports2, module2) { "use strict"; module2.exports = require_lib(); } }); // node_modules/mml-react/node_modules/unified/index.js var require_unified = __commonJS({ "node_modules/mml-react/node_modules/unified/index.js"(exports2, module2) { "use strict"; var bail2 = require_bail(); var buffer2 = require_is_buffer(); var extend2 = require_extend(); var plain = require_is_plain_obj(); var trough2 = require_trough(); var vfile2 = require_vfile(); module2.exports = unified2().freeze(); var slice = [].slice; var own10 = {}.hasOwnProperty; var pipeline = trough2().use(pipelineParse).use(pipelineRun).use(pipelineStringify); function pipelineParse(p, ctx) { ctx.tree = p.parse(ctx.file); } function pipelineRun(p, ctx, next) { p.run(ctx.tree, ctx.file, done); function done(error, tree, file) { if (error) { next(error); } else { ctx.tree = tree; ctx.file = file; next(); } } } function pipelineStringify(p, ctx) { var result = p.stringify(ctx.tree, ctx.file); if (result === void 0 || result === null) { } else if (typeof result === "string" || buffer2(result)) { ctx.file.contents = result; } else { ctx.file.result = result; } } function unified2() { var attachers = []; var transformers = trough2(); var namespace = {}; var freezeIndex = -1; var frozen; processor.data = data; processor.freeze = freeze; processor.attachers = attachers; processor.use = use; processor.parse = parse2; processor.stringify = stringify3; processor.run = run; processor.runSync = runSync; processor.process = process2; processor.processSync = processSync; return processor; function processor() { var destination = unified2(); var index3 = -1; while (++index3 < attachers.length) { destination.use.apply(null, attachers[index3]); } destination.data(extend2(true, {}, namespace)); return destination; } function freeze() { var values; var transformer; if (frozen) { return processor; } while (++freezeIndex < attachers.length) { values = attachers[freezeIndex]; if (values[1] === false) { continue; } if (values[1] === true) { values[1] = void 0; } transformer = values[0].apply(processor, values.slice(1)); if (typeof transformer === "function") { transformers.use(transformer); } } frozen = true; freezeIndex = Infinity; return processor; } function data(key, value) { if (typeof key === "string") { if (arguments.length === 2) { assertUnfrozen2("data", frozen); namespace[key] = value; return processor; } return own10.call(namespace, key) && namespace[key] || null; } if (key) { assertUnfrozen2("data", frozen); namespace = key; return processor; } return namespace; } function use(value) { var settings; assertUnfrozen2("use", frozen); if (value === null || value === void 0) { } else if (typeof value === "function") { addPlugin.apply(null, arguments); } else if (typeof value === "object") { if ("length" in value) { addList(value); } else { addPreset(value); } } else { throw new Error("Expected usable value, not `" + value + "`"); } if (settings) { namespace.settings = extend2(namespace.settings || {}, settings); } return processor; function addPreset(result) { addList(result.plugins); if (result.settings) { settings = extend2(settings || {}, result.settings); } } function add(value2) { if (typeof value2 === "function") { addPlugin(value2); } else if (typeof value2 === "object") { if ("length" in value2) { addPlugin.apply(null, value2); } else { addPreset(value2); } } else { throw new Error("Expected usable value, not `" + value2 + "`"); } } function addList(plugins) { var index3 = -1; if (plugins === null || plugins === void 0) { } else if (typeof plugins === "object" && "length" in plugins) { while (++index3 < plugins.length) { add(plugins[index3]); } } else { throw new Error("Expected a list of plugins, not `" + plugins + "`"); } } function addPlugin(plugin, value2) { var entry = find4(plugin); if (entry) { if (plain(entry[1]) && plain(value2)) { value2 = extend2(true, entry[1], value2); } entry[1] = value2; } else { attachers.push(slice.call(arguments)); } } } function find4(plugin) { var index3 = -1; while (++index3 < attachers.length) { if (attachers[index3][0] === plugin) { return attachers[index3]; } } } function parse2(doc) { var file = vfile2(doc); var Parser; freeze(); Parser = processor.Parser; assertParser2("parse", Parser); if (newable2(Parser, "parse")) { return new Parser(String(file), file).parse(); } return Parser(String(file), file); } function run(node2, file, cb) { assertNode2(node2); freeze(); if (!cb && typeof file === "function") { cb = file; file = null; } if (!cb) { return new Promise(executor); } executor(null, cb); function executor(resolve, reject) { transformers.run(node2, vfile2(file), done); function done(error, tree, file2) { tree = tree || node2; if (error) { reject(error); } else if (resolve) { resolve(tree); } else { cb(null, tree, file2); } } } } function runSync(node2, file) { var result; var complete; run(node2, file, done); assertDone2("runSync", "run", complete); return result; function done(error, tree) { complete = true; result = tree; bail2(error); } } function stringify3(node2, doc) { var file = vfile2(doc); var Compiler; freeze(); Compiler = processor.Compiler; assertCompiler2("stringify", Compiler); assertNode2(node2); if (newable2(Compiler, "compile")) { return new Compiler(node2, file).compile(); } return Compiler(node2, file); } function process2(doc, cb) { freeze(); assertParser2("process", processor.Parser); assertCompiler2("process", processor.Compiler); if (!cb) { return new Promise(executor); } executor(null, cb); function executor(resolve, reject) { var file = vfile2(doc); pipeline.run(processor, { file }, done); function done(error) { if (error) { reject(error); } else if (resolve) { resolve(file); } else { cb(null, file); } } } } function processSync(doc) { var file; var complete; freeze(); assertParser2("processSync", processor.Parser); assertCompiler2("processSync", processor.Compiler); file = vfile2(doc); process2(file, done); assertDone2("processSync", "process", complete); return file; function done(error) { complete = true; bail2(error); } } } function newable2(value, name) { return typeof value === "function" && value.prototype && // A function with keys in its prototype is probably a constructor. // Classes’ prototype methods are not enumerable, so we check if some value // exists in the prototype. (keys2(value.prototype) || name in value.prototype); } function keys2(value) { var key; for (key in value) { return true; } return false; } function assertParser2(name, Parser) { if (typeof Parser !== "function") { throw new Error("Cannot `" + name + "` without `Parser`"); } } function assertCompiler2(name, Compiler) { if (typeof Compiler !== "function") { throw new Error("Cannot `" + name + "` without `Compiler`"); } } function assertUnfrozen2(name, frozen) { if (frozen) { throw new Error( "Cannot invoke `" + name + "` on a frozen processor.\nCreate a new processor first, by invoking it: use `processor()` instead of `processor`." ); } } function assertNode2(node2) { if (!node2 || typeof node2.type !== "string") { throw new Error("Expected node, got `" + node2 + "`"); } } function assertDone2(name, asyncName, complete) { if (!complete) { throw new Error( "`" + name + "` finished async. Use `" + asyncName + "` instead" ); } } } }); // node_modules/mml-react/node_modules/mdast-util-to-string/index.js var require_mdast_util_to_string = __commonJS({ "node_modules/mml-react/node_modules/mdast-util-to-string/index.js"(exports2, module2) { "use strict"; module2.exports = toString2; function toString2(node2) { return node2 && (node2.value || node2.alt || node2.title || "children" in node2 && all3(node2.children) || "length" in node2 && all3(node2)) || ""; } function all3(values) { var result = []; var index3 = -1; while (++index3 < values.length) { result[index3] = toString2(values[index3]); } return result.join(""); } } }); // node_modules/mml-react/node_modules/micromark/dist/constant/assign.js var require_assign = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/constant/assign.js"(exports2, module2) { "use strict"; var assign = Object.assign; module2.exports = assign; } }); // node_modules/mml-react/node_modules/micromark/dist/constant/has-own-property.js var require_has_own_property = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/constant/has-own-property.js"(exports2, module2) { "use strict"; var own10 = {}.hasOwnProperty; module2.exports = own10; } }); // node_modules/mml-react/node_modules/micromark/dist/util/normalize-identifier.js var require_normalize_identifier = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/normalize-identifier.js"(exports2, module2) { "use strict"; function normalizeIdentifier2(value) { return value.replace(/[\t\n\r ]+/g, " ").replace(/^ | $/g, "").toLowerCase().toUpperCase(); } module2.exports = normalizeIdentifier2; } }); // node_modules/mml-react/node_modules/micromark/dist/constant/from-char-code.js var require_from_char_code = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/constant/from-char-code.js"(exports2, module2) { "use strict"; var fromCharCode = String.fromCharCode; module2.exports = fromCharCode; } }); // node_modules/mml-react/node_modules/micromark/dist/util/safe-from-int.js var require_safe_from_int = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/safe-from-int.js"(exports2, module2) { "use strict"; var fromCharCode = require_from_char_code(); function safeFromInt(value, base2) { var code3 = parseInt(value, base2); if ( // C0 except for HT, LF, FF, CR, space code3 < 9 || code3 === 11 || code3 > 13 && code3 < 32 || // Control character (DEL) of the basic block and C1 controls. code3 > 126 && code3 < 160 || // Lone high surrogates and low surrogates. code3 > 55295 && code3 < 57344 || // Noncharacters. code3 > 64975 && code3 < 65008 || (code3 & 65535) === 65535 || (code3 & 65535) === 65534 || // Out of range code3 > 1114111 ) { return "\uFFFD"; } return fromCharCode(code3); } module2.exports = safeFromInt; } }); // node_modules/mml-react/node_modules/micromark/dist/character/markdown-line-ending.js var require_markdown_line_ending = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/character/markdown-line-ending.js"(exports2, module2) { "use strict"; function markdownLineEnding2(code3) { return code3 < -2; } module2.exports = markdownLineEnding2; } }); // node_modules/mml-react/node_modules/micromark/dist/character/markdown-space.js var require_markdown_space = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/character/markdown-space.js"(exports2, module2) { "use strict"; function markdownSpace2(code3) { return code3 === -2 || code3 === -1 || code3 === 32; } module2.exports = markdownSpace2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-space.js var require_factory_space = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-space.js"(exports2, module2) { "use strict"; var markdownSpace2 = require_markdown_space(); function spaceFactory(effects, ok4, type, max) { var limit = max ? max - 1 : Infinity; var size = 0; return start; function start(code3) { if (markdownSpace2(code3)) { effects.enter(type); return prefix(code3); } return ok4(code3); } function prefix(code3) { if (markdownSpace2(code3) && size++ < limit) { effects.consume(code3); return prefix; } effects.exit(type); return ok4(code3); } } module2.exports = spaceFactory; } }); // node_modules/mml-react/node_modules/micromark/dist/initialize/content.js var require_content = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/initialize/content.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); var markdownLineEnding2 = require_markdown_line_ending(); var factorySpace2 = require_factory_space(); var tokenize = initializeContent2; function initializeContent2(effects) { var contentStart = effects.attempt( this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial ); var previous3; return contentStart; function afterContentStartConstruct(code3) { if (code3 === null) { effects.consume(code3); return; } effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return factorySpace2(effects, contentStart, "linePrefix"); } function paragraphInitial(code3) { effects.enter("paragraph"); return lineStart(code3); } function lineStart(code3) { var token = effects.enter("chunkText", { contentType: "text", previous: previous3 }); if (previous3) { previous3.next = token; } previous3 = token; return data(code3); } function data(code3) { if (code3 === null) { effects.exit("chunkText"); effects.exit("paragraph"); effects.consume(code3); return; } if (markdownLineEnding2(code3)) { effects.consume(code3); effects.exit("chunkText"); return lineStart; } effects.consume(code3); return data; } } exports2.tokenize = tokenize; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/partial-blank-line.js var require_partial_blank_line = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/partial-blank-line.js"(exports2, module2) { "use strict"; var markdownLineEnding2 = require_markdown_line_ending(); var factorySpace2 = require_factory_space(); var partialBlankLine = { tokenize: tokenizePartialBlankLine, partial: true }; function tokenizePartialBlankLine(effects, ok4, nok) { return factorySpace2(effects, afterWhitespace, "linePrefix"); function afterWhitespace(code3) { return code3 === null || markdownLineEnding2(code3) ? ok4(code3) : nok(code3); } } module2.exports = partialBlankLine; } }); // node_modules/mml-react/node_modules/micromark/dist/initialize/document.js var require_document = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/initialize/document.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); var markdownLineEnding2 = require_markdown_line_ending(); var factorySpace2 = require_factory_space(); var partialBlankLine = require_partial_blank_line(); var tokenize = initializeDocument2; var containerConstruct2 = { tokenize: tokenizeContainer2 }; var lazyFlowConstruct = { tokenize: tokenizeLazyFlow }; function initializeDocument2(effects) { var self2 = this; var stack = []; var continued = 0; var inspectConstruct = { tokenize: tokenizeInspect, partial: true }; var inspectResult; var childFlow; var childToken; return start; function start(code3) { if (continued < stack.length) { self2.containerState = stack[continued][1]; return effects.attempt( stack[continued][0].continuation, documentContinue, documentContinued )(code3); } return documentContinued(code3); } function documentContinue(code3) { continued++; return start(code3); } function documentContinued(code3) { if (inspectResult && inspectResult.flowContinue) { return flowStart(code3); } self2.interrupt = childFlow && childFlow.currentConstruct && childFlow.currentConstruct.interruptible; self2.containerState = {}; return effects.attempt( containerConstruct2, containerContinue, flowStart )(code3); } function containerContinue(code3) { stack.push([self2.currentConstruct, self2.containerState]); self2.containerState = void 0; return documentContinued(code3); } function flowStart(code3) { if (code3 === null) { exitContainers(0, true); effects.consume(code3); return; } childFlow = childFlow || self2.parser.flow(self2.now()); effects.enter("chunkFlow", { contentType: "flow", previous: childToken, _tokenizer: childFlow }); return flowContinue(code3); } function flowContinue(code3) { if (code3 === null) { continueFlow(effects.exit("chunkFlow")); return flowStart(code3); } if (markdownLineEnding2(code3)) { effects.consume(code3); continueFlow(effects.exit("chunkFlow")); return effects.check(inspectConstruct, documentAfterPeek); } effects.consume(code3); return flowContinue; } function documentAfterPeek(code3) { exitContainers( inspectResult.continued, inspectResult && inspectResult.flowEnd ); continued = 0; return start(code3); } function continueFlow(token) { if (childToken) childToken.next = token; childToken = token; childFlow.lazy = inspectResult && inspectResult.lazy; childFlow.defineSkip(token.start); childFlow.write(self2.sliceStream(token)); } function exitContainers(size, end) { var index3 = stack.length; if (childFlow && end) { childFlow.write([null]); childToken = childFlow = void 0; } while (index3-- > size) { self2.containerState = stack[index3][1]; stack[index3][0].exit.call(self2, effects); } stack.length = size; } function tokenizeInspect(effects2, ok4) { var subcontinued = 0; inspectResult = {}; return inspectStart; function inspectStart(code3) { if (subcontinued < stack.length) { self2.containerState = stack[subcontinued][1]; return effects2.attempt( stack[subcontinued][0].continuation, inspectContinue, inspectLess )(code3); } if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { inspectResult.flowContinue = true; return inspectDone(code3); } self2.interrupt = childFlow.currentConstruct && childFlow.currentConstruct.interruptible; self2.containerState = {}; return effects2.attempt( containerConstruct2, inspectFlowEnd, inspectDone )(code3); } function inspectContinue(code3) { subcontinued++; return self2.containerState._closeFlow ? inspectFlowEnd(code3) : inspectStart(code3); } function inspectLess(code3) { if (childFlow.currentConstruct && childFlow.currentConstruct.lazy) { self2.containerState = {}; return effects2.attempt( containerConstruct2, inspectFlowEnd, // Maybe flow, or a blank line? effects2.attempt( lazyFlowConstruct, inspectFlowEnd, effects2.check(partialBlankLine, inspectFlowEnd, inspectLazy) ) )(code3); } return inspectFlowEnd(code3); } function inspectLazy(code3) { subcontinued = stack.length; inspectResult.lazy = true; inspectResult.flowContinue = true; return inspectDone(code3); } function inspectFlowEnd(code3) { inspectResult.flowEnd = true; return inspectDone(code3); } function inspectDone(code3) { inspectResult.continued = subcontinued; self2.interrupt = self2.containerState = void 0; return ok4(code3); } } } function tokenizeContainer2(effects, ok4, nok) { return factorySpace2( effects, effects.attempt(this.parser.constructs.document, ok4, nok), "linePrefix", this.parser.constructs.disable.null.indexOf("codeIndented") > -1 ? void 0 : 4 ); } function tokenizeLazyFlow(effects, ok4, nok) { return factorySpace2( effects, effects.lazy(this.parser.constructs.flow, ok4, nok), "linePrefix", this.parser.constructs.disable.null.indexOf("codeIndented") > -1 ? void 0 : 4 ); } exports2.tokenize = tokenize; } }); // node_modules/mml-react/node_modules/micromark/dist/util/size-chunks.js var require_size_chunks = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/size-chunks.js"(exports2, module2) { "use strict"; function sizeChunks(chunks) { var index3 = -1; var size = 0; while (++index3 < chunks.length) { size += typeof chunks[index3] === "string" ? chunks[index3].length : 1; } return size; } module2.exports = sizeChunks; } }); // node_modules/mml-react/node_modules/micromark/dist/util/prefix-size.js var require_prefix_size = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/prefix-size.js"(exports2, module2) { "use strict"; var sizeChunks = require_size_chunks(); function prefixSize(events, type) { var tail = events[events.length - 1]; if (!tail || tail[1].type !== type) return 0; return sizeChunks(tail[2].sliceStream(tail[1])); } module2.exports = prefixSize; } }); // node_modules/mml-react/node_modules/micromark/dist/constant/splice.js var require_splice = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/constant/splice.js"(exports2, module2) { "use strict"; var splice2 = [].splice; module2.exports = splice2; } }); // node_modules/mml-react/node_modules/micromark/dist/util/chunked-splice.js var require_chunked_splice = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/chunked-splice.js"(exports2, module2) { "use strict"; var splice2 = require_splice(); function chunkedSplice(list3, start, remove, items) { var end = list3.length; var chunkStart = 0; var parameters; if (start < 0) { start = -start > end ? 0 : end + start; } else { start = start > end ? end : start; } remove = remove > 0 ? remove : 0; if (items.length < 1e4) { parameters = Array.from(items); parameters.unshift(start, remove); splice2.apply(list3, parameters); } else { if (remove) splice2.apply(list3, [start, remove]); while (chunkStart < items.length) { parameters = items.slice(chunkStart, chunkStart + 1e4); parameters.unshift(start, 0); splice2.apply(list3, parameters); chunkStart += 1e4; start += 1e4; } } } module2.exports = chunkedSplice; } }); // node_modules/mml-react/node_modules/micromark/dist/util/shallow.js var require_shallow = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/shallow.js"(exports2, module2) { "use strict"; var assign = require_assign(); function shallow(object) { return assign({}, object); } module2.exports = shallow; } }); // node_modules/mml-react/node_modules/micromark/dist/util/subtokenize.js var require_subtokenize = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/subtokenize.js"(exports2, module2) { "use strict"; var assign = require_assign(); var chunkedSplice = require_chunked_splice(); var shallow = require_shallow(); function subtokenize2(events) { var jumps = {}; var index3 = -1; var event; var lineIndex; var otherIndex; var otherEvent; var parameters; var subevents; var more; while (++index3 < events.length) { while (index3 in jumps) { index3 = jumps[index3]; } event = events[index3]; if (index3 && event[1].type === "chunkFlow" && events[index3 - 1][1].type === "listItemPrefix") { subevents = event[1]._tokenizer.events; otherIndex = 0; if (otherIndex < subevents.length && subevents[otherIndex][1].type === "lineEndingBlank") { otherIndex += 2; } if (otherIndex < subevents.length && subevents[otherIndex][1].type === "content") { while (++otherIndex < subevents.length) { if (subevents[otherIndex][1].type === "content") { break; } if (subevents[otherIndex][1].type === "chunkText") { subevents[otherIndex][1].isInFirstContentOfListItem = true; otherIndex++; } } } } if (event[0] === "enter") { if (event[1].contentType) { assign(jumps, subcontent2(events, index3)); index3 = jumps[index3]; more = true; } } else if (event[1]._container || event[1]._movePreviousLineEndings) { otherIndex = index3; lineIndex = void 0; while (otherIndex--) { otherEvent = events[otherIndex]; if (otherEvent[1].type === "lineEnding" || otherEvent[1].type === "lineEndingBlank") { if (otherEvent[0] === "enter") { if (lineIndex) { events[lineIndex][1].type = "lineEndingBlank"; } otherEvent[1].type = "lineEnding"; lineIndex = otherIndex; } } else { break; } } if (lineIndex) { event[1].end = shallow(events[lineIndex][1].start); parameters = events.slice(lineIndex, index3); parameters.unshift(event); chunkedSplice(events, lineIndex, index3 - lineIndex + 1, parameters); } } } return !more; } function subcontent2(events, eventIndex) { var token = events[eventIndex][1]; var context = events[eventIndex][2]; var startPosition = eventIndex - 1; var startPositions = []; var tokenizer = token._tokenizer || context.parser[token.contentType](token.start); var childEvents = tokenizer.events; var jumps = []; var gaps = {}; var stream; var previous3; var index3; var entered; var end; var adjust; while (token) { while (events[++startPosition][1] !== token) { } startPositions.push(startPosition); if (!token._tokenizer) { stream = context.sliceStream(token); if (!token.next) { stream.push(null); } if (previous3) { tokenizer.defineSkip(token.start); } if (token.isInFirstContentOfListItem) { tokenizer._gfmTasklistFirstContentOfListItem = true; } tokenizer.write(stream); if (token.isInFirstContentOfListItem) { tokenizer._gfmTasklistFirstContentOfListItem = void 0; } } previous3 = token; token = token.next; } token = previous3; index3 = childEvents.length; while (index3--) { if (childEvents[index3][0] === "enter") { entered = true; } else if ( // Find a void token that includes a break. entered && childEvents[index3][1].type === childEvents[index3 - 1][1].type && childEvents[index3][1].start.line !== childEvents[index3][1].end.line ) { add(childEvents.slice(index3 + 1, end)); token._tokenizer = token.next = void 0; token = token.previous; end = index3 + 1; } } tokenizer.events = token._tokenizer = token.next = void 0; add(childEvents.slice(0, end)); index3 = -1; adjust = 0; while (++index3 < jumps.length) { gaps[adjust + jumps[index3][0]] = adjust + jumps[index3][1]; adjust += jumps[index3][1] - jumps[index3][0] - 1; } return gaps; function add(slice) { var start = startPositions.pop(); jumps.unshift([start, start + slice.length - 1]); chunkedSplice(events, start, 2, slice); } } module2.exports = subtokenize2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/content.js var require_content2 = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/content.js"(exports2, module2) { "use strict"; var markdownLineEnding2 = require_markdown_line_ending(); var prefixSize = require_prefix_size(); var subtokenize2 = require_subtokenize(); var factorySpace2 = require_factory_space(); var content3 = { tokenize: tokenizeContent2, resolve: resolveContent2, interruptible: true, lazy: true }; var continuationConstruct2 = { tokenize: tokenizeContinuation2, partial: true }; function resolveContent2(events) { subtokenize2(events); return events; } function tokenizeContent2(effects, ok4) { var previous3; return start; function start(code3) { effects.enter("content"); previous3 = effects.enter("chunkContent", { contentType: "content" }); return data(code3); } function data(code3) { if (code3 === null) { return contentEnd(code3); } if (markdownLineEnding2(code3)) { return effects.check( continuationConstruct2, contentContinue, contentEnd )(code3); } effects.consume(code3); return data; } function contentEnd(code3) { effects.exit("chunkContent"); effects.exit("content"); return ok4(code3); } function contentContinue(code3) { effects.consume(code3); effects.exit("chunkContent"); previous3 = previous3.next = effects.enter("chunkContent", { contentType: "content", previous: previous3 }); return data; } } function tokenizeContinuation2(effects, ok4, nok) { var self2 = this; return startLookahead; function startLookahead(code3) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return factorySpace2(effects, prefixed, "linePrefix"); } function prefixed(code3) { if (code3 === null || markdownLineEnding2(code3)) { return nok(code3); } if (self2.parser.constructs.disable.null.indexOf("codeIndented") > -1 || prefixSize(self2.events, "linePrefix") < 4) { return effects.interrupt(self2.parser.constructs.flow, nok, ok4)(code3); } return ok4(code3); } } module2.exports = content3; } }); // node_modules/mml-react/node_modules/micromark/dist/initialize/flow.js var require_flow = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/initialize/flow.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); var content3 = require_content2(); var factorySpace2 = require_factory_space(); var partialBlankLine = require_partial_blank_line(); var tokenize = initializeFlow2; function initializeFlow2(effects) { var self2 = this; var initial = effects.attempt( // Try to parse a blank line. partialBlankLine, atBlankEnding, // Try to parse initial flow (essentially, only code). effects.attempt( this.parser.constructs.flowInitial, afterConstruct, factorySpace2( effects, effects.attempt( this.parser.constructs.flow, afterConstruct, effects.attempt(content3, afterConstruct) ), "linePrefix" ) ) ); return initial; function atBlankEnding(code3) { if (code3 === null) { effects.consume(code3); return; } effects.enter("lineEndingBlank"); effects.consume(code3); effects.exit("lineEndingBlank"); self2.currentConstruct = void 0; return initial; } function afterConstruct(code3) { if (code3 === null) { effects.consume(code3); return; } effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); self2.currentConstruct = void 0; return initial; } } exports2.tokenize = tokenize; } }); // node_modules/mml-react/node_modules/micromark/dist/initialize/text.js var require_text = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/initialize/text.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); var assign = require_assign(); var shallow = require_shallow(); var text5 = initializeFactory2("text"); var string3 = initializeFactory2("string"); var resolver2 = { resolveAll: createResolver2() }; function initializeFactory2(field) { return { tokenize: initializeText, resolveAll: createResolver2( field === "text" ? resolveAllLineSuffixes2 : void 0 ) }; function initializeText(effects) { var self2 = this; var constructs2 = this.parser.constructs[field]; var text6 = effects.attempt(constructs2, start, notText); return start; function start(code3) { return atBreak(code3) ? text6(code3) : notText(code3); } function notText(code3) { if (code3 === null) { effects.consume(code3); return; } effects.enter("data"); effects.consume(code3); return data; } function data(code3) { if (atBreak(code3)) { effects.exit("data"); return text6(code3); } effects.consume(code3); return data; } function atBreak(code3) { var list3 = constructs2[code3]; var index3 = -1; if (code3 === null) { return true; } if (list3) { while (++index3 < list3.length) { if (!list3[index3].previous || list3[index3].previous.call(self2, self2.previous)) { return true; } } } } } } function createResolver2(extraResolver) { return resolveAllText; function resolveAllText(events, context) { var index3 = -1; var enter; while (++index3 <= events.length) { if (enter === void 0) { if (events[index3] && events[index3][1].type === "data") { enter = index3; index3++; } } else if (!events[index3] || events[index3][1].type !== "data") { if (index3 !== enter + 2) { events[enter][1].end = events[index3 - 1][1].end; events.splice(enter + 2, index3 - enter - 2); index3 = enter + 2; } enter = void 0; } } return extraResolver ? extraResolver(events, context) : events; } } function resolveAllLineSuffixes2(events, context) { var eventIndex = -1; var chunks; var data; var chunk; var index3; var bufferIndex; var size; var tabs; var token; while (++eventIndex <= events.length) { if ((eventIndex === events.length || events[eventIndex][1].type === "lineEnding") && events[eventIndex - 1][1].type === "data") { data = events[eventIndex - 1][1]; chunks = context.sliceStream(data); index3 = chunks.length; bufferIndex = -1; size = 0; tabs = void 0; while (index3--) { chunk = chunks[index3]; if (typeof chunk === "string") { bufferIndex = chunk.length; while (chunk.charCodeAt(bufferIndex - 1) === 32) { size++; bufferIndex--; } if (bufferIndex) break; bufferIndex = -1; } else if (chunk === -2) { tabs = true; size++; } else if (chunk === -1) ; else { index3++; break; } } if (size) { token = { type: eventIndex === events.length || tabs || size < 2 ? "lineSuffix" : "hardBreakTrailing", start: { line: data.end.line, column: data.end.column - size, offset: data.end.offset - size, _index: data.start._index + index3, _bufferIndex: index3 ? bufferIndex : data.start._bufferIndex + bufferIndex }, end: shallow(data.end) }; data.end = shallow(token.start); if (data.start.offset === data.end.offset) { assign(data, token); } else { events.splice( eventIndex, 0, ["enter", token, context], ["exit", token, context] ); eventIndex += 2; } } eventIndex++; } } return events; } exports2.resolver = resolver2; exports2.string = string3; exports2.text = text5; } }); // node_modules/mml-react/node_modules/micromark/dist/util/miniflat.js var require_miniflat = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/miniflat.js"(exports2, module2) { "use strict"; function miniflat(value) { return value === null || value === void 0 ? [] : "length" in value ? value : [value]; } module2.exports = miniflat; } }); // node_modules/mml-react/node_modules/micromark/dist/util/combine-extensions.js var require_combine_extensions = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/combine-extensions.js"(exports2, module2) { "use strict"; var hasOwnProperty2 = require_has_own_property(); var chunkedSplice = require_chunked_splice(); var miniflat = require_miniflat(); function combineExtensions2(extensions) { var all3 = {}; var index3 = -1; while (++index3 < extensions.length) { extension2(all3, extensions[index3]); } return all3; } function extension2(all3, extension3) { var hook; var left; var right; var code3; for (hook in extension3) { left = hasOwnProperty2.call(all3, hook) ? all3[hook] : all3[hook] = {}; right = extension3[hook]; for (code3 in right) { left[code3] = constructs2( miniflat(right[code3]), hasOwnProperty2.call(left, code3) ? left[code3] : [] ); } } } function constructs2(list3, existing) { var index3 = -1; var before = []; while (++index3 < list3.length) { ; (list3[index3].add === "after" ? existing : before).push(list3[index3]); } chunkedSplice(existing, 0, 0, before); return existing; } module2.exports = combineExtensions2; } }); // node_modules/mml-react/node_modules/micromark/dist/util/chunked-push.js var require_chunked_push = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/chunked-push.js"(exports2, module2) { "use strict"; var chunkedSplice = require_chunked_splice(); function chunkedPush(list3, items) { if (list3.length) { chunkedSplice(list3, list3.length, 0, items); return list3; } return items; } module2.exports = chunkedPush; } }); // node_modules/mml-react/node_modules/micromark/dist/util/resolve-all.js var require_resolve_all = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/resolve-all.js"(exports2, module2) { "use strict"; function resolveAll2(constructs2, events, context) { var called = []; var index3 = -1; var resolve; while (++index3 < constructs2.length) { resolve = constructs2[index3].resolveAll; if (resolve && called.indexOf(resolve) < 0) { events = resolve(events, context); called.push(resolve); } } return events; } module2.exports = resolveAll2; } }); // node_modules/mml-react/node_modules/micromark/dist/util/serialize-chunks.js var require_serialize_chunks = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/serialize-chunks.js"(exports2, module2) { "use strict"; var fromCharCode = require_from_char_code(); function serializeChunks2(chunks) { var index3 = -1; var result = []; var chunk; var value; var atTab; while (++index3 < chunks.length) { chunk = chunks[index3]; if (typeof chunk === "string") { value = chunk; } else if (chunk === -5) { value = "\r"; } else if (chunk === -4) { value = "\n"; } else if (chunk === -3) { value = "\r\n"; } else if (chunk === -2) { value = " "; } else if (chunk === -1) { if (atTab) continue; value = " "; } else { value = fromCharCode(chunk); } atTab = chunk === -2; result.push(value); } return result.join(""); } module2.exports = serializeChunks2; } }); // node_modules/mml-react/node_modules/micromark/dist/util/slice-chunks.js var require_slice_chunks = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/slice-chunks.js"(exports2, module2) { "use strict"; function sliceChunks2(chunks, token) { var startIndex = token.start._index; var startBufferIndex = token.start._bufferIndex; var endIndex = token.end._index; var endBufferIndex = token.end._bufferIndex; var view; if (startIndex === endIndex) { view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]; } else { view = chunks.slice(startIndex, endIndex); if (startBufferIndex > -1) { view[0] = view[0].slice(startBufferIndex); } if (endBufferIndex > 0) { view.push(chunks[endIndex].slice(0, endBufferIndex)); } } return view; } module2.exports = sliceChunks2; } }); // node_modules/mml-react/node_modules/micromark/dist/util/create-tokenizer.js var require_create_tokenizer = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/create-tokenizer.js"(exports2, module2) { "use strict"; var assign = require_assign(); var markdownLineEnding2 = require_markdown_line_ending(); var chunkedPush = require_chunked_push(); var chunkedSplice = require_chunked_splice(); var miniflat = require_miniflat(); var resolveAll2 = require_resolve_all(); var serializeChunks2 = require_serialize_chunks(); var shallow = require_shallow(); var sliceChunks2 = require_slice_chunks(); function createTokenizer2(parser, initialize, from) { var point5 = from ? shallow(from) : { line: 1, column: 1, offset: 0 }; var columnStart = {}; var resolveAllConstructs = []; var chunks = []; var stack = []; var effects = { consume, enter, exit: exit3, attempt: constructFactory(onsuccessfulconstruct), check: constructFactory(onsuccessfulcheck), interrupt: constructFactory(onsuccessfulcheck, { interrupt: true }), lazy: constructFactory(onsuccessfulcheck, { lazy: true }) }; var context = { previous: null, events: [], parser, sliceStream, sliceSerialize, now, defineSkip: skip, write }; var state = initialize.tokenize.call(context, effects); if (initialize.resolveAll) { resolveAllConstructs.push(initialize); } point5._index = 0; point5._bufferIndex = -1; return context; function write(slice) { chunks = chunkedPush(chunks, slice); main(); if (chunks[chunks.length - 1] !== null) { return []; } addResult(initialize, 0); context.events = resolveAll2(resolveAllConstructs, context.events, context); return context.events; } function sliceSerialize(token) { return serializeChunks2(sliceStream(token)); } function sliceStream(token) { return sliceChunks2(chunks, token); } function now() { return shallow(point5); } function skip(value) { columnStart[value.line] = value.column; accountForPotentialSkip(); } function main() { var chunkIndex; var chunk; while (point5._index < chunks.length) { chunk = chunks[point5._index]; if (typeof chunk === "string") { chunkIndex = point5._index; if (point5._bufferIndex < 0) { point5._bufferIndex = 0; } while (point5._index === chunkIndex && point5._bufferIndex < chunk.length) { go(chunk.charCodeAt(point5._bufferIndex)); } } else { go(chunk); } } } function go(code3) { state = state(code3); } function consume(code3) { if (markdownLineEnding2(code3)) { point5.line++; point5.column = 1; point5.offset += code3 === -3 ? 2 : 1; accountForPotentialSkip(); } else if (code3 !== -1) { point5.column++; point5.offset++; } if (point5._bufferIndex < 0) { point5._index++; } else { point5._bufferIndex++; if (point5._bufferIndex === chunks[point5._index].length) { point5._bufferIndex = -1; point5._index++; } } context.previous = code3; } function enter(type, fields) { var token = fields || {}; token.type = type; token.start = now(); context.events.push(["enter", token, context]); stack.push(token); return token; } function exit3(type) { var token = stack.pop(); token.end = now(); context.events.push(["exit", token, context]); return token; } function onsuccessfulconstruct(construct, info) { addResult(construct, info.from); } function onsuccessfulcheck(construct, info) { info.restore(); } function constructFactory(onreturn, fields) { return hook; function hook(constructs2, returnState, bogusState) { var listOfConstructs; var constructIndex; var currentConstruct; var info; return constructs2.tokenize || "length" in constructs2 ? handleListOfConstructs(miniflat(constructs2)) : handleMapOfConstructs; function handleMapOfConstructs(code3) { if (code3 in constructs2 || null in constructs2) { return handleListOfConstructs( constructs2.null ? ( /* c8 ignore next */ miniflat(constructs2[code3]).concat(miniflat(constructs2.null)) ) : constructs2[code3] )(code3); } return bogusState(code3); } function handleListOfConstructs(list3) { listOfConstructs = list3; constructIndex = 0; return handleConstruct(list3[constructIndex]); } function handleConstruct(construct) { return start; function start(code3) { info = store(); currentConstruct = construct; if (!construct.partial) { context.currentConstruct = construct; } if (construct.name && context.parser.constructs.disable.null.indexOf(construct.name) > -1) { return nok(); } return construct.tokenize.call( fields ? assign({}, context, fields) : context, effects, ok4, nok )(code3); } } function ok4(code3) { onreturn(currentConstruct, info); return returnState; } function nok(code3) { info.restore(); if (++constructIndex < listOfConstructs.length) { return handleConstruct(listOfConstructs[constructIndex]); } return bogusState; } } } function addResult(construct, from2) { if (construct.resolveAll && resolveAllConstructs.indexOf(construct) < 0) { resolveAllConstructs.push(construct); } if (construct.resolve) { chunkedSplice( context.events, from2, context.events.length - from2, construct.resolve(context.events.slice(from2), context) ); } if (construct.resolveTo) { context.events = construct.resolveTo(context.events, context); } } function store() { var startPoint = now(); var startPrevious = context.previous; var startCurrentConstruct = context.currentConstruct; var startEventsIndex = context.events.length; var startStack = Array.from(stack); return { restore, from: startEventsIndex }; function restore() { point5 = startPoint; context.previous = startPrevious; context.currentConstruct = startCurrentConstruct; context.events.length = startEventsIndex; stack = startStack; accountForPotentialSkip(); } } function accountForPotentialSkip() { if (point5.line in columnStart && point5.column < 2) { point5.column = columnStart[point5.line]; point5.offset += columnStart[point5.line] - 1; } } } module2.exports = createTokenizer2; } }); // node_modules/mml-react/node_modules/micromark/dist/character/markdown-line-ending-or-space.js var require_markdown_line_ending_or_space = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/character/markdown-line-ending-or-space.js"(exports2, module2) { "use strict"; function markdownLineEndingOrSpace2(code3) { return code3 < 0 || code3 === 32; } module2.exports = markdownLineEndingOrSpace2; } }); // node_modules/mml-react/node_modules/micromark/dist/constant/unicode-punctuation-regex.js var require_unicode_punctuation_regex = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/constant/unicode-punctuation-regex.js"(exports2, module2) { "use strict"; var unicodePunctuation2 = /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/; module2.exports = unicodePunctuation2; } }); // node_modules/mml-react/node_modules/micromark/dist/util/regex-check.js var require_regex_check = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/regex-check.js"(exports2, module2) { "use strict"; var fromCharCode = require_from_char_code(); function regexCheck2(regex) { return check; function check(code3) { return regex.test(fromCharCode(code3)); } } module2.exports = regexCheck2; } }); // node_modules/mml-react/node_modules/micromark/dist/character/unicode-punctuation.js var require_unicode_punctuation = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/character/unicode-punctuation.js"(exports2, module2) { "use strict"; var unicodePunctuationRegex2 = require_unicode_punctuation_regex(); var regexCheck2 = require_regex_check(); var unicodePunctuation2 = regexCheck2(unicodePunctuationRegex2); module2.exports = unicodePunctuation2; } }); // node_modules/mml-react/node_modules/micromark/dist/character/unicode-whitespace.js var require_unicode_whitespace = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/character/unicode-whitespace.js"(exports2, module2) { "use strict"; var regexCheck2 = require_regex_check(); var unicodeWhitespace2 = regexCheck2(/\s/); module2.exports = unicodeWhitespace2; } }); // node_modules/mml-react/node_modules/micromark/dist/util/classify-character.js var require_classify_character = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/classify-character.js"(exports2, module2) { "use strict"; var markdownLineEndingOrSpace2 = require_markdown_line_ending_or_space(); var unicodePunctuation2 = require_unicode_punctuation(); var unicodeWhitespace2 = require_unicode_whitespace(); function classifyCharacter2(code3) { if (code3 === null || markdownLineEndingOrSpace2(code3) || unicodeWhitespace2(code3)) { return 1; } if (unicodePunctuation2(code3)) { return 2; } } module2.exports = classifyCharacter2; } }); // node_modules/mml-react/node_modules/micromark/dist/util/move-point.js var require_move_point = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/util/move-point.js"(exports2, module2) { "use strict"; function movePoint2(point5, offset) { point5.column += offset; point5.offset += offset; point5._bufferIndex += offset; return point5; } module2.exports = movePoint2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/attention.js var require_attention = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/attention.js"(exports2, module2) { "use strict"; var chunkedPush = require_chunked_push(); var chunkedSplice = require_chunked_splice(); var classifyCharacter2 = require_classify_character(); var movePoint2 = require_move_point(); var resolveAll2 = require_resolve_all(); var shallow = require_shallow(); var attention2 = { name: "attention", tokenize: tokenizeAttention2, resolveAll: resolveAllAttention2 }; function resolveAllAttention2(events, context) { var index3 = -1; var open; var group; var text5; var openingSequence; var closingSequence; var use; var nextEvents; var offset; while (++index3 < events.length) { if (events[index3][0] === "enter" && events[index3][1].type === "attentionSequence" && events[index3][1]._close) { open = index3; while (open--) { if (events[open][0] === "exit" && events[open][1].type === "attentionSequence" && events[open][1]._open && // If the markers are the same: context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index3][1]).charCodeAt(0)) { if ((events[open][1]._close || events[index3][1]._open) && (events[index3][1].end.offset - events[index3][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index3][1].end.offset - events[index3][1].start.offset) % 3)) { continue; } use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index3][1].end.offset - events[index3][1].start.offset > 1 ? 2 : 1; openingSequence = { type: use > 1 ? "strongSequence" : "emphasisSequence", start: movePoint2(shallow(events[open][1].end), -use), end: shallow(events[open][1].end) }; closingSequence = { type: use > 1 ? "strongSequence" : "emphasisSequence", start: shallow(events[index3][1].start), end: movePoint2(shallow(events[index3][1].start), use) }; text5 = { type: use > 1 ? "strongText" : "emphasisText", start: shallow(events[open][1].end), end: shallow(events[index3][1].start) }; group = { type: use > 1 ? "strong" : "emphasis", start: shallow(openingSequence.start), end: shallow(closingSequence.end) }; events[open][1].end = shallow(openingSequence.start); events[index3][1].start = shallow(closingSequence.end); nextEvents = []; if (events[open][1].end.offset - events[open][1].start.offset) { nextEvents = chunkedPush(nextEvents, [ ["enter", events[open][1], context], ["exit", events[open][1], context] ]); } nextEvents = chunkedPush(nextEvents, [ ["enter", group, context], ["enter", openingSequence, context], ["exit", openingSequence, context], ["enter", text5, context] ]); nextEvents = chunkedPush( nextEvents, resolveAll2( context.parser.constructs.insideSpan.null, events.slice(open + 1, index3), context ) ); nextEvents = chunkedPush(nextEvents, [ ["exit", text5, context], ["enter", closingSequence, context], ["exit", closingSequence, context], ["exit", group, context] ]); if (events[index3][1].end.offset - events[index3][1].start.offset) { offset = 2; nextEvents = chunkedPush(nextEvents, [ ["enter", events[index3][1], context], ["exit", events[index3][1], context] ]); } else { offset = 0; } chunkedSplice(events, open - 1, index3 - open + 3, nextEvents); index3 = open + nextEvents.length - offset - 2; break; } } } } index3 = -1; while (++index3 < events.length) { if (events[index3][1].type === "attentionSequence") { events[index3][1].type = "data"; } } return events; } function tokenizeAttention2(effects, ok4) { var before = classifyCharacter2(this.previous); var marker; return start; function start(code3) { effects.enter("attentionSequence"); marker = code3; return sequence(code3); } function sequence(code3) { var token; var after; var open; var close; if (code3 === marker) { effects.consume(code3); return sequence; } token = effects.exit("attentionSequence"); after = classifyCharacter2(code3); open = !after || after === 2 && before; close = !before || before === 2 && after; token._open = marker === 42 ? open : open && (before || !close); token._close = marker === 42 ? close : close && (after || !open); return ok4(code3); } } module2.exports = attention2; } }); // node_modules/mml-react/node_modules/micromark/dist/character/ascii-alpha.js var require_ascii_alpha = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/character/ascii-alpha.js"(exports2, module2) { "use strict"; var regexCheck2 = require_regex_check(); var asciiAlpha2 = regexCheck2(/[A-Za-z]/); module2.exports = asciiAlpha2; } }); // node_modules/mml-react/node_modules/micromark/dist/character/ascii-alphanumeric.js var require_ascii_alphanumeric = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/character/ascii-alphanumeric.js"(exports2, module2) { "use strict"; var regexCheck2 = require_regex_check(); var asciiAlphanumeric2 = regexCheck2(/[\dA-Za-z]/); module2.exports = asciiAlphanumeric2; } }); // node_modules/mml-react/node_modules/micromark/dist/character/ascii-atext.js var require_ascii_atext = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/character/ascii-atext.js"(exports2, module2) { "use strict"; var regexCheck2 = require_regex_check(); var asciiAtext2 = regexCheck2(/[#-'*+\--9=?A-Z^-~]/); module2.exports = asciiAtext2; } }); // node_modules/mml-react/node_modules/micromark/dist/character/ascii-control.js var require_ascii_control = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/character/ascii-control.js"(exports2, module2) { "use strict"; function asciiControl2(code3) { return ( // Special whitespace codes (which have negative values), C0 and Control // character DEL code3 < 32 || code3 === 127 ); } module2.exports = asciiControl2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/autolink.js var require_autolink = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/autolink.js"(exports2, module2) { "use strict"; var asciiAlpha2 = require_ascii_alpha(); var asciiAlphanumeric2 = require_ascii_alphanumeric(); var asciiAtext2 = require_ascii_atext(); var asciiControl2 = require_ascii_control(); var autolink2 = { name: "autolink", tokenize: tokenizeAutolink2 }; function tokenizeAutolink2(effects, ok4, nok) { var size = 1; return start; function start(code3) { effects.enter("autolink"); effects.enter("autolinkMarker"); effects.consume(code3); effects.exit("autolinkMarker"); effects.enter("autolinkProtocol"); return open; } function open(code3) { if (asciiAlpha2(code3)) { effects.consume(code3); return schemeOrEmailAtext; } return asciiAtext2(code3) ? emailAtext(code3) : nok(code3); } function schemeOrEmailAtext(code3) { return code3 === 43 || code3 === 45 || code3 === 46 || asciiAlphanumeric2(code3) ? schemeInsideOrEmailAtext(code3) : emailAtext(code3); } function schemeInsideOrEmailAtext(code3) { if (code3 === 58) { effects.consume(code3); return urlInside; } if ((code3 === 43 || code3 === 45 || code3 === 46 || asciiAlphanumeric2(code3)) && size++ < 32) { effects.consume(code3); return schemeInsideOrEmailAtext; } return emailAtext(code3); } function urlInside(code3) { if (code3 === 62) { effects.exit("autolinkProtocol"); return end(code3); } if (code3 === 32 || code3 === 60 || asciiControl2(code3)) { return nok(code3); } effects.consume(code3); return urlInside; } function emailAtext(code3) { if (code3 === 64) { effects.consume(code3); size = 0; return emailAtSignOrDot; } if (asciiAtext2(code3)) { effects.consume(code3); return emailAtext; } return nok(code3); } function emailAtSignOrDot(code3) { return asciiAlphanumeric2(code3) ? emailLabel(code3) : nok(code3); } function emailLabel(code3) { if (code3 === 46) { effects.consume(code3); size = 0; return emailAtSignOrDot; } if (code3 === 62) { effects.exit("autolinkProtocol").type = "autolinkEmail"; return end(code3); } return emailValue(code3); } function emailValue(code3) { if ((code3 === 45 || asciiAlphanumeric2(code3)) && size++ < 63) { effects.consume(code3); return code3 === 45 ? emailValue : emailLabel; } return nok(code3); } function end(code3) { effects.enter("autolinkMarker"); effects.consume(code3); effects.exit("autolinkMarker"); effects.exit("autolink"); return ok4; } } module2.exports = autolink2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/block-quote.js var require_block_quote = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/block-quote.js"(exports2, module2) { "use strict"; var markdownSpace2 = require_markdown_space(); var factorySpace2 = require_factory_space(); var blockQuote2 = { name: "blockQuote", tokenize: tokenizeBlockQuoteStart2, continuation: { tokenize: tokenizeBlockQuoteContinuation2 }, exit: exit3 }; function tokenizeBlockQuoteStart2(effects, ok4, nok) { var self2 = this; return start; function start(code3) { if (code3 === 62) { if (!self2.containerState.open) { effects.enter("blockQuote", { _container: true }); self2.containerState.open = true; } effects.enter("blockQuotePrefix"); effects.enter("blockQuoteMarker"); effects.consume(code3); effects.exit("blockQuoteMarker"); return after; } return nok(code3); } function after(code3) { if (markdownSpace2(code3)) { effects.enter("blockQuotePrefixWhitespace"); effects.consume(code3); effects.exit("blockQuotePrefixWhitespace"); effects.exit("blockQuotePrefix"); return ok4; } effects.exit("blockQuotePrefix"); return ok4(code3); } } function tokenizeBlockQuoteContinuation2(effects, ok4, nok) { return factorySpace2( effects, effects.attempt(blockQuote2, ok4, nok), "linePrefix", this.parser.constructs.disable.null.indexOf("codeIndented") > -1 ? void 0 : 4 ); } function exit3(effects) { effects.exit("blockQuote"); } module2.exports = blockQuote2; } }); // node_modules/mml-react/node_modules/micromark/dist/character/ascii-punctuation.js var require_ascii_punctuation = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/character/ascii-punctuation.js"(exports2, module2) { "use strict"; var regexCheck2 = require_regex_check(); var asciiPunctuation2 = regexCheck2(/[!-/:-@[-`{-~]/); module2.exports = asciiPunctuation2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/character-escape.js var require_character_escape = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/character-escape.js"(exports2, module2) { "use strict"; var asciiPunctuation2 = require_ascii_punctuation(); var characterEscape2 = { name: "characterEscape", tokenize: tokenizeCharacterEscape2 }; function tokenizeCharacterEscape2(effects, ok4, nok) { return start; function start(code3) { effects.enter("characterEscape"); effects.enter("escapeMarker"); effects.consume(code3); effects.exit("escapeMarker"); return open; } function open(code3) { if (asciiPunctuation2(code3)) { effects.enter("characterEscapeValue"); effects.consume(code3); effects.exit("characterEscapeValue"); effects.exit("characterEscape"); return ok4; } return nok(code3); } } module2.exports = characterEscape2; } }); // node_modules/parse-entities/node_modules/character-entities/index.json var require_character_entities = __commonJS({ "node_modules/parse-entities/node_modules/character-entities/index.json"(exports2, module2) { module2.exports = { AEli: "\xC6", AElig: "\xC6", AM: "&", AMP: "&", Aacut: "\xC1", Aacute: "\xC1", Abreve: "\u0102", Acir: "\xC2", Acirc: "\xC2", Acy: "\u0410", Afr: "\u{1D504}", Agrav: "\xC0", Agrave: "\xC0", Alpha: "\u0391", Amacr: "\u0100", And: "\u2A53", Aogon: "\u0104", Aopf: "\u{1D538}", ApplyFunction: "\u2061", Arin: "\xC5", Aring: "\xC5", Ascr: "\u{1D49C}", Assign: "\u2254", Atild: "\xC3", Atilde: "\xC3", Aum: "\xC4", Auml: "\xC4", Backslash: "\u2216", Barv: "\u2AE7", Barwed: "\u2306", Bcy: "\u0411", Because: "\u2235", Bernoullis: "\u212C", Beta: "\u0392", Bfr: "\u{1D505}", Bopf: "\u{1D539}", Breve: "\u02D8", Bscr: "\u212C", Bumpeq: "\u224E", CHcy: "\u0427", COP: "\xA9", COPY: "\xA9", Cacute: "\u0106", Cap: "\u22D2", CapitalDifferentialD: "\u2145", Cayleys: "\u212D", Ccaron: "\u010C", Ccedi: "\xC7", Ccedil: "\xC7", Ccirc: "\u0108", Cconint: "\u2230", Cdot: "\u010A", Cedilla: "\xB8", CenterDot: "\xB7", Cfr: "\u212D", Chi: "\u03A7", CircleDot: "\u2299", CircleMinus: "\u2296", CirclePlus: "\u2295", CircleTimes: "\u2297", ClockwiseContourIntegral: "\u2232", CloseCurlyDoubleQuote: "\u201D", CloseCurlyQuote: "\u2019", Colon: "\u2237", Colone: "\u2A74", Congruent: "\u2261", Conint: "\u222F", ContourIntegral: "\u222E", Copf: "\u2102", Coproduct: "\u2210", CounterClockwiseContourIntegral: "\u2233", Cross: "\u2A2F", Cscr: "\u{1D49E}", Cup: "\u22D3", CupCap: "\u224D", DD: "\u2145", DDotrahd: "\u2911", DJcy: "\u0402", DScy: "\u0405", DZcy: "\u040F", Dagger: "\u2021", Darr: "\u21A1", Dashv: "\u2AE4", Dcaron: "\u010E", Dcy: "\u0414", Del: "\u2207", Delta: "\u0394", Dfr: "\u{1D507}", DiacriticalAcute: "\xB4", DiacriticalDot: "\u02D9", DiacriticalDoubleAcute: "\u02DD", DiacriticalGrave: "`", DiacriticalTilde: "\u02DC", Diamond: "\u22C4", DifferentialD: "\u2146", Dopf: "\u{1D53B}", Dot: "\xA8", DotDot: "\u20DC", DotEqual: "\u2250", DoubleContourIntegral: "\u222F", DoubleDot: "\xA8", DoubleDownArrow: "\u21D3", DoubleLeftArrow: "\u21D0", DoubleLeftRightArrow: "\u21D4", DoubleLeftTee: "\u2AE4", DoubleLongLeftArrow: "\u27F8", DoubleLongLeftRightArrow: "\u27FA", DoubleLongRightArrow: "\u27F9", DoubleRightArrow: "\u21D2", DoubleRightTee: "\u22A8", DoubleUpArrow: "\u21D1", DoubleUpDownArrow: "\u21D5", DoubleVerticalBar: "\u2225", DownArrow: "\u2193", DownArrowBar: "\u2913", DownArrowUpArrow: "\u21F5", DownBreve: "\u0311", DownLeftRightVector: "\u2950", DownLeftTeeVector: "\u295E", DownLeftVector: "\u21BD", DownLeftVectorBar: "\u2956", DownRightTeeVector: "\u295F", DownRightVector: "\u21C1", DownRightVectorBar: "\u2957", DownTee: "\u22A4", DownTeeArrow: "\u21A7", Downarrow: "\u21D3", Dscr: "\u{1D49F}", Dstrok: "\u0110", ENG: "\u014A", ET: "\xD0", ETH: "\xD0", Eacut: "\xC9", Eacute: "\xC9", Ecaron: "\u011A", Ecir: "\xCA", Ecirc: "\xCA", Ecy: "\u042D", Edot: "\u0116", Efr: "\u{1D508}", Egrav: "\xC8", Egrave: "\xC8", Element: "\u2208", Emacr: "\u0112", EmptySmallSquare: "\u25FB", EmptyVerySmallSquare: "\u25AB", Eogon: "\u0118", Eopf: "\u{1D53C}", Epsilon: "\u0395", Equal: "\u2A75", EqualTilde: "\u2242", Equilibrium: "\u21CC", Escr: "\u2130", Esim: "\u2A73", Eta: "\u0397", Eum: "\xCB", Euml: "\xCB", Exists: "\u2203", ExponentialE: "\u2147", Fcy: "\u0424", Ffr: "\u{1D509}", FilledSmallSquare: "\u25FC", FilledVerySmallSquare: "\u25AA", Fopf: "\u{1D53D}", ForAll: "\u2200", Fouriertrf: "\u2131", Fscr: "\u2131", GJcy: "\u0403", G: ">", GT: ">", Gamma: "\u0393", Gammad: "\u03DC", Gbreve: "\u011E", Gcedil: "\u0122", Gcirc: "\u011C", Gcy: "\u0413", Gdot: "\u0120", Gfr: "\u{1D50A}", Gg: "\u22D9", Gopf: "\u{1D53E}", GreaterEqual: "\u2265", GreaterEqualLess: "\u22DB", GreaterFullEqual: "\u2267", GreaterGreater: "\u2AA2", GreaterLess: "\u2277", GreaterSlantEqual: "\u2A7E", GreaterTilde: "\u2273", Gscr: "\u{1D4A2}", Gt: "\u226B", HARDcy: "\u042A", Hacek: "\u02C7", Hat: "^", Hcirc: "\u0124", Hfr: "\u210C", HilbertSpace: "\u210B", Hopf: "\u210D", HorizontalLine: "\u2500", Hscr: "\u210B", Hstrok: "\u0126", HumpDownHump: "\u224E", HumpEqual: "\u224F", IEcy: "\u0415", IJlig: "\u0132", IOcy: "\u0401", Iacut: "\xCD", Iacute: "\xCD", Icir: "\xCE", Icirc: "\xCE", Icy: "\u0418", Idot: "\u0130", Ifr: "\u2111", Igrav: "\xCC", Igrave: "\xCC", Im: "\u2111", Imacr: "\u012A", ImaginaryI: "\u2148", Implies: "\u21D2", Int: "\u222C", Integral: "\u222B", Intersection: "\u22C2", InvisibleComma: "\u2063", InvisibleTimes: "\u2062", Iogon: "\u012E", Iopf: "\u{1D540}", Iota: "\u0399", Iscr: "\u2110", Itilde: "\u0128", Iukcy: "\u0406", Ium: "\xCF", Iuml: "\xCF", Jcirc: "\u0134", Jcy: "\u0419", Jfr: "\u{1D50D}", Jopf: "\u{1D541}", Jscr: "\u{1D4A5}", Jsercy: "\u0408", Jukcy: "\u0404", KHcy: "\u0425", KJcy: "\u040C", Kappa: "\u039A", Kcedil: "\u0136", Kcy: "\u041A", Kfr: "\u{1D50E}", Kopf: "\u{1D542}", Kscr: "\u{1D4A6}", LJcy: "\u0409", L: "<", LT: "<", Lacute: "\u0139", Lambda: "\u039B", Lang: "\u27EA", Laplacetrf: "\u2112", Larr: "\u219E", Lcaron: "\u013D", Lcedil: "\u013B", Lcy: "\u041B", LeftAngleBracket: "\u27E8", LeftArrow: "\u2190", LeftArrowBar: "\u21E4", LeftArrowRightArrow: "\u21C6", LeftCeiling: "\u2308", LeftDoubleBracket: "\u27E6", LeftDownTeeVector: "\u2961", LeftDownVector: "\u21C3", LeftDownVectorBar: "\u2959", LeftFloor: "\u230A", LeftRightArrow: "\u2194", LeftRightVector: "\u294E", LeftTee: "\u22A3", LeftTeeArrow: "\u21A4", LeftTeeVector: "\u295A", LeftTriangle: "\u22B2", LeftTriangleBar: "\u29CF", LeftTriangleEqual: "\u22B4", LeftUpDownVector: "\u2951", LeftUpTeeVector: "\u2960", LeftUpVector: "\u21BF", LeftUpVectorBar: "\u2958", LeftVector: "\u21BC", LeftVectorBar: "\u2952", Leftarrow: "\u21D0", Leftrightarrow: "\u21D4", LessEqualGreater: "\u22DA", LessFullEqual: "\u2266", LessGreater: "\u2276", LessLess: "\u2AA1", LessSlantEqual: "\u2A7D", LessTilde: "\u2272", Lfr: "\u{1D50F}", Ll: "\u22D8", Lleftarrow: "\u21DA", Lmidot: "\u013F", LongLeftArrow: "\u27F5", LongLeftRightArrow: "\u27F7", LongRightArrow: "\u27F6", Longleftarrow: "\u27F8", Longleftrightarrow: "\u27FA", Longrightarrow: "\u27F9", Lopf: "\u{1D543}", LowerLeftArrow: "\u2199", LowerRightArrow: "\u2198", Lscr: "\u2112", Lsh: "\u21B0", Lstrok: "\u0141", Lt: "\u226A", Map: "\u2905", Mcy: "\u041C", MediumSpace: "\u205F", Mellintrf: "\u2133", Mfr: "\u{1D510}", MinusPlus: "\u2213", Mopf: "\u{1D544}", Mscr: "\u2133", Mu: "\u039C", NJcy: "\u040A", Nacute: "\u0143", Ncaron: "\u0147", Ncedil: "\u0145", Ncy: "\u041D", NegativeMediumSpace: "\u200B", NegativeThickSpace: "\u200B", NegativeThinSpace: "\u200B", NegativeVeryThinSpace: "\u200B", NestedGreaterGreater: "\u226B", NestedLessLess: "\u226A", NewLine: "\n", Nfr: "\u{1D511}", NoBreak: "\u2060", NonBreakingSpace: "\xA0", Nopf: "\u2115", Not: "\u2AEC", NotCongruent: "\u2262", NotCupCap: "\u226D", NotDoubleVerticalBar: "\u2226", NotElement: "\u2209", NotEqual: "\u2260", NotEqualTilde: "\u2242\u0338", NotExists: "\u2204", NotGreater: "\u226F", NotGreaterEqual: "\u2271", NotGreaterFullEqual: "\u2267\u0338", NotGreaterGreater: "\u226B\u0338", NotGreaterLess: "\u2279", NotGreaterSlantEqual: "\u2A7E\u0338", NotGreaterTilde: "\u2275", NotHumpDownHump: "\u224E\u0338", NotHumpEqual: "\u224F\u0338", NotLeftTriangle: "\u22EA", NotLeftTriangleBar: "\u29CF\u0338", NotLeftTriangleEqual: "\u22EC", NotLess: "\u226E", NotLessEqual: "\u2270", NotLessGreater: "\u2278", NotLessLess: "\u226A\u0338", NotLessSlantEqual: "\u2A7D\u0338", NotLessTilde: "\u2274", NotNestedGreaterGreater: "\u2AA2\u0338", NotNestedLessLess: "\u2AA1\u0338", NotPrecedes: "\u2280", NotPrecedesEqual: "\u2AAF\u0338", NotPrecedesSlantEqual: "\u22E0", NotReverseElement: "\u220C", NotRightTriangle: "\u22EB", NotRightTriangleBar: "\u29D0\u0338", NotRightTriangleEqual: "\u22ED", NotSquareSubset: "\u228F\u0338", NotSquareSubsetEqual: "\u22E2", NotSquareSuperset: "\u2290\u0338", NotSquareSupersetEqual: "\u22E3", NotSubset: "\u2282\u20D2", NotSubsetEqual: "\u2288", NotSucceeds: "\u2281", NotSucceedsEqual: "\u2AB0\u0338", NotSucceedsSlantEqual: "\u22E1", NotSucceedsTilde: "\u227F\u0338", NotSuperset: "\u2283\u20D2", NotSupersetEqual: "\u2289", NotTilde: "\u2241", NotTildeEqual: "\u2244", NotTildeFullEqual: "\u2247", NotTildeTilde: "\u2249", NotVerticalBar: "\u2224", Nscr: "\u{1D4A9}", Ntild: "\xD1", Ntilde: "\xD1", Nu: "\u039D", OElig: "\u0152", Oacut: "\xD3", Oacute: "\xD3", Ocir: "\xD4", Ocirc: "\xD4", Ocy: "\u041E", Odblac: "\u0150", Ofr: "\u{1D512}", Ograv: "\xD2", Ograve: "\xD2", Omacr: "\u014C", Omega: "\u03A9", Omicron: "\u039F", Oopf: "\u{1D546}", OpenCurlyDoubleQuote: "\u201C", OpenCurlyQuote: "\u2018", Or: "\u2A54", Oscr: "\u{1D4AA}", Oslas: "\xD8", Oslash: "\xD8", Otild: "\xD5", Otilde: "\xD5", Otimes: "\u2A37", Oum: "\xD6", Ouml: "\xD6", OverBar: "\u203E", OverBrace: "\u23DE", OverBracket: "\u23B4", OverParenthesis: "\u23DC", PartialD: "\u2202", Pcy: "\u041F", Pfr: "\u{1D513}", Phi: "\u03A6", Pi: "\u03A0", PlusMinus: "\xB1", Poincareplane: "\u210C", Popf: "\u2119", Pr: "\u2ABB", Precedes: "\u227A", PrecedesEqual: "\u2AAF", PrecedesSlantEqual: "\u227C", PrecedesTilde: "\u227E", Prime: "\u2033", Product: "\u220F", Proportion: "\u2237", Proportional: "\u221D", Pscr: "\u{1D4AB}", Psi: "\u03A8", QUO: '"', QUOT: '"', Qfr: "\u{1D514}", Qopf: "\u211A", Qscr: "\u{1D4AC}", RBarr: "\u2910", RE: "\xAE", REG: "\xAE", Racute: "\u0154", Rang: "\u27EB", Rarr: "\u21A0", Rarrtl: "\u2916", Rcaron: "\u0158", Rcedil: "\u0156", Rcy: "\u0420", Re: "\u211C", ReverseElement: "\u220B", ReverseEquilibrium: "\u21CB", ReverseUpEquilibrium: "\u296F", Rfr: "\u211C", Rho: "\u03A1", RightAngleBracket: "\u27E9", RightArrow: "\u2192", RightArrowBar: "\u21E5", RightArrowLeftArrow: "\u21C4", RightCeiling: "\u2309", RightDoubleBracket: "\u27E7", RightDownTeeVector: "\u295D", RightDownVector: "\u21C2", RightDownVectorBar: "\u2955", RightFloor: "\u230B", RightTee: "\u22A2", RightTeeArrow: "\u21A6", RightTeeVector: "\u295B", RightTriangle: "\u22B3", RightTriangleBar: "\u29D0", RightTriangleEqual: "\u22B5", RightUpDownVector: "\u294F", RightUpTeeVector: "\u295C", RightUpVector: "\u21BE", RightUpVectorBar: "\u2954", RightVector: "\u21C0", RightVectorBar: "\u2953", Rightarrow: "\u21D2", Ropf: "\u211D", RoundImplies: "\u2970", Rrightarrow: "\u21DB", Rscr: "\u211B", Rsh: "\u21B1", RuleDelayed: "\u29F4", SHCHcy: "\u0429", SHcy: "\u0428", SOFTcy: "\u042C", Sacute: "\u015A", Sc: "\u2ABC", Scaron: "\u0160", Scedil: "\u015E", Scirc: "\u015C", Scy: "\u0421", Sfr: "\u{1D516}", ShortDownArrow: "\u2193", ShortLeftArrow: "\u2190", ShortRightArrow: "\u2192", ShortUpArrow: "\u2191", Sigma: "\u03A3", SmallCircle: "\u2218", Sopf: "\u{1D54A}", Sqrt: "\u221A", Square: "\u25A1", SquareIntersection: "\u2293", SquareSubset: "\u228F", SquareSubsetEqual: "\u2291", SquareSuperset: "\u2290", SquareSupersetEqual: "\u2292", SquareUnion: "\u2294", Sscr: "\u{1D4AE}", Star: "\u22C6", Sub: "\u22D0", Subset: "\u22D0", SubsetEqual: "\u2286", Succeeds: "\u227B", SucceedsEqual: "\u2AB0", SucceedsSlantEqual: "\u227D", SucceedsTilde: "\u227F", SuchThat: "\u220B", Sum: "\u2211", Sup: "\u22D1", Superset: "\u2283", SupersetEqual: "\u2287", Supset: "\u22D1", THOR: "\xDE", THORN: "\xDE", TRADE: "\u2122", TSHcy: "\u040B", TScy: "\u0426", Tab: " ", Tau: "\u03A4", Tcaron: "\u0164", Tcedil: "\u0162", Tcy: "\u0422", Tfr: "\u{1D517}", Therefore: "\u2234", Theta: "\u0398", ThickSpace: "\u205F\u200A", ThinSpace: "\u2009", Tilde: "\u223C", TildeEqual: "\u2243", TildeFullEqual: "\u2245", TildeTilde: "\u2248", Topf: "\u{1D54B}", TripleDot: "\u20DB", Tscr: "\u{1D4AF}", Tstrok: "\u0166", Uacut: "\xDA", Uacute: "\xDA", Uarr: "\u219F", Uarrocir: "\u2949", Ubrcy: "\u040E", Ubreve: "\u016C", Ucir: "\xDB", Ucirc: "\xDB", Ucy: "\u0423", Udblac: "\u0170", Ufr: "\u{1D518}", Ugrav: "\xD9", Ugrave: "\xD9", Umacr: "\u016A", UnderBar: "_", UnderBrace: "\u23DF", UnderBracket: "\u23B5", UnderParenthesis: "\u23DD", Union: "\u22C3", UnionPlus: "\u228E", Uogon: "\u0172", Uopf: "\u{1D54C}", UpArrow: "\u2191", UpArrowBar: "\u2912", UpArrowDownArrow: "\u21C5", UpDownArrow: "\u2195", UpEquilibrium: "\u296E", UpTee: "\u22A5", UpTeeArrow: "\u21A5", Uparrow: "\u21D1", Updownarrow: "\u21D5", UpperLeftArrow: "\u2196", UpperRightArrow: "\u2197", Upsi: "\u03D2", Upsilon: "\u03A5", Uring: "\u016E", Uscr: "\u{1D4B0}", Utilde: "\u0168", Uum: "\xDC", Uuml: "\xDC", VDash: "\u22AB", Vbar: "\u2AEB", Vcy: "\u0412", Vdash: "\u22A9", Vdashl: "\u2AE6", Vee: "\u22C1", Verbar: "\u2016", Vert: "\u2016", VerticalBar: "\u2223", VerticalLine: "|", VerticalSeparator: "\u2758", VerticalTilde: "\u2240", VeryThinSpace: "\u200A", Vfr: "\u{1D519}", Vopf: "\u{1D54D}", Vscr: "\u{1D4B1}", Vvdash: "\u22AA", Wcirc: "\u0174", Wedge: "\u22C0", Wfr: "\u{1D51A}", Wopf: "\u{1D54E}", Wscr: "\u{1D4B2}", Xfr: "\u{1D51B}", Xi: "\u039E", Xopf: "\u{1D54F}", Xscr: "\u{1D4B3}", YAcy: "\u042F", YIcy: "\u0407", YUcy: "\u042E", Yacut: "\xDD", Yacute: "\xDD", Ycirc: "\u0176", Ycy: "\u042B", Yfr: "\u{1D51C}", Yopf: "\u{1D550}", Yscr: "\u{1D4B4}", Yuml: "\u0178", ZHcy: "\u0416", Zacute: "\u0179", Zcaron: "\u017D", Zcy: "\u0417", Zdot: "\u017B", ZeroWidthSpace: "\u200B", Zeta: "\u0396", Zfr: "\u2128", Zopf: "\u2124", Zscr: "\u{1D4B5}", aacut: "\xE1", aacute: "\xE1", abreve: "\u0103", ac: "\u223E", acE: "\u223E\u0333", acd: "\u223F", acir: "\xE2", acirc: "\xE2", acut: "\xB4", acute: "\xB4", acy: "\u0430", aeli: "\xE6", aelig: "\xE6", af: "\u2061", afr: "\u{1D51E}", agrav: "\xE0", agrave: "\xE0", alefsym: "\u2135", aleph: "\u2135", alpha: "\u03B1", amacr: "\u0101", amalg: "\u2A3F", am: "&", amp: "&", and: "\u2227", andand: "\u2A55", andd: "\u2A5C", andslope: "\u2A58", andv: "\u2A5A", ang: "\u2220", ange: "\u29A4", angle: "\u2220", angmsd: "\u2221", angmsdaa: "\u29A8", angmsdab: "\u29A9", angmsdac: "\u29AA", angmsdad: "\u29AB", angmsdae: "\u29AC", angmsdaf: "\u29AD", angmsdag: "\u29AE", angmsdah: "\u29AF", angrt: "\u221F", angrtvb: "\u22BE", angrtvbd: "\u299D", angsph: "\u2222", angst: "\xC5", angzarr: "\u237C", aogon: "\u0105", aopf: "\u{1D552}", ap: "\u2248", apE: "\u2A70", apacir: "\u2A6F", ape: "\u224A", apid: "\u224B", apos: "'", approx: "\u2248", approxeq: "\u224A", arin: "\xE5", aring: "\xE5", ascr: "\u{1D4B6}", ast: "*", asymp: "\u2248", asympeq: "\u224D", atild: "\xE3", atilde: "\xE3", aum: "\xE4", auml: "\xE4", awconint: "\u2233", awint: "\u2A11", bNot: "\u2AED", backcong: "\u224C", backepsilon: "\u03F6", backprime: "\u2035", backsim: "\u223D", backsimeq: "\u22CD", barvee: "\u22BD", barwed: "\u2305", barwedge: "\u2305", bbrk: "\u23B5", bbrktbrk: "\u23B6", bcong: "\u224C", bcy: "\u0431", bdquo: "\u201E", becaus: "\u2235", because: "\u2235", bemptyv: "\u29B0", bepsi: "\u03F6", bernou: "\u212C", beta: "\u03B2", beth: "\u2136", between: "\u226C", bfr: "\u{1D51F}", bigcap: "\u22C2", bigcirc: "\u25EF", bigcup: "\u22C3", bigodot: "\u2A00", bigoplus: "\u2A01", bigotimes: "\u2A02", bigsqcup: "\u2A06", bigstar: "\u2605", bigtriangledown: "\u25BD", bigtriangleup: "\u25B3", biguplus: "\u2A04", bigvee: "\u22C1", bigwedge: "\u22C0", bkarow: "\u290D", blacklozenge: "\u29EB", blacksquare: "\u25AA", blacktriangle: "\u25B4", blacktriangledown: "\u25BE", blacktriangleleft: "\u25C2", blacktriangleright: "\u25B8", blank: "\u2423", blk12: "\u2592", blk14: "\u2591", blk34: "\u2593", block: "\u2588", bne: "=\u20E5", bnequiv: "\u2261\u20E5", bnot: "\u2310", bopf: "\u{1D553}", bot: "\u22A5", bottom: "\u22A5", bowtie: "\u22C8", boxDL: "\u2557", boxDR: "\u2554", boxDl: "\u2556", boxDr: "\u2553", boxH: "\u2550", boxHD: "\u2566", boxHU: "\u2569", boxHd: "\u2564", boxHu: "\u2567", boxUL: "\u255D", boxUR: "\u255A", boxUl: "\u255C", boxUr: "\u2559", boxV: "\u2551", boxVH: "\u256C", boxVL: "\u2563", boxVR: "\u2560", boxVh: "\u256B", boxVl: "\u2562", boxVr: "\u255F", boxbox: "\u29C9", boxdL: "\u2555", boxdR: "\u2552", boxdl: "\u2510", boxdr: "\u250C", boxh: "\u2500", boxhD: "\u2565", boxhU: "\u2568", boxhd: "\u252C", boxhu: "\u2534", boxminus: "\u229F", boxplus: "\u229E", boxtimes: "\u22A0", boxuL: "\u255B", boxuR: "\u2558", boxul: "\u2518", boxur: "\u2514", boxv: "\u2502", boxvH: "\u256A", boxvL: "\u2561", boxvR: "\u255E", boxvh: "\u253C", boxvl: "\u2524", boxvr: "\u251C", bprime: "\u2035", breve: "\u02D8", brvba: "\xA6", brvbar: "\xA6", bscr: "\u{1D4B7}", bsemi: "\u204F", bsim: "\u223D", bsime: "\u22CD", bsol: "\\", bsolb: "\u29C5", bsolhsub: "\u27C8", bull: "\u2022", bullet: "\u2022", bump: "\u224E", bumpE: "\u2AAE", bumpe: "\u224F", bumpeq: "\u224F", cacute: "\u0107", cap: "\u2229", capand: "\u2A44", capbrcup: "\u2A49", capcap: "\u2A4B", capcup: "\u2A47", capdot: "\u2A40", caps: "\u2229\uFE00", caret: "\u2041", caron: "\u02C7", ccaps: "\u2A4D", ccaron: "\u010D", ccedi: "\xE7", ccedil: "\xE7", ccirc: "\u0109", ccups: "\u2A4C", ccupssm: "\u2A50", cdot: "\u010B", cedi: "\xB8", cedil: "\xB8", cemptyv: "\u29B2", cen: "\xA2", cent: "\xA2", centerdot: "\xB7", cfr: "\u{1D520}", chcy: "\u0447", check: "\u2713", checkmark: "\u2713", chi: "\u03C7", cir: "\u25CB", cirE: "\u29C3", circ: "\u02C6", circeq: "\u2257", circlearrowleft: "\u21BA", circlearrowright: "\u21BB", circledR: "\xAE", circledS: "\u24C8", circledast: "\u229B", circledcirc: "\u229A", circleddash: "\u229D", cire: "\u2257", cirfnint: "\u2A10", cirmid: "\u2AEF", cirscir: "\u29C2", clubs: "\u2663", clubsuit: "\u2663", colon: ":", colone: "\u2254", coloneq: "\u2254", comma: ",", commat: "@", comp: "\u2201", compfn: "\u2218", complement: "\u2201", complexes: "\u2102", cong: "\u2245", congdot: "\u2A6D", conint: "\u222E", copf: "\u{1D554}", coprod: "\u2210", cop: "\xA9", copy: "\xA9", copysr: "\u2117", crarr: "\u21B5", cross: "\u2717", cscr: "\u{1D4B8}", csub: "\u2ACF", csube: "\u2AD1", csup: "\u2AD0", csupe: "\u2AD2", ctdot: "\u22EF", cudarrl: "\u2938", cudarrr: "\u2935", cuepr: "\u22DE", cuesc: "\u22DF", cularr: "\u21B6", cularrp: "\u293D", cup: "\u222A", cupbrcap: "\u2A48", cupcap: "\u2A46", cupcup: "\u2A4A", cupdot: "\u228D", cupor: "\u2A45", cups: "\u222A\uFE00", curarr: "\u21B7", curarrm: "\u293C", curlyeqprec: "\u22DE", curlyeqsucc: "\u22DF", curlyvee: "\u22CE", curlywedge: "\u22CF", curre: "\xA4", curren: "\xA4", curvearrowleft: "\u21B6", curvearrowright: "\u21B7", cuvee: "\u22CE", cuwed: "\u22CF", cwconint: "\u2232", cwint: "\u2231", cylcty: "\u232D", dArr: "\u21D3", dHar: "\u2965", dagger: "\u2020", daleth: "\u2138", darr: "\u2193", dash: "\u2010", dashv: "\u22A3", dbkarow: "\u290F", dblac: "\u02DD", dcaron: "\u010F", dcy: "\u0434", dd: "\u2146", ddagger: "\u2021", ddarr: "\u21CA", ddotseq: "\u2A77", de: "\xB0", deg: "\xB0", delta: "\u03B4", demptyv: "\u29B1", dfisht: "\u297F", dfr: "\u{1D521}", dharl: "\u21C3", dharr: "\u21C2", diam: "\u22C4", diamond: "\u22C4", diamondsuit: "\u2666", diams: "\u2666", die: "\xA8", digamma: "\u03DD", disin: "\u22F2", div: "\xF7", divid: "\xF7", divide: "\xF7", divideontimes: "\u22C7", divonx: "\u22C7", djcy: "\u0452", dlcorn: "\u231E", dlcrop: "\u230D", dollar: "$", dopf: "\u{1D555}", dot: "\u02D9", doteq: "\u2250", doteqdot: "\u2251", dotminus: "\u2238", dotplus: "\u2214", dotsquare: "\u22A1", doublebarwedge: "\u2306", downarrow: "\u2193", downdownarrows: "\u21CA", downharpoonleft: "\u21C3", downharpoonright: "\u21C2", drbkarow: "\u2910", drcorn: "\u231F", drcrop: "\u230C", dscr: "\u{1D4B9}", dscy: "\u0455", dsol: "\u29F6", dstrok: "\u0111", dtdot: "\u22F1", dtri: "\u25BF", dtrif: "\u25BE", duarr: "\u21F5", duhar: "\u296F", dwangle: "\u29A6", dzcy: "\u045F", dzigrarr: "\u27FF", eDDot: "\u2A77", eDot: "\u2251", eacut: "\xE9", eacute: "\xE9", easter: "\u2A6E", ecaron: "\u011B", ecir: "\xEA", ecirc: "\xEA", ecolon: "\u2255", ecy: "\u044D", edot: "\u0117", ee: "\u2147", efDot: "\u2252", efr: "\u{1D522}", eg: "\u2A9A", egrav: "\xE8", egrave: "\xE8", egs: "\u2A96", egsdot: "\u2A98", el: "\u2A99", elinters: "\u23E7", ell: "\u2113", els: "\u2A95", elsdot: "\u2A97", emacr: "\u0113", empty: "\u2205", emptyset: "\u2205", emptyv: "\u2205", emsp13: "\u2004", emsp14: "\u2005", emsp: "\u2003", eng: "\u014B", ensp: "\u2002", eogon: "\u0119", eopf: "\u{1D556}", epar: "\u22D5", eparsl: "\u29E3", eplus: "\u2A71", epsi: "\u03B5", epsilon: "\u03B5", epsiv: "\u03F5", eqcirc: "\u2256", eqcolon: "\u2255", eqsim: "\u2242", eqslantgtr: "\u2A96", eqslantless: "\u2A95", equals: "=", equest: "\u225F", equiv: "\u2261", equivDD: "\u2A78", eqvparsl: "\u29E5", erDot: "\u2253", erarr: "\u2971", escr: "\u212F", esdot: "\u2250", esim: "\u2242", eta: "\u03B7", et: "\xF0", eth: "\xF0", eum: "\xEB", euml: "\xEB", euro: "\u20AC", excl: "!", exist: "\u2203", expectation: "\u2130", exponentiale: "\u2147", fallingdotseq: "\u2252", fcy: "\u0444", female: "\u2640", ffilig: "\uFB03", fflig: "\uFB00", ffllig: "\uFB04", ffr: "\u{1D523}", filig: "\uFB01", fjlig: "fj", flat: "\u266D", fllig: "\uFB02", fltns: "\u25B1", fnof: "\u0192", fopf: "\u{1D557}", forall: "\u2200", fork: "\u22D4", forkv: "\u2AD9", fpartint: "\u2A0D", frac1: "\xBC", frac12: "\xBD", frac13: "\u2153", frac14: "\xBC", frac15: "\u2155", frac16: "\u2159", frac18: "\u215B", frac23: "\u2154", frac25: "\u2156", frac3: "\xBE", frac34: "\xBE", frac35: "\u2157", frac38: "\u215C", frac45: "\u2158", frac56: "\u215A", frac58: "\u215D", frac78: "\u215E", frasl: "\u2044", frown: "\u2322", fscr: "\u{1D4BB}", gE: "\u2267", gEl: "\u2A8C", gacute: "\u01F5", gamma: "\u03B3", gammad: "\u03DD", gap: "\u2A86", gbreve: "\u011F", gcirc: "\u011D", gcy: "\u0433", gdot: "\u0121", ge: "\u2265", gel: "\u22DB", geq: "\u2265", geqq: "\u2267", geqslant: "\u2A7E", ges: "\u2A7E", gescc: "\u2AA9", gesdot: "\u2A80", gesdoto: "\u2A82", gesdotol: "\u2A84", gesl: "\u22DB\uFE00", gesles: "\u2A94", gfr: "\u{1D524}", gg: "\u226B", ggg: "\u22D9", gimel: "\u2137", gjcy: "\u0453", gl: "\u2277", glE: "\u2A92", gla: "\u2AA5", glj: "\u2AA4", gnE: "\u2269", gnap: "\u2A8A", gnapprox: "\u2A8A", gne: "\u2A88", gneq: "\u2A88", gneqq: "\u2269", gnsim: "\u22E7", gopf: "\u{1D558}", grave: "`", gscr: "\u210A", gsim: "\u2273", gsime: "\u2A8E", gsiml: "\u2A90", g: ">", gt: ">", gtcc: "\u2AA7", gtcir: "\u2A7A", gtdot: "\u22D7", gtlPar: "\u2995", gtquest: "\u2A7C", gtrapprox: "\u2A86", gtrarr: "\u2978", gtrdot: "\u22D7", gtreqless: "\u22DB", gtreqqless: "\u2A8C", gtrless: "\u2277", gtrsim: "\u2273", gvertneqq: "\u2269\uFE00", gvnE: "\u2269\uFE00", hArr: "\u21D4", hairsp: "\u200A", half: "\xBD", hamilt: "\u210B", hardcy: "\u044A", harr: "\u2194", harrcir: "\u2948", harrw: "\u21AD", hbar: "\u210F", hcirc: "\u0125", hearts: "\u2665", heartsuit: "\u2665", hellip: "\u2026", hercon: "\u22B9", hfr: "\u{1D525}", hksearow: "\u2925", hkswarow: "\u2926", hoarr: "\u21FF", homtht: "\u223B", hookleftarrow: "\u21A9", hookrightarrow: "\u21AA", hopf: "\u{1D559}", horbar: "\u2015", hscr: "\u{1D4BD}", hslash: "\u210F", hstrok: "\u0127", hybull: "\u2043", hyphen: "\u2010", iacut: "\xED", iacute: "\xED", ic: "\u2063", icir: "\xEE", icirc: "\xEE", icy: "\u0438", iecy: "\u0435", iexc: "\xA1", iexcl: "\xA1", iff: "\u21D4", ifr: "\u{1D526}", igrav: "\xEC", igrave: "\xEC", ii: "\u2148", iiiint: "\u2A0C", iiint: "\u222D", iinfin: "\u29DC", iiota: "\u2129", ijlig: "\u0133", imacr: "\u012B", image: "\u2111", imagline: "\u2110", imagpart: "\u2111", imath: "\u0131", imof: "\u22B7", imped: "\u01B5", in: "\u2208", incare: "\u2105", infin: "\u221E", infintie: "\u29DD", inodot: "\u0131", int: "\u222B", intcal: "\u22BA", integers: "\u2124", intercal: "\u22BA", intlarhk: "\u2A17", intprod: "\u2A3C", iocy: "\u0451", iogon: "\u012F", iopf: "\u{1D55A}", iota: "\u03B9", iprod: "\u2A3C", iques: "\xBF", iquest: "\xBF", iscr: "\u{1D4BE}", isin: "\u2208", isinE: "\u22F9", isindot: "\u22F5", isins: "\u22F4", isinsv: "\u22F3", isinv: "\u2208", it: "\u2062", itilde: "\u0129", iukcy: "\u0456", ium: "\xEF", iuml: "\xEF", jcirc: "\u0135", jcy: "\u0439", jfr: "\u{1D527}", jmath: "\u0237", jopf: "\u{1D55B}", jscr: "\u{1D4BF}", jsercy: "\u0458", jukcy: "\u0454", kappa: "\u03BA", kappav: "\u03F0", kcedil: "\u0137", kcy: "\u043A", kfr: "\u{1D528}", kgreen: "\u0138", khcy: "\u0445", kjcy: "\u045C", kopf: "\u{1D55C}", kscr: "\u{1D4C0}", lAarr: "\u21DA", lArr: "\u21D0", lAtail: "\u291B", lBarr: "\u290E", lE: "\u2266", lEg: "\u2A8B", lHar: "\u2962", lacute: "\u013A", laemptyv: "\u29B4", lagran: "\u2112", lambda: "\u03BB", lang: "\u27E8", langd: "\u2991", langle: "\u27E8", lap: "\u2A85", laqu: "\xAB", laquo: "\xAB", larr: "\u2190", larrb: "\u21E4", larrbfs: "\u291F", larrfs: "\u291D", larrhk: "\u21A9", larrlp: "\u21AB", larrpl: "\u2939", larrsim: "\u2973", larrtl: "\u21A2", lat: "\u2AAB", latail: "\u2919", late: "\u2AAD", lates: "\u2AAD\uFE00", lbarr: "\u290C", lbbrk: "\u2772", lbrace: "{", lbrack: "[", lbrke: "\u298B", lbrksld: "\u298F", lbrkslu: "\u298D", lcaron: "\u013E", lcedil: "\u013C", lceil: "\u2308", lcub: "{", lcy: "\u043B", ldca: "\u2936", ldquo: "\u201C", ldquor: "\u201E", ldrdhar: "\u2967", ldrushar: "\u294B", ldsh: "\u21B2", le: "\u2264", leftarrow: "\u2190", leftarrowtail: "\u21A2", leftharpoondown: "\u21BD", leftharpoonup: "\u21BC", leftleftarrows: "\u21C7", leftrightarrow: "\u2194", leftrightarrows: "\u21C6", leftrightharpoons: "\u21CB", leftrightsquigarrow: "\u21AD", leftthreetimes: "\u22CB", leg: "\u22DA", leq: "\u2264", leqq: "\u2266", leqslant: "\u2A7D", les: "\u2A7D", lescc: "\u2AA8", lesdot: "\u2A7F", lesdoto: "\u2A81", lesdotor: "\u2A83", lesg: "\u22DA\uFE00", lesges: "\u2A93", lessapprox: "\u2A85", lessdot: "\u22D6", lesseqgtr: "\u22DA", lesseqqgtr: "\u2A8B", lessgtr: "\u2276", lesssim: "\u2272", lfisht: "\u297C", lfloor: "\u230A", lfr: "\u{1D529}", lg: "\u2276", lgE: "\u2A91", lhard: "\u21BD", lharu: "\u21BC", lharul: "\u296A", lhblk: "\u2584", ljcy: "\u0459", ll: "\u226A", llarr: "\u21C7", llcorner: "\u231E", llhard: "\u296B", lltri: "\u25FA", lmidot: "\u0140", lmoust: "\u23B0", lmoustache: "\u23B0", lnE: "\u2268", lnap: "\u2A89", lnapprox: "\u2A89", lne: "\u2A87", lneq: "\u2A87", lneqq: "\u2268", lnsim: "\u22E6", loang: "\u27EC", loarr: "\u21FD", lobrk: "\u27E6", longleftarrow: "\u27F5", longleftrightarrow: "\u27F7", longmapsto: "\u27FC", longrightarrow: "\u27F6", looparrowleft: "\u21AB", looparrowright: "\u21AC", lopar: "\u2985", lopf: "\u{1D55D}", loplus: "\u2A2D", lotimes: "\u2A34", lowast: "\u2217", lowbar: "_", loz: "\u25CA", lozenge: "\u25CA", lozf: "\u29EB", lpar: "(", lparlt: "\u2993", lrarr: "\u21C6", lrcorner: "\u231F", lrhar: "\u21CB", lrhard: "\u296D", lrm: "\u200E", lrtri: "\u22BF", lsaquo: "\u2039", lscr: "\u{1D4C1}", lsh: "\u21B0", lsim: "\u2272", lsime: "\u2A8D", lsimg: "\u2A8F", lsqb: "[", lsquo: "\u2018", lsquor: "\u201A", lstrok: "\u0142", l: "<", lt: "<", ltcc: "\u2AA6", ltcir: "\u2A79", ltdot: "\u22D6", lthree: "\u22CB", ltimes: "\u22C9", ltlarr: "\u2976", ltquest: "\u2A7B", ltrPar: "\u2996", ltri: "\u25C3", ltrie: "\u22B4", ltrif: "\u25C2", lurdshar: "\u294A", luruhar: "\u2966", lvertneqq: "\u2268\uFE00", lvnE: "\u2268\uFE00", mDDot: "\u223A", mac: "\xAF", macr: "\xAF", male: "\u2642", malt: "\u2720", maltese: "\u2720", map: "\u21A6", mapsto: "\u21A6", mapstodown: "\u21A7", mapstoleft: "\u21A4", mapstoup: "\u21A5", marker: "\u25AE", mcomma: "\u2A29", mcy: "\u043C", mdash: "\u2014", measuredangle: "\u2221", mfr: "\u{1D52A}", mho: "\u2127", micr: "\xB5", micro: "\xB5", mid: "\u2223", midast: "*", midcir: "\u2AF0", middo: "\xB7", middot: "\xB7", minus: "\u2212", minusb: "\u229F", minusd: "\u2238", minusdu: "\u2A2A", mlcp: "\u2ADB", mldr: "\u2026", mnplus: "\u2213", models: "\u22A7", mopf: "\u{1D55E}", mp: "\u2213", mscr: "\u{1D4C2}", mstpos: "\u223E", mu: "\u03BC", multimap: "\u22B8", mumap: "\u22B8", nGg: "\u22D9\u0338", nGt: "\u226B\u20D2", nGtv: "\u226B\u0338", nLeftarrow: "\u21CD", nLeftrightarrow: "\u21CE", nLl: "\u22D8\u0338", nLt: "\u226A\u20D2", nLtv: "\u226A\u0338", nRightarrow: "\u21CF", nVDash: "\u22AF", nVdash: "\u22AE", nabla: "\u2207", nacute: "\u0144", nang: "\u2220\u20D2", nap: "\u2249", napE: "\u2A70\u0338", napid: "\u224B\u0338", napos: "\u0149", napprox: "\u2249", natur: "\u266E", natural: "\u266E", naturals: "\u2115", nbs: "\xA0", nbsp: "\xA0", nbump: "\u224E\u0338", nbumpe: "\u224F\u0338", ncap: "\u2A43", ncaron: "\u0148", ncedil: "\u0146", ncong: "\u2247", ncongdot: "\u2A6D\u0338", ncup: "\u2A42", ncy: "\u043D", ndash: "\u2013", ne: "\u2260", neArr: "\u21D7", nearhk: "\u2924", nearr: "\u2197", nearrow: "\u2197", nedot: "\u2250\u0338", nequiv: "\u2262", nesear: "\u2928", nesim: "\u2242\u0338", nexist: "\u2204", nexists: "\u2204", nfr: "\u{1D52B}", ngE: "\u2267\u0338", nge: "\u2271", ngeq: "\u2271", ngeqq: "\u2267\u0338", ngeqslant: "\u2A7E\u0338", nges: "\u2A7E\u0338", ngsim: "\u2275", ngt: "\u226F", ngtr: "\u226F", nhArr: "\u21CE", nharr: "\u21AE", nhpar: "\u2AF2", ni: "\u220B", nis: "\u22FC", nisd: "\u22FA", niv: "\u220B", njcy: "\u045A", nlArr: "\u21CD", nlE: "\u2266\u0338", nlarr: "\u219A", nldr: "\u2025", nle: "\u2270", nleftarrow: "\u219A", nleftrightarrow: "\u21AE", nleq: "\u2270", nleqq: "\u2266\u0338", nleqslant: "\u2A7D\u0338", nles: "\u2A7D\u0338", nless: "\u226E", nlsim: "\u2274", nlt: "\u226E", nltri: "\u22EA", nltrie: "\u22EC", nmid: "\u2224", nopf: "\u{1D55F}", no: "\xAC", not: "\xAC", notin: "\u2209", notinE: "\u22F9\u0338", notindot: "\u22F5\u0338", notinva: "\u2209", notinvb: "\u22F7", notinvc: "\u22F6", notni: "\u220C", notniva: "\u220C", notnivb: "\u22FE", notnivc: "\u22FD", npar: "\u2226", nparallel: "\u2226", nparsl: "\u2AFD\u20E5", npart: "\u2202\u0338", npolint: "\u2A14", npr: "\u2280", nprcue: "\u22E0", npre: "\u2AAF\u0338", nprec: "\u2280", npreceq: "\u2AAF\u0338", nrArr: "\u21CF", nrarr: "\u219B", nrarrc: "\u2933\u0338", nrarrw: "\u219D\u0338", nrightarrow: "\u219B", nrtri: "\u22EB", nrtrie: "\u22ED", nsc: "\u2281", nsccue: "\u22E1", nsce: "\u2AB0\u0338", nscr: "\u{1D4C3}", nshortmid: "\u2224", nshortparallel: "\u2226", nsim: "\u2241", nsime: "\u2244", nsimeq: "\u2244", nsmid: "\u2224", nspar: "\u2226", nsqsube: "\u22E2", nsqsupe: "\u22E3", nsub: "\u2284", nsubE: "\u2AC5\u0338", nsube: "\u2288", nsubset: "\u2282\u20D2", nsubseteq: "\u2288", nsubseteqq: "\u2AC5\u0338", nsucc: "\u2281", nsucceq: "\u2AB0\u0338", nsup: "\u2285", nsupE: "\u2AC6\u0338", nsupe: "\u2289", nsupset: "\u2283\u20D2", nsupseteq: "\u2289", nsupseteqq: "\u2AC6\u0338", ntgl: "\u2279", ntild: "\xF1", ntilde: "\xF1", ntlg: "\u2278", ntriangleleft: "\u22EA", ntrianglelefteq: "\u22EC", ntriangleright: "\u22EB", ntrianglerighteq: "\u22ED", nu: "\u03BD", num: "#", numero: "\u2116", numsp: "\u2007", nvDash: "\u22AD", nvHarr: "\u2904", nvap: "\u224D\u20D2", nvdash: "\u22AC", nvge: "\u2265\u20D2", nvgt: ">\u20D2", nvinfin: "\u29DE", nvlArr: "\u2902", nvle: "\u2264\u20D2", nvlt: "<\u20D2", nvltrie: "\u22B4\u20D2", nvrArr: "\u2903", nvrtrie: "\u22B5\u20D2", nvsim: "\u223C\u20D2", nwArr: "\u21D6", nwarhk: "\u2923", nwarr: "\u2196", nwarrow: "\u2196", nwnear: "\u2927", oS: "\u24C8", oacut: "\xF3", oacute: "\xF3", oast: "\u229B", ocir: "\xF4", ocirc: "\xF4", ocy: "\u043E", odash: "\u229D", odblac: "\u0151", odiv: "\u2A38", odot: "\u2299", odsold: "\u29BC", oelig: "\u0153", ofcir: "\u29BF", ofr: "\u{1D52C}", ogon: "\u02DB", ograv: "\xF2", ograve: "\xF2", ogt: "\u29C1", ohbar: "\u29B5", ohm: "\u03A9", oint: "\u222E", olarr: "\u21BA", olcir: "\u29BE", olcross: "\u29BB", oline: "\u203E", olt: "\u29C0", omacr: "\u014D", omega: "\u03C9", omicron: "\u03BF", omid: "\u29B6", ominus: "\u2296", oopf: "\u{1D560}", opar: "\u29B7", operp: "\u29B9", oplus: "\u2295", or: "\u2228", orarr: "\u21BB", ord: "\xBA", order: "\u2134", orderof: "\u2134", ordf: "\xAA", ordm: "\xBA", origof: "\u22B6", oror: "\u2A56", orslope: "\u2A57", orv: "\u2A5B", oscr: "\u2134", oslas: "\xF8", oslash: "\xF8", osol: "\u2298", otild: "\xF5", otilde: "\xF5", otimes: "\u2297", otimesas: "\u2A36", oum: "\xF6", ouml: "\xF6", ovbar: "\u233D", par: "\xB6", para: "\xB6", parallel: "\u2225", parsim: "\u2AF3", parsl: "\u2AFD", part: "\u2202", pcy: "\u043F", percnt: "%", period: ".", permil: "\u2030", perp: "\u22A5", pertenk: "\u2031", pfr: "\u{1D52D}", phi: "\u03C6", phiv: "\u03D5", phmmat: "\u2133", phone: "\u260E", pi: "\u03C0", pitchfork: "\u22D4", piv: "\u03D6", planck: "\u210F", planckh: "\u210E", plankv: "\u210F", plus: "+", plusacir: "\u2A23", plusb: "\u229E", pluscir: "\u2A22", plusdo: "\u2214", plusdu: "\u2A25", pluse: "\u2A72", plusm: "\xB1", plusmn: "\xB1", plussim: "\u2A26", plustwo: "\u2A27", pm: "\xB1", pointint: "\u2A15", popf: "\u{1D561}", poun: "\xA3", pound: "\xA3", pr: "\u227A", prE: "\u2AB3", prap: "\u2AB7", prcue: "\u227C", pre: "\u2AAF", prec: "\u227A", precapprox: "\u2AB7", preccurlyeq: "\u227C", preceq: "\u2AAF", precnapprox: "\u2AB9", precneqq: "\u2AB5", precnsim: "\u22E8", precsim: "\u227E", prime: "\u2032", primes: "\u2119", prnE: "\u2AB5", prnap: "\u2AB9", prnsim: "\u22E8", prod: "\u220F", profalar: "\u232E", profline: "\u2312", profsurf: "\u2313", prop: "\u221D", propto: "\u221D", prsim: "\u227E", prurel: "\u22B0", pscr: "\u{1D4C5}", psi: "\u03C8", puncsp: "\u2008", qfr: "\u{1D52E}", qint: "\u2A0C", qopf: "\u{1D562}", qprime: "\u2057", qscr: "\u{1D4C6}", quaternions: "\u210D", quatint: "\u2A16", quest: "?", questeq: "\u225F", quo: '"', quot: '"', rAarr: "\u21DB", rArr: "\u21D2", rAtail: "\u291C", rBarr: "\u290F", rHar: "\u2964", race: "\u223D\u0331", racute: "\u0155", radic: "\u221A", raemptyv: "\u29B3", rang: "\u27E9", rangd: "\u2992", range: "\u29A5", rangle: "\u27E9", raqu: "\xBB", raquo: "\xBB", rarr: "\u2192", rarrap: "\u2975", rarrb: "\u21E5", rarrbfs: "\u2920", rarrc: "\u2933", rarrfs: "\u291E", rarrhk: "\u21AA", rarrlp: "\u21AC", rarrpl: "\u2945", rarrsim: "\u2974", rarrtl: "\u21A3", rarrw: "\u219D", ratail: "\u291A", ratio: "\u2236", rationals: "\u211A", rbarr: "\u290D", rbbrk: "\u2773", rbrace: "}", rbrack: "]", rbrke: "\u298C", rbrksld: "\u298E", rbrkslu: "\u2990", rcaron: "\u0159", rcedil: "\u0157", rceil: "\u2309", rcub: "}", rcy: "\u0440", rdca: "\u2937", rdldhar: "\u2969", rdquo: "\u201D", rdquor: "\u201D", rdsh: "\u21B3", real: "\u211C", realine: "\u211B", realpart: "\u211C", reals: "\u211D", rect: "\u25AD", re: "\xAE", reg: "\xAE", rfisht: "\u297D", rfloor: "\u230B", rfr: "\u{1D52F}", rhard: "\u21C1", rharu: "\u21C0", rharul: "\u296C", rho: "\u03C1", rhov: "\u03F1", rightarrow: "\u2192", rightarrowtail: "\u21A3", rightharpoondown: "\u21C1", rightharpoonup: "\u21C0", rightleftarrows: "\u21C4", rightleftharpoons: "\u21CC", rightrightarrows: "\u21C9", rightsquigarrow: "\u219D", rightthreetimes: "\u22CC", ring: "\u02DA", risingdotseq: "\u2253", rlarr: "\u21C4", rlhar: "\u21CC", rlm: "\u200F", rmoust: "\u23B1", rmoustache: "\u23B1", rnmid: "\u2AEE", roang: "\u27ED", roarr: "\u21FE", robrk: "\u27E7", ropar: "\u2986", ropf: "\u{1D563}", roplus: "\u2A2E", rotimes: "\u2A35", rpar: ")", rpargt: "\u2994", rppolint: "\u2A12", rrarr: "\u21C9", rsaquo: "\u203A", rscr: "\u{1D4C7}", rsh: "\u21B1", rsqb: "]", rsquo: "\u2019", rsquor: "\u2019", rthree: "\u22CC", rtimes: "\u22CA", rtri: "\u25B9", rtrie: "\u22B5", rtrif: "\u25B8", rtriltri: "\u29CE", ruluhar: "\u2968", rx: "\u211E", sacute: "\u015B", sbquo: "\u201A", sc: "\u227B", scE: "\u2AB4", scap: "\u2AB8", scaron: "\u0161", sccue: "\u227D", sce: "\u2AB0", scedil: "\u015F", scirc: "\u015D", scnE: "\u2AB6", scnap: "\u2ABA", scnsim: "\u22E9", scpolint: "\u2A13", scsim: "\u227F", scy: "\u0441", sdot: "\u22C5", sdotb: "\u22A1", sdote: "\u2A66", seArr: "\u21D8", searhk: "\u2925", searr: "\u2198", searrow: "\u2198", sec: "\xA7", sect: "\xA7", semi: ";", seswar: "\u2929", setminus: "\u2216", setmn: "\u2216", sext: "\u2736", sfr: "\u{1D530}", sfrown: "\u2322", sharp: "\u266F", shchcy: "\u0449", shcy: "\u0448", shortmid: "\u2223", shortparallel: "\u2225", sh: "\xAD", shy: "\xAD", sigma: "\u03C3", sigmaf: "\u03C2", sigmav: "\u03C2", sim: "\u223C", simdot: "\u2A6A", sime: "\u2243", simeq: "\u2243", simg: "\u2A9E", simgE: "\u2AA0", siml: "\u2A9D", simlE: "\u2A9F", simne: "\u2246", simplus: "\u2A24", simrarr: "\u2972", slarr: "\u2190", smallsetminus: "\u2216", smashp: "\u2A33", smeparsl: "\u29E4", smid: "\u2223", smile: "\u2323", smt: "\u2AAA", smte: "\u2AAC", smtes: "\u2AAC\uFE00", softcy: "\u044C", sol: "/", solb: "\u29C4", solbar: "\u233F", sopf: "\u{1D564}", spades: "\u2660", spadesuit: "\u2660", spar: "\u2225", sqcap: "\u2293", sqcaps: "\u2293\uFE00", sqcup: "\u2294", sqcups: "\u2294\uFE00", sqsub: "\u228F", sqsube: "\u2291", sqsubset: "\u228F", sqsubseteq: "\u2291", sqsup: "\u2290", sqsupe: "\u2292", sqsupset: "\u2290", sqsupseteq: "\u2292", squ: "\u25A1", square: "\u25A1", squarf: "\u25AA", squf: "\u25AA", srarr: "\u2192", sscr: "\u{1D4C8}", ssetmn: "\u2216", ssmile: "\u2323", sstarf: "\u22C6", star: "\u2606", starf: "\u2605", straightepsilon: "\u03F5", straightphi: "\u03D5", strns: "\xAF", sub: "\u2282", subE: "\u2AC5", subdot: "\u2ABD", sube: "\u2286", subedot: "\u2AC3", submult: "\u2AC1", subnE: "\u2ACB", subne: "\u228A", subplus: "\u2ABF", subrarr: "\u2979", subset: "\u2282", subseteq: "\u2286", subseteqq: "\u2AC5", subsetneq: "\u228A", subsetneqq: "\u2ACB", subsim: "\u2AC7", subsub: "\u2AD5", subsup: "\u2AD3", succ: "\u227B", succapprox: "\u2AB8", succcurlyeq: "\u227D", succeq: "\u2AB0", succnapprox: "\u2ABA", succneqq: "\u2AB6", succnsim: "\u22E9", succsim: "\u227F", sum: "\u2211", sung: "\u266A", sup: "\u2283", sup1: "\xB9", sup2: "\xB2", sup3: "\xB3", supE: "\u2AC6", supdot: "\u2ABE", supdsub: "\u2AD8", supe: "\u2287", supedot: "\u2AC4", suphsol: "\u27C9", suphsub: "\u2AD7", suplarr: "\u297B", supmult: "\u2AC2", supnE: "\u2ACC", supne: "\u228B", supplus: "\u2AC0", supset: "\u2283", supseteq: "\u2287", supseteqq: "\u2AC6", supsetneq: "\u228B", supsetneqq: "\u2ACC", supsim: "\u2AC8", supsub: "\u2AD4", supsup: "\u2AD6", swArr: "\u21D9", swarhk: "\u2926", swarr: "\u2199", swarrow: "\u2199", swnwar: "\u292A", szli: "\xDF", szlig: "\xDF", target: "\u2316", tau: "\u03C4", tbrk: "\u23B4", tcaron: "\u0165", tcedil: "\u0163", tcy: "\u0442", tdot: "\u20DB", telrec: "\u2315", tfr: "\u{1D531}", there4: "\u2234", therefore: "\u2234", theta: "\u03B8", thetasym: "\u03D1", thetav: "\u03D1", thickapprox: "\u2248", thicksim: "\u223C", thinsp: "\u2009", thkap: "\u2248", thksim: "\u223C", thor: "\xFE", thorn: "\xFE", tilde: "\u02DC", time: "\xD7", times: "\xD7", timesb: "\u22A0", timesbar: "\u2A31", timesd: "\u2A30", tint: "\u222D", toea: "\u2928", top: "\u22A4", topbot: "\u2336", topcir: "\u2AF1", topf: "\u{1D565}", topfork: "\u2ADA", tosa: "\u2929", tprime: "\u2034", trade: "\u2122", triangle: "\u25B5", triangledown: "\u25BF", triangleleft: "\u25C3", trianglelefteq: "\u22B4", triangleq: "\u225C", triangleright: "\u25B9", trianglerighteq: "\u22B5", tridot: "\u25EC", trie: "\u225C", triminus: "\u2A3A", triplus: "\u2A39", trisb: "\u29CD", tritime: "\u2A3B", trpezium: "\u23E2", tscr: "\u{1D4C9}", tscy: "\u0446", tshcy: "\u045B", tstrok: "\u0167", twixt: "\u226C", twoheadleftarrow: "\u219E", twoheadrightarrow: "\u21A0", uArr: "\u21D1", uHar: "\u2963", uacut: "\xFA", uacute: "\xFA", uarr: "\u2191", ubrcy: "\u045E", ubreve: "\u016D", ucir: "\xFB", ucirc: "\xFB", ucy: "\u0443", udarr: "\u21C5", udblac: "\u0171", udhar: "\u296E", ufisht: "\u297E", ufr: "\u{1D532}", ugrav: "\xF9", ugrave: "\xF9", uharl: "\u21BF", uharr: "\u21BE", uhblk: "\u2580", ulcorn: "\u231C", ulcorner: "\u231C", ulcrop: "\u230F", ultri: "\u25F8", umacr: "\u016B", um: "\xA8", uml: "\xA8", uogon: "\u0173", uopf: "\u{1D566}", uparrow: "\u2191", updownarrow: "\u2195", upharpoonleft: "\u21BF", upharpoonright: "\u21BE", uplus: "\u228E", upsi: "\u03C5", upsih: "\u03D2", upsilon: "\u03C5", upuparrows: "\u21C8", urcorn: "\u231D", urcorner: "\u231D", urcrop: "\u230E", uring: "\u016F", urtri: "\u25F9", uscr: "\u{1D4CA}", utdot: "\u22F0", utilde: "\u0169", utri: "\u25B5", utrif: "\u25B4", uuarr: "\u21C8", uum: "\xFC", uuml: "\xFC", uwangle: "\u29A7", vArr: "\u21D5", vBar: "\u2AE8", vBarv: "\u2AE9", vDash: "\u22A8", vangrt: "\u299C", varepsilon: "\u03F5", varkappa: "\u03F0", varnothing: "\u2205", varphi: "\u03D5", varpi: "\u03D6", varpropto: "\u221D", varr: "\u2195", varrho: "\u03F1", varsigma: "\u03C2", varsubsetneq: "\u228A\uFE00", varsubsetneqq: "\u2ACB\uFE00", varsupsetneq: "\u228B\uFE00", varsupsetneqq: "\u2ACC\uFE00", vartheta: "\u03D1", vartriangleleft: "\u22B2", vartriangleright: "\u22B3", vcy: "\u0432", vdash: "\u22A2", vee: "\u2228", veebar: "\u22BB", veeeq: "\u225A", vellip: "\u22EE", verbar: "|", vert: "|", vfr: "\u{1D533}", vltri: "\u22B2", vnsub: "\u2282\u20D2", vnsup: "\u2283\u20D2", vopf: "\u{1D567}", vprop: "\u221D", vrtri: "\u22B3", vscr: "\u{1D4CB}", vsubnE: "\u2ACB\uFE00", vsubne: "\u228A\uFE00", vsupnE: "\u2ACC\uFE00", vsupne: "\u228B\uFE00", vzigzag: "\u299A", wcirc: "\u0175", wedbar: "\u2A5F", wedge: "\u2227", wedgeq: "\u2259", weierp: "\u2118", wfr: "\u{1D534}", wopf: "\u{1D568}", wp: "\u2118", wr: "\u2240", wreath: "\u2240", wscr: "\u{1D4CC}", xcap: "\u22C2", xcirc: "\u25EF", xcup: "\u22C3", xdtri: "\u25BD", xfr: "\u{1D535}", xhArr: "\u27FA", xharr: "\u27F7", xi: "\u03BE", xlArr: "\u27F8", xlarr: "\u27F5", xmap: "\u27FC", xnis: "\u22FB", xodot: "\u2A00", xopf: "\u{1D569}", xoplus: "\u2A01", xotime: "\u2A02", xrArr: "\u27F9", xrarr: "\u27F6", xscr: "\u{1D4CD}", xsqcup: "\u2A06", xuplus: "\u2A04", xutri: "\u25B3", xvee: "\u22C1", xwedge: "\u22C0", yacut: "\xFD", yacute: "\xFD", yacy: "\u044F", ycirc: "\u0177", ycy: "\u044B", ye: "\xA5", yen: "\xA5", yfr: "\u{1D536}", yicy: "\u0457", yopf: "\u{1D56A}", yscr: "\u{1D4CE}", yucy: "\u044E", yum: "\xFF", yuml: "\xFF", zacute: "\u017A", zcaron: "\u017E", zcy: "\u0437", zdot: "\u017C", zeetrf: "\u2128", zeta: "\u03B6", zfr: "\u{1D537}", zhcy: "\u0436", zigrarr: "\u21DD", zopf: "\u{1D56B}", zscr: "\u{1D4CF}", zwj: "\u200D", zwnj: "\u200C" }; } }); // node_modules/parse-entities/decode-entity.js var require_decode_entity = __commonJS({ "node_modules/parse-entities/decode-entity.js"(exports2, module2) { "use strict"; var characterEntities2 = require_character_entities(); module2.exports = decodeEntity; var own10 = {}.hasOwnProperty; function decodeEntity(characters) { return own10.call(characterEntities2, characters) ? characterEntities2[characters] : false; } } }); // node_modules/mml-react/node_modules/micromark/dist/character/ascii-digit.js var require_ascii_digit = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/character/ascii-digit.js"(exports2, module2) { "use strict"; var regexCheck2 = require_regex_check(); var asciiDigit2 = regexCheck2(/\d/); module2.exports = asciiDigit2; } }); // node_modules/mml-react/node_modules/micromark/dist/character/ascii-hex-digit.js var require_ascii_hex_digit = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/character/ascii-hex-digit.js"(exports2, module2) { "use strict"; var regexCheck2 = require_regex_check(); var asciiHexDigit2 = regexCheck2(/[\dA-Fa-f]/); module2.exports = asciiHexDigit2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/character-reference.js var require_character_reference = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/character-reference.js"(exports2, module2) { "use strict"; var decodeEntity = require_decode_entity(); var asciiAlphanumeric2 = require_ascii_alphanumeric(); var asciiDigit2 = require_ascii_digit(); var asciiHexDigit2 = require_ascii_hex_digit(); function _interopDefaultLegacy(e2) { return e2 && typeof e2 === "object" && "default" in e2 ? e2 : { default: e2 }; } var decodeEntity__default = /* @__PURE__ */ _interopDefaultLegacy(decodeEntity); var characterReference2 = { name: "characterReference", tokenize: tokenizeCharacterReference2 }; function tokenizeCharacterReference2(effects, ok4, nok) { var self2 = this; var size = 0; var max; var test3; return start; function start(code3) { effects.enter("characterReference"); effects.enter("characterReferenceMarker"); effects.consume(code3); effects.exit("characterReferenceMarker"); return open; } function open(code3) { if (code3 === 35) { effects.enter("characterReferenceMarkerNumeric"); effects.consume(code3); effects.exit("characterReferenceMarkerNumeric"); return numeric; } effects.enter("characterReferenceValue"); max = 31; test3 = asciiAlphanumeric2; return value(code3); } function numeric(code3) { if (code3 === 88 || code3 === 120) { effects.enter("characterReferenceMarkerHexadecimal"); effects.consume(code3); effects.exit("characterReferenceMarkerHexadecimal"); effects.enter("characterReferenceValue"); max = 6; test3 = asciiHexDigit2; return value; } effects.enter("characterReferenceValue"); max = 7; test3 = asciiDigit2; return value(code3); } function value(code3) { var token; if (code3 === 59 && size) { token = effects.exit("characterReferenceValue"); if (test3 === asciiAlphanumeric2 && !decodeEntity__default["default"](self2.sliceSerialize(token))) { return nok(code3); } effects.enter("characterReferenceMarker"); effects.consume(code3); effects.exit("characterReferenceMarker"); effects.exit("characterReference"); return ok4; } if (test3(code3) && size++ < max) { effects.consume(code3); return value; } return nok(code3); } } module2.exports = characterReference2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/code-fenced.js var require_code_fenced = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/code-fenced.js"(exports2, module2) { "use strict"; var markdownLineEnding2 = require_markdown_line_ending(); var markdownLineEndingOrSpace2 = require_markdown_line_ending_or_space(); var prefixSize = require_prefix_size(); var factorySpace2 = require_factory_space(); var codeFenced2 = { name: "codeFenced", tokenize: tokenizeCodeFenced2, concrete: true }; function tokenizeCodeFenced2(effects, ok4, nok) { var self2 = this; var closingFenceConstruct = { tokenize: tokenizeClosingFence, partial: true }; var initialPrefix = prefixSize(this.events, "linePrefix"); var sizeOpen = 0; var marker; return start; function start(code3) { effects.enter("codeFenced"); effects.enter("codeFencedFence"); effects.enter("codeFencedFenceSequence"); marker = code3; return sequenceOpen(code3); } function sequenceOpen(code3) { if (code3 === marker) { effects.consume(code3); sizeOpen++; return sequenceOpen; } effects.exit("codeFencedFenceSequence"); return sizeOpen < 3 ? nok(code3) : factorySpace2(effects, infoOpen, "whitespace")(code3); } function infoOpen(code3) { if (code3 === null || markdownLineEnding2(code3)) { return openAfter(code3); } effects.enter("codeFencedFenceInfo"); effects.enter("chunkString", { contentType: "string" }); return info(code3); } function info(code3) { if (code3 === null || markdownLineEndingOrSpace2(code3)) { effects.exit("chunkString"); effects.exit("codeFencedFenceInfo"); return factorySpace2(effects, infoAfter, "whitespace")(code3); } if (code3 === 96 && code3 === marker) return nok(code3); effects.consume(code3); return info; } function infoAfter(code3) { if (code3 === null || markdownLineEnding2(code3)) { return openAfter(code3); } effects.enter("codeFencedFenceMeta"); effects.enter("chunkString", { contentType: "string" }); return meta(code3); } function meta(code3) { if (code3 === null || markdownLineEnding2(code3)) { effects.exit("chunkString"); effects.exit("codeFencedFenceMeta"); return openAfter(code3); } if (code3 === 96 && code3 === marker) return nok(code3); effects.consume(code3); return meta; } function openAfter(code3) { effects.exit("codeFencedFence"); return self2.interrupt ? ok4(code3) : content3(code3); } function content3(code3) { if (code3 === null) { return after(code3); } if (markdownLineEnding2(code3)) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return effects.attempt( closingFenceConstruct, after, initialPrefix ? factorySpace2(effects, content3, "linePrefix", initialPrefix + 1) : content3 ); } effects.enter("codeFlowValue"); return contentContinue(code3); } function contentContinue(code3) { if (code3 === null || markdownLineEnding2(code3)) { effects.exit("codeFlowValue"); return content3(code3); } effects.consume(code3); return contentContinue; } function after(code3) { effects.exit("codeFenced"); return ok4(code3); } function tokenizeClosingFence(effects2, ok5, nok2) { var size = 0; return factorySpace2( effects2, closingSequenceStart, "linePrefix", this.parser.constructs.disable.null.indexOf("codeIndented") > -1 ? void 0 : 4 ); function closingSequenceStart(code3) { effects2.enter("codeFencedFence"); effects2.enter("codeFencedFenceSequence"); return closingSequence(code3); } function closingSequence(code3) { if (code3 === marker) { effects2.consume(code3); size++; return closingSequence; } if (size < sizeOpen) return nok2(code3); effects2.exit("codeFencedFenceSequence"); return factorySpace2(effects2, closingSequenceEnd, "whitespace")(code3); } function closingSequenceEnd(code3) { if (code3 === null || markdownLineEnding2(code3)) { effects2.exit("codeFencedFence"); return ok5(code3); } return nok2(code3); } } } module2.exports = codeFenced2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/code-indented.js var require_code_indented = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/code-indented.js"(exports2, module2) { "use strict"; var markdownLineEnding2 = require_markdown_line_ending(); var chunkedSplice = require_chunked_splice(); var prefixSize = require_prefix_size(); var factorySpace2 = require_factory_space(); var codeIndented2 = { name: "codeIndented", tokenize: tokenizeCodeIndented2, resolve: resolveCodeIndented }; var indentedContentConstruct = { tokenize: tokenizeIndentedContent, partial: true }; function resolveCodeIndented(events, context) { var code3 = { type: "codeIndented", start: events[0][1].start, end: events[events.length - 1][1].end }; chunkedSplice(events, 0, 0, [["enter", code3, context]]); chunkedSplice(events, events.length, 0, [["exit", code3, context]]); return events; } function tokenizeCodeIndented2(effects, ok4, nok) { return effects.attempt(indentedContentConstruct, afterPrefix, nok); function afterPrefix(code3) { if (code3 === null) { return ok4(code3); } if (markdownLineEnding2(code3)) { return effects.attempt(indentedContentConstruct, afterPrefix, ok4)(code3); } effects.enter("codeFlowValue"); return content3(code3); } function content3(code3) { if (code3 === null || markdownLineEnding2(code3)) { effects.exit("codeFlowValue"); return afterPrefix(code3); } effects.consume(code3); return content3; } } function tokenizeIndentedContent(effects, ok4, nok) { var self2 = this; return factorySpace2(effects, afterPrefix, "linePrefix", 4 + 1); function afterPrefix(code3) { if (markdownLineEnding2(code3)) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return factorySpace2(effects, afterPrefix, "linePrefix", 4 + 1); } return prefixSize(self2.events, "linePrefix") < 4 ? nok(code3) : ok4(code3); } } module2.exports = codeIndented2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/code-text.js var require_code_text = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/code-text.js"(exports2, module2) { "use strict"; var markdownLineEnding2 = require_markdown_line_ending(); var codeText2 = { name: "codeText", tokenize: tokenizeCodeText2, resolve: resolveCodeText2, previous: previous3 }; function resolveCodeText2(events) { var tailExitIndex = events.length - 4; var headEnterIndex = 3; var index3; var enter; if ((events[headEnterIndex][1].type === "lineEnding" || events[headEnterIndex][1].type === "space") && (events[tailExitIndex][1].type === "lineEnding" || events[tailExitIndex][1].type === "space")) { index3 = headEnterIndex; while (++index3 < tailExitIndex) { if (events[index3][1].type === "codeTextData") { events[tailExitIndex][1].type = events[headEnterIndex][1].type = "codeTextPadding"; headEnterIndex += 2; tailExitIndex -= 2; break; } } } index3 = headEnterIndex - 1; tailExitIndex++; while (++index3 <= tailExitIndex) { if (enter === void 0) { if (index3 !== tailExitIndex && events[index3][1].type !== "lineEnding") { enter = index3; } } else if (index3 === tailExitIndex || events[index3][1].type === "lineEnding") { events[enter][1].type = "codeTextData"; if (index3 !== enter + 2) { events[enter][1].end = events[index3 - 1][1].end; events.splice(enter + 2, index3 - enter - 2); tailExitIndex -= index3 - enter - 2; index3 = enter + 2; } enter = void 0; } } return events; } function previous3(code3) { return code3 !== 96 || this.events[this.events.length - 1][1].type === "characterEscape"; } function tokenizeCodeText2(effects, ok4, nok) { var sizeOpen = 0; var size; var token; return start; function start(code3) { effects.enter("codeText"); effects.enter("codeTextSequence"); return openingSequence(code3); } function openingSequence(code3) { if (code3 === 96) { effects.consume(code3); sizeOpen++; return openingSequence; } effects.exit("codeTextSequence"); return gap(code3); } function gap(code3) { if (code3 === null) { return nok(code3); } if (code3 === 96) { token = effects.enter("codeTextSequence"); size = 0; return closingSequence(code3); } if (code3 === 32) { effects.enter("space"); effects.consume(code3); effects.exit("space"); return gap; } if (markdownLineEnding2(code3)) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return gap; } effects.enter("codeTextData"); return data(code3); } function data(code3) { if (code3 === null || code3 === 32 || code3 === 96 || markdownLineEnding2(code3)) { effects.exit("codeTextData"); return gap(code3); } effects.consume(code3); return data; } function closingSequence(code3) { if (code3 === 96) { effects.consume(code3); size++; return closingSequence; } if (size === sizeOpen) { effects.exit("codeTextSequence"); effects.exit("codeText"); return ok4(code3); } token.type = "codeTextData"; return data(code3); } } module2.exports = codeText2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-destination.js var require_factory_destination = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-destination.js"(exports2, module2) { "use strict"; var asciiControl2 = require_ascii_control(); var markdownLineEndingOrSpace2 = require_markdown_line_ending_or_space(); var markdownLineEnding2 = require_markdown_line_ending(); function destinationFactory(effects, ok4, nok, type, literalType, literalMarkerType, rawType, stringType, max) { var limit = max || Infinity; var balance = 0; return start; function start(code3) { if (code3 === 60) { effects.enter(type); effects.enter(literalType); effects.enter(literalMarkerType); effects.consume(code3); effects.exit(literalMarkerType); return destinationEnclosedBefore; } if (asciiControl2(code3) || code3 === 41) { return nok(code3); } effects.enter(type); effects.enter(rawType); effects.enter(stringType); effects.enter("chunkString", { contentType: "string" }); return destinationRaw(code3); } function destinationEnclosedBefore(code3) { if (code3 === 62) { effects.enter(literalMarkerType); effects.consume(code3); effects.exit(literalMarkerType); effects.exit(literalType); effects.exit(type); return ok4; } effects.enter(stringType); effects.enter("chunkString", { contentType: "string" }); return destinationEnclosed(code3); } function destinationEnclosed(code3) { if (code3 === 62) { effects.exit("chunkString"); effects.exit(stringType); return destinationEnclosedBefore(code3); } if (code3 === null || code3 === 60 || markdownLineEnding2(code3)) { return nok(code3); } effects.consume(code3); return code3 === 92 ? destinationEnclosedEscape : destinationEnclosed; } function destinationEnclosedEscape(code3) { if (code3 === 60 || code3 === 62 || code3 === 92) { effects.consume(code3); return destinationEnclosed; } return destinationEnclosed(code3); } function destinationRaw(code3) { if (code3 === 40) { if (++balance > limit) return nok(code3); effects.consume(code3); return destinationRaw; } if (code3 === 41) { if (!balance--) { effects.exit("chunkString"); effects.exit(stringType); effects.exit(rawType); effects.exit(type); return ok4(code3); } effects.consume(code3); return destinationRaw; } if (code3 === null || markdownLineEndingOrSpace2(code3)) { if (balance) return nok(code3); effects.exit("chunkString"); effects.exit(stringType); effects.exit(rawType); effects.exit(type); return ok4(code3); } if (asciiControl2(code3)) return nok(code3); effects.consume(code3); return code3 === 92 ? destinationRawEscape : destinationRaw; } function destinationRawEscape(code3) { if (code3 === 40 || code3 === 41 || code3 === 92) { effects.consume(code3); return destinationRaw; } return destinationRaw(code3); } } module2.exports = destinationFactory; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-label.js var require_factory_label = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-label.js"(exports2, module2) { "use strict"; var markdownLineEnding2 = require_markdown_line_ending(); var markdownSpace2 = require_markdown_space(); function labelFactory(effects, ok4, nok, type, markerType, stringType) { var self2 = this; var size = 0; var data; return start; function start(code3) { effects.enter(type); effects.enter(markerType); effects.consume(code3); effects.exit(markerType); effects.enter(stringType); return atBreak; } function atBreak(code3) { if (code3 === null || code3 === 91 || code3 === 93 && !data || /* c8 ignore next */ code3 === 94 && /* c8 ignore next */ !size && /* c8 ignore next */ "_hiddenFootnoteSupport" in self2.parser.constructs || size > 999) { return nok(code3); } if (code3 === 93) { effects.exit(stringType); effects.enter(markerType); effects.consume(code3); effects.exit(markerType); effects.exit(type); return ok4; } if (markdownLineEnding2(code3)) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return atBreak; } effects.enter("chunkString", { contentType: "string" }); return label(code3); } function label(code3) { if (code3 === null || code3 === 91 || code3 === 93 || markdownLineEnding2(code3) || size++ > 999) { effects.exit("chunkString"); return atBreak(code3); } effects.consume(code3); data = data || !markdownSpace2(code3); return code3 === 92 ? labelEscape : label; } function labelEscape(code3) { if (code3 === 91 || code3 === 92 || code3 === 93) { effects.consume(code3); size++; return label; } return label(code3); } } module2.exports = labelFactory; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-whitespace.js var require_factory_whitespace = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-whitespace.js"(exports2, module2) { "use strict"; var markdownLineEnding2 = require_markdown_line_ending(); var markdownSpace2 = require_markdown_space(); var factorySpace2 = require_factory_space(); function whitespaceFactory(effects, ok4) { var seen; return start; function start(code3) { if (markdownLineEnding2(code3)) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); seen = true; return start; } if (markdownSpace2(code3)) { return factorySpace2( effects, start, seen ? "linePrefix" : "lineSuffix" )(code3); } return ok4(code3); } } module2.exports = whitespaceFactory; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-title.js var require_factory_title = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-title.js"(exports2, module2) { "use strict"; var markdownLineEnding2 = require_markdown_line_ending(); var factorySpace2 = require_factory_space(); function titleFactory(effects, ok4, nok, type, markerType, stringType) { var marker; return start; function start(code3) { effects.enter(type); effects.enter(markerType); effects.consume(code3); effects.exit(markerType); marker = code3 === 40 ? 41 : code3; return atFirstTitleBreak; } function atFirstTitleBreak(code3) { if (code3 === marker) { effects.enter(markerType); effects.consume(code3); effects.exit(markerType); effects.exit(type); return ok4; } effects.enter(stringType); return atTitleBreak(code3); } function atTitleBreak(code3) { if (code3 === marker) { effects.exit(stringType); return atFirstTitleBreak(marker); } if (code3 === null) { return nok(code3); } if (markdownLineEnding2(code3)) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return factorySpace2(effects, atTitleBreak, "linePrefix"); } effects.enter("chunkString", { contentType: "string" }); return title(code3); } function title(code3) { if (code3 === marker || code3 === null || markdownLineEnding2(code3)) { effects.exit("chunkString"); return atTitleBreak(code3); } effects.consume(code3); return code3 === 92 ? titleEscape : title; } function titleEscape(code3) { if (code3 === marker || code3 === 92) { effects.consume(code3); return title; } return title(code3); } } module2.exports = titleFactory; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/definition.js var require_definition = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/definition.js"(exports2, module2) { "use strict"; var markdownLineEnding2 = require_markdown_line_ending(); var markdownLineEndingOrSpace2 = require_markdown_line_ending_or_space(); var normalizeIdentifier2 = require_normalize_identifier(); var factoryDestination2 = require_factory_destination(); var factoryLabel2 = require_factory_label(); var factorySpace2 = require_factory_space(); var factoryWhitespace2 = require_factory_whitespace(); var factoryTitle2 = require_factory_title(); var definition2 = { name: "definition", tokenize: tokenizeDefinition2 }; var titleConstruct = { tokenize: tokenizeTitle, partial: true }; function tokenizeDefinition2(effects, ok4, nok) { var self2 = this; var identifier; return start; function start(code3) { effects.enter("definition"); return factoryLabel2.call( self2, effects, labelAfter, nok, "definitionLabel", "definitionLabelMarker", "definitionLabelString" )(code3); } function labelAfter(code3) { identifier = normalizeIdentifier2( self2.sliceSerialize(self2.events[self2.events.length - 1][1]).slice(1, -1) ); if (code3 === 58) { effects.enter("definitionMarker"); effects.consume(code3); effects.exit("definitionMarker"); return factoryWhitespace2( effects, factoryDestination2( effects, effects.attempt( titleConstruct, factorySpace2(effects, after, "whitespace"), factorySpace2(effects, after, "whitespace") ), nok, "definitionDestination", "definitionDestinationLiteral", "definitionDestinationLiteralMarker", "definitionDestinationRaw", "definitionDestinationString" ) ); } return nok(code3); } function after(code3) { if (code3 === null || markdownLineEnding2(code3)) { effects.exit("definition"); if (self2.parser.defined.indexOf(identifier) < 0) { self2.parser.defined.push(identifier); } return ok4(code3); } return nok(code3); } } function tokenizeTitle(effects, ok4, nok) { return start; function start(code3) { return markdownLineEndingOrSpace2(code3) ? factoryWhitespace2(effects, before)(code3) : nok(code3); } function before(code3) { if (code3 === 34 || code3 === 39 || code3 === 40) { return factoryTitle2( effects, factorySpace2(effects, after, "whitespace"), nok, "definitionTitle", "definitionTitleMarker", "definitionTitleString" )(code3); } return nok(code3); } function after(code3) { return code3 === null || markdownLineEnding2(code3) ? ok4(code3) : nok(code3); } } module2.exports = definition2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/hard-break-escape.js var require_hard_break_escape = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/hard-break-escape.js"(exports2, module2) { "use strict"; var markdownLineEnding2 = require_markdown_line_ending(); var hardBreakEscape2 = { name: "hardBreakEscape", tokenize: tokenizeHardBreakEscape2 }; function tokenizeHardBreakEscape2(effects, ok4, nok) { return start; function start(code3) { effects.enter("hardBreakEscape"); effects.enter("escapeMarker"); effects.consume(code3); return open; } function open(code3) { if (markdownLineEnding2(code3)) { effects.exit("escapeMarker"); effects.exit("hardBreakEscape"); return ok4(code3); } return nok(code3); } } module2.exports = hardBreakEscape2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/heading-atx.js var require_heading_atx = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/heading-atx.js"(exports2, module2) { "use strict"; var markdownLineEnding2 = require_markdown_line_ending(); var markdownLineEndingOrSpace2 = require_markdown_line_ending_or_space(); var markdownSpace2 = require_markdown_space(); var chunkedSplice = require_chunked_splice(); var factorySpace2 = require_factory_space(); var headingAtx2 = { name: "headingAtx", tokenize: tokenizeHeadingAtx2, resolve: resolveHeadingAtx2 }; function resolveHeadingAtx2(events, context) { var contentEnd = events.length - 2; var contentStart = 3; var content3; var text5; if (events[contentStart][1].type === "whitespace") { contentStart += 2; } if (contentEnd - 2 > contentStart && events[contentEnd][1].type === "whitespace") { contentEnd -= 2; } if (events[contentEnd][1].type === "atxHeadingSequence" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === "whitespace")) { contentEnd -= contentStart + 1 === contentEnd ? 2 : 4; } if (contentEnd > contentStart) { content3 = { type: "atxHeadingText", start: events[contentStart][1].start, end: events[contentEnd][1].end }; text5 = { type: "chunkText", start: events[contentStart][1].start, end: events[contentEnd][1].end, contentType: "text" }; chunkedSplice(events, contentStart, contentEnd - contentStart + 1, [ ["enter", content3, context], ["enter", text5, context], ["exit", text5, context], ["exit", content3, context] ]); } return events; } function tokenizeHeadingAtx2(effects, ok4, nok) { var self2 = this; var size = 0; return start; function start(code3) { effects.enter("atxHeading"); effects.enter("atxHeadingSequence"); return fenceOpenInside(code3); } function fenceOpenInside(code3) { if (code3 === 35 && size++ < 6) { effects.consume(code3); return fenceOpenInside; } if (code3 === null || markdownLineEndingOrSpace2(code3)) { effects.exit("atxHeadingSequence"); return self2.interrupt ? ok4(code3) : headingBreak(code3); } return nok(code3); } function headingBreak(code3) { if (code3 === 35) { effects.enter("atxHeadingSequence"); return sequence(code3); } if (code3 === null || markdownLineEnding2(code3)) { effects.exit("atxHeading"); return ok4(code3); } if (markdownSpace2(code3)) { return factorySpace2(effects, headingBreak, "whitespace")(code3); } effects.enter("atxHeadingText"); return data(code3); } function sequence(code3) { if (code3 === 35) { effects.consume(code3); return sequence; } effects.exit("atxHeadingSequence"); return headingBreak(code3); } function data(code3) { if (code3 === null || code3 === 35 || markdownLineEndingOrSpace2(code3)) { effects.exit("atxHeadingText"); return headingBreak(code3); } effects.consume(code3); return data; } } module2.exports = headingAtx2; } }); // node_modules/mml-react/node_modules/micromark/dist/constant/html-block-names.js var require_html_block_names = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/constant/html-block-names.js"(exports2, module2) { "use strict"; var basics = [ "address", "article", "aside", "base", "basefont", "blockquote", "body", "caption", "center", "col", "colgroup", "dd", "details", "dialog", "dir", "div", "dl", "dt", "fieldset", "figcaption", "figure", "footer", "form", "frame", "frameset", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hr", "html", "iframe", "legend", "li", "link", "main", "menu", "menuitem", "nav", "noframes", "ol", "optgroup", "option", "p", "param", "section", "source", "summary", "table", "tbody", "td", "tfoot", "th", "thead", "title", "tr", "track", "ul" ]; module2.exports = basics; } }); // node_modules/mml-react/node_modules/micromark/dist/constant/html-raw-names.js var require_html_raw_names = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/constant/html-raw-names.js"(exports2, module2) { "use strict"; var raws = ["pre", "script", "style", "textarea"]; module2.exports = raws; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/html-flow.js var require_html_flow = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/html-flow.js"(exports2, module2) { "use strict"; var asciiAlpha2 = require_ascii_alpha(); var asciiAlphanumeric2 = require_ascii_alphanumeric(); var markdownLineEnding2 = require_markdown_line_ending(); var markdownLineEndingOrSpace2 = require_markdown_line_ending_or_space(); var markdownSpace2 = require_markdown_space(); var fromCharCode = require_from_char_code(); var htmlBlockNames2 = require_html_block_names(); var htmlRawNames2 = require_html_raw_names(); var partialBlankLine = require_partial_blank_line(); var htmlFlow2 = { name: "htmlFlow", tokenize: tokenizeHtmlFlow2, resolveTo: resolveToHtmlFlow2, concrete: true }; var nextBlankConstruct = { tokenize: tokenizeNextBlank, partial: true }; function resolveToHtmlFlow2(events) { var index3 = events.length; while (index3--) { if (events[index3][0] === "enter" && events[index3][1].type === "htmlFlow") { break; } } if (index3 > 1 && events[index3 - 2][1].type === "linePrefix") { events[index3][1].start = events[index3 - 2][1].start; events[index3 + 1][1].start = events[index3 - 2][1].start; events.splice(index3 - 2, 2); } return events; } function tokenizeHtmlFlow2(effects, ok4, nok) { var self2 = this; var kind; var startTag; var buffer2; var index3; var marker; return start; function start(code3) { effects.enter("htmlFlow"); effects.enter("htmlFlowData"); effects.consume(code3); return open; } function open(code3) { if (code3 === 33) { effects.consume(code3); return declarationStart; } if (code3 === 47) { effects.consume(code3); return tagCloseStart; } if (code3 === 63) { effects.consume(code3); kind = 3; return self2.interrupt ? ok4 : continuationDeclarationInside; } if (asciiAlpha2(code3)) { effects.consume(code3); buffer2 = fromCharCode(code3); startTag = true; return tagName; } return nok(code3); } function declarationStart(code3) { if (code3 === 45) { effects.consume(code3); kind = 2; return commentOpenInside; } if (code3 === 91) { effects.consume(code3); kind = 5; buffer2 = "CDATA["; index3 = 0; return cdataOpenInside; } if (asciiAlpha2(code3)) { effects.consume(code3); kind = 4; return self2.interrupt ? ok4 : continuationDeclarationInside; } return nok(code3); } function commentOpenInside(code3) { if (code3 === 45) { effects.consume(code3); return self2.interrupt ? ok4 : continuationDeclarationInside; } return nok(code3); } function cdataOpenInside(code3) { if (code3 === buffer2.charCodeAt(index3++)) { effects.consume(code3); return index3 === buffer2.length ? self2.interrupt ? ok4 : continuation : cdataOpenInside; } return nok(code3); } function tagCloseStart(code3) { if (asciiAlpha2(code3)) { effects.consume(code3); buffer2 = fromCharCode(code3); return tagName; } return nok(code3); } function tagName(code3) { if (code3 === null || code3 === 47 || code3 === 62 || markdownLineEndingOrSpace2(code3)) { if (code3 !== 47 && startTag && htmlRawNames2.indexOf(buffer2.toLowerCase()) > -1) { kind = 1; return self2.interrupt ? ok4(code3) : continuation(code3); } if (htmlBlockNames2.indexOf(buffer2.toLowerCase()) > -1) { kind = 6; if (code3 === 47) { effects.consume(code3); return basicSelfClosing; } return self2.interrupt ? ok4(code3) : continuation(code3); } kind = 7; return self2.interrupt ? nok(code3) : startTag ? completeAttributeNameBefore(code3) : completeClosingTagAfter(code3); } if (code3 === 45 || asciiAlphanumeric2(code3)) { effects.consume(code3); buffer2 += fromCharCode(code3); return tagName; } return nok(code3); } function basicSelfClosing(code3) { if (code3 === 62) { effects.consume(code3); return self2.interrupt ? ok4 : continuation; } return nok(code3); } function completeClosingTagAfter(code3) { if (markdownSpace2(code3)) { effects.consume(code3); return completeClosingTagAfter; } return completeEnd(code3); } function completeAttributeNameBefore(code3) { if (code3 === 47) { effects.consume(code3); return completeEnd; } if (code3 === 58 || code3 === 95 || asciiAlpha2(code3)) { effects.consume(code3); return completeAttributeName; } if (markdownSpace2(code3)) { effects.consume(code3); return completeAttributeNameBefore; } return completeEnd(code3); } function completeAttributeName(code3) { if (code3 === 45 || code3 === 46 || code3 === 58 || code3 === 95 || asciiAlphanumeric2(code3)) { effects.consume(code3); return completeAttributeName; } return completeAttributeNameAfter(code3); } function completeAttributeNameAfter(code3) { if (code3 === 61) { effects.consume(code3); return completeAttributeValueBefore; } if (markdownSpace2(code3)) { effects.consume(code3); return completeAttributeNameAfter; } return completeAttributeNameBefore(code3); } function completeAttributeValueBefore(code3) { if (code3 === null || code3 === 60 || code3 === 61 || code3 === 62 || code3 === 96) { return nok(code3); } if (code3 === 34 || code3 === 39) { effects.consume(code3); marker = code3; return completeAttributeValueQuoted; } if (markdownSpace2(code3)) { effects.consume(code3); return completeAttributeValueBefore; } marker = void 0; return completeAttributeValueUnquoted(code3); } function completeAttributeValueQuoted(code3) { if (code3 === marker) { effects.consume(code3); return completeAttributeValueQuotedAfter; } if (code3 === null || markdownLineEnding2(code3)) { return nok(code3); } effects.consume(code3); return completeAttributeValueQuoted; } function completeAttributeValueUnquoted(code3) { if (code3 === null || code3 === 34 || code3 === 39 || code3 === 60 || code3 === 61 || code3 === 62 || code3 === 96 || markdownLineEndingOrSpace2(code3)) { return completeAttributeNameAfter(code3); } effects.consume(code3); return completeAttributeValueUnquoted; } function completeAttributeValueQuotedAfter(code3) { if (code3 === 47 || code3 === 62 || markdownSpace2(code3)) { return completeAttributeNameBefore(code3); } return nok(code3); } function completeEnd(code3) { if (code3 === 62) { effects.consume(code3); return completeAfter; } return nok(code3); } function completeAfter(code3) { if (markdownSpace2(code3)) { effects.consume(code3); return completeAfter; } return code3 === null || markdownLineEnding2(code3) ? continuation(code3) : nok(code3); } function continuation(code3) { if (code3 === 45 && kind === 2) { effects.consume(code3); return continuationCommentInside; } if (code3 === 60 && kind === 1) { effects.consume(code3); return continuationRawTagOpen; } if (code3 === 62 && kind === 4) { effects.consume(code3); return continuationClose; } if (code3 === 63 && kind === 3) { effects.consume(code3); return continuationDeclarationInside; } if (code3 === 93 && kind === 5) { effects.consume(code3); return continuationCharacterDataInside; } if (markdownLineEnding2(code3) && (kind === 6 || kind === 7)) { return effects.check( nextBlankConstruct, continuationClose, continuationAtLineEnding )(code3); } if (code3 === null || markdownLineEnding2(code3)) { return continuationAtLineEnding(code3); } effects.consume(code3); return continuation; } function continuationAtLineEnding(code3) { effects.exit("htmlFlowData"); return htmlContinueStart(code3); } function htmlContinueStart(code3) { if (code3 === null) { return done(code3); } if (markdownLineEnding2(code3)) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return htmlContinueStart; } effects.enter("htmlFlowData"); return continuation(code3); } function continuationCommentInside(code3) { if (code3 === 45) { effects.consume(code3); return continuationDeclarationInside; } return continuation(code3); } function continuationRawTagOpen(code3) { if (code3 === 47) { effects.consume(code3); buffer2 = ""; return continuationRawEndTag; } return continuation(code3); } function continuationRawEndTag(code3) { if (code3 === 62 && htmlRawNames2.indexOf(buffer2.toLowerCase()) > -1) { effects.consume(code3); return continuationClose; } if (asciiAlpha2(code3) && buffer2.length < 8) { effects.consume(code3); buffer2 += fromCharCode(code3); return continuationRawEndTag; } return continuation(code3); } function continuationCharacterDataInside(code3) { if (code3 === 93) { effects.consume(code3); return continuationDeclarationInside; } return continuation(code3); } function continuationDeclarationInside(code3) { if (code3 === 62) { effects.consume(code3); return continuationClose; } return continuation(code3); } function continuationClose(code3) { if (code3 === null || markdownLineEnding2(code3)) { effects.exit("htmlFlowData"); return done(code3); } effects.consume(code3); return continuationClose; } function done(code3) { effects.exit("htmlFlow"); return ok4(code3); } } function tokenizeNextBlank(effects, ok4, nok) { return start; function start(code3) { effects.exit("htmlFlowData"); effects.enter("lineEndingBlank"); effects.consume(code3); effects.exit("lineEndingBlank"); return effects.attempt(partialBlankLine, ok4, nok); } } module2.exports = htmlFlow2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/html-text.js var require_html_text = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/html-text.js"(exports2, module2) { "use strict"; var asciiAlpha2 = require_ascii_alpha(); var asciiAlphanumeric2 = require_ascii_alphanumeric(); var markdownLineEnding2 = require_markdown_line_ending(); var markdownLineEndingOrSpace2 = require_markdown_line_ending_or_space(); var markdownSpace2 = require_markdown_space(); var factorySpace2 = require_factory_space(); var htmlText2 = { name: "htmlText", tokenize: tokenizeHtmlText2 }; function tokenizeHtmlText2(effects, ok4, nok) { var self2 = this; var marker; var buffer2; var index3; var returnState; return start; function start(code3) { effects.enter("htmlText"); effects.enter("htmlTextData"); effects.consume(code3); return open; } function open(code3) { if (code3 === 33) { effects.consume(code3); return declarationOpen; } if (code3 === 47) { effects.consume(code3); return tagCloseStart; } if (code3 === 63) { effects.consume(code3); return instruction; } if (asciiAlpha2(code3)) { effects.consume(code3); return tagOpen; } return nok(code3); } function declarationOpen(code3) { if (code3 === 45) { effects.consume(code3); return commentOpen; } if (code3 === 91) { effects.consume(code3); buffer2 = "CDATA["; index3 = 0; return cdataOpen; } if (asciiAlpha2(code3)) { effects.consume(code3); return declaration; } return nok(code3); } function commentOpen(code3) { if (code3 === 45) { effects.consume(code3); return commentStart; } return nok(code3); } function commentStart(code3) { if (code3 === null || code3 === 62) { return nok(code3); } if (code3 === 45) { effects.consume(code3); return commentStartDash; } return comment(code3); } function commentStartDash(code3) { if (code3 === null || code3 === 62) { return nok(code3); } return comment(code3); } function comment(code3) { if (code3 === null) { return nok(code3); } if (code3 === 45) { effects.consume(code3); return commentClose; } if (markdownLineEnding2(code3)) { returnState = comment; return atLineEnding(code3); } effects.consume(code3); return comment; } function commentClose(code3) { if (code3 === 45) { effects.consume(code3); return end; } return comment(code3); } function cdataOpen(code3) { if (code3 === buffer2.charCodeAt(index3++)) { effects.consume(code3); return index3 === buffer2.length ? cdata : cdataOpen; } return nok(code3); } function cdata(code3) { if (code3 === null) { return nok(code3); } if (code3 === 93) { effects.consume(code3); return cdataClose; } if (markdownLineEnding2(code3)) { returnState = cdata; return atLineEnding(code3); } effects.consume(code3); return cdata; } function cdataClose(code3) { if (code3 === 93) { effects.consume(code3); return cdataEnd; } return cdata(code3); } function cdataEnd(code3) { if (code3 === 62) { return end(code3); } if (code3 === 93) { effects.consume(code3); return cdataEnd; } return cdata(code3); } function declaration(code3) { if (code3 === null || code3 === 62) { return end(code3); } if (markdownLineEnding2(code3)) { returnState = declaration; return atLineEnding(code3); } effects.consume(code3); return declaration; } function instruction(code3) { if (code3 === null) { return nok(code3); } if (code3 === 63) { effects.consume(code3); return instructionClose; } if (markdownLineEnding2(code3)) { returnState = instruction; return atLineEnding(code3); } effects.consume(code3); return instruction; } function instructionClose(code3) { return code3 === 62 ? end(code3) : instruction(code3); } function tagCloseStart(code3) { if (asciiAlpha2(code3)) { effects.consume(code3); return tagClose; } return nok(code3); } function tagClose(code3) { if (code3 === 45 || asciiAlphanumeric2(code3)) { effects.consume(code3); return tagClose; } return tagCloseBetween(code3); } function tagCloseBetween(code3) { if (markdownLineEnding2(code3)) { returnState = tagCloseBetween; return atLineEnding(code3); } if (markdownSpace2(code3)) { effects.consume(code3); return tagCloseBetween; } return end(code3); } function tagOpen(code3) { if (code3 === 45 || asciiAlphanumeric2(code3)) { effects.consume(code3); return tagOpen; } if (code3 === 47 || code3 === 62 || markdownLineEndingOrSpace2(code3)) { return tagOpenBetween(code3); } return nok(code3); } function tagOpenBetween(code3) { if (code3 === 47) { effects.consume(code3); return end; } if (code3 === 58 || code3 === 95 || asciiAlpha2(code3)) { effects.consume(code3); return tagOpenAttributeName; } if (markdownLineEnding2(code3)) { returnState = tagOpenBetween; return atLineEnding(code3); } if (markdownSpace2(code3)) { effects.consume(code3); return tagOpenBetween; } return end(code3); } function tagOpenAttributeName(code3) { if (code3 === 45 || code3 === 46 || code3 === 58 || code3 === 95 || asciiAlphanumeric2(code3)) { effects.consume(code3); return tagOpenAttributeName; } return tagOpenAttributeNameAfter(code3); } function tagOpenAttributeNameAfter(code3) { if (code3 === 61) { effects.consume(code3); return tagOpenAttributeValueBefore; } if (markdownLineEnding2(code3)) { returnState = tagOpenAttributeNameAfter; return atLineEnding(code3); } if (markdownSpace2(code3)) { effects.consume(code3); return tagOpenAttributeNameAfter; } return tagOpenBetween(code3); } function tagOpenAttributeValueBefore(code3) { if (code3 === null || code3 === 60 || code3 === 61 || code3 === 62 || code3 === 96) { return nok(code3); } if (code3 === 34 || code3 === 39) { effects.consume(code3); marker = code3; return tagOpenAttributeValueQuoted; } if (markdownLineEnding2(code3)) { returnState = tagOpenAttributeValueBefore; return atLineEnding(code3); } if (markdownSpace2(code3)) { effects.consume(code3); return tagOpenAttributeValueBefore; } effects.consume(code3); marker = void 0; return tagOpenAttributeValueUnquoted; } function tagOpenAttributeValueQuoted(code3) { if (code3 === marker) { effects.consume(code3); return tagOpenAttributeValueQuotedAfter; } if (code3 === null) { return nok(code3); } if (markdownLineEnding2(code3)) { returnState = tagOpenAttributeValueQuoted; return atLineEnding(code3); } effects.consume(code3); return tagOpenAttributeValueQuoted; } function tagOpenAttributeValueQuotedAfter(code3) { if (code3 === 62 || code3 === 47 || markdownLineEndingOrSpace2(code3)) { return tagOpenBetween(code3); } return nok(code3); } function tagOpenAttributeValueUnquoted(code3) { if (code3 === null || code3 === 34 || code3 === 39 || code3 === 60 || code3 === 61 || code3 === 96) { return nok(code3); } if (code3 === 62 || markdownLineEndingOrSpace2(code3)) { return tagOpenBetween(code3); } effects.consume(code3); return tagOpenAttributeValueUnquoted; } function atLineEnding(code3) { effects.exit("htmlTextData"); effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return factorySpace2( effects, afterPrefix, "linePrefix", self2.parser.constructs.disable.null.indexOf("codeIndented") > -1 ? void 0 : 4 ); } function afterPrefix(code3) { effects.enter("htmlTextData"); return returnState(code3); } function end(code3) { if (code3 === 62) { effects.consume(code3); effects.exit("htmlTextData"); effects.exit("htmlText"); return ok4; } return nok(code3); } } module2.exports = htmlText2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/label-end.js var require_label_end = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/label-end.js"(exports2, module2) { "use strict"; var markdownLineEndingOrSpace2 = require_markdown_line_ending_or_space(); var chunkedPush = require_chunked_push(); var chunkedSplice = require_chunked_splice(); var normalizeIdentifier2 = require_normalize_identifier(); var resolveAll2 = require_resolve_all(); var shallow = require_shallow(); var factoryDestination2 = require_factory_destination(); var factoryLabel2 = require_factory_label(); var factoryTitle2 = require_factory_title(); var factoryWhitespace2 = require_factory_whitespace(); var labelEnd2 = { name: "labelEnd", tokenize: tokenizeLabelEnd2, resolveTo: resolveToLabelEnd2, resolveAll: resolveAllLabelEnd2 }; var resourceConstruct2 = { tokenize: tokenizeResource2 }; var fullReferenceConstruct = { tokenize: tokenizeFullReference }; var collapsedReferenceConstruct = { tokenize: tokenizeCollapsedReference }; function resolveAllLabelEnd2(events) { var index3 = -1; var token; while (++index3 < events.length) { token = events[index3][1]; if (!token._used && (token.type === "labelImage" || token.type === "labelLink" || token.type === "labelEnd")) { events.splice(index3 + 1, token.type === "labelImage" ? 4 : 2); token.type = "data"; index3++; } } return events; } function resolveToLabelEnd2(events, context) { var index3 = events.length; var offset = 0; var group; var label; var text5; var token; var open; var close; var media; while (index3--) { token = events[index3][1]; if (open) { if (token.type === "link" || token.type === "labelLink" && token._inactive) { break; } if (events[index3][0] === "enter" && token.type === "labelLink") { token._inactive = true; } } else if (close) { if (events[index3][0] === "enter" && (token.type === "labelImage" || token.type === "labelLink") && !token._balanced) { open = index3; if (token.type !== "labelLink") { offset = 2; break; } } } else if (token.type === "labelEnd") { close = index3; } } group = { type: events[open][1].type === "labelLink" ? "link" : "image", start: shallow(events[open][1].start), end: shallow(events[events.length - 1][1].end) }; label = { type: "label", start: shallow(events[open][1].start), end: shallow(events[close][1].end) }; text5 = { type: "labelText", start: shallow(events[open + offset + 2][1].end), end: shallow(events[close - 2][1].start) }; media = [ ["enter", group, context], ["enter", label, context] ]; media = chunkedPush(media, events.slice(open + 1, open + offset + 3)); media = chunkedPush(media, [["enter", text5, context]]); media = chunkedPush( media, resolveAll2( context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context ) ); media = chunkedPush(media, [ ["exit", text5, context], events[close - 2], events[close - 1], ["exit", label, context] ]); media = chunkedPush(media, events.slice(close + 1)); media = chunkedPush(media, [["exit", group, context]]); chunkedSplice(events, open, events.length, media); return events; } function tokenizeLabelEnd2(effects, ok4, nok) { var self2 = this; var index3 = self2.events.length; var labelStart; var defined; while (index3--) { if ((self2.events[index3][1].type === "labelImage" || self2.events[index3][1].type === "labelLink") && !self2.events[index3][1]._balanced) { labelStart = self2.events[index3][1]; break; } } return start; function start(code3) { if (!labelStart) { return nok(code3); } if (labelStart._inactive) return balanced(code3); defined = self2.parser.defined.indexOf( normalizeIdentifier2( self2.sliceSerialize({ start: labelStart.end, end: self2.now() }) ) ) > -1; effects.enter("labelEnd"); effects.enter("labelMarker"); effects.consume(code3); effects.exit("labelMarker"); effects.exit("labelEnd"); return afterLabelEnd; } function afterLabelEnd(code3) { if (code3 === 40) { return effects.attempt( resourceConstruct2, ok4, defined ? ok4 : balanced )(code3); } if (code3 === 91) { return effects.attempt( fullReferenceConstruct, ok4, defined ? effects.attempt(collapsedReferenceConstruct, ok4, balanced) : balanced )(code3); } return defined ? ok4(code3) : balanced(code3); } function balanced(code3) { labelStart._balanced = true; return nok(code3); } } function tokenizeResource2(effects, ok4, nok) { return start; function start(code3) { effects.enter("resource"); effects.enter("resourceMarker"); effects.consume(code3); effects.exit("resourceMarker"); return factoryWhitespace2(effects, open); } function open(code3) { if (code3 === 41) { return end(code3); } return factoryDestination2( effects, destinationAfter, nok, "resourceDestination", "resourceDestinationLiteral", "resourceDestinationLiteralMarker", "resourceDestinationRaw", "resourceDestinationString", 3 )(code3); } function destinationAfter(code3) { return markdownLineEndingOrSpace2(code3) ? factoryWhitespace2(effects, between2)(code3) : end(code3); } function between2(code3) { if (code3 === 34 || code3 === 39 || code3 === 40) { return factoryTitle2( effects, factoryWhitespace2(effects, end), nok, "resourceTitle", "resourceTitleMarker", "resourceTitleString" )(code3); } return end(code3); } function end(code3) { if (code3 === 41) { effects.enter("resourceMarker"); effects.consume(code3); effects.exit("resourceMarker"); effects.exit("resource"); return ok4; } return nok(code3); } } function tokenizeFullReference(effects, ok4, nok) { var self2 = this; return start; function start(code3) { return factoryLabel2.call( self2, effects, afterLabel, nok, "reference", "referenceMarker", "referenceString" )(code3); } function afterLabel(code3) { return self2.parser.defined.indexOf( normalizeIdentifier2( self2.sliceSerialize(self2.events[self2.events.length - 1][1]).slice(1, -1) ) ) < 0 ? nok(code3) : ok4(code3); } } function tokenizeCollapsedReference(effects, ok4, nok) { return start; function start(code3) { effects.enter("reference"); effects.enter("referenceMarker"); effects.consume(code3); effects.exit("referenceMarker"); return open; } function open(code3) { if (code3 === 93) { effects.enter("referenceMarker"); effects.consume(code3); effects.exit("referenceMarker"); effects.exit("reference"); return ok4; } return nok(code3); } } module2.exports = labelEnd2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/label-start-image.js var require_label_start_image = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/label-start-image.js"(exports2, module2) { "use strict"; var labelEnd2 = require_label_end(); var labelStartImage2 = { name: "labelStartImage", tokenize: tokenizeLabelStartImage2, resolveAll: labelEnd2.resolveAll }; function tokenizeLabelStartImage2(effects, ok4, nok) { var self2 = this; return start; function start(code3) { effects.enter("labelImage"); effects.enter("labelImageMarker"); effects.consume(code3); effects.exit("labelImageMarker"); return open; } function open(code3) { if (code3 === 91) { effects.enter("labelMarker"); effects.consume(code3); effects.exit("labelMarker"); effects.exit("labelImage"); return after; } return nok(code3); } function after(code3) { return code3 === 94 && /* c8 ignore next */ "_hiddenFootnoteSupport" in self2.parser.constructs ? ( /* c8 ignore next */ nok(code3) ) : ok4(code3); } } module2.exports = labelStartImage2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/label-start-link.js var require_label_start_link = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/label-start-link.js"(exports2, module2) { "use strict"; var labelEnd2 = require_label_end(); var labelStartLink2 = { name: "labelStartLink", tokenize: tokenizeLabelStartLink2, resolveAll: labelEnd2.resolveAll }; function tokenizeLabelStartLink2(effects, ok4, nok) { var self2 = this; return start; function start(code3) { effects.enter("labelLink"); effects.enter("labelMarker"); effects.consume(code3); effects.exit("labelMarker"); effects.exit("labelLink"); return after; } function after(code3) { return code3 === 94 && /* c8 ignore next */ "_hiddenFootnoteSupport" in self2.parser.constructs ? ( /* c8 ignore next */ nok(code3) ) : ok4(code3); } } module2.exports = labelStartLink2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/line-ending.js var require_line_ending = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/line-ending.js"(exports2, module2) { "use strict"; var factorySpace2 = require_factory_space(); var lineEnding2 = { name: "lineEnding", tokenize: tokenizeLineEnding2 }; function tokenizeLineEnding2(effects, ok4) { return start; function start(code3) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return factorySpace2(effects, ok4, "linePrefix"); } } module2.exports = lineEnding2; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/thematic-break.js var require_thematic_break = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/thematic-break.js"(exports2, module2) { "use strict"; var markdownLineEnding2 = require_markdown_line_ending(); var markdownSpace2 = require_markdown_space(); var factorySpace2 = require_factory_space(); var thematicBreak3 = { name: "thematicBreak", tokenize: tokenizeThematicBreak2 }; function tokenizeThematicBreak2(effects, ok4, nok) { var size = 0; var marker; return start; function start(code3) { effects.enter("thematicBreak"); marker = code3; return atBreak(code3); } function atBreak(code3) { if (code3 === marker) { effects.enter("thematicBreakSequence"); return sequence(code3); } if (markdownSpace2(code3)) { return factorySpace2(effects, atBreak, "whitespace")(code3); } if (size < 3 || code3 !== null && !markdownLineEnding2(code3)) { return nok(code3); } effects.exit("thematicBreak"); return ok4(code3); } function sequence(code3) { if (code3 === marker) { effects.consume(code3); size++; return sequence; } effects.exit("thematicBreakSequence"); return atBreak(code3); } } module2.exports = thematicBreak3; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/list.js var require_list = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/list.js"(exports2, module2) { "use strict"; var asciiDigit2 = require_ascii_digit(); var markdownSpace2 = require_markdown_space(); var prefixSize = require_prefix_size(); var sizeChunks = require_size_chunks(); var factorySpace2 = require_factory_space(); var partialBlankLine = require_partial_blank_line(); var thematicBreak3 = require_thematic_break(); var list3 = { name: "list", tokenize: tokenizeListStart2, continuation: { tokenize: tokenizeListContinuation2 }, exit: tokenizeListEnd2 }; var listItemPrefixWhitespaceConstruct2 = { tokenize: tokenizeListItemPrefixWhitespace2, partial: true }; var indentConstruct2 = { tokenize: tokenizeIndent3, partial: true }; function tokenizeListStart2(effects, ok4, nok) { var self2 = this; var initialSize = prefixSize(self2.events, "linePrefix"); var size = 0; return start; function start(code3) { var kind = self2.containerState.type || (code3 === 42 || code3 === 43 || code3 === 45 ? "listUnordered" : "listOrdered"); if (kind === "listUnordered" ? !self2.containerState.marker || code3 === self2.containerState.marker : asciiDigit2(code3)) { if (!self2.containerState.type) { self2.containerState.type = kind; effects.enter(kind, { _container: true }); } if (kind === "listUnordered") { effects.enter("listItemPrefix"); return code3 === 42 || code3 === 45 ? effects.check(thematicBreak3, nok, atMarker)(code3) : atMarker(code3); } if (!self2.interrupt || code3 === 49) { effects.enter("listItemPrefix"); effects.enter("listItemValue"); return inside(code3); } } return nok(code3); } function inside(code3) { if (asciiDigit2(code3) && ++size < 10) { effects.consume(code3); return inside; } if ((!self2.interrupt || size < 2) && (self2.containerState.marker ? code3 === self2.containerState.marker : code3 === 41 || code3 === 46)) { effects.exit("listItemValue"); return atMarker(code3); } return nok(code3); } function atMarker(code3) { effects.enter("listItemMarker"); effects.consume(code3); effects.exit("listItemMarker"); self2.containerState.marker = self2.containerState.marker || code3; return effects.check( partialBlankLine, // Can’t be empty when interrupting. self2.interrupt ? nok : onBlank, effects.attempt( listItemPrefixWhitespaceConstruct2, endOfPrefix, otherPrefix ) ); } function onBlank(code3) { self2.containerState.initialBlankLine = true; initialSize++; return endOfPrefix(code3); } function otherPrefix(code3) { if (markdownSpace2(code3)) { effects.enter("listItemPrefixWhitespace"); effects.consume(code3); effects.exit("listItemPrefixWhitespace"); return endOfPrefix; } return nok(code3); } function endOfPrefix(code3) { self2.containerState.size = initialSize + sizeChunks(self2.sliceStream(effects.exit("listItemPrefix"))); return ok4(code3); } } function tokenizeListContinuation2(effects, ok4, nok) { var self2 = this; self2.containerState._closeFlow = void 0; return effects.check(partialBlankLine, onBlank, notBlank); function onBlank(code3) { self2.containerState.furtherBlankLines = self2.containerState.furtherBlankLines || self2.containerState.initialBlankLine; return factorySpace2( effects, ok4, "listItemIndent", self2.containerState.size + 1 )(code3); } function notBlank(code3) { if (self2.containerState.furtherBlankLines || !markdownSpace2(code3)) { self2.containerState.furtherBlankLines = self2.containerState.initialBlankLine = void 0; return notInCurrentItem(code3); } self2.containerState.furtherBlankLines = self2.containerState.initialBlankLine = void 0; return effects.attempt(indentConstruct2, ok4, notInCurrentItem)(code3); } function notInCurrentItem(code3) { self2.containerState._closeFlow = true; self2.interrupt = void 0; return factorySpace2( effects, effects.attempt(list3, ok4, nok), "linePrefix", self2.parser.constructs.disable.null.indexOf("codeIndented") > -1 ? void 0 : 4 )(code3); } } function tokenizeIndent3(effects, ok4, nok) { var self2 = this; return factorySpace2( effects, afterPrefix, "listItemIndent", self2.containerState.size + 1 ); function afterPrefix(code3) { return prefixSize(self2.events, "listItemIndent") === self2.containerState.size ? ok4(code3) : nok(code3); } } function tokenizeListEnd2(effects) { effects.exit(this.containerState.type); } function tokenizeListItemPrefixWhitespace2(effects, ok4, nok) { var self2 = this; return factorySpace2( effects, afterPrefix, "listItemPrefixWhitespace", self2.parser.constructs.disable.null.indexOf("codeIndented") > -1 ? void 0 : 4 + 1 ); function afterPrefix(code3) { return markdownSpace2(code3) || !prefixSize(self2.events, "listItemPrefixWhitespace") ? nok(code3) : ok4(code3); } } module2.exports = list3; } }); // node_modules/mml-react/node_modules/micromark/dist/tokenize/setext-underline.js var require_setext_underline = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/tokenize/setext-underline.js"(exports2, module2) { "use strict"; var markdownLineEnding2 = require_markdown_line_ending(); var shallow = require_shallow(); var factorySpace2 = require_factory_space(); var setextUnderline2 = { name: "setextUnderline", tokenize: tokenizeSetextUnderline2, resolveTo: resolveToSetextUnderline2 }; function resolveToSetextUnderline2(events, context) { var index3 = events.length; var content3; var text5; var definition2; var heading2; while (index3--) { if (events[index3][0] === "enter") { if (events[index3][1].type === "content") { content3 = index3; break; } if (events[index3][1].type === "paragraph") { text5 = index3; } } else { if (events[index3][1].type === "content") { events.splice(index3, 1); } if (!definition2 && events[index3][1].type === "definition") { definition2 = index3; } } } heading2 = { type: "setextHeading", start: shallow(events[text5][1].start), end: shallow(events[events.length - 1][1].end) }; events[text5][1].type = "setextHeadingText"; if (definition2) { events.splice(text5, 0, ["enter", heading2, context]); events.splice(definition2 + 1, 0, ["exit", events[content3][1], context]); events[content3][1].end = shallow(events[definition2][1].end); } else { events[content3][1] = heading2; } events.push(["exit", heading2, context]); return events; } function tokenizeSetextUnderline2(effects, ok4, nok) { var self2 = this; var index3 = self2.events.length; var marker; var paragraph2; while (index3--) { if (self2.events[index3][1].type !== "lineEnding" && self2.events[index3][1].type !== "linePrefix" && self2.events[index3][1].type !== "content") { paragraph2 = self2.events[index3][1].type === "paragraph"; break; } } return start; function start(code3) { if (!self2.lazy && (self2.interrupt || paragraph2)) { effects.enter("setextHeadingLine"); effects.enter("setextHeadingLineSequence"); marker = code3; return closingSequence(code3); } return nok(code3); } function closingSequence(code3) { if (code3 === marker) { effects.consume(code3); return closingSequence; } effects.exit("setextHeadingLineSequence"); return factorySpace2(effects, closingSequenceEnd, "lineSuffix")(code3); } function closingSequenceEnd(code3) { if (code3 === null || markdownLineEnding2(code3)) { effects.exit("setextHeadingLine"); return ok4(code3); } return nok(code3); } } module2.exports = setextUnderline2; } }); // node_modules/mml-react/node_modules/micromark/dist/constructs.js var require_constructs = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/constructs.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); var text$1 = require_text(); var attention2 = require_attention(); var autolink2 = require_autolink(); var blockQuote2 = require_block_quote(); var characterEscape2 = require_character_escape(); var characterReference2 = require_character_reference(); var codeFenced2 = require_code_fenced(); var codeIndented2 = require_code_indented(); var codeText2 = require_code_text(); var definition2 = require_definition(); var hardBreakEscape2 = require_hard_break_escape(); var headingAtx2 = require_heading_atx(); var htmlFlow2 = require_html_flow(); var htmlText2 = require_html_text(); var labelEnd2 = require_label_end(); var labelStartImage2 = require_label_start_image(); var labelStartLink2 = require_label_start_link(); var lineEnding2 = require_line_ending(); var list3 = require_list(); var setextUnderline2 = require_setext_underline(); var thematicBreak3 = require_thematic_break(); var document4 = { 42: list3, // Asterisk 43: list3, // Plus sign 45: list3, // Dash 48: list3, // 0 49: list3, // 1 50: list3, // 2 51: list3, // 3 52: list3, // 4 53: list3, // 5 54: list3, // 6 55: list3, // 7 56: list3, // 8 57: list3, // 9 62: blockQuote2 // Greater than }; var contentInitial2 = { 91: definition2 // Left square bracket }; var flowInitial2 = { "-2": codeIndented2, // Horizontal tab "-1": codeIndented2, // Virtual space 32: codeIndented2 // Space }; var flow3 = { 35: headingAtx2, // Number sign 42: thematicBreak3, // Asterisk 45: [setextUnderline2, thematicBreak3], // Dash 60: htmlFlow2, // Less than 61: setextUnderline2, // Equals to 95: thematicBreak3, // Underscore 96: codeFenced2, // Grave accent 126: codeFenced2 // Tilde }; var string3 = { 38: characterReference2, // Ampersand 92: characterEscape2 // Backslash }; var text5 = { "-5": lineEnding2, // Carriage return "-4": lineEnding2, // Line feed "-3": lineEnding2, // Carriage return + line feed 33: labelStartImage2, // Exclamation mark 38: characterReference2, // Ampersand 42: attention2, // Asterisk 60: [autolink2, htmlText2], // Less than 91: labelStartLink2, // Left square bracket 92: [hardBreakEscape2, characterEscape2], // Backslash 93: labelEnd2, // Right square bracket 95: attention2, // Underscore 96: codeText2 // Grave accent }; var insideSpan2 = { null: [attention2, text$1.resolver] }; var disable2 = { null: [] }; exports2.contentInitial = contentInitial2; exports2.disable = disable2; exports2.document = document4; exports2.flow = flow3; exports2.flowInitial = flowInitial2; exports2.insideSpan = insideSpan2; exports2.string = string3; exports2.text = text5; } }); // node_modules/mml-react/node_modules/micromark/dist/parse.js var require_parse = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/parse.js"(exports2, module2) { "use strict"; var content3 = require_content(); var document4 = require_document(); var flow3 = require_flow(); var text5 = require_text(); var combineExtensions2 = require_combine_extensions(); var createTokenizer2 = require_create_tokenizer(); var miniflat = require_miniflat(); var constructs2 = require_constructs(); function parse2(options) { var settings = options || {}; var parser = { defined: [], constructs: combineExtensions2( [constructs2].concat(miniflat(settings.extensions)) ), content: create2(content3), document: create2(document4), flow: create2(flow3), string: create2(text5.string), text: create2(text5.text) }; return parser; function create2(initializer) { return creator; function creator(from) { return createTokenizer2(parser, initializer, from); } } } module2.exports = parse2; } }); // node_modules/mml-react/node_modules/micromark/dist/preprocess.js var require_preprocess = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/preprocess.js"(exports2, module2) { "use strict"; var search2 = /[\0\t\n\r]/g; function preprocess2() { var start = true; var column = 1; var buffer2 = ""; var atCarriageReturn; return preprocessor; function preprocessor(value, encoding, end) { var chunks = []; var match; var next; var startPosition; var endPosition; var code3; value = buffer2 + value.toString(encoding); startPosition = 0; buffer2 = ""; if (start) { if (value.charCodeAt(0) === 65279) { startPosition++; } start = void 0; } while (startPosition < value.length) { search2.lastIndex = startPosition; match = search2.exec(value); endPosition = match ? match.index : value.length; code3 = value.charCodeAt(endPosition); if (!match) { buffer2 = value.slice(startPosition); break; } if (code3 === 10 && startPosition === endPosition && atCarriageReturn) { chunks.push(-3); atCarriageReturn = void 0; } else { if (atCarriageReturn) { chunks.push(-5); atCarriageReturn = void 0; } if (startPosition < endPosition) { chunks.push(value.slice(startPosition, endPosition)); column += endPosition - startPosition; } if (code3 === 0) { chunks.push(65533); column++; } else if (code3 === 9) { next = Math.ceil(column / 4) * 4; chunks.push(-2); while (column++ < next) chunks.push(-1); } else if (code3 === 10) { chunks.push(-4); column = 1; } else { atCarriageReturn = true; column = 1; } } startPosition = endPosition + 1; } if (end) { if (atCarriageReturn) chunks.push(-5); if (buffer2) chunks.push(buffer2); chunks.push(null); } return chunks; } } module2.exports = preprocess2; } }); // node_modules/mml-react/node_modules/micromark/dist/postprocess.js var require_postprocess = __commonJS({ "node_modules/mml-react/node_modules/micromark/dist/postprocess.js"(exports2, module2) { "use strict"; var subtokenize2 = require_subtokenize(); function postprocess2(events) { while (!subtokenize2(events)) { } return events; } module2.exports = postprocess2; } }); // node_modules/mml-react/node_modules/mdast-util-from-markdown/dist/index.js var require_dist = __commonJS({ "node_modules/mml-react/node_modules/mdast-util-from-markdown/dist/index.js"(exports2, module2) { "use strict"; module2.exports = fromMarkdown2; var toString2 = require_mdast_util_to_string(); var assign = require_assign(); var own10 = require_has_own_property(); var normalizeIdentifier2 = require_normalize_identifier(); var safeFromInt = require_safe_from_int(); var parser = require_parse(); var preprocessor = require_preprocess(); var postprocess2 = require_postprocess(); var decode2 = require_decode_entity(); var stringifyPosition3 = require_unist_util_stringify_position(); function fromMarkdown2(value, encoding, options) { if (typeof encoding !== "string") { options = encoding; encoding = void 0; } return compiler2(options)( postprocess2( parser(options).document().write(preprocessor()(value, encoding, true)) ) ); } function compiler2(options) { var settings = options || {}; var config = configure2( { transforms: [], canContainEols: [ "emphasis", "fragment", "heading", "paragraph", "strong" ], enter: { autolink: opener(link2), autolinkProtocol: onenterdata, autolinkEmail: onenterdata, atxHeading: opener(heading2), blockQuote: opener(blockQuote2), characterEscape: onenterdata, characterReference: onenterdata, codeFenced: opener(codeFlow), codeFencedFenceInfo: buffer2, codeFencedFenceMeta: buffer2, codeIndented: opener(codeFlow, buffer2), codeText: opener(codeText2, buffer2), codeTextData: onenterdata, data: onenterdata, codeFlowValue: onenterdata, definition: opener(definition2), definitionDestinationString: buffer2, definitionLabelString: buffer2, definitionTitleString: buffer2, emphasis: opener(emphasis2), hardBreakEscape: opener(hardBreak2), hardBreakTrailing: opener(hardBreak2), htmlFlow: opener(html4, buffer2), htmlFlowData: onenterdata, htmlText: opener(html4, buffer2), htmlTextData: onenterdata, image: opener(image2), label: buffer2, link: opener(link2), listItem: opener(listItem3), listItemValue: onenterlistitemvalue, listOrdered: opener(list3, onenterlistordered), listUnordered: opener(list3), paragraph: opener(paragraph2), reference: onenterreference, referenceString: buffer2, resourceDestinationString: buffer2, resourceTitleString: buffer2, setextHeading: opener(heading2), strong: opener(strong2), thematicBreak: opener(thematicBreak3) }, exit: { atxHeading: closer(), atxHeadingSequence: onexitatxheadingsequence, autolink: closer(), autolinkEmail: onexitautolinkemail, autolinkProtocol: onexitautolinkprotocol, blockQuote: closer(), characterEscapeValue: onexitdata, characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, characterReferenceMarkerNumeric: onexitcharacterreferencemarker, characterReferenceValue: onexitcharacterreferencevalue, codeFenced: closer(onexitcodefenced), codeFencedFence: onexitcodefencedfence, codeFencedFenceInfo: onexitcodefencedfenceinfo, codeFencedFenceMeta: onexitcodefencedfencemeta, codeFlowValue: onexitdata, codeIndented: closer(onexitcodeindented), codeText: closer(onexitcodetext), codeTextData: onexitdata, data: onexitdata, definition: closer(), definitionDestinationString: onexitdefinitiondestinationstring, definitionLabelString: onexitdefinitionlabelstring, definitionTitleString: onexitdefinitiontitlestring, emphasis: closer(), hardBreakEscape: closer(onexithardbreak), hardBreakTrailing: closer(onexithardbreak), htmlFlow: closer(onexithtmlflow), htmlFlowData: onexitdata, htmlText: closer(onexithtmltext), htmlTextData: onexitdata, image: closer(onexitimage), label: onexitlabel, labelText: onexitlabeltext, lineEnding: onexitlineending, link: closer(onexitlink), listItem: closer(), listOrdered: closer(), listUnordered: closer(), paragraph: closer(), referenceString: onexitreferencestring, resourceDestinationString: onexitresourcedestinationstring, resourceTitleString: onexitresourcetitlestring, resource: onexitresource, setextHeading: closer(onexitsetextheading), setextHeadingLineSequence: onexitsetextheadinglinesequence, setextHeadingText: onexitsetextheadingtext, strong: closer(), thematicBreak: closer() } }, settings.mdastExtensions || [] ); var data = {}; return compile; function compile(events) { var tree = { type: "root", children: [] }; var stack = [tree]; var tokenStack = []; var listStack = []; var index3 = -1; var handler; var listStart; var context = { stack, tokenStack, config, enter, exit: exit3, buffer: buffer2, resume, setData, getData }; while (++index3 < events.length) { if (events[index3][1].type === "listOrdered" || events[index3][1].type === "listUnordered") { if (events[index3][0] === "enter") { listStack.push(index3); } else { listStart = listStack.pop(index3); index3 = prepareList(events, listStart, index3); } } } index3 = -1; while (++index3 < events.length) { handler = config[events[index3][0]]; if (own10.call(handler, events[index3][1].type)) { handler[events[index3][1].type].call( assign({ sliceSerialize: events[index3][2].sliceSerialize }, context), events[index3][1] ); } } if (tokenStack.length) { throw new Error( "Cannot close document, a token (`" + tokenStack[tokenStack.length - 1].type + "`, " + stringifyPosition3({ start: tokenStack[tokenStack.length - 1].start, end: tokenStack[tokenStack.length - 1].end }) + ") is still open" ); } tree.position = { start: point5( events.length ? events[0][1].start : { line: 1, column: 1, offset: 0 } ), end: point5( events.length ? events[events.length - 2][1].end : { line: 1, column: 1, offset: 0 } ) }; index3 = -1; while (++index3 < config.transforms.length) { tree = config.transforms[index3](tree) || tree; } return tree; } function prepareList(events, start, length) { var index3 = start - 1; var containerBalance = -1; var listSpread = false; var listItem4; var tailIndex; var lineIndex; var tailEvent; var event; var firstBlankLineIndex; var atMarker; while (++index3 <= length) { event = events[index3]; if (event[1].type === "listUnordered" || event[1].type === "listOrdered" || event[1].type === "blockQuote") { if (event[0] === "enter") { containerBalance++; } else { containerBalance--; } atMarker = void 0; } else if (event[1].type === "lineEndingBlank") { if (event[0] === "enter") { if (listItem4 && !atMarker && !containerBalance && !firstBlankLineIndex) { firstBlankLineIndex = index3; } atMarker = void 0; } } else if (event[1].type === "linePrefix" || event[1].type === "listItemValue" || event[1].type === "listItemMarker" || event[1].type === "listItemPrefix" || event[1].type === "listItemPrefixWhitespace") { } else { atMarker = void 0; } if (!containerBalance && event[0] === "enter" && event[1].type === "listItemPrefix" || containerBalance === -1 && event[0] === "exit" && (event[1].type === "listUnordered" || event[1].type === "listOrdered")) { if (listItem4) { tailIndex = index3; lineIndex = void 0; while (tailIndex--) { tailEvent = events[tailIndex]; if (tailEvent[1].type === "lineEnding" || tailEvent[1].type === "lineEndingBlank") { if (tailEvent[0] === "exit") continue; if (lineIndex) { events[lineIndex][1].type = "lineEndingBlank"; listSpread = true; } tailEvent[1].type = "lineEnding"; lineIndex = tailIndex; } else if (tailEvent[1].type === "linePrefix" || tailEvent[1].type === "blockQuotePrefix" || tailEvent[1].type === "blockQuotePrefixWhitespace" || tailEvent[1].type === "blockQuoteMarker" || tailEvent[1].type === "listItemIndent") { } else { break; } } if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) { listItem4._spread = true; } listItem4.end = point5( lineIndex ? events[lineIndex][1].start : event[1].end ); events.splice(lineIndex || index3, 0, ["exit", listItem4, event[2]]); index3++; length++; } if (event[1].type === "listItemPrefix") { listItem4 = { type: "listItem", _spread: false, start: point5(event[1].start) }; events.splice(index3, 0, ["enter", listItem4, event[2]]); index3++; length++; firstBlankLineIndex = void 0; atMarker = true; } } } events[start][1]._spread = listSpread; return length; } function setData(key, value) { data[key] = value; } function getData(key) { return data[key]; } function point5(d) { return { line: d.line, column: d.column, offset: d.offset }; } function opener(create2, and) { return open; function open(token) { enter.call(this, create2(token), token); if (and) and.call(this, token); } } function buffer2() { this.stack.push({ type: "fragment", children: [] }); } function enter(node2, token) { this.stack[this.stack.length - 1].children.push(node2); this.stack.push(node2); this.tokenStack.push(token); node2.position = { start: point5(token.start) }; return node2; } function closer(and) { return close; function close(token) { if (and) and.call(this, token); exit3.call(this, token); } } function exit3(token) { var node2 = this.stack.pop(); var open = this.tokenStack.pop(); if (!open) { throw new Error( "Cannot close `" + token.type + "` (" + stringifyPosition3({ start: token.start, end: token.end }) + "): it\u2019s not open" ); } else if (open.type !== token.type) { throw new Error( "Cannot close `" + token.type + "` (" + stringifyPosition3({ start: token.start, end: token.end }) + "): a different token (`" + open.type + "`, " + stringifyPosition3({ start: open.start, end: open.end }) + ") is open" ); } node2.position.end = point5(token.end); return node2; } function resume() { return toString2(this.stack.pop()); } function onenterlistordered() { setData("expectingFirstListItemValue", true); } function onenterlistitemvalue(token) { if (getData("expectingFirstListItemValue")) { this.stack[this.stack.length - 2].start = parseInt( this.sliceSerialize(token), 10 ); setData("expectingFirstListItemValue"); } } function onexitcodefencedfenceinfo() { var data2 = this.resume(); this.stack[this.stack.length - 1].lang = data2; } function onexitcodefencedfencemeta() { var data2 = this.resume(); this.stack[this.stack.length - 1].meta = data2; } function onexitcodefencedfence() { if (getData("flowCodeInside")) return; this.buffer(); setData("flowCodeInside", true); } function onexitcodefenced() { var data2 = this.resume(); this.stack[this.stack.length - 1].value = data2.replace( /^(\r?\n|\r)|(\r?\n|\r)$/g, "" ); setData("flowCodeInside"); } function onexitcodeindented() { var data2 = this.resume(); this.stack[this.stack.length - 1].value = data2; } function onexitdefinitionlabelstring(token) { var label = this.resume(); this.stack[this.stack.length - 1].label = label; this.stack[this.stack.length - 1].identifier = normalizeIdentifier2( this.sliceSerialize(token) ).toLowerCase(); } function onexitdefinitiontitlestring() { var data2 = this.resume(); this.stack[this.stack.length - 1].title = data2; } function onexitdefinitiondestinationstring() { var data2 = this.resume(); this.stack[this.stack.length - 1].url = data2; } function onexitatxheadingsequence(token) { if (!this.stack[this.stack.length - 1].depth) { this.stack[this.stack.length - 1].depth = this.sliceSerialize( token ).length; } } function onexitsetextheadingtext() { setData("setextHeadingSlurpLineEnding", true); } function onexitsetextheadinglinesequence(token) { this.stack[this.stack.length - 1].depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2; } function onexitsetextheading() { setData("setextHeadingSlurpLineEnding"); } function onenterdata(token) { var siblings = this.stack[this.stack.length - 1].children; var tail = siblings[siblings.length - 1]; if (!tail || tail.type !== "text") { tail = text5(); tail.position = { start: point5(token.start) }; this.stack[this.stack.length - 1].children.push(tail); } this.stack.push(tail); } function onexitdata(token) { var tail = this.stack.pop(); tail.value += this.sliceSerialize(token); tail.position.end = point5(token.end); } function onexitlineending(token) { var context = this.stack[this.stack.length - 1]; if (getData("atHardBreak")) { context.children[context.children.length - 1].position.end = point5( token.end ); setData("atHardBreak"); return; } if (!getData("setextHeadingSlurpLineEnding") && config.canContainEols.indexOf(context.type) > -1) { onenterdata.call(this, token); onexitdata.call(this, token); } } function onexithardbreak() { setData("atHardBreak", true); } function onexithtmlflow() { var data2 = this.resume(); this.stack[this.stack.length - 1].value = data2; } function onexithtmltext() { var data2 = this.resume(); this.stack[this.stack.length - 1].value = data2; } function onexitcodetext() { var data2 = this.resume(); this.stack[this.stack.length - 1].value = data2; } function onexitlink() { var context = this.stack[this.stack.length - 1]; if (getData("inReference")) { context.type += "Reference"; context.referenceType = getData("referenceType") || "shortcut"; delete context.url; delete context.title; } else { delete context.identifier; delete context.label; delete context.referenceType; } setData("referenceType"); } function onexitimage() { var context = this.stack[this.stack.length - 1]; if (getData("inReference")) { context.type += "Reference"; context.referenceType = getData("referenceType") || "shortcut"; delete context.url; delete context.title; } else { delete context.identifier; delete context.label; delete context.referenceType; } setData("referenceType"); } function onexitlabeltext(token) { this.stack[this.stack.length - 2].identifier = normalizeIdentifier2( this.sliceSerialize(token) ).toLowerCase(); } function onexitlabel() { var fragment = this.stack[this.stack.length - 1]; var value = this.resume(); this.stack[this.stack.length - 1].label = value; setData("inReference", true); if (this.stack[this.stack.length - 1].type === "link") { this.stack[this.stack.length - 1].children = fragment.children; } else { this.stack[this.stack.length - 1].alt = value; } } function onexitresourcedestinationstring() { var data2 = this.resume(); this.stack[this.stack.length - 1].url = data2; } function onexitresourcetitlestring() { var data2 = this.resume(); this.stack[this.stack.length - 1].title = data2; } function onexitresource() { setData("inReference"); } function onenterreference() { setData("referenceType", "collapsed"); } function onexitreferencestring(token) { var label = this.resume(); this.stack[this.stack.length - 1].label = label; this.stack[this.stack.length - 1].identifier = normalizeIdentifier2( this.sliceSerialize(token) ).toLowerCase(); setData("referenceType", "full"); } function onexitcharacterreferencemarker(token) { setData("characterReferenceType", token.type); } function onexitcharacterreferencevalue(token) { var data2 = this.sliceSerialize(token); var type = getData("characterReferenceType"); var value; var tail; if (type) { value = safeFromInt( data2, type === "characterReferenceMarkerNumeric" ? 10 : 16 ); setData("characterReferenceType"); } else { value = decode2(data2); } tail = this.stack.pop(); tail.value += value; tail.position.end = point5(token.end); } function onexitautolinkprotocol(token) { onexitdata.call(this, token); this.stack[this.stack.length - 1].url = this.sliceSerialize(token); } function onexitautolinkemail(token) { onexitdata.call(this, token); this.stack[this.stack.length - 1].url = "mailto:" + this.sliceSerialize(token); } function blockQuote2() { return { type: "blockquote", children: [] }; } function codeFlow() { return { type: "code", lang: null, meta: null, value: "" }; } function codeText2() { return { type: "inlineCode", value: "" }; } function definition2() { return { type: "definition", identifier: "", label: null, title: null, url: "" }; } function emphasis2() { return { type: "emphasis", children: [] }; } function heading2() { return { type: "heading", depth: void 0, children: [] }; } function hardBreak2() { return { type: "break" }; } function html4() { return { type: "html", value: "" }; } function image2() { return { type: "image", title: null, url: "", alt: null }; } function link2() { return { type: "link", title: null, url: "", children: [] }; } function list3(token) { return { type: "list", ordered: token.type === "listOrdered", start: null, spread: token._spread, children: [] }; } function listItem3(token) { return { type: "listItem", spread: token._spread, checked: null, children: [] }; } function paragraph2() { return { type: "paragraph", children: [] }; } function strong2() { return { type: "strong", children: [] }; } function text5() { return { type: "text", value: "" }; } function thematicBreak3() { return { type: "thematicBreak" }; } } function configure2(config, extensions) { var index3 = -1; while (++index3 < extensions.length) { extension2(config, extensions[index3]); } return config; } function extension2(config, extension3) { var key; var left; for (key in extension3) { left = own10.call(config, key) ? config[key] : config[key] = {}; if (key === "canContainEols" || key === "transforms") { config[key] = [].concat(left, extension3[key]); } else { Object.assign(left, extension3[key]); } } } } }); // node_modules/mml-react/node_modules/mdast-util-from-markdown/index.js var require_mdast_util_from_markdown = __commonJS({ "node_modules/mml-react/node_modules/mdast-util-from-markdown/index.js"(exports2, module2) { "use strict"; module2.exports = require_dist(); } }); // node_modules/mml-react/node_modules/remark-parse/index.js var require_remark_parse = __commonJS({ "node_modules/mml-react/node_modules/remark-parse/index.js"(exports2, module2) { "use strict"; module2.exports = parse2; var fromMarkdown2 = require_mdast_util_from_markdown(); function parse2(options) { var self2 = this; this.Parser = parse3; function parse3(doc) { return fromMarkdown2( doc, Object.assign({}, self2.data("settings"), options, { // Note: these options are not in the readme. // The goal is for them to be set by plugins on `data` instead of being // passed by users. extensions: self2.data("micromarkExtensions") || [], mdastExtensions: self2.data("fromMarkdownExtensions") || [] }) ); } } } }); // node_modules/mdast-add-list-metadata/node_modules/unist-util-visit-parents/index.js var require_unist_util_visit_parents = __commonJS({ "node_modules/mdast-add-list-metadata/node_modules/unist-util-visit-parents/index.js"(exports2, module2) { "use strict"; module2.exports = visitParents4; function visitParents4(tree, type, visitor3) { var stack = []; if (typeof type === "function") { visitor3 = type; type = null; } one3(tree); function one3(node2) { var result; if (!type || node2.type === type) { result = visitor3(node2, stack.concat()); } if (node2.children && result !== false) { return all3(node2.children, node2); } return result; } function all3(children, parent) { var length = children.length; var index3 = -1; var child; stack.push(parent); while (++index3 < length) { child = children[index3]; if (child && one3(child) === false) { return false; } } stack.pop(); return true; } } } }); // node_modules/mdast-add-list-metadata/index.js var require_mdast_add_list_metadata = __commonJS({ "node_modules/mdast-add-list-metadata/index.js"(exports2, module2) { var visitWithParents = require_unist_util_visit_parents(); function addListMetadata() { return function(ast) { visitWithParents(ast, "list", function(listNode, parents) { var depth = 0, i, n; for (i = 0, n = parents.length; i < n; i++) { if (parents[i].type === "list") depth += 1; } for (i = 0, n = listNode.children.length; i < n; i++) { var child = listNode.children[i]; child.index = i; child.ordered = listNode.ordered; } listNode.depth = depth; }); return ast; }; } module2.exports = addListMetadata; } }); // node_modules/mml-react/node_modules/unist-util-is/convert.js var require_convert = __commonJS({ "node_modules/mml-react/node_modules/unist-util-is/convert.js"(exports2, module2) { "use strict"; module2.exports = convert4; function convert4(test3) { if (test3 == null) { return ok4; } if (typeof test3 === "string") { return typeFactory4(test3); } if (typeof test3 === "object") { return "length" in test3 ? anyFactory5(test3) : allFactory(test3); } if (typeof test3 === "function") { return test3; } throw new Error("Expected function, string, or object as test"); } function allFactory(test3) { return all3; function all3(node2) { var key; for (key in test3) { if (node2[key] !== test3[key]) return false; } return true; } } function anyFactory5(tests) { var checks2 = []; var index3 = -1; while (++index3 < tests.length) { checks2[index3] = convert4(tests[index3]); } return any; function any() { var index4 = -1; while (++index4 < checks2.length) { if (checks2[index4].apply(this, arguments)) { return true; } } return false; } } function typeFactory4(test3) { return type; function type(node2) { return Boolean(node2 && node2.type === test3); } } function ok4() { return true; } } }); // node_modules/mml-react/node_modules/unist-util-visit-parents/color.js var require_color = __commonJS({ "node_modules/mml-react/node_modules/unist-util-visit-parents/color.js"(exports2, module2) { module2.exports = color4; function color4(d) { return "\x1B[33m" + d + "\x1B[39m"; } } }); // node_modules/mml-react/node_modules/unist-util-visit-parents/index.js var require_unist_util_visit_parents2 = __commonJS({ "node_modules/mml-react/node_modules/unist-util-visit-parents/index.js"(exports2, module2) { "use strict"; module2.exports = visitParents4; var convert4 = require_convert(); var color4 = require_color(); var CONTINUE4 = true; var SKIP4 = "skip"; var EXIT4 = false; visitParents4.CONTINUE = CONTINUE4; visitParents4.SKIP = SKIP4; visitParents4.EXIT = EXIT4; function visitParents4(tree, test3, visitor3, reverse) { var step; var is4; if (typeof test3 === "function" && typeof visitor3 !== "function") { reverse = visitor3; visitor3 = test3; test3 = null; } is4 = convert4(test3); step = reverse ? -1 : 1; factory(tree, null, [])(); function factory(node2, index3, parents) { var value = typeof node2 === "object" && node2 !== null ? node2 : {}; var name; if (typeof value.type === "string") { name = typeof value.tagName === "string" ? value.tagName : typeof value.name === "string" ? value.name : void 0; visit5.displayName = "node (" + color4(value.type + (name ? "<" + name + ">" : "")) + ")"; } return visit5; function visit5() { var grandparents = parents.concat(node2); var result = []; var subresult; var offset; if (!test3 || is4(node2, index3, parents[parents.length - 1] || null)) { result = toResult4(visitor3(node2, parents)); if (result[0] === EXIT4) { return result; } } if (node2.children && result[0] !== SKIP4) { offset = (reverse ? node2.children.length : -1) + step; while (offset > -1 && offset < node2.children.length) { subresult = factory(node2.children[offset], offset, grandparents)(); if (subresult[0] === EXIT4) { return subresult; } offset = typeof subresult[1] === "number" ? subresult[1] : offset + step; } } return result; } } } function toResult4(value) { if (value !== null && typeof value === "object" && "length" in value) { return value; } if (typeof value === "number") { return [CONTINUE4, value]; } return [value]; } } }); // node_modules/mml-react/node_modules/unist-util-visit/index.js var require_unist_util_visit = __commonJS({ "node_modules/mml-react/node_modules/unist-util-visit/index.js"(exports2, module2) { "use strict"; module2.exports = visit5; var visitParents4 = require_unist_util_visit_parents2(); var CONTINUE4 = visitParents4.CONTINUE; var SKIP4 = visitParents4.SKIP; var EXIT4 = visitParents4.EXIT; visit5.CONTINUE = CONTINUE4; visit5.SKIP = SKIP4; visit5.EXIT = EXIT4; function visit5(tree, test3, visitor3, reverse) { if (typeof test3 === "function" && typeof visitor3 !== "function") { reverse = visitor3; visitor3 = test3; test3 = null; } visitParents4(tree, test3, overload, reverse); function overload(node2, parents) { var parent = parents[parents.length - 1]; var index3 = parent ? parent.children.indexOf(node2) : null; return visitor3(node2, index3, parent); } } } }); // node_modules/mml-react/node_modules/react-markdown/lib/plugins/naive-html.js var require_naive_html = __commonJS({ "node_modules/mml-react/node_modules/react-markdown/lib/plugins/naive-html.js"(exports2, module2) { "use strict"; var visit5 = require_unist_util_visit(); var type = "virtualHtml"; var selfClosingRe = /^<(area|base|br|col|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)\s*\/?>$/i; var simpleTagRe = /^<(\/?)([a-z]+)\s*>$/; module2.exports = function(tree) { var open; var currentParent; visit5( tree, "html", function(node2, index3, parent) { if (currentParent !== parent) { open = []; currentParent = parent; } var selfClosing = getSelfClosing(node2); if (selfClosing) { parent.children.splice(index3, 1, { type, tag: selfClosing, position: node2.position }); return true; } var current = getSimpleTag(node2, parent); if (!current) { return true; } var matching = findAndPull(open, current.tag); if (matching) { parent.children.splice(index3, 0, virtual(current, matching, parent)); } else if (!current.opening) { open.push(current); } return true; }, true // Iterate in reverse ); return tree; }; function findAndPull(open, matchingTag) { var i = open.length; while (i--) { if (open[i].tag === matchingTag) { return open.splice(i, 1)[0]; } } return false; } function getSimpleTag(node2, parent) { var match = node2.value.match(simpleTagRe); return match ? { tag: match[2], opening: !match[1], node: node2 } : false; } function getSelfClosing(node2) { var match = node2.value.match(selfClosingRe); return match ? match[1] : false; } function virtual(fromNode, toNode, parent) { var fromIndex = parent.children.indexOf(fromNode.node); var toIndex = parent.children.indexOf(toNode.node); var extracted = parent.children.splice(fromIndex, toIndex - fromIndex + 1); var children = extracted.slice(1, -1); return { type, children, tag: fromNode.tag, position: { start: fromNode.node.position.start, end: toNode.node.position.end, indent: [] } }; } } }); // node_modules/mml-react/node_modules/react-markdown/lib/plugins/disallow-node.js var require_disallow_node = __commonJS({ "node_modules/mml-react/node_modules/react-markdown/lib/plugins/disallow-node.js"(exports2) { "use strict"; var visit5 = require_unist_util_visit(); var splice2 = [].splice; exports2.ofType = function(types, mode) { return ifNotMatch(allow, mode); function allow(node2, index3, parent) { return !types.includes(node2.type); } }; exports2.ifNotMatch = ifNotMatch; function ifNotMatch(allow, mode) { return transform3; function transform3(tree) { visit5(tree, filter); return tree; } function filter(node2, index3, parent) { if (parent && !allow(node2, index3, parent)) { var parameters = [index3, 1]; if (mode === "unwrap" && node2.children) { parameters = parameters.concat(node2.children); } splice2.apply(parent.children, parameters); return index3; } } } } }); // node_modules/mml-react/node_modules/react-markdown/lib/ast-to-react.js var require_ast_to_react = __commonJS({ "node_modules/mml-react/node_modules/react-markdown/lib/ast-to-react.js"(exports2, module2) { "use strict"; var React204 = require("react"); var xtend = require_immutable(); var ReactIs2 = require("react-is"); function astToReact(node2, options) { var parent = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; var index3 = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 0; var renderer = options.renderers[node2.type]; if (!node2.position) { node2.position = { start: { line: null, column: null, offset: null }, end: { line: null, column: null, offset: null } }; } var pos = node2.position.start; var key = [node2.type, pos.line, pos.column, index3].join("-"); if (!ReactIs2.isValidElementType(renderer)) { throw new Error("Renderer for type `".concat(node2.type, "` not defined or is not renderable")); } var nodeProps = getNodeProps(node2, key, options, renderer, parent, index3); return React204.createElement(renderer, nodeProps, nodeProps.children || resolveChildren() || void 0); function resolveChildren() { return node2.children && node2.children.map(function(childNode, i) { return astToReact(childNode, options, { node: node2, props: nodeProps }, i); }); } } function getNodeProps(node2, key, opts, renderer, parent, index3) { var props = { key }; var isSimpleRenderer = typeof renderer === "string" || renderer === React204.Fragment; if (opts.sourcePos && node2.position) { props["data-sourcepos"] = flattenPosition2(node2.position); } if (opts.rawSourcePos && !isSimpleRenderer) { props.sourcePosition = node2.position; } if (opts.includeNodeIndex && parent.node && parent.node.children && !isSimpleRenderer) { props.index = parent.node.children.indexOf(node2); props.parentChildCount = parent.node.children.length; } var ref = node2.identifier !== null && node2.identifier !== void 0 ? ( /* istanbul ignore next - plugins could inject an undefined reference. */ opts.definitions[node2.identifier.toUpperCase()] || {} ) : null; switch (node2.type) { case "root": assignDefined(props, { className: opts.className }); break; case "text": props.nodeKey = key; props.children = node2.value; break; case "heading": props.level = node2.depth; break; case "list": props.start = node2.start; props.ordered = node2.ordered; props.spread = node2.spread; props.depth = node2.depth; break; case "listItem": props.checked = node2.checked; props.spread = node2.spread; props.ordered = node2.ordered; props.index = node2.index; props.children = getListItemChildren(node2, parent).map(function(childNode, i) { return astToReact(childNode, opts, { node: node2, props }, i); }); break; case "definition": assignDefined(props, { identifier: node2.identifier, title: node2.title, url: node2.url }); break; case "code": assignDefined(props, { language: node2.lang && node2.lang.split(/\s/, 1)[0] }); break; case "inlineCode": props.children = node2.value; props.inline = true; break; case "link": assignDefined(props, { title: node2.title || void 0, target: typeof opts.linkTarget === "function" ? opts.linkTarget(node2.url, node2.children, node2.title) : opts.linkTarget, href: opts.transformLinkUri ? opts.transformLinkUri(node2.url, node2.children, node2.title) : node2.url }); break; case "image": assignDefined(props, { src: opts.transformImageUri ? opts.transformImageUri(node2.url, node2.children, node2.title, node2.alt) : node2.url, alt: node2.alt || "", title: node2.title || void 0 }); break; case "linkReference": assignDefined(props, xtend(ref, { href: opts.transformLinkUri ? opts.transformLinkUri(ref.href) : ref.href })); break; case "imageReference": assignDefined(props, { src: opts.transformImageUri && ref.href ? opts.transformImageUri(ref.href, node2.children, ref.title, node2.alt) : ref.href, alt: node2.alt || "", title: ref.title || void 0 }); break; case "table": case "tableHead": case "tableBody": props.columnAlignment = node2.align; break; case "tableRow": props.isHeader = parent.node.type === "tableHead"; props.columnAlignment = parent.props.columnAlignment; break; case "tableCell": assignDefined(props, { isHeader: parent.props.isHeader, align: parent.props.columnAlignment[index3] }); break; case "virtualHtml": props.tag = node2.tag; break; case "html": props.isBlock = node2.position.start.line !== node2.position.end.line; props.allowDangerousHtml = opts.allowDangerousHtml; props.escapeHtml = opts.escapeHtml; props.skipHtml = opts.skipHtml; break; case "parsedHtml": { var parsedChildren; if (node2.children) { parsedChildren = node2.children.map(function(child, i) { return astToReact(child, opts, { node: node2, props }, i); }); } props.allowDangerousHtml = opts.allowDangerousHtml; props.escapeHtml = opts.escapeHtml; props.skipHtml = opts.skipHtml; props.element = node2.element ? mergeNodeChildren(node2, parsedChildren) : null; break; } default: assignDefined(props, xtend(node2, { type: void 0, position: void 0, children: void 0 })); } if (!isSimpleRenderer && node2.value) { props.value = node2.value; } if (!isSimpleRenderer) { props.node = node2; } return props; } function assignDefined(target, attrs) { for (var key in attrs) { if (typeof attrs[key] !== "undefined") { target[key] = attrs[key]; } } } function mergeNodeChildren(node2, parsedChildren) { var el = node2.element; if (Array.isArray(el)) { var Fragment2 = React204.Fragment || "div"; return React204.createElement(Fragment2, null, el); } if (el.props.children || parsedChildren) { var children = React204.Children.toArray(el.props.children).concat(parsedChildren); return React204.cloneElement(el, null, children); } return React204.cloneElement(el, null); } function flattenPosition2(pos) { return [pos.start.line, ":", pos.start.column, "-", pos.end.line, ":", pos.end.column].map(String).join(""); } function getListItemChildren(node2, parent) { var loose = parent && parent.node ? listLoose2(parent.node) : listItemLoose2(node2); return loose ? node2.children : unwrapParagraphs(node2); } function unwrapParagraphs(node2) { return node2.children.reduce(function(array, child) { return array.concat(child.type === "paragraph" ? child.children : [child]); }, []); } function listLoose2(node2) { var children = node2.children; var loose = node2.spread; var index3 = -1; while (!loose && ++index3 < children.length) { loose = listItemLoose2(children[index3]); } return loose; } function listItemLoose2(node2) { var spread = node2.spread; return spread === void 0 || spread === null ? node2.children.length > 1 : spread; } module2.exports = astToReact; } }); // node_modules/mml-react/node_modules/react-markdown/lib/wrap-table-rows.js var require_wrap_table_rows = __commonJS({ "node_modules/mml-react/node_modules/react-markdown/lib/wrap-table-rows.js"(exports2, module2) { "use strict"; var visit5 = require_unist_util_visit(); module2.exports = function(node2) { visit5(node2, "table", wrap3); return node2; }; function wrap3(table2) { var children = table2.children; table2.children = [{ type: "tableHead", align: table2.align, children: [children[0]], position: children[0].position }]; if (children.length > 1) { table2.children.push({ type: "tableBody", align: table2.align, children: children.slice(1), position: { start: children[1].position.start, end: children[children.length - 1].position.end } }); } } } }); // node_modules/mml-react/node_modules/react-markdown/lib/get-definitions.js var require_get_definitions = __commonJS({ "node_modules/mml-react/node_modules/react-markdown/lib/get-definitions.js"(exports2, module2) { "use strict"; var visit5 = require_unist_util_visit(); module2.exports = function getDefinitions(tree) { var definitions2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; visit5(tree, "definition", function(node2) { var identifier = node2.identifier.toUpperCase(); if (identifier in definitions2) return; definitions2[identifier] = { href: node2.url, title: node2.title }; }); return definitions2; }; } }); // node_modules/mml-react/node_modules/react-markdown/lib/uri-transformer.js var require_uri_transformer = __commonJS({ "node_modules/mml-react/node_modules/react-markdown/lib/uri-transformer.js"(exports2, module2) { "use strict"; var protocols2 = ["http", "https", "mailto", "tel"]; module2.exports = function uriTransformer2(uri) { var url = (uri || "").trim(); var first = url.charAt(0); if (first === "#" || first === "/") { return url; } var colon = url.indexOf(":"); if (colon === -1) { return url; } var length = protocols2.length; var index3 = -1; while (++index3 < length) { var protocol = protocols2[index3]; if (colon === protocol.length && url.slice(0, protocol.length).toLowerCase() === protocol) { return url; } } index3 = url.indexOf("?"); if (index3 !== -1 && colon > index3) { return url; } index3 = url.indexOf("#"); if (index3 !== -1 && colon > index3) { return url; } return "javascript:void(0)"; }; } }); // node_modules/mml-react/node_modules/react-markdown/lib/renderers.js var require_renderers = __commonJS({ "node_modules/mml-react/node_modules/react-markdown/lib/renderers.js"(exports2, module2) { "use strict"; var xtend = require_immutable(); var React204 = require("react"); var supportsStringRender = parseInt((React204.version || "16").slice(0, 2), 10) >= 16; var createElement = React204.createElement; module2.exports = { break: "br", paragraph: "p", emphasis: "em", strong: "strong", thematicBreak: "hr", blockquote: "blockquote", delete: "del", link: "a", image: "img", linkReference: "a", imageReference: "img", table: SimpleRenderer.bind(null, "table"), tableHead: SimpleRenderer.bind(null, "thead"), tableBody: SimpleRenderer.bind(null, "tbody"), tableRow: SimpleRenderer.bind(null, "tr"), tableCell: TableCell, root: Root, text: TextRenderer, list: List2, listItem: ListItem, definition: NullRenderer, heading: Heading, inlineCode: InlineCode, code: CodeBlock, html: Html, virtualHtml: VirtualHtml, parsedHtml: ParsedHtml }; function TextRenderer(props) { var children = props.children || ""; return supportsStringRender ? children : createElement("span", null, children); } function Root(props) { var className = props.className; var root2 = !className && React204.Fragment || "div"; return createElement(root2, className ? { className } : null, props.children); } function SimpleRenderer(tag, props) { return createElement(tag, getCoreProps(props), props.children); } function TableCell(props) { var style = props.align ? { textAlign: props.align } : void 0; var coreProps = getCoreProps(props); return createElement(props.isHeader ? "th" : "td", style ? xtend({ style }, coreProps) : coreProps, props.children); } function Heading(props) { return createElement("h".concat(props.level), getCoreProps(props), props.children); } function List2(props) { var attrs = getCoreProps(props); if (props.start !== null && props.start !== 1 && props.start !== void 0) { attrs.start = props.start.toString(); } return createElement(props.ordered ? "ol" : "ul", attrs, props.children); } function ListItem(props) { var checkbox = null; if (props.checked !== null && props.checked !== void 0) { var checked = props.checked; checkbox = createElement("input", { type: "checkbox", checked, readOnly: true }); } return createElement("li", getCoreProps(props), checkbox, props.children); } function CodeBlock(props) { var className = props.language && "language-".concat(props.language); var code3 = createElement("code", className ? { className } : null, props.value); return createElement("pre", getCoreProps(props), code3); } function InlineCode(props) { return createElement("code", getCoreProps(props), props.children); } function Html(props) { if (props.skipHtml) { return null; } var dangerous = props.allowDangerousHtml || props.escapeHtml === false; var tag = props.isBlock ? "div" : "span"; if (!dangerous) { return createElement(React204.Fragment || tag, null, props.value); } var nodeProps = { dangerouslySetInnerHTML: { __html: props.value } }; return createElement(tag, nodeProps); } function ParsedHtml(props) { return props["data-sourcepos"] ? React204.cloneElement(props.element, { "data-sourcepos": props["data-sourcepos"] }) : props.element; } function VirtualHtml(props) { return createElement(props.tag, getCoreProps(props), props.children); } function NullRenderer() { return null; } function getCoreProps(props) { var source = props["data-sourcepos"]; return source ? { "data-sourcepos": source } : {}; } } }); // node_modules/mml-react/node_modules/react-markdown/lib/symbols.js var require_symbols = __commonJS({ "node_modules/mml-react/node_modules/react-markdown/lib/symbols.js"(exports2) { "use strict"; var HtmlParser = "__RMD_HTML_PARSER__"; exports2.HtmlParser = typeof Symbol === "undefined" ? HtmlParser : Symbol(HtmlParser); } }); // node_modules/mml-react/node_modules/react-markdown/lib/react-markdown.js var require_react_markdown = __commonJS({ "node_modules/mml-react/node_modules/react-markdown/lib/react-markdown.js"(exports2, module2) { "use strict"; var xtend = require_immutable(); var unified2 = require_unified(); var parse2 = require_remark_parse(); var PropTypes3 = require("prop-types"); var addListMetadata = require_mdast_add_list_metadata(); var naiveHtml = require_naive_html(); var disallowNode = require_disallow_node(); var astToReact = require_ast_to_react(); var wrapTableRows = require_wrap_table_rows(); var getDefinitions = require_get_definitions(); var uriTransformer2 = require_uri_transformer(); var defaultRenderers = require_renderers(); var symbols = require_symbols(); var allTypes = Object.keys(defaultRenderers); var ReactMarkdown2 = function ReactMarkdown3(props) { var src = props.source || props.children || ""; if (props.allowedTypes && props.disallowedTypes) { throw new Error("Only one of `allowedTypes` and `disallowedTypes` should be defined"); } var renderers = xtend(defaultRenderers, props.renderers); var processor = unified2().use(parse2).use(props.plugins || []); var tree = processor.runSync(processor.parse(src)); var renderProps = xtend(props, { renderers, definitions: getDefinitions(tree) }); determineAstToReactTransforms(props).forEach(function(transform3) { tree = transform3(tree, renderProps); }); return tree; }; function determineAstToReactTransforms(props) { var transforms = [wrapTableRows, addListMetadata()]; var disallowedTypes = props.disallowedTypes; if (props.allowedTypes) { disallowedTypes = allTypes.filter(function(type) { return type !== "root" && props.allowedTypes.indexOf(type) === -1; }); } var removalMethod = props.unwrapDisallowed ? "unwrap" : "remove"; if (disallowedTypes && disallowedTypes.length > 0) { transforms.push(disallowNode.ofType(disallowedTypes, removalMethod)); } if (props.allowNode) { transforms.push(disallowNode.ifNotMatch(props.allowNode, removalMethod)); } var renderHtml = (props.allowDangerousHtml || props.escapeHtml === false) && !props.skipHtml; var hasHtmlParser = (props.astPlugins || []).some(function(transform3) { return transform3.identity === symbols.HtmlParser; }); if (renderHtml && !hasHtmlParser) { transforms.push(naiveHtml); } if (props.astPlugins) { transforms = transforms.concat(props.astPlugins); } transforms.push(astToReact); return transforms; } ReactMarkdown2.defaultProps = { transformLinkUri: uriTransformer2 }; ReactMarkdown2.propTypes = { className: PropTypes3.string, source: PropTypes3.string, children: PropTypes3.string, sourcePos: PropTypes3.bool, rawSourcePos: PropTypes3.bool, escapeHtml: PropTypes3.bool, allowDangerousHtml: PropTypes3.bool, skipHtml: PropTypes3.bool, allowNode: PropTypes3.func, allowedTypes: PropTypes3.arrayOf(PropTypes3.oneOf(allTypes)), disallowedTypes: PropTypes3.arrayOf(PropTypes3.oneOf(allTypes)), transformLinkUri: PropTypes3.oneOfType([PropTypes3.func, PropTypes3.bool]), linkTarget: PropTypes3.oneOfType([PropTypes3.func, PropTypes3.string]), transformImageUri: PropTypes3.func, astPlugins: PropTypes3.arrayOf(PropTypes3.func), unwrapDisallowed: PropTypes3.bool, renderers: PropTypes3.object, plugins: PropTypes3.array }; ReactMarkdown2.types = allTypes; ReactMarkdown2.renderers = defaultRenderers; ReactMarkdown2.uriTransformer = uriTransformer2; module2.exports = ReactMarkdown2; } }); // node_modules/ical.js/build/ical.js var require_ical = __commonJS({ "node_modules/ical.js/build/ical.js"(exports2, module2) { if (typeof module2 === "object") { ICAL = module2.exports; } else if (typeof ICAL !== "object") { exports2.ICAL = {}; } ICAL.foldLength = 75; ICAL.newLineChar = "\r\n"; ICAL.helpers = { /** * Compiles a list of all referenced TZIDs in all subcomponents and * removes any extra VTIMEZONE subcomponents. In addition, if any TZIDs * are referenced by a component, but a VTIMEZONE does not exist, * an attempt will be made to generate a VTIMEZONE using ICAL.TimezoneService. * * @param {ICAL.Component} vcal The top-level VCALENDAR component. * @return {ICAL.Component} The ICAL.Component that was passed in. */ updateTimezones: function(vcal) { var allsubs, properties, vtimezones, reqTzid, i, tzid; if (!vcal || vcal.name !== "vcalendar") { return vcal; } allsubs = vcal.getAllSubcomponents(); properties = []; vtimezones = {}; for (i = 0; i < allsubs.length; i++) { if (allsubs[i].name === "vtimezone") { tzid = allsubs[i].getFirstProperty("tzid").getFirstValue(); vtimezones[tzid] = allsubs[i]; } else { properties = properties.concat(allsubs[i].getAllProperties()); } } reqTzid = {}; for (i = 0; i < properties.length; i++) { if (tzid = properties[i].getParameter("tzid")) { reqTzid[tzid] = true; } } for (i in vtimezones) { if (vtimezones.hasOwnProperty(i) && !reqTzid[i]) { vcal.removeSubcomponent(vtimezones[i]); } } for (i in reqTzid) { if (reqTzid.hasOwnProperty(i) && !vtimezones[i] && ICAL.TimezoneService.has(i)) { vcal.addSubcomponent(ICAL.TimezoneService.get(i).component); } } return vcal; }, /** * Checks if the given type is of the number type and also NaN. * * @param {Number} number The number to check * @return {Boolean} True, if the number is strictly NaN */ isStrictlyNaN: function(number2) { return typeof number2 === "number" && isNaN(number2); }, /** * Parses a string value that is expected to be an integer, when the valid is * not an integer throws a decoration error. * * @param {String} string Raw string input * @return {Number} Parsed integer */ strictParseInt: function(string3) { var result = parseInt(string3, 10); if (ICAL.helpers.isStrictlyNaN(result)) { throw new Error( 'Could not extract integer from "' + string3 + '"' ); } return result; }, /** * Creates or returns a class instance of a given type with the initialization * data if the data is not already an instance of the given type. * * @example * var time = new ICAL.Time(...); * var result = ICAL.helpers.formatClassType(time, ICAL.Time); * * (result instanceof ICAL.Time) * // => true * * result = ICAL.helpers.formatClassType({}, ICAL.Time); * (result isntanceof ICAL.Time) * // => true * * * @param {Object} data object initialization data * @param {Object} type object type (like ICAL.Time) * @return {?} An instance of the found type. */ formatClassType: function formatClassType(data, type) { if (typeof data === "undefined") { return void 0; } if (data instanceof type) { return data; } return new type(data); }, /** * Identical to indexOf but will only match values when they are not preceded * by a backslash character. * * @param {String} buffer String to search * @param {String} search Value to look for * @param {Number} pos Start position * @return {Number} The position, or -1 if not found */ unescapedIndexOf: function(buffer2, search2, pos) { while ((pos = buffer2.indexOf(search2, pos)) !== -1) { if (pos > 0 && buffer2[pos - 1] === "\\") { pos += 1; } else { return pos; } } return -1; }, /** * Find the index for insertion using binary search. * * @param {Array} list The list to search * @param {?} seekVal The value to insert * @param {function(?,?)} cmpfunc The comparison func, that can * compare two seekVals * @return {Number} The insert position */ binsearchInsert: function(list3, seekVal, cmpfunc) { if (!list3.length) return 0; var low = 0, high = list3.length - 1, mid, cmpval; while (low <= high) { mid = low + Math.floor((high - low) / 2); cmpval = cmpfunc(seekVal, list3[mid]); if (cmpval < 0) high = mid - 1; else if (cmpval > 0) low = mid + 1; else break; } if (cmpval < 0) return mid; else if (cmpval > 0) return mid + 1; else return mid; }, /** * Convenience function for debug output * @private */ dumpn: ( /* istanbul ignore next */ function() { if (!ICAL.debug) { return; } if (typeof console !== "undefined" && "log" in console) { ICAL.helpers.dumpn = function consoleDumpn(input) { console.log(input); }; } else { ICAL.helpers.dumpn = function geckoDumpn(input) { dump(input + "\n"); }; } ICAL.helpers.dumpn(arguments[0]); } ), /** * Clone the passed object or primitive. By default a shallow clone will be * executed. * * @param {*} aSrc The thing to clone * @param {Boolean=} aDeep If true, a deep clone will be performed * @return {*} The copy of the thing */ clone: function(aSrc, aDeep) { if (!aSrc || typeof aSrc != "object") { return aSrc; } else if (aSrc instanceof Date) { return new Date(aSrc.getTime()); } else if ("clone" in aSrc) { return aSrc.clone(); } else if (Array.isArray(aSrc)) { var arr = []; for (var i = 0; i < aSrc.length; i++) { arr.push(aDeep ? ICAL.helpers.clone(aSrc[i], true) : aSrc[i]); } return arr; } else { var obj = {}; for (var name in aSrc) { if (Object.prototype.hasOwnProperty.call(aSrc, name)) { if (aDeep) { obj[name] = ICAL.helpers.clone(aSrc[name], true); } else { obj[name] = aSrc[name]; } } } return obj; } }, /** * Performs iCalendar line folding. A line ending character is inserted and * the next line begins with a whitespace. * * @example * SUMMARY:This line will be fold * ed right in the middle of a word. * * @param {String} aLine The line to fold * @return {String} The folded line */ foldline: function foldline(aLine) { var result = ""; var line = aLine || ""; while (line.length) { result += ICAL.newLineChar + " " + line.substr(0, ICAL.foldLength); line = line.substr(ICAL.foldLength); } return result.substr(ICAL.newLineChar.length + 1); }, /** * Pads the given string or number with zeros so it will have at least two * characters. * * @param {String|Number} data The string or number to pad * @return {String} The number padded as a string */ pad2: function pad(data) { if (typeof data !== "string") { if (typeof data === "number") { data = parseInt(data); } data = String(data); } var len = data.length; switch (len) { case 0: return "00"; case 1: return "0" + data; default: return data; } }, /** * Truncates the given number, correctly handling negative numbers. * * @param {Number} number The number to truncate * @return {Number} The truncated number */ trunc: function trunc(number2) { return number2 < 0 ? Math.ceil(number2) : Math.floor(number2); }, /** * Poor-man's cross-browser inheritance for JavaScript. Doesn't support all * the features, but enough for our usage. * * @param {Function} base The base class constructor function. * @param {Function} child The child class constructor function. * @param {Object} extra Extends the prototype with extra properties * and methods */ inherits: function(base2, child, extra) { function F() { } F.prototype = base2.prototype; child.prototype = new F(); if (extra) { ICAL.helpers.extend(extra, child.prototype); } }, /** * Poor-man's cross-browser object extension. Doesn't support all the * features, but enough for our usage. Note that the target's properties are * not overwritten with the source properties. * * @example * var child = ICAL.helpers.extend(parent, { * "bar": 123 * }); * * @param {Object} source The object to extend * @param {Object} target The object to extend with * @return {Object} Returns the target. */ extend: function(source, target) { for (var key in source) { var descr = Object.getOwnPropertyDescriptor(source, key); if (descr && !Object.getOwnPropertyDescriptor(target, key)) { Object.defineProperty(target, key, descr); } } return target; } }; ICAL.design = function() { "use strict"; var FROM_ICAL_NEWLINE = /\\\\|\\;|\\,|\\[Nn]/g; var TO_ICAL_NEWLINE = /\\|;|,|\n/g; var FROM_VCARD_NEWLINE = /\\\\|\\,|\\[Nn]/g; var TO_VCARD_NEWLINE = /\\|,|\n/g; function createTextType(fromNewline, toNewline) { var result = { matches: /.*/, fromICAL: function(aValue, structuredEscape) { return replaceNewline(aValue, fromNewline, structuredEscape); }, toICAL: function(aValue, structuredEscape) { var regEx = toNewline; if (structuredEscape) regEx = new RegExp(regEx.source + "|" + structuredEscape); return aValue.replace(regEx, function(str) { switch (str) { case "\\": return "\\\\"; case ";": return "\\;"; case ",": return "\\,"; case "\n": return "\\n"; /* istanbul ignore next */ default: return str; } }); } }; return result; } var DEFAULT_TYPE_TEXT = { defaultType: "text" }; var DEFAULT_TYPE_TEXT_MULTI = { defaultType: "text", multiValue: "," }; var DEFAULT_TYPE_TEXT_STRUCTURED = { defaultType: "text", structuredValue: ";" }; var DEFAULT_TYPE_INTEGER = { defaultType: "integer" }; var DEFAULT_TYPE_DATETIME_DATE = { defaultType: "date-time", allowedTypes: ["date-time", "date"] }; var DEFAULT_TYPE_DATETIME = { defaultType: "date-time" }; var DEFAULT_TYPE_URI = { defaultType: "uri" }; var DEFAULT_TYPE_UTCOFFSET = { defaultType: "utc-offset" }; var DEFAULT_TYPE_RECUR = { defaultType: "recur" }; var DEFAULT_TYPE_DATE_ANDOR_TIME = { defaultType: "date-and-or-time", allowedTypes: ["date-time", "date", "text"] }; function replaceNewlineReplace(string3) { switch (string3) { case "\\\\": return "\\"; case "\\;": return ";"; case "\\,": return ","; case "\\n": case "\\N": return "\n"; /* istanbul ignore next */ default: return string3; } } function replaceNewline(value, newline, structuredEscape) { if (value.indexOf("\\") === -1) { return value; } if (structuredEscape) newline = new RegExp(newline.source + "|\\\\" + structuredEscape); return value.replace(newline, replaceNewlineReplace); } var commonProperties = { "categories": DEFAULT_TYPE_TEXT_MULTI, "url": DEFAULT_TYPE_URI, "version": DEFAULT_TYPE_TEXT, "uid": DEFAULT_TYPE_TEXT }; var commonValues = { "boolean": { values: ["TRUE", "FALSE"], fromICAL: function(aValue) { switch (aValue) { case "TRUE": return true; case "FALSE": return false; default: return false; } }, toICAL: function(aValue) { if (aValue) { return "TRUE"; } return "FALSE"; } }, float: { matches: /^[+-]?\d+\.\d+$/, fromICAL: function(aValue) { var parsed = parseFloat(aValue); if (ICAL.helpers.isStrictlyNaN(parsed)) { return 0; } return parsed; }, toICAL: function(aValue) { return String(aValue); } }, integer: { fromICAL: function(aValue) { var parsed = parseInt(aValue); if (ICAL.helpers.isStrictlyNaN(parsed)) { return 0; } return parsed; }, toICAL: function(aValue) { return String(aValue); } }, "utc-offset": { toICAL: function(aValue) { if (aValue.length < 7) { return aValue.substr(0, 3) + aValue.substr(4, 2); } else { return aValue.substr(0, 3) + aValue.substr(4, 2) + aValue.substr(7, 2); } }, fromICAL: function(aValue) { if (aValue.length < 6) { return aValue.substr(0, 3) + ":" + aValue.substr(3, 2); } else { return aValue.substr(0, 3) + ":" + aValue.substr(3, 2) + ":" + aValue.substr(5, 2); } }, decorate: function(aValue) { return ICAL.UtcOffset.fromString(aValue); }, undecorate: function(aValue) { return aValue.toString(); } } }; var icalParams = { // Although the syntax is DQUOTE uri DQUOTE, I don't think we should // enfoce anything aside from it being a valid content line. // // At least some params require - if multi values are used - DQUOTEs // for each of its values - e.g. delegated-from="uri1","uri2" // To indicate this, I introduced the new k/v pair // multiValueSeparateDQuote: true // // "ALTREP": { ... }, // CN just wants a param-value // "CN": { ... } "cutype": { values: ["INDIVIDUAL", "GROUP", "RESOURCE", "ROOM", "UNKNOWN"], allowXName: true, allowIanaToken: true }, "delegated-from": { valueType: "cal-address", multiValue: ",", multiValueSeparateDQuote: true }, "delegated-to": { valueType: "cal-address", multiValue: ",", multiValueSeparateDQuote: true }, // "DIR": { ... }, // See ALTREP "encoding": { values: ["8BIT", "BASE64"] }, // "FMTTYPE": { ... }, // See ALTREP "fbtype": { values: ["FREE", "BUSY", "BUSY-UNAVAILABLE", "BUSY-TENTATIVE"], allowXName: true, allowIanaToken: true }, // "LANGUAGE": { ... }, // See ALTREP "member": { valueType: "cal-address", multiValue: ",", multiValueSeparateDQuote: true }, "partstat": { // TODO These values are actually different per-component values: [ "NEEDS-ACTION", "ACCEPTED", "DECLINED", "TENTATIVE", "DELEGATED", "COMPLETED", "IN-PROCESS" ], allowXName: true, allowIanaToken: true }, "range": { values: ["THISLANDFUTURE"] }, "related": { values: ["START", "END"] }, "reltype": { values: ["PARENT", "CHILD", "SIBLING"], allowXName: true, allowIanaToken: true }, "role": { values: [ "REQ-PARTICIPANT", "CHAIR", "OPT-PARTICIPANT", "NON-PARTICIPANT" ], allowXName: true, allowIanaToken: true }, "rsvp": { values: ["TRUE", "FALSE"] }, "sent-by": { valueType: "cal-address" }, "tzid": { matches: /^\// }, "value": { // since the value here is a 'type' lowercase is used. values: [ "binary", "boolean", "cal-address", "date", "date-time", "duration", "float", "integer", "period", "recur", "text", "time", "uri", "utc-offset" ], allowXName: true, allowIanaToken: true } }; var icalValues = ICAL.helpers.extend(commonValues, { text: createTextType(FROM_ICAL_NEWLINE, TO_ICAL_NEWLINE), uri: { // TODO /* ... */ }, "binary": { decorate: function(aString) { return ICAL.Binary.fromString(aString); }, undecorate: function(aBinary) { return aBinary.toString(); } }, "cal-address": { // needs to be an uri }, "date": { decorate: function(aValue, aProp) { if (design.strict) { return ICAL.Time.fromDateString(aValue, aProp); } else { return ICAL.Time.fromString(aValue, aProp); } }, /** * undecorates a time object. */ undecorate: function(aValue) { return aValue.toString(); }, fromICAL: function(aValue) { if (!design.strict && aValue.length >= 15) { return icalValues["date-time"].fromICAL(aValue); } else { return aValue.substr(0, 4) + "-" + aValue.substr(4, 2) + "-" + aValue.substr(6, 2); } }, toICAL: function(aValue) { var len = aValue.length; if (len == 10) { return aValue.substr(0, 4) + aValue.substr(5, 2) + aValue.substr(8, 2); } else if (len >= 19) { return icalValues["date-time"].toICAL(aValue); } else { return aValue; } } }, "date-time": { fromICAL: function(aValue) { if (!design.strict && aValue.length == 8) { return icalValues.date.fromICAL(aValue); } else { var result = aValue.substr(0, 4) + "-" + aValue.substr(4, 2) + "-" + aValue.substr(6, 2) + "T" + aValue.substr(9, 2) + ":" + aValue.substr(11, 2) + ":" + aValue.substr(13, 2); if (aValue[15] && aValue[15] === "Z") { result += "Z"; } return result; } }, toICAL: function(aValue) { var len = aValue.length; if (len == 10 && !design.strict) { return icalValues.date.toICAL(aValue); } else if (len >= 19) { var result = aValue.substr(0, 4) + aValue.substr(5, 2) + // grab the (DDTHH) segment aValue.substr(8, 5) + // MM aValue.substr(14, 2) + // SS aValue.substr(17, 2); if (aValue[19] && aValue[19] === "Z") { result += "Z"; } return result; } else { return aValue; } }, decorate: function(aValue, aProp) { if (design.strict) { return ICAL.Time.fromDateTimeString(aValue, aProp); } else { return ICAL.Time.fromString(aValue, aProp); } }, undecorate: function(aValue) { return aValue.toString(); } }, duration: { decorate: function(aValue) { return ICAL.Duration.fromString(aValue); }, undecorate: function(aValue) { return aValue.toString(); } }, period: { fromICAL: function(string3) { var parts = string3.split("/"); parts[0] = icalValues["date-time"].fromICAL(parts[0]); if (!ICAL.Duration.isValueString(parts[1])) { parts[1] = icalValues["date-time"].fromICAL(parts[1]); } return parts; }, toICAL: function(parts) { if (!design.strict && parts[0].length == 10) { parts[0] = icalValues.date.toICAL(parts[0]); } else { parts[0] = icalValues["date-time"].toICAL(parts[0]); } if (!ICAL.Duration.isValueString(parts[1])) { if (!design.strict && parts[1].length == 10) { parts[1] = icalValues.date.toICAL(parts[1]); } else { parts[1] = icalValues["date-time"].toICAL(parts[1]); } } return parts.join("/"); }, decorate: function(aValue, aProp) { return ICAL.Period.fromJSON(aValue, aProp, !design.strict); }, undecorate: function(aValue) { return aValue.toJSON(); } }, recur: { fromICAL: function(string3) { return ICAL.Recur._stringToData(string3, true); }, toICAL: function(data) { var str = ""; for (var k in data) { if (!Object.prototype.hasOwnProperty.call(data, k)) { continue; } var val = data[k]; if (k == "until") { if (val.length > 10) { val = icalValues["date-time"].toICAL(val); } else { val = icalValues.date.toICAL(val); } } else if (k == "wkst") { if (typeof val === "number") { val = ICAL.Recur.numericDayToIcalDay(val); } } else if (Array.isArray(val)) { val = val.join(","); } str += k.toUpperCase() + "=" + val + ";"; } return str.substr(0, str.length - 1); }, decorate: function decorate(aValue) { return ICAL.Recur.fromData(aValue); }, undecorate: function(aRecur) { return aRecur.toJSON(); } }, time: { fromICAL: function(aValue) { if (aValue.length < 6) { return aValue; } var result = aValue.substr(0, 2) + ":" + aValue.substr(2, 2) + ":" + aValue.substr(4, 2); if (aValue[6] === "Z") { result += "Z"; } return result; }, toICAL: function(aValue) { if (aValue.length < 8) { return aValue; } var result = aValue.substr(0, 2) + aValue.substr(3, 2) + aValue.substr(6, 2); if (aValue[8] === "Z") { result += "Z"; } return result; } } }); var icalProperties = ICAL.helpers.extend(commonProperties, { "action": DEFAULT_TYPE_TEXT, "attach": { defaultType: "uri" }, "attendee": { defaultType: "cal-address" }, "calscale": DEFAULT_TYPE_TEXT, "class": DEFAULT_TYPE_TEXT, "comment": DEFAULT_TYPE_TEXT, "completed": DEFAULT_TYPE_DATETIME, "contact": DEFAULT_TYPE_TEXT, "created": DEFAULT_TYPE_DATETIME, "description": DEFAULT_TYPE_TEXT, "dtend": DEFAULT_TYPE_DATETIME_DATE, "dtstamp": DEFAULT_TYPE_DATETIME, "dtstart": DEFAULT_TYPE_DATETIME_DATE, "due": DEFAULT_TYPE_DATETIME_DATE, "duration": { defaultType: "duration" }, "exdate": { defaultType: "date-time", allowedTypes: ["date-time", "date"], multiValue: "," }, "exrule": DEFAULT_TYPE_RECUR, "freebusy": { defaultType: "period", multiValue: "," }, "geo": { defaultType: "float", structuredValue: ";" }, "last-modified": DEFAULT_TYPE_DATETIME, "location": DEFAULT_TYPE_TEXT, "method": DEFAULT_TYPE_TEXT, "organizer": { defaultType: "cal-address" }, "percent-complete": DEFAULT_TYPE_INTEGER, "priority": DEFAULT_TYPE_INTEGER, "prodid": DEFAULT_TYPE_TEXT, "related-to": DEFAULT_TYPE_TEXT, "repeat": DEFAULT_TYPE_INTEGER, "rdate": { defaultType: "date-time", allowedTypes: ["date-time", "date", "period"], multiValue: ",", detectType: function(string3) { if (string3.indexOf("/") !== -1) { return "period"; } return string3.indexOf("T") === -1 ? "date" : "date-time"; } }, "recurrence-id": DEFAULT_TYPE_DATETIME_DATE, "resources": DEFAULT_TYPE_TEXT_MULTI, "request-status": DEFAULT_TYPE_TEXT_STRUCTURED, "rrule": DEFAULT_TYPE_RECUR, "sequence": DEFAULT_TYPE_INTEGER, "status": DEFAULT_TYPE_TEXT, "summary": DEFAULT_TYPE_TEXT, "transp": DEFAULT_TYPE_TEXT, "trigger": { defaultType: "duration", allowedTypes: ["duration", "date-time"] }, "tzoffsetfrom": DEFAULT_TYPE_UTCOFFSET, "tzoffsetto": DEFAULT_TYPE_UTCOFFSET, "tzurl": DEFAULT_TYPE_URI, "tzid": DEFAULT_TYPE_TEXT, "tzname": DEFAULT_TYPE_TEXT }); var vcardValues = ICAL.helpers.extend(commonValues, { text: createTextType(FROM_VCARD_NEWLINE, TO_VCARD_NEWLINE), uri: createTextType(FROM_VCARD_NEWLINE, TO_VCARD_NEWLINE), date: { decorate: function(aValue) { return ICAL.VCardTime.fromDateAndOrTimeString(aValue, "date"); }, undecorate: function(aValue) { return aValue.toString(); }, fromICAL: function(aValue) { if (aValue.length == 8) { return icalValues.date.fromICAL(aValue); } else if (aValue[0] == "-" && aValue.length == 6) { return aValue.substr(0, 4) + "-" + aValue.substr(4); } else { return aValue; } }, toICAL: function(aValue) { if (aValue.length == 10) { return icalValues.date.toICAL(aValue); } else if (aValue[0] == "-" && aValue.length == 7) { return aValue.substr(0, 4) + aValue.substr(5); } else { return aValue; } } }, time: { decorate: function(aValue) { return ICAL.VCardTime.fromDateAndOrTimeString("T" + aValue, "time"); }, undecorate: function(aValue) { return aValue.toString(); }, fromICAL: function(aValue) { var splitzone = vcardValues.time._splitZone(aValue, true); var zone = splitzone[0], value = splitzone[1]; if (value.length == 6) { value = value.substr(0, 2) + ":" + value.substr(2, 2) + ":" + value.substr(4, 2); } else if (value.length == 4 && value[0] != "-") { value = value.substr(0, 2) + ":" + value.substr(2, 2); } else if (value.length == 5) { value = value.substr(0, 3) + ":" + value.substr(3, 2); } if (zone.length == 5 && (zone[0] == "-" || zone[0] == "+")) { zone = zone.substr(0, 3) + ":" + zone.substr(3); } return value + zone; }, toICAL: function(aValue) { var splitzone = vcardValues.time._splitZone(aValue); var zone = splitzone[0], value = splitzone[1]; if (value.length == 8) { value = value.substr(0, 2) + value.substr(3, 2) + value.substr(6, 2); } else if (value.length == 5 && value[0] != "-") { value = value.substr(0, 2) + value.substr(3, 2); } else if (value.length == 6) { value = value.substr(0, 3) + value.substr(4, 2); } if (zone.length == 6 && (zone[0] == "-" || zone[0] == "+")) { zone = zone.substr(0, 3) + zone.substr(4); } return value + zone; }, _splitZone: function(aValue, isFromIcal) { var lastChar = aValue.length - 1; var signChar = aValue.length - (isFromIcal ? 5 : 6); var sign = aValue[signChar]; var zone, value; if (aValue[lastChar] == "Z") { zone = aValue[lastChar]; value = aValue.substr(0, lastChar); } else if (aValue.length > 6 && (sign == "-" || sign == "+")) { zone = aValue.substr(signChar); value = aValue.substr(0, signChar); } else { zone = ""; value = aValue; } return [zone, value]; } }, "date-time": { decorate: function(aValue) { return ICAL.VCardTime.fromDateAndOrTimeString(aValue, "date-time"); }, undecorate: function(aValue) { return aValue.toString(); }, fromICAL: function(aValue) { return vcardValues["date-and-or-time"].fromICAL(aValue); }, toICAL: function(aValue) { return vcardValues["date-and-or-time"].toICAL(aValue); } }, "date-and-or-time": { decorate: function(aValue) { return ICAL.VCardTime.fromDateAndOrTimeString(aValue, "date-and-or-time"); }, undecorate: function(aValue) { return aValue.toString(); }, fromICAL: function(aValue) { var parts = aValue.split("T"); return (parts[0] ? vcardValues.date.fromICAL(parts[0]) : "") + (parts[1] ? "T" + vcardValues.time.fromICAL(parts[1]) : ""); }, toICAL: function(aValue) { var parts = aValue.split("T"); return vcardValues.date.toICAL(parts[0]) + (parts[1] ? "T" + vcardValues.time.toICAL(parts[1]) : ""); } }, timestamp: icalValues["date-time"], "language-tag": { matches: /^[a-zA-Z0-9-]+$/ // Could go with a more strict regex here } }); var vcardParams = { "type": { valueType: "text", multiValue: "," }, "value": { // since the value here is a 'type' lowercase is used. values: [ "text", "uri", "date", "time", "date-time", "date-and-or-time", "timestamp", "boolean", "integer", "float", "utc-offset", "language-tag" ], allowXName: true, allowIanaToken: true } }; var vcardProperties = ICAL.helpers.extend(commonProperties, { "adr": { defaultType: "text", structuredValue: ";", multiValue: "," }, "anniversary": DEFAULT_TYPE_DATE_ANDOR_TIME, "bday": DEFAULT_TYPE_DATE_ANDOR_TIME, "caladruri": DEFAULT_TYPE_URI, "caluri": DEFAULT_TYPE_URI, "clientpidmap": DEFAULT_TYPE_TEXT_STRUCTURED, "email": DEFAULT_TYPE_TEXT, "fburl": DEFAULT_TYPE_URI, "fn": DEFAULT_TYPE_TEXT, "gender": DEFAULT_TYPE_TEXT_STRUCTURED, "geo": DEFAULT_TYPE_URI, "impp": DEFAULT_TYPE_URI, "key": DEFAULT_TYPE_URI, "kind": DEFAULT_TYPE_TEXT, "lang": { defaultType: "language-tag" }, "logo": DEFAULT_TYPE_URI, "member": DEFAULT_TYPE_URI, "n": { defaultType: "text", structuredValue: ";", multiValue: "," }, "nickname": DEFAULT_TYPE_TEXT_MULTI, "note": DEFAULT_TYPE_TEXT, "org": { defaultType: "text", structuredValue: ";" }, "photo": DEFAULT_TYPE_URI, "related": DEFAULT_TYPE_URI, "rev": { defaultType: "timestamp" }, "role": DEFAULT_TYPE_TEXT, "sound": DEFAULT_TYPE_URI, "source": DEFAULT_TYPE_URI, "tel": { defaultType: "uri", allowedTypes: ["uri", "text"] }, "title": DEFAULT_TYPE_TEXT, "tz": { defaultType: "text", allowedTypes: ["text", "utc-offset", "uri"] }, "xml": DEFAULT_TYPE_TEXT }); var vcard3Values = ICAL.helpers.extend(commonValues, { binary: icalValues.binary, date: vcardValues.date, "date-time": vcardValues["date-time"], "phone-number": { // TODO /* ... */ }, uri: icalValues.uri, text: icalValues.text, time: icalValues.time, vcard: icalValues.text, "utc-offset": { toICAL: function(aValue) { return aValue.substr(0, 7); }, fromICAL: function(aValue) { return aValue.substr(0, 7); }, decorate: function(aValue) { return ICAL.UtcOffset.fromString(aValue); }, undecorate: function(aValue) { return aValue.toString(); } } }); var vcard3Params = { "type": { valueType: "text", multiValue: "," }, "value": { // since the value here is a 'type' lowercase is used. values: [ "text", "uri", "date", "date-time", "phone-number", "time", "boolean", "integer", "float", "utc-offset", "vcard", "binary" ], allowXName: true, allowIanaToken: true } }; var vcard3Properties = ICAL.helpers.extend(commonProperties, { fn: DEFAULT_TYPE_TEXT, n: { defaultType: "text", structuredValue: ";", multiValue: "," }, nickname: DEFAULT_TYPE_TEXT_MULTI, photo: { defaultType: "binary", allowedTypes: ["binary", "uri"] }, bday: { defaultType: "date-time", allowedTypes: ["date-time", "date"], detectType: function(string3) { return string3.indexOf("T") === -1 ? "date" : "date-time"; } }, adr: { defaultType: "text", structuredValue: ";", multiValue: "," }, label: DEFAULT_TYPE_TEXT, tel: { defaultType: "phone-number" }, email: DEFAULT_TYPE_TEXT, mailer: DEFAULT_TYPE_TEXT, tz: { defaultType: "utc-offset", allowedTypes: ["utc-offset", "text"] }, geo: { defaultType: "float", structuredValue: ";" }, title: DEFAULT_TYPE_TEXT, role: DEFAULT_TYPE_TEXT, logo: { defaultType: "binary", allowedTypes: ["binary", "uri"] }, agent: { defaultType: "vcard", allowedTypes: ["vcard", "text", "uri"] }, org: DEFAULT_TYPE_TEXT_STRUCTURED, note: DEFAULT_TYPE_TEXT_MULTI, prodid: DEFAULT_TYPE_TEXT, rev: { defaultType: "date-time", allowedTypes: ["date-time", "date"], detectType: function(string3) { return string3.indexOf("T") === -1 ? "date" : "date-time"; } }, "sort-string": DEFAULT_TYPE_TEXT, sound: { defaultType: "binary", allowedTypes: ["binary", "uri"] }, class: DEFAULT_TYPE_TEXT, key: { defaultType: "binary", allowedTypes: ["binary", "text"] } }); var icalSet = { value: icalValues, param: icalParams, property: icalProperties }; var vcardSet = { value: vcardValues, param: vcardParams, property: vcardProperties }; var vcard3Set = { value: vcard3Values, param: vcard3Params, property: vcard3Properties }; var design = { /** * A designSet describes value, parameter and property data. It is used by * ther parser and stringifier in components and properties to determine they * should be represented. * * @typedef {Object} designSet * @memberOf ICAL.design * @property {Object} value Definitions for value types, keys are type names * @property {Object} param Definitions for params, keys are param names * @property {Object} property Defintions for properties, keys are property names */ /** * Can be set to false to make the parser more lenient. */ strict: true, /** * The default set for new properties and components if none is specified. * @type {ICAL.design.designSet} */ defaultSet: icalSet, /** * The default type for unknown properties * @type {String} */ defaultType: "unknown", /** * Holds the design set for known top-level components * * @type {Object} * @property {ICAL.design.designSet} vcard vCard VCARD * @property {ICAL.design.designSet} vevent iCalendar VEVENT * @property {ICAL.design.designSet} vtodo iCalendar VTODO * @property {ICAL.design.designSet} vjournal iCalendar VJOURNAL * @property {ICAL.design.designSet} valarm iCalendar VALARM * @property {ICAL.design.designSet} vtimezone iCalendar VTIMEZONE * @property {ICAL.design.designSet} daylight iCalendar DAYLIGHT * @property {ICAL.design.designSet} standard iCalendar STANDARD * * @example * var propertyName = 'fn'; * var componentDesign = ICAL.design.components.vcard; * var propertyDetails = componentDesign.property[propertyName]; * if (propertyDetails.defaultType == 'text') { * // Yep, sure is... * } */ components: { vcard: vcardSet, vcard3: vcard3Set, vevent: icalSet, vtodo: icalSet, vjournal: icalSet, valarm: icalSet, vtimezone: icalSet, daylight: icalSet, standard: icalSet }, /** * The design set for iCalendar (rfc5545/rfc7265) components. * @type {ICAL.design.designSet} */ icalendar: icalSet, /** * The design set for vCard (rfc6350/rfc7095) components. * @type {ICAL.design.designSet} */ vcard: vcardSet, /** * The design set for vCard (rfc2425/rfc2426/rfc7095) components. * @type {ICAL.design.designSet} */ vcard3: vcard3Set, /** * Gets the design set for the given component name. * * @param {String} componentName The name of the component * @return {ICAL.design.designSet} The design set for the component */ getDesignSet: function(componentName) { var isInDesign = componentName && componentName in design.components; return isInDesign ? design.components[componentName] : design.defaultSet; } }; return design; }(); ICAL.stringify = function() { "use strict"; var LINE_ENDING = "\r\n"; var DEFAULT_VALUE_TYPE = "unknown"; var design = ICAL.design; var helpers = ICAL.helpers; function stringify3(jCal) { if (typeof jCal[0] == "string") { jCal = [jCal]; } var i = 0; var len = jCal.length; var result = ""; for (; i < len; i++) { result += stringify3.component(jCal[i]) + LINE_ENDING; } return result; } stringify3.component = function(component, designSet) { var name = component[0].toUpperCase(); var result = "BEGIN:" + name + LINE_ENDING; var props = component[1]; var propIdx = 0; var propLen = props.length; var designSetName = component[0]; if (designSetName === "vcard" && component[1].length > 0 && !(component[1][0][0] === "version" && component[1][0][3] === "4.0")) { designSetName = "vcard3"; } designSet = designSet || design.getDesignSet(designSetName); for (; propIdx < propLen; propIdx++) { result += stringify3.property(props[propIdx], designSet) + LINE_ENDING; } var comps = component[2] || []; var compIdx = 0; var compLen = comps.length; for (; compIdx < compLen; compIdx++) { result += stringify3.component(comps[compIdx], designSet) + LINE_ENDING; } result += "END:" + name; return result; }; stringify3.property = function(property, designSet, noFold) { var name = property[0].toUpperCase(); var jsName = property[0]; var params = property[1]; var line = name; var paramName; for (paramName in params) { var value = params[paramName]; if (params.hasOwnProperty(paramName)) { var multiValue = paramName in designSet.param && designSet.param[paramName].multiValue; if (multiValue && Array.isArray(value)) { if (designSet.param[paramName].multiValueSeparateDQuote) { multiValue = '"' + multiValue + '"'; } value = value.map(stringify3._rfc6868Unescape); value = stringify3.multiValue(value, multiValue, "unknown", null, designSet); } else { value = stringify3._rfc6868Unescape(value); } line += ";" + paramName.toUpperCase(); line += "=" + stringify3.propertyValue(value); } } if (property.length === 3) { return line + ":"; } var valueType = property[2]; if (!designSet) { designSet = design.defaultSet; } var propDetails; var multiValue = false; var structuredValue = false; var isDefault = false; if (jsName in designSet.property) { propDetails = designSet.property[jsName]; if ("multiValue" in propDetails) { multiValue = propDetails.multiValue; } if ("structuredValue" in propDetails && Array.isArray(property[3])) { structuredValue = propDetails.structuredValue; } if ("defaultType" in propDetails) { if (valueType === propDetails.defaultType) { isDefault = true; } } else { if (valueType === DEFAULT_VALUE_TYPE) { isDefault = true; } } } else { if (valueType === DEFAULT_VALUE_TYPE) { isDefault = true; } } if (!isDefault) { line += ";VALUE=" + valueType.toUpperCase(); } line += ":"; if (multiValue && structuredValue) { line += stringify3.multiValue( property[3], structuredValue, valueType, multiValue, designSet, structuredValue ); } else if (multiValue) { line += stringify3.multiValue( property.slice(3), multiValue, valueType, null, designSet, false ); } else if (structuredValue) { line += stringify3.multiValue( property[3], structuredValue, valueType, null, designSet, structuredValue ); } else { line += stringify3.value(property[3], valueType, designSet, false); } return noFold ? line : ICAL.helpers.foldline(line); }; stringify3.propertyValue = function(value) { if (helpers.unescapedIndexOf(value, ",") === -1 && helpers.unescapedIndexOf(value, ":") === -1 && helpers.unescapedIndexOf(value, ";") === -1) { return value; } return '"' + value + '"'; }; stringify3.multiValue = function(values, delim, type, innerMulti, designSet, structuredValue) { var result = ""; var len = values.length; var i = 0; for (; i < len; i++) { if (innerMulti && Array.isArray(values[i])) { result += stringify3.multiValue(values[i], innerMulti, type, null, designSet, structuredValue); } else { result += stringify3.value(values[i], type, designSet, structuredValue); } if (i !== len - 1) { result += delim; } } return result; }; stringify3.value = function(value, type, designSet, structuredValue) { if (type in designSet.value && "toICAL" in designSet.value[type]) { return designSet.value[type].toICAL(value, structuredValue); } return value; }; stringify3._rfc6868Unescape = function(val) { return val.replace(/[\n^"]/g, function(x) { return RFC6868_REPLACE_MAP[x]; }); }; var RFC6868_REPLACE_MAP = { '"': "^'", "\n": "^n", "^": "^^" }; return stringify3; }(); ICAL.parse = function() { "use strict"; var CHAR = /[^ \t]/; var MULTIVALUE_DELIMITER = ","; var VALUE_DELIMITER = ":"; var PARAM_DELIMITER = ";"; var PARAM_NAME_DELIMITER = "="; var DEFAULT_VALUE_TYPE = "unknown"; var DEFAULT_PARAM_TYPE = "text"; var design = ICAL.design; var helpers = ICAL.helpers; function ParserError(message) { this.message = message; this.name = "ParserError"; try { throw new Error(); } catch (e2) { if (e2.stack) { var split = e2.stack.split("\n"); split.shift(); this.stack = split.join("\n"); } } } ParserError.prototype = Error.prototype; function parser(input) { var state = {}; var root2 = state.component = []; state.stack = [root2]; parser._eachLine(input, function(err, line) { parser._handleContentLine(line, state); }); if (state.stack.length > 1) { throw new ParserError( "invalid ical body. component began but did not end" ); } state = null; return root2.length == 1 ? root2[0] : root2; } parser.property = function(str, designSet) { var state = { component: [[], []], designSet: designSet || design.defaultSet }; parser._handleContentLine(str, state); return state.component[1][0]; }; parser.component = function(str) { return parser(str); }; parser.ParserError = ParserError; parser._handleContentLine = function(line, state) { var valuePos = line.indexOf(VALUE_DELIMITER); var paramPos = line.indexOf(PARAM_DELIMITER); var lastParamIndex; var lastValuePos; var name; var value; var params = {}; if (paramPos !== -1 && valuePos !== -1) { if (paramPos > valuePos) { paramPos = -1; } } var parsedParams; if (paramPos !== -1) { name = line.substring(0, paramPos).toLowerCase(); parsedParams = parser._parseParameters(line.substring(paramPos), 0, state.designSet); if (parsedParams[2] == -1) { throw new ParserError("Invalid parameters in '" + line + "'"); } params = parsedParams[0]; lastParamIndex = parsedParams[1].length + parsedParams[2] + paramPos; if ((lastValuePos = line.substring(lastParamIndex).indexOf(VALUE_DELIMITER)) !== -1) { value = line.substring(lastParamIndex + lastValuePos + 1); } else { throw new ParserError("Missing parameter value in '" + line + "'"); } } else if (valuePos !== -1) { name = line.substring(0, valuePos).toLowerCase(); value = line.substring(valuePos + 1); if (name === "begin") { var newComponent = [value.toLowerCase(), [], []]; if (state.stack.length === 1) { state.component.push(newComponent); } else { state.component[2].push(newComponent); } state.stack.push(state.component); state.component = newComponent; if (!state.designSet) { state.designSet = design.getDesignSet(state.component[0]); } return; } else if (name === "end") { state.component = state.stack.pop(); return; } } else { throw new ParserError( 'invalid line (no token ";" or ":") "' + line + '"' ); } var valueType; var multiValue = false; var structuredValue = false; var propertyDetails; if (name in state.designSet.property) { propertyDetails = state.designSet.property[name]; if ("multiValue" in propertyDetails) { multiValue = propertyDetails.multiValue; } if ("structuredValue" in propertyDetails) { structuredValue = propertyDetails.structuredValue; } if (value && "detectType" in propertyDetails) { valueType = propertyDetails.detectType(value); } } if (!valueType) { if (!("value" in params)) { if (propertyDetails) { valueType = propertyDetails.defaultType; } else { valueType = DEFAULT_VALUE_TYPE; } } else { valueType = params.value.toLowerCase(); } } delete params.value; var result; if (multiValue && structuredValue) { value = parser._parseMultiValue(value, structuredValue, valueType, [], multiValue, state.designSet, structuredValue); result = [name, params, valueType, value]; } else if (multiValue) { result = [name, params, valueType]; parser._parseMultiValue(value, multiValue, valueType, result, null, state.designSet, false); } else if (structuredValue) { value = parser._parseMultiValue(value, structuredValue, valueType, [], null, state.designSet, structuredValue); result = [name, params, valueType, value]; } else { value = parser._parseValue(value, valueType, state.designSet, false); result = [name, params, valueType, value]; } if (state.component[0] === "vcard" && state.component[1].length === 0 && !(name === "version" && value === "4.0")) { state.designSet = design.getDesignSet("vcard3"); } state.component[1].push(result); }; parser._parseValue = function(value, type, designSet, structuredValue) { if (type in designSet.value && "fromICAL" in designSet.value[type]) { return designSet.value[type].fromICAL(value, structuredValue); } return value; }; parser._parseParameters = function(line, start, designSet) { var lastParam = start; var pos = 0; var delim = PARAM_NAME_DELIMITER; var result = {}; var name, lcname; var value, valuePos = -1; var type, multiValue, mvdelim; while (pos !== false && (pos = helpers.unescapedIndexOf(line, delim, pos + 1)) !== -1) { name = line.substr(lastParam + 1, pos - lastParam - 1); if (name.length == 0) { throw new ParserError("Empty parameter name in '" + line + "'"); } lcname = name.toLowerCase(); mvdelim = false; multiValue = false; if (lcname in designSet.param && designSet.param[lcname].valueType) { type = designSet.param[lcname].valueType; } else { type = DEFAULT_PARAM_TYPE; } if (lcname in designSet.param) { multiValue = designSet.param[lcname].multiValue; if (designSet.param[lcname].multiValueSeparateDQuote) { mvdelim = parser._rfc6868Escape('"' + multiValue + '"'); } } var nextChar = line[pos + 1]; if (nextChar === '"') { valuePos = pos + 2; pos = helpers.unescapedIndexOf(line, '"', valuePos); if (multiValue && pos != -1) { var extendedValue = true; while (extendedValue) { if (line[pos + 1] == multiValue && line[pos + 2] == '"') { pos = helpers.unescapedIndexOf(line, '"', pos + 3); } else { extendedValue = false; } } } if (pos === -1) { throw new ParserError( 'invalid line (no matching double quote) "' + line + '"' ); } value = line.substr(valuePos, pos - valuePos); lastParam = helpers.unescapedIndexOf(line, PARAM_DELIMITER, pos); if (lastParam === -1) { pos = false; } } else { valuePos = pos + 1; var nextPos = helpers.unescapedIndexOf(line, PARAM_DELIMITER, valuePos); var propValuePos = helpers.unescapedIndexOf(line, VALUE_DELIMITER, valuePos); if (propValuePos !== -1 && nextPos > propValuePos) { nextPos = propValuePos; pos = false; } else if (nextPos === -1) { if (propValuePos === -1) { nextPos = line.length; } else { nextPos = propValuePos; } pos = false; } else { lastParam = nextPos; pos = nextPos; } value = line.substr(valuePos, nextPos - valuePos); } value = parser._rfc6868Escape(value); if (multiValue) { var delimiter = mvdelim || multiValue; value = parser._parseMultiValue(value, delimiter, type, [], null, designSet); } else { value = parser._parseValue(value, type, designSet); } if (multiValue && lcname in result) { if (Array.isArray(result[lcname])) { result[lcname].push(value); } else { result[lcname] = [ result[lcname], value ]; } } else { result[lcname] = value; } } return [result, value, valuePos]; }; parser._rfc6868Escape = function(val) { return val.replace(/\^['n^]/g, function(x) { return RFC6868_REPLACE_MAP[x]; }); }; var RFC6868_REPLACE_MAP = { "^'": '"', "^n": "\n", "^^": "^" }; parser._parseMultiValue = function(buffer2, delim, type, result, innerMulti, designSet, structuredValue) { var pos = 0; var lastPos = 0; var value; if (delim.length === 0) { return buffer2; } while ((pos = helpers.unescapedIndexOf(buffer2, delim, lastPos)) !== -1) { value = buffer2.substr(lastPos, pos - lastPos); if (innerMulti) { value = parser._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue); } else { value = parser._parseValue(value, type, designSet, structuredValue); } result.push(value); lastPos = pos + delim.length; } value = buffer2.substr(lastPos); if (innerMulti) { value = parser._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue); } else { value = parser._parseValue(value, type, designSet, structuredValue); } result.push(value); return result.length == 1 ? result[0] : result; }; parser._eachLine = function(buffer2, callback) { var len = buffer2.length; var lastPos = buffer2.search(CHAR); var pos = lastPos; var line; var firstChar; var newlineOffset; do { pos = buffer2.indexOf("\n", lastPos) + 1; if (pos > 1 && buffer2[pos - 2] === "\r") { newlineOffset = 2; } else { newlineOffset = 1; } if (pos === 0) { pos = len; newlineOffset = 0; } firstChar = buffer2[lastPos]; if (firstChar === " " || firstChar === " ") { line += buffer2.substr( lastPos + 1, pos - lastPos - (newlineOffset + 1) ); } else { if (line) callback(null, line); line = buffer2.substr( lastPos, pos - lastPos - newlineOffset ); } lastPos = pos; } while (pos !== len); line = line.trim(); if (line.length) callback(null, line); }; return parser; }(); ICAL.Component = function() { "use strict"; var PROPERTY_INDEX = 1; var COMPONENT_INDEX = 2; var NAME_INDEX = 0; function Component2(jCal, parent) { if (typeof jCal === "string") { jCal = [jCal, [], []]; } this.jCal = jCal; this.parent = parent || null; } Component2.prototype = { /** * Hydrated properties are inserted into the _properties array at the same * position as in the jCal array, so its possible the array contains * undefined values for unhydrdated properties. To avoid iterating the * array when checking if all properties have been hydrated, we save the * count here. * * @type {Number} * @private */ _hydratedPropertyCount: 0, /** * The same count as for _hydratedPropertyCount, but for subcomponents * * @type {Number} * @private */ _hydratedComponentCount: 0, /** * The name of this component * @readonly */ get name() { return this.jCal[NAME_INDEX]; }, /** * The design set for this component, e.g. icalendar vs vcard * * @type {ICAL.design.designSet} * @private */ get _designSet() { var parentDesign = this.parent && this.parent._designSet; return parentDesign || ICAL.design.getDesignSet(this.name); }, _hydrateComponent: function(index3) { if (!this._components) { this._components = []; this._hydratedComponentCount = 0; } if (this._components[index3]) { return this._components[index3]; } var comp = new Component2( this.jCal[COMPONENT_INDEX][index3], this ); this._hydratedComponentCount++; return this._components[index3] = comp; }, _hydrateProperty: function(index3) { if (!this._properties) { this._properties = []; this._hydratedPropertyCount = 0; } if (this._properties[index3]) { return this._properties[index3]; } var prop = new ICAL.Property( this.jCal[PROPERTY_INDEX][index3], this ); this._hydratedPropertyCount++; return this._properties[index3] = prop; }, /** * Finds first sub component, optionally filtered by name. * * @param {String=} name Optional name to filter by * @return {?ICAL.Component} The found subcomponent */ getFirstSubcomponent: function(name) { if (name) { var i = 0; var comps = this.jCal[COMPONENT_INDEX]; var len = comps.length; for (; i < len; i++) { if (comps[i][NAME_INDEX] === name) { var result = this._hydrateComponent(i); return result; } } } else { if (this.jCal[COMPONENT_INDEX].length) { return this._hydrateComponent(0); } } return null; }, /** * Finds all sub components, optionally filtering by name. * * @param {String=} name Optional name to filter by * @return {ICAL.Component[]} The found sub components */ getAllSubcomponents: function(name) { var jCalLen = this.jCal[COMPONENT_INDEX].length; var i = 0; if (name) { var comps = this.jCal[COMPONENT_INDEX]; var result = []; for (; i < jCalLen; i++) { if (name === comps[i][NAME_INDEX]) { result.push( this._hydrateComponent(i) ); } } return result; } else { if (!this._components || this._hydratedComponentCount !== jCalLen) { for (; i < jCalLen; i++) { this._hydrateComponent(i); } } return this._components || []; } }, /** * Returns true when a named property exists. * * @param {String} name The property name * @return {Boolean} True, when property is found */ hasProperty: function(name) { var props = this.jCal[PROPERTY_INDEX]; var len = props.length; var i = 0; for (; i < len; i++) { if (props[i][NAME_INDEX] === name) { return true; } } return false; }, /** * Finds the first property, optionally with the given name. * * @param {String=} name Lowercase property name * @return {?ICAL.Property} The found property */ getFirstProperty: function(name) { if (name) { var i = 0; var props = this.jCal[PROPERTY_INDEX]; var len = props.length; for (; i < len; i++) { if (props[i][NAME_INDEX] === name) { var result = this._hydrateProperty(i); return result; } } } else { if (this.jCal[PROPERTY_INDEX].length) { return this._hydrateProperty(0); } } return null; }, /** * Returns first property's value, if available. * * @param {String=} name Lowercase property name * @return {?String} The found property value. */ getFirstPropertyValue: function(name) { var prop = this.getFirstProperty(name); if (prop) { return prop.getFirstValue(); } return null; }, /** * Get all properties in the component, optionally filtered by name. * * @param {String=} name Lowercase property name * @return {ICAL.Property[]} List of properties */ getAllProperties: function(name) { var jCalLen = this.jCal[PROPERTY_INDEX].length; var i = 0; if (name) { var props = this.jCal[PROPERTY_INDEX]; var result = []; for (; i < jCalLen; i++) { if (name === props[i][NAME_INDEX]) { result.push( this._hydrateProperty(i) ); } } return result; } else { if (!this._properties || this._hydratedPropertyCount !== jCalLen) { for (; i < jCalLen; i++) { this._hydrateProperty(i); } } return this._properties || []; } }, _removeObjectByIndex: function(jCalIndex, cache, index3) { cache = cache || []; if (cache[index3]) { var obj = cache[index3]; if ("parent" in obj) { obj.parent = null; } } cache.splice(index3, 1); this.jCal[jCalIndex].splice(index3, 1); }, _removeObject: function(jCalIndex, cache, nameOrObject) { var i = 0; var objects = this.jCal[jCalIndex]; var len = objects.length; var cached = this[cache]; if (typeof nameOrObject === "string") { for (; i < len; i++) { if (objects[i][NAME_INDEX] === nameOrObject) { this._removeObjectByIndex(jCalIndex, cached, i); return true; } } } else if (cached) { for (; i < len; i++) { if (cached[i] && cached[i] === nameOrObject) { this._removeObjectByIndex(jCalIndex, cached, i); return true; } } } return false; }, _removeAllObjects: function(jCalIndex, cache, name) { var cached = this[cache]; var objects = this.jCal[jCalIndex]; var i = objects.length - 1; for (; i >= 0; i--) { if (!name || objects[i][NAME_INDEX] === name) { this._removeObjectByIndex(jCalIndex, cached, i); } } }, /** * Adds a single sub component. * * @param {ICAL.Component} component The component to add * @return {ICAL.Component} The passed in component */ addSubcomponent: function(component) { if (!this._components) { this._components = []; this._hydratedComponentCount = 0; } if (component.parent) { component.parent.removeSubcomponent(component); } var idx = this.jCal[COMPONENT_INDEX].push(component.jCal); this._components[idx - 1] = component; this._hydratedComponentCount++; component.parent = this; return component; }, /** * Removes a single component by name or the instance of a specific * component. * * @param {ICAL.Component|String} nameOrComp Name of component, or component * @return {Boolean} True when comp is removed */ removeSubcomponent: function(nameOrComp) { var removed = this._removeObject(COMPONENT_INDEX, "_components", nameOrComp); if (removed) { this._hydratedComponentCount--; } return removed; }, /** * Removes all components or (if given) all components by a particular * name. * * @param {String=} name Lowercase component name */ removeAllSubcomponents: function(name) { var removed = this._removeAllObjects(COMPONENT_INDEX, "_components", name); this._hydratedComponentCount = 0; return removed; }, /** * Adds an {@link ICAL.Property} to the component. * * @param {ICAL.Property} property The property to add * @return {ICAL.Property} The passed in property */ addProperty: function(property) { if (!(property instanceof ICAL.Property)) { throw new TypeError("must instance of ICAL.Property"); } if (!this._properties) { this._properties = []; this._hydratedPropertyCount = 0; } if (property.parent) { property.parent.removeProperty(property); } var idx = this.jCal[PROPERTY_INDEX].push(property.jCal); this._properties[idx - 1] = property; this._hydratedPropertyCount++; property.parent = this; return property; }, /** * Helper method to add a property with a value to the component. * * @param {String} name Property name to add * @param {String|Number|Object} value Property value * @return {ICAL.Property} The created property */ addPropertyWithValue: function(name, value) { var prop = new ICAL.Property(name); prop.setValue(value); this.addProperty(prop); return prop; }, /** * Helper method that will update or create a property of the given name * and sets its value. If multiple properties with the given name exist, * only the first is updated. * * @param {String} name Property name to update * @param {String|Number|Object} value Property value * @return {ICAL.Property} The created property */ updatePropertyWithValue: function(name, value) { var prop = this.getFirstProperty(name); if (prop) { prop.setValue(value); } else { prop = this.addPropertyWithValue(name, value); } return prop; }, /** * Removes a single property by name or the instance of the specific * property. * * @param {String|ICAL.Property} nameOrProp Property name or instance to remove * @return {Boolean} True, when deleted */ removeProperty: function(nameOrProp) { var removed = this._removeObject(PROPERTY_INDEX, "_properties", nameOrProp); if (removed) { this._hydratedPropertyCount--; } return removed; }, /** * Removes all properties associated with this component, optionally * filtered by name. * * @param {String=} name Lowercase property name * @return {Boolean} True, when deleted */ removeAllProperties: function(name) { var removed = this._removeAllObjects(PROPERTY_INDEX, "_properties", name); this._hydratedPropertyCount = 0; return removed; }, /** * Returns the Object representation of this component. The returned object * is a live jCal object and should be cloned if modified. * @return {Object} */ toJSON: function() { return this.jCal; }, /** * The string representation of this component. * @return {String} */ toString: function() { return ICAL.stringify.component( this.jCal, this._designSet ); } }; Component2.fromString = function(str) { return new Component2(ICAL.parse.component(str)); }; return Component2; }(); ICAL.Property = function() { "use strict"; var NAME_INDEX = 0; var PROP_INDEX = 1; var TYPE_INDEX = 2; var VALUE_INDEX = 3; var design = ICAL.design; function Property(jCal, parent) { this._parent = parent || null; if (typeof jCal === "string") { this.jCal = [jCal, {}, design.defaultType]; this.jCal[TYPE_INDEX] = this.getDefaultType(); } else { this.jCal = jCal; } this._updateType(); } Property.prototype = { /** * The value type for this property * @readonly * @type {String} */ get type() { return this.jCal[TYPE_INDEX]; }, /** * The name of this property, in lowercase. * @readonly * @type {String} */ get name() { return this.jCal[NAME_INDEX]; }, /** * The parent component for this property. * @type {ICAL.Component} */ get parent() { return this._parent; }, set parent(p) { var designSetChanged = !this._parent || p && p._designSet != this._parent._designSet; this._parent = p; if (this.type == design.defaultType && designSetChanged) { this.jCal[TYPE_INDEX] = this.getDefaultType(); this._updateType(); } return p; }, /** * The design set for this property, e.g. icalendar vs vcard * * @type {ICAL.design.designSet} * @private */ get _designSet() { return this.parent ? this.parent._designSet : design.defaultSet; }, /** * Updates the type metadata from the current jCal type and design set. * * @private */ _updateType: function() { var designSet = this._designSet; if (this.type in designSet.value) { var designType = designSet.value[this.type]; if ("decorate" in designSet.value[this.type]) { this.isDecorated = true; } else { this.isDecorated = false; } if (this.name in designSet.property) { this.isMultiValue = "multiValue" in designSet.property[this.name]; this.isStructuredValue = "structuredValue" in designSet.property[this.name]; } } }, /** * Hydrate a single value. The act of hydrating means turning the raw jCal * value into a potentially wrapped object, for example {@link ICAL.Time}. * * @private * @param {Number} index The index of the value to hydrate * @return {Object} The decorated value. */ _hydrateValue: function(index3) { if (this._values && this._values[index3]) { return this._values[index3]; } if (this.jCal.length <= VALUE_INDEX + index3) { return null; } if (this.isDecorated) { if (!this._values) { this._values = []; } return this._values[index3] = this._decorate( this.jCal[VALUE_INDEX + index3] ); } else { return this.jCal[VALUE_INDEX + index3]; } }, /** * Decorate a single value, returning its wrapped object. This is used by * the hydrate function to actually wrap the value. * * @private * @param {?} value The value to decorate * @return {Object} The decorated value */ _decorate: function(value) { return this._designSet.value[this.type].decorate(value, this); }, /** * Undecorate a single value, returning its raw jCal data. * * @private * @param {Object} value The value to undecorate * @return {?} The undecorated value */ _undecorate: function(value) { return this._designSet.value[this.type].undecorate(value, this); }, /** * Sets the value at the given index while also hydrating it. The passed * value can either be a decorated or undecorated value. * * @private * @param {?} value The value to set * @param {Number} index The index to set it at */ _setDecoratedValue: function(value, index3) { if (!this._values) { this._values = []; } if (typeof value === "object" && "icaltype" in value) { this.jCal[VALUE_INDEX + index3] = this._undecorate(value); this._values[index3] = value; } else { this.jCal[VALUE_INDEX + index3] = value; this._values[index3] = this._decorate(value); } }, /** * Gets a parameter on the property. * * @param {String} name Property name (lowercase) * @return {Array|String} Property value */ getParameter: function(name) { if (name in this.jCal[PROP_INDEX]) { return this.jCal[PROP_INDEX][name]; } else { return void 0; } }, /** * Gets first parameter on the property. * * @param {String} name Property name (lowercase) * @return {String} Property value */ getFirstParameter: function(name) { var parameters = this.getParameter(name); if (Array.isArray(parameters)) { return parameters[0]; } return parameters; }, /** * Sets a parameter on the property. * * @param {String} name The parameter name * @param {Array|String} value The parameter value */ setParameter: function(name, value) { var lcname = name.toLowerCase(); if (typeof value === "string" && lcname in this._designSet.param && "multiValue" in this._designSet.param[lcname]) { value = [value]; } this.jCal[PROP_INDEX][name] = value; }, /** * Removes a parameter * * @param {String} name The parameter name */ removeParameter: function(name) { delete this.jCal[PROP_INDEX][name]; }, /** * Get the default type based on this property's name. * * @return {String} The default type for this property */ getDefaultType: function() { var name = this.jCal[NAME_INDEX]; var designSet = this._designSet; if (name in designSet.property) { var details = designSet.property[name]; if ("defaultType" in details) { return details.defaultType; } } return design.defaultType; }, /** * Sets type of property and clears out any existing values of the current * type. * * @param {String} type New iCAL type (see design.*.values) */ resetType: function(type) { this.removeAllValues(); this.jCal[TYPE_INDEX] = type; this._updateType(); }, /** * Finds the first property value. * * @return {String} First property value */ getFirstValue: function() { return this._hydrateValue(0); }, /** * Gets all values on the property. * * NOTE: this creates an array during each call. * * @return {Array} List of values */ getValues: function() { var len = this.jCal.length - VALUE_INDEX; if (len < 1) { return []; } var i = 0; var result = []; for (; i < len; i++) { result[i] = this._hydrateValue(i); } return result; }, /** * Removes all values from this property */ removeAllValues: function() { if (this._values) { this._values.length = 0; } this.jCal.length = 3; }, /** * Sets the values of the property. Will overwrite the existing values. * This can only be used for multi-value properties. * * @param {Array} values An array of values */ setValues: function(values) { if (!this.isMultiValue) { throw new Error( this.name + ": does not not support mulitValue.\noverride isMultiValue" ); } var len = values.length; var i = 0; this.removeAllValues(); if (len > 0 && typeof values[0] === "object" && "icaltype" in values[0]) { this.resetType(values[0].icaltype); } if (this.isDecorated) { for (; i < len; i++) { this._setDecoratedValue(values[i], i); } } else { for (; i < len; i++) { this.jCal[VALUE_INDEX + i] = values[i]; } } }, /** * Sets the current value of the property. If this is a multi-value * property, all other values will be removed. * * @param {String|Object} value New property value. */ setValue: function(value) { this.removeAllValues(); if (typeof value === "object" && "icaltype" in value) { this.resetType(value.icaltype); } if (this.isDecorated) { this._setDecoratedValue(value, 0); } else { this.jCal[VALUE_INDEX] = value; } }, /** * Returns the Object representation of this component. The returned object * is a live jCal object and should be cloned if modified. * @return {Object} */ toJSON: function() { return this.jCal; }, /** * The string representation of this component. * @return {String} */ toICALString: function() { return ICAL.stringify.property( this.jCal, this._designSet, true ); } }; Property.fromString = function(str, designSet) { return new Property(ICAL.parse.property(str, designSet)); }; return Property; }(); ICAL.UtcOffset = function() { function UtcOffset(aData) { this.fromData(aData); } UtcOffset.prototype = { /** * The hours in the utc-offset * @type {Number} */ hours: 0, /** * The minutes in the utc-offset * @type {Number} */ minutes: 0, /** * The sign of the utc offset, 1 for positive offset, -1 for negative * offsets. * @type {Number} */ factor: 1, /** * The type name, to be used in the jCal object. * @constant * @type {String} * @default "utc-offset" */ icaltype: "utc-offset", /** * Returns a clone of the utc offset object. * * @return {ICAL.UtcOffset} The cloned object */ clone: function() { return ICAL.UtcOffset.fromSeconds(this.toSeconds()); }, /** * Sets up the current instance using members from the passed data object. * * @param {Object} aData An object with members of the utc offset * @param {Number=} aData.hours The hours for the utc offset * @param {Number=} aData.minutes The minutes in the utc offset * @param {Number=} aData.factor The factor for the utc-offset, either -1 or 1 */ fromData: function(aData) { if (aData) { for (var key in aData) { if (aData.hasOwnProperty(key)) { this[key] = aData[key]; } } } this._normalize(); }, /** * Sets up the current instance from the given seconds value. The seconds * value is truncated to the minute. Offsets are wrapped when the world * ends, the hour after UTC+14:00 is UTC-12:00. * * @param {Number} aSeconds The seconds to convert into an offset */ fromSeconds: function(aSeconds) { var secs = Math.abs(aSeconds); this.factor = aSeconds < 0 ? -1 : 1; this.hours = ICAL.helpers.trunc(secs / 3600); secs -= this.hours * 3600; this.minutes = ICAL.helpers.trunc(secs / 60); return this; }, /** * Convert the current offset to a value in seconds * * @return {Number} The offset in seconds */ toSeconds: function() { return this.factor * (60 * this.minutes + 3600 * this.hours); }, /** * Compare this utc offset with another one. * * @param {ICAL.UtcOffset} other The other offset to compare with * @return {Number} -1, 0 or 1 for less/equal/greater */ compare: function icaltime_compare(other) { var a2 = this.toSeconds(); var b = other.toSeconds(); return (a2 > b) - (b > a2); }, _normalize: function() { var secs = this.toSeconds(); var factor = this.factor; while (secs < -43200) { secs += 97200; } while (secs > 50400) { secs -= 97200; } this.fromSeconds(secs); if (secs == 0) { this.factor = factor; } }, /** * The iCalendar string representation of this utc-offset. * @return {String} */ toICALString: function() { return ICAL.design.icalendar.value["utc-offset"].toICAL(this.toString()); }, /** * The string representation of this utc-offset. * @return {String} */ toString: function toString2() { return (this.factor == 1 ? "+" : "-") + ICAL.helpers.pad2(this.hours) + ":" + ICAL.helpers.pad2(this.minutes); } }; UtcOffset.fromString = function(aString) { var options = {}; options.factor = aString[0] === "+" ? 1 : -1; options.hours = ICAL.helpers.strictParseInt(aString.substr(1, 2)); options.minutes = ICAL.helpers.strictParseInt(aString.substr(4, 2)); return new ICAL.UtcOffset(options); }; UtcOffset.fromSeconds = function(aSeconds) { var instance = new UtcOffset(); instance.fromSeconds(aSeconds); return instance; }; return UtcOffset; }(); ICAL.Binary = function() { function Binary(aValue) { this.value = aValue; } Binary.prototype = { /** * The type name, to be used in the jCal object. * @default "binary" * @constant */ icaltype: "binary", /** * Base64 decode the current value * * @return {String} The base64-decoded value */ decodeValue: function decodeValue() { return this._b64_decode(this.value); }, /** * Encodes the passed parameter with base64 and sets the internal * value to the result. * * @param {String} aValue The raw binary value to encode */ setEncodedValue: function setEncodedValue(aValue) { this.value = this._b64_encode(aValue); }, _b64_encode: function base64_encode(data) { var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc = "", tmp_arr = []; if (!data) { return data; } do { o1 = data.charCodeAt(i++); o2 = data.charCodeAt(i++); o3 = data.charCodeAt(i++); bits = o1 << 16 | o2 << 8 | o3; h1 = bits >> 18 & 63; h2 = bits >> 12 & 63; h3 = bits >> 6 & 63; h4 = bits & 63; tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); } while (i < data.length); enc = tmp_arr.join(""); var r = data.length % 3; return (r ? enc.slice(0, r - 3) : enc) + "===".slice(r || 3); }, _b64_decode: function base64_decode(data) { var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, dec = "", tmp_arr = []; if (!data) { return data; } data += ""; do { h1 = b64.indexOf(data.charAt(i++)); h2 = b64.indexOf(data.charAt(i++)); h3 = b64.indexOf(data.charAt(i++)); h4 = b64.indexOf(data.charAt(i++)); bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; o1 = bits >> 16 & 255; o2 = bits >> 8 & 255; o3 = bits & 255; if (h3 == 64) { tmp_arr[ac++] = String.fromCharCode(o1); } else if (h4 == 64) { tmp_arr[ac++] = String.fromCharCode(o1, o2); } else { tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); } } while (i < data.length); dec = tmp_arr.join(""); return dec; }, /** * The string representation of this value * @return {String} */ toString: function() { return this.value; } }; Binary.fromString = function(aString) { return new Binary(aString); }; return Binary; }(); (function() { ICAL.Period = function icalperiod(aData) { this.wrappedJSObject = this; if (aData && "start" in aData) { if (aData.start && !(aData.start instanceof ICAL.Time)) { throw new TypeError(".start must be an instance of ICAL.Time"); } this.start = aData.start; } if (aData && aData.end && aData.duration) { throw new Error("cannot accept both end and duration"); } if (aData && "end" in aData) { if (aData.end && !(aData.end instanceof ICAL.Time)) { throw new TypeError(".end must be an instance of ICAL.Time"); } this.end = aData.end; } if (aData && "duration" in aData) { if (aData.duration && !(aData.duration instanceof ICAL.Duration)) { throw new TypeError(".duration must be an instance of ICAL.Duration"); } this.duration = aData.duration; } }; ICAL.Period.prototype = { /** * The start of the period * @type {ICAL.Time} */ start: null, /** * The end of the period * @type {ICAL.Time} */ end: null, /** * The duration of the period * @type {ICAL.Duration} */ duration: null, /** * The class identifier. * @constant * @type {String} * @default "icalperiod" */ icalclass: "icalperiod", /** * The type name, to be used in the jCal object. * @constant * @type {String} * @default "period" */ icaltype: "period", /** * Returns a clone of the duration object. * * @return {ICAL.Period} The cloned object */ clone: function() { return ICAL.Period.fromData({ start: this.start ? this.start.clone() : null, end: this.end ? this.end.clone() : null, duration: this.duration ? this.duration.clone() : null }); }, /** * Calculates the duration of the period, either directly or by subtracting * start from end date. * * @return {ICAL.Duration} The calculated duration */ getDuration: function duration() { if (this.duration) { return this.duration; } else { return this.end.subtractDate(this.start); } }, /** * Calculates the end date of the period, either directly or by adding * duration to start date. * * @return {ICAL.Time} The calculated end date */ getEnd: function() { if (this.end) { return this.end; } else { var end = this.start.clone(); end.addDuration(this.duration); return end; } }, /** * The string representation of this period. * @return {String} */ toString: function toString2() { return this.start + "/" + (this.end || this.duration); }, /** * The jCal representation of this period type. * @return {Object} */ toJSON: function() { return [this.start.toString(), (this.end || this.duration).toString()]; }, /** * The iCalendar string representation of this period. * @return {String} */ toICALString: function() { return this.start.toICALString() + "/" + (this.end || this.duration).toICALString(); } }; ICAL.Period.fromString = function fromString(str, prop) { var parts = str.split("/"); if (parts.length !== 2) { throw new Error( 'Invalid string value: "' + str + '" must contain a "/" char.' ); } var options = { start: ICAL.Time.fromDateTimeString(parts[0], prop) }; var end = parts[1]; if (ICAL.Duration.isValueString(end)) { options.duration = ICAL.Duration.fromString(end); } else { options.end = ICAL.Time.fromDateTimeString(end, prop); } return new ICAL.Period(options); }; ICAL.Period.fromData = function fromData(aData) { return new ICAL.Period(aData); }; ICAL.Period.fromJSON = function(aData, aProp, aLenient) { function fromDateOrDateTimeString(aValue, aProp2) { if (aLenient) { return ICAL.Time.fromString(aValue, aProp2); } else { return ICAL.Time.fromDateTimeString(aValue, aProp2); } } if (ICAL.Duration.isValueString(aData[1])) { return ICAL.Period.fromData({ start: fromDateOrDateTimeString(aData[0], aProp), duration: ICAL.Duration.fromString(aData[1]) }); } else { return ICAL.Period.fromData({ start: fromDateOrDateTimeString(aData[0], aProp), end: fromDateOrDateTimeString(aData[1], aProp) }); } }; })(); (function() { var DURATION_LETTERS = /([PDWHMTS]{1,1})/; ICAL.Duration = function icalduration(data) { this.wrappedJSObject = this; this.fromData(data); }; ICAL.Duration.prototype = { /** * The weeks in this duration * @type {Number} * @default 0 */ weeks: 0, /** * The days in this duration * @type {Number} * @default 0 */ days: 0, /** * The days in this duration * @type {Number} * @default 0 */ hours: 0, /** * The minutes in this duration * @type {Number} * @default 0 */ minutes: 0, /** * The seconds in this duration * @type {Number} * @default 0 */ seconds: 0, /** * The seconds in this duration * @type {Boolean} * @default false */ isNegative: false, /** * The class identifier. * @constant * @type {String} * @default "icalduration" */ icalclass: "icalduration", /** * The type name, to be used in the jCal object. * @constant * @type {String} * @default "duration" */ icaltype: "duration", /** * Returns a clone of the duration object. * * @return {ICAL.Duration} The cloned object */ clone: function clone() { return ICAL.Duration.fromData(this); }, /** * The duration value expressed as a number of seconds. * * @return {Number} The duration value in seconds */ toSeconds: function toSeconds() { var seconds = this.seconds + 60 * this.minutes + 3600 * this.hours + 86400 * this.days + 7 * 86400 * this.weeks; return this.isNegative ? -seconds : seconds; }, /** * Reads the passed seconds value into this duration object. Afterwards, * members like {@link ICAL.Duration#days days} and {@link ICAL.Duration#weeks weeks} will be set up * accordingly. * * @param {Number} aSeconds The duration value in seconds * @return {ICAL.Duration} Returns this instance */ fromSeconds: function fromSeconds(aSeconds) { var secs = Math.abs(aSeconds); this.isNegative = aSeconds < 0; this.days = ICAL.helpers.trunc(secs / 86400); if (this.days % 7 == 0) { this.weeks = this.days / 7; this.days = 0; } else { this.weeks = 0; } secs -= (this.days + 7 * this.weeks) * 86400; this.hours = ICAL.helpers.trunc(secs / 3600); secs -= this.hours * 3600; this.minutes = ICAL.helpers.trunc(secs / 60); secs -= this.minutes * 60; this.seconds = secs; return this; }, /** * Sets up the current instance using members from the passed data object. * * @param {Object} aData An object with members of the duration * @param {Number} aData.weeks Duration in weeks * @param {Number} aData.days Duration in days * @param {Number} aData.hours Duration in hours * @param {Number} aData.minutes Duration in minutes * @param {Number} aData.seconds Duration in seconds * @param {Boolean} aData.isNegative If true, the duration is negative */ fromData: function fromData(aData) { var propsToCopy = [ "weeks", "days", "hours", "minutes", "seconds", "isNegative" ]; for (var key in propsToCopy) { if (!propsToCopy.hasOwnProperty(key)) { continue; } var prop = propsToCopy[key]; if (aData && prop in aData) { this[prop] = aData[prop]; } else { this[prop] = 0; } } }, /** * Resets the duration instance to the default values, i.e. PT0S */ reset: function reset() { this.isNegative = false; this.weeks = 0; this.days = 0; this.hours = 0; this.minutes = 0; this.seconds = 0; }, /** * Compares the duration instance with another one. * * @param {ICAL.Duration} aOther The instance to compare with * @return {Number} -1, 0 or 1 for less/equal/greater */ compare: function compare(aOther) { var thisSeconds = this.toSeconds(); var otherSeconds = aOther.toSeconds(); return (thisSeconds > otherSeconds) - (thisSeconds < otherSeconds); }, /** * Normalizes the duration instance. For example, a duration with a value * of 61 seconds will be normalized to 1 minute and 1 second. */ normalize: function normalize2() { this.fromSeconds(this.toSeconds()); }, /** * The string representation of this duration. * @return {String} */ toString: function toString2() { if (this.toSeconds() == 0) { return "PT0S"; } else { var str = ""; if (this.isNegative) str += "-"; str += "P"; if (this.weeks) str += this.weeks + "W"; if (this.days) str += this.days + "D"; if (this.hours || this.minutes || this.seconds) { str += "T"; if (this.hours) str += this.hours + "H"; if (this.minutes) str += this.minutes + "M"; if (this.seconds) str += this.seconds + "S"; } return str; } }, /** * The iCalendar string representation of this duration. * @return {String} */ toICALString: function() { return this.toString(); } }; ICAL.Duration.fromSeconds = function icalduration_from_seconds(aSeconds) { return new ICAL.Duration().fromSeconds(aSeconds); }; function parseDurationChunk(letter, number2, object) { var type; switch (letter) { case "P": if (number2 && number2 === "-") { object.isNegative = true; } else { object.isNegative = false; } break; case "D": type = "days"; break; case "W": type = "weeks"; break; case "H": type = "hours"; break; case "M": type = "minutes"; break; case "S": type = "seconds"; break; default: return 0; } if (type) { if (!number2 && number2 !== 0) { throw new Error( 'invalid duration value: Missing number before "' + letter + '"' ); } var num = parseInt(number2, 10); if (ICAL.helpers.isStrictlyNaN(num)) { throw new Error( 'invalid duration value: Invalid number "' + number2 + '" before "' + letter + '"' ); } object[type] = num; } return 1; } ICAL.Duration.isValueString = function(string3) { return string3[0] === "P" || string3[1] === "P"; }; ICAL.Duration.fromString = function icalduration_from_string(aStr) { var pos = 0; var dict = /* @__PURE__ */ Object.create(null); var chunks = 0; while ((pos = aStr.search(DURATION_LETTERS)) !== -1) { var type = aStr[pos]; var numeric = aStr.substr(0, pos); aStr = aStr.substr(pos + 1); chunks += parseDurationChunk(type, numeric, dict); } if (chunks < 2) { throw new Error( 'invalid duration value: Not enough duration components in "' + aStr + '"' ); } return new ICAL.Duration(dict); }; ICAL.Duration.fromData = function icalduration_from_data(aData) { return new ICAL.Duration(aData); }; })(); (function() { var OPTIONS = [ "tzid", "location", "tznames", "latitude", "longitude" ]; ICAL.Timezone = function icaltimezone(data) { this.wrappedJSObject = this; this.fromData(data); }; ICAL.Timezone.prototype = { /** * Timezone identifier * @type {String} */ tzid: "", /** * Timezone location * @type {String} */ location: "", /** * Alternative timezone name, for the string representation * @type {String} */ tznames: "", /** * The primary latitude for the timezone. * @type {Number} */ latitude: 0, /** * The primary longitude for the timezone. * @type {Number} */ longitude: 0, /** * The vtimezone component for this timezone. * @type {ICAL.Component} */ component: null, /** * The year this timezone has been expanded to. All timezone transition * dates until this year are known and can be used for calculation * * @private * @type {Number} */ expandedUntilYear: 0, /** * The class identifier. * @constant * @type {String} * @default "icaltimezone" */ icalclass: "icaltimezone", /** * Sets up the current instance using members from the passed data object. * * @param {ICAL.Component|Object} aData options for class * @param {String|ICAL.Component} aData.component * If aData is a simple object, then this member can be set to either a * string containing the component data, or an already parsed * ICAL.Component * @param {String} aData.tzid The timezone identifier * @param {String} aData.location The timezone locationw * @param {String} aData.tznames An alternative string representation of the * timezone * @param {Number} aData.latitude The latitude of the timezone * @param {Number} aData.longitude The longitude of the timezone */ fromData: function fromData(aData) { this.expandedUntilYear = 0; this.changes = []; if (aData instanceof ICAL.Component) { this.component = aData; } else { if (aData && "component" in aData) { if (typeof aData.component == "string") { var jCal = ICAL.parse(aData.component); this.component = new ICAL.Component(jCal); } else if (aData.component instanceof ICAL.Component) { this.component = aData.component; } else { this.component = null; } } for (var key in OPTIONS) { if (OPTIONS.hasOwnProperty(key)) { var prop = OPTIONS[key]; if (aData && prop in aData) { this[prop] = aData[prop]; } } } } if (this.component instanceof ICAL.Component && !this.tzid) { this.tzid = this.component.getFirstPropertyValue("tzid"); } return this; }, /** * Finds the utcOffset the given time would occur in this timezone. * * @param {ICAL.Time} tt The time to check for * @return {Number} utc offset in seconds */ utcOffset: function utcOffset(tt) { if (this == ICAL.Timezone.utcTimezone || this == ICAL.Timezone.localTimezone) { return 0; } this._ensureCoverage(tt.year); if (!this.changes.length) { return 0; } var tt_change = { year: tt.year, month: tt.month, day: tt.day, hour: tt.hour, minute: tt.minute, second: tt.second }; var change_num = this._findNearbyChange(tt_change); var change_num_to_use = -1; var step = 1; for (; ; ) { var change = ICAL.helpers.clone(this.changes[change_num], true); if (change.utcOffset < change.prevUtcOffset) { ICAL.Timezone.adjust_change(change, 0, 0, 0, change.utcOffset); } else { ICAL.Timezone.adjust_change( change, 0, 0, 0, change.prevUtcOffset ); } var cmp = ICAL.Timezone._compare_change_fn(tt_change, change); if (cmp >= 0) { change_num_to_use = change_num; } else { step = -1; } if (step == -1 && change_num_to_use != -1) { break; } change_num += step; if (change_num < 0) { return 0; } if (change_num >= this.changes.length) { break; } } var zone_change = this.changes[change_num_to_use]; var utcOffset_change = zone_change.utcOffset - zone_change.prevUtcOffset; if (utcOffset_change < 0 && change_num_to_use > 0) { var tmp_change = ICAL.helpers.clone(zone_change, true); ICAL.Timezone.adjust_change( tmp_change, 0, 0, 0, tmp_change.prevUtcOffset ); if (ICAL.Timezone._compare_change_fn(tt_change, tmp_change) < 0) { var prev_zone_change = this.changes[change_num_to_use - 1]; var want_daylight = false; if (zone_change.is_daylight != want_daylight && prev_zone_change.is_daylight == want_daylight) { zone_change = prev_zone_change; } } } return zone_change.utcOffset; }, _findNearbyChange: function icaltimezone_find_nearby_change(change) { var idx = ICAL.helpers.binsearchInsert( this.changes, change, ICAL.Timezone._compare_change_fn ); if (idx >= this.changes.length) { return this.changes.length - 1; } return idx; }, _ensureCoverage: function(aYear) { if (ICAL.Timezone._minimumExpansionYear == -1) { var today = ICAL.Time.now(); ICAL.Timezone._minimumExpansionYear = today.year; } var changesEndYear = aYear; if (changesEndYear < ICAL.Timezone._minimumExpansionYear) { changesEndYear = ICAL.Timezone._minimumExpansionYear; } changesEndYear += ICAL.Timezone.EXTRA_COVERAGE; if (changesEndYear > ICAL.Timezone.MAX_YEAR) { changesEndYear = ICAL.Timezone.MAX_YEAR; } if (!this.changes.length || this.expandedUntilYear < aYear) { var subcomps = this.component.getAllSubcomponents(); var compLen = subcomps.length; var compIdx = 0; for (; compIdx < compLen; compIdx++) { this._expandComponent( subcomps[compIdx], changesEndYear, this.changes ); } this.changes.sort(ICAL.Timezone._compare_change_fn); this.expandedUntilYear = changesEndYear; } }, _expandComponent: function(aComponent, aYear, changes) { if (!aComponent.hasProperty("dtstart") || !aComponent.hasProperty("tzoffsetto") || !aComponent.hasProperty("tzoffsetfrom")) { return null; } var dtstart = aComponent.getFirstProperty("dtstart").getFirstValue(); var change; function convert_tzoffset(offset) { return offset.factor * (offset.hours * 3600 + offset.minutes * 60); } function init_changes() { var changebase = {}; changebase.is_daylight = aComponent.name == "daylight"; changebase.utcOffset = convert_tzoffset( aComponent.getFirstProperty("tzoffsetto").getFirstValue() ); changebase.prevUtcOffset = convert_tzoffset( aComponent.getFirstProperty("tzoffsetfrom").getFirstValue() ); return changebase; } if (!aComponent.hasProperty("rrule") && !aComponent.hasProperty("rdate")) { change = init_changes(); change.year = dtstart.year; change.month = dtstart.month; change.day = dtstart.day; change.hour = dtstart.hour; change.minute = dtstart.minute; change.second = dtstart.second; ICAL.Timezone.adjust_change( change, 0, 0, 0, -change.prevUtcOffset ); changes.push(change); } else { var props = aComponent.getAllProperties("rdate"); for (var rdatekey in props) { if (!props.hasOwnProperty(rdatekey)) { continue; } var rdate = props[rdatekey]; var time = rdate.getFirstValue(); change = init_changes(); change.year = time.year; change.month = time.month; change.day = time.day; if (time.isDate) { change.hour = dtstart.hour; change.minute = dtstart.minute; change.second = dtstart.second; if (dtstart.zone != ICAL.Timezone.utcTimezone) { ICAL.Timezone.adjust_change( change, 0, 0, 0, -change.prevUtcOffset ); } } else { change.hour = time.hour; change.minute = time.minute; change.second = time.second; if (time.zone != ICAL.Timezone.utcTimezone) { ICAL.Timezone.adjust_change( change, 0, 0, 0, -change.prevUtcOffset ); } } changes.push(change); } var rrule = aComponent.getFirstProperty("rrule"); if (rrule) { rrule = rrule.getFirstValue(); change = init_changes(); if (rrule.until && rrule.until.zone == ICAL.Timezone.utcTimezone) { rrule.until.adjust(0, 0, 0, change.prevUtcOffset); rrule.until.zone = ICAL.Timezone.localTimezone; } var iterator = rrule.iterator(dtstart); var occ; while (occ = iterator.next()) { change = init_changes(); if (occ.year > aYear || !occ) { break; } change.year = occ.year; change.month = occ.month; change.day = occ.day; change.hour = occ.hour; change.minute = occ.minute; change.second = occ.second; change.isDate = occ.isDate; ICAL.Timezone.adjust_change( change, 0, 0, 0, -change.prevUtcOffset ); changes.push(change); } } } return changes; }, /** * The string representation of this timezone. * @return {String} */ toString: function toString2() { return this.tznames ? this.tznames : this.tzid; } }; ICAL.Timezone._compare_change_fn = function icaltimezone_compare_change_fn(a2, b) { if (a2.year < b.year) return -1; else if (a2.year > b.year) return 1; if (a2.month < b.month) return -1; else if (a2.month > b.month) return 1; if (a2.day < b.day) return -1; else if (a2.day > b.day) return 1; if (a2.hour < b.hour) return -1; else if (a2.hour > b.hour) return 1; if (a2.minute < b.minute) return -1; else if (a2.minute > b.minute) return 1; if (a2.second < b.second) return -1; else if (a2.second > b.second) return 1; return 0; }; ICAL.Timezone.convert_time = function icaltimezone_convert_time(tt, from_zone, to_zone) { if (tt.isDate || from_zone.tzid == to_zone.tzid || from_zone == ICAL.Timezone.localTimezone || to_zone == ICAL.Timezone.localTimezone) { tt.zone = to_zone; return tt; } var utcOffset = from_zone.utcOffset(tt); tt.adjust(0, 0, 0, -utcOffset); utcOffset = to_zone.utcOffset(tt); tt.adjust(0, 0, 0, utcOffset); return null; }; ICAL.Timezone.fromData = function icaltimezone_fromData(aData) { var tt = new ICAL.Timezone(); return tt.fromData(aData); }; ICAL.Timezone.utcTimezone = ICAL.Timezone.fromData({ tzid: "UTC" }); ICAL.Timezone.localTimezone = ICAL.Timezone.fromData({ tzid: "floating" }); ICAL.Timezone.adjust_change = function icaltimezone_adjust_change(change, days, hours, minutes, seconds) { return ICAL.Time.prototype.adjust.call( change, days, hours, minutes, seconds, change ); }; ICAL.Timezone._minimumExpansionYear = -1; ICAL.Timezone.MAX_YEAR = 2035; ICAL.Timezone.EXTRA_COVERAGE = 5; })(); ICAL.TimezoneService = function() { var zones; var TimezoneService = { get count() { return Object.keys(zones).length; }, reset: function() { zones = /* @__PURE__ */ Object.create(null); var utc2 = ICAL.Timezone.utcTimezone; zones.Z = utc2; zones.UTC = utc2; zones.GMT = utc2; }, /** * Checks if timezone id has been registered. * * @param {String} tzid Timezone identifier (e.g. America/Los_Angeles) * @return {Boolean} False, when not present */ has: function(tzid) { return !!zones[tzid]; }, /** * Returns a timezone by its tzid if present. * * @param {String} tzid Timezone identifier (e.g. America/Los_Angeles) * @return {?ICAL.Timezone} The timezone, or null if not found */ get: function(tzid) { return zones[tzid]; }, /** * Registers a timezone object or component. * * @param {String=} name * The name of the timezone. Defaults to the component's TZID if not * passed. * @param {ICAL.Component|ICAL.Timezone} zone * The initialized zone or vtimezone. */ register: function(name, timezone2) { if (name instanceof ICAL.Component) { if (name.name === "vtimezone") { timezone2 = new ICAL.Timezone(name); name = timezone2.tzid; } } if (timezone2 instanceof ICAL.Timezone) { zones[name] = timezone2; } else { throw new TypeError("timezone must be ICAL.Timezone or ICAL.Component"); } }, /** * Removes a timezone by its tzid from the list. * * @param {String} tzid Timezone identifier (e.g. America/Los_Angeles) * @return {?ICAL.Timezone} The removed timezone, or null if not registered */ remove: function(tzid) { return delete zones[tzid]; } }; TimezoneService.reset(); return TimezoneService; }(); (function() { ICAL.Time = function icaltime(data, zone) { this.wrappedJSObject = this; var time = this._time = /* @__PURE__ */ Object.create(null); time.year = 0; time.month = 1; time.day = 1; time.hour = 0; time.minute = 0; time.second = 0; time.isDate = false; this.fromData(data, zone); }; ICAL.Time._dowCache = {}; ICAL.Time._wnCache = {}; ICAL.Time.prototype = { /** * The class identifier. * @constant * @type {String} * @default "icaltime" */ icalclass: "icaltime", _cachedUnixTime: null, /** * The type name, to be used in the jCal object. This value may change and * is strictly defined by the {@link ICAL.Time#isDate isDate} member. * @readonly * @type {String} * @default "date-time" */ get icaltype() { return this.isDate ? "date" : "date-time"; }, /** * The timezone for this time. * @type {ICAL.Timezone} */ zone: null, /** * Internal uses to indicate that a change has been made and the next read * operation must attempt to normalize the value (for example changing the * day to 33). * * @type {Boolean} * @private */ _pendingNormalization: false, /** * Returns a clone of the time object. * * @return {ICAL.Time} The cloned object */ clone: function() { return new ICAL.Time(this._time, this.zone); }, /** * Reset the time instance to epoch time */ reset: function icaltime_reset() { this.fromData(ICAL.Time.epochTime); this.zone = ICAL.Timezone.utcTimezone; }, /** * Reset the time instance to the given date/time values. * * @param {Number} year The year to set * @param {Number} month The month to set * @param {Number} day The day to set * @param {Number} hour The hour to set * @param {Number} minute The minute to set * @param {Number} second The second to set * @param {ICAL.Timezone} timezone The timezone to set */ resetTo: function icaltime_resetTo(year, month, day, hour, minute, second, timezone2) { this.fromData({ year, month, day, hour, minute, second, zone: timezone2 }); }, /** * Set up the current instance from the Javascript date value. * * @param {?Date} aDate The Javascript Date to read, or null to reset * @param {Boolean} useUTC If true, the UTC values of the date will be used */ fromJSDate: function icaltime_fromJSDate(aDate, useUTC) { if (!aDate) { this.reset(); } else { if (useUTC) { this.zone = ICAL.Timezone.utcTimezone; this.year = aDate.getUTCFullYear(); this.month = aDate.getUTCMonth() + 1; this.day = aDate.getUTCDate(); this.hour = aDate.getUTCHours(); this.minute = aDate.getUTCMinutes(); this.second = aDate.getUTCSeconds(); } else { this.zone = ICAL.Timezone.localTimezone; this.year = aDate.getFullYear(); this.month = aDate.getMonth() + 1; this.day = aDate.getDate(); this.hour = aDate.getHours(); this.minute = aDate.getMinutes(); this.second = aDate.getSeconds(); } } this._cachedUnixTime = null; return this; }, /** * Sets up the current instance using members from the passed data object. * * @param {Object} aData Time initialization * @param {Number=} aData.year The year for this date * @param {Number=} aData.month The month for this date * @param {Number=} aData.day The day for this date * @param {Number=} aData.hour The hour for this date * @param {Number=} aData.minute The minute for this date * @param {Number=} aData.second The second for this date * @param {Boolean=} aData.isDate If true, the instance represents a date * (as opposed to a date-time) * @param {ICAL.Timezone=} aZone Timezone this position occurs in */ fromData: function fromData(aData, aZone) { if (aData) { for (var key in aData) { if (Object.prototype.hasOwnProperty.call(aData, key)) { if (key === "icaltype") continue; this[key] = aData[key]; } } } if (aZone) { this.zone = aZone; } if (aData && !("isDate" in aData)) { this.isDate = !("hour" in aData); } else if (aData && "isDate" in aData) { this.isDate = aData.isDate; } if (aData && "timezone" in aData) { var zone = ICAL.TimezoneService.get( aData.timezone ); this.zone = zone || ICAL.Timezone.localTimezone; } if (aData && "zone" in aData) { this.zone = aData.zone; } if (!this.zone) { this.zone = ICAL.Timezone.localTimezone; } this._cachedUnixTime = null; return this; }, /** * Calculate the day of week. * @param {ICAL.Time.weekDay=} aWeekStart * The week start weekday, defaults to SUNDAY * @return {ICAL.Time.weekDay} */ dayOfWeek: function icaltime_dayOfWeek(aWeekStart) { var firstDow = aWeekStart || ICAL.Time.SUNDAY; var dowCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + firstDow; if (dowCacheKey in ICAL.Time._dowCache) { return ICAL.Time._dowCache[dowCacheKey]; } var q = this.day; var m = this.month + (this.month < 3 ? 12 : 0); var Y = this.year - (this.month < 3 ? 1 : 0); var h2 = q + Y + ICAL.helpers.trunc((m + 1) * 26 / 10) + ICAL.helpers.trunc(Y / 4); if (true) { h2 += ICAL.helpers.trunc(Y / 100) * 6 + ICAL.helpers.trunc(Y / 400); } else { h2 += 5; } h2 = (h2 + 7 - firstDow) % 7 + 1; ICAL.Time._dowCache[dowCacheKey] = h2; return h2; }, /** * Calculate the day of year. * @return {Number} */ dayOfYear: function dayOfYear() { var is_leap = ICAL.Time.isLeapYear(this.year) ? 1 : 0; var diypm = ICAL.Time.daysInYearPassedMonth; return diypm[is_leap][this.month - 1] + this.day; }, /** * Returns a copy of the current date/time, rewound to the start of the * week. The resulting ICAL.Time instance is of icaltype date, even if this * is a date-time. * * @param {ICAL.Time.weekDay=} aWeekStart * The week start weekday, defaults to SUNDAY * @return {ICAL.Time} The start of the week (cloned) */ startOfWeek: function startOfWeek(aWeekStart) { var firstDow = aWeekStart || ICAL.Time.SUNDAY; var result = this.clone(); result.day -= (this.dayOfWeek() + 7 - firstDow) % 7; result.isDate = true; result.hour = 0; result.minute = 0; result.second = 0; return result; }, /** * Returns a copy of the current date/time, shifted to the end of the week. * The resulting ICAL.Time instance is of icaltype date, even if this is a * date-time. * * @param {ICAL.Time.weekDay=} aWeekStart * The week start weekday, defaults to SUNDAY * @return {ICAL.Time} The end of the week (cloned) */ endOfWeek: function endOfWeek(aWeekStart) { var firstDow = aWeekStart || ICAL.Time.SUNDAY; var result = this.clone(); result.day += (7 - this.dayOfWeek() + firstDow - ICAL.Time.SUNDAY) % 7; result.isDate = true; result.hour = 0; result.minute = 0; result.second = 0; return result; }, /** * Returns a copy of the current date/time, rewound to the start of the * month. The resulting ICAL.Time instance is of icaltype date, even if * this is a date-time. * * @return {ICAL.Time} The start of the month (cloned) */ startOfMonth: function startOfMonth() { var result = this.clone(); result.day = 1; result.isDate = true; result.hour = 0; result.minute = 0; result.second = 0; return result; }, /** * Returns a copy of the current date/time, shifted to the end of the * month. The resulting ICAL.Time instance is of icaltype date, even if * this is a date-time. * * @return {ICAL.Time} The end of the month (cloned) */ endOfMonth: function endOfMonth() { var result = this.clone(); result.day = ICAL.Time.daysInMonth(result.month, result.year); result.isDate = true; result.hour = 0; result.minute = 0; result.second = 0; return result; }, /** * Returns a copy of the current date/time, rewound to the start of the * year. The resulting ICAL.Time instance is of icaltype date, even if * this is a date-time. * * @return {ICAL.Time} The start of the year (cloned) */ startOfYear: function startOfYear() { var result = this.clone(); result.day = 1; result.month = 1; result.isDate = true; result.hour = 0; result.minute = 0; result.second = 0; return result; }, /** * Returns a copy of the current date/time, shifted to the end of the * year. The resulting ICAL.Time instance is of icaltype date, even if * this is a date-time. * * @return {ICAL.Time} The end of the year (cloned) */ endOfYear: function endOfYear() { var result = this.clone(); result.day = 31; result.month = 12; result.isDate = true; result.hour = 0; result.minute = 0; result.second = 0; return result; }, /** * First calculates the start of the week, then returns the day of year for * this date. If the day falls into the previous year, the day is zero or negative. * * @param {ICAL.Time.weekDay=} aFirstDayOfWeek * The week start weekday, defaults to SUNDAY * @return {Number} The calculated day of year */ startDoyWeek: function startDoyWeek(aFirstDayOfWeek) { var firstDow = aFirstDayOfWeek || ICAL.Time.SUNDAY; var delta = this.dayOfWeek() - firstDow; if (delta < 0) delta += 7; return this.dayOfYear() - delta; }, /** * Get the dominical letter for the current year. Letters range from A - G * for common years, and AG to GF for leap years. * * @param {Number} yr The year to retrieve the letter for * @return {String} The dominical letter. */ getDominicalLetter: function() { return ICAL.Time.getDominicalLetter(this.year); }, /** * Finds the nthWeekDay relative to the current month (not day). The * returned value is a day relative the month that this month belongs to so * 1 would indicate the first of the month and 40 would indicate a day in * the following month. * * @param {Number} aDayOfWeek Day of the week see the day name constants * @param {Number} aPos Nth occurrence of a given week day values * of 1 and 0 both indicate the first weekday of that type. aPos may * be either positive or negative * * @return {Number} numeric value indicating a day relative * to the current month of this time object */ nthWeekDay: function icaltime_nthWeekDay(aDayOfWeek, aPos) { var daysInMonth = ICAL.Time.daysInMonth(this.month, this.year); var weekday; var pos = aPos; var start = 0; var otherDay = this.clone(); if (pos >= 0) { otherDay.day = 1; if (pos != 0) { pos--; } start = otherDay.day; var startDow = otherDay.dayOfWeek(); var offset = aDayOfWeek - startDow; if (offset < 0) offset += 7; start += offset; start -= aDayOfWeek; weekday = aDayOfWeek; } else { otherDay.day = daysInMonth; var endDow = otherDay.dayOfWeek(); pos++; weekday = endDow - aDayOfWeek; if (weekday < 0) { weekday += 7; } weekday = daysInMonth - weekday; } weekday += pos * 7; return start + weekday; }, /** * Checks if current time is the nth weekday, relative to the current * month. Will always return false when rule resolves outside of current * month. * * @param {ICAL.Time.weekDay} aDayOfWeek Day of week to check * @param {Number} aPos Relative position * @return {Boolean} True, if its the nth weekday */ isNthWeekDay: function(aDayOfWeek, aPos) { var dow = this.dayOfWeek(); if (aPos === 0 && dow === aDayOfWeek) { return true; } var day = this.nthWeekDay(aDayOfWeek, aPos); if (day === this.day) { return true; } return false; }, /** * Calculates the ISO 8601 week number. The first week of a year is the * week that contains the first Thursday. The year can have 53 weeks, if * January 1st is a Friday. * * Note there are regions where the first week of the year is the one that * starts on January 1st, which may offset the week number. Also, if a * different week start is specified, this will also affect the week * number. * * @see ICAL.Time.weekOneStarts * @param {ICAL.Time.weekDay} aWeekStart The weekday the week starts with * @return {Number} The ISO week number */ weekNumber: function weekNumber(aWeekStart) { var wnCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + aWeekStart; if (wnCacheKey in ICAL.Time._wnCache) { return ICAL.Time._wnCache[wnCacheKey]; } var week1; var dt = this.clone(); dt.isDate = true; var isoyear = this.year; if (dt.month == 12 && dt.day > 25) { week1 = ICAL.Time.weekOneStarts(isoyear + 1, aWeekStart); if (dt.compare(week1) < 0) { week1 = ICAL.Time.weekOneStarts(isoyear, aWeekStart); } else { isoyear++; } } else { week1 = ICAL.Time.weekOneStarts(isoyear, aWeekStart); if (dt.compare(week1) < 0) { week1 = ICAL.Time.weekOneStarts(--isoyear, aWeekStart); } } var daysBetween = dt.subtractDate(week1).toSeconds() / 86400; var answer = ICAL.helpers.trunc(daysBetween / 7) + 1; ICAL.Time._wnCache[wnCacheKey] = answer; return answer; }, /** * Adds the duration to the current time. The instance is modified in * place. * * @param {ICAL.Duration} aDuration The duration to add */ addDuration: function icaltime_add(aDuration) { var mult = aDuration.isNegative ? -1 : 1; var second = this.second; var minute = this.minute; var hour = this.hour; var day = this.day; second += mult * aDuration.seconds; minute += mult * aDuration.minutes; hour += mult * aDuration.hours; day += mult * aDuration.days; day += mult * 7 * aDuration.weeks; this.second = second; this.minute = minute; this.hour = hour; this.day = day; this._cachedUnixTime = null; }, /** * Subtract the date details (_excluding_ timezone). Useful for finding * the relative difference between two time objects excluding their * timezone differences. * * @param {ICAL.Time} aDate The date to substract * @return {ICAL.Duration} The difference as a duration */ subtractDate: function icaltime_subtract(aDate) { var unixTime = this.toUnixTime() + this.utcOffset(); var other = aDate.toUnixTime() + aDate.utcOffset(); return ICAL.Duration.fromSeconds(unixTime - other); }, /** * Subtract the date details, taking timezones into account. * * @param {ICAL.Time} aDate The date to subtract * @return {ICAL.Duration} The difference in duration */ subtractDateTz: function icaltime_subtract_abs(aDate) { var unixTime = this.toUnixTime(); var other = aDate.toUnixTime(); return ICAL.Duration.fromSeconds(unixTime - other); }, /** * Compares the ICAL.Time instance with another one. * * @param {ICAL.Duration} aOther The instance to compare with * @return {Number} -1, 0 or 1 for less/equal/greater */ compare: function icaltime_compare(other) { var a2 = this.toUnixTime(); var b = other.toUnixTime(); if (a2 > b) return 1; if (b > a2) return -1; return 0; }, /** * Compares only the date part of this instance with another one. * * @param {ICAL.Duration} other The instance to compare with * @param {ICAL.Timezone} tz The timezone to compare in * @return {Number} -1, 0 or 1 for less/equal/greater */ compareDateOnlyTz: function icaltime_compareDateOnlyTz(other, tz) { function cmp(attr) { return ICAL.Time._cmp_attr(a2, b, attr); } var a2 = this.convertToZone(tz); var b = other.convertToZone(tz); var rc = 0; if ((rc = cmp("year")) != 0) return rc; if ((rc = cmp("month")) != 0) return rc; if ((rc = cmp("day")) != 0) return rc; return rc; }, /** * Convert the instance into another timzone. The returned ICAL.Time * instance is always a copy. * * @param {ICAL.Timezone} zone The zone to convert to * @return {ICAL.Time} The copy, converted to the zone */ convertToZone: function convertToZone(zone) { var copy = this.clone(); var zone_equals = this.zone.tzid == zone.tzid; if (!this.isDate && !zone_equals) { ICAL.Timezone.convert_time(copy, this.zone, zone); } copy.zone = zone; return copy; }, /** * Calculates the UTC offset of the current date/time in the timezone it is * in. * * @return {Number} UTC offset in seconds */ utcOffset: function utc_offset() { if (this.zone == ICAL.Timezone.localTimezone || this.zone == ICAL.Timezone.utcTimezone) { return 0; } else { return this.zone.utcOffset(this); } }, /** * Returns an RFC 5545 compliant ical representation of this object. * * @return {String} ical date/date-time */ toICALString: function() { var string3 = this.toString(); if (string3.length > 10) { return ICAL.design.icalendar.value["date-time"].toICAL(string3); } else { return ICAL.design.icalendar.value.date.toICAL(string3); } }, /** * The string representation of this date/time, in jCal form * (including : and - separators). * @return {String} */ toString: function toString2() { var result = this.year + "-" + ICAL.helpers.pad2(this.month) + "-" + ICAL.helpers.pad2(this.day); if (!this.isDate) { result += "T" + ICAL.helpers.pad2(this.hour) + ":" + ICAL.helpers.pad2(this.minute) + ":" + ICAL.helpers.pad2(this.second); if (this.zone === ICAL.Timezone.utcTimezone) { result += "Z"; } } return result; }, /** * Converts the current instance to a Javascript date * @return {Date} */ toJSDate: function toJSDate() { if (this.zone == ICAL.Timezone.localTimezone) { if (this.isDate) { return new Date(this.year, this.month - 1, this.day); } else { return new Date( this.year, this.month - 1, this.day, this.hour, this.minute, this.second, 0 ); } } else { return new Date(this.toUnixTime() * 1e3); } }, _normalize: function icaltime_normalize() { var isDate2 = this._time.isDate; if (this._time.isDate) { this._time.hour = 0; this._time.minute = 0; this._time.second = 0; } this.adjust(0, 0, 0, 0); return this; }, /** * Adjust the date/time by the given offset * * @param {Number} aExtraDays The extra amount of days * @param {Number} aExtraHours The extra amount of hours * @param {Number} aExtraMinutes The extra amount of minutes * @param {Number} aExtraSeconds The extra amount of seconds * @param {Number=} aTime The time to adjust, defaults to the * current instance. */ adjust: function icaltime_adjust(aExtraDays, aExtraHours, aExtraMinutes, aExtraSeconds, aTime) { var minutesOverflow, hoursOverflow, daysOverflow = 0, yearsOverflow = 0; var second, minute, hour, day; var daysInMonth; var time = aTime || this._time; if (!time.isDate) { second = time.second + aExtraSeconds; time.second = second % 60; minutesOverflow = ICAL.helpers.trunc(second / 60); if (time.second < 0) { time.second += 60; minutesOverflow--; } minute = time.minute + aExtraMinutes + minutesOverflow; time.minute = minute % 60; hoursOverflow = ICAL.helpers.trunc(minute / 60); if (time.minute < 0) { time.minute += 60; hoursOverflow--; } hour = time.hour + aExtraHours + hoursOverflow; time.hour = hour % 24; daysOverflow = ICAL.helpers.trunc(hour / 24); if (time.hour < 0) { time.hour += 24; daysOverflow--; } } if (time.month > 12) { yearsOverflow = ICAL.helpers.trunc((time.month - 1) / 12); } else if (time.month < 1) { yearsOverflow = ICAL.helpers.trunc(time.month / 12) - 1; } time.year += yearsOverflow; time.month -= 12 * yearsOverflow; day = time.day + aExtraDays + daysOverflow; if (day > 0) { for (; ; ) { daysInMonth = ICAL.Time.daysInMonth(time.month, time.year); if (day <= daysInMonth) { break; } time.month++; if (time.month > 12) { time.year++; time.month = 1; } day -= daysInMonth; } } else { while (day <= 0) { if (time.month == 1) { time.year--; time.month = 12; } else { time.month--; } day += ICAL.Time.daysInMonth(time.month, time.year); } } time.day = day; this._cachedUnixTime = null; return this; }, /** * Sets up the current instance from unix time, the number of seconds since * January 1st, 1970. * * @param {Number} seconds The seconds to set up with */ fromUnixTime: function fromUnixTime(seconds) { this.zone = ICAL.Timezone.utcTimezone; var epoch = ICAL.Time.epochTime.clone(); epoch.adjust(0, 0, 0, seconds); this.year = epoch.year; this.month = epoch.month; this.day = epoch.day; this.hour = epoch.hour; this.minute = epoch.minute; this.second = Math.floor(epoch.second); this._cachedUnixTime = null; }, /** * Converts the current instance to seconds since January 1st 1970. * * @return {Number} Seconds since 1970 */ toUnixTime: function toUnixTime() { if (this._cachedUnixTime !== null) { return this._cachedUnixTime; } var offset = this.utcOffset(); var ms = Date.UTC( this.year, this.month - 1, this.day, this.hour, this.minute, this.second - offset ); this._cachedUnixTime = ms / 1e3; return this._cachedUnixTime; }, /** * Converts time to into Object which can be serialized then re-created * using the constructor. * * @example * // toJSON will automatically be called * var json = JSON.stringify(mytime); * * var deserialized = JSON.parse(json); * * var time = new ICAL.Time(deserialized); * * @return {Object} */ toJSON: function() { var copy = [ "year", "month", "day", "hour", "minute", "second", "isDate" ]; var result = /* @__PURE__ */ Object.create(null); var i = 0; var len = copy.length; var prop; for (; i < len; i++) { prop = copy[i]; result[prop] = this[prop]; } if (this.zone) { result.timezone = this.zone.tzid; } return result; } }; (function setupNormalizeAttributes() { function defineAttr(attr) { Object.defineProperty(ICAL.Time.prototype, attr, { get: function getTimeAttr() { if (this._pendingNormalization) { this._normalize(); this._pendingNormalization = false; } return this._time[attr]; }, set: function setTimeAttr(val) { if (attr === "isDate" && val && !this._time.isDate) { this.adjust(0, 0, 0, 0); } this._cachedUnixTime = null; this._pendingNormalization = true; this._time[attr] = val; return val; } }); } if ("defineProperty" in Object) { defineAttr("year"); defineAttr("month"); defineAttr("day"); defineAttr("hour"); defineAttr("minute"); defineAttr("second"); defineAttr("isDate"); } })(); ICAL.Time.daysInMonth = function icaltime_daysInMonth(month, year) { var _daysInMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; var days = 30; if (month < 1 || month > 12) return days; days = _daysInMonth[month]; if (month == 2) { days += ICAL.Time.isLeapYear(year); } return days; }; ICAL.Time.isLeapYear = function isLeapYear(year) { if (year <= 1752) { return year % 4 == 0; } else { return year % 4 == 0 && year % 100 != 0 || year % 400 == 0; } }; ICAL.Time.fromDayOfYear = function icaltime_fromDayOfYear(aDayOfYear, aYear) { var year = aYear; var doy = aDayOfYear; var tt = new ICAL.Time(); tt.auto_normalize = false; var is_leap = ICAL.Time.isLeapYear(year) ? 1 : 0; if (doy < 1) { year--; is_leap = ICAL.Time.isLeapYear(year) ? 1 : 0; doy += ICAL.Time.daysInYearPassedMonth[is_leap][12]; return ICAL.Time.fromDayOfYear(doy, year); } else if (doy > ICAL.Time.daysInYearPassedMonth[is_leap][12]) { is_leap = ICAL.Time.isLeapYear(year) ? 1 : 0; doy -= ICAL.Time.daysInYearPassedMonth[is_leap][12]; year++; return ICAL.Time.fromDayOfYear(doy, year); } tt.year = year; tt.isDate = true; for (var month = 11; month >= 0; month--) { if (doy > ICAL.Time.daysInYearPassedMonth[is_leap][month]) { tt.month = month + 1; tt.day = doy - ICAL.Time.daysInYearPassedMonth[is_leap][month]; break; } } tt.auto_normalize = true; return tt; }; ICAL.Time.fromStringv2 = function fromString(str) { return new ICAL.Time({ year: parseInt(str.substr(0, 4), 10), month: parseInt(str.substr(5, 2), 10), day: parseInt(str.substr(8, 2), 10), isDate: true }); }; ICAL.Time.fromDateString = function(aValue) { return new ICAL.Time({ year: ICAL.helpers.strictParseInt(aValue.substr(0, 4)), month: ICAL.helpers.strictParseInt(aValue.substr(5, 2)), day: ICAL.helpers.strictParseInt(aValue.substr(8, 2)), isDate: true }); }; ICAL.Time.fromDateTimeString = function(aValue, prop) { if (aValue.length < 19) { throw new Error( 'invalid date-time value: "' + aValue + '"' ); } var zone; if (aValue[19] && aValue[19] === "Z") { zone = "Z"; } else if (prop) { zone = prop.getParameter("tzid"); } var time = new ICAL.Time({ year: ICAL.helpers.strictParseInt(aValue.substr(0, 4)), month: ICAL.helpers.strictParseInt(aValue.substr(5, 2)), day: ICAL.helpers.strictParseInt(aValue.substr(8, 2)), hour: ICAL.helpers.strictParseInt(aValue.substr(11, 2)), minute: ICAL.helpers.strictParseInt(aValue.substr(14, 2)), second: ICAL.helpers.strictParseInt(aValue.substr(17, 2)), timezone: zone }); return time; }; ICAL.Time.fromString = function fromString(aValue, aProperty) { if (aValue.length > 10) { return ICAL.Time.fromDateTimeString(aValue, aProperty); } else { return ICAL.Time.fromDateString(aValue); } }; ICAL.Time.fromJSDate = function fromJSDate(aDate, useUTC) { var tt = new ICAL.Time(); return tt.fromJSDate(aDate, useUTC); }; ICAL.Time.fromData = function fromData(aData, aZone) { var t2 = new ICAL.Time(); return t2.fromData(aData, aZone); }; ICAL.Time.now = function icaltime_now() { return ICAL.Time.fromJSDate(/* @__PURE__ */ new Date(), false); }; ICAL.Time.weekOneStarts = function weekOneStarts(aYear, aWeekStart) { var t2 = ICAL.Time.fromData({ year: aYear, month: 1, day: 1, isDate: true }); var dow = t2.dayOfWeek(); var wkst = aWeekStart || ICAL.Time.DEFAULT_WEEK_START; if (dow > ICAL.Time.THURSDAY) { t2.day += 7; } if (wkst > ICAL.Time.THURSDAY) { t2.day -= 7; } t2.day -= dow - wkst; return t2; }; ICAL.Time.getDominicalLetter = function(yr) { var LTRS = "GFEDCBA"; var dom = (yr + (yr / 4 | 0) + (yr / 400 | 0) - (yr / 100 | 0) - 1) % 7; var isLeap = ICAL.Time.isLeapYear(yr); if (isLeap) { return LTRS[(dom + 6) % 7] + LTRS[dom]; } else { return LTRS[dom]; } }; ICAL.Time.epochTime = ICAL.Time.fromData({ year: 1970, month: 1, day: 1, hour: 0, minute: 0, second: 0, isDate: false, timezone: "Z" }); ICAL.Time._cmp_attr = function _cmp_attr(a2, b, attr) { if (a2[attr] > b[attr]) return 1; if (a2[attr] < b[attr]) return -1; return 0; }; ICAL.Time.daysInYearPassedMonth = [ [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365], [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366] ]; ICAL.Time.SUNDAY = 1; ICAL.Time.MONDAY = 2; ICAL.Time.TUESDAY = 3; ICAL.Time.WEDNESDAY = 4; ICAL.Time.THURSDAY = 5; ICAL.Time.FRIDAY = 6; ICAL.Time.SATURDAY = 7; ICAL.Time.DEFAULT_WEEK_START = ICAL.Time.MONDAY; })(); (function() { ICAL.VCardTime = function(data, zone, icaltype) { this.wrappedJSObject = this; var time = this._time = /* @__PURE__ */ Object.create(null); time.year = null; time.month = null; time.day = null; time.hour = null; time.minute = null; time.second = null; this.icaltype = icaltype || "date-and-or-time"; this.fromData(data, zone); }; ICAL.helpers.inherits( ICAL.Time, ICAL.VCardTime, /** @lends ICAL.VCardTime */ { /** * The class identifier. * @constant * @type {String} * @default "vcardtime" */ icalclass: "vcardtime", /** * The type name, to be used in the jCal object. * @type {String} * @default "date-and-or-time" */ icaltype: "date-and-or-time", /** * The timezone. This can either be floating, UTC, or an instance of * ICAL.UtcOffset. * @type {ICAL.Timezone|ICAL.UtcOFfset} */ zone: null, /** * Returns a clone of the vcard date/time object. * * @return {ICAL.VCardTime} The cloned object */ clone: function() { return new ICAL.VCardTime(this._time, this.zone, this.icaltype); }, _normalize: function() { return this; }, /** * @inheritdoc */ utcOffset: function() { if (this.zone instanceof ICAL.UtcOffset) { return this.zone.toSeconds(); } else { return ICAL.Time.prototype.utcOffset.apply(this, arguments); } }, /** * Returns an RFC 6350 compliant representation of this object. * * @return {String} vcard date/time string */ toICALString: function() { return ICAL.design.vcard.value[this.icaltype].toICAL(this.toString()); }, /** * The string representation of this date/time, in jCard form * (including : and - separators). * @return {String} */ toString: function toString2() { var p2 = ICAL.helpers.pad2; var y = this.year, m = this.month, d = this.day; var h2 = this.hour, mm = this.minute, s2 = this.second; var hasYear = y !== null, hasMonth = m !== null, hasDay = d !== null; var hasHour = h2 !== null, hasMinute = mm !== null, hasSecond = s2 !== null; var datepart = (hasYear ? p2(y) + (hasMonth || hasDay ? "-" : "") : hasMonth || hasDay ? "--" : "") + (hasMonth ? p2(m) : "") + (hasDay ? "-" + p2(d) : ""); var timepart = (hasHour ? p2(h2) : "-") + (hasHour && hasMinute ? ":" : "") + (hasMinute ? p2(mm) : "") + (!hasHour && !hasMinute ? "-" : "") + (hasMinute && hasSecond ? ":" : "") + (hasSecond ? p2(s2) : ""); var zone; if (this.zone === ICAL.Timezone.utcTimezone) { zone = "Z"; } else if (this.zone instanceof ICAL.UtcOffset) { zone = this.zone.toString(); } else if (this.zone === ICAL.Timezone.localTimezone) { zone = ""; } else if (this.zone instanceof ICAL.Timezone) { var offset = ICAL.UtcOffset.fromSeconds(this.zone.utcOffset(this)); zone = offset.toString(); } else { zone = ""; } switch (this.icaltype) { case "time": return timepart + zone; case "date-and-or-time": case "date-time": return datepart + (timepart == "--" ? "" : "T" + timepart + zone); case "date": return datepart; } return null; } } ); ICAL.VCardTime.fromDateAndOrTimeString = function(aValue, aIcalType) { function part(v, s2, e2) { return v ? ICAL.helpers.strictParseInt(v.substr(s2, e2)) : null; } var parts = aValue.split("T"); var dt = parts[0], tmz = parts[1]; var splitzone = tmz ? ICAL.design.vcard.value.time._splitZone(tmz) : []; var zone = splitzone[0], tm = splitzone[1]; var stoi = ICAL.helpers.strictParseInt; var dtlen = dt ? dt.length : 0; var tmlen = tm ? tm.length : 0; var hasDashDate = dt && dt[0] == "-" && dt[1] == "-"; var hasDashTime = tm && tm[0] == "-"; var o2 = { year: hasDashDate ? null : part(dt, 0, 4), month: hasDashDate && (dtlen == 4 || dtlen == 7) ? part(dt, 2, 2) : dtlen == 7 ? part(dt, 5, 2) : dtlen == 10 ? part(dt, 5, 2) : null, day: dtlen == 5 ? part(dt, 3, 2) : dtlen == 7 && hasDashDate ? part(dt, 5, 2) : dtlen == 10 ? part(dt, 8, 2) : null, hour: hasDashTime ? null : part(tm, 0, 2), minute: hasDashTime && tmlen == 3 ? part(tm, 1, 2) : tmlen > 4 ? hasDashTime ? part(tm, 1, 2) : part(tm, 3, 2) : null, second: tmlen == 4 ? part(tm, 2, 2) : tmlen == 6 ? part(tm, 4, 2) : tmlen == 8 ? part(tm, 6, 2) : null }; if (zone == "Z") { zone = ICAL.Timezone.utcTimezone; } else if (zone && zone[3] == ":") { zone = ICAL.UtcOffset.fromString(zone); } else { zone = null; } return new ICAL.VCardTime(o2, zone, aIcalType); }; })(); (function() { var DOW_MAP = { SU: ICAL.Time.SUNDAY, MO: ICAL.Time.MONDAY, TU: ICAL.Time.TUESDAY, WE: ICAL.Time.WEDNESDAY, TH: ICAL.Time.THURSDAY, FR: ICAL.Time.FRIDAY, SA: ICAL.Time.SATURDAY }; var REVERSE_DOW_MAP = {}; for (var key in DOW_MAP) { if (DOW_MAP.hasOwnProperty(key)) { REVERSE_DOW_MAP[DOW_MAP[key]] = key; } } var COPY_PARTS = [ "BYSECOND", "BYMINUTE", "BYHOUR", "BYDAY", "BYMONTHDAY", "BYYEARDAY", "BYWEEKNO", "BYMONTH", "BYSETPOS" ]; ICAL.Recur = function icalrecur(data) { this.wrappedJSObject = this; this.parts = {}; if (data && typeof data === "object") { this.fromData(data); } }; ICAL.Recur.prototype = { /** * An object holding the BY-parts of the recurrence rule * @type {Object} */ parts: null, /** * The interval value for the recurrence rule. * @type {Number} */ interval: 1, /** * The week start day * * @type {ICAL.Time.weekDay} * @default ICAL.Time.MONDAY */ wkst: ICAL.Time.MONDAY, /** * The end of the recurrence * @type {?ICAL.Time} */ until: null, /** * The maximum number of occurrences * @type {?Number} */ count: null, /** * The frequency value. * @type {ICAL.Recur.frequencyValues} */ freq: null, /** * The class identifier. * @constant * @type {String} * @default "icalrecur" */ icalclass: "icalrecur", /** * The type name, to be used in the jCal object. * @constant * @type {String} * @default "recur" */ icaltype: "recur", /** * Create a new iterator for this recurrence rule. The passed start date * must be the start date of the event, not the start of the range to * search in. * * @example * var recur = comp.getFirstPropertyValue('rrule'); * var dtstart = comp.getFirstPropertyValue('dtstart'); * var iter = recur.iterator(dtstart); * for (var next = iter.next(); next; next = iter.next()) { * if (next.compare(rangeStart) < 0) { * continue; * } * console.log(next.toString()); * } * * @param {ICAL.Time} aStart The item's start date * @return {ICAL.RecurIterator} The recurrence iterator */ iterator: function(aStart) { return new ICAL.RecurIterator({ rule: this, dtstart: aStart }); }, /** * Returns a clone of the recurrence object. * * @return {ICAL.Recur} The cloned object */ clone: function clone() { return new ICAL.Recur(this.toJSON()); }, /** * Checks if the current rule is finite, i.e. has a count or until part. * * @return {Boolean} True, if the rule is finite */ isFinite: function isfinite() { return !!(this.count || this.until); }, /** * Checks if the current rule has a count part, and not limited by an until * part. * * @return {Boolean} True, if the rule is by count */ isByCount: function isbycount() { return !!(this.count && !this.until); }, /** * Adds a component (part) to the recurrence rule. This is not a component * in the sense of {@link ICAL.Component}, but a part of the recurrence * rule, i.e. BYMONTH. * * @param {String} aType The name of the component part * @param {Array|String} aValue The component value */ addComponent: function addPart(aType, aValue) { var ucname = aType.toUpperCase(); if (ucname in this.parts) { this.parts[ucname].push(aValue); } else { this.parts[ucname] = [aValue]; } }, /** * Sets the component value for the given by-part. * * @param {String} aType The component part name * @param {Array} aValues The component values */ setComponent: function setComponent(aType, aValues) { this.parts[aType.toUpperCase()] = aValues.slice(); }, /** * Gets (a copy) of the requested component value. * * @param {String} aType The component part name * @return {Array} The component part value */ getComponent: function getComponent(aType) { var ucname = aType.toUpperCase(); return ucname in this.parts ? this.parts[ucname].slice() : []; }, /** * Retrieves the next occurrence after the given recurrence id. See the * guide on {@tutorial terminology} for more details. * * NOTE: Currently, this method iterates all occurrences from the start * date. It should not be called in a loop for performance reasons. If you * would like to get more than one occurrence, you can iterate the * occurrences manually, see the example on the * {@link ICAL.Recur#iterator iterator} method. * * @param {ICAL.Time} aStartTime The start of the event series * @param {ICAL.Time} aRecurrenceId The date of the last occurrence * @return {ICAL.Time} The next occurrence after */ getNextOccurrence: function getNextOccurrence(aStartTime, aRecurrenceId) { var iter = this.iterator(aStartTime); var next, cdt; do { next = iter.next(); } while (next && next.compare(aRecurrenceId) <= 0); if (next && aRecurrenceId.zone) { next.zone = aRecurrenceId.zone; } return next; }, /** * Sets up the current instance using members from the passed data object. * * @param {Object} data An object with members of the recurrence * @param {ICAL.Recur.frequencyValues=} data.freq The frequency value * @param {Number=} data.interval The INTERVAL value * @param {ICAL.Time.weekDay=} data.wkst The week start value * @param {ICAL.Time=} data.until The end of the recurrence set * @param {Number=} data.count The number of occurrences * @param {Array.=} data.bysecond The seconds for the BYSECOND part * @param {Array.=} data.byminute The minutes for the BYMINUTE part * @param {Array.=} data.byhour The hours for the BYHOUR part * @param {Array.=} data.byday The BYDAY values * @param {Array.=} data.bymonthday The days for the BYMONTHDAY part * @param {Array.=} data.byyearday The days for the BYYEARDAY part * @param {Array.=} data.byweekno The weeks for the BYWEEKNO part * @param {Array.=} data.bymonth The month for the BYMONTH part * @param {Array.=} data.bysetpos The positionals for the BYSETPOS part */ fromData: function(data) { for (var key2 in data) { var uckey = key2.toUpperCase(); if (uckey in partDesign) { if (Array.isArray(data[key2])) { this.parts[uckey] = data[key2]; } else { this.parts[uckey] = [data[key2]]; } } else { this[key2] = data[key2]; } } if (this.interval && typeof this.interval != "number") { optionDesign.INTERVAL(this.interval, this); } if (this.wkst && typeof this.wkst != "number") { this.wkst = ICAL.Recur.icalDayToNumericDay(this.wkst); } if (this.until && !(this.until instanceof ICAL.Time)) { this.until = ICAL.Time.fromString(this.until); } }, /** * The jCal representation of this recurrence type. * @return {Object} */ toJSON: function() { var res = /* @__PURE__ */ Object.create(null); res.freq = this.freq; if (this.count) { res.count = this.count; } if (this.interval > 1) { res.interval = this.interval; } for (var k in this.parts) { if (!this.parts.hasOwnProperty(k)) { continue; } var kparts = this.parts[k]; if (Array.isArray(kparts) && kparts.length == 1) { res[k.toLowerCase()] = kparts[0]; } else { res[k.toLowerCase()] = ICAL.helpers.clone(this.parts[k]); } } if (this.until) { res.until = this.until.toString(); } if ("wkst" in this && this.wkst !== ICAL.Time.DEFAULT_WEEK_START) { res.wkst = ICAL.Recur.numericDayToIcalDay(this.wkst); } return res; }, /** * The string representation of this recurrence rule. * @return {String} */ toString: function icalrecur_toString() { var str = "FREQ=" + this.freq; if (this.count) { str += ";COUNT=" + this.count; } if (this.interval > 1) { str += ";INTERVAL=" + this.interval; } for (var k in this.parts) { if (this.parts.hasOwnProperty(k)) { str += ";" + k + "=" + this.parts[k]; } } if (this.until) { str += ";UNTIL=" + this.until.toICALString(); } if ("wkst" in this && this.wkst !== ICAL.Time.DEFAULT_WEEK_START) { str += ";WKST=" + ICAL.Recur.numericDayToIcalDay(this.wkst); } return str; } }; function parseNumericValue(type, min, max, value) { var result = value; if (value[0] === "+") { result = value.substr(1); } result = ICAL.helpers.strictParseInt(result); if (min !== void 0 && value < min) { throw new Error( type + ': invalid value "' + value + '" must be > ' + min ); } if (max !== void 0 && value > max) { throw new Error( type + ': invalid value "' + value + '" must be < ' + min ); } return result; } ICAL.Recur.icalDayToNumericDay = function toNumericDay(string3, aWeekStart) { var firstDow = aWeekStart || ICAL.Time.SUNDAY; return (DOW_MAP[string3] - firstDow + 7) % 7 + 1; }; ICAL.Recur.numericDayToIcalDay = function toIcalDay(num, aWeekStart) { var firstDow = aWeekStart || ICAL.Time.SUNDAY; var dow = num + firstDow - ICAL.Time.SUNDAY; if (dow > 7) { dow -= 7; } return REVERSE_DOW_MAP[dow]; }; var VALID_DAY_NAMES = /^(SU|MO|TU|WE|TH|FR|SA)$/; var VALID_BYDAY_PART = /^([+-])?(5[0-3]|[1-4][0-9]|[1-9])?(SU|MO|TU|WE|TH|FR|SA)$/; var ALLOWED_FREQ = [ "SECONDLY", "MINUTELY", "HOURLY", "DAILY", "WEEKLY", "MONTHLY", "YEARLY" ]; var optionDesign = { FREQ: function(value, dict, fmtIcal) { if (ALLOWED_FREQ.indexOf(value) !== -1) { dict.freq = value; } else { throw new Error( 'invalid frequency "' + value + '" expected: "' + ALLOWED_FREQ.join(", ") + '"' ); } }, COUNT: function(value, dict, fmtIcal) { dict.count = ICAL.helpers.strictParseInt(value); }, INTERVAL: function(value, dict, fmtIcal) { dict.interval = ICAL.helpers.strictParseInt(value); if (dict.interval < 1) { dict.interval = 1; } }, UNTIL: function(value, dict, fmtIcal) { if (value.length > 10) { dict.until = ICAL.design.icalendar.value["date-time"].fromICAL(value); } else { dict.until = ICAL.design.icalendar.value.date.fromICAL(value); } if (!fmtIcal) { dict.until = ICAL.Time.fromString(dict.until); } }, WKST: function(value, dict, fmtIcal) { if (VALID_DAY_NAMES.test(value)) { dict.wkst = ICAL.Recur.icalDayToNumericDay(value); } else { throw new Error('invalid WKST value "' + value + '"'); } } }; var partDesign = { BYSECOND: parseNumericValue.bind(this, "BYSECOND", 0, 60), BYMINUTE: parseNumericValue.bind(this, "BYMINUTE", 0, 59), BYHOUR: parseNumericValue.bind(this, "BYHOUR", 0, 23), BYDAY: function(value) { if (VALID_BYDAY_PART.test(value)) { return value; } else { throw new Error('invalid BYDAY value "' + value + '"'); } }, BYMONTHDAY: parseNumericValue.bind(this, "BYMONTHDAY", -31, 31), BYYEARDAY: parseNumericValue.bind(this, "BYYEARDAY", -366, 366), BYWEEKNO: parseNumericValue.bind(this, "BYWEEKNO", -53, 53), BYMONTH: parseNumericValue.bind(this, "BYMONTH", 0, 12), BYSETPOS: parseNumericValue.bind(this, "BYSETPOS", -366, 366) }; ICAL.Recur.fromString = function(string3) { var data = ICAL.Recur._stringToData(string3, false); return new ICAL.Recur(data); }; ICAL.Recur.fromData = function(aData) { return new ICAL.Recur(aData); }; ICAL.Recur._stringToData = function(string3, fmtIcal) { var dict = /* @__PURE__ */ Object.create(null); var values = string3.split(";"); var len = values.length; for (var i = 0; i < len; i++) { var parts = values[i].split("="); var ucname = parts[0].toUpperCase(); var lcname = parts[0].toLowerCase(); var name = fmtIcal ? lcname : ucname; var value = parts[1]; if (ucname in partDesign) { var partArr = value.split(","); var partArrIdx = 0; var partArrLen = partArr.length; for (; partArrIdx < partArrLen; partArrIdx++) { partArr[partArrIdx] = partDesign[ucname](partArr[partArrIdx]); } dict[name] = partArr.length == 1 ? partArr[0] : partArr; } else if (ucname in optionDesign) { optionDesign[ucname](value, dict, fmtIcal); } else { dict[lcname] = value; } } return dict; }; })(); ICAL.RecurIterator = function() { function icalrecur_iterator(options) { this.fromData(options); } icalrecur_iterator.prototype = { /** * True when iteration is finished. * @type {Boolean} */ completed: false, /** * The rule that is being iterated * @type {ICAL.Recur} */ rule: null, /** * The start date of the event being iterated. * @type {ICAL.Time} */ dtstart: null, /** * The last occurrence that was returned from the * {@link ICAL.RecurIterator#next} method. * @type {ICAL.Time} */ last: null, /** * The sequence number from the occurrence * @type {Number} */ occurrence_number: 0, /** * The indices used for the {@link ICAL.RecurIterator#by_data} object. * @type {Object} * @private */ by_indices: null, /** * If true, the iterator has already been initialized * @type {Boolean} * @private */ initialized: false, /** * The initializd by-data. * @type {Object} * @private */ by_data: null, /** * The expanded yeardays * @type {Array} * @private */ days: null, /** * The index in the {@link ICAL.RecurIterator#days} array. * @type {Number} * @private */ days_index: 0, /** * Initialize the recurrence iterator from the passed data object. This * method is usually not called directly, you can initialize the iterator * through the constructor. * * @param {Object} options The iterator options * @param {ICAL.Recur} options.rule The rule to iterate. * @param {ICAL.Time} options.dtstart The start date of the event. * @param {Boolean=} options.initialized When true, assume that options are * from a previously constructed iterator. Initialization will not be * repeated. */ fromData: function(options) { this.rule = ICAL.helpers.formatClassType(options.rule, ICAL.Recur); if (!this.rule) { throw new Error("iterator requires a (ICAL.Recur) rule"); } this.dtstart = ICAL.helpers.formatClassType(options.dtstart, ICAL.Time); if (!this.dtstart) { throw new Error("iterator requires a (ICAL.Time) dtstart"); } if (options.by_data) { this.by_data = options.by_data; } else { this.by_data = ICAL.helpers.clone(this.rule.parts, true); } if (options.occurrence_number) this.occurrence_number = options.occurrence_number; this.days = options.days || []; if (options.last) { this.last = ICAL.helpers.formatClassType(options.last, ICAL.Time); } this.by_indices = options.by_indices; if (!this.by_indices) { this.by_indices = { "BYSECOND": 0, "BYMINUTE": 0, "BYHOUR": 0, "BYDAY": 0, "BYMONTH": 0, "BYWEEKNO": 0, "BYMONTHDAY": 0 }; } this.initialized = options.initialized || false; if (!this.initialized) { this.init(); } }, /** * Intialize the iterator * @private */ init: function icalrecur_iterator_init() { this.initialized = true; this.last = this.dtstart.clone(); var parts = this.by_data; if ("BYDAY" in parts) { this.sort_byday_rules(parts.BYDAY); } if ("BYYEARDAY" in parts) { if ("BYMONTH" in parts || "BYWEEKNO" in parts || "BYMONTHDAY" in parts || "BYDAY" in parts) { throw new Error("Invalid BYYEARDAY rule"); } } if ("BYWEEKNO" in parts && "BYMONTHDAY" in parts) { throw new Error("BYWEEKNO does not fit to BYMONTHDAY"); } if (this.rule.freq == "MONTHLY" && ("BYYEARDAY" in parts || "BYWEEKNO" in parts)) { throw new Error("For MONTHLY recurrences neither BYYEARDAY nor BYWEEKNO may appear"); } if (this.rule.freq == "WEEKLY" && ("BYYEARDAY" in parts || "BYMONTHDAY" in parts)) { throw new Error("For WEEKLY recurrences neither BYMONTHDAY nor BYYEARDAY may appear"); } if (this.rule.freq != "YEARLY" && "BYYEARDAY" in parts) { throw new Error("BYYEARDAY may only appear in YEARLY rules"); } this.last.second = this.setup_defaults("BYSECOND", "SECONDLY", this.dtstart.second); this.last.minute = this.setup_defaults("BYMINUTE", "MINUTELY", this.dtstart.minute); this.last.hour = this.setup_defaults("BYHOUR", "HOURLY", this.dtstart.hour); this.last.day = this.setup_defaults("BYMONTHDAY", "DAILY", this.dtstart.day); this.last.month = this.setup_defaults("BYMONTH", "MONTHLY", this.dtstart.month); if (this.rule.freq == "WEEKLY") { if ("BYDAY" in parts) { var bydayParts = this.ruleDayOfWeek(parts.BYDAY[0], this.rule.wkst); var pos = bydayParts[0]; var dow = bydayParts[1]; var wkdy = dow - this.last.dayOfWeek(this.rule.wkst); if (this.last.dayOfWeek(this.rule.wkst) < dow && wkdy >= 0 || wkdy < 0) { this.last.day += wkdy; } } else { var dayName = ICAL.Recur.numericDayToIcalDay(this.dtstart.dayOfWeek()); parts.BYDAY = [dayName]; } } if (this.rule.freq == "YEARLY") { for (; ; ) { this.expand_year_days(this.last.year); if (this.days.length > 0) { break; } this.increment_year(this.rule.interval); } this._nextByYearDay(); } if (this.rule.freq == "MONTHLY" && this.has_by_data("BYDAY")) { var tempLast = null; var initLast = this.last.clone(); var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); for (var i in this.by_data.BYDAY) { if (!this.by_data.BYDAY.hasOwnProperty(i)) { continue; } this.last = initLast.clone(); var bydayParts = this.ruleDayOfWeek(this.by_data.BYDAY[i]); var pos = bydayParts[0]; var dow = bydayParts[1]; var dayOfMonth = this.last.nthWeekDay(dow, pos); if (pos >= 6 || pos <= -6) { throw new Error("Malformed values in BYDAY part"); } if (dayOfMonth > daysInMonth || dayOfMonth <= 0) { if (tempLast && tempLast.month == initLast.month) { continue; } while (dayOfMonth > daysInMonth || dayOfMonth <= 0) { this.increment_month(); daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); dayOfMonth = this.last.nthWeekDay(dow, pos); } } this.last.day = dayOfMonth; if (!tempLast || this.last.compare(tempLast) < 0) { tempLast = this.last.clone(); } } this.last = tempLast.clone(); if (this.has_by_data("BYMONTHDAY")) { this._byDayAndMonthDay(true); } if (this.last.day > daysInMonth || this.last.day == 0) { throw new Error("Malformed values in BYDAY part"); } } else if (this.has_by_data("BYMONTHDAY")) { if (this.last.day < 0) { var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); this.last.day = daysInMonth + this.last.day + 1; } } }, /** * Retrieve the next occurrence from the iterator. * @return {ICAL.Time} */ next: function icalrecur_iterator_next() { var before = this.last ? this.last.clone() : null; if (this.rule.count && this.occurrence_number >= this.rule.count || this.rule.until && this.last.compare(this.rule.until) > 0) { this.completed = true; return null; } if (this.occurrence_number == 0 && this.last.compare(this.dtstart) >= 0) { this.occurrence_number++; return this.last; } var valid2; do { valid2 = 1; switch (this.rule.freq) { case "SECONDLY": this.next_second(); break; case "MINUTELY": this.next_minute(); break; case "HOURLY": this.next_hour(); break; case "DAILY": this.next_day(); break; case "WEEKLY": this.next_week(); break; case "MONTHLY": valid2 = this.next_month(); break; case "YEARLY": this.next_year(); break; default: return null; } } while (!this.check_contracting_rules() || this.last.compare(this.dtstart) < 0 || !valid2); if (this.last.compare(before) == 0) { throw new Error("Same occurrence found twice, protecting you from death by recursion"); } if (this.rule.until && this.last.compare(this.rule.until) > 0) { this.completed = true; return null; } else { this.occurrence_number++; return this.last; } }, next_second: function next_second() { return this.next_generic("BYSECOND", "SECONDLY", "second", "minute"); }, increment_second: function increment_second(inc) { return this.increment_generic(inc, "second", 60, "minute"); }, next_minute: function next_minute() { return this.next_generic( "BYMINUTE", "MINUTELY", "minute", "hour", "next_second" ); }, increment_minute: function increment_minute(inc) { return this.increment_generic(inc, "minute", 60, "hour"); }, next_hour: function next_hour() { return this.next_generic( "BYHOUR", "HOURLY", "hour", "monthday", "next_minute" ); }, increment_hour: function increment_hour(inc) { this.increment_generic(inc, "hour", 24, "monthday"); }, next_day: function next_day() { var has_by_day = "BYDAY" in this.by_data; var this_freq = this.rule.freq == "DAILY"; if (this.next_hour() == 0) { return 0; } if (this_freq) { this.increment_monthday(this.rule.interval); } else { this.increment_monthday(1); } return 0; }, next_week: function next_week() { var end_of_data = 0; if (this.next_weekday_by_week() == 0) { return end_of_data; } if (this.has_by_data("BYWEEKNO")) { var idx = ++this.by_indices.BYWEEKNO; if (this.by_indices.BYWEEKNO == this.by_data.BYWEEKNO.length) { this.by_indices.BYWEEKNO = 0; end_of_data = 1; } this.last.month = 1; this.last.day = 1; var week_no = this.by_data.BYWEEKNO[this.by_indices.BYWEEKNO]; this.last.day += 7 * week_no; if (end_of_data) { this.increment_year(1); } } else { this.increment_monthday(7 * this.rule.interval); } return end_of_data; }, /** * Normalize each by day rule for a given year/month. * Takes into account ordering and negative rules * * @private * @param {Number} year Current year. * @param {Number} month Current month. * @param {Array} rules Array of rules. * * @return {Array} sorted and normalized rules. * Negative rules will be expanded to their * correct positive values for easier processing. */ normalizeByMonthDayRules: function(year, month, rules) { var daysInMonth = ICAL.Time.daysInMonth(month, year); var newRules = []; var ruleIdx = 0; var len = rules.length; var rule; for (; ruleIdx < len; ruleIdx++) { rule = rules[ruleIdx]; if (Math.abs(rule) > daysInMonth) { continue; } if (rule < 0) { rule = daysInMonth + (rule + 1); } else if (rule === 0) { continue; } if (newRules.indexOf(rule) === -1) { newRules.push(rule); } } return newRules.sort(function(a2, b) { return a2 - b; }); }, /** * NOTES: * We are given a list of dates in the month (BYMONTHDAY) (23, etc..) * Also we are given a list of days (BYDAY) (MO, 2SU, etc..) when * both conditions match a given date (this.last.day) iteration stops. * * @private * @param {Boolean=} isInit When given true will not increment the * current day (this.last). */ _byDayAndMonthDay: function(isInit) { var byMonthDay; var byDay = this.by_data.BYDAY; var date; var dateIdx = 0; var dateLen; var dayLen = byDay.length; var dataIsValid = 0; var daysInMonth; var self2 = this; var lastDay = this.last.day; function initMonth() { daysInMonth = ICAL.Time.daysInMonth( self2.last.month, self2.last.year ); byMonthDay = self2.normalizeByMonthDayRules( self2.last.year, self2.last.month, self2.by_data.BYMONTHDAY ); dateLen = byMonthDay.length; while (byMonthDay[dateIdx] <= lastDay && !(isInit && byMonthDay[dateIdx] == lastDay) && dateIdx < dateLen - 1) { dateIdx++; } } function nextMonth() { lastDay = 0; self2.increment_month(); dateIdx = 0; initMonth(); } initMonth(); if (isInit) { lastDay -= 1; } var monthsCounter = 48; while (!dataIsValid && monthsCounter) { monthsCounter--; date = lastDay + 1; if (date > daysInMonth) { nextMonth(); continue; } var next = byMonthDay[dateIdx++]; if (next >= date) { lastDay = next; } else { nextMonth(); continue; } for (var dayIdx = 0; dayIdx < dayLen; dayIdx++) { var parts = this.ruleDayOfWeek(byDay[dayIdx]); var pos = parts[0]; var dow = parts[1]; this.last.day = lastDay; if (this.last.isNthWeekDay(dow, pos)) { dataIsValid = 1; break; } } if (!dataIsValid && dateIdx === dateLen) { nextMonth(); continue; } } if (monthsCounter <= 0) { throw new Error("Malformed values in BYDAY combined with BYMONTHDAY parts"); } return dataIsValid; }, next_month: function next_month() { var this_freq = this.rule.freq == "MONTHLY"; var data_valid = 1; if (this.next_hour() == 0) { return data_valid; } if (this.has_by_data("BYDAY") && this.has_by_data("BYMONTHDAY")) { data_valid = this._byDayAndMonthDay(); } else if (this.has_by_data("BYDAY")) { var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); var setpos = 0; var setpos_total = 0; if (this.has_by_data("BYSETPOS")) { var last_day = this.last.day; for (var day = 1; day <= daysInMonth; day++) { this.last.day = day; if (this.is_day_in_byday(this.last)) { setpos_total++; if (day <= last_day) { setpos++; } } } this.last.day = last_day; } data_valid = 0; for (var day = this.last.day + 1; day <= daysInMonth; day++) { this.last.day = day; if (this.is_day_in_byday(this.last)) { if (!this.has_by_data("BYSETPOS") || this.check_set_position(++setpos) || this.check_set_position(setpos - setpos_total - 1)) { data_valid = 1; break; } } } if (day > daysInMonth) { this.last.day = 1; this.increment_month(); if (this.is_day_in_byday(this.last)) { if (!this.has_by_data("BYSETPOS") || this.check_set_position(1)) { data_valid = 1; } } else { data_valid = 0; } } } else if (this.has_by_data("BYMONTHDAY")) { this.by_indices.BYMONTHDAY++; if (this.by_indices.BYMONTHDAY >= this.by_data.BYMONTHDAY.length) { this.by_indices.BYMONTHDAY = 0; this.increment_month(); } var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); var day = this.by_data.BYMONTHDAY[this.by_indices.BYMONTHDAY]; if (day < 0) { day = daysInMonth + day + 1; } if (day > daysInMonth) { this.last.day = 1; data_valid = this.is_day_in_byday(this.last); } else { this.last.day = day; } } else { this.increment_month(); var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); if (this.by_data.BYMONTHDAY[0] > daysInMonth) { data_valid = 0; } else { this.last.day = this.by_data.BYMONTHDAY[0]; } } return data_valid; }, next_weekday_by_week: function next_weekday_by_week() { var end_of_data = 0; if (this.next_hour() == 0) { return end_of_data; } if (!this.has_by_data("BYDAY")) { return 1; } for (; ; ) { var tt = new ICAL.Time(); this.by_indices.BYDAY++; if (this.by_indices.BYDAY == Object.keys(this.by_data.BYDAY).length) { this.by_indices.BYDAY = 0; end_of_data = 1; } var coded_day = this.by_data.BYDAY[this.by_indices.BYDAY]; var parts = this.ruleDayOfWeek(coded_day); var dow = parts[1]; dow -= this.rule.wkst; if (dow < 0) { dow += 7; } tt.year = this.last.year; tt.month = this.last.month; tt.day = this.last.day; var startOfWeek = tt.startDoyWeek(this.rule.wkst); if (dow + startOfWeek < 1) { if (!end_of_data) { continue; } } var next = ICAL.Time.fromDayOfYear( startOfWeek + dow, this.last.year ); this.last.year = next.year; this.last.month = next.month; this.last.day = next.day; return end_of_data; } }, next_year: function next_year() { if (this.next_hour() == 0) { return 0; } if (++this.days_index == this.days.length) { this.days_index = 0; do { this.increment_year(this.rule.interval); this.expand_year_days(this.last.year); } while (this.days.length == 0); } this._nextByYearDay(); return 1; }, _nextByYearDay: function _nextByYearDay() { var doy = this.days[this.days_index]; var year = this.last.year; if (doy < 1) { doy += 1; year += 1; } var next = ICAL.Time.fromDayOfYear(doy, year); this.last.day = next.day; this.last.month = next.month; }, /** * @param dow (eg: '1TU', '-1MO') * @param {ICAL.Time.weekDay=} aWeekStart The week start weekday * @return [pos, numericDow] (eg: [1, 3]) numericDow is relative to aWeekStart */ ruleDayOfWeek: function ruleDayOfWeek(dow, aWeekStart) { var matches = dow.match(/([+-]?[0-9])?(MO|TU|WE|TH|FR|SA|SU)/); if (matches) { var pos = parseInt(matches[1] || 0, 10); dow = ICAL.Recur.icalDayToNumericDay(matches[2], aWeekStart); return [pos, dow]; } else { return [0, 0]; } }, next_generic: function next_generic(aRuleType, aInterval, aDateAttr, aFollowingAttr, aPreviousIncr) { var has_by_rule = aRuleType in this.by_data; var this_freq = this.rule.freq == aInterval; var end_of_data = 0; if (aPreviousIncr && this[aPreviousIncr]() == 0) { return end_of_data; } if (has_by_rule) { this.by_indices[aRuleType]++; var idx = this.by_indices[aRuleType]; var dta = this.by_data[aRuleType]; if (this.by_indices[aRuleType] == dta.length) { this.by_indices[aRuleType] = 0; end_of_data = 1; } this.last[aDateAttr] = dta[this.by_indices[aRuleType]]; } else if (this_freq) { this["increment_" + aDateAttr](this.rule.interval); } if (has_by_rule && end_of_data && this_freq) { this["increment_" + aFollowingAttr](1); } return end_of_data; }, increment_monthday: function increment_monthday(inc) { for (var i = 0; i < inc; i++) { var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year); this.last.day++; if (this.last.day > daysInMonth) { this.last.day -= daysInMonth; this.increment_month(); } } }, increment_month: function increment_month() { this.last.day = 1; if (this.has_by_data("BYMONTH")) { this.by_indices.BYMONTH++; if (this.by_indices.BYMONTH == this.by_data.BYMONTH.length) { this.by_indices.BYMONTH = 0; this.increment_year(1); } this.last.month = this.by_data.BYMONTH[this.by_indices.BYMONTH]; } else { if (this.rule.freq == "MONTHLY") { this.last.month += this.rule.interval; } else { this.last.month++; } this.last.month--; var years = ICAL.helpers.trunc(this.last.month / 12); this.last.month %= 12; this.last.month++; if (years != 0) { this.increment_year(years); } } }, increment_year: function increment_year(inc) { this.last.year += inc; }, increment_generic: function increment_generic(inc, aDateAttr, aFactor, aNextIncrement) { this.last[aDateAttr] += inc; var nextunit = ICAL.helpers.trunc(this.last[aDateAttr] / aFactor); this.last[aDateAttr] %= aFactor; if (nextunit != 0) { this["increment_" + aNextIncrement](nextunit); } }, has_by_data: function has_by_data(aRuleType) { return aRuleType in this.rule.parts; }, expand_year_days: function expand_year_days(aYear) { var t2 = new ICAL.Time(); this.days = []; var parts = {}; var rules = ["BYDAY", "BYWEEKNO", "BYMONTHDAY", "BYMONTH", "BYYEARDAY"]; for (var p in rules) { if (rules.hasOwnProperty(p)) { var part = rules[p]; if (part in this.rule.parts) { parts[part] = this.rule.parts[part]; } } } if ("BYMONTH" in parts && "BYWEEKNO" in parts) { var valid2 = 1; var validWeeks = {}; t2.year = aYear; t2.isDate = true; for (var monthIdx = 0; monthIdx < this.by_data.BYMONTH.length; monthIdx++) { var month = this.by_data.BYMONTH[monthIdx]; t2.month = month; t2.day = 1; var first_week = t2.weekNumber(this.rule.wkst); t2.day = ICAL.Time.daysInMonth(month, aYear); var last_week = t2.weekNumber(this.rule.wkst); for (monthIdx = first_week; monthIdx < last_week; monthIdx++) { validWeeks[monthIdx] = 1; } } for (var weekIdx = 0; weekIdx < this.by_data.BYWEEKNO.length && valid2; weekIdx++) { var weekno = this.by_data.BYWEEKNO[weekIdx]; if (weekno < 52) { valid2 &= validWeeks[weekIdx]; } else { valid2 = 0; } } if (valid2) { delete parts.BYMONTH; } else { delete parts.BYWEEKNO; } } var partCount = Object.keys(parts).length; if (partCount == 0) { var t1 = this.dtstart.clone(); t1.year = this.last.year; this.days.push(t1.dayOfYear()); } else if (partCount == 1 && "BYMONTH" in parts) { for (var monthkey in this.by_data.BYMONTH) { if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) { continue; } var t22 = this.dtstart.clone(); t22.year = aYear; t22.month = this.by_data.BYMONTH[monthkey]; t22.isDate = true; this.days.push(t22.dayOfYear()); } } else if (partCount == 1 && "BYMONTHDAY" in parts) { for (var monthdaykey in this.by_data.BYMONTHDAY) { if (!this.by_data.BYMONTHDAY.hasOwnProperty(monthdaykey)) { continue; } var t3 = this.dtstart.clone(); var day_ = this.by_data.BYMONTHDAY[monthdaykey]; if (day_ < 0) { var daysInMonth = ICAL.Time.daysInMonth(t3.month, aYear); day_ = day_ + daysInMonth + 1; } t3.day = day_; t3.year = aYear; t3.isDate = true; this.days.push(t3.dayOfYear()); } } else if (partCount == 2 && "BYMONTHDAY" in parts && "BYMONTH" in parts) { for (var monthkey in this.by_data.BYMONTH) { if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) { continue; } var month_ = this.by_data.BYMONTH[monthkey]; var daysInMonth = ICAL.Time.daysInMonth(month_, aYear); for (var monthdaykey in this.by_data.BYMONTHDAY) { if (!this.by_data.BYMONTHDAY.hasOwnProperty(monthdaykey)) { continue; } var day_ = this.by_data.BYMONTHDAY[monthdaykey]; if (day_ < 0) { day_ = day_ + daysInMonth + 1; } t2.day = day_; t2.month = month_; t2.year = aYear; t2.isDate = true; this.days.push(t2.dayOfYear()); } } } else if (partCount == 1 && "BYWEEKNO" in parts) { } else if (partCount == 2 && "BYWEEKNO" in parts && "BYMONTHDAY" in parts) { } else if (partCount == 1 && "BYDAY" in parts) { this.days = this.days.concat(this.expand_by_day(aYear)); } else if (partCount == 2 && "BYDAY" in parts && "BYMONTH" in parts) { for (var monthkey in this.by_data.BYMONTH) { if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) { continue; } var month = this.by_data.BYMONTH[monthkey]; var daysInMonth = ICAL.Time.daysInMonth(month, aYear); t2.year = aYear; t2.month = this.by_data.BYMONTH[monthkey]; t2.day = 1; t2.isDate = true; var first_dow = t2.dayOfWeek(); var doy_offset = t2.dayOfYear() - 1; t2.day = daysInMonth; var last_dow = t2.dayOfWeek(); if (this.has_by_data("BYSETPOS")) { var set_pos_counter = 0; var by_month_day = []; for (var day = 1; day <= daysInMonth; day++) { t2.day = day; if (this.is_day_in_byday(t2)) { by_month_day.push(day); } } for (var spIndex = 0; spIndex < by_month_day.length; spIndex++) { if (this.check_set_position(spIndex + 1) || this.check_set_position(spIndex - by_month_day.length)) { this.days.push(doy_offset + by_month_day[spIndex]); } } } else { for (var daycodedkey in this.by_data.BYDAY) { if (!this.by_data.BYDAY.hasOwnProperty(daycodedkey)) { continue; } var coded_day = this.by_data.BYDAY[daycodedkey]; var bydayParts = this.ruleDayOfWeek(coded_day); var pos = bydayParts[0]; var dow = bydayParts[1]; var month_day; var first_matching_day = (dow + 7 - first_dow) % 7 + 1; var last_matching_day = daysInMonth - (last_dow + 7 - dow) % 7; if (pos == 0) { for (var day = first_matching_day; day <= daysInMonth; day += 7) { this.days.push(doy_offset + day); } } else if (pos > 0) { month_day = first_matching_day + (pos - 1) * 7; if (month_day <= daysInMonth) { this.days.push(doy_offset + month_day); } } else { month_day = last_matching_day + (pos + 1) * 7; if (month_day > 0) { this.days.push(doy_offset + month_day); } } } } } this.days.sort(function(a2, b) { return a2 - b; }); } else if (partCount == 2 && "BYDAY" in parts && "BYMONTHDAY" in parts) { var expandedDays = this.expand_by_day(aYear); for (var daykey in expandedDays) { if (!expandedDays.hasOwnProperty(daykey)) { continue; } var day = expandedDays[daykey]; var tt = ICAL.Time.fromDayOfYear(day, aYear); if (this.by_data.BYMONTHDAY.indexOf(tt.day) >= 0) { this.days.push(day); } } } else if (partCount == 3 && "BYDAY" in parts && "BYMONTHDAY" in parts && "BYMONTH" in parts) { var expandedDays = this.expand_by_day(aYear); for (var daykey in expandedDays) { if (!expandedDays.hasOwnProperty(daykey)) { continue; } var day = expandedDays[daykey]; var tt = ICAL.Time.fromDayOfYear(day, aYear); if (this.by_data.BYMONTH.indexOf(tt.month) >= 0 && this.by_data.BYMONTHDAY.indexOf(tt.day) >= 0) { this.days.push(day); } } } else if (partCount == 2 && "BYDAY" in parts && "BYWEEKNO" in parts) { var expandedDays = this.expand_by_day(aYear); for (var daykey in expandedDays) { if (!expandedDays.hasOwnProperty(daykey)) { continue; } var day = expandedDays[daykey]; var tt = ICAL.Time.fromDayOfYear(day, aYear); var weekno = tt.weekNumber(this.rule.wkst); if (this.by_data.BYWEEKNO.indexOf(weekno)) { this.days.push(day); } } } else if (partCount == 3 && "BYDAY" in parts && "BYWEEKNO" in parts && "BYMONTHDAY" in parts) { } else if (partCount == 1 && "BYYEARDAY" in parts) { this.days = this.days.concat(this.by_data.BYYEARDAY); } else { this.days = []; } return 0; }, expand_by_day: function expand_by_day(aYear) { var days_list = []; var tmp = this.last.clone(); tmp.year = aYear; tmp.month = 1; tmp.day = 1; tmp.isDate = true; var start_dow = tmp.dayOfWeek(); tmp.month = 12; tmp.day = 31; tmp.isDate = true; var end_dow = tmp.dayOfWeek(); var end_year_day = tmp.dayOfYear(); for (var daykey in this.by_data.BYDAY) { if (!this.by_data.BYDAY.hasOwnProperty(daykey)) { continue; } var day = this.by_data.BYDAY[daykey]; var parts = this.ruleDayOfWeek(day); var pos = parts[0]; var dow = parts[1]; if (pos == 0) { var tmp_start_doy = (dow + 7 - start_dow) % 7 + 1; for (var doy = tmp_start_doy; doy <= end_year_day; doy += 7) { days_list.push(doy); } } else if (pos > 0) { var first; if (dow >= start_dow) { first = dow - start_dow + 1; } else { first = dow - start_dow + 8; } days_list.push(first + (pos - 1) * 7); } else { var last; pos = -pos; if (dow <= end_dow) { last = end_year_day - end_dow + dow; } else { last = end_year_day - end_dow + dow - 7; } days_list.push(last - (pos - 1) * 7); } } return days_list; }, is_day_in_byday: function is_day_in_byday(tt) { for (var daykey in this.by_data.BYDAY) { if (!this.by_data.BYDAY.hasOwnProperty(daykey)) { continue; } var day = this.by_data.BYDAY[daykey]; var parts = this.ruleDayOfWeek(day); var pos = parts[0]; var dow = parts[1]; var this_dow = tt.dayOfWeek(); if (pos == 0 && dow == this_dow || tt.nthWeekDay(dow, pos) == tt.day) { return 1; } } return 0; }, /** * Checks if given value is in BYSETPOS. * * @private * @param {Numeric} aPos position to check for. * @return {Boolean} false unless BYSETPOS rules exist * and the given value is present in rules. */ check_set_position: function check_set_position(aPos) { if (this.has_by_data("BYSETPOS")) { var idx = this.by_data.BYSETPOS.indexOf(aPos); return idx !== -1; } return false; }, sort_byday_rules: function icalrecur_sort_byday_rules(aRules) { for (var i = 0; i < aRules.length; i++) { for (var j = 0; j < i; j++) { var one3 = this.ruleDayOfWeek(aRules[j], this.rule.wkst)[1]; var two = this.ruleDayOfWeek(aRules[i], this.rule.wkst)[1]; if (one3 > two) { var tmp = aRules[i]; aRules[i] = aRules[j]; aRules[j] = tmp; } } } }, check_contract_restriction: function check_contract_restriction(aRuleType, v) { var indexMapValue = icalrecur_iterator._indexMap[aRuleType]; var ruleMapValue = icalrecur_iterator._expandMap[this.rule.freq][indexMapValue]; var pass = false; if (aRuleType in this.by_data && ruleMapValue == icalrecur_iterator.CONTRACT) { var ruleType = this.by_data[aRuleType]; for (var bydatakey in ruleType) { if (ruleType.hasOwnProperty(bydatakey)) { if (ruleType[bydatakey] == v) { pass = true; break; } } } } else { pass = true; } return pass; }, check_contracting_rules: function check_contracting_rules() { var dow = this.last.dayOfWeek(); var weekNo = this.last.weekNumber(this.rule.wkst); var doy = this.last.dayOfYear(); return this.check_contract_restriction("BYSECOND", this.last.second) && this.check_contract_restriction("BYMINUTE", this.last.minute) && this.check_contract_restriction("BYHOUR", this.last.hour) && this.check_contract_restriction("BYDAY", ICAL.Recur.numericDayToIcalDay(dow)) && this.check_contract_restriction("BYWEEKNO", weekNo) && this.check_contract_restriction("BYMONTHDAY", this.last.day) && this.check_contract_restriction("BYMONTH", this.last.month) && this.check_contract_restriction("BYYEARDAY", doy); }, setup_defaults: function setup_defaults(aRuleType, req, deftime) { var indexMapValue = icalrecur_iterator._indexMap[aRuleType]; var ruleMapValue = icalrecur_iterator._expandMap[this.rule.freq][indexMapValue]; if (ruleMapValue != icalrecur_iterator.CONTRACT) { if (!(aRuleType in this.by_data)) { this.by_data[aRuleType] = [deftime]; } if (this.rule.freq != req) { return this.by_data[aRuleType][0]; } } return deftime; }, /** * Convert iterator into a serialize-able object. Will preserve current * iteration sequence to ensure the seamless continuation of the recurrence * rule. * @return {Object} */ toJSON: function() { var result = /* @__PURE__ */ Object.create(null); result.initialized = this.initialized; result.rule = this.rule.toJSON(); result.dtstart = this.dtstart.toJSON(); result.by_data = this.by_data; result.days = this.days; result.last = this.last.toJSON(); result.by_indices = this.by_indices; result.occurrence_number = this.occurrence_number; return result; } }; icalrecur_iterator._indexMap = { "BYSECOND": 0, "BYMINUTE": 1, "BYHOUR": 2, "BYDAY": 3, "BYMONTHDAY": 4, "BYYEARDAY": 5, "BYWEEKNO": 6, "BYMONTH": 7, "BYSETPOS": 8 }; icalrecur_iterator._expandMap = { "SECONDLY": [1, 1, 1, 1, 1, 1, 1, 1], "MINUTELY": [2, 1, 1, 1, 1, 1, 1, 1], "HOURLY": [2, 2, 1, 1, 1, 1, 1, 1], "DAILY": [2, 2, 2, 1, 1, 1, 1, 1], "WEEKLY": [2, 2, 2, 2, 3, 3, 1, 1], "MONTHLY": [2, 2, 2, 2, 2, 3, 3, 1], "YEARLY": [2, 2, 2, 2, 2, 2, 2, 2] }; icalrecur_iterator.UNKNOWN = 0; icalrecur_iterator.CONTRACT = 1; icalrecur_iterator.EXPAND = 2; icalrecur_iterator.ILLEGAL = 3; return icalrecur_iterator; }(); ICAL.RecurExpansion = function() { function formatTime(item) { return ICAL.helpers.formatClassType(item, ICAL.Time); } function compareTime(a2, b) { return a2.compare(b); } function isRecurringComponent(comp) { return comp.hasProperty("rdate") || comp.hasProperty("rrule") || comp.hasProperty("recurrence-id"); } function RecurExpansion(options) { this.ruleDates = []; this.exDates = []; this.fromData(options); } RecurExpansion.prototype = { /** * True when iteration is fully completed. * @type {Boolean} */ complete: false, /** * Array of rrule iterators. * * @type {ICAL.RecurIterator[]} * @private */ ruleIterators: null, /** * Array of rdate instances. * * @type {ICAL.Time[]} * @private */ ruleDates: null, /** * Array of exdate instances. * * @type {ICAL.Time[]} * @private */ exDates: null, /** * Current position in ruleDates array. * @type {Number} * @private */ ruleDateInc: 0, /** * Current position in exDates array * @type {Number} * @private */ exDateInc: 0, /** * Current negative date. * * @type {ICAL.Time} * @private */ exDate: null, /** * Current additional date. * * @type {ICAL.Time} * @private */ ruleDate: null, /** * Start date of recurring rules. * * @type {ICAL.Time} */ dtstart: null, /** * Last expanded time * * @type {ICAL.Time} */ last: null, /** * Initialize the recurrence expansion from the data object. The options * object may also contain additional members, see the * {@link ICAL.RecurExpansion constructor} for more details. * * @param {Object} options * Recurrence expansion options * @param {ICAL.Time} options.dtstart * Start time of the event * @param {ICAL.Component=} options.component * Component for expansion, required if not resuming. */ fromData: function(options) { var start = ICAL.helpers.formatClassType(options.dtstart, ICAL.Time); if (!start) { throw new Error(".dtstart (ICAL.Time) must be given"); } else { this.dtstart = start; } if (options.component) { this._init(options.component); } else { this.last = formatTime(options.last) || start.clone(); if (!options.ruleIterators) { throw new Error(".ruleIterators or .component must be given"); } this.ruleIterators = options.ruleIterators.map(function(item) { return ICAL.helpers.formatClassType(item, ICAL.RecurIterator); }); this.ruleDateInc = options.ruleDateInc; this.exDateInc = options.exDateInc; if (options.ruleDates) { this.ruleDates = options.ruleDates.map(formatTime); this.ruleDate = this.ruleDates[this.ruleDateInc]; } if (options.exDates) { this.exDates = options.exDates.map(formatTime); this.exDate = this.exDates[this.exDateInc]; } if (typeof options.complete !== "undefined") { this.complete = options.complete; } } }, /** * Retrieve the next occurrence in the series. * @return {ICAL.Time} */ next: function() { var iter; var ruleOfDay; var next; var compare; var maxTries = 500; var currentTry = 0; while (true) { if (currentTry++ > maxTries) { throw new Error( "max tries have occured, rule may be impossible to forfill." ); } next = this.ruleDate; iter = this._nextRecurrenceIter(this.last); if (!next && !iter) { this.complete = true; break; } if (!next || iter && next.compare(iter.last) > 0) { next = iter.last.clone(); iter.next(); } if (this.ruleDate === next) { this._nextRuleDay(); } this.last = next; if (this.exDate) { compare = this.exDate.compare(this.last); if (compare < 0) { this._nextExDay(); } if (compare === 0) { this._nextExDay(); continue; } } return this.last; } }, /** * Converts object into a serialize-able format. This format can be passed * back into the expansion to resume iteration. * @return {Object} */ toJSON: function() { function toJSON(item) { return item.toJSON(); } var result = /* @__PURE__ */ Object.create(null); result.ruleIterators = this.ruleIterators.map(toJSON); if (this.ruleDates) { result.ruleDates = this.ruleDates.map(toJSON); } if (this.exDates) { result.exDates = this.exDates.map(toJSON); } result.ruleDateInc = this.ruleDateInc; result.exDateInc = this.exDateInc; result.last = this.last.toJSON(); result.dtstart = this.dtstart.toJSON(); result.complete = this.complete; return result; }, /** * Extract all dates from the properties in the given component. The * properties will be filtered by the property name. * * @private * @param {ICAL.Component} component The component to search in * @param {String} propertyName The property name to search for * @return {ICAL.Time[]} The extracted dates. */ _extractDates: function(component, propertyName) { function handleProp(prop2) { idx = ICAL.helpers.binsearchInsert( result, prop2, compareTime ); result.splice(idx, 0, prop2); } var result = []; var props = component.getAllProperties(propertyName); var len = props.length; var i = 0; var prop; var idx; for (; i < len; i++) { props[i].getValues().forEach(handleProp); } return result; }, /** * Initialize the recurrence expansion. * * @private * @param {ICAL.Component} component The component to initialize from. */ _init: function(component) { this.ruleIterators = []; this.last = this.dtstart.clone(); if (!isRecurringComponent(component)) { this.ruleDate = this.last.clone(); this.complete = true; return; } if (component.hasProperty("rdate")) { this.ruleDates = this._extractDates(component, "rdate"); if (this.ruleDates[0] && this.ruleDates[0].compare(this.dtstart) < 0) { this.ruleDateInc = 0; this.last = this.ruleDates[0].clone(); } else { this.ruleDateInc = ICAL.helpers.binsearchInsert( this.ruleDates, this.last, compareTime ); } this.ruleDate = this.ruleDates[this.ruleDateInc]; } if (component.hasProperty("rrule")) { var rules = component.getAllProperties("rrule"); var i = 0; var len = rules.length; var rule; var iter; for (; i < len; i++) { rule = rules[i].getFirstValue(); iter = rule.iterator(this.dtstart); this.ruleIterators.push(iter); iter.next(); } } if (component.hasProperty("exdate")) { this.exDates = this._extractDates(component, "exdate"); this.exDateInc = ICAL.helpers.binsearchInsert( this.exDates, this.last, compareTime ); this.exDate = this.exDates[this.exDateInc]; } }, /** * Advance to the next exdate * @private */ _nextExDay: function() { this.exDate = this.exDates[++this.exDateInc]; }, /** * Advance to the next rule date * @private */ _nextRuleDay: function() { this.ruleDate = this.ruleDates[++this.ruleDateInc]; }, /** * Find and return the recurrence rule with the most recent event and * return it. * * @private * @return {?ICAL.RecurIterator} Found iterator. */ _nextRecurrenceIter: function() { var iters = this.ruleIterators; if (iters.length === 0) { return null; } var len = iters.length; var iter; var iterTime; var iterIdx = 0; var chosenIter; for (; iterIdx < len; iterIdx++) { iter = iters[iterIdx]; iterTime = iter.last; if (iter.completed) { len--; if (iterIdx !== 0) { iterIdx--; } iters.splice(iterIdx, 1); continue; } if (!chosenIter || chosenIter.last.compare(iterTime) > 0) { chosenIter = iter; } } return chosenIter; } }; return RecurExpansion; }(); ICAL.Event = function() { function Event(component, options) { if (!(component instanceof ICAL.Component)) { options = component; component = null; } if (component) { this.component = component; } else { this.component = new ICAL.Component("vevent"); } this._rangeExceptionCache = /* @__PURE__ */ Object.create(null); this.exceptions = /* @__PURE__ */ Object.create(null); this.rangeExceptions = []; if (options && options.strictExceptions) { this.strictExceptions = options.strictExceptions; } if (options && options.exceptions) { options.exceptions.forEach(this.relateException, this); } else if (this.component.parent && !this.isRecurrenceException()) { this.component.parent.getAllSubcomponents("vevent").forEach(function(event) { if (event.hasProperty("recurrence-id")) { this.relateException(event); } }, this); } } Event.prototype = { THISANDFUTURE: "THISANDFUTURE", /** * List of related event exceptions. * * @type {ICAL.Event[]} */ exceptions: null, /** * When true, will verify exceptions are related by their UUID. * * @type {Boolean} */ strictExceptions: false, /** * Relates a given event exception to this object. If the given component * does not share the UID of this event it cannot be related and will throw * an exception. * * If this component is an exception it cannot have other exceptions * related to it. * * @param {ICAL.Component|ICAL.Event} obj Component or event */ relateException: function(obj) { if (this.isRecurrenceException()) { throw new Error("cannot relate exception to exceptions"); } if (obj instanceof ICAL.Component) { obj = new ICAL.Event(obj); } if (this.strictExceptions && obj.uid !== this.uid) { throw new Error("attempted to relate unrelated exception"); } var id = obj.recurrenceId.toString(); this.exceptions[id] = obj; if (obj.modifiesFuture()) { var item = [ obj.recurrenceId.toUnixTime(), id ]; var idx = ICAL.helpers.binsearchInsert( this.rangeExceptions, item, compareRangeException ); this.rangeExceptions.splice(idx, 0, item); } }, /** * Checks if this record is an exception and has the RANGE=THISANDFUTURE * value. * * @return {Boolean} True, when exception is within range */ modifiesFuture: function() { if (!this.component.hasProperty("recurrence-id")) { return false; } var range = this.component.getFirstProperty("recurrence-id").getParameter("range"); return range === this.THISANDFUTURE; }, /** * Finds the range exception nearest to the given date. * * @param {ICAL.Time} time usually an occurrence time of an event * @return {?ICAL.Event} the related event/exception or null */ findRangeException: function(time) { if (!this.rangeExceptions.length) { return null; } var utc2 = time.toUnixTime(); var idx = ICAL.helpers.binsearchInsert( this.rangeExceptions, [utc2], compareRangeException ); idx -= 1; if (idx < 0) { return null; } var rangeItem = this.rangeExceptions[idx]; if (utc2 < rangeItem[0]) { return null; } return rangeItem[1]; }, /** * This object is returned by {@link ICAL.Event#getOccurrenceDetails getOccurrenceDetails} * * @typedef {Object} occurrenceDetails * @memberof ICAL.Event * @property {ICAL.Time} recurrenceId The passed in recurrence id * @property {ICAL.Event} item The occurrence * @property {ICAL.Time} startDate The start of the occurrence * @property {ICAL.Time} endDate The end of the occurrence */ /** * Returns the occurrence details based on its start time. If the * occurrence has an exception will return the details for that exception. * * NOTE: this method is intend to be used in conjunction * with the {@link ICAL.Event#iterator iterator} method. * * @param {ICAL.Time} occurrence time occurrence * @return {ICAL.Event.occurrenceDetails} Information about the occurrence */ getOccurrenceDetails: function(occurrence) { var id = occurrence.toString(); var utcId = occurrence.convertToZone(ICAL.Timezone.utcTimezone).toString(); var item; var result = { //XXX: Clone? recurrenceId: occurrence }; if (id in this.exceptions) { item = result.item = this.exceptions[id]; result.startDate = item.startDate; result.endDate = item.endDate; result.item = item; } else if (utcId in this.exceptions) { item = this.exceptions[utcId]; result.startDate = item.startDate; result.endDate = item.endDate; result.item = item; } else { var rangeExceptionId = this.findRangeException( occurrence ); var end; if (rangeExceptionId) { var exception = this.exceptions[rangeExceptionId]; result.item = exception; var startDiff = this._rangeExceptionCache[rangeExceptionId]; if (!startDiff) { var original = exception.recurrenceId.clone(); var newStart = exception.startDate.clone(); original.zone = newStart.zone; startDiff = newStart.subtractDate(original); this._rangeExceptionCache[rangeExceptionId] = startDiff; } var start = occurrence.clone(); start.zone = exception.startDate.zone; start.addDuration(startDiff); end = start.clone(); end.addDuration(exception.duration); result.startDate = start; result.endDate = end; } else { end = occurrence.clone(); end.addDuration(this.duration); result.endDate = end; result.startDate = occurrence; result.item = this; } } return result; }, /** * Builds a recur expansion instance for a specific point in time (defaults * to startDate). * * @param {ICAL.Time} startTime Starting point for expansion * @return {ICAL.RecurExpansion} Expansion object */ iterator: function(startTime) { return new ICAL.RecurExpansion({ component: this.component, dtstart: startTime || this.startDate }); }, /** * Checks if the event is recurring * * @return {Boolean} True, if event is recurring */ isRecurring: function() { var comp = this.component; return comp.hasProperty("rrule") || comp.hasProperty("rdate"); }, /** * Checks if the event describes a recurrence exception. See * {@tutorial terminology} for details. * * @return {Boolean} True, if the even describes a recurrence exception */ isRecurrenceException: function() { return this.component.hasProperty("recurrence-id"); }, /** * Returns the types of recurrences this event may have. * * Returned as an object with the following possible keys: * * - YEARLY * - MONTHLY * - WEEKLY * - DAILY * - MINUTELY * - SECONDLY * * @return {Object.} * Object of recurrence flags */ getRecurrenceTypes: function() { var rules = this.component.getAllProperties("rrule"); var i = 0; var len = rules.length; var result = /* @__PURE__ */ Object.create(null); for (; i < len; i++) { var value = rules[i].getFirstValue(); result[value.freq] = true; } return result; }, /** * The uid of this event * @type {String} */ get uid() { return this._firstProp("uid"); }, set uid(value) { this._setProp("uid", value); }, /** * The start date * @type {ICAL.Time} */ get startDate() { return this._firstProp("dtstart"); }, set startDate(value) { this._setTime("dtstart", value); }, /** * The end date. This can be the result directly from the property, or the * end date calculated from start date and duration. Setting the property * will remove any duration properties. * @type {ICAL.Time} */ get endDate() { var endDate = this._firstProp("dtend"); if (!endDate) { var duration = this._firstProp("duration"); endDate = this.startDate.clone(); if (duration) { endDate.addDuration(duration); } else if (endDate.isDate) { endDate.day += 1; } } return endDate; }, set endDate(value) { if (this.component.hasProperty("duration")) { this.component.removeProperty("duration"); } this._setTime("dtend", value); }, /** * The duration. This can be the result directly from the property, or the * duration calculated from start date and end date. Setting the property * will remove any `dtend` properties. * @type {ICAL.Duration} */ get duration() { var duration = this._firstProp("duration"); if (!duration) { return this.endDate.subtractDateTz(this.startDate); } return duration; }, set duration(value) { if (this.component.hasProperty("dtend")) { this.component.removeProperty("dtend"); } this._setProp("duration", value); }, /** * The location of the event. * @type {String} */ get location() { return this._firstProp("location"); }, set location(value) { return this._setProp("location", value); }, /** * The attendees in the event * @type {ICAL.Property[]} * @readonly */ get attendees() { return this.component.getAllProperties("attendee"); }, /** * The event summary * @type {String} */ get summary() { return this._firstProp("summary"); }, set summary(value) { this._setProp("summary", value); }, /** * The event description. * @type {String} */ get description() { return this._firstProp("description"); }, set description(value) { this._setProp("description", value); }, /** * The organizer value as an uri. In most cases this is a mailto: uri, but * it can also be something else, like urn:uuid:... * @type {String} */ get organizer() { return this._firstProp("organizer"); }, set organizer(value) { this._setProp("organizer", value); }, /** * The sequence value for this event. Used for scheduling * see {@tutorial terminology}. * @type {Number} */ get sequence() { return this._firstProp("sequence"); }, set sequence(value) { this._setProp("sequence", value); }, /** * The recurrence id for this event. See {@tutorial terminology} for details. * @type {ICAL.Time} */ get recurrenceId() { return this._firstProp("recurrence-id"); }, set recurrenceId(value) { this._setTime("recurrence-id", value); }, /** * Set/update a time property's value. * This will also update the TZID of the property. * * TODO: this method handles the case where we are switching * from a known timezone to an implied timezone (one without TZID). * This does _not_ handle the case of moving between a known * (by TimezoneService) timezone to an unknown timezone... * * We will not add/remove/update the VTIMEZONE subcomponents * leading to invalid ICAL data... * @private * @param {String} propName The property name * @param {ICAL.Time} time The time to set */ _setTime: function(propName, time) { var prop = this.component.getFirstProperty(propName); if (!prop) { prop = new ICAL.Property(propName); this.component.addProperty(prop); } if (time.zone === ICAL.Timezone.localTimezone || time.zone === ICAL.Timezone.utcTimezone) { prop.removeParameter("tzid"); } else { prop.setParameter("tzid", time.zone.tzid); } prop.setValue(time); }, _setProp: function(name, value) { this.component.updatePropertyWithValue(name, value); }, _firstProp: function(name) { return this.component.getFirstPropertyValue(name); }, /** * The string representation of this event. * @return {String} */ toString: function() { return this.component.toString(); } }; function compareRangeException(a2, b) { if (a2[0] > b[0]) return 1; if (b[0] > a2[0]) return -1; return 0; } return Event; }(); ICAL.ComponentParser = function() { function ComponentParser(options) { if (typeof options === "undefined") { options = {}; } var key; for (key in options) { if (options.hasOwnProperty(key)) { this[key] = options[key]; } } } ComponentParser.prototype = { /** * When true, parse events * * @type {Boolean} */ parseEvent: true, /** * When true, parse timezones * * @type {Boolean} */ parseTimezone: true, /* SAX like events here for reference */ /** * Fired when parsing is complete * @callback */ oncomplete: ( /* istanbul ignore next */ function() { } ), /** * Fired if an error occurs during parsing. * * @callback * @param {Error} err details of error */ onerror: ( /* istanbul ignore next */ function(err) { } ), /** * Fired when a top level component (VTIMEZONE) is found * * @callback * @param {ICAL.Timezone} component Timezone object */ ontimezone: ( /* istanbul ignore next */ function(component) { } ), /** * Fired when a top level component (VEVENT) is found. * * @callback * @param {ICAL.Event} component Top level component */ onevent: ( /* istanbul ignore next */ function(component) { } ), /** * Process a string or parse ical object. This function itself will return * nothing but will start the parsing process. * * Events must be registered prior to calling this method. * * @param {ICAL.Component|String|Object} ical The component to process, * either in its final form, as a jCal Object, or string representation */ process: function(ical) { if (typeof ical === "string") { ical = ICAL.parse(ical); } if (!(ical instanceof ICAL.Component)) { ical = new ICAL.Component(ical); } var components = ical.getAllSubcomponents(); var i = 0; var len = components.length; var component; for (; i < len; i++) { component = components[i]; switch (component.name) { case "vtimezone": if (this.parseTimezone) { var tzid = component.getFirstPropertyValue("tzid"); if (tzid) { this.ontimezone(new ICAL.Timezone({ tzid, component })); } } break; case "vevent": if (this.parseEvent) { this.onevent(new ICAL.Event(component)); } break; default: continue; } } this.oncomplete(); } }; return ComponentParser; }(); } }); // node_modules/ical-expander/zones-compiled.json var require_zones_compiled = __commonJS({ "node_modules/ical-expander/zones-compiled.json"(exports2, module2) { module2.exports = { "Africa/Abidjan": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Accra": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Addis_Ababa": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:EAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Algiers": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Asmara": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:EAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Bamako": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Bangui": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:WAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Banjul": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Bissau": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Blantyre": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:CAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Brazzaville": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:WAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Bujumbura": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:CAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Cairo": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Casablanca": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:+00\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:+01\r\nDTSTART:20180325T020000\r\nRDATE:20180325T020000\r\nRDATE:20180617T020000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:+00\r\nDTSTART:20180513T030000\r\nRDATE:20180513T030000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:+01\r\nDTSTART:20190609T020000\r\nRDATE:20190609T020000\r\nRDATE:20200531T020000\r\nRDATE:20210516T020000\r\nRDATE:20220508T020000\r\nRDATE:20230430T020000\r\nRDATE:20240414T020000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:+01\r\nDTSTART:20181028T030000\r\nRDATE:20181028T030000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:+00\r\nDTSTART:20190505T030000\r\nRDATE:20190505T030000\r\nRDATE:20200419T030000\r\nRDATE:20210411T030000\r\nRDATE:20220327T030000\r\nRDATE:20230319T030000\r\nRDATE:20240310T030000\r\nEND:DAYLIGHT", "Africa/Ceuta": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Africa/Conakry": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Dakar": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Dar_es_Salaam": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:EAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Djibouti": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:EAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Douala": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:WAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/El_Aaiun": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0100\r\nTZOFFSETTO:+0000\r\nTZNAME:+00\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:+01\r\nDTSTART:20180325T020000\r\nRDATE:20180325T020000\r\nRDATE:20180617T020000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:+00\r\nDTSTART:20180513T030000\r\nRDATE:20180513T030000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:+01\r\nDTSTART:20181028T030000\r\nRDATE:20181028T030000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:+00\r\nDTSTART:20190505T030000\r\nRDATE:20190505T030000\r\nRDATE:20200419T030000\r\nRDATE:20210411T030000\r\nRDATE:20220327T030000\r\nRDATE:20230319T030000\r\nRDATE:20240310T030000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:+01\r\nDTSTART:20190609T020000\r\nRDATE:20190609T020000\r\nRDATE:20200531T020000\r\nRDATE:20210516T020000\r\nRDATE:20220508T020000\r\nRDATE:20230430T020000\r\nRDATE:20240414T020000\r\nEND:STANDARD", "Africa/Freetown": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Gaborone": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:CAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Harare": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:CAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Johannesburg": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:SAST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Juba": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:EAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Kampala": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:EAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Khartoum": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:CAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Kigali": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:CAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Kinshasa": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:WAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Lagos": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:WAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Libreville": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:WAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Lome": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Luanda": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:WAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Lubumbashi": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:CAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Lusaka": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:CAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Malabo": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:WAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Maputo": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:CAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Maseru": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:SAST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Mbabane": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:SAST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Mogadishu": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:EAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Monrovia": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Nairobi": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:EAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Ndjamena": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:WAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Niamey": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:WAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Nouakchott": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Ouagadougou": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Porto-Novo": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:WAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Sao_Tome": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:WAT\r\nDTSTART:20180101T010000\r\nRDATE:20180101T010000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:20190101T020000\r\nRDATE:20190101T020000\r\nEND:STANDARD", "Africa/Tripoli": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Tunis": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Windhoek": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:CAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Adak": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-1000\r\nTZOFFSETTO:-0900\r\nTZNAME:HDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-1000\r\nTZNAME:HST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Anchorage": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0800\r\nTZNAME:AKDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nTZNAME:AKST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Anguilla": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Antigua": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Araguaina": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Argentina/Buenos_Aires": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Argentina/Catamarca": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Argentina/Cordoba": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Argentina/Jujuy": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Argentina/La_Rioja": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Argentina/Mendoza": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Argentina/Rio_Gallegos": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Argentina/Salta": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Argentina/San_Juan": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Argentina/San_Luis": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Argentina/Tucuman": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Argentina/Ushuaia": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Aruba": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Asuncion": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19701004T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700322T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SU\r\nEND:STANDARD", "America/Atikokan": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Bahia": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Bahia_Banderas": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700405T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT", "America/Barbados": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Belem": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Belize": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Blanc-Sablon": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Boa_Vista": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Bogota": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nTZNAME:-05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Boise": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nTZNAME:MDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Cambridge_Bay": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nTZNAME:MDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Campo_Grande": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:20181104T000000\r\nRDATE:20181104T000000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:20180218T000000\r\nRDATE:20180218T000000\r\nRDATE:20190217T000000\r\nEND:STANDARD", "America/Cancun": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Caracas": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Cayenne": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Cayman": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Chicago": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Chihuahua": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nTZNAME:MDT\r\nDTSTART:19700405T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "America/Costa_Rica": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Creston": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Cuiaba": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:20181104T000000\r\nRDATE:20181104T000000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:20180218T000000\r\nRDATE:20180218T000000\r\nRDATE:20190217T000000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Curacao": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Danmarkshavn": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Dawson": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nTZNAME:PDT\r\nDTSTART:20180311T020000\r\nRDATE:20180311T020000\r\nRDATE:20190310T020000\r\nRDATE:20200308T020000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:20181104T020000\r\nRDATE:20181104T020000\r\nRDATE:20191103T020000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:20201101T000000\r\nRDATE:20201101T000000\r\nEND:STANDARD", "America/Dawson_Creek": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Denver": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nTZNAME:MDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Detroit": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Dominica": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Edmonton": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nTZNAME:MDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Eirunepe": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nTZNAME:-05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/El_Salvador": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Fort_Nelson": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Fortaleza": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Glace_Bay": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:ADT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Goose_Bay": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:ADT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT", "America/Grand_Turk": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:20181104T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:20190310T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:20180311T020000\r\nRDATE:20180311T020000\r\nEND:DAYLIGHT", "America/Grenada": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Guadeloupe": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Guatemala": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Guayaquil": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nTZNAME:-05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Guyana": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Halifax": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:ADT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Havana": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:CST\r\nDTSTART:19701101T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:CDT\r\nDTSTART:19700308T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT", "America/Hermosillo": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Indiana/Indianapolis": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Indiana/Knox": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Indiana/Marengo": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Indiana/Petersburg": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Indiana/Tell_City": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Indiana/Vevay": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Indiana/Vincennes": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Indiana/Winamac": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT", "America/Inuvik": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nTZNAME:MDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Iqaluit": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Jamaica": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Juneau": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0800\r\nTZNAME:AKDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nTZNAME:AKST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Kentucky/Louisville": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Kentucky/Monticello": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Kralendijk": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/La_Paz": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Lima": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nTZNAME:-05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Los_Angeles": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nTZNAME:PDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Lower_Princes": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Maceio": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Managua": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Manaus": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Marigot": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Martinique": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Matamoros": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Mazatlan": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nTZNAME:MDT\r\nDTSTART:19700405T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "America/Menominee": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Merida": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700405T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "America/Metlakatla": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0800\r\nTZNAME:AKDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nTZNAME:AKST\r\nDTSTART:20191103T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:20181104T020000\r\nRDATE:20181104T020000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nTZNAME:AKST\r\nDTSTART:20190120T020000\r\nRDATE:20190120T020000\r\nEND:STANDARD", "America/Mexico_City": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700405T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "America/Miquelon": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0200\r\nTZNAME:-02\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Moncton": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:ADT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Monterrey": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700405T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "America/Montevideo": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Montserrat": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Nassau": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/New_York": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Nipigon": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Nome": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0800\r\nTZNAME:AKDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nTZNAME:AKST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Noronha": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0200\r\nTZNAME:-02\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/North_Dakota/Beulah": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/North_Dakota/Center": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/North_Dakota/New_Salem": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Nuuk": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0200\r\nTZNAME:-02\r\nDTSTART:19700328T220000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19701024T230000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\r\nEND:STANDARD", "America/Ojinaga": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nTZNAME:MDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Panama": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Pangnirtung": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Paramaribo": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Phoenix": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Port-au-Prince": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Port_of_Spain": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Porto_Velho": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Puerto_Rico": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Punta_Arenas": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Rainy_River": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Rankin_Inlet": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Recife": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Regina": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Resolute": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT", "America/Rio_Branco": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nTZNAME:-05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Santarem": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Santiago": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:20190407T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:20190908T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:20180812T000000\r\nRDATE:20180812T000000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:20180513T000000\r\nRDATE:20180513T000000\r\nEND:STANDARD", "America/Santo_Domingo": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Sao_Paulo": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0200\r\nTZNAME:-02\r\nDTSTART:20181104T000000\r\nRDATE:20181104T000000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:20180218T000000\r\nRDATE:20180218T000000\r\nRDATE:20190217T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0200\r\nTZNAME:-02\r\nDTSTART:19700101T000000\r\nEND:DAYLIGHT", "America/Scoresbysund": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0100\r\nTZOFFSETTO:+0000\r\nTZNAME:+00\r\nDTSTART:19700329T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:-0100\r\nTZNAME:-01\r\nDTSTART:19701025T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "America/Sitka": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0800\r\nTZNAME:AKDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nTZNAME:AKST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/St_Barthelemy": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/St_Johns": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0230\r\nTZOFFSETTO:-0330\r\nTZNAME:NST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0330\r\nTZOFFSETTO:-0230\r\nTZNAME:NDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT", "America/St_Kitts": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/St_Lucia": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/St_Thomas": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/St_Vincent": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Swift_Current": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Tegucigalpa": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Thule": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:ADT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Thunder_Bay": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Tijuana": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nTZNAME:PDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Toronto": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Tortola": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Vancouver": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nTZNAME:PDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Whitehorse": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nTZNAME:PDT\r\nDTSTART:20180311T020000\r\nRDATE:20180311T020000\r\nRDATE:20190310T020000\r\nRDATE:20200308T020000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:20181104T020000\r\nRDATE:20181104T020000\r\nRDATE:20191103T020000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:20201101T000000\r\nRDATE:20201101T000000\r\nEND:STANDARD", "America/Winnipeg": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Yakutat": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0800\r\nTZNAME:AKDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nTZNAME:AKST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Yellowknife": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nTZNAME:MDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "Antarctica/Casey": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0800\r\nTZNAME:+08\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:20181007T040000\r\nRDATE:20181007T040000\r\nRDATE:20191004T030000\r\nRDATE:20201004T000100\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+0800\r\nTZNAME:+08\r\nDTSTART:20180311T040000\r\nRDATE:20180311T040000\r\nRDATE:20190317T030000\r\nRDATE:20200308T030000\r\nEND:STANDARD", "Antarctica/Davis": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Antarctica/DumontDUrville": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nTZNAME:+10\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Antarctica/Macquarie": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1000\r\nTZNAME:AEST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1100\r\nTZNAME:AEDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT", "Antarctica/Mawson": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Antarctica/McMurdo": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19700927T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD", "Antarctica/Palmer": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Antarctica/Rothera": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Antarctica/Syowa": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Antarctica/Troll": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0200\r\nTZNAME:+02\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0000\r\nTZNAME:+00\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Antarctica/Vostok": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nTZNAME:+06\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Arctic/Longyearbyen": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Asia/Aden": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Almaty": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nTZNAME:+06\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Amman": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700326T235959\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1TH\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701030T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\r\nEND:STANDARD", "Asia/Anadyr": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Aqtau": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Aqtobe": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Ashgabat": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Atyrau": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Baghdad": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Bahrain": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Baku": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Bangkok": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Barnaul": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Beirut": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Asia/Bishkek": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nTZNAME:+06\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Brunei": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:+08\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Chita": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nTZNAME:+09\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Choibalsan": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:+08\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Colombo": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0530\r\nTZOFFSETTO:+0530\r\nTZNAME:+0530\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Damascus": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701030T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700327T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR\r\nEND:DAYLIGHT", "Asia/Dhaka": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nTZNAME:+06\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Dili": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nTZNAME:+09\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Dubai": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Dushanbe": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Famagusta": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:20180325T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT", "Asia/Gaza": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:20200328T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:20201024T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:20180324T010000\r\nRDATE:20180324T010000\r\nRDATE:20190329T000000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:20181027T010000\r\nRDATE:20181027T010000\r\nRDATE:20191026T000000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Hebron": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:20200328T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:20201024T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:20180324T010000\r\nRDATE:20180324T010000\r\nRDATE:20190329T000000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:20181027T010000\r\nRDATE:20181027T010000\r\nRDATE:20191026T000000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Ho_Chi_Minh": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Hong_Kong": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:HKT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Hovd": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Irkutsk": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:+08\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Istanbul": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Jakarta": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:WIB\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Jayapura": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nTZNAME:WIT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Jerusalem": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:IDT\r\nDTSTART:19700327T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=FR\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:IST\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Asia/Kabul": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0430\r\nTZOFFSETTO:+0430\r\nTZNAME:+0430\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Kamchatka": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Karachi": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:PKT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Kathmandu": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0545\r\nTZOFFSETTO:+0545\r\nTZNAME:+0545\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Khandyga": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nTZNAME:+09\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Kolkata": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0530\r\nTZOFFSETTO:+0530\r\nTZNAME:IST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Krasnoyarsk": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Kuala_Lumpur": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:+08\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Kuching": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:+08\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Kuwait": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Macau": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Magadan": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Makassar": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:WITA\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Manila": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:PST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Muscat": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Nicosia": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT", "Asia/Novokuznetsk": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Novosibirsk": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Omsk": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nTZNAME:+06\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Oral": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Phnom_Penh": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Pontianak": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:WIB\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Pyongyang": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0830\r\nTZNAME:KST\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0830\r\nTZOFFSETTO:+0900\r\nTZNAME:KST\r\nDTSTART:20180504T233000\r\nRDATE:20180504T233000\r\nEND:STANDARD", "Asia/Qatar": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Qostanay": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nTZNAME:+06\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Qyzylorda": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nTZNAME:+06\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:20181221T000000\r\nRDATE:20181221T000000\r\nEND:STANDARD", "Asia/Riyadh": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Sakhalin": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Samarkand": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Seoul": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nTZNAME:KST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Shanghai": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Singapore": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:+08\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Srednekolymsk": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Taipei": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Tashkent": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Tbilisi": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Tehran": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0330\r\nTZNAME:+0330\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0330\r\nTZOFFSETTO:+0430\r\nTZNAME:+0430\r\nDTSTART:20180321T235959\r\nRDATE:20180321T235959\r\nRDATE:20190321T235959\r\nRDATE:20200320T235959\r\nRDATE:20210321T235959\r\nRDATE:20220321T235959\r\nRDATE:20230321T235959\r\nRDATE:20240320T235959\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0430\r\nTZOFFSETTO:+0330\r\nTZNAME:+0330\r\nDTSTART:20180921T235959\r\nRDATE:20180921T235959\r\nRDATE:20190921T235959\r\nRDATE:20200920T235959\r\nRDATE:20210921T235959\r\nRDATE:20220921T235959\r\nRDATE:20230921T235959\r\nRDATE:20240920T235959\r\nEND:STANDARD", "Asia/Thimphu": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nTZNAME:+06\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Tokyo": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nTZNAME:JST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Tomsk": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Ulaanbaatar": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:+08\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Urumqi": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nTZNAME:+06\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Ust-Nera": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nTZNAME:+10\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Vientiane": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Vladivostok": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nTZNAME:+10\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Yakutsk": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nTZNAME:+09\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Yangon": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0630\r\nTZOFFSETTO:+0630\r\nTZNAME:+0630\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Yekaterinburg": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Yerevan": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Atlantic/Azores": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0100\r\nTZOFFSETTO:+0000\r\nTZNAME:+00\r\nDTSTART:19700329T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:-0100\r\nTZNAME:-01\r\nDTSTART:19701025T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Atlantic/Bermuda": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:ADT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "Atlantic/Canary": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:WEST\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:WET\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Atlantic/Cape_Verde": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0100\r\nTZOFFSETTO:-0100\r\nTZNAME:-01\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Atlantic/Faroe": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:WEST\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:WET\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Atlantic/Madeira": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:WEST\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:WET\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Atlantic/Reykjavik": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Atlantic/South_Georgia": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0200\r\nTZNAME:-02\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Atlantic/St_Helena": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Atlantic/Stanley": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Australia/Adelaide": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1030\r\nTZOFFSETTO:+0930\r\nTZNAME:ACST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0930\r\nTZOFFSETTO:+1030\r\nTZNAME:ACDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT", "Australia/Brisbane": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nTZNAME:AEST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Australia/Broken_Hill": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1030\r\nTZOFFSETTO:+0930\r\nTZNAME:ACST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0930\r\nTZOFFSETTO:+1030\r\nTZNAME:ACDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT", "Australia/Currie": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1100\r\nTZNAME:AEDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1000\r\nTZNAME:AEST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD", "Australia/Darwin": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0930\r\nTZOFFSETTO:+0930\r\nTZNAME:ACST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Australia/Eucla": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0845\r\nTZOFFSETTO:+0845\r\nTZNAME:+0845\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Australia/Hobart": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1100\r\nTZNAME:AEDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1000\r\nTZNAME:AEST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD", "Australia/Lindeman": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nTZNAME:AEST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Australia/Lord_Howe": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1030\r\nTZNAME:+1030\r\nDTSTART:19700405T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1030\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT", "Australia/Melbourne": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1000\r\nTZNAME:AEST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1100\r\nTZNAME:AEDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT", "Australia/Perth": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:AWST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Australia/Sydney": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1000\r\nTZNAME:AEST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1100\r\nTZNAME:AEDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT", "Europe/Amsterdam": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Andorra": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Astrakhan": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Europe/Athens": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Belgrade": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Berlin": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Bratislava": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Brussels": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Bucharest": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Budapest": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Busingen": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Chisinau": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Copenhagen": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Dublin": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:IST\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:DAYLIGHT", "Europe/Gibraltar": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Guernsey": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:BST\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Helsinki": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Isle_of_Man": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:BST\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Istanbul": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Europe/Jersey": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:BST\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Kaliningrad": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Europe/Kiev": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Kirov": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Europe/Lisbon": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:WET\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:WEST\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT", "Europe/Ljubljana": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/London": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:BST\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Luxembourg": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Madrid": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Malta": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Mariehamn": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Minsk": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Europe/Monaco": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Moscow": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:MSK\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Europe/Nicosia": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT", "Europe/Oslo": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Paris": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Podgorica": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Prague": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Riga": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Rome": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Samara": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Europe/San_Marino": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Sarajevo": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Saratov": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Europe/Simferopol": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:MSK\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Europe/Skopje": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Sofia": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Stockholm": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Tallinn": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Tirane": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Ulyanovsk": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Europe/Uzhgorod": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Vaduz": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Vatican": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Vienna": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Vilnius": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Volgograd": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:20181028T020000\r\nRDATE:20181028T020000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Europe/Warsaw": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Zagreb": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Zaporozhye": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Europe/Zurich": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Indian/Antananarivo": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:EAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Indian/Chagos": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nTZNAME:+06\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Indian/Christmas": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Indian/Cocos": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0630\r\nTZOFFSETTO:+0630\r\nTZNAME:+0630\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Indian/Comoro": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:EAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Indian/Kerguelen": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Indian/Mahe": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Indian/Maldives": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Indian/Mauritius": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Indian/Mayotte": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:EAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Indian/Reunion": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Apia": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1400\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:19700405T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1400\r\nTZNAME:+14\r\nDTSTART:19700927T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\r\nEND:DAYLIGHT", "Pacific/Auckland": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19700927T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD", "Pacific/Bougainville": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Chatham": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1245\r\nTZOFFSETTO:+1345\r\nTZNAME:+1345\r\nDTSTART:19700927T024500\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1345\r\nTZOFFSETTO:+1245\r\nTZNAME:+1245\r\nDTSTART:19700405T034500\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD", "Pacific/Chuuk": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nTZNAME:+10\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Easter": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:-06\r\nDTSTART:20190406T220000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SA\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:-05\r\nDTSTART:20190907T220000\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SA\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nTZNAME:-06\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:-05\r\nDTSTART:20180811T220000\r\nRDATE:20180811T220000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:-06\r\nDTSTART:20180512T220000\r\nRDATE:20180512T220000\r\nEND:STANDARD", "Pacific/Efate": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Enderbury": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Fakaofo": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Fiji": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:19700118T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=12,13,14,15,16,17,18;BYDAY=SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:20211114T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:20181104T020000\r\nRDATE:20181104T020000\r\nRDATE:20191110T020000\r\nRDATE:20201220T020000\r\nEND:DAYLIGHT", "Pacific/Funafuti": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Galapagos": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nTZNAME:-06\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Gambier": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0900\r\nTZNAME:-09\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Guadalcanal": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Guam": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nTZNAME:ChST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Honolulu": "BEGIN:STANDARD\r\nTZOFFSETFROM:-1000\r\nTZOFFSETTO:-1000\r\nTZNAME:HST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Kiritimati": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1400\r\nTZOFFSETTO:+1400\r\nTZNAME:+14\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Kosrae": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Kwajalein": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Majuro": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Marquesas": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0930\r\nTZOFFSETTO:-0930\r\nTZNAME:-0930\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Midway": "BEGIN:STANDARD\r\nTZOFFSETFROM:-1100\r\nTZOFFSETTO:-1100\r\nTZNAME:SST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Nauru": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Niue": "BEGIN:STANDARD\r\nTZOFFSETFROM:-1100\r\nTZOFFSETTO:-1100\r\nTZNAME:-11\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Norfolk": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:20191006T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:20200405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1130\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:20190701T000000\r\nRDATE:20190701T000000\r\nEND:STANDARD", "Pacific/Noumea": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Pago_Pago": "BEGIN:STANDARD\r\nTZOFFSETFROM:-1100\r\nTZOFFSETTO:-1100\r\nTZNAME:SST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Palau": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nTZNAME:+09\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Pitcairn": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0800\r\nTZNAME:-08\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Pohnpei": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Port_Moresby": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nTZNAME:+10\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Rarotonga": "BEGIN:STANDARD\r\nTZOFFSETFROM:-1000\r\nTZOFFSETTO:-1000\r\nTZNAME:-10\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Saipan": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nTZNAME:ChST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Tahiti": "BEGIN:STANDARD\r\nTZOFFSETFROM:-1000\r\nTZOFFSETTO:-1000\r\nTZNAME:-10\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Tarawa": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Tongatapu": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Wake": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific/Wallis": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "AUS Central Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0930\r\nTZOFFSETTO:+0930\r\nTZNAME:ACST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "AUS Eastern Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1000\r\nTZNAME:AEST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1100\r\nTZNAME:AEDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT", "Afghanistan Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0430\r\nTZOFFSETTO:+0430\r\nTZNAME:+0430\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Asmera": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:EAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Africa/Timbuktu": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Alaskan Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0800\r\nTZNAME:AKDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nTZNAME:AKST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Argentina/ComodRivadavia": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Buenos_Aires": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "America/Godthab": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0200\r\nTZNAME:-02\r\nDTSTART:19700328T220000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19701024T230000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\r\nEND:STANDARD", "America/Louisville": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Montreal": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "America/Santa_Isabel": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nTZNAME:PDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "Arab Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Arabian Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Arabic Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Argentina Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Calcutta": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0530\r\nTZOFFSETTO:+0530\r\nTZNAME:IST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Katmandu": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0545\r\nTZOFFSETTO:+0545\r\nTZNAME:+0545\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Rangoon": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0630\r\nTZOFFSETTO:+0630\r\nTZNAME:+0630\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Asia/Saigon": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Atlantic Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:ADT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:AST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "Atlantic/Faeroe": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:WEST\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:WET\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Atlantic/Jan_Mayen": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Azerbaijan Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Azores Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0100\r\nTZOFFSETTO:+0000\r\nTZNAME:+00\r\nDTSTART:19700329T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:-0100\r\nTZNAME:-01\r\nDTSTART:19701025T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Bahia Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Bangladesh Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nTZNAME:+06\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Belarus Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Canada Central Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Cape Verde Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0100\r\nTZOFFSETTO:-0100\r\nTZNAME:-01\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Caucasus Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Cen. Australia Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1030\r\nTZOFFSETTO:+0930\r\nTZNAME:ACST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0930\r\nTZOFFSETTO:+1030\r\nTZNAME:ACDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT", "Central America Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Central Asia Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nTZNAME:+06\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Central Brazilian Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:20181104T000000\r\nRDATE:20181104T000000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:20180218T000000\r\nRDATE:20180218T000000\r\nRDATE:20190217T000000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Central Europe Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Central European Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Central Pacific Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Central Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "Central Standard Time (Mexico)": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700405T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "China Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "E. Africa Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:EAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "E. Australia Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nTZNAME:AEST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "E. South America Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0200\r\nTZNAME:-02\r\nDTSTART:20181104T000000\r\nRDATE:20181104T000000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:20180218T000000\r\nRDATE:20180218T000000\r\nRDATE:20190217T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0200\r\nTZNAME:-02\r\nDTSTART:19700101T000000\r\nEND:DAYLIGHT", "Eastern Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "Egypt Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Ekaterinburg Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Europe/Belfast": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:BST\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "FLE Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Fiji Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:19700118T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=12,13,14,15,16,17,18;BYDAY=SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:20211114T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:20181104T020000\r\nRDATE:20181104T020000\r\nRDATE:20191110T020000\r\nRDATE:20201220T020000\r\nEND:DAYLIGHT", "GMT Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:BST\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "GTB Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Georgian Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Greenwich Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:GMT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Hawaiian Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-1000\r\nTZOFFSETTO:-1000\r\nTZNAME:HST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Iran Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0330\r\nTZNAME:+0330\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0330\r\nTZOFFSETTO:+0430\r\nTZNAME:+0430\r\nDTSTART:20180321T235959\r\nRDATE:20180321T235959\r\nRDATE:20190321T235959\r\nRDATE:20200320T235959\r\nRDATE:20210321T235959\r\nRDATE:20220321T235959\r\nRDATE:20230321T235959\r\nRDATE:20240320T235959\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0430\r\nTZOFFSETTO:+0330\r\nTZNAME:+0330\r\nDTSTART:20180921T235959\r\nRDATE:20180921T235959\r\nRDATE:20190921T235959\r\nRDATE:20200920T235959\r\nRDATE:20210921T235959\r\nRDATE:20220921T235959\r\nRDATE:20230921T235959\r\nRDATE:20240920T235959\r\nEND:STANDARD", "Israel Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:IDT\r\nDTSTART:19700327T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=FR\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:IST\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Jordan Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700326T235959\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1TH\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701030T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\r\nEND:STANDARD", "Kaliningrad Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Korea Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nTZNAME:KST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Libya Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Line Islands Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1400\r\nTZOFFSETTO:+1400\r\nTZNAME:+14\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Magadan Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Mauritius Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Middle East Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700329T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701025T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Montevideo Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Morocco Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nTZNAME:+00\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:+01\r\nDTSTART:20180325T020000\r\nRDATE:20180325T020000\r\nRDATE:20180617T020000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:+00\r\nDTSTART:20180513T030000\r\nRDATE:20180513T030000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nTZNAME:+01\r\nDTSTART:20190609T020000\r\nRDATE:20190609T020000\r\nRDATE:20200531T020000\r\nRDATE:20210516T020000\r\nRDATE:20220508T020000\r\nRDATE:20230430T020000\r\nRDATE:20240414T020000\r\nEND:STANDARD\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:+01\r\nDTSTART:20181028T030000\r\nRDATE:20181028T030000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nTZNAME:+00\r\nDTSTART:20190505T030000\r\nRDATE:20190505T030000\r\nRDATE:20200419T030000\r\nRDATE:20210411T030000\r\nRDATE:20220327T030000\r\nRDATE:20230319T030000\r\nRDATE:20240310T030000\r\nEND:DAYLIGHT", "Mountain Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nTZNAME:MDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "Mountain Standard Time (Mexico)": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nTZNAME:MDT\r\nDTSTART:19700405T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "N. Central Asia Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Namibia Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:CAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "New Zealand Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nTZNAME:NZDT\r\nDTSTART:19700927T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nTZNAME:NZST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD", "Newfoundland Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0230\r\nTZOFFSETTO:-0330\r\nTZNAME:NST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0330\r\nTZOFFSETTO:-0230\r\nTZNAME:NDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT", "North Asia East Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:+08\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "North Asia Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pacific SA Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:20190407T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:20190908T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700101T000000\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:20180812T000000\r\nRDATE:20180812T000000\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:20180513T000000\r\nRDATE:20180513T000000\r\nEND:STANDARD", "Pacific Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nTZNAME:PDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "Pacific/Johnston": "BEGIN:STANDARD\r\nTZOFFSETFROM:-1000\r\nTZOFFSETTO:-1000\r\nTZNAME:HST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Pakistan Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:PKT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Paraguay Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19701004T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700322T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SU\r\nEND:STANDARD", "Romance Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "Russia Time Zone 10": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nTZNAME:+11\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Russia Time Zone 11": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nTZNAME:+12\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Russia Time Zone 3": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nTZNAME:+04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Russian Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:MSK\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "SA Eastern Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nTZNAME:-03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "SA Pacific Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nTZNAME:-05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "SA Western Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "SE Asia Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nTZNAME:+07\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Samoa Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1400\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:19700405T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1400\r\nTZNAME:+14\r\nDTSTART:19700927T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\r\nEND:DAYLIGHT", "Singapore Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:+08\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "South Africa Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nTZNAME:SAST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Sri Lanka Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0530\r\nTZOFFSETTO:+0530\r\nTZNAME:+0530\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Syria Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nTZNAME:EET\r\nDTSTART:19701030T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nTZNAME:EEST\r\nDTSTART:19700327T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR\r\nEND:DAYLIGHT", "Taipei Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:CST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Tasmania Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1100\r\nTZNAME:AEDT\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1000\r\nTZNAME:AEST\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD", "Tokyo Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nTZNAME:JST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Tonga Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1300\r\nTZNAME:+13\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Turkey Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nTZNAME:+03\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "US Eastern Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "US Mountain Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "US/Central": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nTZNAME:CDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nTZNAME:CST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "US/Eastern": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "US/Mountain": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nTZNAME:MDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nTZNAME:MST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "US/Pacific": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nTZNAME:PDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "US/Pacific-New": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nTZNAME:PDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nTZNAME:PST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD", "Ulaanbaatar Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:+08\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Venezuela Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nTZNAME:-04\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Vladivostok Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nTZNAME:+10\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "W. Australia Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nTZNAME:AWST\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "W. Central Africa Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nTZNAME:WAT\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "W. Europe Standard Time": "BEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD", "West Asia Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nTZNAME:+05\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "West Pacific Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nTZNAME:+10\r\nDTSTART:19700101T000000\r\nEND:STANDARD", "Yakutsk Standard Time": "BEGIN:STANDARD\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nTZNAME:+09\r\nDTSTART:19700101T000000\r\nEND:STANDARD" }; } }); // node_modules/ical-expander/index.js var require_ical_expander = __commonJS({ "node_modules/ical-expander/index.js"(exports2, module2) { "use strict"; var ICAL2 = require_ical(); var timezones = require_zones_compiled(); var IcalExpander = class { constructor(opts) { this.maxIterations = opts.maxIterations != null ? opts.maxIterations : 1e3; this.skipInvalidDates = opts.skipInvalidDates != null ? opts.skipInvalidDates : false; this.jCalData = ICAL2.parse(opts.ics); this.component = new ICAL2.Component(this.jCalData); this.events = this.component.getAllSubcomponents("vevent").map((vevent) => new ICAL2.Event(vevent)); if (this.skipInvalidDates) { this.events = this.events.filter((evt) => { try { evt.startDate.toJSDate(); evt.endDate.toJSDate(); return true; } catch (err) { return false; } }); } } between(after, before) { function isEventWithinRange(startTime, endTime) { return (!after || endTime >= after.getTime()) && (!before || startTime <= before.getTime()); } function getTimes(eventOrOccurrence) { const startTime = eventOrOccurrence.startDate.toJSDate().getTime(); let endTime = eventOrOccurrence.endDate.toJSDate().getTime(); if (eventOrOccurrence.endDate.isDate && endTime > startTime) { endTime -= 1; } return { startTime, endTime }; } const exceptions = []; this.events.forEach((event) => { if (event.isRecurrenceException()) exceptions.push(event); }); const ret = { events: [], occurrences: [] }; this.events.filter((e2) => !e2.isRecurrenceException()).forEach((event) => { const exdates = []; event.component.getAllProperties("exdate").forEach((exdateProp) => { const exdate = exdateProp.getFirstValue(); exdates.push(exdate.toJSDate().getTime()); }); if (event.isRecurring()) { const iterator = event.iterator(); let next; let i = 0; do { i += 1; next = iterator.next(); if (next) { const occurrence = event.getOccurrenceDetails(next); const { startTime: startTime2, endTime: endTime2 } = getTimes(occurrence); const isOccurrenceExcluded = exdates.indexOf(startTime2) !== -1; const exception = exceptions.find((ex) => ex.uid === event.uid && ex.recurrenceId.toJSDate().getTime() === occurrence.startDate.toJSDate().getTime()); if (before && startTime2 > before.getTime()) break; if (isEventWithinRange(startTime2, endTime2)) { if (exception) { ret.events.push(exception); } else if (!isOccurrenceExcluded) { ret.occurrences.push(occurrence); } } } } while (next && (!this.maxIterations || i < this.maxIterations)); return; } const { startTime, endTime } = getTimes(event); if (isEventWithinRange(startTime, endTime)) ret.events.push(event); }); return ret; } before(before) { return this.between(void 0, before); } after(after) { return this.between(after); } all() { return this.between(); } }; function registerTimezones() { Object.keys(timezones).forEach((key) => { const icsData = timezones[key]; const icsTimezone = `BEGIN:VTIMEZONE\r TZID:${key}\r ${icsData}\r END:VTIMEZONE`; const parsed = ICAL2.parse(`BEGIN:VCALENDAR PRODID:-//tzurl.org//NONSGML Olson 2012h//EN VERSION:2.0 ${icsTimezone} END:VCALENDAR`); const comp = new ICAL2.Component(parsed); const vtimezone = comp.getFirstSubcomponent("vtimezone"); ICAL2.TimezoneService.register(key, new ICAL2.Timezone(vtimezone)); }); } registerTimezones(); module2.exports = IcalExpander; } }); // node_modules/mml-react/dist/mml-react.cjs.production.min.js var require_mml_react_cjs_production_min = __commonJS({ "node_modules/mml-react/dist/mml-react.cjs.production.min.js"(exports2) { "use strict"; function e2(e3) { return e3 && "object" == typeof e3 && "default" in e3 ? e3.default : e3; } Object.defineProperty(exports2, "__esModule", { value: true }); var t2 = require("react"); var r = e2(t2); var n = e2(require_src()); var a2 = e2(require("dayjs")); var i = require("@braintree/sanitize-url"); var o2 = e2(require_react_markdown()); var l = require("linkifyjs"); var c = e2(require_ical_expander()); var s2 = require("react-virtuoso"); var u2 = e2(require("dayjs/plugin/isBetween")); function m(e3, t3, r2, n2, a3, i2, o3) { try { var l2 = e3[i2](o3), c2 = l2.value; } catch (e4) { return void r2(e4); } l2.done ? t3(c2) : Promise.resolve(c2).then(n2, a3); } function d(e3) { return function() { var t3 = this, r2 = arguments; return new Promise(function(n2, a3) { var i2 = e3.apply(t3, r2); function o3(e4) { m(i2, n2, a3, o3, l2, "next", e4); } function l2(e4) { m(i2, n2, a3, o3, l2, "throw", e4); } o3(void 0); }); }; } function f() { return (f = Object.assign || function(e3) { for (var t3 = 1; t3 < arguments.length; t3++) { var r2 = arguments[t3]; for (var n2 in r2) Object.prototype.hasOwnProperty.call(r2, n2) && (e3[n2] = r2[n2]); } return e3; }).apply(this, arguments); } var v; var h2 = (function(e3) { var t3 = function(e4) { var t4 = Object.prototype, r2 = t4.hasOwnProperty, n2 = "function" == typeof Symbol ? Symbol : {}, a3 = n2.iterator || "@@iterator", i2 = n2.asyncIterator || "@@asyncIterator", o3 = n2.toStringTag || "@@toStringTag"; function l2(e5, t5, r3) { return Object.defineProperty(e5, t5, { value: r3, enumerable: true, configurable: true, writable: true }), e5[t5]; } try { l2({}, ""); } catch (e5) { l2 = function(e6, t5, r3) { return e6[t5] = r3; }; } function c2(e5, t5, r3, n3) { var a4 = Object.create((t5 && t5.prototype instanceof m2 ? t5 : m2).prototype), i3 = new k2(n3 || []); return a4._invoke = /* @__PURE__ */ function(e6, t6, r4) { var n4 = "suspendedStart"; return function(a5, i4) { if ("executing" === n4) throw new Error("Generator is already running"); if ("completed" === n4) { if ("throw" === a5) throw i4; return { value: void 0, done: true }; } for (r4.method = a5, r4.arg = i4; ; ) { var o4 = r4.delegate; if (o4) { var l3 = E2(o4, r4); if (l3) { if (l3 === u3) continue; return l3; } } if ("next" === r4.method) r4.sent = r4._sent = r4.arg; else if ("throw" === r4.method) { if ("suspendedStart" === n4) throw n4 = "completed", r4.arg; r4.dispatchException(r4.arg); } else "return" === r4.method && r4.abrupt("return", r4.arg); n4 = "executing"; var c3 = s3(e6, t6, r4); if ("normal" === c3.type) { if (n4 = r4.done ? "completed" : "suspendedYield", c3.arg === u3) continue; return { value: c3.arg, done: r4.done }; } "throw" === c3.type && (n4 = "completed", r4.method = "throw", r4.arg = c3.arg); } }; }(e5, r3, i3), a4; } function s3(e5, t5, r3) { try { return { type: "normal", arg: e5.call(t5, r3) }; } catch (e6) { return { type: "throw", arg: e6 }; } } e4.wrap = c2; var u3 = {}; function m2() { } function d2() { } function f2() { } var v2 = {}; v2[a3] = function() { return this; }; var h3 = Object.getPrototypeOf, p2 = h3 && h3(h3(N2([]))); p2 && p2 !== t4 && r2.call(p2, a3) && (v2 = p2); var g2 = f2.prototype = m2.prototype = Object.create(v2); function y2(e5) { ["next", "throw", "return"].forEach(function(t5) { l2(e5, t5, function(e6) { return this._invoke(t5, e6); }); }); } function b2(e5, t5) { var n3; this._invoke = function(a4, i3) { function o4() { return new t5(function(n4, o5) { !function n5(a5, i4, o6, l3) { var c3 = s3(e5[a5], e5, i4); if ("throw" !== c3.type) { var u4 = c3.arg, m3 = u4.value; return m3 && "object" == typeof m3 && r2.call(m3, "__await") ? t5.resolve(m3.__await).then(function(e6) { n5("next", e6, o6, l3); }, function(e6) { n5("throw", e6, o6, l3); }) : t5.resolve(m3).then(function(e6) { u4.value = e6, o6(u4); }, function(e6) { return n5("throw", e6, o6, l3); }); } l3(c3.arg); }(a4, i3, n4, o5); }); } return n3 = n3 ? n3.then(o4, o4) : o4(); }; } function E2(e5, t5) { var r3 = e5.iterator[t5.method]; if (void 0 === r3) { if (t5.delegate = null, "throw" === t5.method) { if (e5.iterator.return && (t5.method = "return", t5.arg = void 0, E2(e5, t5), "throw" === t5.method)) return u3; t5.method = "throw", t5.arg = new TypeError("The iterator does not provide a 'throw' method"); } return u3; } var n3 = s3(r3, e5.iterator, t5.arg); if ("throw" === n3.type) return t5.method = "throw", t5.arg = n3.arg, t5.delegate = null, u3; var a4 = n3.arg; return a4 ? a4.done ? (t5[e5.resultName] = a4.value, t5.next = e5.nextLoc, "return" !== t5.method && (t5.method = "next", t5.arg = void 0), t5.delegate = null, u3) : a4 : (t5.method = "throw", t5.arg = new TypeError("iterator result is not an object"), t5.delegate = null, u3); } function x2(e5) { var t5 = { tryLoc: e5[0] }; 1 in e5 && (t5.catchLoc = e5[1]), 2 in e5 && (t5.finallyLoc = e5[2], t5.afterLoc = e5[3]), this.tryEntries.push(t5); } function w2(e5) { var t5 = e5.completion || {}; t5.type = "normal", delete t5.arg, e5.completion = t5; } function k2(e5) { this.tryEntries = [{ tryLoc: "root" }], e5.forEach(x2, this), this.reset(true); } function N2(e5) { if (e5) { var t5 = e5[a3]; if (t5) return t5.call(e5); if ("function" == typeof e5.next) return e5; if (!isNaN(e5.length)) { var n3 = -1, i3 = function t6() { for (; ++n3 < e5.length; ) if (r2.call(e5, n3)) return t6.value = e5[n3], t6.done = false, t6; return t6.value = void 0, t6.done = true, t6; }; return i3.next = i3; } } return { next: _2 }; } function _2() { return { value: void 0, done: true }; } return d2.prototype = g2.constructor = f2, f2.constructor = d2, d2.displayName = l2(f2, o3, "GeneratorFunction"), e4.isGeneratorFunction = function(e5) { var t5 = "function" == typeof e5 && e5.constructor; return !!t5 && (t5 === d2 || "GeneratorFunction" === (t5.displayName || t5.name)); }, e4.mark = function(e5) { return Object.setPrototypeOf ? Object.setPrototypeOf(e5, f2) : (e5.__proto__ = f2, l2(e5, o3, "GeneratorFunction")), e5.prototype = Object.create(g2), e5; }, e4.awrap = function(e5) { return { __await: e5 }; }, y2(b2.prototype), b2.prototype[i2] = function() { return this; }, e4.AsyncIterator = b2, e4.async = function(t5, r3, n3, a4, i3) { void 0 === i3 && (i3 = Promise); var o4 = new b2(c2(t5, r3, n3, a4), i3); return e4.isGeneratorFunction(r3) ? o4 : o4.next().then(function(e5) { return e5.done ? e5.value : o4.next(); }); }, y2(g2), l2(g2, o3, "Generator"), g2[a3] = function() { return this; }, g2.toString = function() { return "[object Generator]"; }, e4.keys = function(e5) { var t5 = []; for (var r3 in e5) t5.push(r3); return t5.reverse(), function r4() { for (; t5.length; ) { var n3 = t5.pop(); if (n3 in e5) return r4.value = n3, r4.done = false, r4; } return r4.done = true, r4; }; }, e4.values = N2, k2.prototype = { constructor: k2, reset: function(e5) { if (this.prev = 0, this.next = 0, this.sent = this._sent = void 0, this.done = false, this.delegate = null, this.method = "next", this.arg = void 0, this.tryEntries.forEach(w2), !e5) for (var t5 in this) "t" === t5.charAt(0) && r2.call(this, t5) && !isNaN(+t5.slice(1)) && (this[t5] = void 0); }, stop: function() { this.done = true; var e5 = this.tryEntries[0].completion; if ("throw" === e5.type) throw e5.arg; return this.rval; }, dispatchException: function(e5) { if (this.done) throw e5; var t5 = this; function n3(r3, n4) { return o4.type = "throw", o4.arg = e5, t5.next = r3, n4 && (t5.method = "next", t5.arg = void 0), !!n4; } for (var a4 = this.tryEntries.length - 1; a4 >= 0; --a4) { var i3 = this.tryEntries[a4], o4 = i3.completion; if ("root" === i3.tryLoc) return n3("end"); if (i3.tryLoc <= this.prev) { var l3 = r2.call(i3, "catchLoc"), c3 = r2.call(i3, "finallyLoc"); if (l3 && c3) { if (this.prev < i3.catchLoc) return n3(i3.catchLoc, true); if (this.prev < i3.finallyLoc) return n3(i3.finallyLoc); } else if (l3) { if (this.prev < i3.catchLoc) return n3(i3.catchLoc, true); } else { if (!c3) throw new Error("try statement without catch or finally"); if (this.prev < i3.finallyLoc) return n3(i3.finallyLoc); } } } }, abrupt: function(e5, t5) { for (var n3 = this.tryEntries.length - 1; n3 >= 0; --n3) { var a4 = this.tryEntries[n3]; if (a4.tryLoc <= this.prev && r2.call(a4, "finallyLoc") && this.prev < a4.finallyLoc) { var i3 = a4; break; } } i3 && ("break" === e5 || "continue" === e5) && i3.tryLoc <= t5 && t5 <= i3.finallyLoc && (i3 = null); var o4 = i3 ? i3.completion : {}; return o4.type = e5, o4.arg = t5, i3 ? (this.method = "next", this.next = i3.finallyLoc, u3) : this.complete(o4); }, complete: function(e5, t5) { if ("throw" === e5.type) throw e5.arg; return "break" === e5.type || "continue" === e5.type ? this.next = e5.arg : "return" === e5.type ? (this.rval = this.arg = e5.arg, this.method = "return", this.next = "end") : "normal" === e5.type && t5 && (this.next = t5), u3; }, finish: function(e5) { for (var t5 = this.tryEntries.length - 1; t5 >= 0; --t5) { var r3 = this.tryEntries[t5]; if (r3.finallyLoc === e5) return this.complete(r3.completion, r3.afterLoc), w2(r3), u3; } }, catch: function(e5) { for (var t5 = this.tryEntries.length - 1; t5 >= 0; --t5) { var r3 = this.tryEntries[t5]; if (r3.tryLoc === e5) { var n3 = r3.completion; if ("throw" === n3.type) { var a4 = n3.arg; w2(r3); } return a4; } } throw new Error("illegal catch attempt"); }, delegateYield: function(e5, t5, r3) { return this.delegate = { iterator: N2(e5), resultName: t5, nextLoc: r3 }, "next" === this.method && (this.arg = void 0), u3; } }, e4; }(e3.exports); try { regeneratorRuntime = t3; } catch (e4) { Function("r", "regeneratorRuntime = r")(t3); } }(v = { exports: {} }), v.exports); var p = function() { function e3(e4, t4, r2) { this.name = e4, this.node = t4, this.attributes = this.node.attributes || {}, this.children = r2; } var t3 = e3.prototype; return t3.getText = function() { return "text" === this.node.type ? this.node.text : this.node.children && this.node.children.length ? this.node.children[0].text : ""; }, t3.initialState = function() { var e4, t4 = this.attributes, r2 = t4.name; return r2 ? ((e4 = {})[r2] = t4.value, e4) : {}; }, e3; }(); var g = function(e3) { var t3 = e3.className; return r.createElement("div", { className: "mml-card " + (void 0 === t3 ? "" : t3) }, e3.children); }; var y = function(e3) { return r.createElement("i", { className: "mml-icon material-icons" }, e3.name); }; var b = function(e3) { var t3 = e3.text, n2 = e3.icon, a3 = void 0 === n2 ? "" : n2, i2 = e3.className; return r.createElement("div", { className: "mml-card-header " + (void 0 === i2 ? "" : i2) }, a3 && r.createElement(y, { name: a3 }), r.createElement("span", { className: "mml-card-header__text" }, t3)); }; var E = function(e3) { var t3 = e3.className; return r.createElement("div", { className: "mml-card-body " + (void 0 === t3 ? "" : t3) }, e3.children); }; var x = function(e3) { var t3 = e3.variant; return r.createElement("div", { className: "mml-btnlist " + ("floating" === (void 0 === t3 ? "" : t3) ? " mml-btnlist--floating" : "mml-btnlist--grounded") }, e3.children); }; var w = function(e3) { return r.createElement("i", { className: "mml-icon" }, r.createElement("svg", { className: "mml-icon__svg", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, r.createElement("path", { d: e3.path }))); }; var k = r.createElement(w, { path: "M21.35 11.1h-9.17v2.73h6.5c-.33 3.8-3.5 5.44-6.5 5.44C8.36 19.27 5 16.25 5 12c0-4.1 3.2-7.27 7.2-7.27 3.1 0 4.9 1.97 4.9 1.97L19 4.72S16.56 2 12.1 2C6.42 2 2.03 6.8 2.03 12c0 5.05 4.13 10 10.22 10 5.35 0 9.25-3.67 9.25-9.1 0-1.15-.15-1.8-.15-1.8h0z" }); var N = r.createElement(w, { path: "M3 12V6.75l6-1.32v6.48L3 12m17-9v8.75l-10 .15V5.2L20 3M3 13l6 .1v6.8l-6-1.15V13m17 .25V22l-10-1.9v-7l10 .15z" }); function _() { var e3 = "undefined" != typeof navigator ? navigator.userAgent : ""; return !!e3 && (!!/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series[46]0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(e3) || "undefined" != typeof navigator && navigator.maxTouchPoints > 1 && -1 !== e3.indexOf("Macintosh") && -1 !== e3.indexOf("Safari")); } var O = "undefined" != typeof window && window.navigator.msSaveOrOpenBlob && window.Blob; var L = [{ id: "google", label: "Google", Icon: k }, { id: "apple", label: "Apple Calendar", Icon: r.createElement(w, { path: "M18.7 19.5c-.83 1.24-1.7 2.45-3.05 2.47-1.34.03-1.77-.8-3.3-.8-1.53 0-2 .77-3.27.82-1.3.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.4c.87-1.52 2.43-2.48 4.12-2.5 1.28-.02 2.5.87 3.3.87.78 0 2.26-1.07 3.8-.9.65.03 2.47.26 3.64 1.98-.1.06-2.17 1.28-2.15 3.8.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.2-.7.85-1.83 1.5-2.95 1.42-.15-1.15.4-2.35 1.05-3.1z" }) }, { id: "outlook", label: "Outlook", Icon: N }, { id: "outlookcom", label: "Outlook.com", Icon: N }]; function I(e3, t3) { return a2(e3).format("outlookcom" === t3 ? "YYYY-MM-DDTHH:mm:ss" : "YYYYMMDDTHHmmss") + "Z"; } function C(e3) { return void 0 === e3 && (e3 = {}), Object.keys(e3).reduce(function(t3, r2) { var n2 = e3[r2]; return n2 && (t3 += "&" + r2 + "=" + encodeURIComponent(n2)), t3; }, ""); } function j(e3, t3) { var r2 = e3.end, n2 = e3.title, a3 = e3.location, i2 = e3.description, o3 = I(e3.start, t3), l2 = I(r2, t3); if ("google" === t3) return "https://calendar.google.com/calendar/render?action=TEMPLATE&dates=" + o3 + "/" + l2 + C({ location: a3, text: n2, details: i2 }); if ("outlookcom" === t3) return "https://outlook.live.com/owa/?rru=addevent" + C({ startdt: o3, enddt: l2, subject: n2, location: a3, body: i2, allday: "false" }) + "&path=/calendar/view/Month"; var c2 = ["BEGIN:VCALENDAR", "VERSION:2.0", "BEGIN:VEVENT", "URL:" + ("undefined" != typeof window ? window.location.href : ""), "DTSTART:" + o3, "DTEND:" + l2, "SUMMARY:" + n2, "DESCRIPTION:" + i2, "LOCATION:" + a3, "END:VEVENT", "END:VCALENDAR"].join("\n"); return !O && _() && (c2 = encodeURI("data:text/calendar;charset=utf8," + c2)), c2; } var S = function(e3) { var t3 = e3.className, n2 = e3.location, a3 = e3.description, i2 = { start: e3.start, end: e3.end, title: e3.title, location: void 0 === n2 ? "" : n2, description: void 0 === a3 ? "" : a3 }; function o3(e4) { e4.preventDefault(); var t4 = e4.currentTarget.getAttribute("href"); if (_() || !t4.startsWith("data") && !t4.startsWith("BEGIN")) window.open(t4, "_blank"); else { var r2 = new Blob([t4], { type: "text/calendar;charset=utf-8" }); if (O) window.navigator.msSaveOrOpenBlob(r2, "download.ics"); else { var n3 = document.createElement("a"); n3.href = window.URL.createObjectURL(r2), n3.setAttribute("download", "download.ics"), document.body.appendChild(n3), n3.click(), document.body.removeChild(n3); } } } return r.createElement(g, { className: "mml-add-to-calendar " + (void 0 === t3 ? "" : t3) }, r.createElement(b, { icon: "date_range", text: "Add to My Calendar" }), r.createElement(E, null, r.createElement(x, null, L.map(function(e4) { var t4 = e4.id, n3 = e4.label, a4 = e4.Icon; return r.createElement("a", { key: t4, className: "mml-btn " + (a4 ? "mml-btn--with-icon" : ""), onClick: o3, href: j(i2, t4), target: "_blank", rel: "nofollow noreferrer noopener" }, a4, " ", n3); })))); }; var T = function(e3) { var t3 = e3.className, n2 = void 0 === t3 ? "" : t3, a3 = e3.text, o3 = e3.name, l2 = e3.value, c2 = e3.url, s3 = void 0 === c2 ? "" : c2, u3 = e3.icon; return n2 += u3 ? a3 ? " mml-btn--with-icon" : " mml-btn--icon" : " mml-btn--text", n2 += "floating" === e3.variant ? " mml-btn--floating" : " mml-btn--grounded", s3 ? r.createElement("a", { className: "mml-btn " + n2, href: i.sanitizeUrl(s3), target: "_blank", rel: "nofollow noreferrer noopener" }, u3 && r.createElement(y, { name: u3 }), a3) : r.createElement("button", { className: "mml-btn " + n2, type: "submit", name: o3, value: l2, onClick: function(e4) { var t4, r2, n3 = document.createElement("input"); n3.type = "hidden", n3.name = o3 || "", n3.value = l2 || "", null == (t4 = e4.currentTarget) || null == (r2 = t4.closest("form")) || r2.appendChild(n3); } }, u3 && r.createElement(y, { name: u3 }), a3); }; var M = function(e3) { var n2 = e3.slideWidth, a3 = void 0 === n2 ? "120px" : n2, i2 = e3.className; return r.createElement("div", { className: "mml-carousel " + (void 0 === i2 ? "" : i2) }, r.createElement("div", { className: "mml-carousel__track" }, r.createElement("div", { className: "mml-carousel__slides" }, t2.Children.map(e3.children, function(e4) { return t2.cloneElement(e4, { className: "mml-carousel__slide", slideWidth: a3 }); })))); }; var D = function(e3) { var t3 = e3.width, n2 = e3.className, a3 = (void 0 === t3 ? "" : t3) || e3.slideWidth; return r.createElement("div", { className: "mml-carousel-item " + (void 0 === n2 ? "" : n2), style: { flex: "0 0 " + a3, minWidth: a3 } }, e3.children); }; var F = function(e3) { var t3 = e3.width, n2 = e3.offset, a3 = void 0 === n2 ? 0 : n2, i2 = e3.align, o3 = "mml-col-" + (void 0 === t3 ? 12 : t3); return a3 && (o3 = o3 + " mml-offset-" + a3), r.createElement("div", { className: o3 = o3 + " mml-align-" + (void 0 === i2 ? "left" : i2) }, e3.children); }; var A = function(e3) { var t3 = e3.error, n2 = void 0 === t3 ? "" : t3; return n2 ? r.createElement("span", { className: "mml-error" }, n2) : null; }; var R = function(e3) { var t3 = e3.src, n2 = e3.alt, a3 = void 0 === n2 ? "" : n2, i2 = e3.title, o3 = void 0 === i2 ? "" : i2, l2 = e3.className; return r.createElement("img", { className: ("mml-image " + (void 0 === l2 ? "" : l2)).trim(), src: t3, alt: a3, title: o3 }); }; var P = function(e3) { var n2 = e3.name, a3 = e3.label, i2 = e3.value, o3 = e3.type, l2 = void 0 === o3 ? "text" : o3, c2 = e3.placeholder, s3 = void 0 === c2 ? "" : c2, u3 = t2.useState(void 0 === i2 ? "" : i2), m2 = u3[0], d2 = u3[1], f2 = "mml-" + n2; return r.createElement(r.Fragment, null, a3 && r.createElement("label", { className: "mml-card-header", htmlFor: f2 }, r.createElement("span", { className: "mml-card-header__text" }, a3)), r.createElement("input", { id: f2, className: "mml-input", name: n2, value: m2, type: l2, placeholder: s3, onChange: function(e4) { return d2(e4.target.value); } })); }; var V = function(e3) { var t3 = e3.size, n2 = e3.thickness, a3 = void 0 === n2 ? 3.6 : n2, i2 = e3.color; return a3 = "string" == typeof a3 ? parseFloat(a3) : a3, t3 = "string" == typeof t3 && /^\d+$/.test(t3) || "number" == typeof t3 ? t3 + "px" : t3, r.createElement("span", { className: "mml-progress", role: "progressbar", style: { width: t3, height: t3, color: i2 } }, r.createElement("svg", { className: "mml-progress__svg", viewBox: "22 22 44 44" }, r.createElement("circle", { className: "mml-progress__circle", cx: 44, cy: 44, r: (44 - a3) / 2, fill: "none", strokeWidth: a3 }))); }; var B = function(e3) { var t3 = e3.className, n2 = e3.loading, a3 = e3.text; return void 0 !== n2 && n2 ? r.createElement("div", { className: "mml-loading " + (void 0 === t3 ? "" : t3) }, r.createElement(V, Object.assign({}, { size: e3.size, thickness: e3.thickness, color: e3.color })), a3 && r.createElement("div", { className: "mml-loading__text" }, a3)) : null; }; var G = function(e3, t3, r2) { return void 0 === r2 && (r2 = "..."), e3.length > t3 ? "" + e3.substring(0, t3 - r2.length) + r2 : e3; }; var W = { link: function(e3) { return e3.href && (e3.href.startsWith("http") || e3.href.startsWith("mailto:")) ? r.createElement("a", { href: e3.href, target: "_blank", rel: "nofollow noreferrer noopener" }, e3.children) : e3.children; } }; var q = ["html", "root", "text", "break", "paragraph", "emphasis", "strong", "link", "list", "listItem", "code", "inlineCode", "blockquote"]; var Y = function(e3) { var t3 = e3.text; if (!t3) return null; var n2, a3, i2 = t3, c2 = (n2 = i2.match(/\[([^[]+)\](\(.*\))/gm), a3 = /\[([^[]+)\]\((.*)\)/, n2 ? n2.map(function(e4) { var t4 = a3.exec(e4); return t4 && t4[2]; }) : []); return l.find(i2).forEach(function(e4) { var t4 = e4.type, r2 = e4.href, n3 = e4.value; if (!((c2 && c2.filter(function(e5) { return -1 !== (null == e5 ? void 0 : e5.indexOf(r2)); })).length > 0)) { var a4 = "email" === t4 ? n3 : G(n3.replace(/(http(s?):\/\/)?(www\.)?/, ""), 20); i2 = i2.replace(n3, "[" + a4 + "](" + encodeURI(r2) + ")"); } }), r.createElement("div", { className: "mml-md" }, r.createElement(o2, { allowedTypes: q, renderers: W, source: i2, escapeHtml: true, unwrapDisallowed: true, transformLinkUri: function(e4) { return e4.startsWith("app://") ? e4 : o2.uriTransformer(e4); } })); }; var z = function(e3) { var n2 = e3.name, a3 = t2.useState(parseInt("" + e3.value, 10) || 0), i2 = a3[0], o3 = a3[1]; return r.createElement("div", { className: "mml-number" }, r.createElement("input", { name: n2, value: i2, type: "hidden" }), r.createElement("span", { className: "mml-btn mml-btn--floating mml-btn--icon mml-number__dec", onClick: function() { return o3(i2 - 1); } }, r.createElement(y, { name: "remove" })), r.createElement("span", { className: "mml-number__count" }, i2), r.createElement("span", { className: "mml-btn mml-btn--floating mml-btn--icon mml-number__inc", onClick: function() { return o3(i2 + 1); } }, r.createElement(y, { name: "add" }))); }; var U = function(e3) { return r.createElement("div", { className: "mml-row" }, e3.children); }; var H = function(e3) { var n2 = e3.onChange, a3 = e3.icalFilter, i2 = e3.getItemData, o3 = e3.itemClassName, l2 = e3.interval, c2 = e3.format, u3 = e3.value, m2 = t2.useCallback(function(e4, t3) { return Array(e4).fill(true).map(function(e5, r2) { return i2({ interval: l2, format: c2, value: u3, idx: t3 + r2 }); }).filter(function(e5) { return !a3 || a3 && a3(e5.value); }); }, [l2, c2, u3, a3, i2]), d2 = t2.useState(m2(80, -40)), f2 = d2[0], v2 = d2[1], h3 = t2.useState(1e4), p2 = h3[0], g2 = h3[1], y2 = t2.useRef(40), b2 = t2.useState(null), E2 = b2[0], x2 = b2[1], w2 = t2.useCallback(function(e4) { n2(e4.value); var t3 = y2.current || 0, r2 = t3 - 40 - 40, a4 = r2 - e4.idx + 3; a4 >= 0 && (r2 -= a4, y2.current -= t3 - a4, v2(function(e5) { return [].concat(m2(a4, r2), e5); })), x2(e4.idx); }, [v2, m2, y2, n2]), k2 = t2.useCallback(function(e4) { v2(function(t3) { return [].concat(t3, m2(40, e4)); }); }, [v2, m2]), N2 = t2.useCallback(function() { var e4 = y2.current || 0, t3 = e4 - 40 - 40; return y2 && (y2.current -= 40), v2(function(e5) { return [].concat(m2(40, t3), e5); }), g2(e4 - 40), false; }, [v2, m2, y2]); return t2.useEffect(function() { if (u3) { for (var e4 = null, t3 = 0; t3 < f2.length; t3++) if (f2[t3].isSelected(u3)) { e4 = f2[t3].idx; break; } x2(e4); } }, []), r.createElement(s2.Virtuoso, { data: f2, firstItemIndex: p2, itemContent: function(e4, t3) { return r.createElement("div", { className: o3 + " mml-datepicker__item " + (t3.idx === E2 ? "mml-datepicker__item--selected" : ""), onClick: function() { return w2(t3); } }, t3.displayValue); }, endReached: k2, startReached: N2 }); }; var X = function(e3) { var t3 = e3.idx, r2 = e3.interval, n2 = e3.value, i2 = e3.format, o3 = t3 >= 0 ? a2(n2).add(t3 * (24 * r2), "hour") : a2(n2).subtract(t3 * (24 * r2) * -1, "hour"); return { idx: t3, value: o3, displayValue: a2(o3).format(i2), isSelected: function(e4) { return a2(o3).isSame(1 === r2 ? a2(e4) : a2(e4).add(r2, "day"), "date"); } }; }; var Z = function(e3) { return r.createElement("div", { className: "mml-datepicker__select mml-datepicker__date" }, r.createElement(H, Object.assign({}, e3, { itemClassName: "mml-datepicker__item--day", getItemData: X }))); }; a2.extend(u2); var $ = function(e3) { var t3 = e3.idx, r2 = e3.interval, n2 = e3.value, i2 = e3.format, o3 = t3 >= 0 ? a2(n2).add(t3 * r2, "minute") : a2(n2).subtract(-1 * t3 * r2, "minute"); return { idx: t3, value: o3, displayValue: a2(o3).format(i2), isSelected: function(e4) { return a2(o3).isBetween(e4, a2(e4).add(r2 - 1, "minute"), "minute", "[]"); } }; }; var J = function(e3) { return r.createElement("div", { className: "mml-datepicker__select mml-datepicker__time" }, r.createElement(H, Object.assign({}, e3, { itemClassName: "mml-datepicker__item--time", getItemData: $ }))); }; var K = function(e3) { var n2 = e3.name, a3 = e3.dateInterval, i2 = e3.timeInterval, o3 = e3.dateFormat, l2 = e3.timeFormat, c2 = e3.fullDay, s3 = e3.icalFilter, u3 = t2.useState(e3.selected), m2 = u3[0], d2 = u3[1]; return r.createElement("div", { className: "mml-datepicker mml-datepicker--" + (c2 ? "single" : "double") }, r.createElement("input", { name: n2, value: m2.toISOString(), type: "hidden" }), r.createElement(Z, { icalFilter: s3, format: o3, value: m2, onChange: function(e4) { d2(function(t3) { return t3.set("date", e4.get("date")).set("month", e4.get("month")).set("year", e4.get("year")); }); }, interval: a3 }), !c2 && r.createElement(J, { icalFilter: s3, format: l2, value: m2, onChange: function(e4) { d2(function(t3) { return t3.set("minute", e4.get("minute")).set("hour", e4.get("hour")); }); }, interval: i2 })); }; var Q = function() { var e3 = d(h2.mark(function e4(t3, r2) { var n2, a3, i2; return h2.wrap(function(e5) { for (; ; ) switch (e5.prev = e5.next) { case 0: return e5.next = 2, fetch(t3, { method: "GET", redirect: "follow", credentials: "same-origin" }); case 2: return n2 = e5.sent, e5.next = 5, n2.text(); case 5: if (a3 = e5.sent, n2.ok) { e5.next = 8; break; } throw new Error(a3); case 8: return i2 = new c({ ics: a3, maxIterations: 10 }), e5.abrupt("return", function() { return function(e6) { return !e6 || !i2.between(e6.toDate(), e6.add(r2, "minute").toDate()).events.length; }; }); case 10: case "end": return e5.stop(); } }, e4); })); return function(t3, r2) { return e3.apply(this, arguments); }; }(); var ee = function(e3) { var n2 = e3.name, i2 = e3.selected, o3 = e3.icalAvailability, l2 = e3.duration, c2 = void 0 === l2 ? 30 : l2, s3 = e3.dateInterval, u3 = void 0 === s3 ? 1 : s3, m2 = e3.timeInterval, d2 = void 0 === m2 ? 30 : m2, f2 = e3.dateFormat, v2 = void 0 === f2 ? "ddd MMM DD" : f2, h3 = e3.timeFormat, p2 = void 0 === h3 ? "hh:mm A" : h3, y2 = e3.fullDay, x2 = void 0 !== y2 && y2, w2 = t2.useState(false), k2 = w2[0], N2 = w2[1], _2 = t2.useState(""), O2 = _2[0], L2 = _2[1], I2 = t2.useState(function() { return function() { return true; }; }), C2 = I2[0], j2 = I2[1]; return t2.useEffect(function() { o3 && (N2(true), Q(o3, c2).then(j2).catch(function(e4) { console.warn("loading ical failed", { icalAvailability: o3, err: e4 }), L2("iCal availability could not be loaded"); }).finally(function() { return N2(false); })); }, [o3, c2]), r.createElement(g, { className: "mml-scheduler" }, r.createElement(b, { icon: "date_range", text: "Scheduler" }), r.createElement(E, null, O2 && !k2 && r.createElement(A, { error: "Failed, error: " + O2 }), !O2 && k2 && r.createElement(B, { loading: true, text: "Loading availability" }), !O2 && !k2 && r.createElement(K, { name: n2, selected: i2 ? a2(i2) : a2().startOf("hour"), dateInterval: u3, timeInterval: d2, dateFormat: v2, timeFormat: p2, fullDay: x2, icalFilter: C2 }))); }; var te = function(e3) { var t3 = e3.success; return t3 ? r.createElement("div", { className: "mml-success" }, t3) : null; }; var re = function(e3) { var t3 = e3.text, n2 = e3.className; return r.createElement("div", { className: ("mml-text " + (void 0 === n2 ? "" : n2)).trim() }, t3); }; var ne = { button: function(e3) { return r.createElement(T, Object.assign({}, e3.attributes, { key: e3.key, text: e3.getText(), name: e3.attributes.name, value: e3.attributes.value })); }, button_list: function(e3, t3) { return r.createElement(x, Object.assign({}, e3.attributes, { key: e3.key }), t3); }, input: function(e3) { return r.createElement(P, Object.assign({}, e3.attributes, { key: e3.key, name: e3.attributes.name, value: e3.attributes.value })); }, add_to_calendar: function(e3) { return r.createElement(S, Object.assign({}, e3.attributes, { key: e3.key, title: e3.attributes.title, start: e3.attributes.start, end: e3.attributes.end })); }, col: function(e3, t3) { return r.createElement(F, Object.assign({}, e3.attributes, { key: e3.key }), t3); }, row: function(e3, t3) { return r.createElement(U, Object.assign({}, e3.attributes, { key: e3.key }), t3); }, icon: function(e3) { return r.createElement(y, Object.assign({}, e3.attributes, { key: e3.key, name: e3.attributes.name })); }, image: function(e3) { return r.createElement(R, Object.assign({}, e3.attributes, { key: e3.key, src: e3.attributes.src })); }, md: function(e3) { return r.createElement(Y, Object.assign({}, e3.attributes, { key: e3.key, text: e3.getText() })); }, text: function(e3) { return r.createElement(re, Object.assign({}, e3.attributes, { key: e3.key, text: e3.getText() })); }, scheduler: function(e3) { return r.createElement(ee, Object.assign({}, e3.attributes, { key: e3.key, name: e3.attributes.name, dateInterval: parseInt(e3.attributes.dateInterval, 10) || 1, timeInterval: parseInt(e3.attributes.timeInterval, 10) || 30, duration: parseInt(e3.attributes.duration, 10) || 30, selected: e3.attributes.selected, fullDay: "true" === e3.attributes.fullDay, icalAvailability: e3.attributes.icalAvailability })); }, carousel: function(e3, t3) { return r.createElement(M, Object.assign({ slideWidth: e3.attributes.slideWidth }, e3.attributes, { key: e3.key }), t3); }, item: function(e3, t3) { return r.createElement(D, Object.assign({}, e3.attributes, { key: e3.key }), t3); }, number: function(e3) { return r.createElement(z, Object.assign({}, e3.attributes, { key: e3.key, name: e3.attributes.name, value: e3.attributes.value })); } }; var ae = function() { function e3(e4, t3, r2) { this.converters = f({}, ne, r2), this.node = e4, this.children = t3, this.reactElements = this.toReact(), this.name = e4.attributes.name, this.type = e4.attributes.type; } return e3.prototype.toReact = function(e4) { var t3 = this; void 0 === e4 && (e4 = this); var r2 = []; return (e4.children || []).forEach(function(e5, n2) { var a3 = t3.converters[e5.name]; if (!a3 || !Object.hasOwnProperty.call(t3.converters, e5.name)) throw Error("Converter not found for tag " + e5.name + ", Available converters are " + Object.keys(t3.converters)); var i2 = t3.toReact(e5); e5.key = "tag-" + e5.name + "-position-" + n2, r2.push(a3(e5, i2)); }), r2; }, e3; }(); function ie(e3) { var t3 = e3.trim(); return t3.startsWith(""), t3 = t3.replace(/&(?!amp;|lt;|gt;)/g, "&"), n(t3); } function oe(e3, t3) { if (!e3 || !e3.children || !e3.children.length) throw new Error("bad input"); var r2 = e3.children[0]; if ("mml" !== r2.name) throw new Error("missing mml tag"); return new ae(r2, function e4(t4) { return t4.reduce(function(t5, r3) { var n2, a3 = r3; a3.children && (n2 = e4(a3.children)); var i2 = a3.name; if ("text" === r3.type) { if (!r3.text.trim().length) return t5; i2 = "text"; } return t5.push(new p(i2, r3, n2)), t5; }, []); }(r2.children), t3); } function le(e3, t3) { return oe(ie(e3), t3); } exports2.AddToCalendar = S, exports2.Button = T, exports2.ButtonList = x, exports2.Card = g, exports2.CardBody = E, exports2.CardHeader = b, exports2.Carousel = M, exports2.CarouselItem = D, exports2.Col = F, exports2.Error = A, exports2.Icon = y, exports2.Image = R, exports2.Input = P, exports2.Loading = B, exports2.MD = Y, exports2.MML = function(e3) { var n2 = e3.source, a3 = e3.onSubmit, i2 = e3.converters, o3 = e3.theme, l2 = void 0 === o3 ? "" : o3, c2 = e3.className, s3 = void 0 === c2 ? "" : c2, u3 = e3.Loading, m2 = void 0 === u3 ? B : u3, f2 = e3.Error, v2 = void 0 === f2 ? A : f2, p2 = e3.Success, g2 = void 0 === p2 ? te : p2, y2 = t2.useState(""), b2 = y2[0], E2 = y2[1], x2 = t2.useState({ loading: false, error: "", success: "" }), w2 = x2[0], k2 = x2[1], N2 = t2.useMemo(function() { try { return le(n2, i2); } catch (e4) { return console.warn("mml parsing error: ", n2, e4), E2("This chat message has invalid formatting and can't be shown"), null; } }, [n2, i2]), _2 = t2.useCallback(function() { var e4 = d(h2.mark(function e5(t3) { var r2; return h2.wrap(function(e6) { for (; ; ) switch (e6.prev = e6.next) { case 0: if (t3.preventDefault(), r2 = {}, null != N2 && N2.name && (r2.mml_name = N2.name), new FormData(t3.currentTarget).forEach(function(e7, t4) { r2[t4] = e7; }), a3) { e6.next = 6; break; } return e6.abrupt("return", console.warn("Forgot to pass onSubmit prop to ? payload:", r2)); case 6: return e6.prev = 6, k2({ loading: true, error: "", success: "" }), e6.next = 10, a3(r2); case 10: k2({ loading: false, error: "", success: "submitted" }), e6.next = 16; break; case 13: e6.prev = 13, e6.t0 = e6.catch(6), k2({ loading: false, error: "Failed to send the request. Please try again.", success: "" }); case 16: case "end": return e6.stop(); } }, e5, null, [[6, 13]]); })); return function(t3) { return e4.apply(this, arguments); }; }(), [a3, N2]); return r.createElement("div", { className: "mml-container " + l2 + " " + s3, "data-testid": "mml-container" }, b2 ? r.createElement("div", { className: "mml-wrap" }, v2 && r.createElement(v2, { error: b2 })) : r.createElement("form", { onSubmit: _2, className: "mml-wrap", "data-testid": "mml-form" }, null != N2 && N2.type ? r.createElement("div", { className: "mml-card" }, null == N2 ? void 0 : N2.reactElements) : null == N2 ? void 0 : N2.reactElements, w2.loading && m2 && r.createElement(m2, { loading: w2.loading }), w2.success && g2 && r.createElement(g2, { success: w2.success }), w2.error && v2 && r.createElement(v2, { error: w2.error }))); }, exports2.MMLTag = p, exports2.Number = z, exports2.Parse = le, exports2.Row = U, exports2.Scheduler = ee, exports2.SourceToXML = ie, exports2.Success = te, exports2.Text = re, exports2.Tree = ae, exports2.XMLtoMMLTree = oe, exports2.converters = ne, exports2.truncate = G; } }); // node_modules/mml-react/dist/mml-react.cjs.development.js var require_mml_react_cjs_development = __commonJS({ "node_modules/mml-react/dist/mml-react.cjs.development.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); function _interopDefault(ex) { return ex && typeof ex === "object" && "default" in ex ? ex["default"] : ex; } var React204 = require("react"); var React__default = _interopDefault(React204); var parseXml = _interopDefault(require_src()); var dayjs = _interopDefault(require("dayjs")); var sanitizeUrl4 = require("@braintree/sanitize-url"); var ReactMarkdown2 = _interopDefault(require_react_markdown()); var linkify3 = require("linkifyjs"); var IcalExpander = _interopDefault(require_ical_expander()); var reactVirtuoso = require("react-virtuoso"); var isBetween = _interopDefault(require("dayjs/plugin/isBetween")); function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function() { var self2 = this, args = arguments; return new Promise(function(resolve, reject) { var gen = fn.apply(self2, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(void 0); }); }; } function _extends() { _extends = Object.assign || function(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function createCommonjsModule(fn, module3) { return module3 = { exports: {} }, fn(module3, module3.exports), module3.exports; } var runtime_1 = createCommonjsModule(function(module3) { var runtime = function(exports3) { var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; var undefined$1; var $Symbol = typeof Symbol === "function" ? Symbol : {}; var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true }); return obj[key]; } try { define({}, ""); } catch (err) { define = function(obj, key, value) { return obj[key] = value; }; } function wrap3(innerFn, outerFn, self2, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; var generator = Object.create(protoGenerator.prototype); var context = new Context(tryLocsList || []); generator._invoke = makeInvokeMethod(innerFn, self2, context); return generator; } exports3.wrap = wrap3; function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; var ContinueSentinel = {}; function Generator() { } function GeneratorFunction() { } function GeneratorFunctionPrototype() { } var IteratorPrototype = {}; IteratorPrototype[iteratorSymbol] = function() { return this; }; var getProto = Object.getPrototypeOf; var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { IteratorPrototype = NativeIteratorPrototype; } var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; GeneratorFunction.displayName = define( GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction" ); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function(method) { define(prototype, method, function(arg) { return this._invoke(method, arg); }); }); } exports3.isGeneratorFunction = function(genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can // do is to check its .name property. (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; exports3.mark = function(genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; define(genFun, toStringTagSymbol, "GeneratorFunction"); } genFun.prototype = Object.create(Gp); return genFun; }; exports3.awrap = function(arg) { return { __await: arg }; }; function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (record.type === "throw") { reject(record.arg); } else { var result = record.arg; var value = result.value; if (value && typeof value === "object" && hasOwn.call(value, "__await")) { return PromiseImpl.resolve(value.__await).then(function(value2) { invoke("next", value2, resolve, reject); }, function(err) { invoke("throw", err, resolve, reject); }); } return PromiseImpl.resolve(value).then(function(unwrapped) { result.value = unwrapped; resolve(result); }, function(error) { return invoke("throw", error, resolve, reject); }); } } var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function(resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = // If enqueue has been called before, then we want to wait until // all previous Promises have been resolved before calling invoke, // so that results are always delivered in the correct order. If // enqueue has not been called before, then it is important to // call invoke immediately, without waiting on a callback to fire, // so that the async generator function has the opportunity to do // any necessary setup in a predictable way. This predictability // is why the Promise constructor synchronously invokes its // executor callback, and why async functions synchronously // execute code before the first await. Since we implement simple // async functions in terms of async generators, it is especially // important to get this right, even though it requires care. previousPromise ? previousPromise.then( callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later // invocations of the iterator. callInvokeWithMethodAndArg ) : callInvokeWithMethodAndArg(); } this._invoke = enqueue; } defineIteratorMethods(AsyncIterator.prototype); AsyncIterator.prototype[asyncIteratorSymbol] = function() { return this; }; exports3.AsyncIterator = AsyncIterator; exports3.async = function(innerFn, outerFn, self2, tryLocsList, PromiseImpl) { if (PromiseImpl === void 0) PromiseImpl = Promise; var iter = new AsyncIterator( wrap3(innerFn, outerFn, self2, tryLocsList), PromiseImpl ); return exports3.isGeneratorFunction(outerFn) ? iter : iter.next().then(function(result) { return result.done ? result.value : iter.next(); }); }; function makeInvokeMethod(innerFn, self2, context) { var state = GenStateSuspendedStart; return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } if (state === GenStateCompleted) { if (method === "throw") { throw arg; } return doneResult(); } context.method = method; context.arg = arg; while (true) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (context.method === "next") { context.sent = context._sent = context.arg; } else if (context.method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw context.arg; } context.dispatchException(context.arg); } else if (context.method === "return") { context.abrupt("return", context.arg); } state = GenStateExecuting; var record = tryCatch(innerFn, self2, context); if (record.type === "normal") { state = context.done ? GenStateCompleted : GenStateSuspendedYield; if (record.arg === ContinueSentinel) { continue; } return { value: record.arg, done: context.done }; } else if (record.type === "throw") { state = GenStateCompleted; context.method = "throw"; context.arg = record.arg; } } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (method === undefined$1) { context.delegate = null; if (context.method === "throw") { if (delegate.iterator["return"]) { context.method = "return"; context.arg = undefined$1; maybeInvokeDelegate(delegate, context); if (context.method === "throw") { return ContinueSentinel; } } context.method = "throw"; context.arg = new TypeError( "The iterator does not provide a 'throw' method" ); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (record.type === "throw") { context.method = "throw"; context.arg = record.arg; context.delegate = null; return ContinueSentinel; } var info = record.arg; if (!info) { context.method = "throw"; context.arg = new TypeError("iterator result is not an object"); context.delegate = null; return ContinueSentinel; } if (info.done) { context[delegate.resultName] = info.value; context.next = delegate.nextLoc; if (context.method !== "return") { context.method = "next"; context.arg = undefined$1; } } else { return info; } context.delegate = null; return ContinueSentinel; } defineIteratorMethods(Gp); define(Gp, toStringTagSymbol, "Generator"); Gp[iteratorSymbol] = function() { return this; }; Gp.toString = function() { return "[object Generator]"; }; function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; if (1 in locs) { entry.catchLoc = locs[1]; } if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }]; tryLocsList.forEach(pushTryEntry, this); this.reset(true); } exports3.keys = function(object) { var keys2 = []; for (var key in object) { keys2.push(key); } keys2.reverse(); return function next() { while (keys2.length) { var key2 = keys2.pop(); if (key2 in object) { next.value = key2; next.done = false; return next; } } next.done = true; return next; }; }; function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } if (typeof iterable.next === "function") { return iterable; } if (!isNaN(iterable.length)) { var i = -1, next = function next2() { while (++i < iterable.length) { if (hasOwn.call(iterable, i)) { next2.value = iterable[i]; next2.done = false; return next2; } } next2.value = undefined$1; next2.done = true; return next2; }; return next.next = next; } } return { next: doneResult }; } exports3.values = values; function doneResult() { return { value: undefined$1, done: true }; } Context.prototype = { constructor: Context, reset: function(skipTempReset) { this.prev = 0; this.next = 0; this.sent = this._sent = undefined$1; this.done = false; this.delegate = null; this.method = "next"; this.arg = undefined$1; this.tryEntries.forEach(resetTryEntry); if (!skipTempReset) { for (var name in this) { if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { this[name] = undefined$1; } } } }, stop: function() { this.done = true; var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } return this.rval; }, dispatchException: function(exception) { if (this.done) { throw exception; } var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; if (caught) { context.method = "next"; context.arg = undefined$1; } return !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { return handle("end"); } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else { throw new Error("try statement without catch or finally"); } } } }, abrupt: function(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { finallyEntry = null; } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel; } return this.complete(record); }, complete: function(record, afterLoc) { if (record.type === "throw") { throw record.arg; } if (record.type === "break" || record.type === "continue") { this.next = record.arg; } else if (record.type === "return") { this.rval = this.arg = record.arg; this.method = "return"; this.next = "end"; } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } return ContinueSentinel; }, finish: function(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel; } } }, "catch": function(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function(iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName, nextLoc }; if (this.method === "next") { this.arg = undefined$1; } return ContinueSentinel; } }; return exports3; }( // If this script is executing as a CommonJS module, use module.exports // as the regeneratorRuntime namespace. Otherwise create a new empty // object. Either way, the resulting object will be used to initialize // the regeneratorRuntime variable at the top of this file. module3.exports ); try { regeneratorRuntime = runtime; } catch (accidentalStrictMode) { Function("r", "regeneratorRuntime = r")(runtime); } }); function isXmlElement(node2) { return !!node2.children; } var MMLTag = /* @__PURE__ */ function() { function MMLTag2(name, node2, children) { this.name = name; this.node = node2; this.attributes = this.node.attributes || {}; this.children = children; } var _proto = MMLTag2.prototype; _proto.getText = function getText() { if (this.node.type === "text") return this.node.text; else if (isXmlElement(this.node) && this.node.children.length) return this.node.children[0].text; return ""; }; _proto.initialState = function initialState2() { var _ref; var _this$attributes = this.attributes, name = _this$attributes.name, value = _this$attributes.value; if (name) return _ref = {}, _ref[name] = value, _ref; return {}; }; return MMLTag2; }(); var Card2 = function Card3(_ref) { var _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className, children = _ref.children; return React__default.createElement("div", { className: "mml-card " + className }, children); }; var Icon2 = function Icon3(_ref) { var name = _ref.name; return React__default.createElement("i", { className: "mml-icon material-icons" }, name); }; var CardHeader2 = function CardHeader3(_ref) { var text5 = _ref.text, _ref$icon = _ref.icon, icon = _ref$icon === void 0 ? "" : _ref$icon, _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className; return React__default.createElement("div", { className: "mml-card-header " + className }, icon && React__default.createElement(Icon2, { name: icon }), React__default.createElement("span", { className: "mml-card-header__text" }, text5)); }; var CardBody = function CardBody2(_ref) { var _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className, children = _ref.children; return React__default.createElement("div", { className: "mml-card-body " + className }, children); }; var ButtonList = function ButtonList2(_ref) { var children = _ref.children, _ref$variant = _ref.variant, variant = _ref$variant === void 0 ? "" : _ref$variant; return React__default.createElement("div", { className: "mml-btnlist " + (variant === "floating" ? " mml-btnlist--floating" : "mml-btnlist--grounded") }, children); }; var SvgIcon = function SvgIcon2(_ref) { var path2 = _ref.path; return React__default.createElement("i", { className: "mml-icon" }, React__default.createElement("svg", { className: "mml-icon__svg", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, React__default.createElement("path", { d: path2 }))); }; var IconGoogle = /* @__PURE__ */ React__default.createElement(SvgIcon, { path: "M21.35 11.1h-9.17v2.73h6.5c-.33 3.8-3.5 5.44-6.5 5.44C8.36 19.27 5 16.25 5 12c0-4.1 3.2-7.27 7.2-7.27 3.1 0 4.9 1.97 4.9 1.97L19 4.72S16.56 2 12.1 2C6.42 2 2.03 6.8 2.03 12c0 5.05 4.13 10 10.22 10 5.35 0 9.25-3.67 9.25-9.1 0-1.15-.15-1.8-.15-1.8h0z" }); var IconMicrosoft = /* @__PURE__ */ React__default.createElement(SvgIcon, { path: "M3 12V6.75l6-1.32v6.48L3 12m17-9v8.75l-10 .15V5.2L20 3M3 13l6 .1v6.8l-6-1.15V13m17 .25V22l-10-1.9v-7l10 .15z" }); var IconApple = /* @__PURE__ */ React__default.createElement(SvgIcon, { path: "M18.7 19.5c-.83 1.24-1.7 2.45-3.05 2.47-1.34.03-1.77-.8-3.3-.8-1.53 0-2 .77-3.27.82-1.3.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.4c.87-1.52 2.43-2.48 4.12-2.5 1.28-.02 2.5.87 3.3.87.78 0 2.26-1.07 3.8-.9.65.03 2.47.26 3.64 1.98-.1.06-2.17 1.28-2.15 3.8.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.2-.7.85-1.83 1.5-2.95 1.42-.15-1.15.4-2.35 1.05-3.1z" }); function isMobile() { var ua = typeof navigator !== "undefined" ? navigator.userAgent : ""; if (!ua) return false; var mobileRE = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series[46]0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i; if (mobileRE.test(ua)) return true; if (typeof navigator !== "undefined" && navigator.maxTouchPoints > 1 && ua.indexOf("Macintosh") !== -1 && ua.indexOf("Safari") !== -1) return true; return false; } var isIE = typeof window !== "undefined" && window.navigator.msSaveOrOpenBlob && window.Blob; var getCurrentURL = function getCurrentURL2() { if (typeof window !== "undefined") return window.location.href; return ""; }; var CALENDAR_SERVICES = [{ id: "google", label: "Google", Icon: IconGoogle }, { id: "apple", label: "Apple Calendar", Icon: IconApple }, { id: "outlook", label: "Outlook", Icon: IconMicrosoft }, { id: "outlookcom", label: "Outlook.com", Icon: IconMicrosoft }]; function formatTime(date, id) { return dayjs(date).format(id === "outlookcom" ? "YYYY-MM-DDTHH:mm:ss" : "YYYYMMDDTHHmmss") + "Z"; } function createQueryString(params) { if (params === void 0) { params = {}; } return Object.keys(params).reduce(function(acc, key) { var value = params[key]; if (value) acc += "&" + key + "=" + encodeURIComponent(value); return acc; }, ""); } function buildUrl(event, id) { var start = event.start, end = event.end, title = event.title, location = event.location, description = event.description; var startFormatted = formatTime(start, id); var endFormatted = formatTime(end, id); if (id === "google") return "https://calendar.google.com/calendar/render?action=TEMPLATE&dates=" + startFormatted + "/" + endFormatted + createQueryString({ location, text: title, details: description }); if (id === "outlookcom") return "https://outlook.live.com/owa/?rru=addevent" + createQueryString({ startdt: startFormatted, enddt: endFormatted, subject: title, location, body: description, allday: "false" }) + "&path=/calendar/view/Month"; var url = ["BEGIN:VCALENDAR", "VERSION:2.0", "BEGIN:VEVENT", "URL:" + getCurrentURL(), "DTSTART:" + startFormatted, "DTEND:" + endFormatted, "SUMMARY:" + title, "DESCRIPTION:" + description, "LOCATION:" + location, "END:VEVENT", "END:VCALENDAR"].join("\n"); if (!isIE && isMobile()) url = encodeURI("data:text/calendar;charset=utf8," + url); return url; } var AddToCalendar = function AddToCalendar2(_ref2) { var title = _ref2.title, start = _ref2.start, end = _ref2.end, _ref2$className = _ref2.className, className = _ref2$className === void 0 ? "" : _ref2$className, _ref2$location = _ref2.location, location = _ref2$location === void 0 ? "" : _ref2$location, _ref2$description = _ref2.description, description = _ref2$description === void 0 ? "" : _ref2$description; var event = { start, end, title, location, description }; function handleLinkClick(event2) { event2.preventDefault(); var url = event2.currentTarget.getAttribute("href"); if (!isMobile() && (url.startsWith("data") || url.startsWith("BEGIN"))) { var filename = "download.ics"; var blob = new Blob([url], { type: "text/calendar;charset=utf-8" }); if (isIE) { window.navigator.msSaveOrOpenBlob(blob, filename); } else { var link2 = document.createElement("a"); link2.href = window.URL.createObjectURL(blob); link2.setAttribute("download", filename); document.body.appendChild(link2); link2.click(); document.body.removeChild(link2); } } else { window.open(url, "_blank"); } } return React__default.createElement(Card2, { className: "mml-add-to-calendar " + className }, React__default.createElement(CardHeader2, { icon: "date_range", text: "Add to My Calendar" }), React__default.createElement(CardBody, null, React__default.createElement(ButtonList, null, CALENDAR_SERVICES.map(function(_ref3) { var id = _ref3.id, label = _ref3.label, Icon3 = _ref3.Icon; return React__default.createElement("a", { key: id, className: "mml-btn " + (Icon3 ? "mml-btn--with-icon" : ""), onClick: handleLinkClick, href: buildUrl(event, id), target: "_blank", rel: "nofollow noreferrer noopener" }, Icon3, " ", label); })))); }; var Button = function Button2(_ref) { var _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className, text5 = _ref.text, name = _ref.name, value = _ref.value, _ref$url = _ref.url, url = _ref$url === void 0 ? "" : _ref$url, variant = _ref.variant, icon = _ref.icon; if (icon) { className += text5 ? " mml-btn--with-icon" : " mml-btn--icon"; } else { className += " mml-btn--text"; } className += variant === "floating" ? " mml-btn--floating" : " mml-btn--grounded"; if (url) return React__default.createElement("a", { className: "mml-btn " + className, href: sanitizeUrl4.sanitizeUrl(url), target: "_blank", rel: "nofollow noreferrer noopener" }, icon && React__default.createElement(Icon2, { name: icon }), text5); return React__default.createElement("button", { className: "mml-btn " + className, type: "submit", name, value, onClick: function onClick(event) { var _event$currentTarget, _event$currentTarget$; var input = document.createElement("input"); input.type = "hidden"; input.name = name || ""; input.value = value || ""; (_event$currentTarget = event.currentTarget) == null ? void 0 : (_event$currentTarget$ = _event$currentTarget.closest("form")) == null ? void 0 : _event$currentTarget$.appendChild(input); } }, icon && React__default.createElement(Icon2, { name: icon }), text5); }; var Carousel = function Carousel2(_ref) { var children = _ref.children, _ref$slideWidth = _ref.slideWidth, slideWidth = _ref$slideWidth === void 0 ? "120px" : _ref$slideWidth, _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className; return React__default.createElement("div", { className: "mml-carousel " + className }, React__default.createElement("div", { className: "mml-carousel__track" }, React__default.createElement("div", { className: "mml-carousel__slides" }, React204.Children.map(children, function(child) { return React204.cloneElement(child, { className: "mml-carousel__slide", slideWidth }); })))); }; var CarouselItem = function CarouselItem2(_ref) { var children = _ref.children, slideWidth = _ref.slideWidth, _ref$width = _ref.width, width = _ref$width === void 0 ? "" : _ref$width, _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className; var finalWidth = width || slideWidth; return React__default.createElement("div", { className: "mml-carousel-item " + className, style: { flex: "0 0 " + finalWidth, minWidth: finalWidth } }, children); }; var Col = function Col2(_ref) { var children = _ref.children, _ref$width = _ref.width, width = _ref$width === void 0 ? 12 : _ref$width, _ref$offset = _ref.offset, offset = _ref$offset === void 0 ? 0 : _ref$offset, _ref$align = _ref.align, align = _ref$align === void 0 ? "left" : _ref$align; var classNames = "mml-col-" + width; if (offset) classNames = classNames + (" mml-offset-" + offset); classNames = classNames + (" mml-align-" + align); return React__default.createElement("div", { className: classNames }, children); }; var Error$1 = function Error2(_ref) { var _ref$error = _ref.error, error = _ref$error === void 0 ? "" : _ref$error; if (!error) return null; return React__default.createElement("span", { className: "mml-error" }, error); }; var Image2 = function Image3(_ref) { var src = _ref.src, _ref$alt = _ref.alt, alt = _ref$alt === void 0 ? "" : _ref$alt, _ref$title = _ref.title, title = _ref$title === void 0 ? "" : _ref$title, _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className; return React__default.createElement("img", { className: ("mml-image " + className).trim(), src, alt, title }); }; var Input = function Input2(_ref) { var name = _ref.name, label = _ref.label, _ref$value = _ref.value, value = _ref$value === void 0 ? "" : _ref$value, _ref$type = _ref.type, type = _ref$type === void 0 ? "text" : _ref$type, _ref$placeholder = _ref.placeholder, placeholder = _ref$placeholder === void 0 ? "" : _ref$placeholder; var _useState = React204.useState(value), state = _useState[0], setState = _useState[1]; var id = "mml-" + name; return React__default.createElement(React__default.Fragment, null, label && React__default.createElement("label", { className: "mml-card-header", htmlFor: id }, React__default.createElement("span", { className: "mml-card-header__text" }, label)), React__default.createElement("input", { id, className: "mml-input", name, value: state, type, placeholder, onChange: function onChange(event) { return setState(event.target.value); } })); }; var SIZE = 44; var Progress = function Progress2(_ref) { var size = _ref.size, _ref$thickness = _ref.thickness, thickness = _ref$thickness === void 0 ? 3.6 : _ref$thickness, color4 = _ref.color; thickness = typeof thickness === "string" ? parseFloat(thickness) : thickness; size = typeof size === "string" && /^\d+$/.test(size) || typeof size === "number" ? size + "px" : size; return React__default.createElement("span", { className: "mml-progress", role: "progressbar", style: { width: size, height: size, color: color4 } }, React__default.createElement("svg", { className: "mml-progress__svg", viewBox: SIZE / 2 + " " + SIZE / 2 + " " + SIZE + " " + SIZE }, React__default.createElement("circle", { className: "mml-progress__circle", cx: SIZE, cy: SIZE, r: (SIZE - thickness) / 2, fill: "none", strokeWidth: thickness }))); }; var Loading = function Loading2(_ref) { var _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className, _ref$loading = _ref.loading, loading = _ref$loading === void 0 ? false : _ref$loading, text5 = _ref.text, size = _ref.size, thickness = _ref.thickness, color4 = _ref.color; if (!loading) return null; return React__default.createElement("div", { className: "mml-loading " + className }, React__default.createElement(Progress, Object.assign({}, { size, thickness, color: color4 })), text5 && React__default.createElement("div", { className: "mml-loading__text" }, text5)); }; var truncate = function truncate2(input, length, end) { if (end === void 0) { end = "..."; } if (input.length > length) return "" + input.substring(0, length - end.length) + end; return input; }; var matchMarkdownLinks2 = function matchMarkdownLinks3(message) { var regexMdLinks = /\[([^[]+)\](\(.*\))/gm; var matches = message.match(regexMdLinks); var singleMatch = /\[([^[]+)\]\((.*)\)/; var links = matches ? matches.map(function(match) { var i = singleMatch.exec(match); return i && i[2]; }) : []; return links; }; var MDLinkRender = function MDLinkRender2(props) { if (!props.href || !props.href.startsWith("http") && !props.href.startsWith("mailto:")) return props.children; return React__default.createElement("a", { href: props.href, target: "_blank", rel: "nofollow noreferrer noopener" }, props.children); }; var markDownRenderers2 = { link: MDLinkRender }; var allowedMarkups = [ "html", // @ts-ignore "root", "text", "break", "paragraph", "emphasis", "strong", "link", "list", "listItem", "code", "inlineCode", "blockquote" ]; var MD = function MD2(_ref) { var text5 = _ref.text; if (!text5) return null; var newText = text5; var markdownLinks = matchMarkdownLinks2(newText); linkify3.find(newText).forEach(function(_ref2) { var type = _ref2.type, href = _ref2.href, value = _ref2.value; var noParsingNeeded = markdownLinks && markdownLinks.filter(function(text6) { return (text6 == null ? void 0 : text6.indexOf(href)) !== -1; }); if (noParsingNeeded.length > 0) return; var displayLink = type === "email" ? value : truncate(value.replace(/(http(s?):\/\/)?(www\.)?/, ""), 20); newText = newText.replace(value, "[" + displayLink + "](" + encodeURI(href) + ")"); }); return React__default.createElement("div", { className: "mml-md" }, React__default.createElement(ReactMarkdown2, { allowedTypes: allowedMarkups, renderers: markDownRenderers2, source: newText, escapeHtml: true, unwrapDisallowed: true, transformLinkUri: function transformLinkUri(uri) { return uri.startsWith("app://") ? uri : ReactMarkdown2.uriTransformer(uri); } })); }; var Number2 = function Number3(_ref) { var name = _ref.name, value = _ref.value; var _useState = React204.useState(parseInt("" + value, 10) || 0), state = _useState[0], setState = _useState[1]; return React__default.createElement("div", { className: "mml-number" }, React__default.createElement("input", { name, value: state, type: "hidden" }), React__default.createElement("span", { className: "mml-btn mml-btn--floating mml-btn--icon mml-number__dec", onClick: function onClick() { return setState(state - 1); } }, React__default.createElement(Icon2, { name: "remove" })), React__default.createElement("span", { className: "mml-number__count" }, state), React__default.createElement("span", { className: "mml-btn mml-btn--floating mml-btn--icon mml-number__inc", onClick: function onClick() { return setState(state + 1); } }, React__default.createElement(Icon2, { name: "add" }))); }; var Row = function Row2(_ref) { var children = _ref.children; return React__default.createElement("div", { className: "mml-row" }, children); }; var ITEMS_PER_PAGE = 40; var VERTICAL_COMPENSATION = 3; var INITIAL_INDEX = ITEMS_PER_PAGE; var VIRTUOSO_START_INDEX = 1e4; var DatePickerSelect = function DatePickerSelect2(props) { var onChange = props.onChange, icalFilter = props.icalFilter, getItemData2 = props.getItemData, itemClassName = props.itemClassName, interval = props.interval, format = props.format, value = props.value; var generateItems = React204.useCallback(function(quantity, firstIdx) { return Array(quantity).fill(true).map(function(_, idx) { return getItemData2({ interval, format, value, idx: firstIdx + idx }); }).filter(function(newItem) { return !icalFilter || icalFilter && icalFilter(newItem.value); }); }, [interval, format, value, icalFilter, getItemData2]); var _useState = React204.useState(generateItems(ITEMS_PER_PAGE * 2, -ITEMS_PER_PAGE)), items = _useState[0], setItems = _useState[1]; var _useState2 = React204.useState(VIRTUOSO_START_INDEX), firstItemIndex = _useState2[0], setFirstItemIndex = _useState2[1]; var initialIndexOffset = React204.useRef(INITIAL_INDEX); var _useState3 = React204.useState(null), selectedIdx = _useState3[0], setSelectedIdx = _useState3[1]; var handleClick = React204.useCallback(function(item) { onChange(item.value); var firstItemIndex2 = initialIndexOffset.current || 0; var nextFirstItemIdx = firstItemIndex2 - INITIAL_INDEX - ITEMS_PER_PAGE; var missingTopItems = nextFirstItemIdx - item.idx + VERTICAL_COMPENSATION; if (missingTopItems >= 0) { nextFirstItemIdx -= missingTopItems; initialIndexOffset.current -= firstItemIndex2 - missingTopItems; setItems(function(items2) { return [].concat(generateItems(missingTopItems, nextFirstItemIdx), items2); }); } setSelectedIdx(item.idx); }, [setItems, generateItems, initialIndexOffset, onChange]); var appendItems = React204.useCallback(function(lastItemIndex) { setItems(function(items2) { return [].concat(items2, generateItems(ITEMS_PER_PAGE, lastItemIndex)); }); }, [setItems, generateItems]); var prependItems = React204.useCallback(function() { var firstItemIndex2 = initialIndexOffset.current || 0; var nextFirstItemIdx = firstItemIndex2 - INITIAL_INDEX - ITEMS_PER_PAGE; if (initialIndexOffset) { initialIndexOffset.current -= ITEMS_PER_PAGE; } setItems(function(items2) { return [].concat(generateItems(ITEMS_PER_PAGE, nextFirstItemIdx), items2); }); setFirstItemIndex(firstItemIndex2 - ITEMS_PER_PAGE); return false; }, [setItems, generateItems, initialIndexOffset]); React204.useEffect(function() { if (value) { var initialSelectedIdx = null; for (var i = 0; i < items.length; i++) { if (items[i].isSelected(value)) { initialSelectedIdx = items[i].idx; break; } } setSelectedIdx(initialSelectedIdx); } }, []); return React__default.createElement(reactVirtuoso.Virtuoso, { data: items, firstItemIndex, itemContent: function itemContent(_, item) { return React__default.createElement("div", { className: itemClassName + (" mml-datepicker__item " + (item.idx === selectedIdx ? "mml-datepicker__item--selected" : "")), onClick: function onClick() { return handleClick(item); } }, item.displayValue); }, endReached: appendItems, startReached: prependItems }); }; var getItemData = function getItemData2(props) { var idx = props.idx, interval = props.interval, value = props.value, format = props.format; var newValue = idx >= 0 ? dayjs(value).add(idx * (interval * 24), "hour") : dayjs(value).subtract(idx * (interval * 24) * -1, "hour"); return { idx, value: newValue, displayValue: dayjs(newValue).format(format), isSelected: function isSelected(currentValue) { return dayjs(newValue).isSame(interval === 1 ? dayjs(currentValue) : dayjs(currentValue).add(interval, "day"), "date"); } }; }; var DatePickerDate = function DatePickerDate2(props) { return React__default.createElement("div", { className: "mml-datepicker__select mml-datepicker__date" }, React__default.createElement(DatePickerSelect, Object.assign({}, props, { itemClassName: "mml-datepicker__item--day", getItemData }))); }; dayjs.extend(isBetween); var getItemData$1 = function getItemData2(props) { var idx = props.idx, interval = props.interval, value = props.value, format = props.format; var newValue = idx >= 0 ? dayjs(value).add(idx * interval, "minute") : dayjs(value).subtract(idx * -1 * interval, "minute"); return { idx, value: newValue, displayValue: dayjs(newValue).format(format), isSelected: function isSelected(currentValue) { return dayjs(newValue).isBetween(currentValue, dayjs(currentValue).add(interval - 1, "minute"), "minute", "[]"); } }; }; var DatePickerTime = function DatePickerTime2(props) { return React__default.createElement("div", { className: "mml-datepicker__select mml-datepicker__time" }, React__default.createElement(DatePickerSelect, Object.assign({}, props, { itemClassName: "mml-datepicker__item--time", getItemData: getItemData$1 }))); }; var DatePicker = function DatePicker2(_ref) { var name = _ref.name, selected = _ref.selected, dateInterval = _ref.dateInterval, timeInterval = _ref.timeInterval, dateFormat = _ref.dateFormat, timeFormat = _ref.timeFormat, fullDay = _ref.fullDay, icalFilter = _ref.icalFilter; var _useState = React204.useState(selected), date = _useState[0], setDate = _useState[1]; var handleChangeDate = function handleChangeDate2(value) { setDate(function(prevDate) { return prevDate.set("date", value.get("date")).set("month", value.get("month")).set("year", value.get("year")); }); }; var handleChangeTime = function handleChangeTime2(value) { setDate(function(prevDate) { return prevDate.set("minute", value.get("minute")).set("hour", value.get("hour")); }); }; return React__default.createElement("div", { className: "mml-datepicker mml-datepicker--" + (fullDay ? "single" : "double") }, React__default.createElement("input", { name, value: date.toISOString(), type: "hidden" }), React__default.createElement(DatePickerDate, { icalFilter, format: dateFormat, value: date, onChange: handleChangeDate, interval: dateInterval }), !fullDay && React__default.createElement(DatePickerTime, { icalFilter, format: timeFormat, value: date, onChange: handleChangeTime, interval: timeInterval })); }; var setupIcalFilter = /* @__PURE__ */ function() { var _ref = /* @__PURE__ */ _asyncToGenerator(/* @__PURE__ */ runtime_1.mark(function _callee(icalURL, duration) { var response, body, icalExpander; return runtime_1.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return fetch(icalURL, { method: "GET", redirect: "follow", credentials: "same-origin" }); case 2: response = _context.sent; _context.next = 5; return response.text(); case 5: body = _context.sent; if (response.ok) { _context.next = 8; break; } throw new Error(body); case 8: icalExpander = new IcalExpander({ ics: body, maxIterations: 10 }); return _context.abrupt("return", function() { return function(start) { if (!start) return true; var _icalExpander$between = icalExpander.between(start.toDate(), start.add(duration, "minute").toDate()), events = _icalExpander$between.events; return !events.length; }; }); case 10: case "end": return _context.stop(); } } }, _callee); })); return function setupIcalFilter2(_x, _x2) { return _ref.apply(this, arguments); }; }(); var Scheduler = function Scheduler2(_ref2) { var name = _ref2.name, selected = _ref2.selected, icalAvailability = _ref2.icalAvailability, _ref2$duration = _ref2.duration, duration = _ref2$duration === void 0 ? 30 : _ref2$duration, _ref2$dateInterval = _ref2.dateInterval, dateInterval = _ref2$dateInterval === void 0 ? 1 : _ref2$dateInterval, _ref2$timeInterval = _ref2.timeInterval, timeInterval = _ref2$timeInterval === void 0 ? 30 : _ref2$timeInterval, _ref2$dateFormat = _ref2.dateFormat, dateFormat = _ref2$dateFormat === void 0 ? "ddd MMM DD" : _ref2$dateFormat, _ref2$timeFormat = _ref2.timeFormat, timeFormat = _ref2$timeFormat === void 0 ? "hh:mm A" : _ref2$timeFormat, _ref2$fullDay = _ref2.fullDay, fullDay = _ref2$fullDay === void 0 ? false : _ref2$fullDay; var _useState = React204.useState(false), loading = _useState[0], setLoading = _useState[1]; var _useState2 = React204.useState(""), error = _useState2[0], setError = _useState2[1]; var _useState3 = React204.useState(function() { return function() { return true; }; }), icalFilter = _useState3[0], setIcalFilter = _useState3[1]; React204.useEffect(function() { if (!icalAvailability) return; setLoading(true); setupIcalFilter(icalAvailability, duration).then(setIcalFilter)["catch"](function(err) { console.warn("loading ical failed", { icalAvailability, err }); setError("iCal availability could not be loaded"); })["finally"](function() { return setLoading(false); }); }, [icalAvailability, duration]); return React__default.createElement(Card2, { className: "mml-scheduler" }, React__default.createElement(CardHeader2, { icon: "date_range", text: "Scheduler" }), React__default.createElement(CardBody, null, error && !loading && React__default.createElement(Error$1, { error: "Failed, error: " + error }), !error && loading && React__default.createElement(Loading, { loading: true, text: "Loading availability" }), !error && !loading && React__default.createElement(DatePicker, { name, selected: selected ? dayjs(selected) : dayjs().startOf("hour"), dateInterval, timeInterval, dateFormat, timeFormat, fullDay, icalFilter }))); }; var Success = function Success2(_ref) { var success = _ref.success; if (success) return React__default.createElement("div", { className: "mml-success" }, success); return null; }; var Text = function Text2(_ref) { var text5 = _ref.text, _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className; return React__default.createElement("div", { className: ("mml-text " + className).trim() }, text5); }; var converters = { button: function button(tag) { return React__default.createElement(Button, Object.assign({}, tag.attributes, { key: tag.key, text: tag.getText(), name: tag.attributes.name, value: tag.attributes.value })); }, button_list: function button_list(tag, children) { return React__default.createElement(ButtonList, Object.assign({}, tag.attributes, { key: tag.key }), children); }, input: function input(tag) { return React__default.createElement(Input, Object.assign({}, tag.attributes, { key: tag.key, name: tag.attributes.name, value: tag.attributes.value })); }, add_to_calendar: function add_to_calendar(tag) { return React__default.createElement(AddToCalendar, Object.assign({}, tag.attributes, { key: tag.key, title: tag.attributes.title, start: tag.attributes.start, end: tag.attributes.end })); }, col: function col(tag, children) { return React__default.createElement(Col, Object.assign({}, tag.attributes, { key: tag.key }), children); }, row: function row(tag, children) { return React__default.createElement(Row, Object.assign({}, tag.attributes, { key: tag.key }), children); }, icon: function icon(tag) { return React__default.createElement(Icon2, Object.assign({}, tag.attributes, { key: tag.key, name: tag.attributes.name })); }, image: function image2(tag) { return React__default.createElement(Image2, Object.assign({}, tag.attributes, { key: tag.key, src: tag.attributes.src })); }, md: function md(tag) { return React__default.createElement(MD, Object.assign({}, tag.attributes, { key: tag.key, text: tag.getText() })); }, text: function text5(tag) { return React__default.createElement(Text, Object.assign({}, tag.attributes, { key: tag.key, text: tag.getText() })); }, scheduler: function scheduler(tag) { return React__default.createElement(Scheduler, Object.assign({}, tag.attributes, { key: tag.key, name: tag.attributes.name, dateInterval: parseInt(tag.attributes.dateInterval, 10) || 1, timeInterval: parseInt(tag.attributes.timeInterval, 10) || 30, duration: parseInt(tag.attributes.duration, 10) || 30, selected: tag.attributes.selected, fullDay: tag.attributes.fullDay === "true", icalAvailability: tag.attributes.icalAvailability })); }, carousel: function carousel(tag, children) { return React__default.createElement(Carousel, Object.assign({ slideWidth: tag.attributes.slideWidth }, tag.attributes, { key: tag.key }), children); }, item: function item(tag, children) { return React__default.createElement(CarouselItem, Object.assign({}, tag.attributes, { key: tag.key }), children); }, number: function number2(tag) { return React__default.createElement(Number2, Object.assign({}, tag.attributes, { key: tag.key, name: tag.attributes.name, value: tag.attributes.value })); } }; var Tree = /* @__PURE__ */ function() { function Tree2(node2, children, customConvertors) { this.converters = _extends({}, converters, customConvertors); this.node = node2; this.children = children; this.reactElements = this.toReact(); this.name = node2.attributes.name; this.type = node2.attributes.type; } var _proto = Tree2.prototype; _proto.toReact = function toReact2(parent) { var _this = this; if (parent === void 0) { parent = this; } var reactNodes = []; (parent.children || []).forEach(function(child, i) { var converter = _this.converters[child.name]; if (!converter || !Object.hasOwnProperty.call(_this.converters, child.name)) { throw Error("Converter not found for tag " + child.name + ", Available converters are " + Object.keys(_this.converters)); } var children = _this.toReact(child); child.key = "tag-" + child.name + "-position-" + i; reactNodes.push(converter(child, children)); }); return reactNodes; }; return Tree2; }(); function SourceToXML(source) { var src = source.trim(); if (!src.startsWith(""; var unescapedAmps = /&(?!amp;|lt;|gt;)/g; src = src.replace(unescapedAmps, "&"); return parseXml(src); } function convertNodes(nodes) { return nodes.reduce(function(acc, node2) { var element2 = node2; var children; if (element2.children) children = convertNodes(element2.children); var name = element2.name; if (node2.type === "text") { if (node2.text.trim().length) name = "text"; else return acc; } acc.push(new MMLTag(name, node2, children)); return acc; }, []); } function XMLtoMMLTree(document4, customConvertors) { if (!document4 || !document4.children || !document4.children.length) throw new Error("bad input"); var mmlNode = document4.children[0]; if (mmlNode.name !== "mml") throw new Error("missing mml tag"); return new Tree(mmlNode, convertNodes(mmlNode.children), customConvertors); } function Parse(source, customConvertors) { var XMLNodes = SourceToXML(source); return XMLtoMMLTree(XMLNodes, customConvertors); } var MML2 = function MML3(_ref) { var source = _ref.source, onSubmit = _ref.onSubmit, converters2 = _ref.converters, _ref$theme = _ref.theme, theme = _ref$theme === void 0 ? "" : _ref$theme, _ref$className = _ref.className, className = _ref$className === void 0 ? "" : _ref$className, _ref$Loading = _ref.Loading, Loading$1 = _ref$Loading === void 0 ? Loading : _ref$Loading, _ref$Error = _ref.Error, Error2 = _ref$Error === void 0 ? Error$1 : _ref$Error, _ref$Success = _ref.Success, Success$1 = _ref$Success === void 0 ? Success : _ref$Success; var _useState = React204.useState(""), error = _useState[0], setError = _useState[1]; var _useState2 = React204.useState({ loading: false, error: "", success: "" }), submitState = _useState2[0], setSubmitState = _useState2[1]; var tree = React204.useMemo(function() { try { return Parse(source, converters2); } catch (e2) { console.warn("mml parsing error: ", source, e2); setError("This chat message has invalid formatting and can't be shown"); return null; } }, [source, converters2]); var handleSubmit = React204.useCallback(/* @__PURE__ */ function() { var _ref2 = _asyncToGenerator(/* @__PURE__ */ runtime_1.mark(function _callee(event) { var state; return runtime_1.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: event.preventDefault(); state = {}; if (tree != null && tree.name) state.mml_name = tree.name; new FormData(event.currentTarget).forEach(function(value, key) { state[key] = value; }); if (onSubmit) { _context.next = 6; break; } return _context.abrupt("return", console.warn("Forgot to pass onSubmit prop to ? payload:", state)); case 6: _context.prev = 6; setSubmitState({ loading: true, error: "", success: "" }); _context.next = 10; return onSubmit(state); case 10: setSubmitState({ loading: false, error: "", success: "submitted" }); _context.next = 16; break; case 13: _context.prev = 13; _context.t0 = _context["catch"](6); setSubmitState({ loading: false, error: "Failed to send the request. Please try again.", success: "" }); case 16: case "end": return _context.stop(); } } }, _callee, null, [[6, 13]]); })); return function(_x) { return _ref2.apply(this, arguments); }; }(), [onSubmit, tree]); return React__default.createElement("div", { className: "mml-container " + theme + " " + className, "data-testid": "mml-container" }, error ? React__default.createElement("div", { className: "mml-wrap" }, Error2 && React__default.createElement(Error2, { error })) : React__default.createElement("form", { onSubmit: handleSubmit, className: "mml-wrap", "data-testid": "mml-form" }, tree != null && tree.type ? React__default.createElement("div", { className: "mml-card" }, tree == null ? void 0 : tree.reactElements) : tree == null ? void 0 : tree.reactElements, submitState.loading && Loading$1 && React__default.createElement(Loading$1, { loading: submitState.loading }), submitState.success && Success$1 && React__default.createElement(Success$1, { success: submitState.success }), submitState.error && Error2 && React__default.createElement(Error2, { error: submitState.error }))); }; exports2.AddToCalendar = AddToCalendar; exports2.Button = Button; exports2.ButtonList = ButtonList; exports2.Card = Card2; exports2.CardBody = CardBody; exports2.CardHeader = CardHeader2; exports2.Carousel = Carousel; exports2.CarouselItem = CarouselItem; exports2.Col = Col; exports2.Error = Error$1; exports2.Icon = Icon2; exports2.Image = Image2; exports2.Input = Input; exports2.Loading = Loading; exports2.MD = MD; exports2.MML = MML2; exports2.MMLTag = MMLTag; exports2.Number = Number2; exports2.Parse = Parse; exports2.Row = Row; exports2.Scheduler = Scheduler; exports2.SourceToXML = SourceToXML; exports2.Success = Success; exports2.Text = Text; exports2.Tree = Tree; exports2.XMLtoMMLTree = XMLtoMMLTree; exports2.converters = converters; exports2.truncate = truncate; } }); // node_modules/mml-react/dist/index.js var require_dist2 = __commonJS({ "node_modules/mml-react/dist/index.js"(exports2, module2) { "use strict"; if (process.env.NODE_ENV === "production") { module2.exports = require_mml_react_cjs_production_min(); } else { module2.exports = require_mml_react_cjs_development(); } } }); // src/index.ts var src_exports = {}; __export(src_exports, { ACTIONS_NOT_WORKING_IN_THREAD: () => ACTIONS_NOT_WORKING_IN_THREAD, ATTACHMENT_GROUPS_ORDER: () => ATTACHMENT_GROUPS_ORDER, ActionsIcon: () => ActionsIcon, AddCommentForm: () => AddCommentForm, AmountBar: () => AmountBar, Attachment: () => Attachment, AttachmentActions: () => AttachmentActions, AttachmentActionsContainer: () => AttachmentActionsContainer, AttachmentPreviewList: () => AttachmentPreviewList, AttachmentSelector: () => AttachmentSelector, AttachmentWithinContainer: () => AttachmentWithinContainer, Audio: () => Audio, AudioContainer: () => AudioContainer, AudioRecorder: () => AudioRecorder, AutoCompleteTextarea: () => ReactTextareaAutocomplete, Avatar: () => Avatar, BaseImage: () => BaseImage, BinIcon: () => BinIcon, Card: () => Card, CardAudio: () => CardAudio, CardContainer: () => CardContainer, Channel: () => Channel, ChannelActionContext: () => ChannelActionContext, ChannelActionProvider: () => ChannelActionProvider, ChannelAvatar: () => ChannelAvatar, ChannelHeader: () => ChannelHeader, ChannelList: () => ChannelList, ChannelListContext: () => ChannelListContext, ChannelListContextProvider: () => ChannelListContextProvider, ChannelListMessenger: () => ChannelListMessenger, ChannelPreview: () => ChannelPreview, ChannelPreviewMessenger: () => ChannelPreviewMessenger, ChannelSearch: () => ChannelSearch, ChannelStateContext: () => ChannelStateContext, ChannelStateProvider: () => ChannelStateProvider, Chat: () => Chat, ChatAutoComplete: () => ChatAutoComplete, ChatContext: () => ChatContext, ChatProvider: () => ChatProvider, ChatView: () => ChatView, CheckSignIcon: () => CheckSignIcon, Checkmark: () => Checkmark, CloseIcon: () => CloseIcon, CommandItem: () => CommandItem, ComponentContext: () => ComponentContext, ComponentProvider: () => ComponentProvider, ConnectionStatus: () => ConnectionStatus, CooldownTimer: () => CooldownTimer, CustomMessageActionsList: () => CustomMessageActionsList, DateSeparator: () => DateSeparator, DefaultAttachmentSelectorComponents: () => DefaultAttachmentSelectorComponents, DefaultSuggestionList: () => List, DefaultSuggestionListItem: () => Item, DefaultTriggerProvider: () => DefaultTriggerProvider, DialogAnchor: () => DialogAnchor, DialogManager: () => DialogManager, DialogManagerProvider: () => DialogManagerProvider, DialogPortalDestination: () => DialogPortalDestination, DialogPortalEntry: () => DialogPortalEntry, DownloadButton: () => DownloadButton, DownloadIcon: () => DownloadIcon2, EditMessageForm: () => EditMessageForm, EmoticonItem: () => EmoticonItem, EmptyStateIndicator: () => EmptyStateIndicator, EndPollDialog: () => EndPollDialog, EventComponent: () => EventComponent, FileAttachment: () => FileAttachment, FileContainer: () => FileContainer, FileSizeIndicator: () => FileSizeIndicator, FixedHeightMessage: () => FixedHeightMessage, Gallery: () => Gallery, GalleryContainer: () => GalleryContainer, GiphyPreviewMessage: () => GiphyPreviewMessage, GroupAvatar: () => GroupAvatar, ImageComponent: () => ImageComponent, ImageContainer: () => ImageContainer, InfiniteScroll: () => InfiniteScroll, LinkIcon: () => LinkIcon, LinkPreviewList: () => LinkPreviewList, LinkPreviewState: () => LinkPreviewState, LoadMoreButton: () => LoadMoreButton, LoadMorePaginator: () => LoadMorePaginator, LoadingChannels: () => LoadingChannels, LoadingErrorIndicator: () => LoadingErrorIndicator, LoadingIndicator: () => LoadingIndicator, LoadingIndicatorIcon: () => LoadingIndicatorIcon, MAX_MESSAGE_REACTIONS_TO_FETCH: () => MAX_MESSAGE_REACTIONS_TO_FETCH, MAX_QUERY_CHANNELS_LIMIT: () => MAX_QUERY_CHANNELS_LIMIT, MESSAGE_ACTIONS: () => MESSAGE_ACTIONS, MML: () => MML, MediaContainer: () => MediaContainer, MediaRecordingState: () => MediaRecordingState, Message: () => Message, MessageActions: () => MessageActions, MessageActionsBox: () => MessageActionsBox, MessageActionsWrapper: () => MessageActionsWrapper, MessageBounceProvider: () => MessageBounceProvider, MessageContext: () => MessageContext, MessageDeleted: () => MessageDeleted, MessageDeliveredIcon: () => MessageDeliveredIcon, MessageDeliveryStatus: () => MessageDeliveryStatus, MessageErrorIcon: () => MessageErrorIcon, MessageInput: () => MessageInput, MessageInputContext: () => MessageInputContext, MessageInputContextProvider: () => MessageInputContextProvider, MessageInputFlat: () => MessageInputFlat, MessageList: () => MessageList, MessageListContext: () => MessageListContext, MessageListContextProvider: () => MessageListContextProvider, MessageListNotifications: () => MessageListNotifications, MessageNotification: () => MessageNotification, MessageOptions: () => MessageOptions, MessageProvider: () => MessageProvider, MessageRepliesCountButton: () => MessageRepliesCountButton, MessageSimple: () => MessageSimple, MessageStatus: () => MessageStatus, MessageText: () => MessageText, MessageTimestamp: () => MessageTimestamp, MicIcon: () => MicIcon, Modal: () => Modal, ModalGallery: () => ModalGallery, PauseIcon: () => PauseIcon2, PinIcon: () => PinIcon, PinIndicator: () => PinIndicator, PlayButton: () => PlayButton, PlayIcon: () => PlayIcon, PlaybackRateButton: () => PlaybackRateButton, Poll: () => Poll, PollActions: () => PollActions, PollAnswerList: () => PollAnswerList, PollContent: () => PollContent, PollContext: () => PollContext, PollCreationDialog: () => PollCreationDialog, PollHeader: () => PollHeader, PollOptionList: () => PollOptionList, PollOptionSelector: () => PollOptionSelector, PollOptionsFullList: () => PollOptionsFullList, PollProvider: () => PollProvider, PollResults: () => PollResults, PollVote: () => PollVote, PollVoteListing: () => PollVoteListing, PopperTooltip: () => PopperTooltip, ProgressBar: () => ProgressBar, QuotedMessage: () => QuotedMessage, QuotedMessagePreview: () => QuotedMessagePreview, QuotedMessagePreviewHeader: () => QuotedMessagePreviewHeader, QuotedPoll: () => QuotedPoll, ReactionIcon: () => ReactionIcon, ReactionSelector: () => ReactionSelector, ReactionsList: () => ReactionsList, RecordingPermission: () => RecordingPermission, RecordingPermissionDeniedNotification: () => RecordingPermissionDeniedNotification, RecordingTimer: () => RecordingTimer, RetryIcon: () => RetryIcon, SUPPORTED_VIDEO_FORMATS: () => SUPPORTED_VIDEO_FORMATS, SafeAnchor: () => SafeAnchor, ScrollToBottomButton: () => ScrollToBottomButton, SearchBar: () => SearchBar, SearchInput: () => SearchInput, SearchResults: () => SearchResults, SendButton: () => SendButton, SendIcon: () => SendIcon, SetLinkPreviewMode: () => SetLinkPreviewMode, SimpleAttachmentSelector: () => SimpleAttachmentSelector, SimpleReactionsList: () => SimpleReactionsList, SpriteImage: () => SpriteImage, StartRecordingAudioButton: () => StartRecordingAudioButton, StreamEmoji: () => StreamEmoji, Streami18n: () => Streami18n, SuggestPollOptionForm: () => SuggestPollOptionForm, Thread: () => Thread, ThreadContext: () => ThreadContext, ThreadHeader: () => ThreadHeader, ThreadIcon: () => ThreadIcon, ThreadList: () => ThreadList, ThreadListItem: () => ThreadListItem, ThreadListItemUI: () => ThreadListItemUI, ThreadProvider: () => ThreadProvider, ThreadStart: () => ThreadStart, Tooltip: () => Tooltip, TranslationContext: () => TranslationContext, TranslationProvider: () => TranslationProvider, TypingContext: () => TypingContext, TypingIndicator: () => TypingIndicator, TypingProvider: () => TypingProvider, UNREAD_MESSAGE_SEPARATOR_CLASS: () => UNREAD_MESSAGE_SEPARATOR_CLASS, UnMemoizedLoadMorePaginator: () => UnMemoizedLoadMorePaginator, UnreadMessagesNotification: () => UnreadMessagesNotification, UnreadMessagesSeparator: () => UnreadMessagesSeparator, UnsupportedAttachment: () => UnsupportedAttachment, UnsupportedAttachmentContainer: () => UnsupportedAttachmentContainer, UploadButton: () => UploadButton, UploadIcon: () => UploadIcon, UserItem: () => UserItem, VirtualizedMessageList: () => VirtualizedMessageList, VoiceRecordingContainer: () => VoiceRecordingContainer, WaveProgressBar: () => WaveProgressBar, Window: () => Window, WithComponents: () => WithComponents, areMessagePropsEqual: () => areMessagePropsEqual, areMessageUIPropsEqual: () => areMessageUIPropsEqual, attachmentTypeIconMap: () => attachmentTypeIconMap, deTranslations: () => de_default, defaultAllowedTagNames: () => defaultAllowedTagNames, defaultAttachmentSelectorActionSet: () => defaultAttachmentSelectorActionSet, defaultDateTimeParser: () => defaultDateTimeParser, defaultPinPermissions: () => defaultPinPermissions, defaultReactionOptions: () => defaultReactionOptions, defaultRenderMessages: () => defaultRenderMessages, defaultScrollToItem: () => defaultScrollToItem, defaultTranslatorFunction: () => defaultTranslatorFunction, displayDuration: () => displayDuration, divMod: () => divMod, downSample: () => downSample, emojiMarkdownPlugin: () => emojiMarkdownPlugin, enTranslations: () => en_default, esTranslations: () => es_default, escapeRegExp: () => escapeRegExp, frTranslations: () => fr_default, getChannel: () => getChannel, getDisplayImage: () => getDisplayImage, getDisplayTitle: () => getDisplayTitle, getGroupChannelDisplayInfo: () => getGroupChannelDisplayInfo, getGroupStyles: () => getGroupStyles, getImages: () => getImages, getLastReceived: () => getLastReceived, getLatestMessagePreview: () => getLatestMessagePreview, getMessageActions: () => getMessageActions, getNonImageAttachments: () => getNonImageAttachments, getReadByTooltipText: () => getReadByTooltipText, getReadStates: () => getReadStates, getWholeChar: () => getWholeChar, handleActionWarning: () => handleActionWarning, hasMoreMessagesProbably: () => hasMoreMessagesProbably, hasNotMoreMessages: () => hasNotMoreMessages, hiTranslations: () => hi_default, htmlToTextPlugin: () => htmlToTextPlugin, insertIntro: () => insertIntro, isAudioAttachment: () => isAudioAttachment, isChannel: () => isChannel, isDate: () => isDate, isDateSeparatorMessage: () => isDateSeparatorMessage, isDayOrMoment: () => isDayOrMoment, isFileAttachment: () => isFileAttachment, isGalleryAttachmentType: () => isGalleryAttachmentType, isLanguageSupported: () => isLanguageSupported, isLocalAttachment: () => isLocalAttachment, isLocalAudioAttachment: () => isLocalAudioAttachment, isLocalFileAttachment: () => isLocalFileAttachment, isLocalImageAttachment: () => isLocalImageAttachment, isLocalMediaAttachment: () => isLocalMediaAttachment, isLocalVoiceRecordingAttachment: () => isLocalVoiceRecordingAttachment, isMediaAttachment: () => isMediaAttachment, isMessageBounced: () => isMessageBounced, isMessageEdited: () => isMessageEdited, isNumberOrString: () => isNumberOrString, isOnlyEmojis: () => isOnlyEmojis, isScrapedContent: () => isScrapedContent, isSvgAttachment: () => isSvgAttachment, isUploadedImage: () => isUploadedImage, isUserMuted: () => isUserMuted, isVoiceRecordingAttachment: () => isVoiceRecordingAttachment, itTranslations: () => it_default, jaTranslations: () => ja_default, keepLineBreaksPlugin: () => keepLineBreaksPlugin, koTranslations: () => ko_default, makeDateMessageId: () => makeDateMessageId, mapToUserNameOrId: () => mapToUserNameOrId, markDownRenderers: () => markDownRenderers, matchMarkdownLinks: () => matchMarkdownLinks, mentionsMarkdownPlugin: () => mentionsMarkdownPlugin, messageCodeBlocks: () => messageCodeBlocks, messageHasAttachments: () => messageHasAttachments, messageHasReactions: () => messageHasReactions, missingUseFlagHandlerParameterWarning: () => missingUseFlagHandlerParameterWarning, missingUseMuteHandlerParamsWarning: () => missingUseMuteHandlerParamsWarning, moveChannelUp: () => moveChannelUp, nlTranslations: () => nl_default, processMessages: () => processMessages, ptTranslations: () => pt_default, reactionHandlerWarning: () => reactionHandlerWarning, renderPreviewText: () => renderPreviewText, renderText: () => renderText, resampleWaveformData: () => resampleWaveformData, ruTranslations: () => ru_default, shouldRenderMessageActions: () => shouldRenderMessageActions, showMessageActionsBox: () => showMessageActionsBox, trTranslations: () => tr_default, upSample: () => upSample, useActionHandler: () => useActionHandler, useActiveThread: () => useActiveThread, useChannelActionContext: () => useChannelActionContext, useChannelDeletedListener: () => useChannelDeletedListener, useChannelEditMessageHandler: () => useEditMessageHandler, useChannelHiddenListener: () => useChannelHiddenListener, useChannelListContext: () => useChannelListContext, useChannelMentionsHandler: () => useMentionsHandlers, useChannelPreviewInfo: () => useChannelPreviewInfo, useChannelStateContext: () => useChannelStateContext, useChannelTruncatedListener: () => useChannelTruncatedListener, useChannelUpdatedListener: () => useChannelUpdatedListener, useChannelVisibleListener: () => useChannelVisibleListener, useChat: () => useChat, useChatContext: () => useChatContext, useComponentContext: () => useComponentContext, useConnectionRecoveredListener: () => useConnectionRecoveredListener, useCooldownTimer: () => useCooldownTimer, useCreateChatClient: () => useCreateChatClient, useDeleteHandler: () => useDeleteHandler, useDialog: () => useDialog, useDialogAnchor: () => useDialogAnchor, useDialogIsOpen: () => useDialogIsOpen, useDialogManager: () => useDialogManager, useEditHandler: () => useEditHandler, useEnrichedMessages: () => useEnrichedMessages, useFlagHandler: () => useFlagHandler, useLastReadData: () => useLastReadData, useMarkUnreadHandler: () => useMarkUnreadHandler, useMentionsHandler: () => useMentionsHandler, useMessageBounceContext: () => useMessageBounceContext, useMessageContext: () => useMessageContext, useMessageInputContext: () => useMessageInputContext, useMessageInputState: () => useMessageInputState, useMessageListContext: () => useMessageListContext, useMessageListElements: () => useMessageListElements, useMessageListScrollManager: () => useMessageListScrollManager, useMessageNewListener: () => useMessageNewListener, useMobileNavigation: () => useMobileNavigation, useMuteHandler: () => useMuteHandler, useNewMessageNotification: () => useNewMessageNotification, useNotificationAddedToChannelListener: () => useNotificationAddedToChannelListener, useNotificationMessageNewListener: () => useNotificationMessageNewListener, useNotificationRemovedFromChannelListener: () => useNotificationRemovedFromChannelListener, useOpenThreadHandler: () => useOpenThreadHandler, useOpenedDialogCount: () => useOpenedDialogCount, usePaginatedChannels: () => usePaginatedChannels, usePinHandler: () => usePinHandler, usePollAnswerPagination: () => usePollAnswerPagination, usePollContext: () => usePollContext, usePollOptionVotesPagination: () => usePollOptionVotesPagination, usePrependedMessagesCount: () => usePrependedMessagesCount, useReactionHandler: () => useReactionHandler, useReactionsFetcher: () => useReactionsFetcher, useRetryHandler: () => useRetryHandler, useScrollLocationLogic: () => useScrollLocationLogic, useShouldForceScrollToBottom: () => useShouldForceScrollToBottom, useStateStore: () => useStateStore, useThreadContext: () => useThreadContext, useThreadList: () => useThreadList, useThreadListItemContext: () => useThreadListItemContext, useThreadsViewContext: () => useThreadsViewContext, useTranslationContext: () => useTranslationContext, useTypingContext: () => useTypingContext, useUserHandler: () => useUserHandler, useUserPresenceChangedListener: () => useUserPresenceChangedListener, useUserRole: () => useUserRole, validateAndGetMessage: () => validateAndGetMessage, withChannelActionContext: () => withChannelActionContext, withChannelStateContext: () => withChannelStateContext, withChatContext: () => withChatContext, withComponentContext: () => withComponentContext, withMessageContext: () => withMessageContext, withTranslationContext: () => withTranslationContext, withTypingContext: () => withTypingContext }); module.exports = __toCommonJS(src_exports); // src/components/Attachment/Attachment.tsx var import_react46 = __toESM(require("react")); // src/components/Attachment/utils.tsx var SUPPORTED_VIDEO_FORMATS = ["video/mp4", "video/ogg", "video/webm", "video/quicktime"]; var isLocalAttachment = (attachment) => !!attachment.localMetadata?.id; var isScrapedContent = (attachment) => attachment.og_scrape_url || attachment.title_link; var isUploadedImage = (attachment) => attachment.type === "image" && !isScrapedContent(attachment); var isLocalImageAttachment = (attachment) => isUploadedImage(attachment) && isLocalAttachment(attachment); var isGalleryAttachmentType = (output) => Array.isArray(output.images); var isAudioAttachment = (attachment) => attachment.type === "audio"; var isLocalAudioAttachment = (attachment) => isAudioAttachment(attachment) && isLocalAttachment(attachment); var isVoiceRecordingAttachment = (attachment) => attachment.type === "voiceRecording"; var isLocalVoiceRecordingAttachment = (attachment) => isVoiceRecordingAttachment(attachment) && isLocalAttachment(attachment); var isFileAttachment = (attachment) => attachment.type === "file" || !!(attachment.mime_type && SUPPORTED_VIDEO_FORMATS.indexOf(attachment.mime_type) === -1 && attachment.type !== "video"); var isLocalFileAttachment = (attachment) => isFileAttachment(attachment) && isLocalAttachment(attachment); var isMediaAttachment = (attachment) => attachment.mime_type && SUPPORTED_VIDEO_FORMATS.indexOf(attachment.mime_type) !== -1 || attachment.type === "video"; var isLocalMediaAttachment = (attachment) => isMediaAttachment(attachment) && isLocalAttachment(attachment); var isSvgAttachment = (attachment) => { const filename = attachment.fallback || ""; return filename.toLowerCase().endsWith(".svg"); }; var divMod = (num, divisor) => [Math.floor(num / divisor), num % divisor]; var displayDuration = (totalSeconds) => { if (!totalSeconds || totalSeconds < 0) return "00:00"; const [hours, hoursLeftover] = divMod(totalSeconds, 3600); const [minutes, seconds] = divMod(hoursLeftover, 60); const roundedSeconds = Math.ceil(seconds); const prependHrsZero = hours.toString().length === 1 ? "0" : ""; const prependMinZero = minutes.toString().length === 1 ? "0" : ""; const prependSecZero = roundedSeconds.toString().length === 1 ? "0" : ""; const minSec = `${prependMinZero}${minutes}:${prependSecZero}${roundedSeconds}`; return hours ? `${prependHrsZero}${hours}:` + minSec : minSec; }; // src/components/Attachment/AttachmentContainer.tsx var import_react45 = __toESM(require("react")); var import_react_player2 = __toESM(require("react-player")); var import_clsx10 = __toESM(require("clsx")); var linkify = __toESM(require("linkifyjs")); // src/components/Attachment/AttachmentActions.tsx var import_react19 = __toESM(require("react")); // src/context/ChannelActionContext.tsx var import_react = __toESM(require("react")); var ChannelActionContext = import_react.default.createContext( void 0 ); var ChannelActionProvider = ({ children, value }) => /* @__PURE__ */ import_react.default.createElement(ChannelActionContext.Provider, { value }, children); var useChannelActionContext = (componentName) => { const contextValue = (0, import_react.useContext)(ChannelActionContext); if (!contextValue) { console.warn( `The useChannelActionContext hook was called outside of the ChannelActionContext provider. Make sure this hook is called within a child of the Channel component. The errored call is located in the ${componentName} component.` ); return {}; } return contextValue; }; var withChannelActionContext = (Component2) => { const WithChannelActionContextComponent = (props) => { const channelActionContext = useChannelActionContext(); return /* @__PURE__ */ import_react.default.createElement(Component2, { ...props, ...channelActionContext }); }; WithChannelActionContextComponent.displayName = (Component2.displayName || Component2.name || "Component").replace("Base", ""); return WithChannelActionContextComponent; }; // src/context/ChannelListContext.tsx var import_react2 = __toESM(require("react")); var ChannelListContext = (0, import_react2.createContext)(void 0); var ChannelListContextProvider = ({ children, value }) => /* @__PURE__ */ import_react2.default.createElement(ChannelListContext.Provider, { value }, children); var useChannelListContext = (componentName) => { const contextValue = (0, import_react2.useContext)(ChannelListContext); if (!contextValue) { console.warn( `The useChannelListContext hook was called outside of the ChannelListContext provider. Make sure this hook is called within the ChannelList component. The errored call is located in the ${componentName} component.` ); return {}; } return contextValue; }; // src/context/ChannelStateContext.tsx var import_react3 = __toESM(require("react")); var ChannelStateContext = import_react3.default.createContext( void 0 ); var ChannelStateProvider = ({ children, value }) => /* @__PURE__ */ import_react3.default.createElement(ChannelStateContext.Provider, { value }, children); var useChannelStateContext = (componentName) => { const contextValue = (0, import_react3.useContext)(ChannelStateContext); if (!contextValue) { console.warn( `The useChannelStateContext hook was called outside of the ChannelStateContext provider. Make sure this hook is called within a child of the Channel component. The errored call is located in the ${componentName} component.` ); return {}; } return contextValue; }; var withChannelStateContext = (Component2) => { const WithChannelStateContextComponent = (props) => { const channelStateContext = useChannelStateContext(); return /* @__PURE__ */ import_react3.default.createElement(Component2, { ...props, ...channelStateContext }); }; WithChannelStateContextComponent.displayName = (Component2.displayName || Component2.name || "Component").replace("Base", ""); return WithChannelStateContextComponent; }; // src/context/ChatContext.tsx var import_react4 = __toESM(require("react")); // src/context/utils/getDisplayName.ts var getDisplayName = (Component2) => Component2.displayName || Component2.name || "Component"; // src/context/ChatContext.tsx var ChatContext = import_react4.default.createContext(void 0); var ChatProvider = ({ children, value }) => /* @__PURE__ */ import_react4.default.createElement(ChatContext.Provider, { value }, children); var useChatContext = (componentName) => { const contextValue = (0, import_react4.useContext)(ChatContext); if (!contextValue) { console.warn( `The useChatContext hook was called outside of the ChatContext provider. Make sure this hook is called within a child of the Chat component. The errored call is located in the ${componentName} component.` ); return {}; } return contextValue; }; var withChatContext = (Component2) => { const WithChatContextComponent = (props) => { const chatContext = useChatContext(); return /* @__PURE__ */ import_react4.default.createElement(Component2, { ...props, ...chatContext }); }; WithChatContextComponent.displayName = `WithChatContext${getDisplayName(Component2)}`; return WithChatContextComponent; }; // src/context/ComponentContext.tsx var import_react5 = __toESM(require("react")); var ComponentContext = import_react5.default.createContext({}); var ComponentProvider = ({ children, value }) => /* @__PURE__ */ import_react5.default.createElement(ComponentContext.Provider, { value }, children); var useComponentContext = (_componentName) => (0, import_react5.useContext)(ComponentContext); var withComponentContext = (Component2) => { const WithComponentContextComponent = (props) => { const componentContext = useComponentContext(); return /* @__PURE__ */ import_react5.default.createElement(Component2, { ...props, ...componentContext }); }; WithComponentContextComponent.displayName = (Component2.displayName || Component2.name || "Component").replace("Base", ""); return WithComponentContextComponent; }; // src/context/DialogManagerContext.tsx var import_react10 = __toESM(require("react")); // src/components/Dialog/DialogManager.ts var import_stream_chat = require("stream-chat"); var DialogManager = class { constructor({ id } = {}) { this.state = new import_stream_chat.StateStore({ dialogsById: {} }); this.id = id ?? (/* @__PURE__ */ new Date()).getTime().toString(); } get openDialogCount() { return Object.values(this.state.getLatestValue().dialogsById).reduce((count, dialog) => { if (dialog.isOpen) return count + 1; return count; }, 0); } getOrCreate({ id }) { let dialog = this.state.getLatestValue().dialogsById[id]; if (!dialog) { dialog = { close: () => { this.close(id); }, id, isOpen: false, open: () => { this.open({ id }); }, remove: () => { this.remove(id); }, toggle: (closeAll = false) => { this.toggle({ id }, closeAll); } }; this.state.next((current) => ({ ...current, ...{ dialogsById: { ...current.dialogsById, [id]: dialog } } })); } return dialog; } open(params, closeRest) { const dialog = this.getOrCreate(params); if (dialog.isOpen) return; if (closeRest) { this.closeAll(); } this.state.next((current) => ({ ...current, dialogsById: { ...current.dialogsById, [dialog.id]: { ...dialog, isOpen: true } } })); } close(id) { const dialog = this.state.getLatestValue().dialogsById[id]; if (!dialog?.isOpen) return; this.state.next((current) => ({ ...current, dialogsById: { ...current.dialogsById, [dialog.id]: { ...dialog, isOpen: false } } })); } closeAll() { Object.values(this.state.getLatestValue().dialogsById).forEach((dialog) => dialog.close()); } toggle(params, closeAll = false) { if (this.state.getLatestValue().dialogsById[params.id]?.isOpen) { this.close(params.id); } else { this.open(params, closeAll); } } remove(id) { const state = this.state.getLatestValue(); const dialog = state.dialogsById[id]; if (!dialog) return; this.state.next((current) => { const newDialogs = { ...current.dialogsById }; delete newDialogs[id]; return { ...current, dialogsById: newDialogs }; }); } }; // src/components/Dialog/DialogPortal.tsx var import_react9 = __toESM(require("react")); // src/components/Dialog/hooks/useDialog.ts var import_react7 = require("react"); // src/store/hooks/useStateStore.ts var import_react6 = require("react"); function useStateStore(store, selector6) { const [state, setState] = (0, import_react6.useState)(() => { if (!store) return void 0; return selector6(store.getLatestValue()); }); (0, import_react6.useEffect)(() => { if (!store) return; const unsubscribe = store.subscribeWithSelector(selector6, setState); return unsubscribe; }, [store, selector6]); return state; } // src/components/Dialog/hooks/useDialog.ts var useDialog = ({ id }) => { const { dialogManager } = useDialogManager(); (0, import_react7.useEffect)( () => () => { dialogManager.remove(id); }, [dialogManager, id] ); return dialogManager.getOrCreate({ id }); }; var useDialogIsOpen = (id) => { const { dialogManager } = useDialogManager(); const dialogIsOpenSelector = (0, import_react7.useCallback)( ({ dialogsById }) => ({ isOpen: !!dialogsById[id]?.isOpen }), [id] ); return useStateStore(dialogManager.state, dialogIsOpenSelector).isOpen; }; var openedDialogCountSelector = (nextValue) => ({ openedDialogCount: Object.values(nextValue.dialogsById).reduce((count, dialog) => { if (dialog.isOpen) return count + 1; return count; }, 0) }); var useOpenedDialogCount = () => { const { dialogManager } = useDialogManager(); return useStateStore(dialogManager.state, openedDialogCountSelector).openedDialogCount; }; // src/components/Portal/Portal.ts var import_react8 = require("react"); var import_react_dom = require("react-dom"); var Portal = ({ children, getPortalDestination, isOpen }) => { const [portalDestination, setPortalDestination] = (0, import_react8.useState)(null); (0, import_react8.useLayoutEffect)(() => { const destination = getPortalDestination(); if (!destination || !isOpen) return; setPortalDestination(destination); }, [getPortalDestination, isOpen]); if (!portalDestination) return null; return (0, import_react_dom.createPortal)(children, portalDestination); }; // src/components/Dialog/DialogPortal.tsx var DialogPortalDestination = () => { const { dialogManager } = useDialogManager(); const openedDialogCount = useOpenedDialogCount(); return /* @__PURE__ */ import_react9.default.createElement( "div", { className: "str-chat__dialog-overlay", "data-str-chat__portal-id": dialogManager.id, "data-testid": "str-chat__dialog-overlay", onClick: () => dialogManager.closeAll(), style: { "--str-chat__dialog-overlay-height": openedDialogCount > 0 ? "100%" : "0" } } ); }; var DialogPortalEntry = ({ children, dialogId }) => { const { dialogManager } = useDialogManager(); const dialogIsOpen = useDialogIsOpen(dialogId); const getPortalDestination = (0, import_react9.useCallback)( () => document.querySelector(`div[data-str-chat__portal-id="${dialogManager.id}"]`), [dialogManager.id] ); return /* @__PURE__ */ import_react9.default.createElement(Portal, { getPortalDestination, isOpen: dialogIsOpen }, children); }; // src/context/DialogManagerContext.tsx var DialogManagerProviderContext = import_react10.default.createContext(void 0); var DialogManagerProvider = ({ children, id }) => { const [dialogManager] = (0, import_react10.useState)(() => new DialogManager({ id })); return /* @__PURE__ */ import_react10.default.createElement(DialogManagerProviderContext.Provider, { value: { dialogManager } }, children, /* @__PURE__ */ import_react10.default.createElement(DialogPortalDestination, null)); }; var useDialogManager = () => { const value = (0, import_react10.useContext)(DialogManagerProviderContext); return value; }; // src/context/MessageContext.tsx var import_react11 = __toESM(require("react")); var MessageContext = import_react11.default.createContext(void 0); var MessageProvider = ({ children, value }) => /* @__PURE__ */ import_react11.default.createElement(MessageContext.Provider, { value }, children); var useMessageContext = (_componentName) => { const contextValue = (0, import_react11.useContext)(MessageContext); if (!contextValue) { return {}; } return contextValue; }; var withMessageContext = (Component2) => { const WithMessageContextComponent = (props) => { const messageContext = useMessageContext(); return /* @__PURE__ */ import_react11.default.createElement(Component2, { ...props, ...messageContext }); }; WithMessageContextComponent.displayName = (Component2.displayName || Component2.name || "Component").replace("Base", ""); return WithMessageContextComponent; }; // src/context/MessageBounceContext.tsx var import_react12 = __toESM(require("react")); var MessageBounceContext = (0, import_react12.createContext)(void 0); function useMessageBounceContext(componentName) { const contextValue = (0, import_react12.useContext)(MessageBounceContext); if (!contextValue) { console.warn( `The useMessageBounceContext hook was called outside of the MessageBounceContext provider. The errored call is located in the ${componentName} component.` ); return {}; } return contextValue; } function MessageBounceProvider({ children }) { const { handleRetry: doHandleRetry, message, setEditingState } = useMessageContext("MessageBounceProvider"); if (!isMessageBounced(message)) { console.warn( `The MessageBounceProvider was rendered for a message that is not bounced. Have you missed the "isMessageBounced" check?` ); } const { removeMessage } = useChannelActionContext("MessageBounceProvider"); const handleDelete2 = (0, import_react12.useCallback)(() => { removeMessage(message); }, [message, removeMessage]); const handleEdit = (0, import_react12.useCallback)( (e2) => { setEditingState(e2); }, [setEditingState] ); const handleRetry = (0, import_react12.useCallback)(() => { doHandleRetry(message); }, [doHandleRetry, message]); const value = (0, import_react12.useMemo)( () => ({ handleDelete: handleDelete2, handleEdit, handleRetry, message }), [handleDelete2, handleEdit, handleRetry, message] ); return /* @__PURE__ */ import_react12.default.createElement(MessageBounceContext.Provider, { value }, children); } // src/context/MessageInputContext.tsx var import_react13 = __toESM(require("react")); var MessageInputContext = (0, import_react13.createContext)(void 0); var MessageInputContextProvider = ({ children, value }) => /* @__PURE__ */ import_react13.default.createElement(MessageInputContext.Provider, { value }, children); var useMessageInputContext = (componentName) => { const contextValue = (0, import_react13.useContext)(MessageInputContext); if (!contextValue) { console.warn( `The useMessageInputContext hook was called outside of the MessageInputContext provider. Make sure this hook is called within the MessageInput's UI component. The errored call is located in the ${componentName} component.` ); return {}; } return contextValue; }; // src/context/MessageListContext.tsx var import_react14 = __toESM(require("react")); var MessageListContext = (0, import_react14.createContext)(void 0); var MessageListContextProvider = ({ children, value }) => /* @__PURE__ */ import_react14.default.createElement(MessageListContext.Provider, { value }, children); var useMessageListContext = (componentName) => { const contextValue = (0, import_react14.useContext)(MessageListContext); if (!contextValue) { console.warn( `The useMessageListContext hook was called outside of the MessageListContext provider. Make sure this hook is called within the MessageList component. The errored call is located in the ${componentName} component.` ); return {}; } return contextValue; }; // src/context/PollContext.tsx var import_react15 = __toESM(require("react")); var PollContext = import_react15.default.createContext(void 0); var PollProvider = ({ children, poll }) => poll ? /* @__PURE__ */ import_react15.default.createElement(PollContext.Provider, { value: { poll } }, children) : null; var usePollContext = () => { const contextValue = (0, import_react15.useContext)(PollContext); return contextValue; }; // src/context/TranslationContext.tsx var import_react16 = __toESM(require("react")); var import_dayjs2 = __toESM(require("dayjs")); var import_calendar = __toESM(require("dayjs/plugin/calendar")); var import_localizedFormat = __toESM(require("dayjs/plugin/localizedFormat")); // src/i18n/utils.ts var import_dayjs = __toESM(require("dayjs")); var notValidDateWarning = "MessageTimestamp was called without a message, or message has invalid created_at date."; var noParsingFunctionWarning = "MessageTimestamp was called but there is no datetime parsing function available"; var isNumberOrString = (output) => typeof output === "string" || typeof output === "number"; var isDayOrMoment = (output) => !!output?.isSame; var isDate = (output) => !!output?.getMonth; function getDateString({ calendar: calendar3, calendarFormats, format, formatDate, messageCreatedAt, t: t2, tDateTimeParser, timestampTranslationKey }) { if (!messageCreatedAt || typeof messageCreatedAt === "string" && !Date.parse(messageCreatedAt)) { console.warn(notValidDateWarning); return null; } if (typeof formatDate === "function") { return formatDate(new Date(messageCreatedAt)); } if (t2 && timestampTranslationKey) { const options = {}; if (typeof calendar3 !== "undefined" && calendar3 !== null) options.calendar = calendar3; if (typeof calendarFormats !== "undefined" && calendarFormats !== null) options.calendarFormats = calendarFormats; if (typeof format !== "undefined" && format !== null) options.format = format; const translatedTimestamp = t2(timestampTranslationKey, { ...options, timestamp: new Date(messageCreatedAt) }); const translationKeyFound = timestampTranslationKey !== translatedTimestamp; if (translationKeyFound) return translatedTimestamp; } if (!tDateTimeParser) { console.warn(noParsingFunctionWarning); return null; } const parsedTime = tDateTimeParser(messageCreatedAt); if (isDayOrMoment(parsedTime)) { return calendar3 && parsedTime.calendar ? parsedTime.calendar(void 0, calendarFormats || void 0) : parsedTime.format(format || void 0); } if (isDate(parsedTime)) { return parsedTime.toDateString(); } if (isNumberOrString(parsedTime)) { return parsedTime; } return null; } var predefinedFormatters = { timestampFormatter: (streamI18n) => (value, _, { calendarFormats, ...options }) => { let parsedCalendarFormats; try { if (!options.calendar) { parsedCalendarFormats = {}; } else if (typeof calendarFormats === "string") { parsedCalendarFormats = JSON.parse(calendarFormats); } else if (typeof calendarFormats === "object") { parsedCalendarFormats = calendarFormats; } } catch (e2) { console.error("[TIMESTAMP FORMATTER]", e2); } const result = getDateString({ ...options, calendarFormats: parsedCalendarFormats, messageCreatedAt: value, tDateTimeParser: streamI18n.tDateTimeParser }); if (!result || typeof result === "number") { return JSON.stringify(value); } return result; } }; var defaultTranslatorFunction = (key) => key; var defaultDateTimeParser = (input) => (0, import_dayjs.default)(input); var isLanguageSupported = (language) => { const translations = ["de", "en", "es", "fr", "hi", "it", "ja", "ko", "nl", "pt", "ru", "tr"]; return translations.some((translation) => language === translation); }; // src/context/TranslationContext.tsx import_dayjs2.default.extend(import_calendar.default); import_dayjs2.default.extend(import_localizedFormat.default); var TranslationContext = import_react16.default.createContext({ t: defaultTranslatorFunction, tDateTimeParser: defaultDateTimeParser, userLanguage: "en" }); var TranslationProvider = ({ children, value }) => /* @__PURE__ */ import_react16.default.createElement(TranslationContext.Provider, { value }, children); var useTranslationContext = (componentName) => { const contextValue = (0, import_react16.useContext)(TranslationContext); if (!contextValue) { console.warn( `The useTranslationContext hook was called outside of the TranslationContext provider. Make sure this hook is called within a child of the Chat component. The errored call is located in the ${componentName} component.` ); return {}; } return contextValue; }; var withTranslationContext = (Component2) => { const WithTranslationContextComponent = (props) => { const translationContext = useTranslationContext(); return /* @__PURE__ */ import_react16.default.createElement(Component2, { ...props, ...translationContext }); }; WithTranslationContextComponent.displayName = `WithTranslationContext${getDisplayName( Component2 )}`; return WithTranslationContextComponent; }; // src/context/TypingContext.tsx var import_react17 = __toESM(require("react")); var TypingContext = import_react17.default.createContext(void 0); var TypingProvider = ({ children, value }) => /* @__PURE__ */ import_react17.default.createElement(TypingContext.Provider, { value }, children); var useTypingContext = (componentName) => { const contextValue = (0, import_react17.useContext)(TypingContext); if (!contextValue) { console.warn( `The useTypingContext hook was called outside of the TypingContext provider. Make sure this hook is called within a child of the Channel component. The errored call is located in the ${componentName} component.` ); return {}; } return contextValue; }; var withTypingContext = (Component2) => { const WithTypingContextComponent = (props) => { const typingContext = useTypingContext(); return /* @__PURE__ */ import_react17.default.createElement(Component2, { ...props, ...typingContext }); }; WithTypingContextComponent.displayName = (Component2.displayName || Component2.name || "Component").replace("Base", ""); return WithTypingContextComponent; }; // src/context/WithComponents.tsx var import_react18 = __toESM(require("react")); function WithComponents({ children, overrides }) { const parentOverrides = (0, import_react18.useContext)(ComponentContext); const actualOverrides = { ...parentOverrides, ...overrides }; return /* @__PURE__ */ import_react18.default.createElement(ComponentContext.Provider, { value: actualOverrides }, children); } // src/components/Attachment/AttachmentActions.tsx var UnMemoizedAttachmentActions = (props) => { const { actionHandler, actions, id, text: text5 } = props; const { t: t2 } = useTranslationContext("UnMemoizedAttachmentActions"); const handleActionClick = (event, name, value) => actionHandler?.(name, value, event); return /* @__PURE__ */ import_react19.default.createElement("div", { className: "str-chat__message-attachment-actions" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "str-chat__message-attachment-actions-form" }, /* @__PURE__ */ import_react19.default.createElement("span", null, text5), actions.map((action) => /* @__PURE__ */ import_react19.default.createElement( "button", { className: `str-chat__message-attachment-actions-button str-chat__message-attachment-actions-button--${action.style}`, "data-testid": `${action.name}`, "data-value": action.value, key: `${id}-${action.value}`, onClick: (event) => handleActionClick(event, action.name, action.value) }, action.text ? t2(action.text) : null )))); }; var AttachmentActions = import_react19.default.memo( UnMemoizedAttachmentActions ); // src/components/Attachment/Audio.tsx var import_react29 = __toESM(require("react")); // src/components/Attachment/components/DownloadButton.tsx var import_react22 = __toESM(require("react")); // src/components/Attachment/icons.tsx var import_react20 = __toESM(require("react")); var DownloadIcon = ({ className }) => /* @__PURE__ */ import_react20.default.createElement( "svg", { className, "data-testid": "download", fill: "none", height: "24", viewBox: "0 0 24 24", width: "24", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react20.default.createElement( "path", { d: "M19.35 10.04C18.67 6.59 15.64 4 12 4C9.11 4 6.6 5.64 5.35 8.04C2.34 8.36 0 10.91 0 14C0 17.31 2.69 20 6 20H19C21.76 20 24 17.76 24 15C24 12.36 21.95 10.22 19.35 10.04ZM19 18H6C3.79 18 2 16.21 2 14C2 11.95 3.53 10.24 5.56 10.03L6.63 9.92L7.13 8.97C8.08 7.14 9.94 6 12 6C14.62 6 16.88 7.86 17.39 10.43L17.69 11.93L19.22 12.04C20.78 12.14 22 13.45 22 15C22 16.65 20.65 18 19 18ZM13.45 10H10.55V13H8L12 17L16 13H13.45V10Z", fill: "black" } ) ); var PlayTriangleIcon = () => /* @__PURE__ */ import_react20.default.createElement("svg", { fill: "none", viewBox: "0 0 12 14", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react20.default.createElement("path", { d: "M0.5 0V14L11.5 7L0.5 0Z", fill: "#080707" })); var PauseIcon = () => /* @__PURE__ */ import_react20.default.createElement("svg", { fill: "none", viewBox: "0 0 12 14", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react20.default.createElement("path", { d: "M0 14H4V0H0V14ZM8 0V14H12V0H8Z", fill: "#080707" })); // src/components/SafeAnchor/SafeAnchor.tsx var import_react21 = __toESM(require("react")); var import_sanitize_url = require("@braintree/sanitize-url"); var UnMemoizedSafeAnchor = (props) => { const { children, className, download, href, rel, target } = props; const { t: t2 } = useTranslationContext("SafeAnchor"); if (!href) return null; const sanitized = (0, import_sanitize_url.sanitizeUrl)(href); return /* @__PURE__ */ import_react21.default.createElement( "a", { "aria-label": t2("aria/Attachment"), className, download, href: sanitized, rel, target }, children ); }; var SafeAnchor = import_react21.default.memo(UnMemoizedSafeAnchor); // src/components/Attachment/components/DownloadButton.tsx var DownloadButton = ({ assetUrl }) => /* @__PURE__ */ import_react22.default.createElement( SafeAnchor, { className: "str-chat__message-attachment-file--item-download", download: true, href: assetUrl, target: "_blank" }, /* @__PURE__ */ import_react22.default.createElement(DownloadIcon, { className: "str-chat__message-attachment-download-icon" }) ); // src/components/Attachment/components/FileSizeIndicator.tsx var import_react23 = __toESM(require("react")); // src/constants/limits.ts var DEFAULT_INITIAL_CHANNEL_PAGE_SIZE = 25; var DEFAULT_NEXT_CHANNEL_PAGE_SIZE = 100; var DEFAULT_JUMP_TO_PAGE_SIZE = 100; var DEFAULT_THREAD_PAGE_SIZE = 50; var DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD = 250; var DEFAULT_UPLOAD_SIZE_LIMIT_BYTES = 100 * 1024 * 1024; var DEFAULT_HIGHLIGHT_DURATION = 500; // src/components/MessageInput/hooks/utils.ts var accentsMap = { a: "\xE1|\xE0|\xE3|\xE2|\xC0|\xC1|\xC3|\xC2", c: "\xE7|\xC7", e: "\xE9|\xE8|\xEA|\xC9|\xC8|\xCA", i: "\xED|\xEC|\xEE|\xCD|\xCC|\xCE", n: "\xF1|\xD1", o: "\xF3|\xF2|\xF4|\u0151|\xF5|\xD3|\xD2|\xD4|\xD5", u: "\xFA|\xF9|\xFB|\xFC|\xDA|\xD9|\xDB|\xDC" }; var removeDiacritics = (text5) => { if (!text5) return ""; return Object.keys(accentsMap).reduce( (acc, current) => acc.replace(new RegExp(accentsMap[current], "g"), current), text5 ); }; var calculateLevenshtein = (query, name) => { if (query.length === 0) return name.length; if (name.length === 0) return query.length; const matrix = []; let i; for (i = 0; i <= name.length; i++) { matrix[i] = [i]; } let j; for (j = 0; j <= query.length; j++) { matrix[0][j] = j; } for (i = 1; i <= name.length; i++) { for (j = 1; j <= query.length; j++) { if (name.charAt(i - 1) === query.charAt(j - 1)) { matrix[i][j] = matrix[i - 1][j - 1]; } else { matrix[i][j] = Math.min( matrix[i - 1][j - 1] + 1, // substitution Math.min( matrix[i][j - 1] + 1, // insertion matrix[i - 1][j] + 1 ) ); } } } return matrix[name.length][query.length]; }; var searchLocalUsers = (params) => { const { ownUserId, query, text: text5, useMentionsTransliteration, users } = params; const matchingUsers = users.filter((user) => { if (user.id === ownUserId) return false; if (!query) return true; let updatedId = removeDiacritics(user.id).toLowerCase(); let updatedName = removeDiacritics(user.name).toLowerCase(); let updatedQuery = removeDiacritics(query).toLowerCase(); if (useMentionsTransliteration) { (async () => { const { default: transliterate } = await Promise.resolve().then(() => (init_index_modern(), index_modern_exports)); updatedName = transliterate(user.name || "").toLowerCase(); updatedQuery = transliterate(query).toLowerCase(); updatedId = transliterate(user.id).toLowerCase(); })(); } const maxDistance = 3; const lastDigits = text5.slice(-(maxDistance + 1)).includes("@"); if (updatedName) { const levenshtein2 = calculateLevenshtein(updatedQuery, updatedName); if (updatedName.includes(updatedQuery) || levenshtein2 <= maxDistance && lastDigits) { return true; } } const levenshtein = calculateLevenshtein(updatedQuery, updatedId); return updatedId.includes(updatedQuery) || levenshtein <= maxDistance && lastDigits; }); return matchingUsers; }; var checkUploadPermissions = async (params) => { const { addNotification, file, getAppSettings, t: t2, uploadType } = params; let appSettings = null; appSettings = await getAppSettings(); const { allowed_file_extensions, allowed_mime_types, blocked_file_extensions, blocked_mime_types, size_limit } = (uploadType === "image" ? appSettings?.app?.image_upload_config : appSettings?.app?.file_upload_config) || {}; const sendNotAllowedErrorNotification = () => addNotification( t2(`Upload type: "{{ type }}" is not allowed`, { type: file.type || "unknown type" }), "error" ); if (allowed_file_extensions?.length) { const allowed = allowed_file_extensions.some( (ext) => file.name.toLowerCase().endsWith(ext.toLowerCase()) ); if (!allowed) { sendNotAllowedErrorNotification(); return false; } } if (blocked_file_extensions?.length) { const blocked = blocked_file_extensions.some( (ext) => file.name.toLowerCase().endsWith(ext.toLowerCase()) ); if (blocked) { sendNotAllowedErrorNotification(); return false; } } if (allowed_mime_types?.length) { const allowed = allowed_mime_types.some( (type) => type.toLowerCase() === file.type?.toLowerCase() ); if (!allowed) { sendNotAllowedErrorNotification(); return false; } } if (blocked_mime_types?.length) { const blocked = blocked_mime_types.some( (type) => type.toLowerCase() === file.type?.toLowerCase() ); if (blocked) { sendNotAllowedErrorNotification(); return false; } } const sizeLimit = size_limit || DEFAULT_UPLOAD_SIZE_LIMIT_BYTES; if (file.size && file.size > sizeLimit) { addNotification( t2("File is too large: {{ size }}, maximum upload size is {{ limit }}", { limit: prettifyFileSize(sizeLimit), size: prettifyFileSize(file.size) }), "error" ); return false; } return true; }; function prettifyFileSize(bytes, precision = 3) { const units = ["B", "kB", "MB", "GB"]; const exponent = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1); const mantissa = bytes / 1024 ** exponent; const formattedMantissa = precision === 0 ? Math.round(mantissa).toString() : mantissa.toPrecision(precision); return `${formattedMantissa} ${units[exponent]}`; } // src/components/Attachment/components/FileSizeIndicator.tsx var FileSizeIndicator = ({ fileSize, maximumFractionDigits }) => { if (!(fileSize && Number.isFinite(Number(fileSize)))) return null; return /* @__PURE__ */ import_react23.default.createElement( "span", { className: "str-chat__message-attachment-file--item-size", "data-testid": "file-size-indicator" }, prettifyFileSize(fileSize, maximumFractionDigits) ); }; // src/components/Attachment/components/ProgressBar.tsx var import_clsx = __toESM(require("clsx")); var import_react24 = __toESM(require("react")); var ProgressBar = ({ className, onClick, progress }) => /* @__PURE__ */ import_react24.default.createElement( "div", { className: (0, import_clsx.default)("str-chat__message-attachment-audio-widget--progress-track", className), "data-progress": progress, "data-testid": "audio-progress", onClick, role: "progressbar", style: { "--str-chat__message-attachment-audio-widget-progress": progress + "%" } }, /* @__PURE__ */ import_react24.default.createElement( "div", { className: "str-chat__message-attachment-audio-widget--progress-slider", style: { left: `${progress}px` } } ) ); // src/components/Attachment/components/PlaybackRateButton.tsx var import_react25 = __toESM(require("react")); var PlaybackRateButton = ({ children, onClick }) => /* @__PURE__ */ import_react25.default.createElement( "button", { className: "str-chat__message_attachment__playback-rate-button", "data-testid": "playback-rate-button", onClick }, children ); // src/components/Attachment/components/PlayButton.tsx var import_react26 = __toESM(require("react")); var PlayButton = ({ isPlaying, onClick }) => /* @__PURE__ */ import_react26.default.createElement( "button", { className: "str-chat__message-attachment-audio-widget--play-button", "data-testid": isPlaying ? "pause-audio" : "play-audio", onClick }, isPlaying ? /* @__PURE__ */ import_react26.default.createElement(PauseIcon, null) : /* @__PURE__ */ import_react26.default.createElement(PlayTriangleIcon, null) ); // src/components/Attachment/components/WaveProgressBar.tsx var import_lodash2 = __toESM(require("lodash.throttle")); var import_react27 = __toESM(require("react")); var import_clsx2 = __toESM(require("clsx")); // src/components/Attachment/audioSampling.ts var resampleWaveformData = (waveformData, amplitudesCount) => waveformData.length === amplitudesCount ? waveformData : waveformData.length > amplitudesCount ? downSample(waveformData, amplitudesCount) : upSample(waveformData, amplitudesCount); function downSample(data, targetOutputSize) { if (data.length <= targetOutputSize || targetOutputSize === 0) { return data; } if (targetOutputSize === 1) return [mean(data)]; const result = []; const bucketSize = (data.length - 2) / (targetOutputSize - 2); let lastSelectedPointIndex = 0; result.push(data[lastSelectedPointIndex]); let maxAreaPoint, maxArea, triangleArea; for (let bucketIndex = 1; bucketIndex < targetOutputSize - 1; bucketIndex++) { const previousBucketRefPoint = data[lastSelectedPointIndex]; const nextBucketMean = getNextBucketMean(data, bucketIndex, bucketSize); const currentBucketStartIndex = Math.floor((bucketIndex - 1) * bucketSize) + 1; const nextBucketStartIndex = Math.floor(bucketIndex * bucketSize) + 1; const countUnitsBetweenAtoC = 1 + nextBucketStartIndex - currentBucketStartIndex; maxArea = triangleArea = -1; for (let currentPointIndex = currentBucketStartIndex; currentPointIndex < nextBucketStartIndex; currentPointIndex++) { const countUnitsBetweenAtoB = Math.abs(currentPointIndex - currentBucketStartIndex) + 1; const countUnitsBetweenBtoC = countUnitsBetweenAtoC - countUnitsBetweenAtoB; const currentPointValue = data[currentPointIndex]; triangleArea = triangleAreaHeron( triangleBase(Math.abs(previousBucketRefPoint - currentPointValue), countUnitsBetweenAtoB), triangleBase(Math.abs(currentPointValue - nextBucketMean), countUnitsBetweenBtoC), triangleBase(Math.abs(previousBucketRefPoint - nextBucketMean), countUnitsBetweenAtoC) ); if (triangleArea > maxArea) { maxArea = triangleArea; maxAreaPoint = data[currentPointIndex]; lastSelectedPointIndex = currentPointIndex; } } if (typeof maxAreaPoint !== "undefined") result.push(maxAreaPoint); } result.push(data[data.length - 1]); return result; } var triangleAreaHeron = (a2, b, c) => { const s2 = (a2 + b + c) / 2; return Math.sqrt(s2 * (s2 - a2) * (s2 - b) * (s2 - c)); }; var triangleBase = (a2, b) => Math.sqrt(Math.pow(a2, 2) + Math.pow(b, 2)); var mean = (values) => values.reduce((acc, value) => acc + value, 0) / values.length; var getNextBucketMean = (data, currentBucketIndex, bucketSize) => { const nextBucketStartIndex = Math.floor(currentBucketIndex * bucketSize) + 1; let nextNextBucketStartIndex = Math.floor((currentBucketIndex + 1) * bucketSize) + 1; nextNextBucketStartIndex = nextNextBucketStartIndex < data.length ? nextNextBucketStartIndex : data.length; return mean(data.slice(nextBucketStartIndex, nextNextBucketStartIndex)); }; var upSample = (values, targetSize) => { if (!values.length) { console.warn("Cannot extend empty array of amplitudes."); return values; } if (values.length > targetSize) { console.warn("Requested to extend the waveformData that is longer than the target list size"); return values; } if (targetSize === values.length) return values; let [bucketSize, remainder] = divMod(targetSize, values.length); const result = []; for (let i = 0; i < values.length; i++) { const extra = remainder && remainder-- ? 1 : 0; result.push(...Array(bucketSize + extra).fill(values[i])); } return result; }; // src/components/Attachment/components/WaveProgressBar.tsx var WaveProgressBar = ({ amplitudesCount = 40, progress = 0, relativeAmplitudeBarWidth = 2, relativeAmplitudeGap = 1, seek, waveformData }) => { const [progressIndicator, setProgressIndicator] = (0, import_react27.useState)(null); const isDragging = (0, import_react27.useRef)(false); const [root2, setRoot] = (0, import_react27.useState)(null); const [trackAxisX, setTrackAxisX] = (0, import_react27.useState)(); const lastRootWidth = (0, import_react27.useRef)(); const handleDragStart = (e2) => { e2.preventDefault(); if (!progressIndicator) return; isDragging.current = true; progressIndicator.style.cursor = "grabbing"; }; const handleDrag = (e2) => { if (!isDragging.current) return; seek({ ...e2 }); }; const handleDragStop = (0, import_react27.useCallback)(() => { if (!progressIndicator) return; isDragging.current = false; progressIndicator.style.removeProperty("cursor"); }, [progressIndicator]); const getTrackAxisX = (0, import_react27.useMemo)( () => (0, import_lodash2.default)((rootWidth) => { if (rootWidth === lastRootWidth.current) return; lastRootWidth.current = rootWidth; const possibleAmpCount = Math.floor( rootWidth / (relativeAmplitudeGap + relativeAmplitudeBarWidth) ); const tooManyAmplitudesToRender = possibleAmpCount < amplitudesCount; const barCount = tooManyAmplitudesToRender ? possibleAmpCount : amplitudesCount; const amplitudeBarWidthToGapRatio = relativeAmplitudeBarWidth / (relativeAmplitudeBarWidth + relativeAmplitudeGap); const barWidth = barCount && rootWidth / barCount * amplitudeBarWidthToGapRatio; setTrackAxisX({ barCount, barWidth, gap: barWidth * (relativeAmplitudeGap / relativeAmplitudeBarWidth) }); }, 1), [relativeAmplitudeBarWidth, relativeAmplitudeGap, amplitudesCount] ); const resampledWaveformData = (0, import_react27.useMemo)( () => trackAxisX ? resampleWaveformData(waveformData, trackAxisX.barCount) : [], [trackAxisX, waveformData] ); (0, import_react27.useEffect)(() => { document.addEventListener("pointerup", handleDragStop); return () => { document.removeEventListener("pointerup", handleDragStop); }; }, [handleDragStop]); (0, import_react27.useEffect)(() => { if (!root2 || typeof ResizeObserver === "undefined") return; const observer = new ResizeObserver(([entry]) => { getTrackAxisX(entry.contentRect.width); }); observer.observe(root2); return () => { observer.disconnect(); }; }, [getTrackAxisX, root2]); (0, import_react27.useLayoutEffect)(() => { if (!root2) return; const { width: rootWidth } = root2.getBoundingClientRect(); getTrackAxisX(rootWidth); }, [getTrackAxisX, root2]); if (!waveformData.length || trackAxisX?.barCount === 0) return null; return /* @__PURE__ */ import_react27.default.createElement( "div", { className: "str-chat__wave-progress-bar__track", "data-testid": "wave-progress-bar-track", onClick: seek, onPointerDown: handleDragStart, onPointerMove: handleDrag, onPointerUp: handleDragStop, ref: setRoot, role: "progressbar", style: { "--str-chat__voice-recording-amplitude-bar-gap-width": trackAxisX?.gap + "px" } }, resampledWaveformData.map((amplitude, i) => /* @__PURE__ */ import_react27.default.createElement( "div", { className: (0, import_clsx2.default)("str-chat__wave-progress-bar__amplitude-bar", { ["str-chat__wave-progress-bar__amplitude-bar--active"]: progress > i / resampledWaveformData.length * 100 }), "data-testid": "amplitude-bar", key: `amplitude-${i}`, style: { "--str-chat__voice-recording-amplitude-bar-width": trackAxisX?.barWidth + "px", "--str-chat__wave-progress-bar__amplitude-bar-height": amplitude ? amplitude * 100 + "%" : "0%" } } )), /* @__PURE__ */ import_react27.default.createElement( "div", { className: "str-chat__wave-progress-bar__progress-indicator", "data-testid": "wave-progress-bar-progress-indicator", ref: setProgressIndicator, style: { left: `${progress < 0 ? 0 : progress > 100 ? 100 : progress}%` } } ) ); }; // src/components/Attachment/hooks/useAudioController.ts var import_lodash3 = __toESM(require("lodash.throttle")); var import_react28 = require("react"); var isSeekable = (audioElement) => !(audioElement.duration === Infinity || isNaN(audioElement.duration)); var elementIsPlaying = (audioElement) => audioElement && !(audioElement.paused || audioElement.ended); var logError = (e2) => console.error("[AUDIO PLAYER]", e2); var DEFAULT_PLAYBACK_RATES = [1, 1.5, 2]; var useAudioController = ({ durationSeconds, mimeType, playbackRates = DEFAULT_PLAYBACK_RATES } = {}) => { const { addNotification } = useChannelActionContext("useAudioController"); const { t: t2 } = useTranslationContext("useAudioController"); const [isPlaying, setIsPlaying] = (0, import_react28.useState)(false); const [playbackError, setPlaybackError] = (0, import_react28.useState)(); const [canPlayRecord, setCanPlayRecord] = (0, import_react28.useState)(true); const [secondsElapsed, setSecondsElapsed] = (0, import_react28.useState)(0); const [playbackRateIndex, setPlaybackRateIndex] = (0, import_react28.useState)(0); const playTimeout = (0, import_react28.useRef)(); const audioRef = (0, import_react28.useRef)(null); const registerError = (0, import_react28.useCallback)( (e2) => { logError(e2); setPlaybackError(e2); addNotification(e2.message, "error"); }, [addNotification] ); const togglePlay = (0, import_react28.useCallback)(async () => { if (!audioRef.current) return; clearTimeout(playTimeout.current); playTimeout.current = void 0; if (mimeType && !audioRef.current.canPlayType(mimeType)) { registerError(new Error(t2("Recording format is not supported and cannot be reproduced"))); setCanPlayRecord(false); return; } if (elementIsPlaying(audioRef.current)) { audioRef.current.pause(); setIsPlaying(false); } else { playTimeout.current = setTimeout(() => { if (!audioRef.current) return; try { audioRef.current.pause(); setIsPlaying(false); } catch (e2) { registerError(new Error(t2("Failed to play the recording"))); } }, 2e3); try { await audioRef.current.play(); setIsPlaying(true); } catch (e2) { registerError(e2); setIsPlaying(false); } finally { clearTimeout(playTimeout.current); playTimeout.current = void 0; } } }, [mimeType, registerError, t2]); const increasePlaybackRate = () => { setPlaybackRateIndex((prev) => { if (!audioRef.current) return prev; const nextIndex = prev === playbackRates.length - 1 ? 0 : prev + 1; audioRef.current.playbackRate = playbackRates[nextIndex]; return nextIndex; }); }; const seek = (0, import_react28.useMemo)( () => (0, import_lodash3.default)(({ clientX, currentTarget }) => { if (!(currentTarget && audioRef.current)) return; if (!isSeekable(audioRef.current)) { registerError(new Error(t2("Cannot seek in the recording"))); return; } const { width, x } = currentTarget.getBoundingClientRect(); const ratio = (clientX - x) / width; if (ratio > 1 || ratio < 0) return; const currentTime = ratio * audioRef.current.duration; setSecondsElapsed(currentTime); audioRef.current.currentTime = currentTime; }, 16), [registerError, t2] ); (0, import_react28.useEffect)(() => { if (!audioRef.current) return; const audioElement = audioRef.current; const handleEnded = () => { setSecondsElapsed(audioElement?.duration ?? durationSeconds ?? 0); setIsPlaying(false); }; audioElement.addEventListener("ended", handleEnded); const handleError = () => { addNotification(t2("Error reproducing the recording"), "error"); setIsPlaying(false); }; audioElement.addEventListener("error", handleError); const handleTimeupdate = () => { setSecondsElapsed(audioElement?.currentTime); }; audioElement.addEventListener("timeupdate", handleTimeupdate); return () => { audioElement.pause(); audioElement.removeEventListener("ended", handleEnded); audioElement.removeEventListener("error", handleError); audioElement.removeEventListener("timeupdate", handleTimeupdate); }; }, [addNotification, durationSeconds, t2]); return { audioRef, canPlayRecord, increasePlaybackRate, isPlaying, playbackError, playbackRate: playbackRates[playbackRateIndex], progress: audioRef.current && secondsElapsed ? secondsElapsed / audioRef.current.duration * 100 : 0, secondsElapsed, seek, togglePlay }; }; // src/components/Attachment/Audio.tsx var UnMemoizedAudio = (props) => { const { og: { asset_url, file_size, mime_type, title } } = props; const { audioRef, isPlaying, progress, seek, togglePlay } = useAudioController({ mimeType: mime_type }); if (!asset_url) return null; const dataTestId = "audio-widget"; const rootClassName2 = "str-chat__message-attachment-audio-widget"; return /* @__PURE__ */ import_react29.default.createElement("div", { className: rootClassName2, "data-testid": dataTestId }, /* @__PURE__ */ import_react29.default.createElement("audio", { ref: audioRef }, /* @__PURE__ */ import_react29.default.createElement("source", { "data-testid": "audio-source", src: asset_url, type: "audio/mp3" })), /* @__PURE__ */ import_react29.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--play-controls" }, /* @__PURE__ */ import_react29.default.createElement(PlayButton, { isPlaying, onClick: togglePlay })), /* @__PURE__ */ import_react29.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--text" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--text-first-row" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--title" }, title), /* @__PURE__ */ import_react29.default.createElement(DownloadButton, { assetUrl: asset_url })), /* @__PURE__ */ import_react29.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--text-second-row" }, /* @__PURE__ */ import_react29.default.createElement(FileSizeIndicator, { fileSize: file_size }), /* @__PURE__ */ import_react29.default.createElement(ProgressBar, { onClick: seek, progress })))); }; var Audio = import_react29.default.memo(UnMemoizedAudio); // src/components/Attachment/VoiceRecording.tsx var import_react35 = __toESM(require("react")); // src/components/ReactFileUtilities/FileIcon/FileIcon.tsx var import_react31 = __toESM(require("react")); // src/components/ReactFileUtilities/FileIcon/FileIconSet.tsx var import_react30 = __toESM(require("react")); var import_clsx3 = __toESM(require("clsx")); var DEFAULT_SIZE = 40; var FilePdfIcon = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-pdf", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z", fill: "#F5F5F5" } ), /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z", fill: "#E71A01" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#DBDBDB" }), /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M16.39 8.90641C16.215 8.27341 15.787 7.95841 15.426 8.00441C14.99 8.06141 14.526 8.32041 14.34 8.72941C13.854 9.82141 14.768 12.8934 15.028 13.7674L15.073 13.9194C14.015 17.1134 10.394 23.4264 8.62002 23.8534C8.58302 23.4364 8.80602 22.2294 11.146 20.7244C11.266 20.5944 11.406 20.4374 11.471 20.3344C9.49302 21.3004 6.93108 22.8514 8.47102 24.0114C8.55602 24.0774 8.68502 24.1314 8.83402 24.1874C10.014 24.6244 11.666 23.1954 13.327 19.9544C15.157 19.3504 16.633 18.8964 18.722 18.5804C21.005 20.1304 22.538 20.4464 23.578 20.0474C23.866 19.9354 24.32 19.5734 24.45 19.1004C24.515 18.8774 24.608 18.5154 24.432 18.2274C23.842 17.2664 21.452 17.5954 20.032 17.7904C19.779 17.8254 19.557 17.8564 19.381 17.8744C17.552 16.7704 16.289 14.8014 15.778 13.3804C15.857 13.0784 15.936 12.7894 16.012 12.5124C16.397 11.1124 16.701 10.0064 16.392 8.90641H16.39ZM24.45 19.1004C23.605 20.1404 21.628 19.4164 20.05 18.4224C21.507 18.2644 23.01 18.1724 23.661 18.3764C24.488 18.6364 24.459 19.0444 24.451 19.1004H24.45ZM15.601 12.7404C15.296 11.6544 14.868 9.24041 15.555 8.46041C16.701 9.11641 16.266 10.5384 15.825 11.9834C15.748 12.2364 15.671 12.4894 15.601 12.7404ZM13.439 19.5834C15.156 18.9054 16.354 18.4494 18.118 18.1254C16.818 16.9554 16.028 15.6834 15.378 14.3834C14.915 16.0554 13.948 18.5894 13.438 19.5834H13.439Z", fill: "#E71A01", fillRule: "evenodd" } ), /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M13.1719 33.0127V37.4219H12.1875V32.3018H13.1001L13.1719 33.0127ZM15.5132 34.1099V34.1816C15.5132 34.4505 15.4813 34.7 15.4175 34.9302C15.356 35.1603 15.2648 35.3608 15.144 35.5317C15.0233 35.7004 14.8729 35.8325 14.6929 35.9282C14.5151 36.0216 14.3101 36.0684 14.0776 36.0684C13.8521 36.0684 13.6561 36.0228 13.4897 35.9316C13.3234 35.8405 13.1833 35.7129 13.0693 35.5488C12.9577 35.3825 12.8677 35.1899 12.7993 34.9712C12.731 34.7524 12.6785 34.5177 12.6421 34.2671V34.0791C12.6785 33.8102 12.731 33.5641 12.7993 33.3408C12.8677 33.1152 12.9577 32.9204 13.0693 32.7563C13.1833 32.59 13.3223 32.4613 13.4863 32.3701C13.6527 32.279 13.8475 32.2334 14.0708 32.2334C14.3055 32.2334 14.5117 32.2778 14.6895 32.3667C14.8695 32.4556 15.0199 32.5832 15.1406 32.7495C15.2637 32.9159 15.356 33.1141 15.4175 33.3442C15.4813 33.5744 15.5132 33.8296 15.5132 34.1099ZM14.5254 34.1816V34.1099C14.5254 33.9526 14.5117 33.8079 14.4844 33.6758C14.4593 33.5413 14.4183 33.424 14.3613 33.3237C14.3066 33.2235 14.2337 33.146 14.1426 33.0913C14.0537 33.0343 13.9455 33.0059 13.8179 33.0059C13.6834 33.0059 13.5684 33.0275 13.4727 33.0708C13.3792 33.1141 13.3029 33.1768 13.2437 33.2588C13.1844 33.3408 13.14 33.4388 13.1104 33.5527C13.0807 33.6667 13.0625 33.7954 13.0557 33.939V34.4141C13.0671 34.5827 13.099 34.7342 13.1514 34.8687C13.2038 35.0008 13.2847 35.1056 13.394 35.1831C13.5034 35.2606 13.647 35.2993 13.8247 35.2993C13.9546 35.2993 14.064 35.2708 14.1528 35.2139C14.2417 35.1546 14.3135 35.0737 14.3682 34.9712C14.4251 34.8687 14.465 34.7502 14.4878 34.6157C14.5129 34.4813 14.5254 34.3366 14.5254 34.1816ZM18.3091 35.1934V30.75H19.3003V36H18.4082L18.3091 35.1934ZM15.9712 34.1953V34.1235C15.9712 33.841 16.0031 33.5846 16.0669 33.3545C16.1307 33.1221 16.2241 32.9227 16.3472 32.7563C16.4702 32.59 16.6217 32.4613 16.8018 32.3701C16.9818 32.279 17.1868 32.2334 17.417 32.2334C17.6335 32.2334 17.8226 32.279 17.9844 32.3701C18.1484 32.4613 18.2874 32.5911 18.4014 32.7598C18.5176 32.9261 18.611 33.1232 18.6816 33.3511C18.7523 33.5767 18.8035 33.8239 18.8354 34.0928V34.25C18.8035 34.5075 18.7523 34.7467 18.6816 34.9678C18.611 35.1888 18.5176 35.3825 18.4014 35.5488C18.2874 35.7129 18.1484 35.8405 17.9844 35.9316C17.8203 36.0228 17.6289 36.0684 17.4102 36.0684C17.18 36.0684 16.9749 36.0216 16.7949 35.9282C16.6172 35.8348 16.4668 35.7038 16.3438 35.5352C16.223 35.3665 16.1307 35.1683 16.0669 34.9404C16.0031 34.7126 15.9712 34.4642 15.9712 34.1953ZM16.9556 34.1235V34.1953C16.9556 34.348 16.967 34.4904 16.9897 34.6226C17.0148 34.7547 17.0547 34.8721 17.1094 34.9746C17.1663 35.0749 17.2393 35.1535 17.3281 35.2104C17.4193 35.2651 17.5298 35.2925 17.6597 35.2925C17.8283 35.2925 17.9673 35.2549 18.0767 35.1797C18.186 35.1022 18.2692 34.9963 18.3262 34.8618C18.3854 34.7274 18.4196 34.5724 18.4287 34.397V33.9492C18.4219 33.8057 18.4014 33.6769 18.3672 33.563C18.3353 33.4468 18.2874 33.3477 18.2236 33.2656C18.1621 33.1836 18.0846 33.1198 17.9912 33.0742C17.9001 33.0286 17.7918 33.0059 17.6665 33.0059C17.5389 33.0059 17.4295 33.0355 17.3384 33.0947C17.2472 33.1517 17.1732 33.2303 17.1162 33.3306C17.0615 33.4308 17.0205 33.5493 16.9932 33.686C16.9681 33.8205 16.9556 33.9663 16.9556 34.1235ZM21.3237 36H20.3325V31.9736C20.3325 31.6934 20.3872 31.4575 20.4966 31.2661C20.6082 31.0724 20.7643 30.9266 20.9648 30.8286C21.1676 30.7284 21.408 30.6782 21.686 30.6782C21.7772 30.6782 21.8649 30.6851 21.9492 30.6987C22.0335 30.7101 22.1156 30.7249 22.1953 30.7432L22.1851 31.4849C22.1418 31.4735 22.0962 31.4655 22.0483 31.4609C22.0005 31.4564 21.9447 31.4541 21.8809 31.4541C21.7624 31.4541 21.661 31.4746 21.5767 31.5156C21.4946 31.5544 21.432 31.6125 21.3887 31.6899C21.3454 31.7674 21.3237 31.862 21.3237 31.9736V36ZM22.062 32.3018V32.999H19.7822V32.3018H22.062Z", fill: "white" } ) ); var FileWordIcon = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-word", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z", fill: "#4285F4" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z", fill: "#F5F5F5" }), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#DBDBDB" }), /* @__PURE__ */ import_react30.default.createElement("path", { clipRule: "evenodd", d: "M8 13H23V15H8V13Z", fill: "#4285F4", fillRule: "evenodd" }), /* @__PURE__ */ import_react30.default.createElement("path", { clipRule: "evenodd", d: "M8 17H18V19H8V17Z", fill: "#4285F4", fillRule: "evenodd" }), /* @__PURE__ */ import_react30.default.createElement("path", { clipRule: "evenodd", d: "M8 21H23V23H8V21Z", fill: "#4285F4", fillRule: "evenodd" }) ); var FileWordIconAlt = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-word-alt", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z", fill: "url(#paint0_linear_11084_64)" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#3670D3" }), /* @__PURE__ */ import_react30.default.createElement("path", { clipRule: "evenodd", d: "M8 13H23V15H8V13Z", fill: "#C1D8FF", fillRule: "evenodd" }), /* @__PURE__ */ import_react30.default.createElement("path", { clipRule: "evenodd", d: "M8 17H18V19H8V17Z", fill: "#C1D8FF", fillRule: "evenodd" }), /* @__PURE__ */ import_react30.default.createElement("path", { clipRule: "evenodd", d: "M8 21H23V23H8V21Z", fill: "#C1D8FF", fillRule: "evenodd" }), /* @__PURE__ */ import_react30.default.createElement("defs", null, /* @__PURE__ */ import_react30.default.createElement( "linearGradient", { gradientUnits: "userSpaceOnUse", id: "paint0_linear_11084_64", x1: "0", x2: "0", y1: "0", y2: "40" }, /* @__PURE__ */ import_react30.default.createElement("stop", { stopColor: "#79A4F2" }), /* @__PURE__ */ import_react30.default.createElement("stop", { offset: "1", stopColor: "#3375E2" }) )) ); var FilePowerPointIcon = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-powerpoint", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M17.7168 33.172C18.2348 33.172 18.4238 33.655 18.4238 34.18C18.4238 34.642 18.2978 35.195 17.7168 35.195C17.1708 35.195 16.9888 34.642 16.9888 34.145C16.9888 33.683 17.1708 33.172 17.7168 33.172ZM19.5718 31.002H18.3818V32.7589H18.3678C18.1228 32.43 17.7798 32.262 17.3318 32.262C16.3028 32.262 15.7988 33.158 15.7988 34.103C15.7988 35.125 16.2818 36.1049 17.4228 36.1049C17.8428 36.1049 18.1928 35.923 18.4238 35.58H18.4378V36H19.5718V31.002ZM12.7095 34.1872C12.7095 33.7252 12.8775 33.1722 13.4305 33.1722C13.9835 33.1722 14.1585 33.7252 14.1585 34.1872C14.1585 34.6492 13.9835 35.1952 13.4305 35.1952C12.8775 35.1952 12.7095 34.6492 12.7095 34.1872ZM11.5195 34.1872C11.5195 35.2792 12.3035 36.1052 13.4305 36.1052C14.5575 36.1052 15.3485 35.2792 15.3485 34.1872C15.3485 33.0952 14.5575 32.2622 13.4305 32.2622C12.3035 32.2622 11.5195 33.0952 11.5195 34.1872ZM21.839 32.3671H22.574V33.1371H21.839V34.7891C21.839 35.0761 22.007 35.1391 22.266 35.1391C22.3142 35.1391 22.364 35.1357 22.4147 35.1323C22.4672 35.1287 22.5206 35.1251 22.574 35.1251V36.0001C22.481 36.0031 22.388 36.0099 22.295 36.0168C22.171 36.0259 22.047 36.0351 21.923 36.0351C20.908 36.0351 20.649 35.7411 20.649 34.7541V33.1371H20.047V32.3671H20.649V31.2681H21.839V32.3671Z", fill: "white", fillRule: "evenodd" } ), /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z", fill: "#D65537" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z", fill: "#F5F5F5" }), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#DBDBDB" }), /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M7 12C7 10.8954 7.89543 10 9 10H19C20.1046 10 21 10.8954 21 12V18C21 19.1046 20.1046 20 19 20H9C7.89543 20 7 19.1046 7 18V12ZM9 12H19V18H9V12ZM25 22C25 23.1046 24.1046 24 23 24H11V22H23V15H25V22Z", fill: "#D65537", fillRule: "evenodd" } ) ); var FilePowerPointIconAlt = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-powerpoint-alt", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z", fill: "url(#paint0_linear_11084_76)" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#AB381D" }), /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M7 12C7 10.8954 7.89543 10 9 10H19C20.1046 10 21 10.8954 21 12V18C21 19.1046 20.1046 20 19 20H9C7.89543 20 7 19.1046 7 18V12ZM9 12H19V18H9V12ZM25 22C25 23.1046 24.1046 24 23 24H11V22H23V15H25V22Z", fill: "#FFB3A0", fillRule: "evenodd" } ), /* @__PURE__ */ import_react30.default.createElement("defs", null, /* @__PURE__ */ import_react30.default.createElement( "linearGradient", { gradientUnits: "userSpaceOnUse", id: "paint0_linear_11084_76", x1: "0", x2: "0", y1: "0", y2: "40" }, /* @__PURE__ */ import_react30.default.createElement("stop", { stopColor: "#DC7259" }), /* @__PURE__ */ import_react30.default.createElement("stop", { offset: "1", stopColor: "#D14423" }) )) ); var FileExcelIcon = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-excel", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M17.7168 33.172C18.2348 33.172 18.4238 33.655 18.4238 34.18C18.4238 34.642 18.2978 35.195 17.7168 35.195C17.1708 35.195 16.9888 34.642 16.9888 34.145C16.9888 33.683 17.1708 33.172 17.7168 33.172ZM19.5718 31.002H18.3818V32.7589H18.3678C18.1228 32.43 17.7798 32.262 17.3318 32.262C16.3028 32.262 15.7988 33.158 15.7988 34.103C15.7988 35.125 16.2818 36.1049 17.4228 36.1049C17.8428 36.1049 18.1928 35.923 18.4238 35.58H18.4378V36H19.5718V31.002ZM12.7095 34.1872C12.7095 33.7252 12.8775 33.1722 13.4305 33.1722C13.9835 33.1722 14.1585 33.7252 14.1585 34.1872C14.1585 34.6492 13.9835 35.1952 13.4305 35.1952C12.8775 35.1952 12.7095 34.6492 12.7095 34.1872ZM11.5195 34.1872C11.5195 35.2792 12.3035 36.1052 13.4305 36.1052C14.5575 36.1052 15.3485 35.2792 15.3485 34.1872C15.3485 33.0952 14.5575 32.2622 13.4305 32.2622C12.3035 32.2622 11.5195 33.0952 11.5195 34.1872ZM21.839 32.3671H22.574V33.1371H21.839V34.7891C21.839 35.0761 22.007 35.1391 22.266 35.1391C22.3142 35.1391 22.364 35.1357 22.4147 35.1323C22.4672 35.1287 22.5206 35.1251 22.574 35.1251V36.0001C22.481 36.0031 22.388 36.0099 22.295 36.0168C22.171 36.0259 22.047 36.0351 21.923 36.0351C20.908 36.0351 20.649 35.7411 20.649 34.7541V33.1371H20.047V32.3671H20.649V31.2681H21.839V32.3671Z", fill: "white", fillRule: "evenodd" } ), /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z", fill: "#0F9D58" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z", fill: "#F5F5F5" }), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#DBDBDB" }), /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M12 13H7V15H12V13ZM12 17H7V19H12V17ZM7 21H12V23H7V21ZM23 13H14V15H23V13ZM14 17H23V19H14V17ZM23 21H14V23H23V21Z", fill: "#0F9D58", fillRule: "evenodd" } ) ); var FileExcelIconAlt = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-excel-alt", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z", fill: "url(#paint0_linear_11084_326)" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#0C864B" }), /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M12 13H7V15H12V13ZM12 17H7V19H12V17ZM7 21H12V23H7V21ZM23 13H14V15H23V13ZM14 17H23V19H14V17ZM23 21H14V23H23V21Z", fill: "#A8E7C9", fillRule: "evenodd" } ), /* @__PURE__ */ import_react30.default.createElement("defs", null, /* @__PURE__ */ import_react30.default.createElement( "linearGradient", { gradientUnits: "userSpaceOnUse", id: "paint0_linear_11084_326", x1: "0", x2: "0", y1: "0", y2: "40" }, /* @__PURE__ */ import_react30.default.createElement("stop", { stopColor: "#64AD8A" }), /* @__PURE__ */ import_react30.default.createElement("stop", { offset: "1", stopColor: "#0C864B" }) )) ); var FileArchiveIcon = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-archive", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M17.7168 33.172C18.2348 33.172 18.4238 33.655 18.4238 34.18C18.4238 34.642 18.2978 35.195 17.7168 35.195C17.1708 35.195 16.9888 34.642 16.9888 34.145C16.9888 33.683 17.1708 33.172 17.7168 33.172ZM19.5718 31.002H18.3818V32.7589H18.3678C18.1228 32.43 17.7798 32.262 17.3318 32.262C16.3028 32.262 15.7988 33.158 15.7988 34.103C15.7988 35.125 16.2818 36.1049 17.4228 36.1049C17.8428 36.1049 18.1928 35.923 18.4238 35.58H18.4378V36H19.5718V31.002ZM12.7095 34.1872C12.7095 33.7252 12.8775 33.1722 13.4305 33.1722C13.9835 33.1722 14.1585 33.7252 14.1585 34.1872C14.1585 34.6492 13.9835 35.1952 13.4305 35.1952C12.8775 35.1952 12.7095 34.6492 12.7095 34.1872ZM11.5195 34.1872C11.5195 35.2792 12.3035 36.1052 13.4305 36.1052C14.5575 36.1052 15.3485 35.2792 15.3485 34.1872C15.3485 33.0952 14.5575 32.2622 13.4305 32.2622C12.3035 32.2622 11.5195 33.0952 11.5195 34.1872ZM21.839 32.3671H22.574V33.1371H21.839V34.7891C21.839 35.0761 22.007 35.1391 22.266 35.1391C22.3142 35.1391 22.364 35.1357 22.4147 35.1323C22.4672 35.1287 22.5206 35.1251 22.574 35.1251V36.0001C22.481 36.0031 22.388 36.0099 22.295 36.0168C22.171 36.0259 22.047 36.0351 21.923 36.0351C20.908 36.0351 20.649 35.7411 20.649 34.7541V33.1371H20.047V32.3671H20.649V31.2681H21.839V32.3671Z", fill: "white", fillRule: "evenodd" } ), /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z", fill: "#F8B859" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z", fill: "#F5F5F5" }), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#DBDBDB" }), /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M10 0H8V2H10V4H8V6H10V8H8V10H10V12H8V14H10V12H12V10H10V8H12V6H10V4H12V2H10V0ZM8 17C8 16.4477 8.44771 16 9 16H11C11.5523 16 12 16.4477 12 17V23C12 23.5523 11.5523 24 11 24H9C8.44771 24 8 23.5523 8 23V17ZM9 23V20H11V23H9Z", fill: "#F8B859", fillRule: "evenodd" } ) ); var FileArchiveIconAlt = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-archive-alt", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z", fill: "url(#paint0_linear_11086_246)" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#B67A24" }), /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M10 0H8V2H10V4H8V6H10V8H8V10H10V12H8V14H10V12H12V10H10V8H12V6H10V4H12V2H10V0ZM8 17C8 16.4477 8.44771 16 9 16H11C11.5523 16 12 16.4477 12 17V23C12 23.5523 11.5523 24 11 24H9C8.44771 24 8 23.5523 8 23V17ZM9 23V20H11V23H9Z", fill: "#FFE9C8", fillRule: "evenodd" } ), /* @__PURE__ */ import_react30.default.createElement("defs", null, /* @__PURE__ */ import_react30.default.createElement( "linearGradient", { gradientUnits: "userSpaceOnUse", id: "paint0_linear_11086_246", x1: "0", x2: "0", y1: "0", y2: "40" }, /* @__PURE__ */ import_react30.default.createElement("stop", { stopColor: "#FFC775" }), /* @__PURE__ */ import_react30.default.createElement("stop", { offset: "1", stopColor: "#E69E34" }) )) ); var FileCodeIcon = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-code", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z", fill: "#00ACA1" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z", fill: "#F5F5F5" }), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#DBDBDB" }), /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M15 21V18.984L11.5 18L15 17V15L9 17V19L15 21ZM19 15V17.016L22.5 18L19 19V21L25 19V17L19 15Z", fill: "#00ACA1", fillRule: "evenodd" } ) ); var FileCodeIconAlt = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-code-alt", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z", fill: "url(#paint0_linear_11086_611)" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#00ACA1" }), /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M15 21V18.984L11.5 18L15 17V15L9 17V19L15 21ZM19 15V17.016L22.5 18L19 19V21L25 19V17L19 15Z", fill: "#A3DCD8", fillRule: "evenodd" } ), /* @__PURE__ */ import_react30.default.createElement("defs", null, /* @__PURE__ */ import_react30.default.createElement( "linearGradient", { gradientUnits: "userSpaceOnUse", id: "paint0_linear_11086_611", x1: "0", x2: "0", y1: "0", y2: "40" }, /* @__PURE__ */ import_react30.default.createElement("stop", { stopColor: "#7FC4BD" }), /* @__PURE__ */ import_react30.default.createElement("stop", { offset: "1", stopColor: "#00ACA1" }) )) ); var FileAudioIcon = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-audio", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M17.7168 33.172C18.2348 33.172 18.4238 33.655 18.4238 34.18C18.4238 34.642 18.2978 35.195 17.7168 35.195C17.1708 35.195 16.9888 34.642 16.9888 34.145C16.9888 33.683 17.1708 33.172 17.7168 33.172ZM19.5718 31.002H18.3818V32.7589H18.3678C18.1228 32.43 17.7798 32.262 17.3318 32.262C16.3028 32.262 15.7988 33.158 15.7988 34.103C15.7988 35.125 16.2818 36.1049 17.4228 36.1049C17.8428 36.1049 18.1928 35.923 18.4238 35.58H18.4378V36H19.5718V31.002ZM12.7095 34.1872C12.7095 33.7252 12.8775 33.1722 13.4305 33.1722C13.9835 33.1722 14.1585 33.7252 14.1585 34.1872C14.1585 34.6492 13.9835 35.1952 13.4305 35.1952C12.8775 35.1952 12.7095 34.6492 12.7095 34.1872ZM11.5195 34.1872C11.5195 35.2792 12.3035 36.1052 13.4305 36.1052C14.5575 36.1052 15.3485 35.2792 15.3485 34.1872C15.3485 33.0952 14.5575 32.2622 13.4305 32.2622C12.3035 32.2622 11.5195 33.0952 11.5195 34.1872ZM21.839 32.3671H22.574V33.1371H21.839V34.7891C21.839 35.0761 22.007 35.1391 22.266 35.1391C22.3142 35.1391 22.364 35.1357 22.4147 35.1323C22.4672 35.1287 22.5206 35.1251 22.574 35.1251V36.0001C22.481 36.0031 22.388 36.0099 22.295 36.0168C22.171 36.0259 22.047 36.0351 21.923 36.0351C20.908 36.0351 20.649 35.7411 20.649 34.7541V33.1371H20.047V32.3671H20.649V31.2681H21.839V32.3671Z", fill: "white", fillRule: "evenodd" } ), /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z", fill: "#2727B0" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z", fill: "#F5F5F5" }), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#DBDBDB" }), /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M8.87912 21.941H12.298L16.9521 24.7493C17.0307 24.8138 17.1293 24.849 17.2311 24.849C17.4738 24.8488 17.6705 24.6519 17.6703 24.4092V12.4399C17.6704 12.3381 17.6352 12.2396 17.5707 12.1609C17.4168 11.9732 17.1398 11.9457 16.9521 12.0996L12.298 14.908H8.87912C8.3936 14.908 8 15.3016 8 15.7871V21.0619C8 21.5474 8.3936 21.941 8.87912 21.941ZM12.9258 16.6664L15.9122 15.2224V21.6268L12.9258 20.1829H9.7583V16.6664H12.9258ZM19.8511 16.3517C19.474 16.4092 19.2397 16.6637 19.3283 16.9191L19.3262 16.92C19.5295 17.4995 19.6305 18.098 19.6284 18.6953C19.6305 19.2975 19.5237 19.9014 19.3196 20.4909C19.229 20.7462 19.4682 20.9996 19.8474 21.06C19.9008 21.0683 19.9542 21.072 20.0076 21.072C20.3259 21.072 20.6156 20.9234 20.6922 20.7057C20.9194 20.0451 21.0337 19.37 21.0374 18.6953C21.0349 18.0251 20.9211 17.3575 20.6955 16.7035C20.6053 16.4477 20.229 16.2908 19.8511 16.3517ZM22.1605 14.6028C22.5252 14.5163 22.9259 14.6454 23.055 14.8938C23.6891 16.1157 24 17.4042 24 18.6923C24.0004 19.9895 23.6796 21.2839 23.0521 22.5153C22.9503 22.7123 22.6763 22.8344 22.3828 22.8344C22.3071 22.8344 22.2301 22.8261 22.1543 22.8092C21.7863 22.7251 21.5914 22.4536 21.7185 22.2077C22.2988 21.0761 22.5922 19.8836 22.5931 18.6919C22.5931 17.5056 22.3054 16.3222 21.7276 15.2025C21.6001 14.9563 21.795 14.686 22.1605 14.6028Z", fill: "#2727B0", fillRule: "evenodd" } ) ); var FileAudioIconAlt = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-audio-alt", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z", fill: "url(#paint0_linear_11086_420)" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#1919A5" }), /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M8.87912 21.941H12.298L16.9521 24.7493C17.0307 24.8138 17.1293 24.849 17.2311 24.849C17.4738 24.8488 17.6705 24.6519 17.6703 24.4092V12.4399C17.6704 12.3381 17.6352 12.2396 17.5707 12.1609C17.4168 11.9732 17.1398 11.9457 16.9521 12.0996L12.298 14.908H8.87912C8.3936 14.908 8 15.3016 8 15.7871V21.0619C8 21.5474 8.3936 21.941 8.87912 21.941ZM12.9258 16.6664L15.9122 15.2224V21.6268L12.9258 20.1829H9.7583V16.6664H12.9258ZM19.8511 16.3517C19.474 16.4092 19.2397 16.6637 19.3283 16.9191L19.3262 16.92C19.5295 17.4995 19.6305 18.098 19.6284 18.6953C19.6305 19.2975 19.5237 19.9014 19.3196 20.4909C19.229 20.7462 19.4682 20.9996 19.8474 21.06C19.9008 21.0683 19.9542 21.072 20.0076 21.072C20.3259 21.072 20.6156 20.9234 20.6922 20.7057C20.9194 20.0451 21.0337 19.37 21.0374 18.6953C21.0349 18.0251 20.9211 17.3575 20.6955 16.7035C20.6053 16.4477 20.229 16.2908 19.8511 16.3517ZM22.1605 14.6028C22.5252 14.5163 22.9259 14.6454 23.055 14.8938C23.6891 16.1157 24 17.4042 24 18.6923C24.0004 19.9895 23.6796 21.2839 23.0521 22.5153C22.9503 22.7123 22.6763 22.8344 22.3828 22.8344C22.3071 22.8344 22.2301 22.8261 22.1543 22.8092C21.7863 22.7251 21.5914 22.4536 21.7185 22.2077C22.2988 21.0761 22.5922 19.8836 22.5931 18.6919C22.5931 17.5056 22.3054 16.3222 21.7276 15.2025C21.6001 14.9563 21.795 14.686 22.1605 14.6028Z", fill: "#AAAAFF", fillRule: "evenodd" } ), /* @__PURE__ */ import_react30.default.createElement("defs", null, /* @__PURE__ */ import_react30.default.createElement( "linearGradient", { gradientUnits: "userSpaceOnUse", id: "paint0_linear_11086_420", x1: "0", x2: "0", y1: "0", y2: "40" }, /* @__PURE__ */ import_react30.default.createElement("stop", { stopColor: "#4A4AB8" }), /* @__PURE__ */ import_react30.default.createElement("stop", { offset: "1", stopColor: "#2727B0" }) )) ); var FileVideoIcon = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-video", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { clipRule: "evenodd", d: "M17.7168 33.172C18.2348 33.172 18.4238 33.655 18.4238 34.18C18.4238 34.642 18.2978 35.195 17.7168 35.195C17.1708 35.195 16.9888 34.642 16.9888 34.145C16.9888 33.683 17.1708 33.172 17.7168 33.172ZM19.5718 31.002H18.3818V32.7589H18.3678C18.1228 32.43 17.7798 32.262 17.3318 32.262C16.3028 32.262 15.7988 33.158 15.7988 34.103C15.7988 35.125 16.2818 36.1049 17.4228 36.1049C17.8428 36.1049 18.1928 35.923 18.4238 35.58H18.4378V36H19.5718V31.002ZM12.7095 34.1872C12.7095 33.7252 12.8775 33.1722 13.4305 33.1722C13.9835 33.1722 14.1585 33.7252 14.1585 34.1872C14.1585 34.6492 13.9835 35.1952 13.4305 35.1952C12.8775 35.1952 12.7095 34.6492 12.7095 34.1872ZM11.5195 34.1872C11.5195 35.2792 12.3035 36.1052 13.4305 36.1052C14.5575 36.1052 15.3485 35.2792 15.3485 34.1872C15.3485 33.0952 14.5575 32.2622 13.4305 32.2622C12.3035 32.2622 11.5195 33.0952 11.5195 34.1872ZM21.839 32.3671H22.574V33.1371H21.839V34.7891C21.839 35.0761 22.007 35.1391 22.266 35.1391C22.3142 35.1391 22.364 35.1357 22.4147 35.1323C22.4672 35.1287 22.5206 35.1251 22.574 35.1251V36.0001C22.481 36.0031 22.388 36.0099 22.295 36.0168C22.171 36.0259 22.047 36.0351 21.923 36.0351C20.908 36.0351 20.649 35.7411 20.649 34.7541V33.1371H20.047V32.3671H20.649V31.2681H21.839V32.3671Z", fill: "white", fillRule: "evenodd" } ), /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z", fill: "#9D27B0" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z", fill: "#F5F5F5" }), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#DBDBDB" }), /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M9 17H25V24H9V17ZM27 14C27 12.8954 26.1046 12 25 12H22L24 15H21L19 12H17L19 15H16L14 12H12L14 15H11L9 12C7.9 12 7.01 12.9 7.01 14L7 24C7 25.1 7.9 26 9 26H25C26.1 26 27 25.1 27 24V14Z", fill: "#9D27B0" } ) ); var FileVideoIconAlt = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-video-alt", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z", fill: "url(#paint0_linear_18604_164254)" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#7A1589" }), /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M9 17H25V24H9V17ZM27 14C27 12.8954 26.1046 12 25 12H22L24 15H21L19 12H17L19 15H16L14 12H12L14 15H11L9 12C7.9 12 7.01 12.9 7.01 14L7 24C7 25.1 7.9 26 9 26H25C26.1 26 27 25.1 27 24V14Z", fill: "#F3A8FF" } ), /* @__PURE__ */ import_react30.default.createElement("defs", null, /* @__PURE__ */ import_react30.default.createElement( "linearGradient", { gradientUnits: "userSpaceOnUse", id: "paint0_linear_18604_164254", x1: "0", x2: "0", y1: "0", y2: "40" }, /* @__PURE__ */ import_react30.default.createElement("stop", { stopColor: "#A94AB8" }), /* @__PURE__ */ import_react30.default.createElement("stop", { offset: "1", stopColor: "#9D27B0" }) )) ); var FileFallbackIcon = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-fallback ", className), fill: "none", height: size, viewBox: "0 0 34 40", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z", fill: "url(#paint0_linear)" } ), /* @__PURE__ */ import_react30.default.createElement("path", { d: "M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z", fill: "#DBDBDB" }), /* @__PURE__ */ import_react30.default.createElement("path", { clipRule: "evenodd", d: "M8 13H23V15H8V13Z", fill: "#CFCFCF", fillRule: "evenodd" }), /* @__PURE__ */ import_react30.default.createElement("path", { clipRule: "evenodd", d: "M8 17H18V19H8V17Z", fill: "#CFCFCF", fillRule: "evenodd" }), /* @__PURE__ */ import_react30.default.createElement("path", { clipRule: "evenodd", d: "M8 21H23V23H8V21Z", fill: "#CFCFCF", fillRule: "evenodd" }), /* @__PURE__ */ import_react30.default.createElement("defs", null, /* @__PURE__ */ import_react30.default.createElement( "linearGradient", { gradientUnits: "userSpaceOnUse", id: "paint0_linear", x1: "0", x2: "0", y1: "0", y2: "40" }, /* @__PURE__ */ import_react30.default.createElement("stop", { stopColor: "white" }), /* @__PURE__ */ import_react30.default.createElement("stop", { offset: "1", stopColor: "#DBDBDB" }) )) ); var FileImageIcon = ({ className = "", size = DEFAULT_SIZE, ...props }) => /* @__PURE__ */ import_react30.default.createElement( "svg", { className: (0, import_clsx3.default)("rfu-file-image", className), height: size, viewBox: "0 0 384 512", width: size, xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ import_react30.default.createElement( "path", { d: "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z", fill: "#414D54" } ) ); // src/components/ReactFileUtilities/FileIcon/mimeTypes.ts var wordMimeTypes = [ // Microsoft Word // .doc .dot "application/msword", // .doc .dot "application/msword-template", // .docx "application/vnd.openxmlformats-officedocument.wordprocessingml.document", // .dotx (no test) "application/vnd.openxmlformats-officedocument.wordprocessingml.template", // .docm "application/vnd.ms-word.document.macroEnabled.12", // .dotm (no test) "application/vnd.ms-word.template.macroEnabled.12", // LibreOffice/OpenOffice Writer // .odt "application/vnd.oasis.opendocument.text", // .ott "application/vnd.oasis.opendocument.text-template", // .fodt "application/vnd.oasis.opendocument.text-flat-xml" // .uot // NOTE: firefox doesn't know mimetype so maybe ignore ]; var excelMimeTypes = [ // .csv "text/csv", // TODO: maybe more data files // Microsoft Excel // .xls .xlt .xla (no test for .xla) "application/vnd.ms-excel", // .xlsx "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", // .xltx (no test) "application/vnd.openxmlformats-officedocument.spreadsheetml.template", // .xlsm "application/vnd.ms-excel.sheet.macroEnabled.12", // .xltm (no test) "application/vnd.ms-excel.template.macroEnabled.12", // .xlam (no test) "application/vnd.ms-excel.addin.macroEnabled.12", // .xlsb (no test) "application/vnd.ms-excel.addin.macroEnabled.12", // LibreOffice/OpenOffice Calc // .ods "application/vnd.oasis.opendocument.spreadsheet", // .ots "application/vnd.oasis.opendocument.spreadsheet-template", // .fods "application/vnd.oasis.opendocument.spreadsheet-flat-xml" // .uos // NOTE: firefox doesn't know mimetype so maybe ignore ]; var powerpointMimeTypes = [ // Microsoft Word // .ppt .pot .pps .ppa (no test for .ppa) "application/vnd.ms-powerpoint", // .pptx "application/vnd.openxmlformats-officedocument.presentationml.presentation", // .potx (no test) "application/vnd.openxmlformats-officedocument.presentationml.template", // .ppsx "application/vnd.openxmlformats-officedocument.presentationml.slideshow", // .ppam "application/vnd.ms-powerpoint.addin.macroEnabled.12", // .pptm "application/vnd.ms-powerpoint.presentation.macroEnabled.12", // .potm "application/vnd.ms-powerpoint.template.macroEnabled.12", // .ppsm "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", // LibreOffice/OpenOffice Writer // .odp "application/vnd.oasis.opendocument.presentation", // .otp "application/vnd.oasis.opendocument.presentation-template", // .fodp "application/vnd.oasis.opendocument.presentation-flat-xml" // .uop // NOTE: firefox doesn't know mimetype so maybe ignore ]; var archiveFileTypes = [ // .zip "application/zip", // .z7 "application/x-7z-compressed", // .ar "application/x-archive", // .tar "application/x-tar", // .tar.gz "application/gzip", // .tar.Z "application/x-compress", // .tar.bz2 "application/x-bzip", // .tar.lz "application/x-lzip", // .tar.lz4 "application/x-lz4", // .tar.lzma "application/x-lzma", // .tar.lzo (no test) "application/x-lzop", // .tar.xz "application/x-xz", // .war "application/x-webarchive", // .rar "application/vnd.rar" ]; var codeFileTypes = [ // .html .htm "text/html", // .css "text/css", // .js "application/x-javascript", "text/javascript", // .json "application/json", // .py "text/x-python", // .go "text/x-go", // .c "text/x-csrc", // .cpp "text/x-c++src", // .rb "application/x-ruby", // .rust "text/rust", // .java "text/x-java", // .php "application/x-php", // .cs "text/x-csharp", // .scala "text/x-scala", // .erl "text/x-erlang", // .sh "application/x-shellscript" ]; // src/components/ReactFileUtilities/FileIcon/iconMap.ts function generateMimeTypeToIconMap({ FileArchiveIcon: FileArchiveIcon2, FileCodeIcon: FileCodeIcon2, FileExcelIcon: FileExcelIcon2, FilePdfIcon: FilePdfIcon2, FilePowerPointIcon: FilePowerPointIcon2, FileWordIcon: FileWordIcon2 }) { const mimeTypeToIconMap = { "application/pdf": FilePdfIcon2 }; for (const type of wordMimeTypes) { mimeTypeToIconMap[type] = FileWordIcon2; } for (const type of excelMimeTypes) { mimeTypeToIconMap[type] = FileExcelIcon2; } for (const type of powerpointMimeTypes) { mimeTypeToIconMap[type] = FilePowerPointIcon2; } for (const type of archiveFileTypes) { mimeTypeToIconMap[type] = FileArchiveIcon2; } for (const type of codeFileTypes) { mimeTypeToIconMap[type] = FileCodeIcon2; } return mimeTypeToIconMap; } function generateGeneralTypeToIconMap({ FileAltIcon, FileAudioIcon: FileAudioIcon2, FileImageIcon: FileImageIcon2, FileVideoIcon: FileVideoIcon2 }) { return { "audio/": FileAudioIcon2, "image/": FileImageIcon2, "text/": FileAltIcon, "video/": FileVideoIcon2 }; } var iconMap = { alt: { ...generateMimeTypeToIconMap({ FileArchiveIcon: FileArchiveIconAlt, FileCodeIcon: FileCodeIconAlt, FileExcelIcon: FileExcelIconAlt, FilePdfIcon, FilePowerPointIcon: FilePowerPointIconAlt, FileWordIcon: FileWordIconAlt }), ...generateGeneralTypeToIconMap({ FileAltIcon: FileFallbackIcon, FileAudioIcon: FileAudioIconAlt, FileImageIcon, FileVideoIcon: FileVideoIconAlt }), fallback: FileFallbackIcon }, standard: { ...generateMimeTypeToIconMap({ FileArchiveIcon, FileCodeIcon, FileExcelIcon, FilePdfIcon, FilePowerPointIcon, FileWordIcon }), ...generateGeneralTypeToIconMap({ FileAltIcon: FileFallbackIcon, FileAudioIcon, FileImageIcon, FileVideoIcon }), fallback: FileFallbackIcon } }; // src/components/ReactFileUtilities/FileIcon/FileIcon.tsx function mimeTypeToIcon(type = "standard", mimeType) { const theMap = iconMap[type] || iconMap["standard"]; if (!mimeType) return theMap.fallback; const icon = theMap[mimeType]; if (icon) return icon; if (mimeType.startsWith("audio/")) return theMap["audio/"]; if (mimeType.startsWith("video/")) return theMap["video/"]; if (mimeType.startsWith("image/")) return theMap["image/"]; if (mimeType.startsWith("text/")) return theMap["text/"]; return theMap.fallback; } var FileIcon = (props) => { const { big = false, mimeType, size = 50, sizeSmall = 20, type = "standard", ...rest } = props; const Icon2 = mimeTypeToIcon(type, mimeType); return /* @__PURE__ */ import_react31.default.createElement(Icon2, { ...rest, size: big ? size : sizeSmall }); }; // src/components/ReactFileUtilities/ImageDropzone.tsx var import_clsx4 = __toESM(require("clsx")); var import_react32 = __toESM(require("react")); var import_react_dropzone = require("react-dropzone"); var ImageDropzone = ({ accept: acceptedFiles = [], children, disabled, handleFiles, maxNumberOfFiles, multiple }) => { const { t: t2 } = useTranslationContext("ImageDropzone"); const handleDrop = (0, import_react32.useCallback)( (accepted) => { if (!handleFiles) { return; } if (accepted && accepted.length) { handleFiles(accepted); } }, [handleFiles] ); const accept = (0, import_react32.useMemo)( () => (typeof acceptedFiles === "string" ? acceptedFiles.split(",") : acceptedFiles).reduce((mediaTypeMap, mediaType) => { mediaTypeMap[mediaType] ?? (mediaTypeMap[mediaType] = []); return mediaTypeMap; }, {}), [acceptedFiles] ); const { getRootProps, isDragAccept, isDragReject } = (0, import_react_dropzone.useDropzone)({ accept, disabled, maxFiles: maxNumberOfFiles, multiple, noClick: true, onDrop: handleDrop }); return /* @__PURE__ */ import_react32.default.createElement( "div", { ...getRootProps({ className: (0, import_clsx4.default)("rfu-dropzone", { "rfu-dropzone--accept": isDragAccept, "rfu-dropzone--reject": isDragReject }), style: { position: "relative" } }), tabIndex: -1 }, /* @__PURE__ */ import_react32.default.createElement("div", { className: "rfu-dropzone__notifier" }, /* @__PURE__ */ import_react32.default.createElement("div", { className: "rfu-dropzone__inner" }, /* @__PURE__ */ import_react32.default.createElement("svg", { height: "41", viewBox: "0 0 41 41", width: "41", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react32.default.createElement( "path", { d: "M40.517 28.002V3.997c0-2.197-1.808-3.992-4.005-3.992H12.507a4.004 4.004 0 0 0-3.992 3.993v24.004a4.004 4.004 0 0 0 3.992 3.993h24.005c2.197 0 4.005-1.795 4.005-3.993zm-22.002-7.997l4.062 5.42 5.937-7.423 7.998 10H12.507l6.008-7.997zM.517 8.003V36c0 2.198 1.795 4.005 3.993 4.005h27.997V36H4.51V8.002H.517z", fill: "#000", fillRule: "nonzero" } )), /* @__PURE__ */ import_react32.default.createElement("p", null, t2("Drag your files here to add to your post")))), children ); }; // src/components/ReactFileUtilities/UploadButton.tsx var import_clsx5 = __toESM(require("clsx")); var import_nanoid = require("nanoid"); var import_react34 = __toESM(require("react")); // src/components/ReactFileUtilities/utils.ts var import_react33 = require("react"); var useHandleFileChangeWrapper = (resetOnChange = false, handler) => (0, import_react33.useCallback)( ({ currentTarget }) => { const { files } = currentTarget; if (!files) return; try { handler?.(Array.from(files)); } catch (error) { console.error(error); } if (resetOnChange) currentTarget.value = ""; }, [handler, resetOnChange] ); async function dataTransferItemsToFiles(items) { if (!items || !items.length) { return []; } const fileLikes = getFileLikes(items); if (fileLikes.length) { return fileLikes; } const blobPromises = []; for (const item of items) { if (item.type === "text/html") { blobPromises.push( new Promise((accept) => { item.getAsString(async (s2) => { const imagePromises = extractImageSources(s2).map( (src) => getImageSource(fileLikes, src) ); await Promise.all(imagePromises); accept(); }); }) ); } } await Promise.all(blobPromises); return fileLikes; } function getFileLikes(items) { const fileLikes = []; for (const item of items) { if (item.kind === "file") { const file = item.getAsFile(); if (file) { fileLikes.push(file); } } } return fileLikes; } async function getImageSource(fileLikes, src) { let res; try { res = await fetch(src); } catch (e2) { return; } const contentType = res.headers.get("Content-type") || "application/octet-stream"; const buf = await res.arrayBuffer(); const blob = new Blob([buf], { type: contentType }); fileLikes.push(blob); } var extractImageSources = (s2) => { const imageTags = new DOMParser().parseFromString(s2, "text/html").getElementsByTagName("img"); return Array.from(imageTags, (tag) => tag.src).filter((tag) => tag); }; var isBlobButNotFile = (obj) => obj instanceof Blob && !(obj instanceof File); var createFileFromBlobs = ({ blobsArray, fileName, mimeType }) => { const concatenatedBlob = new Blob(blobsArray, { type: mimeType }); return new File([concatenatedBlob], fileName, { type: concatenatedBlob.type }); }; var getExtensionFromMimeType = (mimeType) => { const match = mimeType.match(/\/([^/;]+)/); return match && match[1]; }; var getRecordedMediaTypeFromMimeType = (mimeType) => { const match = mimeType.match(/^(audio|video)\/.*$/); return match && match[1]; }; var readFileAsArrayBuffer = (file) => new Promise((resolve, reject) => { const fileReader = new FileReader(); fileReader.onload = () => { resolve(fileReader.result); }; fileReader.onerror = () => { reject(fileReader.error); }; fileReader.readAsArrayBuffer(file); }); var generateFileName = (mimeType) => `file_${(/* @__PURE__ */ new Date()).toISOString()}.${getExtensionFromMimeType(mimeType)}`; // src/components/ReactFileUtilities/UploadButton.tsx var UploadButton = (0, import_react34.forwardRef)(function UploadButton2({ onFileChange, resetOnChange = true, ...rest }, ref) { const handleInputChange = useHandleFileChangeWrapper(resetOnChange, onFileChange); return /* @__PURE__ */ import_react34.default.createElement("input", { onChange: handleInputChange, ref, type: "file", ...rest }); }); var FileInput = UploadButton; var UploadFileInput = (0, import_react34.forwardRef)(function UploadFileInput2({ className, onFileChange: onFileChangeCustom, ...props }, ref) { const { t: t2 } = useTranslationContext("UploadFileInput"); const { acceptedFiles = [], multipleUploads } = useChannelStateContext( "UploadFileInput" ); const { isUploadEnabled, maxFilesLeft, uploadNewFiles } = useMessageInputContext("UploadFileInput"); const id = (0, import_react34.useMemo)(() => (0, import_nanoid.nanoid)(), []); const onFileChange = (0, import_react34.useCallback)( (files) => { uploadNewFiles(files); onFileChangeCustom?.(files); }, [onFileChangeCustom, uploadNewFiles] ); return /* @__PURE__ */ import_react34.default.createElement( FileInput, { accept: acceptedFiles?.join(","), "aria-label": t2("aria/File upload"), "data-testid": "file-input", disabled: !isUploadEnabled || maxFilesLeft === 0, id, multiple: multipleUploads, ...props, className: (0, import_clsx5.default)("str-chat__file-input", className), onFileChange, ref } ); }); // src/components/Attachment/VoiceRecording.tsx var rootClassName = "str-chat__message-attachment__voice-recording-widget"; var VoiceRecordingPlayer = ({ attachment, playbackRates }) => { const { t: t2 } = useTranslationContext("VoiceRecordingPlayer"); const { asset_url, duration = 0, mime_type, title = t2("Voice message"), waveform_data } = attachment; const { audioRef, increasePlaybackRate, isPlaying, playbackRate, progress, secondsElapsed, seek, togglePlay } = useAudioController({ durationSeconds: duration ?? 0, mimeType: mime_type, playbackRates }); if (!asset_url) return null; const displayedDuration = secondsElapsed || duration; return /* @__PURE__ */ import_react35.default.createElement("div", { className: rootClassName, "data-testid": "voice-recording-widget" }, /* @__PURE__ */ import_react35.default.createElement("audio", { ref: audioRef }, /* @__PURE__ */ import_react35.default.createElement("source", { "data-testid": "audio-source", src: asset_url, type: mime_type })), /* @__PURE__ */ import_react35.default.createElement(PlayButton, { isPlaying, onClick: togglePlay }), /* @__PURE__ */ import_react35.default.createElement("div", { className: "str-chat__message-attachment__voice-recording-widget__metadata" }, /* @__PURE__ */ import_react35.default.createElement( "div", { className: "str-chat__message-attachment__voice-recording-widget__title", "data-testid": "voice-recording-title", title }, title ), /* @__PURE__ */ import_react35.default.createElement("div", { className: "str-chat__message-attachment__voice-recording-widget__audio-state" }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "str-chat__message-attachment__voice-recording-widget__timer" }, attachment.duration ? displayDuration(displayedDuration) : /* @__PURE__ */ import_react35.default.createElement(FileSizeIndicator, { fileSize: attachment.file_size, maximumFractionDigits: 0 })), /* @__PURE__ */ import_react35.default.createElement(WaveProgressBar, { progress, seek, waveformData: waveform_data || [] }))), /* @__PURE__ */ import_react35.default.createElement("div", { className: "str-chat__message-attachment__voice-recording-widget__right-section" }, isPlaying ? /* @__PURE__ */ import_react35.default.createElement(PlaybackRateButton, { disabled: !audioRef.current, onClick: increasePlaybackRate }, playbackRate.toFixed(1), "x") : /* @__PURE__ */ import_react35.default.createElement(FileIcon, { big: true, mimeType: mime_type, size: 40 }))); }; var QuotedVoiceRecording = ({ attachment }) => { const { t: t2 } = useTranslationContext(); const title = attachment.title || t2("Voice message"); return /* @__PURE__ */ import_react35.default.createElement("div", { className: rootClassName, "data-testid": "quoted-voice-recording-widget" }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "str-chat__message-attachment__voice-recording-widget__metadata" }, title && /* @__PURE__ */ import_react35.default.createElement( "div", { className: "str-chat__message-attachment__voice-recording-widget__title", "data-testid": "voice-recording-title", title }, title ), /* @__PURE__ */ import_react35.default.createElement("div", { className: "str-chat__message-attachment__voice-recording-widget__audio-state" }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "str-chat__message-attachment__voice-recording-widget__timer" }, attachment.duration ? displayDuration(attachment.duration) : /* @__PURE__ */ import_react35.default.createElement(FileSizeIndicator, { fileSize: attachment.file_size, maximumFractionDigits: 0 })))), /* @__PURE__ */ import_react35.default.createElement(FileIcon, { big: true, mimeType: attachment.mime_type, size: 34 })); }; var VoiceRecording = ({ attachment, isQuoted }) => isQuoted ? /* @__PURE__ */ import_react35.default.createElement(QuotedVoiceRecording, { attachment }) : /* @__PURE__ */ import_react35.default.createElement(VoiceRecordingPlayer, { attachment }); // src/components/Gallery/BaseImage.tsx var import_react36 = __toESM(require("react")); var import_clsx6 = __toESM(require("clsx")); var BaseImage = (0, import_react36.forwardRef)(function BaseImage2({ ...props }, ref) { const { className: propsClassName, onError: propsOnError } = props; const [error, setError] = (0, import_react36.useState)(false); (0, import_react36.useEffect)( () => () => { setError(false); }, [props.src] ); return /* @__PURE__ */ import_react36.default.createElement(import_react36.default.Fragment, null, /* @__PURE__ */ import_react36.default.createElement( "img", { "data-testid": "str-chat__base-image", ...props, className: (0, import_clsx6.default)(propsClassName, "str-chat__base-image", { "str-chat__base-image--load-failed": error }), onError: (e2) => { setError(true); propsOnError?.(e2); }, ref } ), error && /* @__PURE__ */ import_react36.default.createElement(DownloadButton, { assetUrl: props.src })); }); // src/components/Gallery/Gallery.tsx var import_react40 = __toESM(require("react")); var import_sanitize_url2 = require("@braintree/sanitize-url"); var import_clsx8 = __toESM(require("clsx")); // src/components/Modal/Modal.tsx var import_clsx7 = __toESM(require("clsx")); var import_react38 = __toESM(require("react")); var import_focus = require("@react-aria/focus"); // src/components/Modal/icons.tsx var import_react37 = __toESM(require("react")); var CloseIconRound = () => /* @__PURE__ */ import_react37.default.createElement( "svg", { "data-testid": "close-icon-round", fill: "none", height: "28", viewBox: "0 0 28 28", width: "28", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react37.default.createElement("rect", { fill: "#72767E", height: "28", rx: "14", width: "28" }), /* @__PURE__ */ import_react37.default.createElement("circle", { cx: "14", cy: "14", fill: "#72767E", r: "12" }), /* @__PURE__ */ import_react37.default.createElement( "path", { clipRule: "evenodd", d: "M28 14C28 21.732 21.732 28 14 28C6.26801 28 0 21.732 0 14C0 6.26801 6.26801 0 14 0C21.732 0 28 6.26801 28 14ZM26 14C26 20.6274 20.6274 26 14 26C7.37258 26 2 20.6274 2 14C2 7.37258 7.37258 2 14 2C20.6274 2 26 7.37258 26 14ZM19.59 7L21 8.41L15.41 14L21 19.59L19.59 21L14 15.41L8.41 21L7 19.59L12.59 14L7 8.41L8.41 7L14 12.59L19.59 7Z", fill: "white", fillRule: "evenodd" } ) ); // src/components/Modal/Modal.tsx var Modal = ({ children, className, onClose, open }) => { const { t: t2 } = useTranslationContext("Modal"); const innerRef = (0, import_react38.useRef)(null); const closeRef = (0, import_react38.useRef)(null); const handleClick = (event) => { const target = event.target; if (!innerRef.current || !closeRef.current) return; if (!innerRef.current.contains(target) || closeRef.current.contains(target)) onClose?.(event); }; (0, import_react38.useEffect)(() => { if (!open) return; const handleKeyDown = (event) => { if (event.key === "Escape") onClose?.(event); }; document.addEventListener("keydown", handleKeyDown); return () => document.removeEventListener("keydown", handleKeyDown); }, [onClose, open]); if (!open) return null; return /* @__PURE__ */ import_react38.default.createElement("div", { className: (0, import_clsx7.default)("str-chat__modal str-chat__modal--open", className), onClick: handleClick }, /* @__PURE__ */ import_react38.default.createElement(import_focus.FocusScope, { autoFocus: true, contain: true }, /* @__PURE__ */ import_react38.default.createElement("button", { className: "str-chat__modal__close-button", ref: closeRef, title: t2("Close") }, /* @__PURE__ */ import_react38.default.createElement(CloseIconRound, null)), /* @__PURE__ */ import_react38.default.createElement("div", { className: "str-chat__modal__inner str-chat-react__modal__inner", ref: innerRef }, children))); }; // src/components/Gallery/ModalGallery.tsx var import_react39 = __toESM(require("react")); var import_react_image_gallery = __toESM(require("react-image-gallery")); var onError = (e2) => { e2.target.alt = ""; }; var renderItem = ({ original, originalAlt }) => /* @__PURE__ */ import_react39.default.createElement(BaseImage, { alt: originalAlt, className: "image-gallery-image", onError, src: original }); var ModalGallery = (props) => { const { images, index: index3 } = props; const { t: t2 } = useTranslationContext("ModalGallery"); const formattedArray = (0, import_react39.useMemo)( () => images.map((image2) => { const imageSrc = image2.image_url || image2.thumb_url || ""; return { original: imageSrc, originalAlt: t2("User uploaded content"), source: imageSrc }; }), // eslint-disable-next-line react-hooks/exhaustive-deps [images] ); return /* @__PURE__ */ import_react39.default.createElement( import_react_image_gallery.default, { items: formattedArray, renderItem, showIndex: true, showPlayButton: false, showThumbnails: false, startIndex: index3 } ); }; // src/components/Gallery/Gallery.tsx var UnMemoizedGallery = (props) => { const { images, innerRefs } = props; const [index3, setIndex] = (0, import_react40.useState)(0); const [modalOpen, setModalOpen] = (0, import_react40.useState)(false); const { BaseImage: BaseImage3 = BaseImage, ModalGallery: ModalGallery2 = ModalGallery } = useComponentContext( "Gallery" ); const { t: t2 } = useTranslationContext("Gallery"); const imageFallbackTitle = t2("User uploaded content"); const countImagesDisplayedInPreview = 4; const lastImageIndexInPreview = countImagesDisplayedInPreview - 1; const toggleModal = (selectedIndex) => { if (modalOpen) { setModalOpen(false); } else { setIndex(selectedIndex); setModalOpen(true); } }; const renderImages = images.slice(0, countImagesDisplayedInPreview).map( (image2, i) => i === lastImageIndexInPreview && images.length > countImagesDisplayedInPreview ? /* @__PURE__ */ import_react40.default.createElement( "button", { className: "str-chat__gallery-placeholder", "data-testid": "gallery-image-last", key: `gallery-image-${i}`, onClick: () => toggleModal(i), style: { backgroundImage: `url(${images[lastImageIndexInPreview].previewUrl || images[lastImageIndexInPreview].image_url || images[lastImageIndexInPreview].thumb_url})`, ...image2.style }, ...innerRefs?.current && { ref: (r) => innerRefs.current[i] = r } }, /* @__PURE__ */ import_react40.default.createElement("p", null, t2("{{ imageCount }} more", { imageCount: images.length - countImagesDisplayedInPreview })) ) : /* @__PURE__ */ import_react40.default.createElement( "button", { className: "str-chat__gallery-image", "data-testid": "gallery-image", key: `gallery-image-${i}`, onClick: () => toggleModal(i) }, /* @__PURE__ */ import_react40.default.createElement( BaseImage3, { alt: image2?.fallback || imageFallbackTitle, src: (0, import_sanitize_url2.sanitizeUrl)(image2.previewUrl || image2.image_url || image2.thumb_url), style: image2.style, title: image2?.fallback || imageFallbackTitle, ...innerRefs?.current && { ref: (r) => innerRefs.current[i] = r } } ) ) ); const className = (0, import_clsx8.default)("str-chat__gallery", { "str-chat__gallery--square": images.length > lastImageIndexInPreview, "str-chat__gallery-two-rows": images.length > 2 }); return /* @__PURE__ */ import_react40.default.createElement("div", { className }, renderImages, /* @__PURE__ */ import_react40.default.createElement( Modal, { className: "str-chat__gallery-modal", onClose: () => setModalOpen((modalOpen2) => !modalOpen2), open: modalOpen }, /* @__PURE__ */ import_react40.default.createElement(ModalGallery2, { images, index: index3 }) )); }; var Gallery = import_react40.default.memo(UnMemoizedGallery); // src/components/Gallery/Image.tsx var import_react41 = __toESM(require("react")); var import_sanitize_url3 = require("@braintree/sanitize-url"); var ImageComponent = (props) => { const { dimensions = {}, fallback, image_url, thumb_url, innerRef, previewUrl, style } = props; const [modalIsOpen, setModalIsOpen] = (0, import_react41.useState)(false); const { BaseImage: BaseImage3 = BaseImage, ModalGallery: ModalGallery2 = ModalGallery } = useComponentContext( "ImageComponent" ); const imageSrc = (0, import_sanitize_url3.sanitizeUrl)(previewUrl || image_url || thumb_url); const toggleModal = () => setModalIsOpen((modalIsOpen2) => !modalIsOpen2); return /* @__PURE__ */ import_react41.default.createElement(import_react41.default.Fragment, null, /* @__PURE__ */ import_react41.default.createElement( BaseImage3, { alt: fallback, className: "str-chat__message-attachment--img", "data-testid": "image-test", onClick: toggleModal, src: imageSrc, style, tabIndex: 0, title: fallback, ...dimensions, ...innerRef && { ref: innerRef } } ), /* @__PURE__ */ import_react41.default.createElement(Modal, { className: "str-chat__image-modal", onClose: toggleModal, open: modalIsOpen }, /* @__PURE__ */ import_react41.default.createElement(ModalGallery2, { images: [props], index: 0 }))); }; // src/components/Attachment/Card.tsx var import_react42 = __toESM(require("react")); var import_clsx9 = __toESM(require("clsx")); var import_react_player = __toESM(require("react-player")); var getHostFromURL = (url) => { if (url !== void 0 && url !== null) { const [trimmedUrl] = url.replace(/^(?:https?:\/\/)?(?:www\.)?/i, "").split("/"); return trimmedUrl; } return null; }; var UnableToRenderCard = ({ type }) => { const { t: t2 } = useTranslationContext("Card"); return /* @__PURE__ */ import_react42.default.createElement( "div", { className: (0, import_clsx9.default)("str-chat__message-attachment-card", { [`str-chat__message-attachment-card--${type}`]: type }) }, /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__message-attachment-card--content" }, /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__message-attachment-card--text" }, t2("this content could not be displayed"))) ); }; var SourceLink = ({ author_name, url }) => /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__message-attachment-card--source-link", "data-testid": "card-source-link" }, /* @__PURE__ */ import_react42.default.createElement( SafeAnchor, { className: "str-chat__message-attachment-card--url", href: url, rel: "noopener noreferrer", target: "_blank" }, author_name || getHostFromURL(url) )); var CardHeader = (props) => { const { asset_url, dimensions, image: image2, image_url, thumb_url, title, type } = props; let visual = null; if (asset_url && type === "video") { visual = /* @__PURE__ */ import_react42.default.createElement(import_react_player.default, { className: "react-player", controls: true, height: "100%", url: asset_url, width: "100%" }); } else if (image2) { visual = /* @__PURE__ */ import_react42.default.createElement( ImageComponent, { dimensions, fallback: title || image2, image_url, thumb_url } ); } return visual ? /* @__PURE__ */ import_react42.default.createElement( "div", { className: "str-chat__message-attachment-card--header str-chat__message-attachment-card-react--header", "data-testid": "card-header" }, visual ) : null; }; var CardContent = (props) => { const { author_name, og_scrape_url, text: text5, title, title_link, type } = props; const url = title_link || og_scrape_url; return /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__message-attachment-card--content" }, type === "audio" ? /* @__PURE__ */ import_react42.default.createElement(CardAudio, { og: props }) : /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__message-attachment-card--flex" }, url && /* @__PURE__ */ import_react42.default.createElement(SourceLink, { author_name, url }), title && /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__message-attachment-card--title" }, title), text5 && /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__message-attachment-card--text" }, text5))); }; var CardAudio = ({ og: { asset_url, author_name, mime_type, og_scrape_url, text: text5, title, title_link } }) => { const { audioRef, isPlaying, progress, seek, togglePlay } = useAudioController({ mimeType: mime_type }); const url = title_link || og_scrape_url; const dataTestId = "card-audio-widget"; const rootClassName2 = "str-chat__message-attachment-card-audio-widget"; return /* @__PURE__ */ import_react42.default.createElement("div", { className: rootClassName2, "data-testid": dataTestId }, asset_url && /* @__PURE__ */ import_react42.default.createElement(import_react42.default.Fragment, null, /* @__PURE__ */ import_react42.default.createElement("audio", { ref: audioRef }, /* @__PURE__ */ import_react42.default.createElement("source", { "data-testid": "audio-source", src: asset_url, type: "audio/mp3" })), /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__message-attachment-card-audio-widget--first-row" }, /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--play-controls" }, /* @__PURE__ */ import_react42.default.createElement(PlayButton, { isPlaying, onClick: togglePlay })), /* @__PURE__ */ import_react42.default.createElement(ProgressBar, { onClick: seek, progress }))), /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--second-row" }, url && /* @__PURE__ */ import_react42.default.createElement(SourceLink, { author_name, url }), title && /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--title" }, title), text5 && /* @__PURE__ */ import_react42.default.createElement("div", { className: "str-chat__message-attachment-audio-widget--description" }, text5))); }; var UnMemoizedCard = (props) => { const { asset_url, giphy, image_url, thumb_url, title, title_link, type } = props; const { giphyVersion: giphyVersionName } = useChannelStateContext("CardHeader"); let image2 = thumb_url || image_url; const dimensions = {}; if (type === "giphy" && typeof giphy !== "undefined") { const giphyVersion = giphy[giphyVersionName]; image2 = giphyVersion.url; dimensions.height = giphyVersion.height; dimensions.width = giphyVersion.width; } if (!title && !title_link && !asset_url && !image2) { return /* @__PURE__ */ import_react42.default.createElement(UnableToRenderCard, null); } return /* @__PURE__ */ import_react42.default.createElement("div", { className: `str-chat__message-attachment-card str-chat__message-attachment-card--${type}` }, /* @__PURE__ */ import_react42.default.createElement(CardHeader, { ...props, dimensions, image: image2 }), /* @__PURE__ */ import_react42.default.createElement(CardContent, { ...props })); }; var Card = import_react42.default.memo(UnMemoizedCard); // src/components/Attachment/FileAttachment.tsx var import_react43 = __toESM(require("react")); var UnMemoizedFileAttachment = ({ attachment }) => /* @__PURE__ */ import_react43.default.createElement("div", { className: "str-chat__message-attachment-file--item", "data-testid": "attachment-file" }, /* @__PURE__ */ import_react43.default.createElement(FileIcon, { className: "str-chat__file-icon", mimeType: attachment.mime_type }), /* @__PURE__ */ import_react43.default.createElement("div", { className: "str-chat__message-attachment-file--item-text" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "str-chat__message-attachment-file--item-first-row" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "str-chat__message-attachment-file--item-name", "data-testid": "file-title" }, attachment.title), /* @__PURE__ */ import_react43.default.createElement(DownloadButton, { assetUrl: attachment.asset_url })), /* @__PURE__ */ import_react43.default.createElement(FileSizeIndicator, { fileSize: attachment.file_size }))); var FileAttachment = import_react43.default.memo( UnMemoizedFileAttachment ); // src/components/Attachment/UnsupportedAttachment.tsx var import_react44 = __toESM(require("react")); var UnsupportedAttachment = ({ attachment }) => { const { t: t2 } = useTranslationContext("UnsupportedAttachment"); return /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__message-attachment-unsupported", "data-testid": "attachment-unsupported" }, /* @__PURE__ */ import_react44.default.createElement(FileIcon, { className: "str-chat__file-icon" }), /* @__PURE__ */ import_react44.default.createElement("div", { className: "str-chat__message-attachment-unsupported__metadata" }, /* @__PURE__ */ import_react44.default.createElement( "div", { className: "str-chat__message-attachment-unsupported__title", "data-testid": "unsupported-attachment-title" }, attachment.title || t2("Unsupported attachment") ))); }; // src/components/Attachment/AttachmentContainer.tsx var AttachmentWithinContainer = ({ attachment, children, componentType }) => { const isGAT = isGalleryAttachmentType(attachment); let extra = ""; if (!isGAT) { extra = componentType === "card" && !attachment?.image_url && !attachment?.thumb_url ? "no-image" : attachment?.actions?.length ? "actions" : ""; } const classNames = (0, import_clsx10.default)( "str-chat__message-attachment str-chat__message-attachment-dynamic-size", { [`str-chat__message-attachment--${componentType}`]: componentType, [`str-chat__message-attachment--${attachment?.type}`]: attachment?.type, [`str-chat__message-attachment--${componentType}--${extra}`]: componentType && extra, "str-chat__message-attachment--svg-image": isSvgAttachment(attachment), "str-chat__message-attachment-with-actions": extra === "actions" } ); return /* @__PURE__ */ import_react45.default.createElement("div", { className: classNames }, children); }; var AttachmentActionsContainer = ({ actionHandler, attachment, AttachmentActions: AttachmentActions2 = AttachmentActions }) => { if (!attachment.actions?.length) return null; return /* @__PURE__ */ import_react45.default.createElement( AttachmentActions2, { ...attachment, actionHandler, actions: attachment.actions, id: attachment.id || "", text: attachment.text || "" } ); }; function getCssDimensionsVariables(url) { const cssVars = { "--original-height": 1e6, "--original-width": 1e6 }; if (linkify.test(url, "url")) { const urlParams = new URL(url).searchParams; const oh = Number(urlParams.get("oh")); const ow = Number(urlParams.get("ow")); const originalHeight = oh > 1 ? oh : 1e6; const originalWidth = ow > 1 ? ow : 1e6; cssVars["--original-width"] = originalWidth; cssVars["--original-height"] = originalHeight; } return cssVars; } var GalleryContainer = ({ attachment, Gallery: Gallery2 = Gallery }) => { const imageElements = (0, import_react45.useRef)([]); const { imageAttachmentSizeHandler } = useChannelStateContext(); const [attachmentConfigurations, setAttachmentConfigurations] = (0, import_react45.useState)([]); (0, import_react45.useLayoutEffect)(() => { if (imageElements.current && imageElements.current.every((element2) => !!element2) && imageAttachmentSizeHandler) { const newConfigurations = []; imageElements.current.forEach((element2, i) => { const config = imageAttachmentSizeHandler(attachment.images[i], element2); newConfigurations.push(config); }); setAttachmentConfigurations(newConfigurations); } }, [imageElements, imageAttachmentSizeHandler, attachment]); const images = attachment.images.map((image2, i) => ({ ...image2, previewUrl: attachmentConfigurations[i]?.url || "about:blank", style: getCssDimensionsVariables( attachment.images[i]?.image_url || attachment.images[i]?.thumb_url || "" ) })); return /* @__PURE__ */ import_react45.default.createElement(AttachmentWithinContainer, { attachment, componentType: "gallery" }, /* @__PURE__ */ import_react45.default.createElement(Gallery2, { images: images || [], innerRefs: imageElements, key: "gallery" })); }; var ImageContainer = (props) => { const { attachment, Image: Image2 = ImageComponent } = props; const componentType = "image"; const imageElement = (0, import_react45.useRef)(null); const { imageAttachmentSizeHandler } = useChannelStateContext(); const [attachmentConfiguration, setAttachmentConfiguration] = (0, import_react45.useState)(void 0); (0, import_react45.useLayoutEffect)(() => { if (imageElement.current && imageAttachmentSizeHandler) { const config = imageAttachmentSizeHandler(attachment, imageElement.current); setAttachmentConfiguration(config); } }, [imageElement, imageAttachmentSizeHandler, attachment]); const imageConfig = { ...attachment, previewUrl: attachmentConfiguration?.url || "about:blank", style: getCssDimensionsVariables(attachment.image_url || attachment.thumb_url || "") }; if (attachment.actions && attachment.actions.length) { return /* @__PURE__ */ import_react45.default.createElement(AttachmentWithinContainer, { attachment, componentType }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__attachment" }, /* @__PURE__ */ import_react45.default.createElement(Image2, { ...imageConfig, innerRef: imageElement }), /* @__PURE__ */ import_react45.default.createElement(AttachmentActionsContainer, { ...props }))); } return /* @__PURE__ */ import_react45.default.createElement(AttachmentWithinContainer, { attachment, componentType }, /* @__PURE__ */ import_react45.default.createElement(Image2, { ...imageConfig, innerRef: imageElement })); }; var CardContainer = (props) => { const { attachment, Card: Card2 = Card } = props; const componentType = "card"; if (attachment.actions && attachment.actions.length) { return /* @__PURE__ */ import_react45.default.createElement(AttachmentWithinContainer, { attachment, componentType }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__attachment" }, /* @__PURE__ */ import_react45.default.createElement(Card2, { ...attachment }), /* @__PURE__ */ import_react45.default.createElement(AttachmentActionsContainer, { ...props }))); } return /* @__PURE__ */ import_react45.default.createElement(AttachmentWithinContainer, { attachment, componentType }, /* @__PURE__ */ import_react45.default.createElement(Card2, { ...attachment })); }; var FileContainer = ({ attachment, File: File2 = FileAttachment }) => { if (!attachment.asset_url) return null; return /* @__PURE__ */ import_react45.default.createElement(AttachmentWithinContainer, { attachment, componentType: "file" }, /* @__PURE__ */ import_react45.default.createElement(File2, { attachment })); }; var AudioContainer = ({ attachment, Audio: Audio2 = Audio }) => /* @__PURE__ */ import_react45.default.createElement(AttachmentWithinContainer, { attachment, componentType: "audio" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__attachment" }, /* @__PURE__ */ import_react45.default.createElement(Audio2, { og: attachment }))); var VoiceRecordingContainer = ({ attachment, VoiceRecording: VoiceRecording2 = VoiceRecording, isQuoted }) => /* @__PURE__ */ import_react45.default.createElement(AttachmentWithinContainer, { attachment, componentType: "voiceRecording" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__attachment" }, /* @__PURE__ */ import_react45.default.createElement(VoiceRecording2, { attachment, isQuoted }))); var MediaContainer = (props) => { const { attachment, Media = import_react_player2.default } = props; const componentType = "media"; const { shouldGenerateVideoThumbnail, videoAttachmentSizeHandler } = useChannelStateContext(); const videoElement = (0, import_react45.useRef)(null); const [ attachmentConfiguration, setAttachmentConfiguration ] = (0, import_react45.useState)(); (0, import_react45.useLayoutEffect)(() => { if (videoElement.current && videoAttachmentSizeHandler) { const config = videoAttachmentSizeHandler( attachment, videoElement.current, shouldGenerateVideoThumbnail ); setAttachmentConfiguration(config); } }, [videoElement, videoAttachmentSizeHandler, attachment]); const content3 = /* @__PURE__ */ import_react45.default.createElement( "div", { className: "str-chat__player-wrapper", "data-testid": "video-wrapper", ref: videoElement, style: getCssDimensionsVariables(attachment.thumb_url || "") }, /* @__PURE__ */ import_react45.default.createElement( Media, { className: "react-player", config: { file: { attributes: { poster: attachmentConfiguration?.thumbUrl } } }, controls: true, height: "100%", url: attachmentConfiguration?.url, width: "100%" } ) ); return attachment.actions?.length ? /* @__PURE__ */ import_react45.default.createElement(AttachmentWithinContainer, { attachment, componentType }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "str-chat__attachment" }, content3, /* @__PURE__ */ import_react45.default.createElement(AttachmentActionsContainer, { ...props }))) : /* @__PURE__ */ import_react45.default.createElement(AttachmentWithinContainer, { attachment, componentType }, content3); }; var UnsupportedAttachmentContainer = ({ attachment, UnsupportedAttachment: UnsupportedAttachment2 = UnsupportedAttachment }) => /* @__PURE__ */ import_react45.default.createElement(import_react45.default.Fragment, null, /* @__PURE__ */ import_react45.default.createElement(UnsupportedAttachment2, { attachment })); // src/components/Attachment/Attachment.tsx var CONTAINER_MAP = { audio: AudioContainer, card: CardContainer, file: FileContainer, media: MediaContainer, unsupported: UnsupportedAttachmentContainer, voiceRecording: VoiceRecordingContainer }; var ATTACHMENT_GROUPS_ORDER = [ "card", "gallery", "image", "media", "audio", "voiceRecording", "file", "unsupported" ]; var Attachment = (props) => { const { attachments } = props; const groupedAttachments = (0, import_react46.useMemo)(() => renderGroupedAttachments(props), [attachments]); return /* @__PURE__ */ import_react46.default.createElement("div", { className: "str-chat__attachment-list" }, ATTACHMENT_GROUPS_ORDER.reduce( (acc, groupName) => [...acc, ...groupedAttachments[groupName]], [] )); }; var renderGroupedAttachments = ({ attachments, ...rest }) => { const uploadedImages = attachments.filter( (attachment) => isUploadedImage(attachment) ); const containers = attachments.filter((attachment) => !isUploadedImage(attachment)).reduce( (typeMap, attachment) => { const attachmentType = getAttachmentType(attachment); const Container = CONTAINER_MAP[attachmentType]; typeMap[attachmentType].push( /* @__PURE__ */ import_react46.default.createElement( Container, { key: `${attachmentType}-${typeMap[attachmentType].length}`, ...rest, attachment } ) ); return typeMap; }, { audio: [], card: [], file: [], media: [], unsupported: [], // not used in reduce // eslint-disable-next-line sort-keys image: [], // eslint-disable-next-line sort-keys gallery: [], voiceRecording: [] } ); if (uploadedImages.length > 1) { containers["gallery"] = [ /* @__PURE__ */ import_react46.default.createElement( GalleryContainer, { key: "gallery-container", ...rest, attachment: { images: uploadedImages, type: "gallery" } } ) ]; } else if (uploadedImages.length === 1) { containers["image"] = [ /* @__PURE__ */ import_react46.default.createElement(ImageContainer, { key: "image-container", ...rest, attachment: uploadedImages[0] }) ]; } return containers; }; var getAttachmentType = (attachment) => { if (isScrapedContent(attachment)) { return "card"; } else if (isMediaAttachment(attachment)) { return "media"; } else if (isAudioAttachment(attachment)) { return "audio"; } else if (isVoiceRecordingAttachment(attachment)) { return "voiceRecording"; } else if (isFileAttachment(attachment)) { return "file"; } return "unsupported"; }; // src/components/AutoCompleteTextarea/Item.jsx var import_react47 = __toESM(require("react")); var import_clsx11 = __toESM(require("clsx")); var Item = import_react47.default.forwardRef(function Item2(props, innerRef) { const { className, component: Component2, item, onClickHandler, onSelectHandler, selected, style } = props; const handleSelect = (0, import_react47.useCallback)(() => onSelectHandler(item), [item, onSelectHandler]); const handleClick = (0, import_react47.useCallback)((event) => onClickHandler(event, item), [item, onClickHandler]); return /* @__PURE__ */ import_react47.default.createElement( "li", { className: (0, import_clsx11.default)(className, { "str-chat__suggestion-item--selected": selected }), style }, /* @__PURE__ */ import_react47.default.createElement( "a", { href: "", onClick: handleClick, onFocus: handleSelect, onMouseEnter: handleSelect, ref: innerRef }, /* @__PURE__ */ import_react47.default.createElement(Component2, { entity: item, selected }) ) ); }); // src/components/AutoCompleteTextarea/List.jsx var import_react55 = __toESM(require("react")); var import_clsx13 = __toESM(require("clsx")); // src/components/Message/renderText/regex.ts function escapeRegExp(text5) { return text5.replace(/[-[\]{}()*+?.,/\\^$|#]/g, "\\$&"); } var detectHttp = /(http(s?):\/\/)?(www\.)?/; var messageCodeBlocks = (message) => { const codeRegex = /```[a-z]*\n[\s\S]*?\n```|`[a-z]*[\s\S]*?`/gm; const matches = message.match(codeRegex); return matches || []; }; var matchMarkdownLinks = (message) => { const regexMdLinks = /\[([^[]+)\](\(.*\))/gm; const matches = message.match(regexMdLinks); const singleMatch = /\[([^[]+)\]\((.*)\)/; const links = matches ? matches.map((match) => { const i = singleMatch.exec(match); return i && [i[1], i[2]]; }) : []; return links.flat(); }; // node_modules/hast-util-find-and-replace/node_modules/unist-util-is/lib/index.js var convert = ( // Note: overloads in JSDoc can’t yet use different `@template`s. /** * @type {( * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) & * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) & * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) & * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) & * ((test?: Test) => Check) * )} */ /** * @param {Test} [test] * @returns {Check} */ function(test3) { if (test3 === null || test3 === void 0) { return ok; } if (typeof test3 === "function") { return castFactory(test3); } if (typeof test3 === "object") { return Array.isArray(test3) ? anyFactory(test3) : propsFactory(test3); } if (typeof test3 === "string") { return typeFactory(test3); } throw new Error("Expected function, string, or object as test"); } ); function anyFactory(tests) { const checks2 = []; let index3 = -1; while (++index3 < tests.length) { checks2[index3] = convert(tests[index3]); } return castFactory(any); function any(...parameters) { let index4 = -1; while (++index4 < checks2.length) { if (checks2[index4].apply(this, parameters)) return true; } return false; } } function propsFactory(check) { const checkAsRecord = ( /** @type {Record} */ check ); return castFactory(all3); function all3(node2) { const nodeAsRecord = ( /** @type {Record} */ /** @type {unknown} */ node2 ); let key; for (key in check) { if (nodeAsRecord[key] !== checkAsRecord[key]) return false; } return true; } } function typeFactory(check) { return castFactory(type); function type(node2) { return node2 && node2.type === check; } } function castFactory(testFunction) { return check; function check(value, index3, parent) { return Boolean( looksLikeANode(value) && testFunction.call( this, value, typeof index3 === "number" ? index3 : void 0, parent || void 0 ) ); } } function ok() { return true; } function looksLikeANode(value) { return value !== null && typeof value === "object" && "type" in value; } // node_modules/hast-util-find-and-replace/node_modules/unist-util-visit-parents/lib/color.node.js function color(d) { return "\x1B[33m" + d + "\x1B[39m"; } // node_modules/hast-util-find-and-replace/node_modules/unist-util-visit-parents/lib/index.js var empty = []; var CONTINUE = true; var EXIT = false; var SKIP = "skip"; function visitParents(tree, test3, visitor3, reverse) { let check; if (typeof test3 === "function" && typeof visitor3 !== "function") { reverse = visitor3; visitor3 = test3; } else { check = test3; } const is4 = convert(check); const step = reverse ? -1 : 1; factory(tree, void 0, [])(); function factory(node2, index3, parents) { const value = ( /** @type {Record} */ node2 && typeof node2 === "object" ? node2 : {} ); if (typeof value.type === "string") { const name = ( // `hast` typeof value.tagName === "string" ? value.tagName : ( // `xast` typeof value.name === "string" ? value.name : void 0 ) ); Object.defineProperty(visit5, "name", { value: "node (" + color(node2.type + (name ? "<" + name + ">" : "")) + ")" }); } return visit5; function visit5() { let result = empty; let subresult; let offset; let grandparents; if (!test3 || is4(node2, index3, parents[parents.length - 1] || void 0)) { result = toResult(visitor3(node2, parents)); if (result[0] === EXIT) { return result; } } if ("children" in node2 && node2.children) { const nodeAsParent = ( /** @type {UnistParent} */ node2 ); if (nodeAsParent.children && result[0] !== SKIP) { offset = (reverse ? nodeAsParent.children.length : -1) + step; grandparents = parents.concat(nodeAsParent); while (offset > -1 && offset < nodeAsParent.children.length) { const child = nodeAsParent.children[offset]; subresult = factory(child, offset, grandparents)(); if (subresult[0] === EXIT) { return subresult; } offset = typeof subresult[1] === "number" ? subresult[1] : offset + step; } } } return result; } } } function toResult(value) { if (Array.isArray(value)) { return value; } if (typeof value === "number") { return [CONTINUE, value]; } return value === null || value === void 0 ? empty : [value]; } // node_modules/hast-util-is-element/lib/index.js var convertElement = ( // Note: overloads in JSDoc can’t yet use different `@template`s. /** * @type {( * ((test: Condition) => (element: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & Predicate) & * ((test: Condition) => (element: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & {tagName: Condition}) & * ((test?: null | undefined) => (element?: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element) & * ((test?: Test) => Check) * )} */ /** * @param {Test | null | undefined} [test] * @returns {Check} */ function(test3) { if (test3 === null || test3 === void 0) { return element; } if (typeof test3 === "string") { return tagNameFactory(test3); } if (typeof test3 === "object") { return anyFactory2(test3); } if (typeof test3 === "function") { return castFactory2(test3); } throw new Error("Expected function, string, or array as `test`"); } ); function anyFactory2(tests) { const checks2 = []; let index3 = -1; while (++index3 < tests.length) { checks2[index3] = convertElement(tests[index3]); } return castFactory2(any); function any(...parameters) { let index4 = -1; while (++index4 < checks2.length) { if (checks2[index4].apply(this, parameters)) return true; } return false; } } function tagNameFactory(check) { return castFactory2(tagName); function tagName(element2) { return element2.tagName === check; } } function castFactory2(testFunction) { return check; function check(value, index3, parent) { return Boolean( looksLikeAnElement(value) && testFunction.call( this, value, typeof index3 === "number" ? index3 : void 0, parent || void 0 ) ); } } function element(element2) { return Boolean( element2 && typeof element2 === "object" && "type" in element2 && element2.type === "element" && "tagName" in element2 && typeof element2.tagName === "string" ); } function looksLikeAnElement(value) { return value !== null && typeof value === "object" && "type" in value && "tagName" in value; } // node_modules/hast-util-find-and-replace/node_modules/escape-string-regexp/index.js function escapeStringRegexp(string3) { if (typeof string3 !== "string") { throw new TypeError("Expected a string"); } return string3.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d"); } // node_modules/hast-util-find-and-replace/lib/index.js var emptyOptions = {}; var defaultIgnore = ["math", "script", "style", "svg", "title"]; function findAndReplace(tree, list3, options) { const settings = options || emptyOptions; const ignored = convertElement(settings.ignore || defaultIgnore); const pairs = toPairs(list3); let pairIndex = -1; while (++pairIndex < pairs.length) { visitParents(tree, "text", visitor3); } function visitor3(node2, parents) { let index3 = -1; let grandparent; while (++index3 < parents.length) { const parent = parents[index3]; const siblings = grandparent ? grandparent.children : void 0; if (ignored( parent, siblings ? siblings.indexOf(parent) : void 0, grandparent )) { return; } grandparent = parent; } if (grandparent) { return handler(node2, parents); } } function handler(node2, parents) { const parent = parents[parents.length - 1]; const find4 = pairs[pairIndex][0]; const replace2 = pairs[pairIndex][1]; let start = 0; const siblings = parent.children; const index3 = siblings.indexOf(node2); let change = false; let nodes = []; find4.lastIndex = 0; let match = find4.exec(node2.value); while (match) { const position4 = match.index; const matchObject = { index: match.index, input: match.input, stack: [...parents, node2] }; let value = replace2(...match, matchObject); if (typeof value === "string") { value = value.length > 0 ? { type: "text", value } : void 0; } if (value === false) { find4.lastIndex = position4 + 1; } else { if (start !== position4) { nodes.push({ type: "text", value: node2.value.slice(start, position4) }); } if (Array.isArray(value)) { nodes.push(...value); } else if (value) { nodes.push(value); } start = position4 + match[0].length; change = true; } if (!find4.global) { break; } match = find4.exec(node2.value); } if (change) { if (start < node2.value.length) { nodes.push({ type: "text", value: node2.value.slice(start) }); } parent.children.splice(index3, 1, ...nodes); } else { nodes = [node2]; } return index3 + nodes.length; } } function toPairs(tupleOrList) { const result = []; if (!Array.isArray(tupleOrList)) { throw new TypeError("Expected find and replace tuple or list of tuples"); } const list3 = !tupleOrList[0] || Array.isArray(tupleOrList[0]) ? tupleOrList : [tupleOrList]; let index3 = -1; while (++index3 < list3.length) { const tuple = list3[index3]; result.push([toExpression(tuple[0]), toFunction(tuple[1])]); } return result; } function toExpression(find4) { return typeof find4 === "string" ? new RegExp(escapeStringRegexp(find4), "g") : find4; } function toFunction(replace2) { return typeof replace2 === "function" ? replace2 : function() { return replace2; }; } // node_modules/unist-builder/index.js var u = ( /** * @type {BuildVoid & BuildVoidWithProps & BuildLiteral & BuildLiteralWithProps & BuildParent & BuildParentWithProps} */ /** * @param {string} type Type of node * @param {Props|ChildrenOrValue} [props] Additional properties for node (or `children` or `value`) * @param {ChildrenOrValue} [value] `children` or `value` of node * @returns {Node} */ function(type, props, value) { var node2 = { type: String(type) }; if ((value === void 0 || value === null) && (typeof props === "string" || Array.isArray(props))) { value = props; } else { Object.assign(node2, props); } if (Array.isArray(value)) { node2.children = value; } else if (value !== void 0 && value !== null) { node2.value = String(value); } return node2; } ); // src/components/Message/renderText/rehypePlugins/emojiMarkdownPlugin.ts var import_emoji_regex = __toESM(require("emoji-regex")); var emojiMarkdownPlugin = () => { const replace2 = (match) => u("element", { properties: {}, tagName: "emoji" }, [u("text", match)]); const transform3 = (node2) => findAndReplace(node2, [(0, import_emoji_regex.default)(), replace2]); return transform3; }; // node_modules/unist-util-visit/node_modules/unist-util-is/lib/index.js var convert2 = ( // Note: overloads in JSDoc can’t yet use different `@template`s. /** * @type {( * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) & * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) & * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) & * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) & * ((test?: Test) => Check) * )} */ /** * @param {Test} [test] * @returns {Check} */ function(test3) { if (test3 === null || test3 === void 0) { return ok2; } if (typeof test3 === "function") { return castFactory3(test3); } if (typeof test3 === "object") { return Array.isArray(test3) ? anyFactory3(test3) : propsFactory2(test3); } if (typeof test3 === "string") { return typeFactory2(test3); } throw new Error("Expected function, string, or object as test"); } ); function anyFactory3(tests) { const checks2 = []; let index3 = -1; while (++index3 < tests.length) { checks2[index3] = convert2(tests[index3]); } return castFactory3(any); function any(...parameters) { let index4 = -1; while (++index4 < checks2.length) { if (checks2[index4].apply(this, parameters)) return true; } return false; } } function propsFactory2(check) { const checkAsRecord = ( /** @type {Record} */ check ); return castFactory3(all3); function all3(node2) { const nodeAsRecord = ( /** @type {Record} */ /** @type {unknown} */ node2 ); let key; for (key in check) { if (nodeAsRecord[key] !== checkAsRecord[key]) return false; } return true; } } function typeFactory2(check) { return castFactory3(type); function type(node2) { return node2 && node2.type === check; } } function castFactory3(testFunction) { return check; function check(value, index3, parent) { return Boolean( looksLikeANode2(value) && testFunction.call( this, value, typeof index3 === "number" ? index3 : void 0, parent || void 0 ) ); } } function ok2() { return true; } function looksLikeANode2(value) { return value !== null && typeof value === "object" && "type" in value; } // node_modules/unist-util-visit/node_modules/unist-util-visit-parents/lib/color.node.js function color2(d) { return "\x1B[33m" + d + "\x1B[39m"; } // node_modules/unist-util-visit/node_modules/unist-util-visit-parents/lib/index.js var empty2 = []; var CONTINUE2 = true; var EXIT2 = false; var SKIP2 = "skip"; function visitParents2(tree, test3, visitor3, reverse) { let check; if (typeof test3 === "function" && typeof visitor3 !== "function") { reverse = visitor3; visitor3 = test3; } else { check = test3; } const is4 = convert2(check); const step = reverse ? -1 : 1; factory(tree, void 0, [])(); function factory(node2, index3, parents) { const value = ( /** @type {Record} */ node2 && typeof node2 === "object" ? node2 : {} ); if (typeof value.type === "string") { const name = ( // `hast` typeof value.tagName === "string" ? value.tagName : ( // `xast` typeof value.name === "string" ? value.name : void 0 ) ); Object.defineProperty(visit5, "name", { value: "node (" + color2(node2.type + (name ? "<" + name + ">" : "")) + ")" }); } return visit5; function visit5() { let result = empty2; let subresult; let offset; let grandparents; if (!test3 || is4(node2, index3, parents[parents.length - 1] || void 0)) { result = toResult2(visitor3(node2, parents)); if (result[0] === EXIT2) { return result; } } if ("children" in node2 && node2.children) { const nodeAsParent = ( /** @type {UnistParent} */ node2 ); if (nodeAsParent.children && result[0] !== SKIP2) { offset = (reverse ? nodeAsParent.children.length : -1) + step; grandparents = parents.concat(nodeAsParent); while (offset > -1 && offset < nodeAsParent.children.length) { const child = nodeAsParent.children[offset]; subresult = factory(child, offset, grandparents)(); if (subresult[0] === EXIT2) { return subresult; } offset = typeof subresult[1] === "number" ? subresult[1] : offset + step; } } } return result; } } } function toResult2(value) { if (Array.isArray(value)) { return value; } if (typeof value === "number") { return [CONTINUE2, value]; } return value === null || value === void 0 ? empty2 : [value]; } // node_modules/unist-util-visit/lib/index.js function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) { let reverse; let test3; let visitor3; if (typeof testOrVisitor === "function" && typeof visitorOrReverse !== "function") { test3 = void 0; visitor3 = testOrVisitor; reverse = visitorOrReverse; } else { test3 = testOrVisitor; visitor3 = visitorOrReverse; reverse = maybeReverse; } visitParents2(tree, test3, overload, reverse); function overload(node2, parents) { const parent = parents[parents.length - 1]; const index3 = parent ? parent.children.indexOf(node2) : void 0; return visitor3(node2, index3, parent); } } // src/components/Message/renderText/rehypePlugins/mentionsMarkdownPlugin.ts var mentionsMarkdownPlugin = (mentioned_users) => () => { const mentioned_usernames = mentioned_users.map((user) => user.name || user.id).filter(Boolean).map(escapeRegExp); const mentionedUsersRegex = new RegExp( mentioned_usernames.map((username) => `@${username}`).join("|"), "g" ); const replace2 = (match) => { const usernameOrId = match.replace("@", ""); const user = mentioned_users.find( ({ id, name }) => name === usernameOrId || id === usernameOrId ); return u("element", { mentionedUser: user, properties: {}, tagName: "mention" }, [ u("text", match) ]); }; const transform3 = (tree) => { if (!mentioned_usernames.length) return; visit(tree, (node2, index3, parent) => { if (typeof index3 === "undefined") return; if (!parent) return; const nextChild = parent.children.at(index3 + 1); const nextChildHref = nextChild?.properties?.href; if (node2.type === "text" && // text value has to have @ sign at the end of the string // and no other characters except whitespace can precede it // valid cases: "text @", "@", " @" // invalid cases: "text@", "@text", /.?\s?@$|^@$/.test(node2.value) && nextChildHref?.startsWith("mailto:")) { const newTextValue = node2.value.replace(/@$/, ""); const username = nextChildHref.replace("mailto:", ""); parent.children[index3] = u("text", newTextValue); parent.children[index3 + 1] = u("text", `@${username}`); } }); findAndReplace(tree, [mentionedUsersRegex, replace2]); }; return transform3; }; // src/components/Message/renderText/remarkPlugins/htmlToTextPlugin.ts var visitor = (node2) => { if (node2.type !== "html") return; node2.type = "text"; }; var transform = (tree) => { visit(tree, visitor); }; var htmlToTextPlugin = () => transform; // src/components/Message/renderText/remarkPlugins/keepLineBreaksPlugin.ts var visitor2 = (node2, index3, parent) => { if (!(index3 && parent && node2.position)) return; const prevSibling = parent.children.at(index3 - 1); if (!prevSibling?.position) return; if (node2.position.start.line === prevSibling.position.start.line) return; const ownStartLine = node2.position.start.line; const prevEndLine = prevSibling.position.end.line; const countTruncatedLineBreaks = ownStartLine - prevEndLine - 1; if (countTruncatedLineBreaks < 1) return; const lineBreaks = Array.from( { length: countTruncatedLineBreaks }, () => u("break", { tagName: "br" }) ); parent.children = [ ...parent.children.slice(0, index3), ...lineBreaks, ...parent.children.slice(index3) ]; return; }; var transform2 = (tree) => { visit(tree, visitor2); }; var keepLineBreaksPlugin = () => transform2; // src/components/Message/renderText/renderText.tsx var import_react54 = __toESM(require("react")); // node_modules/react-markdown/lib/uri-transformer.js var protocols = ["http", "https", "mailto", "tel"]; function uriTransformer(uri) { const url = (uri || "").trim(); const first = url.charAt(0); if (first === "#" || first === "/") { return url; } const colon = url.indexOf(":"); if (colon === -1) { return url; } let index3 = -1; while (++index3 < protocols.length) { const protocol = protocols[index3]; if (colon === protocol.length && url.slice(0, protocol.length).toLowerCase() === protocol) { return url; } } index3 = url.indexOf("?"); if (index3 !== -1 && colon > index3) { return url; } index3 = url.indexOf("#"); if (index3 !== -1 && colon > index3) { return url; } return "javascript:void(0)"; } // node_modules/react-markdown/lib/react-markdown.js var import_react49 = __toESM(require("react"), 1); // node_modules/vfile/lib/index.js var import_is_buffer = __toESM(require_is_buffer(), 1); // node_modules/vfile-message/node_modules/unist-util-stringify-position/lib/index.js function stringifyPosition(value) { if (!value || typeof value !== "object") { return ""; } if ("position" in value || "type" in value) { return position(value.position); } if ("start" in value || "end" in value) { return position(value); } if ("line" in value || "column" in value) { return point(value); } return ""; } function point(point5) { return index(point5 && point5.line) + ":" + index(point5 && point5.column); } function position(pos) { return point(pos && pos.start) + "-" + point(pos && pos.end); } function index(value) { return value && typeof value === "number" ? value : 1; } // node_modules/vfile-message/lib/index.js var VFileMessage = class extends Error { /** * Create a message for `reason` at `place` from `origin`. * * When an error is passed in as `reason`, the `stack` is copied. * * @param {string | Error | VFileMessage} reason * Reason for message, uses the stack and message of the error if given. * * > 👉 **Note**: you should use markdown. * @param {Node | NodeLike | Position | Point | null | undefined} [place] * Place in file where the message occurred. * @param {string | null | undefined} [origin] * Place in code where the message originates (example: * `'my-package:my-rule'` or `'my-rule'`). * @returns * Instance of `VFileMessage`. */ // To do: next major: expose `undefined` everywhere instead of `null`. constructor(reason, place, origin) { const parts = [null, null]; let position4 = { // @ts-expect-error: we always follows the structure of `position`. start: { line: null, column: null }, // @ts-expect-error: " end: { line: null, column: null } }; super(); if (typeof place === "string") { origin = place; place = void 0; } if (typeof origin === "string") { const index3 = origin.indexOf(":"); if (index3 === -1) { parts[1] = origin; } else { parts[0] = origin.slice(0, index3); parts[1] = origin.slice(index3 + 1); } } if (place) { if ("type" in place || "position" in place) { if (place.position) { position4 = place.position; } } else if ("start" in place || "end" in place) { position4 = place; } else if ("line" in place || "column" in place) { position4.start = place; } } this.name = stringifyPosition(place) || "1:1"; this.message = typeof reason === "object" ? reason.message : reason; this.stack = ""; if (typeof reason === "object" && reason.stack) { this.stack = reason.stack; } this.reason = this.message; this.fatal; this.line = position4.start.line; this.column = position4.start.column; this.position = position4; this.source = parts[0]; this.ruleId = parts[1]; this.file; this.actual; this.expected; this.url; this.note; } }; VFileMessage.prototype.file = ""; VFileMessage.prototype.name = ""; VFileMessage.prototype.reason = ""; VFileMessage.prototype.message = ""; VFileMessage.prototype.stack = ""; VFileMessage.prototype.fatal = null; VFileMessage.prototype.column = null; VFileMessage.prototype.line = null; VFileMessage.prototype.source = null; VFileMessage.prototype.ruleId = null; VFileMessage.prototype.position = null; // node_modules/vfile/lib/minpath.js var import_path = __toESM(require("path"), 1); // node_modules/vfile/lib/minproc.js var import_process = __toESM(require("process"), 1); // node_modules/vfile/lib/minurl.js var import_url = require("url"); // node_modules/vfile/lib/minurl.shared.js function isUrl(fileUrlOrPath) { return fileUrlOrPath !== null && typeof fileUrlOrPath === "object" && // @ts-expect-error: indexable. fileUrlOrPath.href && // @ts-expect-error: indexable. fileUrlOrPath.origin; } // node_modules/vfile/lib/index.js var order = ["history", "path", "basename", "stem", "extname", "dirname"]; var VFile = class { /** * Create a new virtual file. * * `options` is treated as: * * * `string` or `Buffer` — `{value: options}` * * `URL` — `{path: options}` * * `VFile` — shallow copies its data over to the new file * * `object` — all fields are shallow copied over to the new file * * Path related fields are set in the following order (least specific to * most specific): `history`, `path`, `basename`, `stem`, `extname`, * `dirname`. * * You cannot set `dirname` or `extname` without setting either `history`, * `path`, `basename`, or `stem` too. * * @param {Compatible | null | undefined} [value] * File value. * @returns * New instance. */ constructor(value) { let options; if (!value) { options = {}; } else if (typeof value === "string" || buffer(value)) { options = { value }; } else if (isUrl(value)) { options = { path: value }; } else { options = value; } this.data = {}; this.messages = []; this.history = []; this.cwd = import_process.default.cwd(); this.value; this.stored; this.result; this.map; let index3 = -1; while (++index3 < order.length) { const prop2 = order[index3]; if (prop2 in options && options[prop2] !== void 0 && options[prop2] !== null) { this[prop2] = prop2 === "history" ? [...options[prop2]] : options[prop2]; } } let prop; for (prop in options) { if (!order.includes(prop)) { this[prop] = options[prop]; } } } /** * Get the full path (example: `'~/index.min.js'`). * * @returns {string} */ get path() { return this.history[this.history.length - 1]; } /** * Set the full path (example: `'~/index.min.js'`). * * Cannot be nullified. * You can set a file URL (a `URL` object with a `file:` protocol) which will * be turned into a path with `url.fileURLToPath`. * * @param {string | URL} path */ set path(path2) { if (isUrl(path2)) { path2 = (0, import_url.fileURLToPath)(path2); } assertNonEmpty(path2, "path"); if (this.path !== path2) { this.history.push(path2); } } /** * Get the parent path (example: `'~'`). */ get dirname() { return typeof this.path === "string" ? import_path.default.dirname(this.path) : void 0; } /** * Set the parent path (example: `'~'`). * * Cannot be set if there’s no `path` yet. */ set dirname(dirname) { assertPath(this.basename, "dirname"); this.path = import_path.default.join(dirname || "", this.basename); } /** * Get the basename (including extname) (example: `'index.min.js'`). */ get basename() { return typeof this.path === "string" ? import_path.default.basename(this.path) : void 0; } /** * Set basename (including extname) (`'index.min.js'`). * * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` * on windows). * Cannot be nullified (use `file.path = file.dirname` instead). */ set basename(basename) { assertNonEmpty(basename, "basename"); assertPart(basename, "basename"); this.path = import_path.default.join(this.dirname || "", basename); } /** * Get the extname (including dot) (example: `'.js'`). */ get extname() { return typeof this.path === "string" ? import_path.default.extname(this.path) : void 0; } /** * Set the extname (including dot) (example: `'.js'`). * * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` * on windows). * Cannot be set if there’s no `path` yet. */ set extname(extname) { assertPart(extname, "extname"); assertPath(this.dirname, "extname"); if (extname) { if (extname.charCodeAt(0) !== 46) { throw new Error("`extname` must start with `.`"); } if (extname.includes(".", 1)) { throw new Error("`extname` cannot contain multiple dots"); } } this.path = import_path.default.join(this.dirname, this.stem + (extname || "")); } /** * Get the stem (basename w/o extname) (example: `'index.min'`). */ get stem() { return typeof this.path === "string" ? import_path.default.basename(this.path, this.extname) : void 0; } /** * Set the stem (basename w/o extname) (example: `'index.min'`). * * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` * on windows). * Cannot be nullified (use `file.path = file.dirname` instead). */ set stem(stem) { assertNonEmpty(stem, "stem"); assertPart(stem, "stem"); this.path = import_path.default.join(this.dirname || "", stem + (this.extname || "")); } /** * Serialize the file. * * @param {BufferEncoding | null | undefined} [encoding='utf8'] * Character encoding to understand `value` as when it’s a `Buffer` * (default: `'utf8'`). * @returns {string} * Serialized file. */ toString(encoding) { return (this.value || "").toString(encoding || void 0); } /** * Create a warning message associated with the file. * * Its `fatal` is set to `false` and `file` is set to the current file path. * Its added to `file.messages`. * * @param {string | Error | VFileMessage} reason * Reason for message, uses the stack and message of the error if given. * @param {Node | NodeLike | Position | Point | null | undefined} [place] * Place in file where the message occurred. * @param {string | null | undefined} [origin] * Place in code where the message originates (example: * `'my-package:my-rule'` or `'my-rule'`). * @returns {VFileMessage} * Message. */ message(reason, place, origin) { const message = new VFileMessage(reason, place, origin); if (this.path) { message.name = this.path + ":" + message.name; message.file = this.path; } message.fatal = false; this.messages.push(message); return message; } /** * Create an info message associated with the file. * * Its `fatal` is set to `null` and `file` is set to the current file path. * Its added to `file.messages`. * * @param {string | Error | VFileMessage} reason * Reason for message, uses the stack and message of the error if given. * @param {Node | NodeLike | Position | Point | null | undefined} [place] * Place in file where the message occurred. * @param {string | null | undefined} [origin] * Place in code where the message originates (example: * `'my-package:my-rule'` or `'my-rule'`). * @returns {VFileMessage} * Message. */ info(reason, place, origin) { const message = this.message(reason, place, origin); message.fatal = null; return message; } /** * Create a fatal error associated with the file. * * Its `fatal` is set to `true` and `file` is set to the current file path. * Its added to `file.messages`. * * > 👉 **Note**: a fatal error means that a file is no longer processable. * * @param {string | Error | VFileMessage} reason * Reason for message, uses the stack and message of the error if given. * @param {Node | NodeLike | Position | Point | null | undefined} [place] * Place in file where the message occurred. * @param {string | null | undefined} [origin] * Place in code where the message originates (example: * `'my-package:my-rule'` or `'my-rule'`). * @returns {never} * Message. * @throws {VFileMessage} * Message. */ fail(reason, place, origin) { const message = this.message(reason, place, origin); message.fatal = true; throw message; } }; function assertPart(part, name) { if (part && part.includes(import_path.default.sep)) { throw new Error( "`" + name + "` cannot be a path: did not expect `" + import_path.default.sep + "`" ); } } function assertNonEmpty(part, name) { if (!part) { throw new Error("`" + name + "` cannot be empty"); } } function assertPath(path2, name) { if (!path2) { throw new Error("Setting `" + name + "` requires `path` to be set too"); } } function buffer(value) { return (0, import_is_buffer.default)(value); } // node_modules/bail/index.js function bail(error) { if (error) { throw error; } } // node_modules/unified/lib/index.js var import_is_buffer2 = __toESM(require_is_buffer(), 1); var import_extend = __toESM(require_extend(), 1); // node_modules/is-plain-obj/index.js function isPlainObject(value) { if (typeof value !== "object" || value === null) { return false; } const prototype = Object.getPrototypeOf(value); return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value); } // node_modules/trough/index.js function trough() { const fns = []; const pipeline = { run, use }; return pipeline; function run(...values) { let middlewareIndex = -1; const callback = values.pop(); if (typeof callback !== "function") { throw new TypeError("Expected function as last argument, not " + callback); } next(null, ...values); function next(error, ...output) { const fn = fns[++middlewareIndex]; let index3 = -1; if (error) { callback(error); return; } while (++index3 < values.length) { if (output[index3] === null || output[index3] === void 0) { output[index3] = values[index3]; } } values = output; if (fn) { wrap(fn, next)(...output); } else { callback(null, ...output); } } } function use(middelware) { if (typeof middelware !== "function") { throw new TypeError( "Expected `middelware` to be a function, not " + middelware ); } fns.push(middelware); return pipeline; } } function wrap(middleware, callback) { let called; return wrapped; function wrapped(...parameters) { const fnExpectsCallback = middleware.length > parameters.length; let result; if (fnExpectsCallback) { parameters.push(done); } try { result = middleware.apply(this, parameters); } catch (error) { const exception = ( /** @type {Error} */ error ); if (fnExpectsCallback && called) { throw exception; } return done(exception); } if (!fnExpectsCallback) { if (result instanceof Promise) { result.then(then, done); } else if (result instanceof Error) { done(result); } else { then(result); } } } function done(error, ...output) { if (!called) { called = true; callback(error, ...output); } } function then(value) { done(null, value); } } // node_modules/unified/lib/index.js var unified = base().freeze(); var own = {}.hasOwnProperty; function base() { const transformers = trough(); const attachers = []; let namespace = {}; let frozen; let freezeIndex = -1; processor.data = data; processor.Parser = void 0; processor.Compiler = void 0; processor.freeze = freeze; processor.attachers = attachers; processor.use = use; processor.parse = parse2; processor.stringify = stringify3; processor.run = run; processor.runSync = runSync; processor.process = process2; processor.processSync = processSync; return processor; function processor() { const destination = base(); let index3 = -1; while (++index3 < attachers.length) { destination.use(...attachers[index3]); } destination.data((0, import_extend.default)(true, {}, namespace)); return destination; } function data(key, value) { if (typeof key === "string") { if (arguments.length === 2) { assertUnfrozen("data", frozen); namespace[key] = value; return processor; } return own.call(namespace, key) && namespace[key] || null; } if (key) { assertUnfrozen("data", frozen); namespace = key; return processor; } return namespace; } function freeze() { if (frozen) { return processor; } while (++freezeIndex < attachers.length) { const [attacher, ...options] = attachers[freezeIndex]; if (options[0] === false) { continue; } if (options[0] === true) { options[0] = void 0; } const transformer = attacher.call(processor, ...options); if (typeof transformer === "function") { transformers.use(transformer); } } frozen = true; freezeIndex = Number.POSITIVE_INFINITY; return processor; } function use(value, ...options) { let settings; assertUnfrozen("use", frozen); if (value === null || value === void 0) { } else if (typeof value === "function") { addPlugin(value, ...options); } else if (typeof value === "object") { if (Array.isArray(value)) { addList(value); } else { addPreset(value); } } else { throw new TypeError("Expected usable value, not `" + value + "`"); } if (settings) { namespace.settings = Object.assign(namespace.settings || {}, settings); } return processor; function add(value2) { if (typeof value2 === "function") { addPlugin(value2); } else if (typeof value2 === "object") { if (Array.isArray(value2)) { const [plugin, ...options2] = value2; addPlugin(plugin, ...options2); } else { addPreset(value2); } } else { throw new TypeError("Expected usable value, not `" + value2 + "`"); } } function addPreset(result) { addList(result.plugins); if (result.settings) { settings = Object.assign(settings || {}, result.settings); } } function addList(plugins) { let index3 = -1; if (plugins === null || plugins === void 0) { } else if (Array.isArray(plugins)) { while (++index3 < plugins.length) { const thing = plugins[index3]; add(thing); } } else { throw new TypeError("Expected a list of plugins, not `" + plugins + "`"); } } function addPlugin(plugin, value2) { let index3 = -1; let entry; while (++index3 < attachers.length) { if (attachers[index3][0] === plugin) { entry = attachers[index3]; break; } } if (entry) { if (isPlainObject(entry[1]) && isPlainObject(value2)) { value2 = (0, import_extend.default)(true, entry[1], value2); } entry[1] = value2; } else { attachers.push([...arguments]); } } } function parse2(doc) { processor.freeze(); const file = vfile(doc); const Parser = processor.Parser; assertParser("parse", Parser); if (newable(Parser, "parse")) { return new Parser(String(file), file).parse(); } return Parser(String(file), file); } function stringify3(node2, doc) { processor.freeze(); const file = vfile(doc); const Compiler = processor.Compiler; assertCompiler("stringify", Compiler); assertNode(node2); if (newable(Compiler, "compile")) { return new Compiler(node2, file).compile(); } return Compiler(node2, file); } function run(node2, doc, callback) { assertNode(node2); processor.freeze(); if (!callback && typeof doc === "function") { callback = doc; doc = void 0; } if (!callback) { return new Promise(executor); } executor(null, callback); function executor(resolve, reject) { transformers.run(node2, vfile(doc), done); function done(error, tree, file) { tree = tree || node2; if (error) { reject(error); } else if (resolve) { resolve(tree); } else { callback(null, tree, file); } } } } function runSync(node2, file) { let result; let complete; processor.run(node2, file, done); assertDone("runSync", "run", complete); return result; function done(error, tree) { bail(error); result = tree; complete = true; } } function process2(doc, callback) { processor.freeze(); assertParser("process", processor.Parser); assertCompiler("process", processor.Compiler); if (!callback) { return new Promise(executor); } executor(null, callback); function executor(resolve, reject) { const file = vfile(doc); processor.run(processor.parse(file), file, (error, tree, file2) => { if (error || !tree || !file2) { done(error); } else { const result = processor.stringify(tree, file2); if (result === void 0 || result === null) { } else if (looksLikeAVFileValue(result)) { file2.value = result; } else { file2.result = result; } done(error, file2); } }); function done(error, file2) { if (error || !file2) { reject(error); } else if (resolve) { resolve(file2); } else { callback(null, file2); } } } } function processSync(doc) { let complete; processor.freeze(); assertParser("processSync", processor.Parser); assertCompiler("processSync", processor.Compiler); const file = vfile(doc); processor.process(file, done); assertDone("processSync", "process", complete); return file; function done(error) { complete = true; bail(error); } } } function newable(value, name) { return typeof value === "function" && // Prototypes do exist. // type-coverage:ignore-next-line value.prototype && // A function with keys in its prototype is probably a constructor. // Classes’ prototype methods are not enumerable, so we check if some value // exists in the prototype. // type-coverage:ignore-next-line (keys(value.prototype) || name in value.prototype); } function keys(value) { let key; for (key in value) { if (own.call(value, key)) { return true; } } return false; } function assertParser(name, value) { if (typeof value !== "function") { throw new TypeError("Cannot `" + name + "` without `Parser`"); } } function assertCompiler(name, value) { if (typeof value !== "function") { throw new TypeError("Cannot `" + name + "` without `Compiler`"); } } function assertUnfrozen(name, frozen) { if (frozen) { throw new Error( "Cannot call `" + name + "` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`." ); } } function assertNode(node2) { if (!isPlainObject(node2) || typeof node2.type !== "string") { throw new TypeError("Expected node, got `" + node2 + "`"); } } function assertDone(name, asyncName, complete) { if (!complete) { throw new Error( "`" + name + "` finished async. Use `" + asyncName + "` instead" ); } } function vfile(value) { return looksLikeAVFile(value) ? value : new VFile(value); } function looksLikeAVFile(value) { return Boolean( value && typeof value === "object" && "message" in value && "messages" in value ); } function looksLikeAVFileValue(value) { return typeof value === "string" || (0, import_is_buffer2.default)(value); } // node_modules/mdast-util-to-string/lib/index.js var emptyOptions2 = {}; function toString(value, options) { const settings = options || emptyOptions2; const includeImageAlt = typeof settings.includeImageAlt === "boolean" ? settings.includeImageAlt : true; const includeHtml = typeof settings.includeHtml === "boolean" ? settings.includeHtml : true; return one(value, includeImageAlt, includeHtml); } function one(value, includeImageAlt, includeHtml) { if (node(value)) { if ("value" in value) { return value.type === "html" && !includeHtml ? "" : value.value; } if (includeImageAlt && "alt" in value && value.alt) { return value.alt; } if ("children" in value) { return all(value.children, includeImageAlt, includeHtml); } } if (Array.isArray(value)) { return all(value, includeImageAlt, includeHtml); } return ""; } function all(values, includeImageAlt, includeHtml) { const result = []; let index3 = -1; while (++index3 < values.length) { result[index3] = one(values[index3], includeImageAlt, includeHtml); } return result.join(""); } function node(value) { return Boolean(value && typeof value === "object"); } // node_modules/micromark-util-chunked/index.js function splice(list3, start, remove, items) { const end = list3.length; let chunkStart = 0; let parameters; if (start < 0) { start = -start > end ? 0 : end + start; } else { start = start > end ? end : start; } remove = remove > 0 ? remove : 0; if (items.length < 1e4) { parameters = Array.from(items); parameters.unshift(start, remove); list3.splice(...parameters); } else { if (remove) list3.splice(start, remove); while (chunkStart < items.length) { parameters = items.slice(chunkStart, chunkStart + 1e4); parameters.unshift(start, 0); list3.splice(...parameters); chunkStart += 1e4; start += 1e4; } } } function push(list3, items) { if (list3.length > 0) { splice(list3, list3.length, 0, items); return list3; } return items; } // node_modules/micromark-util-combine-extensions/index.js var hasOwnProperty = {}.hasOwnProperty; function combineExtensions(extensions) { const all3 = {}; let index3 = -1; while (++index3 < extensions.length) { syntaxExtension(all3, extensions[index3]); } return all3; } function syntaxExtension(all3, extension2) { let hook; for (hook in extension2) { const maybe = hasOwnProperty.call(all3, hook) ? all3[hook] : void 0; const left = maybe || (all3[hook] = {}); const right = extension2[hook]; let code3; if (right) { for (code3 in right) { if (!hasOwnProperty.call(left, code3)) left[code3] = []; const value = right[code3]; constructs( // @ts-expect-error Looks like a list. left[code3], Array.isArray(value) ? value : value ? [value] : [] ); } } } } function constructs(existing, list3) { let index3 = -1; const before = []; while (++index3 < list3.length) { ; (list3[index3].add === "after" ? existing : before).push(list3[index3]); } splice(existing, 0, 0, before); } // node_modules/micromark-util-character/lib/unicode-punctuation-regex.js var unicodePunctuationRegex = /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/; // node_modules/micromark-util-character/index.js var asciiAlpha = regexCheck(/[A-Za-z]/); var asciiAlphanumeric = regexCheck(/[\dA-Za-z]/); var asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/); function asciiControl(code3) { return ( // Special whitespace codes (which have negative values), C0 and Control // character DEL code3 !== null && (code3 < 32 || code3 === 127) ); } var asciiDigit = regexCheck(/\d/); var asciiHexDigit = regexCheck(/[\dA-Fa-f]/); var asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/); function markdownLineEnding(code3) { return code3 !== null && code3 < -2; } function markdownLineEndingOrSpace(code3) { return code3 !== null && (code3 < 0 || code3 === 32); } function markdownSpace(code3) { return code3 === -2 || code3 === -1 || code3 === 32; } var unicodePunctuation = regexCheck(unicodePunctuationRegex); var unicodeWhitespace = regexCheck(/\s/); function regexCheck(regex) { return check; function check(code3) { return code3 !== null && regex.test(String.fromCharCode(code3)); } } // node_modules/micromark-factory-space/index.js function factorySpace(effects, ok4, type, max) { const limit = max ? max - 1 : Number.POSITIVE_INFINITY; let size = 0; return start; function start(code3) { if (markdownSpace(code3)) { effects.enter(type); return prefix(code3); } return ok4(code3); } function prefix(code3) { if (markdownSpace(code3) && size++ < limit) { effects.consume(code3); return prefix; } effects.exit(type); return ok4(code3); } } // node_modules/micromark/lib/initialize/content.js var content = { tokenize: initializeContent }; function initializeContent(effects) { const contentStart = effects.attempt( this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial ); let previous3; return contentStart; function afterContentStartConstruct(code3) { if (code3 === null) { effects.consume(code3); return; } effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return factorySpace(effects, contentStart, "linePrefix"); } function paragraphInitial(code3) { effects.enter("paragraph"); return lineStart(code3); } function lineStart(code3) { const token = effects.enter("chunkText", { contentType: "text", previous: previous3 }); if (previous3) { previous3.next = token; } previous3 = token; return data(code3); } function data(code3) { if (code3 === null) { effects.exit("chunkText"); effects.exit("paragraph"); effects.consume(code3); return; } if (markdownLineEnding(code3)) { effects.consume(code3); effects.exit("chunkText"); return lineStart; } effects.consume(code3); return data; } } // node_modules/micromark/lib/initialize/document.js var document2 = { tokenize: initializeDocument }; var containerConstruct = { tokenize: tokenizeContainer }; function initializeDocument(effects) { const self2 = this; const stack = []; let continued = 0; let childFlow; let childToken; let lineStartOffset; return start; function start(code3) { if (continued < stack.length) { const item = stack[continued]; self2.containerState = item[1]; return effects.attempt( item[0].continuation, documentContinue, checkNewContainers )(code3); } return checkNewContainers(code3); } function documentContinue(code3) { continued++; if (self2.containerState._closeFlow) { self2.containerState._closeFlow = void 0; if (childFlow) { closeFlow(); } const indexBeforeExits = self2.events.length; let indexBeforeFlow = indexBeforeExits; let point5; while (indexBeforeFlow--) { if (self2.events[indexBeforeFlow][0] === "exit" && self2.events[indexBeforeFlow][1].type === "chunkFlow") { point5 = self2.events[indexBeforeFlow][1].end; break; } } exitContainers(continued); let index3 = indexBeforeExits; while (index3 < self2.events.length) { self2.events[index3][1].end = Object.assign({}, point5); index3++; } splice( self2.events, indexBeforeFlow + 1, 0, self2.events.slice(indexBeforeExits) ); self2.events.length = index3; return checkNewContainers(code3); } return start(code3); } function checkNewContainers(code3) { if (continued === stack.length) { if (!childFlow) { return documentContinued(code3); } if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { return flowStart(code3); } self2.interrupt = Boolean( childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack ); } self2.containerState = {}; return effects.check( containerConstruct, thereIsANewContainer, thereIsNoNewContainer )(code3); } function thereIsANewContainer(code3) { if (childFlow) closeFlow(); exitContainers(continued); return documentContinued(code3); } function thereIsNoNewContainer(code3) { self2.parser.lazy[self2.now().line] = continued !== stack.length; lineStartOffset = self2.now().offset; return flowStart(code3); } function documentContinued(code3) { self2.containerState = {}; return effects.attempt( containerConstruct, containerContinue, flowStart )(code3); } function containerContinue(code3) { continued++; stack.push([self2.currentConstruct, self2.containerState]); return documentContinued(code3); } function flowStart(code3) { if (code3 === null) { if (childFlow) closeFlow(); exitContainers(0); effects.consume(code3); return; } childFlow = childFlow || self2.parser.flow(self2.now()); effects.enter("chunkFlow", { contentType: "flow", previous: childToken, _tokenizer: childFlow }); return flowContinue(code3); } function flowContinue(code3) { if (code3 === null) { writeToChild(effects.exit("chunkFlow"), true); exitContainers(0); effects.consume(code3); return; } if (markdownLineEnding(code3)) { effects.consume(code3); writeToChild(effects.exit("chunkFlow")); continued = 0; self2.interrupt = void 0; return start; } effects.consume(code3); return flowContinue; } function writeToChild(token, eof) { const stream = self2.sliceStream(token); if (eof) stream.push(null); token.previous = childToken; if (childToken) childToken.next = token; childToken = token; childFlow.defineSkip(token.start); childFlow.write(stream); if (self2.parser.lazy[token.start.line]) { let index3 = childFlow.events.length; while (index3--) { if ( // The token starts before the line ending… childFlow.events[index3][1].start.offset < lineStartOffset && // …and either is not ended yet… (!childFlow.events[index3][1].end || // …or ends after it. childFlow.events[index3][1].end.offset > lineStartOffset) ) { return; } } const indexBeforeExits = self2.events.length; let indexBeforeFlow = indexBeforeExits; let seen; let point5; while (indexBeforeFlow--) { if (self2.events[indexBeforeFlow][0] === "exit" && self2.events[indexBeforeFlow][1].type === "chunkFlow") { if (seen) { point5 = self2.events[indexBeforeFlow][1].end; break; } seen = true; } } exitContainers(continued); index3 = indexBeforeExits; while (index3 < self2.events.length) { self2.events[index3][1].end = Object.assign({}, point5); index3++; } splice( self2.events, indexBeforeFlow + 1, 0, self2.events.slice(indexBeforeExits) ); self2.events.length = index3; } } function exitContainers(size) { let index3 = stack.length; while (index3-- > size) { const entry = stack[index3]; self2.containerState = entry[1]; entry[0].exit.call(self2, effects); } stack.length = size; } function closeFlow() { childFlow.write([null]); childToken = void 0; childFlow = void 0; self2.containerState._closeFlow = void 0; } } function tokenizeContainer(effects, ok4, nok) { return factorySpace( effects, effects.attempt(this.parser.constructs.document, ok4, nok), "linePrefix", this.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4 ); } // node_modules/micromark-util-classify-character/index.js function classifyCharacter(code3) { if (code3 === null || markdownLineEndingOrSpace(code3) || unicodeWhitespace(code3)) { return 1; } if (unicodePunctuation(code3)) { return 2; } } // node_modules/micromark-util-resolve-all/index.js function resolveAll(constructs2, events, context) { const called = []; let index3 = -1; while (++index3 < constructs2.length) { const resolve = constructs2[index3].resolveAll; if (resolve && !called.includes(resolve)) { events = resolve(events, context); called.push(resolve); } } return events; } // node_modules/micromark-core-commonmark/lib/attention.js var attention = { name: "attention", tokenize: tokenizeAttention, resolveAll: resolveAllAttention }; function resolveAllAttention(events, context) { let index3 = -1; let open; let group; let text5; let openingSequence; let closingSequence; let use; let nextEvents; let offset; while (++index3 < events.length) { if (events[index3][0] === "enter" && events[index3][1].type === "attentionSequence" && events[index3][1]._close) { open = index3; while (open--) { if (events[open][0] === "exit" && events[open][1].type === "attentionSequence" && events[open][1]._open && // If the markers are the same: context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index3][1]).charCodeAt(0)) { if ((events[open][1]._close || events[index3][1]._open) && (events[index3][1].end.offset - events[index3][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index3][1].end.offset - events[index3][1].start.offset) % 3)) { continue; } use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index3][1].end.offset - events[index3][1].start.offset > 1 ? 2 : 1; const start = Object.assign({}, events[open][1].end); const end = Object.assign({}, events[index3][1].start); movePoint(start, -use); movePoint(end, use); openingSequence = { type: use > 1 ? "strongSequence" : "emphasisSequence", start, end: Object.assign({}, events[open][1].end) }; closingSequence = { type: use > 1 ? "strongSequence" : "emphasisSequence", start: Object.assign({}, events[index3][1].start), end }; text5 = { type: use > 1 ? "strongText" : "emphasisText", start: Object.assign({}, events[open][1].end), end: Object.assign({}, events[index3][1].start) }; group = { type: use > 1 ? "strong" : "emphasis", start: Object.assign({}, openingSequence.start), end: Object.assign({}, closingSequence.end) }; events[open][1].end = Object.assign({}, openingSequence.start); events[index3][1].start = Object.assign({}, closingSequence.end); nextEvents = []; if (events[open][1].end.offset - events[open][1].start.offset) { nextEvents = push(nextEvents, [ ["enter", events[open][1], context], ["exit", events[open][1], context] ]); } nextEvents = push(nextEvents, [ ["enter", group, context], ["enter", openingSequence, context], ["exit", openingSequence, context], ["enter", text5, context] ]); nextEvents = push( nextEvents, resolveAll( context.parser.constructs.insideSpan.null, events.slice(open + 1, index3), context ) ); nextEvents = push(nextEvents, [ ["exit", text5, context], ["enter", closingSequence, context], ["exit", closingSequence, context], ["exit", group, context] ]); if (events[index3][1].end.offset - events[index3][1].start.offset) { offset = 2; nextEvents = push(nextEvents, [ ["enter", events[index3][1], context], ["exit", events[index3][1], context] ]); } else { offset = 0; } splice(events, open - 1, index3 - open + 3, nextEvents); index3 = open + nextEvents.length - offset - 2; break; } } } } index3 = -1; while (++index3 < events.length) { if (events[index3][1].type === "attentionSequence") { events[index3][1].type = "data"; } } return events; } function tokenizeAttention(effects, ok4) { const attentionMarkers2 = this.parser.constructs.attentionMarkers.null; const previous3 = this.previous; const before = classifyCharacter(previous3); let marker; return start; function start(code3) { marker = code3; effects.enter("attentionSequence"); return inside(code3); } function inside(code3) { if (code3 === marker) { effects.consume(code3); return inside; } const token = effects.exit("attentionSequence"); const after = classifyCharacter(code3); const open = !after || after === 2 && before || attentionMarkers2.includes(code3); const close = !before || before === 2 && after || attentionMarkers2.includes(previous3); token._open = Boolean(marker === 42 ? open : open && (before || !close)); token._close = Boolean(marker === 42 ? close : close && (after || !open)); return ok4(code3); } } function movePoint(point5, offset) { point5.column += offset; point5.offset += offset; point5._bufferIndex += offset; } // node_modules/micromark-core-commonmark/lib/autolink.js var autolink = { name: "autolink", tokenize: tokenizeAutolink }; function tokenizeAutolink(effects, ok4, nok) { let size = 0; return start; function start(code3) { effects.enter("autolink"); effects.enter("autolinkMarker"); effects.consume(code3); effects.exit("autolinkMarker"); effects.enter("autolinkProtocol"); return open; } function open(code3) { if (asciiAlpha(code3)) { effects.consume(code3); return schemeOrEmailAtext; } return emailAtext(code3); } function schemeOrEmailAtext(code3) { if (code3 === 43 || code3 === 45 || code3 === 46 || asciiAlphanumeric(code3)) { size = 1; return schemeInsideOrEmailAtext(code3); } return emailAtext(code3); } function schemeInsideOrEmailAtext(code3) { if (code3 === 58) { effects.consume(code3); size = 0; return urlInside; } if ((code3 === 43 || code3 === 45 || code3 === 46 || asciiAlphanumeric(code3)) && size++ < 32) { effects.consume(code3); return schemeInsideOrEmailAtext; } size = 0; return emailAtext(code3); } function urlInside(code3) { if (code3 === 62) { effects.exit("autolinkProtocol"); effects.enter("autolinkMarker"); effects.consume(code3); effects.exit("autolinkMarker"); effects.exit("autolink"); return ok4; } if (code3 === null || code3 === 32 || code3 === 60 || asciiControl(code3)) { return nok(code3); } effects.consume(code3); return urlInside; } function emailAtext(code3) { if (code3 === 64) { effects.consume(code3); return emailAtSignOrDot; } if (asciiAtext(code3)) { effects.consume(code3); return emailAtext; } return nok(code3); } function emailAtSignOrDot(code3) { return asciiAlphanumeric(code3) ? emailLabel(code3) : nok(code3); } function emailLabel(code3) { if (code3 === 46) { effects.consume(code3); size = 0; return emailAtSignOrDot; } if (code3 === 62) { effects.exit("autolinkProtocol").type = "autolinkEmail"; effects.enter("autolinkMarker"); effects.consume(code3); effects.exit("autolinkMarker"); effects.exit("autolink"); return ok4; } return emailValue(code3); } function emailValue(code3) { if ((code3 === 45 || asciiAlphanumeric(code3)) && size++ < 63) { const next = code3 === 45 ? emailValue : emailLabel; effects.consume(code3); return next; } return nok(code3); } } // node_modules/micromark-core-commonmark/lib/blank-line.js var blankLine = { tokenize: tokenizeBlankLine, partial: true }; function tokenizeBlankLine(effects, ok4, nok) { return start; function start(code3) { return markdownSpace(code3) ? factorySpace(effects, after, "linePrefix")(code3) : after(code3); } function after(code3) { return code3 === null || markdownLineEnding(code3) ? ok4(code3) : nok(code3); } } // node_modules/micromark-core-commonmark/lib/block-quote.js var blockQuote = { name: "blockQuote", tokenize: tokenizeBlockQuoteStart, continuation: { tokenize: tokenizeBlockQuoteContinuation }, exit }; function tokenizeBlockQuoteStart(effects, ok4, nok) { const self2 = this; return start; function start(code3) { if (code3 === 62) { const state = self2.containerState; if (!state.open) { effects.enter("blockQuote", { _container: true }); state.open = true; } effects.enter("blockQuotePrefix"); effects.enter("blockQuoteMarker"); effects.consume(code3); effects.exit("blockQuoteMarker"); return after; } return nok(code3); } function after(code3) { if (markdownSpace(code3)) { effects.enter("blockQuotePrefixWhitespace"); effects.consume(code3); effects.exit("blockQuotePrefixWhitespace"); effects.exit("blockQuotePrefix"); return ok4; } effects.exit("blockQuotePrefix"); return ok4(code3); } } function tokenizeBlockQuoteContinuation(effects, ok4, nok) { const self2 = this; return contStart; function contStart(code3) { if (markdownSpace(code3)) { return factorySpace( effects, contBefore, "linePrefix", self2.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4 )(code3); } return contBefore(code3); } function contBefore(code3) { return effects.attempt(blockQuote, ok4, nok)(code3); } } function exit(effects) { effects.exit("blockQuote"); } // node_modules/micromark-core-commonmark/lib/character-escape.js var characterEscape = { name: "characterEscape", tokenize: tokenizeCharacterEscape }; function tokenizeCharacterEscape(effects, ok4, nok) { return start; function start(code3) { effects.enter("characterEscape"); effects.enter("escapeMarker"); effects.consume(code3); effects.exit("escapeMarker"); return inside; } function inside(code3) { if (asciiPunctuation(code3)) { effects.enter("characterEscapeValue"); effects.consume(code3); effects.exit("characterEscapeValue"); effects.exit("characterEscape"); return ok4; } return nok(code3); } } // node_modules/character-entities/index.js var characterEntities = { AElig: "\xC6", AMP: "&", Aacute: "\xC1", Abreve: "\u0102", Acirc: "\xC2", Acy: "\u0410", Afr: "\u{1D504}", Agrave: "\xC0", Alpha: "\u0391", Amacr: "\u0100", And: "\u2A53", Aogon: "\u0104", Aopf: "\u{1D538}", ApplyFunction: "\u2061", Aring: "\xC5", Ascr: "\u{1D49C}", Assign: "\u2254", Atilde: "\xC3", Auml: "\xC4", Backslash: "\u2216", Barv: "\u2AE7", Barwed: "\u2306", Bcy: "\u0411", Because: "\u2235", Bernoullis: "\u212C", Beta: "\u0392", Bfr: "\u{1D505}", Bopf: "\u{1D539}", Breve: "\u02D8", Bscr: "\u212C", Bumpeq: "\u224E", CHcy: "\u0427", COPY: "\xA9", Cacute: "\u0106", Cap: "\u22D2", CapitalDifferentialD: "\u2145", Cayleys: "\u212D", Ccaron: "\u010C", Ccedil: "\xC7", Ccirc: "\u0108", Cconint: "\u2230", Cdot: "\u010A", Cedilla: "\xB8", CenterDot: "\xB7", Cfr: "\u212D", Chi: "\u03A7", CircleDot: "\u2299", CircleMinus: "\u2296", CirclePlus: "\u2295", CircleTimes: "\u2297", ClockwiseContourIntegral: "\u2232", CloseCurlyDoubleQuote: "\u201D", CloseCurlyQuote: "\u2019", Colon: "\u2237", Colone: "\u2A74", Congruent: "\u2261", Conint: "\u222F", ContourIntegral: "\u222E", Copf: "\u2102", Coproduct: "\u2210", CounterClockwiseContourIntegral: "\u2233", Cross: "\u2A2F", Cscr: "\u{1D49E}", Cup: "\u22D3", CupCap: "\u224D", DD: "\u2145", DDotrahd: "\u2911", DJcy: "\u0402", DScy: "\u0405", DZcy: "\u040F", Dagger: "\u2021", Darr: "\u21A1", Dashv: "\u2AE4", Dcaron: "\u010E", Dcy: "\u0414", Del: "\u2207", Delta: "\u0394", Dfr: "\u{1D507}", DiacriticalAcute: "\xB4", DiacriticalDot: "\u02D9", DiacriticalDoubleAcute: "\u02DD", DiacriticalGrave: "`", DiacriticalTilde: "\u02DC", Diamond: "\u22C4", DifferentialD: "\u2146", Dopf: "\u{1D53B}", Dot: "\xA8", DotDot: "\u20DC", DotEqual: "\u2250", DoubleContourIntegral: "\u222F", DoubleDot: "\xA8", DoubleDownArrow: "\u21D3", DoubleLeftArrow: "\u21D0", DoubleLeftRightArrow: "\u21D4", DoubleLeftTee: "\u2AE4", DoubleLongLeftArrow: "\u27F8", DoubleLongLeftRightArrow: "\u27FA", DoubleLongRightArrow: "\u27F9", DoubleRightArrow: "\u21D2", DoubleRightTee: "\u22A8", DoubleUpArrow: "\u21D1", DoubleUpDownArrow: "\u21D5", DoubleVerticalBar: "\u2225", DownArrow: "\u2193", DownArrowBar: "\u2913", DownArrowUpArrow: "\u21F5", DownBreve: "\u0311", DownLeftRightVector: "\u2950", DownLeftTeeVector: "\u295E", DownLeftVector: "\u21BD", DownLeftVectorBar: "\u2956", DownRightTeeVector: "\u295F", DownRightVector: "\u21C1", DownRightVectorBar: "\u2957", DownTee: "\u22A4", DownTeeArrow: "\u21A7", Downarrow: "\u21D3", Dscr: "\u{1D49F}", Dstrok: "\u0110", ENG: "\u014A", ETH: "\xD0", Eacute: "\xC9", Ecaron: "\u011A", Ecirc: "\xCA", Ecy: "\u042D", Edot: "\u0116", Efr: "\u{1D508}", Egrave: "\xC8", Element: "\u2208", Emacr: "\u0112", EmptySmallSquare: "\u25FB", EmptyVerySmallSquare: "\u25AB", Eogon: "\u0118", Eopf: "\u{1D53C}", Epsilon: "\u0395", Equal: "\u2A75", EqualTilde: "\u2242", Equilibrium: "\u21CC", Escr: "\u2130", Esim: "\u2A73", Eta: "\u0397", Euml: "\xCB", Exists: "\u2203", ExponentialE: "\u2147", Fcy: "\u0424", Ffr: "\u{1D509}", FilledSmallSquare: "\u25FC", FilledVerySmallSquare: "\u25AA", Fopf: "\u{1D53D}", ForAll: "\u2200", Fouriertrf: "\u2131", Fscr: "\u2131", GJcy: "\u0403", GT: ">", Gamma: "\u0393", Gammad: "\u03DC", Gbreve: "\u011E", Gcedil: "\u0122", Gcirc: "\u011C", Gcy: "\u0413", Gdot: "\u0120", Gfr: "\u{1D50A}", Gg: "\u22D9", Gopf: "\u{1D53E}", GreaterEqual: "\u2265", GreaterEqualLess: "\u22DB", GreaterFullEqual: "\u2267", GreaterGreater: "\u2AA2", GreaterLess: "\u2277", GreaterSlantEqual: "\u2A7E", GreaterTilde: "\u2273", Gscr: "\u{1D4A2}", Gt: "\u226B", HARDcy: "\u042A", Hacek: "\u02C7", Hat: "^", Hcirc: "\u0124", Hfr: "\u210C", HilbertSpace: "\u210B", Hopf: "\u210D", HorizontalLine: "\u2500", Hscr: "\u210B", Hstrok: "\u0126", HumpDownHump: "\u224E", HumpEqual: "\u224F", IEcy: "\u0415", IJlig: "\u0132", IOcy: "\u0401", Iacute: "\xCD", Icirc: "\xCE", Icy: "\u0418", Idot: "\u0130", Ifr: "\u2111", Igrave: "\xCC", Im: "\u2111", Imacr: "\u012A", ImaginaryI: "\u2148", Implies: "\u21D2", Int: "\u222C", Integral: "\u222B", Intersection: "\u22C2", InvisibleComma: "\u2063", InvisibleTimes: "\u2062", Iogon: "\u012E", Iopf: "\u{1D540}", Iota: "\u0399", Iscr: "\u2110", Itilde: "\u0128", Iukcy: "\u0406", Iuml: "\xCF", Jcirc: "\u0134", Jcy: "\u0419", Jfr: "\u{1D50D}", Jopf: "\u{1D541}", Jscr: "\u{1D4A5}", Jsercy: "\u0408", Jukcy: "\u0404", KHcy: "\u0425", KJcy: "\u040C", Kappa: "\u039A", Kcedil: "\u0136", Kcy: "\u041A", Kfr: "\u{1D50E}", Kopf: "\u{1D542}", Kscr: "\u{1D4A6}", LJcy: "\u0409", LT: "<", Lacute: "\u0139", Lambda: "\u039B", Lang: "\u27EA", Laplacetrf: "\u2112", Larr: "\u219E", Lcaron: "\u013D", Lcedil: "\u013B", Lcy: "\u041B", LeftAngleBracket: "\u27E8", LeftArrow: "\u2190", LeftArrowBar: "\u21E4", LeftArrowRightArrow: "\u21C6", LeftCeiling: "\u2308", LeftDoubleBracket: "\u27E6", LeftDownTeeVector: "\u2961", LeftDownVector: "\u21C3", LeftDownVectorBar: "\u2959", LeftFloor: "\u230A", LeftRightArrow: "\u2194", LeftRightVector: "\u294E", LeftTee: "\u22A3", LeftTeeArrow: "\u21A4", LeftTeeVector: "\u295A", LeftTriangle: "\u22B2", LeftTriangleBar: "\u29CF", LeftTriangleEqual: "\u22B4", LeftUpDownVector: "\u2951", LeftUpTeeVector: "\u2960", LeftUpVector: "\u21BF", LeftUpVectorBar: "\u2958", LeftVector: "\u21BC", LeftVectorBar: "\u2952", Leftarrow: "\u21D0", Leftrightarrow: "\u21D4", LessEqualGreater: "\u22DA", LessFullEqual: "\u2266", LessGreater: "\u2276", LessLess: "\u2AA1", LessSlantEqual: "\u2A7D", LessTilde: "\u2272", Lfr: "\u{1D50F}", Ll: "\u22D8", Lleftarrow: "\u21DA", Lmidot: "\u013F", LongLeftArrow: "\u27F5", LongLeftRightArrow: "\u27F7", LongRightArrow: "\u27F6", Longleftarrow: "\u27F8", Longleftrightarrow: "\u27FA", Longrightarrow: "\u27F9", Lopf: "\u{1D543}", LowerLeftArrow: "\u2199", LowerRightArrow: "\u2198", Lscr: "\u2112", Lsh: "\u21B0", Lstrok: "\u0141", Lt: "\u226A", Map: "\u2905", Mcy: "\u041C", MediumSpace: "\u205F", Mellintrf: "\u2133", Mfr: "\u{1D510}", MinusPlus: "\u2213", Mopf: "\u{1D544}", Mscr: "\u2133", Mu: "\u039C", NJcy: "\u040A", Nacute: "\u0143", Ncaron: "\u0147", Ncedil: "\u0145", Ncy: "\u041D", NegativeMediumSpace: "\u200B", NegativeThickSpace: "\u200B", NegativeThinSpace: "\u200B", NegativeVeryThinSpace: "\u200B", NestedGreaterGreater: "\u226B", NestedLessLess: "\u226A", NewLine: "\n", Nfr: "\u{1D511}", NoBreak: "\u2060", NonBreakingSpace: "\xA0", Nopf: "\u2115", Not: "\u2AEC", NotCongruent: "\u2262", NotCupCap: "\u226D", NotDoubleVerticalBar: "\u2226", NotElement: "\u2209", NotEqual: "\u2260", NotEqualTilde: "\u2242\u0338", NotExists: "\u2204", NotGreater: "\u226F", NotGreaterEqual: "\u2271", NotGreaterFullEqual: "\u2267\u0338", NotGreaterGreater: "\u226B\u0338", NotGreaterLess: "\u2279", NotGreaterSlantEqual: "\u2A7E\u0338", NotGreaterTilde: "\u2275", NotHumpDownHump: "\u224E\u0338", NotHumpEqual: "\u224F\u0338", NotLeftTriangle: "\u22EA", NotLeftTriangleBar: "\u29CF\u0338", NotLeftTriangleEqual: "\u22EC", NotLess: "\u226E", NotLessEqual: "\u2270", NotLessGreater: "\u2278", NotLessLess: "\u226A\u0338", NotLessSlantEqual: "\u2A7D\u0338", NotLessTilde: "\u2274", NotNestedGreaterGreater: "\u2AA2\u0338", NotNestedLessLess: "\u2AA1\u0338", NotPrecedes: "\u2280", NotPrecedesEqual: "\u2AAF\u0338", NotPrecedesSlantEqual: "\u22E0", NotReverseElement: "\u220C", NotRightTriangle: "\u22EB", NotRightTriangleBar: "\u29D0\u0338", NotRightTriangleEqual: "\u22ED", NotSquareSubset: "\u228F\u0338", NotSquareSubsetEqual: "\u22E2", NotSquareSuperset: "\u2290\u0338", NotSquareSupersetEqual: "\u22E3", NotSubset: "\u2282\u20D2", NotSubsetEqual: "\u2288", NotSucceeds: "\u2281", NotSucceedsEqual: "\u2AB0\u0338", NotSucceedsSlantEqual: "\u22E1", NotSucceedsTilde: "\u227F\u0338", NotSuperset: "\u2283\u20D2", NotSupersetEqual: "\u2289", NotTilde: "\u2241", NotTildeEqual: "\u2244", NotTildeFullEqual: "\u2247", NotTildeTilde: "\u2249", NotVerticalBar: "\u2224", Nscr: "\u{1D4A9}", Ntilde: "\xD1", Nu: "\u039D", OElig: "\u0152", Oacute: "\xD3", Ocirc: "\xD4", Ocy: "\u041E", Odblac: "\u0150", Ofr: "\u{1D512}", Ograve: "\xD2", Omacr: "\u014C", Omega: "\u03A9", Omicron: "\u039F", Oopf: "\u{1D546}", OpenCurlyDoubleQuote: "\u201C", OpenCurlyQuote: "\u2018", Or: "\u2A54", Oscr: "\u{1D4AA}", Oslash: "\xD8", Otilde: "\xD5", Otimes: "\u2A37", Ouml: "\xD6", OverBar: "\u203E", OverBrace: "\u23DE", OverBracket: "\u23B4", OverParenthesis: "\u23DC", PartialD: "\u2202", Pcy: "\u041F", Pfr: "\u{1D513}", Phi: "\u03A6", Pi: "\u03A0", PlusMinus: "\xB1", Poincareplane: "\u210C", Popf: "\u2119", Pr: "\u2ABB", Precedes: "\u227A", PrecedesEqual: "\u2AAF", PrecedesSlantEqual: "\u227C", PrecedesTilde: "\u227E", Prime: "\u2033", Product: "\u220F", Proportion: "\u2237", Proportional: "\u221D", Pscr: "\u{1D4AB}", Psi: "\u03A8", QUOT: '"', Qfr: "\u{1D514}", Qopf: "\u211A", Qscr: "\u{1D4AC}", RBarr: "\u2910", REG: "\xAE", Racute: "\u0154", Rang: "\u27EB", Rarr: "\u21A0", Rarrtl: "\u2916", Rcaron: "\u0158", Rcedil: "\u0156", Rcy: "\u0420", Re: "\u211C", ReverseElement: "\u220B", ReverseEquilibrium: "\u21CB", ReverseUpEquilibrium: "\u296F", Rfr: "\u211C", Rho: "\u03A1", RightAngleBracket: "\u27E9", RightArrow: "\u2192", RightArrowBar: "\u21E5", RightArrowLeftArrow: "\u21C4", RightCeiling: "\u2309", RightDoubleBracket: "\u27E7", RightDownTeeVector: "\u295D", RightDownVector: "\u21C2", RightDownVectorBar: "\u2955", RightFloor: "\u230B", RightTee: "\u22A2", RightTeeArrow: "\u21A6", RightTeeVector: "\u295B", RightTriangle: "\u22B3", RightTriangleBar: "\u29D0", RightTriangleEqual: "\u22B5", RightUpDownVector: "\u294F", RightUpTeeVector: "\u295C", RightUpVector: "\u21BE", RightUpVectorBar: "\u2954", RightVector: "\u21C0", RightVectorBar: "\u2953", Rightarrow: "\u21D2", Ropf: "\u211D", RoundImplies: "\u2970", Rrightarrow: "\u21DB", Rscr: "\u211B", Rsh: "\u21B1", RuleDelayed: "\u29F4", SHCHcy: "\u0429", SHcy: "\u0428", SOFTcy: "\u042C", Sacute: "\u015A", Sc: "\u2ABC", Scaron: "\u0160", Scedil: "\u015E", Scirc: "\u015C", Scy: "\u0421", Sfr: "\u{1D516}", ShortDownArrow: "\u2193", ShortLeftArrow: "\u2190", ShortRightArrow: "\u2192", ShortUpArrow: "\u2191", Sigma: "\u03A3", SmallCircle: "\u2218", Sopf: "\u{1D54A}", Sqrt: "\u221A", Square: "\u25A1", SquareIntersection: "\u2293", SquareSubset: "\u228F", SquareSubsetEqual: "\u2291", SquareSuperset: "\u2290", SquareSupersetEqual: "\u2292", SquareUnion: "\u2294", Sscr: "\u{1D4AE}", Star: "\u22C6", Sub: "\u22D0", Subset: "\u22D0", SubsetEqual: "\u2286", Succeeds: "\u227B", SucceedsEqual: "\u2AB0", SucceedsSlantEqual: "\u227D", SucceedsTilde: "\u227F", SuchThat: "\u220B", Sum: "\u2211", Sup: "\u22D1", Superset: "\u2283", SupersetEqual: "\u2287", Supset: "\u22D1", THORN: "\xDE", TRADE: "\u2122", TSHcy: "\u040B", TScy: "\u0426", Tab: " ", Tau: "\u03A4", Tcaron: "\u0164", Tcedil: "\u0162", Tcy: "\u0422", Tfr: "\u{1D517}", Therefore: "\u2234", Theta: "\u0398", ThickSpace: "\u205F\u200A", ThinSpace: "\u2009", Tilde: "\u223C", TildeEqual: "\u2243", TildeFullEqual: "\u2245", TildeTilde: "\u2248", Topf: "\u{1D54B}", TripleDot: "\u20DB", Tscr: "\u{1D4AF}", Tstrok: "\u0166", Uacute: "\xDA", Uarr: "\u219F", Uarrocir: "\u2949", Ubrcy: "\u040E", Ubreve: "\u016C", Ucirc: "\xDB", Ucy: "\u0423", Udblac: "\u0170", Ufr: "\u{1D518}", Ugrave: "\xD9", Umacr: "\u016A", UnderBar: "_", UnderBrace: "\u23DF", UnderBracket: "\u23B5", UnderParenthesis: "\u23DD", Union: "\u22C3", UnionPlus: "\u228E", Uogon: "\u0172", Uopf: "\u{1D54C}", UpArrow: "\u2191", UpArrowBar: "\u2912", UpArrowDownArrow: "\u21C5", UpDownArrow: "\u2195", UpEquilibrium: "\u296E", UpTee: "\u22A5", UpTeeArrow: "\u21A5", Uparrow: "\u21D1", Updownarrow: "\u21D5", UpperLeftArrow: "\u2196", UpperRightArrow: "\u2197", Upsi: "\u03D2", Upsilon: "\u03A5", Uring: "\u016E", Uscr: "\u{1D4B0}", Utilde: "\u0168", Uuml: "\xDC", VDash: "\u22AB", Vbar: "\u2AEB", Vcy: "\u0412", Vdash: "\u22A9", Vdashl: "\u2AE6", Vee: "\u22C1", Verbar: "\u2016", Vert: "\u2016", VerticalBar: "\u2223", VerticalLine: "|", VerticalSeparator: "\u2758", VerticalTilde: "\u2240", VeryThinSpace: "\u200A", Vfr: "\u{1D519}", Vopf: "\u{1D54D}", Vscr: "\u{1D4B1}", Vvdash: "\u22AA", Wcirc: "\u0174", Wedge: "\u22C0", Wfr: "\u{1D51A}", Wopf: "\u{1D54E}", Wscr: "\u{1D4B2}", Xfr: "\u{1D51B}", Xi: "\u039E", Xopf: "\u{1D54F}", Xscr: "\u{1D4B3}", YAcy: "\u042F", YIcy: "\u0407", YUcy: "\u042E", Yacute: "\xDD", Ycirc: "\u0176", Ycy: "\u042B", Yfr: "\u{1D51C}", Yopf: "\u{1D550}", Yscr: "\u{1D4B4}", Yuml: "\u0178", ZHcy: "\u0416", Zacute: "\u0179", Zcaron: "\u017D", Zcy: "\u0417", Zdot: "\u017B", ZeroWidthSpace: "\u200B", Zeta: "\u0396", Zfr: "\u2128", Zopf: "\u2124", Zscr: "\u{1D4B5}", aacute: "\xE1", abreve: "\u0103", ac: "\u223E", acE: "\u223E\u0333", acd: "\u223F", acirc: "\xE2", acute: "\xB4", acy: "\u0430", aelig: "\xE6", af: "\u2061", afr: "\u{1D51E}", agrave: "\xE0", alefsym: "\u2135", aleph: "\u2135", alpha: "\u03B1", amacr: "\u0101", amalg: "\u2A3F", amp: "&", and: "\u2227", andand: "\u2A55", andd: "\u2A5C", andslope: "\u2A58", andv: "\u2A5A", ang: "\u2220", ange: "\u29A4", angle: "\u2220", angmsd: "\u2221", angmsdaa: "\u29A8", angmsdab: "\u29A9", angmsdac: "\u29AA", angmsdad: "\u29AB", angmsdae: "\u29AC", angmsdaf: "\u29AD", angmsdag: "\u29AE", angmsdah: "\u29AF", angrt: "\u221F", angrtvb: "\u22BE", angrtvbd: "\u299D", angsph: "\u2222", angst: "\xC5", angzarr: "\u237C", aogon: "\u0105", aopf: "\u{1D552}", ap: "\u2248", apE: "\u2A70", apacir: "\u2A6F", ape: "\u224A", apid: "\u224B", apos: "'", approx: "\u2248", approxeq: "\u224A", aring: "\xE5", ascr: "\u{1D4B6}", ast: "*", asymp: "\u2248", asympeq: "\u224D", atilde: "\xE3", auml: "\xE4", awconint: "\u2233", awint: "\u2A11", bNot: "\u2AED", backcong: "\u224C", backepsilon: "\u03F6", backprime: "\u2035", backsim: "\u223D", backsimeq: "\u22CD", barvee: "\u22BD", barwed: "\u2305", barwedge: "\u2305", bbrk: "\u23B5", bbrktbrk: "\u23B6", bcong: "\u224C", bcy: "\u0431", bdquo: "\u201E", becaus: "\u2235", because: "\u2235", bemptyv: "\u29B0", bepsi: "\u03F6", bernou: "\u212C", beta: "\u03B2", beth: "\u2136", between: "\u226C", bfr: "\u{1D51F}", bigcap: "\u22C2", bigcirc: "\u25EF", bigcup: "\u22C3", bigodot: "\u2A00", bigoplus: "\u2A01", bigotimes: "\u2A02", bigsqcup: "\u2A06", bigstar: "\u2605", bigtriangledown: "\u25BD", bigtriangleup: "\u25B3", biguplus: "\u2A04", bigvee: "\u22C1", bigwedge: "\u22C0", bkarow: "\u290D", blacklozenge: "\u29EB", blacksquare: "\u25AA", blacktriangle: "\u25B4", blacktriangledown: "\u25BE", blacktriangleleft: "\u25C2", blacktriangleright: "\u25B8", blank: "\u2423", blk12: "\u2592", blk14: "\u2591", blk34: "\u2593", block: "\u2588", bne: "=\u20E5", bnequiv: "\u2261\u20E5", bnot: "\u2310", bopf: "\u{1D553}", bot: "\u22A5", bottom: "\u22A5", bowtie: "\u22C8", boxDL: "\u2557", boxDR: "\u2554", boxDl: "\u2556", boxDr: "\u2553", boxH: "\u2550", boxHD: "\u2566", boxHU: "\u2569", boxHd: "\u2564", boxHu: "\u2567", boxUL: "\u255D", boxUR: "\u255A", boxUl: "\u255C", boxUr: "\u2559", boxV: "\u2551", boxVH: "\u256C", boxVL: "\u2563", boxVR: "\u2560", boxVh: "\u256B", boxVl: "\u2562", boxVr: "\u255F", boxbox: "\u29C9", boxdL: "\u2555", boxdR: "\u2552", boxdl: "\u2510", boxdr: "\u250C", boxh: "\u2500", boxhD: "\u2565", boxhU: "\u2568", boxhd: "\u252C", boxhu: "\u2534", boxminus: "\u229F", boxplus: "\u229E", boxtimes: "\u22A0", boxuL: "\u255B", boxuR: "\u2558", boxul: "\u2518", boxur: "\u2514", boxv: "\u2502", boxvH: "\u256A", boxvL: "\u2561", boxvR: "\u255E", boxvh: "\u253C", boxvl: "\u2524", boxvr: "\u251C", bprime: "\u2035", breve: "\u02D8", brvbar: "\xA6", bscr: "\u{1D4B7}", bsemi: "\u204F", bsim: "\u223D", bsime: "\u22CD", bsol: "\\", bsolb: "\u29C5", bsolhsub: "\u27C8", bull: "\u2022", bullet: "\u2022", bump: "\u224E", bumpE: "\u2AAE", bumpe: "\u224F", bumpeq: "\u224F", cacute: "\u0107", cap: "\u2229", capand: "\u2A44", capbrcup: "\u2A49", capcap: "\u2A4B", capcup: "\u2A47", capdot: "\u2A40", caps: "\u2229\uFE00", caret: "\u2041", caron: "\u02C7", ccaps: "\u2A4D", ccaron: "\u010D", ccedil: "\xE7", ccirc: "\u0109", ccups: "\u2A4C", ccupssm: "\u2A50", cdot: "\u010B", cedil: "\xB8", cemptyv: "\u29B2", cent: "\xA2", centerdot: "\xB7", cfr: "\u{1D520}", chcy: "\u0447", check: "\u2713", checkmark: "\u2713", chi: "\u03C7", cir: "\u25CB", cirE: "\u29C3", circ: "\u02C6", circeq: "\u2257", circlearrowleft: "\u21BA", circlearrowright: "\u21BB", circledR: "\xAE", circledS: "\u24C8", circledast: "\u229B", circledcirc: "\u229A", circleddash: "\u229D", cire: "\u2257", cirfnint: "\u2A10", cirmid: "\u2AEF", cirscir: "\u29C2", clubs: "\u2663", clubsuit: "\u2663", colon: ":", colone: "\u2254", coloneq: "\u2254", comma: ",", commat: "@", comp: "\u2201", compfn: "\u2218", complement: "\u2201", complexes: "\u2102", cong: "\u2245", congdot: "\u2A6D", conint: "\u222E", copf: "\u{1D554}", coprod: "\u2210", copy: "\xA9", copysr: "\u2117", crarr: "\u21B5", cross: "\u2717", cscr: "\u{1D4B8}", csub: "\u2ACF", csube: "\u2AD1", csup: "\u2AD0", csupe: "\u2AD2", ctdot: "\u22EF", cudarrl: "\u2938", cudarrr: "\u2935", cuepr: "\u22DE", cuesc: "\u22DF", cularr: "\u21B6", cularrp: "\u293D", cup: "\u222A", cupbrcap: "\u2A48", cupcap: "\u2A46", cupcup: "\u2A4A", cupdot: "\u228D", cupor: "\u2A45", cups: "\u222A\uFE00", curarr: "\u21B7", curarrm: "\u293C", curlyeqprec: "\u22DE", curlyeqsucc: "\u22DF", curlyvee: "\u22CE", curlywedge: "\u22CF", curren: "\xA4", curvearrowleft: "\u21B6", curvearrowright: "\u21B7", cuvee: "\u22CE", cuwed: "\u22CF", cwconint: "\u2232", cwint: "\u2231", cylcty: "\u232D", dArr: "\u21D3", dHar: "\u2965", dagger: "\u2020", daleth: "\u2138", darr: "\u2193", dash: "\u2010", dashv: "\u22A3", dbkarow: "\u290F", dblac: "\u02DD", dcaron: "\u010F", dcy: "\u0434", dd: "\u2146", ddagger: "\u2021", ddarr: "\u21CA", ddotseq: "\u2A77", deg: "\xB0", delta: "\u03B4", demptyv: "\u29B1", dfisht: "\u297F", dfr: "\u{1D521}", dharl: "\u21C3", dharr: "\u21C2", diam: "\u22C4", diamond: "\u22C4", diamondsuit: "\u2666", diams: "\u2666", die: "\xA8", digamma: "\u03DD", disin: "\u22F2", div: "\xF7", divide: "\xF7", divideontimes: "\u22C7", divonx: "\u22C7", djcy: "\u0452", dlcorn: "\u231E", dlcrop: "\u230D", dollar: "$", dopf: "\u{1D555}", dot: "\u02D9", doteq: "\u2250", doteqdot: "\u2251", dotminus: "\u2238", dotplus: "\u2214", dotsquare: "\u22A1", doublebarwedge: "\u2306", downarrow: "\u2193", downdownarrows: "\u21CA", downharpoonleft: "\u21C3", downharpoonright: "\u21C2", drbkarow: "\u2910", drcorn: "\u231F", drcrop: "\u230C", dscr: "\u{1D4B9}", dscy: "\u0455", dsol: "\u29F6", dstrok: "\u0111", dtdot: "\u22F1", dtri: "\u25BF", dtrif: "\u25BE", duarr: "\u21F5", duhar: "\u296F", dwangle: "\u29A6", dzcy: "\u045F", dzigrarr: "\u27FF", eDDot: "\u2A77", eDot: "\u2251", eacute: "\xE9", easter: "\u2A6E", ecaron: "\u011B", ecir: "\u2256", ecirc: "\xEA", ecolon: "\u2255", ecy: "\u044D", edot: "\u0117", ee: "\u2147", efDot: "\u2252", efr: "\u{1D522}", eg: "\u2A9A", egrave: "\xE8", egs: "\u2A96", egsdot: "\u2A98", el: "\u2A99", elinters: "\u23E7", ell: "\u2113", els: "\u2A95", elsdot: "\u2A97", emacr: "\u0113", empty: "\u2205", emptyset: "\u2205", emptyv: "\u2205", emsp13: "\u2004", emsp14: "\u2005", emsp: "\u2003", eng: "\u014B", ensp: "\u2002", eogon: "\u0119", eopf: "\u{1D556}", epar: "\u22D5", eparsl: "\u29E3", eplus: "\u2A71", epsi: "\u03B5", epsilon: "\u03B5", epsiv: "\u03F5", eqcirc: "\u2256", eqcolon: "\u2255", eqsim: "\u2242", eqslantgtr: "\u2A96", eqslantless: "\u2A95", equals: "=", equest: "\u225F", equiv: "\u2261", equivDD: "\u2A78", eqvparsl: "\u29E5", erDot: "\u2253", erarr: "\u2971", escr: "\u212F", esdot: "\u2250", esim: "\u2242", eta: "\u03B7", eth: "\xF0", euml: "\xEB", euro: "\u20AC", excl: "!", exist: "\u2203", expectation: "\u2130", exponentiale: "\u2147", fallingdotseq: "\u2252", fcy: "\u0444", female: "\u2640", ffilig: "\uFB03", fflig: "\uFB00", ffllig: "\uFB04", ffr: "\u{1D523}", filig: "\uFB01", fjlig: "fj", flat: "\u266D", fllig: "\uFB02", fltns: "\u25B1", fnof: "\u0192", fopf: "\u{1D557}", forall: "\u2200", fork: "\u22D4", forkv: "\u2AD9", fpartint: "\u2A0D", frac12: "\xBD", frac13: "\u2153", frac14: "\xBC", frac15: "\u2155", frac16: "\u2159", frac18: "\u215B", frac23: "\u2154", frac25: "\u2156", frac34: "\xBE", frac35: "\u2157", frac38: "\u215C", frac45: "\u2158", frac56: "\u215A", frac58: "\u215D", frac78: "\u215E", frasl: "\u2044", frown: "\u2322", fscr: "\u{1D4BB}", gE: "\u2267", gEl: "\u2A8C", gacute: "\u01F5", gamma: "\u03B3", gammad: "\u03DD", gap: "\u2A86", gbreve: "\u011F", gcirc: "\u011D", gcy: "\u0433", gdot: "\u0121", ge: "\u2265", gel: "\u22DB", geq: "\u2265", geqq: "\u2267", geqslant: "\u2A7E", ges: "\u2A7E", gescc: "\u2AA9", gesdot: "\u2A80", gesdoto: "\u2A82", gesdotol: "\u2A84", gesl: "\u22DB\uFE00", gesles: "\u2A94", gfr: "\u{1D524}", gg: "\u226B", ggg: "\u22D9", gimel: "\u2137", gjcy: "\u0453", gl: "\u2277", glE: "\u2A92", gla: "\u2AA5", glj: "\u2AA4", gnE: "\u2269", gnap: "\u2A8A", gnapprox: "\u2A8A", gne: "\u2A88", gneq: "\u2A88", gneqq: "\u2269", gnsim: "\u22E7", gopf: "\u{1D558}", grave: "`", gscr: "\u210A", gsim: "\u2273", gsime: "\u2A8E", gsiml: "\u2A90", gt: ">", gtcc: "\u2AA7", gtcir: "\u2A7A", gtdot: "\u22D7", gtlPar: "\u2995", gtquest: "\u2A7C", gtrapprox: "\u2A86", gtrarr: "\u2978", gtrdot: "\u22D7", gtreqless: "\u22DB", gtreqqless: "\u2A8C", gtrless: "\u2277", gtrsim: "\u2273", gvertneqq: "\u2269\uFE00", gvnE: "\u2269\uFE00", hArr: "\u21D4", hairsp: "\u200A", half: "\xBD", hamilt: "\u210B", hardcy: "\u044A", harr: "\u2194", harrcir: "\u2948", harrw: "\u21AD", hbar: "\u210F", hcirc: "\u0125", hearts: "\u2665", heartsuit: "\u2665", hellip: "\u2026", hercon: "\u22B9", hfr: "\u{1D525}", hksearow: "\u2925", hkswarow: "\u2926", hoarr: "\u21FF", homtht: "\u223B", hookleftarrow: "\u21A9", hookrightarrow: "\u21AA", hopf: "\u{1D559}", horbar: "\u2015", hscr: "\u{1D4BD}", hslash: "\u210F", hstrok: "\u0127", hybull: "\u2043", hyphen: "\u2010", iacute: "\xED", ic: "\u2063", icirc: "\xEE", icy: "\u0438", iecy: "\u0435", iexcl: "\xA1", iff: "\u21D4", ifr: "\u{1D526}", igrave: "\xEC", ii: "\u2148", iiiint: "\u2A0C", iiint: "\u222D", iinfin: "\u29DC", iiota: "\u2129", ijlig: "\u0133", imacr: "\u012B", image: "\u2111", imagline: "\u2110", imagpart: "\u2111", imath: "\u0131", imof: "\u22B7", imped: "\u01B5", in: "\u2208", incare: "\u2105", infin: "\u221E", infintie: "\u29DD", inodot: "\u0131", int: "\u222B", intcal: "\u22BA", integers: "\u2124", intercal: "\u22BA", intlarhk: "\u2A17", intprod: "\u2A3C", iocy: "\u0451", iogon: "\u012F", iopf: "\u{1D55A}", iota: "\u03B9", iprod: "\u2A3C", iquest: "\xBF", iscr: "\u{1D4BE}", isin: "\u2208", isinE: "\u22F9", isindot: "\u22F5", isins: "\u22F4", isinsv: "\u22F3", isinv: "\u2208", it: "\u2062", itilde: "\u0129", iukcy: "\u0456", iuml: "\xEF", jcirc: "\u0135", jcy: "\u0439", jfr: "\u{1D527}", jmath: "\u0237", jopf: "\u{1D55B}", jscr: "\u{1D4BF}", jsercy: "\u0458", jukcy: "\u0454", kappa: "\u03BA", kappav: "\u03F0", kcedil: "\u0137", kcy: "\u043A", kfr: "\u{1D528}", kgreen: "\u0138", khcy: "\u0445", kjcy: "\u045C", kopf: "\u{1D55C}", kscr: "\u{1D4C0}", lAarr: "\u21DA", lArr: "\u21D0", lAtail: "\u291B", lBarr: "\u290E", lE: "\u2266", lEg: "\u2A8B", lHar: "\u2962", lacute: "\u013A", laemptyv: "\u29B4", lagran: "\u2112", lambda: "\u03BB", lang: "\u27E8", langd: "\u2991", langle: "\u27E8", lap: "\u2A85", laquo: "\xAB", larr: "\u2190", larrb: "\u21E4", larrbfs: "\u291F", larrfs: "\u291D", larrhk: "\u21A9", larrlp: "\u21AB", larrpl: "\u2939", larrsim: "\u2973", larrtl: "\u21A2", lat: "\u2AAB", latail: "\u2919", late: "\u2AAD", lates: "\u2AAD\uFE00", lbarr: "\u290C", lbbrk: "\u2772", lbrace: "{", lbrack: "[", lbrke: "\u298B", lbrksld: "\u298F", lbrkslu: "\u298D", lcaron: "\u013E", lcedil: "\u013C", lceil: "\u2308", lcub: "{", lcy: "\u043B", ldca: "\u2936", ldquo: "\u201C", ldquor: "\u201E", ldrdhar: "\u2967", ldrushar: "\u294B", ldsh: "\u21B2", le: "\u2264", leftarrow: "\u2190", leftarrowtail: "\u21A2", leftharpoondown: "\u21BD", leftharpoonup: "\u21BC", leftleftarrows: "\u21C7", leftrightarrow: "\u2194", leftrightarrows: "\u21C6", leftrightharpoons: "\u21CB", leftrightsquigarrow: "\u21AD", leftthreetimes: "\u22CB", leg: "\u22DA", leq: "\u2264", leqq: "\u2266", leqslant: "\u2A7D", les: "\u2A7D", lescc: "\u2AA8", lesdot: "\u2A7F", lesdoto: "\u2A81", lesdotor: "\u2A83", lesg: "\u22DA\uFE00", lesges: "\u2A93", lessapprox: "\u2A85", lessdot: "\u22D6", lesseqgtr: "\u22DA", lesseqqgtr: "\u2A8B", lessgtr: "\u2276", lesssim: "\u2272", lfisht: "\u297C", lfloor: "\u230A", lfr: "\u{1D529}", lg: "\u2276", lgE: "\u2A91", lhard: "\u21BD", lharu: "\u21BC", lharul: "\u296A", lhblk: "\u2584", ljcy: "\u0459", ll: "\u226A", llarr: "\u21C7", llcorner: "\u231E", llhard: "\u296B", lltri: "\u25FA", lmidot: "\u0140", lmoust: "\u23B0", lmoustache: "\u23B0", lnE: "\u2268", lnap: "\u2A89", lnapprox: "\u2A89", lne: "\u2A87", lneq: "\u2A87", lneqq: "\u2268", lnsim: "\u22E6", loang: "\u27EC", loarr: "\u21FD", lobrk: "\u27E6", longleftarrow: "\u27F5", longleftrightarrow: "\u27F7", longmapsto: "\u27FC", longrightarrow: "\u27F6", looparrowleft: "\u21AB", looparrowright: "\u21AC", lopar: "\u2985", lopf: "\u{1D55D}", loplus: "\u2A2D", lotimes: "\u2A34", lowast: "\u2217", lowbar: "_", loz: "\u25CA", lozenge: "\u25CA", lozf: "\u29EB", lpar: "(", lparlt: "\u2993", lrarr: "\u21C6", lrcorner: "\u231F", lrhar: "\u21CB", lrhard: "\u296D", lrm: "\u200E", lrtri: "\u22BF", lsaquo: "\u2039", lscr: "\u{1D4C1}", lsh: "\u21B0", lsim: "\u2272", lsime: "\u2A8D", lsimg: "\u2A8F", lsqb: "[", lsquo: "\u2018", lsquor: "\u201A", lstrok: "\u0142", lt: "<", ltcc: "\u2AA6", ltcir: "\u2A79", ltdot: "\u22D6", lthree: "\u22CB", ltimes: "\u22C9", ltlarr: "\u2976", ltquest: "\u2A7B", ltrPar: "\u2996", ltri: "\u25C3", ltrie: "\u22B4", ltrif: "\u25C2", lurdshar: "\u294A", luruhar: "\u2966", lvertneqq: "\u2268\uFE00", lvnE: "\u2268\uFE00", mDDot: "\u223A", macr: "\xAF", male: "\u2642", malt: "\u2720", maltese: "\u2720", map: "\u21A6", mapsto: "\u21A6", mapstodown: "\u21A7", mapstoleft: "\u21A4", mapstoup: "\u21A5", marker: "\u25AE", mcomma: "\u2A29", mcy: "\u043C", mdash: "\u2014", measuredangle: "\u2221", mfr: "\u{1D52A}", mho: "\u2127", micro: "\xB5", mid: "\u2223", midast: "*", midcir: "\u2AF0", middot: "\xB7", minus: "\u2212", minusb: "\u229F", minusd: "\u2238", minusdu: "\u2A2A", mlcp: "\u2ADB", mldr: "\u2026", mnplus: "\u2213", models: "\u22A7", mopf: "\u{1D55E}", mp: "\u2213", mscr: "\u{1D4C2}", mstpos: "\u223E", mu: "\u03BC", multimap: "\u22B8", mumap: "\u22B8", nGg: "\u22D9\u0338", nGt: "\u226B\u20D2", nGtv: "\u226B\u0338", nLeftarrow: "\u21CD", nLeftrightarrow: "\u21CE", nLl: "\u22D8\u0338", nLt: "\u226A\u20D2", nLtv: "\u226A\u0338", nRightarrow: "\u21CF", nVDash: "\u22AF", nVdash: "\u22AE", nabla: "\u2207", nacute: "\u0144", nang: "\u2220\u20D2", nap: "\u2249", napE: "\u2A70\u0338", napid: "\u224B\u0338", napos: "\u0149", napprox: "\u2249", natur: "\u266E", natural: "\u266E", naturals: "\u2115", nbsp: "\xA0", nbump: "\u224E\u0338", nbumpe: "\u224F\u0338", ncap: "\u2A43", ncaron: "\u0148", ncedil: "\u0146", ncong: "\u2247", ncongdot: "\u2A6D\u0338", ncup: "\u2A42", ncy: "\u043D", ndash: "\u2013", ne: "\u2260", neArr: "\u21D7", nearhk: "\u2924", nearr: "\u2197", nearrow: "\u2197", nedot: "\u2250\u0338", nequiv: "\u2262", nesear: "\u2928", nesim: "\u2242\u0338", nexist: "\u2204", nexists: "\u2204", nfr: "\u{1D52B}", ngE: "\u2267\u0338", nge: "\u2271", ngeq: "\u2271", ngeqq: "\u2267\u0338", ngeqslant: "\u2A7E\u0338", nges: "\u2A7E\u0338", ngsim: "\u2275", ngt: "\u226F", ngtr: "\u226F", nhArr: "\u21CE", nharr: "\u21AE", nhpar: "\u2AF2", ni: "\u220B", nis: "\u22FC", nisd: "\u22FA", niv: "\u220B", njcy: "\u045A", nlArr: "\u21CD", nlE: "\u2266\u0338", nlarr: "\u219A", nldr: "\u2025", nle: "\u2270", nleftarrow: "\u219A", nleftrightarrow: "\u21AE", nleq: "\u2270", nleqq: "\u2266\u0338", nleqslant: "\u2A7D\u0338", nles: "\u2A7D\u0338", nless: "\u226E", nlsim: "\u2274", nlt: "\u226E", nltri: "\u22EA", nltrie: "\u22EC", nmid: "\u2224", nopf: "\u{1D55F}", not: "\xAC", notin: "\u2209", notinE: "\u22F9\u0338", notindot: "\u22F5\u0338", notinva: "\u2209", notinvb: "\u22F7", notinvc: "\u22F6", notni: "\u220C", notniva: "\u220C", notnivb: "\u22FE", notnivc: "\u22FD", npar: "\u2226", nparallel: "\u2226", nparsl: "\u2AFD\u20E5", npart: "\u2202\u0338", npolint: "\u2A14", npr: "\u2280", nprcue: "\u22E0", npre: "\u2AAF\u0338", nprec: "\u2280", npreceq: "\u2AAF\u0338", nrArr: "\u21CF", nrarr: "\u219B", nrarrc: "\u2933\u0338", nrarrw: "\u219D\u0338", nrightarrow: "\u219B", nrtri: "\u22EB", nrtrie: "\u22ED", nsc: "\u2281", nsccue: "\u22E1", nsce: "\u2AB0\u0338", nscr: "\u{1D4C3}", nshortmid: "\u2224", nshortparallel: "\u2226", nsim: "\u2241", nsime: "\u2244", nsimeq: "\u2244", nsmid: "\u2224", nspar: "\u2226", nsqsube: "\u22E2", nsqsupe: "\u22E3", nsub: "\u2284", nsubE: "\u2AC5\u0338", nsube: "\u2288", nsubset: "\u2282\u20D2", nsubseteq: "\u2288", nsubseteqq: "\u2AC5\u0338", nsucc: "\u2281", nsucceq: "\u2AB0\u0338", nsup: "\u2285", nsupE: "\u2AC6\u0338", nsupe: "\u2289", nsupset: "\u2283\u20D2", nsupseteq: "\u2289", nsupseteqq: "\u2AC6\u0338", ntgl: "\u2279", ntilde: "\xF1", ntlg: "\u2278", ntriangleleft: "\u22EA", ntrianglelefteq: "\u22EC", ntriangleright: "\u22EB", ntrianglerighteq: "\u22ED", nu: "\u03BD", num: "#", numero: "\u2116", numsp: "\u2007", nvDash: "\u22AD", nvHarr: "\u2904", nvap: "\u224D\u20D2", nvdash: "\u22AC", nvge: "\u2265\u20D2", nvgt: ">\u20D2", nvinfin: "\u29DE", nvlArr: "\u2902", nvle: "\u2264\u20D2", nvlt: "<\u20D2", nvltrie: "\u22B4\u20D2", nvrArr: "\u2903", nvrtrie: "\u22B5\u20D2", nvsim: "\u223C\u20D2", nwArr: "\u21D6", nwarhk: "\u2923", nwarr: "\u2196", nwarrow: "\u2196", nwnear: "\u2927", oS: "\u24C8", oacute: "\xF3", oast: "\u229B", ocir: "\u229A", ocirc: "\xF4", ocy: "\u043E", odash: "\u229D", odblac: "\u0151", odiv: "\u2A38", odot: "\u2299", odsold: "\u29BC", oelig: "\u0153", ofcir: "\u29BF", ofr: "\u{1D52C}", ogon: "\u02DB", ograve: "\xF2", ogt: "\u29C1", ohbar: "\u29B5", ohm: "\u03A9", oint: "\u222E", olarr: "\u21BA", olcir: "\u29BE", olcross: "\u29BB", oline: "\u203E", olt: "\u29C0", omacr: "\u014D", omega: "\u03C9", omicron: "\u03BF", omid: "\u29B6", ominus: "\u2296", oopf: "\u{1D560}", opar: "\u29B7", operp: "\u29B9", oplus: "\u2295", or: "\u2228", orarr: "\u21BB", ord: "\u2A5D", order: "\u2134", orderof: "\u2134", ordf: "\xAA", ordm: "\xBA", origof: "\u22B6", oror: "\u2A56", orslope: "\u2A57", orv: "\u2A5B", oscr: "\u2134", oslash: "\xF8", osol: "\u2298", otilde: "\xF5", otimes: "\u2297", otimesas: "\u2A36", ouml: "\xF6", ovbar: "\u233D", par: "\u2225", para: "\xB6", parallel: "\u2225", parsim: "\u2AF3", parsl: "\u2AFD", part: "\u2202", pcy: "\u043F", percnt: "%", period: ".", permil: "\u2030", perp: "\u22A5", pertenk: "\u2031", pfr: "\u{1D52D}", phi: "\u03C6", phiv: "\u03D5", phmmat: "\u2133", phone: "\u260E", pi: "\u03C0", pitchfork: "\u22D4", piv: "\u03D6", planck: "\u210F", planckh: "\u210E", plankv: "\u210F", plus: "+", plusacir: "\u2A23", plusb: "\u229E", pluscir: "\u2A22", plusdo: "\u2214", plusdu: "\u2A25", pluse: "\u2A72", plusmn: "\xB1", plussim: "\u2A26", plustwo: "\u2A27", pm: "\xB1", pointint: "\u2A15", popf: "\u{1D561}", pound: "\xA3", pr: "\u227A", prE: "\u2AB3", prap: "\u2AB7", prcue: "\u227C", pre: "\u2AAF", prec: "\u227A", precapprox: "\u2AB7", preccurlyeq: "\u227C", preceq: "\u2AAF", precnapprox: "\u2AB9", precneqq: "\u2AB5", precnsim: "\u22E8", precsim: "\u227E", prime: "\u2032", primes: "\u2119", prnE: "\u2AB5", prnap: "\u2AB9", prnsim: "\u22E8", prod: "\u220F", profalar: "\u232E", profline: "\u2312", profsurf: "\u2313", prop: "\u221D", propto: "\u221D", prsim: "\u227E", prurel: "\u22B0", pscr: "\u{1D4C5}", psi: "\u03C8", puncsp: "\u2008", qfr: "\u{1D52E}", qint: "\u2A0C", qopf: "\u{1D562}", qprime: "\u2057", qscr: "\u{1D4C6}", quaternions: "\u210D", quatint: "\u2A16", quest: "?", questeq: "\u225F", quot: '"', rAarr: "\u21DB", rArr: "\u21D2", rAtail: "\u291C", rBarr: "\u290F", rHar: "\u2964", race: "\u223D\u0331", racute: "\u0155", radic: "\u221A", raemptyv: "\u29B3", rang: "\u27E9", rangd: "\u2992", range: "\u29A5", rangle: "\u27E9", raquo: "\xBB", rarr: "\u2192", rarrap: "\u2975", rarrb: "\u21E5", rarrbfs: "\u2920", rarrc: "\u2933", rarrfs: "\u291E", rarrhk: "\u21AA", rarrlp: "\u21AC", rarrpl: "\u2945", rarrsim: "\u2974", rarrtl: "\u21A3", rarrw: "\u219D", ratail: "\u291A", ratio: "\u2236", rationals: "\u211A", rbarr: "\u290D", rbbrk: "\u2773", rbrace: "}", rbrack: "]", rbrke: "\u298C", rbrksld: "\u298E", rbrkslu: "\u2990", rcaron: "\u0159", rcedil: "\u0157", rceil: "\u2309", rcub: "}", rcy: "\u0440", rdca: "\u2937", rdldhar: "\u2969", rdquo: "\u201D", rdquor: "\u201D", rdsh: "\u21B3", real: "\u211C", realine: "\u211B", realpart: "\u211C", reals: "\u211D", rect: "\u25AD", reg: "\xAE", rfisht: "\u297D", rfloor: "\u230B", rfr: "\u{1D52F}", rhard: "\u21C1", rharu: "\u21C0", rharul: "\u296C", rho: "\u03C1", rhov: "\u03F1", rightarrow: "\u2192", rightarrowtail: "\u21A3", rightharpoondown: "\u21C1", rightharpoonup: "\u21C0", rightleftarrows: "\u21C4", rightleftharpoons: "\u21CC", rightrightarrows: "\u21C9", rightsquigarrow: "\u219D", rightthreetimes: "\u22CC", ring: "\u02DA", risingdotseq: "\u2253", rlarr: "\u21C4", rlhar: "\u21CC", rlm: "\u200F", rmoust: "\u23B1", rmoustache: "\u23B1", rnmid: "\u2AEE", roang: "\u27ED", roarr: "\u21FE", robrk: "\u27E7", ropar: "\u2986", ropf: "\u{1D563}", roplus: "\u2A2E", rotimes: "\u2A35", rpar: ")", rpargt: "\u2994", rppolint: "\u2A12", rrarr: "\u21C9", rsaquo: "\u203A", rscr: "\u{1D4C7}", rsh: "\u21B1", rsqb: "]", rsquo: "\u2019", rsquor: "\u2019", rthree: "\u22CC", rtimes: "\u22CA", rtri: "\u25B9", rtrie: "\u22B5", rtrif: "\u25B8", rtriltri: "\u29CE", ruluhar: "\u2968", rx: "\u211E", sacute: "\u015B", sbquo: "\u201A", sc: "\u227B", scE: "\u2AB4", scap: "\u2AB8", scaron: "\u0161", sccue: "\u227D", sce: "\u2AB0", scedil: "\u015F", scirc: "\u015D", scnE: "\u2AB6", scnap: "\u2ABA", scnsim: "\u22E9", scpolint: "\u2A13", scsim: "\u227F", scy: "\u0441", sdot: "\u22C5", sdotb: "\u22A1", sdote: "\u2A66", seArr: "\u21D8", searhk: "\u2925", searr: "\u2198", searrow: "\u2198", sect: "\xA7", semi: ";", seswar: "\u2929", setminus: "\u2216", setmn: "\u2216", sext: "\u2736", sfr: "\u{1D530}", sfrown: "\u2322", sharp: "\u266F", shchcy: "\u0449", shcy: "\u0448", shortmid: "\u2223", shortparallel: "\u2225", shy: "\xAD", sigma: "\u03C3", sigmaf: "\u03C2", sigmav: "\u03C2", sim: "\u223C", simdot: "\u2A6A", sime: "\u2243", simeq: "\u2243", simg: "\u2A9E", simgE: "\u2AA0", siml: "\u2A9D", simlE: "\u2A9F", simne: "\u2246", simplus: "\u2A24", simrarr: "\u2972", slarr: "\u2190", smallsetminus: "\u2216", smashp: "\u2A33", smeparsl: "\u29E4", smid: "\u2223", smile: "\u2323", smt: "\u2AAA", smte: "\u2AAC", smtes: "\u2AAC\uFE00", softcy: "\u044C", sol: "/", solb: "\u29C4", solbar: "\u233F", sopf: "\u{1D564}", spades: "\u2660", spadesuit: "\u2660", spar: "\u2225", sqcap: "\u2293", sqcaps: "\u2293\uFE00", sqcup: "\u2294", sqcups: "\u2294\uFE00", sqsub: "\u228F", sqsube: "\u2291", sqsubset: "\u228F", sqsubseteq: "\u2291", sqsup: "\u2290", sqsupe: "\u2292", sqsupset: "\u2290", sqsupseteq: "\u2292", squ: "\u25A1", square: "\u25A1", squarf: "\u25AA", squf: "\u25AA", srarr: "\u2192", sscr: "\u{1D4C8}", ssetmn: "\u2216", ssmile: "\u2323", sstarf: "\u22C6", star: "\u2606", starf: "\u2605", straightepsilon: "\u03F5", straightphi: "\u03D5", strns: "\xAF", sub: "\u2282", subE: "\u2AC5", subdot: "\u2ABD", sube: "\u2286", subedot: "\u2AC3", submult: "\u2AC1", subnE: "\u2ACB", subne: "\u228A", subplus: "\u2ABF", subrarr: "\u2979", subset: "\u2282", subseteq: "\u2286", subseteqq: "\u2AC5", subsetneq: "\u228A", subsetneqq: "\u2ACB", subsim: "\u2AC7", subsub: "\u2AD5", subsup: "\u2AD3", succ: "\u227B", succapprox: "\u2AB8", succcurlyeq: "\u227D", succeq: "\u2AB0", succnapprox: "\u2ABA", succneqq: "\u2AB6", succnsim: "\u22E9", succsim: "\u227F", sum: "\u2211", sung: "\u266A", sup1: "\xB9", sup2: "\xB2", sup3: "\xB3", sup: "\u2283", supE: "\u2AC6", supdot: "\u2ABE", supdsub: "\u2AD8", supe: "\u2287", supedot: "\u2AC4", suphsol: "\u27C9", suphsub: "\u2AD7", suplarr: "\u297B", supmult: "\u2AC2", supnE: "\u2ACC", supne: "\u228B", supplus: "\u2AC0", supset: "\u2283", supseteq: "\u2287", supseteqq: "\u2AC6", supsetneq: "\u228B", supsetneqq: "\u2ACC", supsim: "\u2AC8", supsub: "\u2AD4", supsup: "\u2AD6", swArr: "\u21D9", swarhk: "\u2926", swarr: "\u2199", swarrow: "\u2199", swnwar: "\u292A", szlig: "\xDF", target: "\u2316", tau: "\u03C4", tbrk: "\u23B4", tcaron: "\u0165", tcedil: "\u0163", tcy: "\u0442", tdot: "\u20DB", telrec: "\u2315", tfr: "\u{1D531}", there4: "\u2234", therefore: "\u2234", theta: "\u03B8", thetasym: "\u03D1", thetav: "\u03D1", thickapprox: "\u2248", thicksim: "\u223C", thinsp: "\u2009", thkap: "\u2248", thksim: "\u223C", thorn: "\xFE", tilde: "\u02DC", times: "\xD7", timesb: "\u22A0", timesbar: "\u2A31", timesd: "\u2A30", tint: "\u222D", toea: "\u2928", top: "\u22A4", topbot: "\u2336", topcir: "\u2AF1", topf: "\u{1D565}", topfork: "\u2ADA", tosa: "\u2929", tprime: "\u2034", trade: "\u2122", triangle: "\u25B5", triangledown: "\u25BF", triangleleft: "\u25C3", trianglelefteq: "\u22B4", triangleq: "\u225C", triangleright: "\u25B9", trianglerighteq: "\u22B5", tridot: "\u25EC", trie: "\u225C", triminus: "\u2A3A", triplus: "\u2A39", trisb: "\u29CD", tritime: "\u2A3B", trpezium: "\u23E2", tscr: "\u{1D4C9}", tscy: "\u0446", tshcy: "\u045B", tstrok: "\u0167", twixt: "\u226C", twoheadleftarrow: "\u219E", twoheadrightarrow: "\u21A0", uArr: "\u21D1", uHar: "\u2963", uacute: "\xFA", uarr: "\u2191", ubrcy: "\u045E", ubreve: "\u016D", ucirc: "\xFB", ucy: "\u0443", udarr: "\u21C5", udblac: "\u0171", udhar: "\u296E", ufisht: "\u297E", ufr: "\u{1D532}", ugrave: "\xF9", uharl: "\u21BF", uharr: "\u21BE", uhblk: "\u2580", ulcorn: "\u231C", ulcorner: "\u231C", ulcrop: "\u230F", ultri: "\u25F8", umacr: "\u016B", uml: "\xA8", uogon: "\u0173", uopf: "\u{1D566}", uparrow: "\u2191", updownarrow: "\u2195", upharpoonleft: "\u21BF", upharpoonright: "\u21BE", uplus: "\u228E", upsi: "\u03C5", upsih: "\u03D2", upsilon: "\u03C5", upuparrows: "\u21C8", urcorn: "\u231D", urcorner: "\u231D", urcrop: "\u230E", uring: "\u016F", urtri: "\u25F9", uscr: "\u{1D4CA}", utdot: "\u22F0", utilde: "\u0169", utri: "\u25B5", utrif: "\u25B4", uuarr: "\u21C8", uuml: "\xFC", uwangle: "\u29A7", vArr: "\u21D5", vBar: "\u2AE8", vBarv: "\u2AE9", vDash: "\u22A8", vangrt: "\u299C", varepsilon: "\u03F5", varkappa: "\u03F0", varnothing: "\u2205", varphi: "\u03D5", varpi: "\u03D6", varpropto: "\u221D", varr: "\u2195", varrho: "\u03F1", varsigma: "\u03C2", varsubsetneq: "\u228A\uFE00", varsubsetneqq: "\u2ACB\uFE00", varsupsetneq: "\u228B\uFE00", varsupsetneqq: "\u2ACC\uFE00", vartheta: "\u03D1", vartriangleleft: "\u22B2", vartriangleright: "\u22B3", vcy: "\u0432", vdash: "\u22A2", vee: "\u2228", veebar: "\u22BB", veeeq: "\u225A", vellip: "\u22EE", verbar: "|", vert: "|", vfr: "\u{1D533}", vltri: "\u22B2", vnsub: "\u2282\u20D2", vnsup: "\u2283\u20D2", vopf: "\u{1D567}", vprop: "\u221D", vrtri: "\u22B3", vscr: "\u{1D4CB}", vsubnE: "\u2ACB\uFE00", vsubne: "\u228A\uFE00", vsupnE: "\u2ACC\uFE00", vsupne: "\u228B\uFE00", vzigzag: "\u299A", wcirc: "\u0175", wedbar: "\u2A5F", wedge: "\u2227", wedgeq: "\u2259", weierp: "\u2118", wfr: "\u{1D534}", wopf: "\u{1D568}", wp: "\u2118", wr: "\u2240", wreath: "\u2240", wscr: "\u{1D4CC}", xcap: "\u22C2", xcirc: "\u25EF", xcup: "\u22C3", xdtri: "\u25BD", xfr: "\u{1D535}", xhArr: "\u27FA", xharr: "\u27F7", xi: "\u03BE", xlArr: "\u27F8", xlarr: "\u27F5", xmap: "\u27FC", xnis: "\u22FB", xodot: "\u2A00", xopf: "\u{1D569}", xoplus: "\u2A01", xotime: "\u2A02", xrArr: "\u27F9", xrarr: "\u27F6", xscr: "\u{1D4CD}", xsqcup: "\u2A06", xuplus: "\u2A04", xutri: "\u25B3", xvee: "\u22C1", xwedge: "\u22C0", yacute: "\xFD", yacy: "\u044F", ycirc: "\u0177", ycy: "\u044B", yen: "\xA5", yfr: "\u{1D536}", yicy: "\u0457", yopf: "\u{1D56A}", yscr: "\u{1D4CE}", yucy: "\u044E", yuml: "\xFF", zacute: "\u017A", zcaron: "\u017E", zcy: "\u0437", zdot: "\u017C", zeetrf: "\u2128", zeta: "\u03B6", zfr: "\u{1D537}", zhcy: "\u0436", zigrarr: "\u21DD", zopf: "\u{1D56B}", zscr: "\u{1D4CF}", zwj: "\u200D", zwnj: "\u200C" }; // node_modules/decode-named-character-reference/index.js var own2 = {}.hasOwnProperty; function decodeNamedCharacterReference(value) { return own2.call(characterEntities, value) ? characterEntities[value] : false; } // node_modules/micromark-core-commonmark/lib/character-reference.js var characterReference = { name: "characterReference", tokenize: tokenizeCharacterReference }; function tokenizeCharacterReference(effects, ok4, nok) { const self2 = this; let size = 0; let max; let test3; return start; function start(code3) { effects.enter("characterReference"); effects.enter("characterReferenceMarker"); effects.consume(code3); effects.exit("characterReferenceMarker"); return open; } function open(code3) { if (code3 === 35) { effects.enter("characterReferenceMarkerNumeric"); effects.consume(code3); effects.exit("characterReferenceMarkerNumeric"); return numeric; } effects.enter("characterReferenceValue"); max = 31; test3 = asciiAlphanumeric; return value(code3); } function numeric(code3) { if (code3 === 88 || code3 === 120) { effects.enter("characterReferenceMarkerHexadecimal"); effects.consume(code3); effects.exit("characterReferenceMarkerHexadecimal"); effects.enter("characterReferenceValue"); max = 6; test3 = asciiHexDigit; return value; } effects.enter("characterReferenceValue"); max = 7; test3 = asciiDigit; return value(code3); } function value(code3) { if (code3 === 59 && size) { const token = effects.exit("characterReferenceValue"); if (test3 === asciiAlphanumeric && !decodeNamedCharacterReference(self2.sliceSerialize(token))) { return nok(code3); } effects.enter("characterReferenceMarker"); effects.consume(code3); effects.exit("characterReferenceMarker"); effects.exit("characterReference"); return ok4; } if (test3(code3) && size++ < max) { effects.consume(code3); return value; } return nok(code3); } } // node_modules/micromark-core-commonmark/lib/code-fenced.js var nonLazyContinuation = { tokenize: tokenizeNonLazyContinuation, partial: true }; var codeFenced = { name: "codeFenced", tokenize: tokenizeCodeFenced, concrete: true }; function tokenizeCodeFenced(effects, ok4, nok) { const self2 = this; const closeStart = { tokenize: tokenizeCloseStart, partial: true }; let initialPrefix = 0; let sizeOpen = 0; let marker; return start; function start(code3) { return beforeSequenceOpen(code3); } function beforeSequenceOpen(code3) { const tail = self2.events[self2.events.length - 1]; initialPrefix = tail && tail[1].type === "linePrefix" ? tail[2].sliceSerialize(tail[1], true).length : 0; marker = code3; effects.enter("codeFenced"); effects.enter("codeFencedFence"); effects.enter("codeFencedFenceSequence"); return sequenceOpen(code3); } function sequenceOpen(code3) { if (code3 === marker) { sizeOpen++; effects.consume(code3); return sequenceOpen; } if (sizeOpen < 3) { return nok(code3); } effects.exit("codeFencedFenceSequence"); return markdownSpace(code3) ? factorySpace(effects, infoBefore, "whitespace")(code3) : infoBefore(code3); } function infoBefore(code3) { if (code3 === null || markdownLineEnding(code3)) { effects.exit("codeFencedFence"); return self2.interrupt ? ok4(code3) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code3); } effects.enter("codeFencedFenceInfo"); effects.enter("chunkString", { contentType: "string" }); return info(code3); } function info(code3) { if (code3 === null || markdownLineEnding(code3)) { effects.exit("chunkString"); effects.exit("codeFencedFenceInfo"); return infoBefore(code3); } if (markdownSpace(code3)) { effects.exit("chunkString"); effects.exit("codeFencedFenceInfo"); return factorySpace(effects, metaBefore, "whitespace")(code3); } if (code3 === 96 && code3 === marker) { return nok(code3); } effects.consume(code3); return info; } function metaBefore(code3) { if (code3 === null || markdownLineEnding(code3)) { return infoBefore(code3); } effects.enter("codeFencedFenceMeta"); effects.enter("chunkString", { contentType: "string" }); return meta(code3); } function meta(code3) { if (code3 === null || markdownLineEnding(code3)) { effects.exit("chunkString"); effects.exit("codeFencedFenceMeta"); return infoBefore(code3); } if (code3 === 96 && code3 === marker) { return nok(code3); } effects.consume(code3); return meta; } function atNonLazyBreak(code3) { return effects.attempt(closeStart, after, contentBefore)(code3); } function contentBefore(code3) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return contentStart; } function contentStart(code3) { return initialPrefix > 0 && markdownSpace(code3) ? factorySpace( effects, beforeContentChunk, "linePrefix", initialPrefix + 1 )(code3) : beforeContentChunk(code3); } function beforeContentChunk(code3) { if (code3 === null || markdownLineEnding(code3)) { return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code3); } effects.enter("codeFlowValue"); return contentChunk(code3); } function contentChunk(code3) { if (code3 === null || markdownLineEnding(code3)) { effects.exit("codeFlowValue"); return beforeContentChunk(code3); } effects.consume(code3); return contentChunk; } function after(code3) { effects.exit("codeFenced"); return ok4(code3); } function tokenizeCloseStart(effects2, ok5, nok2) { let size = 0; return startBefore; function startBefore(code3) { effects2.enter("lineEnding"); effects2.consume(code3); effects2.exit("lineEnding"); return start2; } function start2(code3) { effects2.enter("codeFencedFence"); return markdownSpace(code3) ? factorySpace( effects2, beforeSequenceClose, "linePrefix", self2.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4 )(code3) : beforeSequenceClose(code3); } function beforeSequenceClose(code3) { if (code3 === marker) { effects2.enter("codeFencedFenceSequence"); return sequenceClose(code3); } return nok2(code3); } function sequenceClose(code3) { if (code3 === marker) { size++; effects2.consume(code3); return sequenceClose; } if (size >= sizeOpen) { effects2.exit("codeFencedFenceSequence"); return markdownSpace(code3) ? factorySpace(effects2, sequenceCloseAfter, "whitespace")(code3) : sequenceCloseAfter(code3); } return nok2(code3); } function sequenceCloseAfter(code3) { if (code3 === null || markdownLineEnding(code3)) { effects2.exit("codeFencedFence"); return ok5(code3); } return nok2(code3); } } } function tokenizeNonLazyContinuation(effects, ok4, nok) { const self2 = this; return start; function start(code3) { if (code3 === null) { return nok(code3); } effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return lineStart; } function lineStart(code3) { return self2.parser.lazy[self2.now().line] ? nok(code3) : ok4(code3); } } // node_modules/micromark-core-commonmark/lib/code-indented.js var codeIndented = { name: "codeIndented", tokenize: tokenizeCodeIndented }; var furtherStart = { tokenize: tokenizeFurtherStart, partial: true }; function tokenizeCodeIndented(effects, ok4, nok) { const self2 = this; return start; function start(code3) { effects.enter("codeIndented"); return factorySpace(effects, afterPrefix, "linePrefix", 4 + 1)(code3); } function afterPrefix(code3) { const tail = self2.events[self2.events.length - 1]; return tail && tail[1].type === "linePrefix" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code3) : nok(code3); } function atBreak(code3) { if (code3 === null) { return after(code3); } if (markdownLineEnding(code3)) { return effects.attempt(furtherStart, atBreak, after)(code3); } effects.enter("codeFlowValue"); return inside(code3); } function inside(code3) { if (code3 === null || markdownLineEnding(code3)) { effects.exit("codeFlowValue"); return atBreak(code3); } effects.consume(code3); return inside; } function after(code3) { effects.exit("codeIndented"); return ok4(code3); } } function tokenizeFurtherStart(effects, ok4, nok) { const self2 = this; return furtherStart2; function furtherStart2(code3) { if (self2.parser.lazy[self2.now().line]) { return nok(code3); } if (markdownLineEnding(code3)) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return furtherStart2; } return factorySpace(effects, afterPrefix, "linePrefix", 4 + 1)(code3); } function afterPrefix(code3) { const tail = self2.events[self2.events.length - 1]; return tail && tail[1].type === "linePrefix" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok4(code3) : markdownLineEnding(code3) ? furtherStart2(code3) : nok(code3); } } // node_modules/micromark-core-commonmark/lib/code-text.js var codeText = { name: "codeText", tokenize: tokenizeCodeText, resolve: resolveCodeText, previous }; function resolveCodeText(events) { let tailExitIndex = events.length - 4; let headEnterIndex = 3; let index3; let enter; if ((events[headEnterIndex][1].type === "lineEnding" || events[headEnterIndex][1].type === "space") && (events[tailExitIndex][1].type === "lineEnding" || events[tailExitIndex][1].type === "space")) { index3 = headEnterIndex; while (++index3 < tailExitIndex) { if (events[index3][1].type === "codeTextData") { events[headEnterIndex][1].type = "codeTextPadding"; events[tailExitIndex][1].type = "codeTextPadding"; headEnterIndex += 2; tailExitIndex -= 2; break; } } } index3 = headEnterIndex - 1; tailExitIndex++; while (++index3 <= tailExitIndex) { if (enter === void 0) { if (index3 !== tailExitIndex && events[index3][1].type !== "lineEnding") { enter = index3; } } else if (index3 === tailExitIndex || events[index3][1].type === "lineEnding") { events[enter][1].type = "codeTextData"; if (index3 !== enter + 2) { events[enter][1].end = events[index3 - 1][1].end; events.splice(enter + 2, index3 - enter - 2); tailExitIndex -= index3 - enter - 2; index3 = enter + 2; } enter = void 0; } } return events; } function previous(code3) { return code3 !== 96 || this.events[this.events.length - 1][1].type === "characterEscape"; } function tokenizeCodeText(effects, ok4, nok) { const self2 = this; let sizeOpen = 0; let size; let token; return start; function start(code3) { effects.enter("codeText"); effects.enter("codeTextSequence"); return sequenceOpen(code3); } function sequenceOpen(code3) { if (code3 === 96) { effects.consume(code3); sizeOpen++; return sequenceOpen; } effects.exit("codeTextSequence"); return between2(code3); } function between2(code3) { if (code3 === null) { return nok(code3); } if (code3 === 32) { effects.enter("space"); effects.consume(code3); effects.exit("space"); return between2; } if (code3 === 96) { token = effects.enter("codeTextSequence"); size = 0; return sequenceClose(code3); } if (markdownLineEnding(code3)) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return between2; } effects.enter("codeTextData"); return data(code3); } function data(code3) { if (code3 === null || code3 === 32 || code3 === 96 || markdownLineEnding(code3)) { effects.exit("codeTextData"); return between2(code3); } effects.consume(code3); return data; } function sequenceClose(code3) { if (code3 === 96) { effects.consume(code3); size++; return sequenceClose; } if (size === sizeOpen) { effects.exit("codeTextSequence"); effects.exit("codeText"); return ok4(code3); } token.type = "codeTextData"; return data(code3); } } // node_modules/micromark-util-subtokenize/index.js function subtokenize(events) { const jumps = {}; let index3 = -1; let event; let lineIndex; let otherIndex; let otherEvent; let parameters; let subevents; let more; while (++index3 < events.length) { while (index3 in jumps) { index3 = jumps[index3]; } event = events[index3]; if (index3 && event[1].type === "chunkFlow" && events[index3 - 1][1].type === "listItemPrefix") { subevents = event[1]._tokenizer.events; otherIndex = 0; if (otherIndex < subevents.length && subevents[otherIndex][1].type === "lineEndingBlank") { otherIndex += 2; } if (otherIndex < subevents.length && subevents[otherIndex][1].type === "content") { while (++otherIndex < subevents.length) { if (subevents[otherIndex][1].type === "content") { break; } if (subevents[otherIndex][1].type === "chunkText") { subevents[otherIndex][1]._isInFirstContentOfListItem = true; otherIndex++; } } } } if (event[0] === "enter") { if (event[1].contentType) { Object.assign(jumps, subcontent(events, index3)); index3 = jumps[index3]; more = true; } } else if (event[1]._container) { otherIndex = index3; lineIndex = void 0; while (otherIndex--) { otherEvent = events[otherIndex]; if (otherEvent[1].type === "lineEnding" || otherEvent[1].type === "lineEndingBlank") { if (otherEvent[0] === "enter") { if (lineIndex) { events[lineIndex][1].type = "lineEndingBlank"; } otherEvent[1].type = "lineEnding"; lineIndex = otherIndex; } } else { break; } } if (lineIndex) { event[1].end = Object.assign({}, events[lineIndex][1].start); parameters = events.slice(lineIndex, index3); parameters.unshift(event); splice(events, lineIndex, index3 - lineIndex + 1, parameters); } } } return !more; } function subcontent(events, eventIndex) { const token = events[eventIndex][1]; const context = events[eventIndex][2]; let startPosition = eventIndex - 1; const startPositions = []; const tokenizer = token._tokenizer || context.parser[token.contentType](token.start); const childEvents = tokenizer.events; const jumps = []; const gaps = {}; let stream; let previous3; let index3 = -1; let current = token; let adjust = 0; let start = 0; const breaks = [start]; while (current) { while (events[++startPosition][1] !== current) { } startPositions.push(startPosition); if (!current._tokenizer) { stream = context.sliceStream(current); if (!current.next) { stream.push(null); } if (previous3) { tokenizer.defineSkip(current.start); } if (current._isInFirstContentOfListItem) { tokenizer._gfmTasklistFirstContentOfListItem = true; } tokenizer.write(stream); if (current._isInFirstContentOfListItem) { tokenizer._gfmTasklistFirstContentOfListItem = void 0; } } previous3 = current; current = current.next; } current = token; while (++index3 < childEvents.length) { if ( // Find a void token that includes a break. childEvents[index3][0] === "exit" && childEvents[index3 - 1][0] === "enter" && childEvents[index3][1].type === childEvents[index3 - 1][1].type && childEvents[index3][1].start.line !== childEvents[index3][1].end.line ) { start = index3 + 1; breaks.push(start); current._tokenizer = void 0; current.previous = void 0; current = current.next; } } tokenizer.events = []; if (current) { current._tokenizer = void 0; current.previous = void 0; } else { breaks.pop(); } index3 = breaks.length; while (index3--) { const slice = childEvents.slice(breaks[index3], breaks[index3 + 1]); const start2 = startPositions.pop(); jumps.unshift([start2, start2 + slice.length - 1]); splice(events, start2, 2, slice); } index3 = -1; while (++index3 < jumps.length) { gaps[adjust + jumps[index3][0]] = adjust + jumps[index3][1]; adjust += jumps[index3][1] - jumps[index3][0] - 1; } return gaps; } // node_modules/micromark-core-commonmark/lib/content.js var content2 = { tokenize: tokenizeContent, resolve: resolveContent }; var continuationConstruct = { tokenize: tokenizeContinuation, partial: true }; function resolveContent(events) { subtokenize(events); return events; } function tokenizeContent(effects, ok4) { let previous3; return chunkStart; function chunkStart(code3) { effects.enter("content"); previous3 = effects.enter("chunkContent", { contentType: "content" }); return chunkInside(code3); } function chunkInside(code3) { if (code3 === null) { return contentEnd(code3); } if (markdownLineEnding(code3)) { return effects.check( continuationConstruct, contentContinue, contentEnd )(code3); } effects.consume(code3); return chunkInside; } function contentEnd(code3) { effects.exit("chunkContent"); effects.exit("content"); return ok4(code3); } function contentContinue(code3) { effects.consume(code3); effects.exit("chunkContent"); previous3.next = effects.enter("chunkContent", { contentType: "content", previous: previous3 }); previous3 = previous3.next; return chunkInside; } } function tokenizeContinuation(effects, ok4, nok) { const self2 = this; return startLookahead; function startLookahead(code3) { effects.exit("chunkContent"); effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return factorySpace(effects, prefixed, "linePrefix"); } function prefixed(code3) { if (code3 === null || markdownLineEnding(code3)) { return nok(code3); } const tail = self2.events[self2.events.length - 1]; if (!self2.parser.constructs.disable.null.includes("codeIndented") && tail && tail[1].type === "linePrefix" && tail[2].sliceSerialize(tail[1], true).length >= 4) { return ok4(code3); } return effects.interrupt(self2.parser.constructs.flow, nok, ok4)(code3); } } // node_modules/micromark-factory-destination/index.js function factoryDestination(effects, ok4, nok, type, literalType, literalMarkerType, rawType, stringType, max) { const limit = max || Number.POSITIVE_INFINITY; let balance = 0; return start; function start(code3) { if (code3 === 60) { effects.enter(type); effects.enter(literalType); effects.enter(literalMarkerType); effects.consume(code3); effects.exit(literalMarkerType); return enclosedBefore; } if (code3 === null || code3 === 32 || code3 === 41 || asciiControl(code3)) { return nok(code3); } effects.enter(type); effects.enter(rawType); effects.enter(stringType); effects.enter("chunkString", { contentType: "string" }); return raw(code3); } function enclosedBefore(code3) { if (code3 === 62) { effects.enter(literalMarkerType); effects.consume(code3); effects.exit(literalMarkerType); effects.exit(literalType); effects.exit(type); return ok4; } effects.enter(stringType); effects.enter("chunkString", { contentType: "string" }); return enclosed(code3); } function enclosed(code3) { if (code3 === 62) { effects.exit("chunkString"); effects.exit(stringType); return enclosedBefore(code3); } if (code3 === null || code3 === 60 || markdownLineEnding(code3)) { return nok(code3); } effects.consume(code3); return code3 === 92 ? enclosedEscape : enclosed; } function enclosedEscape(code3) { if (code3 === 60 || code3 === 62 || code3 === 92) { effects.consume(code3); return enclosed; } return enclosed(code3); } function raw(code3) { if (!balance && (code3 === null || code3 === 41 || markdownLineEndingOrSpace(code3))) { effects.exit("chunkString"); effects.exit(stringType); effects.exit(rawType); effects.exit(type); return ok4(code3); } if (balance < limit && code3 === 40) { effects.consume(code3); balance++; return raw; } if (code3 === 41) { effects.consume(code3); balance--; return raw; } if (code3 === null || code3 === 32 || code3 === 40 || asciiControl(code3)) { return nok(code3); } effects.consume(code3); return code3 === 92 ? rawEscape : raw; } function rawEscape(code3) { if (code3 === 40 || code3 === 41 || code3 === 92) { effects.consume(code3); return raw; } return raw(code3); } } // node_modules/micromark-factory-label/index.js function factoryLabel(effects, ok4, nok, type, markerType, stringType) { const self2 = this; let size = 0; let seen; return start; function start(code3) { effects.enter(type); effects.enter(markerType); effects.consume(code3); effects.exit(markerType); effects.enter(stringType); return atBreak; } function atBreak(code3) { if (size > 999 || code3 === null || code3 === 91 || code3 === 93 && !seen || // To do: remove in the future once we’ve switched from // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, // which doesn’t need this. // Hidden footnotes hook. /* c8 ignore next 3 */ code3 === 94 && !size && "_hiddenFootnoteSupport" in self2.parser.constructs) { return nok(code3); } if (code3 === 93) { effects.exit(stringType); effects.enter(markerType); effects.consume(code3); effects.exit(markerType); effects.exit(type); return ok4; } if (markdownLineEnding(code3)) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return atBreak; } effects.enter("chunkString", { contentType: "string" }); return labelInside(code3); } function labelInside(code3) { if (code3 === null || code3 === 91 || code3 === 93 || markdownLineEnding(code3) || size++ > 999) { effects.exit("chunkString"); return atBreak(code3); } effects.consume(code3); if (!seen) seen = !markdownSpace(code3); return code3 === 92 ? labelEscape : labelInside; } function labelEscape(code3) { if (code3 === 91 || code3 === 92 || code3 === 93) { effects.consume(code3); size++; return labelInside; } return labelInside(code3); } } // node_modules/micromark-factory-title/index.js function factoryTitle(effects, ok4, nok, type, markerType, stringType) { let marker; return start; function start(code3) { if (code3 === 34 || code3 === 39 || code3 === 40) { effects.enter(type); effects.enter(markerType); effects.consume(code3); effects.exit(markerType); marker = code3 === 40 ? 41 : code3; return begin; } return nok(code3); } function begin(code3) { if (code3 === marker) { effects.enter(markerType); effects.consume(code3); effects.exit(markerType); effects.exit(type); return ok4; } effects.enter(stringType); return atBreak(code3); } function atBreak(code3) { if (code3 === marker) { effects.exit(stringType); return begin(marker); } if (code3 === null) { return nok(code3); } if (markdownLineEnding(code3)) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return factorySpace(effects, atBreak, "linePrefix"); } effects.enter("chunkString", { contentType: "string" }); return inside(code3); } function inside(code3) { if (code3 === marker || code3 === null || markdownLineEnding(code3)) { effects.exit("chunkString"); return atBreak(code3); } effects.consume(code3); return code3 === 92 ? escape : inside; } function escape(code3) { if (code3 === marker || code3 === 92) { effects.consume(code3); return inside; } return inside(code3); } } // node_modules/micromark-factory-whitespace/index.js function factoryWhitespace(effects, ok4) { let seen; return start; function start(code3) { if (markdownLineEnding(code3)) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); seen = true; return start; } if (markdownSpace(code3)) { return factorySpace( effects, start, seen ? "linePrefix" : "lineSuffix" )(code3); } return ok4(code3); } } // node_modules/micromark-util-normalize-identifier/index.js function normalizeIdentifier(value) { return value.replace(/[\t\n\r ]+/g, " ").replace(/^ | $/g, "").toLowerCase().toUpperCase(); } // node_modules/micromark-core-commonmark/lib/definition.js var definition = { name: "definition", tokenize: tokenizeDefinition }; var titleBefore = { tokenize: tokenizeTitleBefore, partial: true }; function tokenizeDefinition(effects, ok4, nok) { const self2 = this; let identifier; return start; function start(code3) { effects.enter("definition"); return before(code3); } function before(code3) { return factoryLabel.call( self2, effects, labelAfter, // Note: we don’t need to reset the way `markdown-rs` does. nok, "definitionLabel", "definitionLabelMarker", "definitionLabelString" )(code3); } function labelAfter(code3) { identifier = normalizeIdentifier( self2.sliceSerialize(self2.events[self2.events.length - 1][1]).slice(1, -1) ); if (code3 === 58) { effects.enter("definitionMarker"); effects.consume(code3); effects.exit("definitionMarker"); return markerAfter; } return nok(code3); } function markerAfter(code3) { return markdownLineEndingOrSpace(code3) ? factoryWhitespace(effects, destinationBefore)(code3) : destinationBefore(code3); } function destinationBefore(code3) { return factoryDestination( effects, destinationAfter, // Note: we don’t need to reset the way `markdown-rs` does. nok, "definitionDestination", "definitionDestinationLiteral", "definitionDestinationLiteralMarker", "definitionDestinationRaw", "definitionDestinationString" )(code3); } function destinationAfter(code3) { return effects.attempt(titleBefore, after, after)(code3); } function after(code3) { return markdownSpace(code3) ? factorySpace(effects, afterWhitespace, "whitespace")(code3) : afterWhitespace(code3); } function afterWhitespace(code3) { if (code3 === null || markdownLineEnding(code3)) { effects.exit("definition"); self2.parser.defined.push(identifier); return ok4(code3); } return nok(code3); } } function tokenizeTitleBefore(effects, ok4, nok) { return titleBefore2; function titleBefore2(code3) { return markdownLineEndingOrSpace(code3) ? factoryWhitespace(effects, beforeMarker)(code3) : nok(code3); } function beforeMarker(code3) { return factoryTitle( effects, titleAfter, nok, "definitionTitle", "definitionTitleMarker", "definitionTitleString" )(code3); } function titleAfter(code3) { return markdownSpace(code3) ? factorySpace(effects, titleAfterOptionalWhitespace, "whitespace")(code3) : titleAfterOptionalWhitespace(code3); } function titleAfterOptionalWhitespace(code3) { return code3 === null || markdownLineEnding(code3) ? ok4(code3) : nok(code3); } } // node_modules/micromark-core-commonmark/lib/hard-break-escape.js var hardBreakEscape = { name: "hardBreakEscape", tokenize: tokenizeHardBreakEscape }; function tokenizeHardBreakEscape(effects, ok4, nok) { return start; function start(code3) { effects.enter("hardBreakEscape"); effects.consume(code3); return after; } function after(code3) { if (markdownLineEnding(code3)) { effects.exit("hardBreakEscape"); return ok4(code3); } return nok(code3); } } // node_modules/micromark-core-commonmark/lib/heading-atx.js var headingAtx = { name: "headingAtx", tokenize: tokenizeHeadingAtx, resolve: resolveHeadingAtx }; function resolveHeadingAtx(events, context) { let contentEnd = events.length - 2; let contentStart = 3; let content3; let text5; if (events[contentStart][1].type === "whitespace") { contentStart += 2; } if (contentEnd - 2 > contentStart && events[contentEnd][1].type === "whitespace") { contentEnd -= 2; } if (events[contentEnd][1].type === "atxHeadingSequence" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === "whitespace")) { contentEnd -= contentStart + 1 === contentEnd ? 2 : 4; } if (contentEnd > contentStart) { content3 = { type: "atxHeadingText", start: events[contentStart][1].start, end: events[contentEnd][1].end }; text5 = { type: "chunkText", start: events[contentStart][1].start, end: events[contentEnd][1].end, contentType: "text" }; splice(events, contentStart, contentEnd - contentStart + 1, [ ["enter", content3, context], ["enter", text5, context], ["exit", text5, context], ["exit", content3, context] ]); } return events; } function tokenizeHeadingAtx(effects, ok4, nok) { let size = 0; return start; function start(code3) { effects.enter("atxHeading"); return before(code3); } function before(code3) { effects.enter("atxHeadingSequence"); return sequenceOpen(code3); } function sequenceOpen(code3) { if (code3 === 35 && size++ < 6) { effects.consume(code3); return sequenceOpen; } if (code3 === null || markdownLineEndingOrSpace(code3)) { effects.exit("atxHeadingSequence"); return atBreak(code3); } return nok(code3); } function atBreak(code3) { if (code3 === 35) { effects.enter("atxHeadingSequence"); return sequenceFurther(code3); } if (code3 === null || markdownLineEnding(code3)) { effects.exit("atxHeading"); return ok4(code3); } if (markdownSpace(code3)) { return factorySpace(effects, atBreak, "whitespace")(code3); } effects.enter("atxHeadingText"); return data(code3); } function sequenceFurther(code3) { if (code3 === 35) { effects.consume(code3); return sequenceFurther; } effects.exit("atxHeadingSequence"); return atBreak(code3); } function data(code3) { if (code3 === null || code3 === 35 || markdownLineEndingOrSpace(code3)) { effects.exit("atxHeadingText"); return atBreak(code3); } effects.consume(code3); return data; } } // node_modules/micromark-util-html-tag-name/index.js var htmlBlockNames = [ "address", "article", "aside", "base", "basefont", "blockquote", "body", "caption", "center", "col", "colgroup", "dd", "details", "dialog", "dir", "div", "dl", "dt", "fieldset", "figcaption", "figure", "footer", "form", "frame", "frameset", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hr", "html", "iframe", "legend", "li", "link", "main", "menu", "menuitem", "nav", "noframes", "ol", "optgroup", "option", "p", "param", "search", "section", "summary", "table", "tbody", "td", "tfoot", "th", "thead", "title", "tr", "track", "ul" ]; var htmlRawNames = ["pre", "script", "style", "textarea"]; // node_modules/micromark-core-commonmark/lib/html-flow.js var htmlFlow = { name: "htmlFlow", tokenize: tokenizeHtmlFlow, resolveTo: resolveToHtmlFlow, concrete: true }; var blankLineBefore = { tokenize: tokenizeBlankLineBefore, partial: true }; var nonLazyContinuationStart = { tokenize: tokenizeNonLazyContinuationStart, partial: true }; function resolveToHtmlFlow(events) { let index3 = events.length; while (index3--) { if (events[index3][0] === "enter" && events[index3][1].type === "htmlFlow") { break; } } if (index3 > 1 && events[index3 - 2][1].type === "linePrefix") { events[index3][1].start = events[index3 - 2][1].start; events[index3 + 1][1].start = events[index3 - 2][1].start; events.splice(index3 - 2, 2); } return events; } function tokenizeHtmlFlow(effects, ok4, nok) { const self2 = this; let marker; let closingTag; let buffer2; let index3; let markerB; return start; function start(code3) { return before(code3); } function before(code3) { effects.enter("htmlFlow"); effects.enter("htmlFlowData"); effects.consume(code3); return open; } function open(code3) { if (code3 === 33) { effects.consume(code3); return declarationOpen; } if (code3 === 47) { effects.consume(code3); closingTag = true; return tagCloseStart; } if (code3 === 63) { effects.consume(code3); marker = 3; return self2.interrupt ? ok4 : continuationDeclarationInside; } if (asciiAlpha(code3)) { effects.consume(code3); buffer2 = String.fromCharCode(code3); return tagName; } return nok(code3); } function declarationOpen(code3) { if (code3 === 45) { effects.consume(code3); marker = 2; return commentOpenInside; } if (code3 === 91) { effects.consume(code3); marker = 5; index3 = 0; return cdataOpenInside; } if (asciiAlpha(code3)) { effects.consume(code3); marker = 4; return self2.interrupt ? ok4 : continuationDeclarationInside; } return nok(code3); } function commentOpenInside(code3) { if (code3 === 45) { effects.consume(code3); return self2.interrupt ? ok4 : continuationDeclarationInside; } return nok(code3); } function cdataOpenInside(code3) { const value = "CDATA["; if (code3 === value.charCodeAt(index3++)) { effects.consume(code3); if (index3 === value.length) { return self2.interrupt ? ok4 : continuation; } return cdataOpenInside; } return nok(code3); } function tagCloseStart(code3) { if (asciiAlpha(code3)) { effects.consume(code3); buffer2 = String.fromCharCode(code3); return tagName; } return nok(code3); } function tagName(code3) { if (code3 === null || code3 === 47 || code3 === 62 || markdownLineEndingOrSpace(code3)) { const slash = code3 === 47; const name = buffer2.toLowerCase(); if (!slash && !closingTag && htmlRawNames.includes(name)) { marker = 1; return self2.interrupt ? ok4(code3) : continuation(code3); } if (htmlBlockNames.includes(buffer2.toLowerCase())) { marker = 6; if (slash) { effects.consume(code3); return basicSelfClosing; } return self2.interrupt ? ok4(code3) : continuation(code3); } marker = 7; return self2.interrupt && !self2.parser.lazy[self2.now().line] ? nok(code3) : closingTag ? completeClosingTagAfter(code3) : completeAttributeNameBefore(code3); } if (code3 === 45 || asciiAlphanumeric(code3)) { effects.consume(code3); buffer2 += String.fromCharCode(code3); return tagName; } return nok(code3); } function basicSelfClosing(code3) { if (code3 === 62) { effects.consume(code3); return self2.interrupt ? ok4 : continuation; } return nok(code3); } function completeClosingTagAfter(code3) { if (markdownSpace(code3)) { effects.consume(code3); return completeClosingTagAfter; } return completeEnd(code3); } function completeAttributeNameBefore(code3) { if (code3 === 47) { effects.consume(code3); return completeEnd; } if (code3 === 58 || code3 === 95 || asciiAlpha(code3)) { effects.consume(code3); return completeAttributeName; } if (markdownSpace(code3)) { effects.consume(code3); return completeAttributeNameBefore; } return completeEnd(code3); } function completeAttributeName(code3) { if (code3 === 45 || code3 === 46 || code3 === 58 || code3 === 95 || asciiAlphanumeric(code3)) { effects.consume(code3); return completeAttributeName; } return completeAttributeNameAfter(code3); } function completeAttributeNameAfter(code3) { if (code3 === 61) { effects.consume(code3); return completeAttributeValueBefore; } if (markdownSpace(code3)) { effects.consume(code3); return completeAttributeNameAfter; } return completeAttributeNameBefore(code3); } function completeAttributeValueBefore(code3) { if (code3 === null || code3 === 60 || code3 === 61 || code3 === 62 || code3 === 96) { return nok(code3); } if (code3 === 34 || code3 === 39) { effects.consume(code3); markerB = code3; return completeAttributeValueQuoted; } if (markdownSpace(code3)) { effects.consume(code3); return completeAttributeValueBefore; } return completeAttributeValueUnquoted(code3); } function completeAttributeValueQuoted(code3) { if (code3 === markerB) { effects.consume(code3); markerB = null; return completeAttributeValueQuotedAfter; } if (code3 === null || markdownLineEnding(code3)) { return nok(code3); } effects.consume(code3); return completeAttributeValueQuoted; } function completeAttributeValueUnquoted(code3) { if (code3 === null || code3 === 34 || code3 === 39 || code3 === 47 || code3 === 60 || code3 === 61 || code3 === 62 || code3 === 96 || markdownLineEndingOrSpace(code3)) { return completeAttributeNameAfter(code3); } effects.consume(code3); return completeAttributeValueUnquoted; } function completeAttributeValueQuotedAfter(code3) { if (code3 === 47 || code3 === 62 || markdownSpace(code3)) { return completeAttributeNameBefore(code3); } return nok(code3); } function completeEnd(code3) { if (code3 === 62) { effects.consume(code3); return completeAfter; } return nok(code3); } function completeAfter(code3) { if (code3 === null || markdownLineEnding(code3)) { return continuation(code3); } if (markdownSpace(code3)) { effects.consume(code3); return completeAfter; } return nok(code3); } function continuation(code3) { if (code3 === 45 && marker === 2) { effects.consume(code3); return continuationCommentInside; } if (code3 === 60 && marker === 1) { effects.consume(code3); return continuationRawTagOpen; } if (code3 === 62 && marker === 4) { effects.consume(code3); return continuationClose; } if (code3 === 63 && marker === 3) { effects.consume(code3); return continuationDeclarationInside; } if (code3 === 93 && marker === 5) { effects.consume(code3); return continuationCdataInside; } if (markdownLineEnding(code3) && (marker === 6 || marker === 7)) { effects.exit("htmlFlowData"); return effects.check( blankLineBefore, continuationAfter, continuationStart )(code3); } if (code3 === null || markdownLineEnding(code3)) { effects.exit("htmlFlowData"); return continuationStart(code3); } effects.consume(code3); return continuation; } function continuationStart(code3) { return effects.check( nonLazyContinuationStart, continuationStartNonLazy, continuationAfter )(code3); } function continuationStartNonLazy(code3) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return continuationBefore; } function continuationBefore(code3) { if (code3 === null || markdownLineEnding(code3)) { return continuationStart(code3); } effects.enter("htmlFlowData"); return continuation(code3); } function continuationCommentInside(code3) { if (code3 === 45) { effects.consume(code3); return continuationDeclarationInside; } return continuation(code3); } function continuationRawTagOpen(code3) { if (code3 === 47) { effects.consume(code3); buffer2 = ""; return continuationRawEndTag; } return continuation(code3); } function continuationRawEndTag(code3) { if (code3 === 62) { const name = buffer2.toLowerCase(); if (htmlRawNames.includes(name)) { effects.consume(code3); return continuationClose; } return continuation(code3); } if (asciiAlpha(code3) && buffer2.length < 8) { effects.consume(code3); buffer2 += String.fromCharCode(code3); return continuationRawEndTag; } return continuation(code3); } function continuationCdataInside(code3) { if (code3 === 93) { effects.consume(code3); return continuationDeclarationInside; } return continuation(code3); } function continuationDeclarationInside(code3) { if (code3 === 62) { effects.consume(code3); return continuationClose; } if (code3 === 45 && marker === 2) { effects.consume(code3); return continuationDeclarationInside; } return continuation(code3); } function continuationClose(code3) { if (code3 === null || markdownLineEnding(code3)) { effects.exit("htmlFlowData"); return continuationAfter(code3); } effects.consume(code3); return continuationClose; } function continuationAfter(code3) { effects.exit("htmlFlow"); return ok4(code3); } } function tokenizeNonLazyContinuationStart(effects, ok4, nok) { const self2 = this; return start; function start(code3) { if (markdownLineEnding(code3)) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return after; } return nok(code3); } function after(code3) { return self2.parser.lazy[self2.now().line] ? nok(code3) : ok4(code3); } } function tokenizeBlankLineBefore(effects, ok4, nok) { return start; function start(code3) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return effects.attempt(blankLine, ok4, nok); } } // node_modules/micromark-core-commonmark/lib/html-text.js var htmlText = { name: "htmlText", tokenize: tokenizeHtmlText }; function tokenizeHtmlText(effects, ok4, nok) { const self2 = this; let marker; let index3; let returnState; return start; function start(code3) { effects.enter("htmlText"); effects.enter("htmlTextData"); effects.consume(code3); return open; } function open(code3) { if (code3 === 33) { effects.consume(code3); return declarationOpen; } if (code3 === 47) { effects.consume(code3); return tagCloseStart; } if (code3 === 63) { effects.consume(code3); return instruction; } if (asciiAlpha(code3)) { effects.consume(code3); return tagOpen; } return nok(code3); } function declarationOpen(code3) { if (code3 === 45) { effects.consume(code3); return commentOpenInside; } if (code3 === 91) { effects.consume(code3); index3 = 0; return cdataOpenInside; } if (asciiAlpha(code3)) { effects.consume(code3); return declaration; } return nok(code3); } function commentOpenInside(code3) { if (code3 === 45) { effects.consume(code3); return commentEnd; } return nok(code3); } function comment(code3) { if (code3 === null) { return nok(code3); } if (code3 === 45) { effects.consume(code3); return commentClose; } if (markdownLineEnding(code3)) { returnState = comment; return lineEndingBefore(code3); } effects.consume(code3); return comment; } function commentClose(code3) { if (code3 === 45) { effects.consume(code3); return commentEnd; } return comment(code3); } function commentEnd(code3) { return code3 === 62 ? end(code3) : code3 === 45 ? commentClose(code3) : comment(code3); } function cdataOpenInside(code3) { const value = "CDATA["; if (code3 === value.charCodeAt(index3++)) { effects.consume(code3); return index3 === value.length ? cdata : cdataOpenInside; } return nok(code3); } function cdata(code3) { if (code3 === null) { return nok(code3); } if (code3 === 93) { effects.consume(code3); return cdataClose; } if (markdownLineEnding(code3)) { returnState = cdata; return lineEndingBefore(code3); } effects.consume(code3); return cdata; } function cdataClose(code3) { if (code3 === 93) { effects.consume(code3); return cdataEnd; } return cdata(code3); } function cdataEnd(code3) { if (code3 === 62) { return end(code3); } if (code3 === 93) { effects.consume(code3); return cdataEnd; } return cdata(code3); } function declaration(code3) { if (code3 === null || code3 === 62) { return end(code3); } if (markdownLineEnding(code3)) { returnState = declaration; return lineEndingBefore(code3); } effects.consume(code3); return declaration; } function instruction(code3) { if (code3 === null) { return nok(code3); } if (code3 === 63) { effects.consume(code3); return instructionClose; } if (markdownLineEnding(code3)) { returnState = instruction; return lineEndingBefore(code3); } effects.consume(code3); return instruction; } function instructionClose(code3) { return code3 === 62 ? end(code3) : instruction(code3); } function tagCloseStart(code3) { if (asciiAlpha(code3)) { effects.consume(code3); return tagClose; } return nok(code3); } function tagClose(code3) { if (code3 === 45 || asciiAlphanumeric(code3)) { effects.consume(code3); return tagClose; } return tagCloseBetween(code3); } function tagCloseBetween(code3) { if (markdownLineEnding(code3)) { returnState = tagCloseBetween; return lineEndingBefore(code3); } if (markdownSpace(code3)) { effects.consume(code3); return tagCloseBetween; } return end(code3); } function tagOpen(code3) { if (code3 === 45 || asciiAlphanumeric(code3)) { effects.consume(code3); return tagOpen; } if (code3 === 47 || code3 === 62 || markdownLineEndingOrSpace(code3)) { return tagOpenBetween(code3); } return nok(code3); } function tagOpenBetween(code3) { if (code3 === 47) { effects.consume(code3); return end; } if (code3 === 58 || code3 === 95 || asciiAlpha(code3)) { effects.consume(code3); return tagOpenAttributeName; } if (markdownLineEnding(code3)) { returnState = tagOpenBetween; return lineEndingBefore(code3); } if (markdownSpace(code3)) { effects.consume(code3); return tagOpenBetween; } return end(code3); } function tagOpenAttributeName(code3) { if (code3 === 45 || code3 === 46 || code3 === 58 || code3 === 95 || asciiAlphanumeric(code3)) { effects.consume(code3); return tagOpenAttributeName; } return tagOpenAttributeNameAfter(code3); } function tagOpenAttributeNameAfter(code3) { if (code3 === 61) { effects.consume(code3); return tagOpenAttributeValueBefore; } if (markdownLineEnding(code3)) { returnState = tagOpenAttributeNameAfter; return lineEndingBefore(code3); } if (markdownSpace(code3)) { effects.consume(code3); return tagOpenAttributeNameAfter; } return tagOpenBetween(code3); } function tagOpenAttributeValueBefore(code3) { if (code3 === null || code3 === 60 || code3 === 61 || code3 === 62 || code3 === 96) { return nok(code3); } if (code3 === 34 || code3 === 39) { effects.consume(code3); marker = code3; return tagOpenAttributeValueQuoted; } if (markdownLineEnding(code3)) { returnState = tagOpenAttributeValueBefore; return lineEndingBefore(code3); } if (markdownSpace(code3)) { effects.consume(code3); return tagOpenAttributeValueBefore; } effects.consume(code3); return tagOpenAttributeValueUnquoted; } function tagOpenAttributeValueQuoted(code3) { if (code3 === marker) { effects.consume(code3); marker = void 0; return tagOpenAttributeValueQuotedAfter; } if (code3 === null) { return nok(code3); } if (markdownLineEnding(code3)) { returnState = tagOpenAttributeValueQuoted; return lineEndingBefore(code3); } effects.consume(code3); return tagOpenAttributeValueQuoted; } function tagOpenAttributeValueUnquoted(code3) { if (code3 === null || code3 === 34 || code3 === 39 || code3 === 60 || code3 === 61 || code3 === 96) { return nok(code3); } if (code3 === 47 || code3 === 62 || markdownLineEndingOrSpace(code3)) { return tagOpenBetween(code3); } effects.consume(code3); return tagOpenAttributeValueUnquoted; } function tagOpenAttributeValueQuotedAfter(code3) { if (code3 === 47 || code3 === 62 || markdownLineEndingOrSpace(code3)) { return tagOpenBetween(code3); } return nok(code3); } function end(code3) { if (code3 === 62) { effects.consume(code3); effects.exit("htmlTextData"); effects.exit("htmlText"); return ok4; } return nok(code3); } function lineEndingBefore(code3) { effects.exit("htmlTextData"); effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return lineEndingAfter; } function lineEndingAfter(code3) { return markdownSpace(code3) ? factorySpace( effects, lineEndingAfterPrefix, "linePrefix", self2.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4 )(code3) : lineEndingAfterPrefix(code3); } function lineEndingAfterPrefix(code3) { effects.enter("htmlTextData"); return returnState(code3); } } // node_modules/micromark-core-commonmark/lib/label-end.js var labelEnd = { name: "labelEnd", tokenize: tokenizeLabelEnd, resolveTo: resolveToLabelEnd, resolveAll: resolveAllLabelEnd }; var resourceConstruct = { tokenize: tokenizeResource }; var referenceFullConstruct = { tokenize: tokenizeReferenceFull }; var referenceCollapsedConstruct = { tokenize: tokenizeReferenceCollapsed }; function resolveAllLabelEnd(events) { let index3 = -1; while (++index3 < events.length) { const token = events[index3][1]; if (token.type === "labelImage" || token.type === "labelLink" || token.type === "labelEnd") { events.splice(index3 + 1, token.type === "labelImage" ? 4 : 2); token.type = "data"; index3++; } } return events; } function resolveToLabelEnd(events, context) { let index3 = events.length; let offset = 0; let token; let open; let close; let media; while (index3--) { token = events[index3][1]; if (open) { if (token.type === "link" || token.type === "labelLink" && token._inactive) { break; } if (events[index3][0] === "enter" && token.type === "labelLink") { token._inactive = true; } } else if (close) { if (events[index3][0] === "enter" && (token.type === "labelImage" || token.type === "labelLink") && !token._balanced) { open = index3; if (token.type !== "labelLink") { offset = 2; break; } } } else if (token.type === "labelEnd") { close = index3; } } const group = { type: events[open][1].type === "labelLink" ? "link" : "image", start: Object.assign({}, events[open][1].start), end: Object.assign({}, events[events.length - 1][1].end) }; const label = { type: "label", start: Object.assign({}, events[open][1].start), end: Object.assign({}, events[close][1].end) }; const text5 = { type: "labelText", start: Object.assign({}, events[open + offset + 2][1].end), end: Object.assign({}, events[close - 2][1].start) }; media = [ ["enter", group, context], ["enter", label, context] ]; media = push(media, events.slice(open + 1, open + offset + 3)); media = push(media, [["enter", text5, context]]); media = push( media, resolveAll( context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context ) ); media = push(media, [ ["exit", text5, context], events[close - 2], events[close - 1], ["exit", label, context] ]); media = push(media, events.slice(close + 1)); media = push(media, [["exit", group, context]]); splice(events, open, events.length, media); return events; } function tokenizeLabelEnd(effects, ok4, nok) { const self2 = this; let index3 = self2.events.length; let labelStart; let defined; while (index3--) { if ((self2.events[index3][1].type === "labelImage" || self2.events[index3][1].type === "labelLink") && !self2.events[index3][1]._balanced) { labelStart = self2.events[index3][1]; break; } } return start; function start(code3) { if (!labelStart) { return nok(code3); } if (labelStart._inactive) { return labelEndNok(code3); } defined = self2.parser.defined.includes( normalizeIdentifier( self2.sliceSerialize({ start: labelStart.end, end: self2.now() }) ) ); effects.enter("labelEnd"); effects.enter("labelMarker"); effects.consume(code3); effects.exit("labelMarker"); effects.exit("labelEnd"); return after; } function after(code3) { if (code3 === 40) { return effects.attempt( resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok )(code3); } if (code3 === 91) { return effects.attempt( referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok )(code3); } return defined ? labelEndOk(code3) : labelEndNok(code3); } function referenceNotFull(code3) { return effects.attempt( referenceCollapsedConstruct, labelEndOk, labelEndNok )(code3); } function labelEndOk(code3) { return ok4(code3); } function labelEndNok(code3) { labelStart._balanced = true; return nok(code3); } } function tokenizeResource(effects, ok4, nok) { return resourceStart; function resourceStart(code3) { effects.enter("resource"); effects.enter("resourceMarker"); effects.consume(code3); effects.exit("resourceMarker"); return resourceBefore; } function resourceBefore(code3) { return markdownLineEndingOrSpace(code3) ? factoryWhitespace(effects, resourceOpen)(code3) : resourceOpen(code3); } function resourceOpen(code3) { if (code3 === 41) { return resourceEnd(code3); } return factoryDestination( effects, resourceDestinationAfter, resourceDestinationMissing, "resourceDestination", "resourceDestinationLiteral", "resourceDestinationLiteralMarker", "resourceDestinationRaw", "resourceDestinationString", 32 )(code3); } function resourceDestinationAfter(code3) { return markdownLineEndingOrSpace(code3) ? factoryWhitespace(effects, resourceBetween)(code3) : resourceEnd(code3); } function resourceDestinationMissing(code3) { return nok(code3); } function resourceBetween(code3) { if (code3 === 34 || code3 === 39 || code3 === 40) { return factoryTitle( effects, resourceTitleAfter, nok, "resourceTitle", "resourceTitleMarker", "resourceTitleString" )(code3); } return resourceEnd(code3); } function resourceTitleAfter(code3) { return markdownLineEndingOrSpace(code3) ? factoryWhitespace(effects, resourceEnd)(code3) : resourceEnd(code3); } function resourceEnd(code3) { if (code3 === 41) { effects.enter("resourceMarker"); effects.consume(code3); effects.exit("resourceMarker"); effects.exit("resource"); return ok4; } return nok(code3); } } function tokenizeReferenceFull(effects, ok4, nok) { const self2 = this; return referenceFull; function referenceFull(code3) { return factoryLabel.call( self2, effects, referenceFullAfter, referenceFullMissing, "reference", "referenceMarker", "referenceString" )(code3); } function referenceFullAfter(code3) { return self2.parser.defined.includes( normalizeIdentifier( self2.sliceSerialize(self2.events[self2.events.length - 1][1]).slice(1, -1) ) ) ? ok4(code3) : nok(code3); } function referenceFullMissing(code3) { return nok(code3); } } function tokenizeReferenceCollapsed(effects, ok4, nok) { return referenceCollapsedStart; function referenceCollapsedStart(code3) { effects.enter("reference"); effects.enter("referenceMarker"); effects.consume(code3); effects.exit("referenceMarker"); return referenceCollapsedOpen; } function referenceCollapsedOpen(code3) { if (code3 === 93) { effects.enter("referenceMarker"); effects.consume(code3); effects.exit("referenceMarker"); effects.exit("reference"); return ok4; } return nok(code3); } } // node_modules/micromark-core-commonmark/lib/label-start-image.js var labelStartImage = { name: "labelStartImage", tokenize: tokenizeLabelStartImage, resolveAll: labelEnd.resolveAll }; function tokenizeLabelStartImage(effects, ok4, nok) { const self2 = this; return start; function start(code3) { effects.enter("labelImage"); effects.enter("labelImageMarker"); effects.consume(code3); effects.exit("labelImageMarker"); return open; } function open(code3) { if (code3 === 91) { effects.enter("labelMarker"); effects.consume(code3); effects.exit("labelMarker"); effects.exit("labelImage"); return after; } return nok(code3); } function after(code3) { return code3 === 94 && "_hiddenFootnoteSupport" in self2.parser.constructs ? nok(code3) : ok4(code3); } } // node_modules/micromark-core-commonmark/lib/label-start-link.js var labelStartLink = { name: "labelStartLink", tokenize: tokenizeLabelStartLink, resolveAll: labelEnd.resolveAll }; function tokenizeLabelStartLink(effects, ok4, nok) { const self2 = this; return start; function start(code3) { effects.enter("labelLink"); effects.enter("labelMarker"); effects.consume(code3); effects.exit("labelMarker"); effects.exit("labelLink"); return after; } function after(code3) { return code3 === 94 && "_hiddenFootnoteSupport" in self2.parser.constructs ? nok(code3) : ok4(code3); } } // node_modules/micromark-core-commonmark/lib/line-ending.js var lineEnding = { name: "lineEnding", tokenize: tokenizeLineEnding }; function tokenizeLineEnding(effects, ok4) { return start; function start(code3) { effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); return factorySpace(effects, ok4, "linePrefix"); } } // node_modules/micromark-core-commonmark/lib/thematic-break.js var thematicBreak = { name: "thematicBreak", tokenize: tokenizeThematicBreak }; function tokenizeThematicBreak(effects, ok4, nok) { let size = 0; let marker; return start; function start(code3) { effects.enter("thematicBreak"); return before(code3); } function before(code3) { marker = code3; return atBreak(code3); } function atBreak(code3) { if (code3 === marker) { effects.enter("thematicBreakSequence"); return sequence(code3); } if (size >= 3 && (code3 === null || markdownLineEnding(code3))) { effects.exit("thematicBreak"); return ok4(code3); } return nok(code3); } function sequence(code3) { if (code3 === marker) { effects.consume(code3); size++; return sequence; } effects.exit("thematicBreakSequence"); return markdownSpace(code3) ? factorySpace(effects, atBreak, "whitespace")(code3) : atBreak(code3); } } // node_modules/micromark-core-commonmark/lib/list.js var list = { name: "list", tokenize: tokenizeListStart, continuation: { tokenize: tokenizeListContinuation }, exit: tokenizeListEnd }; var listItemPrefixWhitespaceConstruct = { tokenize: tokenizeListItemPrefixWhitespace, partial: true }; var indentConstruct = { tokenize: tokenizeIndent, partial: true }; function tokenizeListStart(effects, ok4, nok) { const self2 = this; const tail = self2.events[self2.events.length - 1]; let initialSize = tail && tail[1].type === "linePrefix" ? tail[2].sliceSerialize(tail[1], true).length : 0; let size = 0; return start; function start(code3) { const kind = self2.containerState.type || (code3 === 42 || code3 === 43 || code3 === 45 ? "listUnordered" : "listOrdered"); if (kind === "listUnordered" ? !self2.containerState.marker || code3 === self2.containerState.marker : asciiDigit(code3)) { if (!self2.containerState.type) { self2.containerState.type = kind; effects.enter(kind, { _container: true }); } if (kind === "listUnordered") { effects.enter("listItemPrefix"); return code3 === 42 || code3 === 45 ? effects.check(thematicBreak, nok, atMarker)(code3) : atMarker(code3); } if (!self2.interrupt || code3 === 49) { effects.enter("listItemPrefix"); effects.enter("listItemValue"); return inside(code3); } } return nok(code3); } function inside(code3) { if (asciiDigit(code3) && ++size < 10) { effects.consume(code3); return inside; } if ((!self2.interrupt || size < 2) && (self2.containerState.marker ? code3 === self2.containerState.marker : code3 === 41 || code3 === 46)) { effects.exit("listItemValue"); return atMarker(code3); } return nok(code3); } function atMarker(code3) { effects.enter("listItemMarker"); effects.consume(code3); effects.exit("listItemMarker"); self2.containerState.marker = self2.containerState.marker || code3; return effects.check( blankLine, // Can’t be empty when interrupting. self2.interrupt ? nok : onBlank, effects.attempt( listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix ) ); } function onBlank(code3) { self2.containerState.initialBlankLine = true; initialSize++; return endOfPrefix(code3); } function otherPrefix(code3) { if (markdownSpace(code3)) { effects.enter("listItemPrefixWhitespace"); effects.consume(code3); effects.exit("listItemPrefixWhitespace"); return endOfPrefix; } return nok(code3); } function endOfPrefix(code3) { self2.containerState.size = initialSize + self2.sliceSerialize(effects.exit("listItemPrefix"), true).length; return ok4(code3); } } function tokenizeListContinuation(effects, ok4, nok) { const self2 = this; self2.containerState._closeFlow = void 0; return effects.check(blankLine, onBlank, notBlank); function onBlank(code3) { self2.containerState.furtherBlankLines = self2.containerState.furtherBlankLines || self2.containerState.initialBlankLine; return factorySpace( effects, ok4, "listItemIndent", self2.containerState.size + 1 )(code3); } function notBlank(code3) { if (self2.containerState.furtherBlankLines || !markdownSpace(code3)) { self2.containerState.furtherBlankLines = void 0; self2.containerState.initialBlankLine = void 0; return notInCurrentItem(code3); } self2.containerState.furtherBlankLines = void 0; self2.containerState.initialBlankLine = void 0; return effects.attempt(indentConstruct, ok4, notInCurrentItem)(code3); } function notInCurrentItem(code3) { self2.containerState._closeFlow = true; self2.interrupt = void 0; return factorySpace( effects, effects.attempt(list, ok4, nok), "linePrefix", self2.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4 )(code3); } } function tokenizeIndent(effects, ok4, nok) { const self2 = this; return factorySpace( effects, afterPrefix, "listItemIndent", self2.containerState.size + 1 ); function afterPrefix(code3) { const tail = self2.events[self2.events.length - 1]; return tail && tail[1].type === "listItemIndent" && tail[2].sliceSerialize(tail[1], true).length === self2.containerState.size ? ok4(code3) : nok(code3); } } function tokenizeListEnd(effects) { effects.exit(this.containerState.type); } function tokenizeListItemPrefixWhitespace(effects, ok4, nok) { const self2 = this; return factorySpace( effects, afterPrefix, "listItemPrefixWhitespace", self2.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4 + 1 ); function afterPrefix(code3) { const tail = self2.events[self2.events.length - 1]; return !markdownSpace(code3) && tail && tail[1].type === "listItemPrefixWhitespace" ? ok4(code3) : nok(code3); } } // node_modules/micromark-core-commonmark/lib/setext-underline.js var setextUnderline = { name: "setextUnderline", tokenize: tokenizeSetextUnderline, resolveTo: resolveToSetextUnderline }; function resolveToSetextUnderline(events, context) { let index3 = events.length; let content3; let text5; let definition2; while (index3--) { if (events[index3][0] === "enter") { if (events[index3][1].type === "content") { content3 = index3; break; } if (events[index3][1].type === "paragraph") { text5 = index3; } } else { if (events[index3][1].type === "content") { events.splice(index3, 1); } if (!definition2 && events[index3][1].type === "definition") { definition2 = index3; } } } const heading2 = { type: "setextHeading", start: Object.assign({}, events[text5][1].start), end: Object.assign({}, events[events.length - 1][1].end) }; events[text5][1].type = "setextHeadingText"; if (definition2) { events.splice(text5, 0, ["enter", heading2, context]); events.splice(definition2 + 1, 0, ["exit", events[content3][1], context]); events[content3][1].end = Object.assign({}, events[definition2][1].end); } else { events[content3][1] = heading2; } events.push(["exit", heading2, context]); return events; } function tokenizeSetextUnderline(effects, ok4, nok) { const self2 = this; let marker; return start; function start(code3) { let index3 = self2.events.length; let paragraph2; while (index3--) { if (self2.events[index3][1].type !== "lineEnding" && self2.events[index3][1].type !== "linePrefix" && self2.events[index3][1].type !== "content") { paragraph2 = self2.events[index3][1].type === "paragraph"; break; } } if (!self2.parser.lazy[self2.now().line] && (self2.interrupt || paragraph2)) { effects.enter("setextHeadingLine"); marker = code3; return before(code3); } return nok(code3); } function before(code3) { effects.enter("setextHeadingLineSequence"); return inside(code3); } function inside(code3) { if (code3 === marker) { effects.consume(code3); return inside; } effects.exit("setextHeadingLineSequence"); return markdownSpace(code3) ? factorySpace(effects, after, "lineSuffix")(code3) : after(code3); } function after(code3) { if (code3 === null || markdownLineEnding(code3)) { effects.exit("setextHeadingLine"); return ok4(code3); } return nok(code3); } } // node_modules/micromark/lib/initialize/flow.js var flow = { tokenize: initializeFlow }; function initializeFlow(effects) { const self2 = this; const initial = effects.attempt( // Try to parse a blank line. blankLine, atBlankEnding, // Try to parse initial flow (essentially, only code). effects.attempt( this.parser.constructs.flowInitial, afterConstruct, factorySpace( effects, effects.attempt( this.parser.constructs.flow, afterConstruct, effects.attempt(content2, afterConstruct) ), "linePrefix" ) ) ); return initial; function atBlankEnding(code3) { if (code3 === null) { effects.consume(code3); return; } effects.enter("lineEndingBlank"); effects.consume(code3); effects.exit("lineEndingBlank"); self2.currentConstruct = void 0; return initial; } function afterConstruct(code3) { if (code3 === null) { effects.consume(code3); return; } effects.enter("lineEnding"); effects.consume(code3); effects.exit("lineEnding"); self2.currentConstruct = void 0; return initial; } } // node_modules/micromark/lib/initialize/text.js var resolver = { resolveAll: createResolver() }; var string = initializeFactory("string"); var text = initializeFactory("text"); function initializeFactory(field) { return { tokenize: initializeText, resolveAll: createResolver( field === "text" ? resolveAllLineSuffixes : void 0 ) }; function initializeText(effects) { const self2 = this; const constructs2 = this.parser.constructs[field]; const text5 = effects.attempt(constructs2, start, notText); return start; function start(code3) { return atBreak(code3) ? text5(code3) : notText(code3); } function notText(code3) { if (code3 === null) { effects.consume(code3); return; } effects.enter("data"); effects.consume(code3); return data; } function data(code3) { if (atBreak(code3)) { effects.exit("data"); return text5(code3); } effects.consume(code3); return data; } function atBreak(code3) { if (code3 === null) { return true; } const list3 = constructs2[code3]; let index3 = -1; if (list3) { while (++index3 < list3.length) { const item = list3[index3]; if (!item.previous || item.previous.call(self2, self2.previous)) { return true; } } } return false; } } } function createResolver(extraResolver) { return resolveAllText; function resolveAllText(events, context) { let index3 = -1; let enter; while (++index3 <= events.length) { if (enter === void 0) { if (events[index3] && events[index3][1].type === "data") { enter = index3; index3++; } } else if (!events[index3] || events[index3][1].type !== "data") { if (index3 !== enter + 2) { events[enter][1].end = events[index3 - 1][1].end; events.splice(enter + 2, index3 - enter - 2); index3 = enter + 2; } enter = void 0; } } return extraResolver ? extraResolver(events, context) : events; } } function resolveAllLineSuffixes(events, context) { let eventIndex = 0; while (++eventIndex <= events.length) { if ((eventIndex === events.length || events[eventIndex][1].type === "lineEnding") && events[eventIndex - 1][1].type === "data") { const data = events[eventIndex - 1][1]; const chunks = context.sliceStream(data); let index3 = chunks.length; let bufferIndex = -1; let size = 0; let tabs; while (index3--) { const chunk = chunks[index3]; if (typeof chunk === "string") { bufferIndex = chunk.length; while (chunk.charCodeAt(bufferIndex - 1) === 32) { size++; bufferIndex--; } if (bufferIndex) break; bufferIndex = -1; } else if (chunk === -2) { tabs = true; size++; } else if (chunk === -1) { } else { index3++; break; } } if (size) { const token = { type: eventIndex === events.length || tabs || size < 2 ? "lineSuffix" : "hardBreakTrailing", start: { line: data.end.line, column: data.end.column - size, offset: data.end.offset - size, _index: data.start._index + index3, _bufferIndex: index3 ? bufferIndex : data.start._bufferIndex + bufferIndex }, end: Object.assign({}, data.end) }; data.end = Object.assign({}, token.start); if (data.start.offset === data.end.offset) { Object.assign(data, token); } else { events.splice( eventIndex, 0, ["enter", token, context], ["exit", token, context] ); eventIndex += 2; } } eventIndex++; } } return events; } // node_modules/micromark/lib/create-tokenizer.js function createTokenizer(parser, initialize, from) { let point5 = Object.assign( from ? Object.assign({}, from) : { line: 1, column: 1, offset: 0 }, { _index: 0, _bufferIndex: -1 } ); const columnStart = {}; const resolveAllConstructs = []; let chunks = []; let stack = []; let consumed = true; const effects = { consume, enter, exit: exit3, attempt: constructFactory(onsuccessfulconstruct), check: constructFactory(onsuccessfulcheck), interrupt: constructFactory(onsuccessfulcheck, { interrupt: true }) }; const context = { previous: null, code: null, containerState: {}, events: [], parser, sliceStream, sliceSerialize, now, defineSkip, write }; let state = initialize.tokenize.call(context, effects); let expectedCode; if (initialize.resolveAll) { resolveAllConstructs.push(initialize); } return context; function write(slice) { chunks = push(chunks, slice); main(); if (chunks[chunks.length - 1] !== null) { return []; } addResult(initialize, 0); context.events = resolveAll(resolveAllConstructs, context.events, context); return context.events; } function sliceSerialize(token, expandTabs) { return serializeChunks(sliceStream(token), expandTabs); } function sliceStream(token) { return sliceChunks(chunks, token); } function now() { const { line, column, offset, _index, _bufferIndex } = point5; return { line, column, offset, _index, _bufferIndex }; } function defineSkip(value) { columnStart[value.line] = value.column; accountForPotentialSkip(); } function main() { let chunkIndex; while (point5._index < chunks.length) { const chunk = chunks[point5._index]; if (typeof chunk === "string") { chunkIndex = point5._index; if (point5._bufferIndex < 0) { point5._bufferIndex = 0; } while (point5._index === chunkIndex && point5._bufferIndex < chunk.length) { go(chunk.charCodeAt(point5._bufferIndex)); } } else { go(chunk); } } } function go(code3) { consumed = void 0; expectedCode = code3; state = state(code3); } function consume(code3) { if (markdownLineEnding(code3)) { point5.line++; point5.column = 1; point5.offset += code3 === -3 ? 2 : 1; accountForPotentialSkip(); } else if (code3 !== -1) { point5.column++; point5.offset++; } if (point5._bufferIndex < 0) { point5._index++; } else { point5._bufferIndex++; if (point5._bufferIndex === chunks[point5._index].length) { point5._bufferIndex = -1; point5._index++; } } context.previous = code3; consumed = true; } function enter(type, fields) { const token = fields || {}; token.type = type; token.start = now(); context.events.push(["enter", token, context]); stack.push(token); return token; } function exit3(type) { const token = stack.pop(); token.end = now(); context.events.push(["exit", token, context]); return token; } function onsuccessfulconstruct(construct, info) { addResult(construct, info.from); } function onsuccessfulcheck(_, info) { info.restore(); } function constructFactory(onreturn, fields) { return hook; function hook(constructs2, returnState, bogusState) { let listOfConstructs; let constructIndex; let currentConstruct; let info; return Array.isArray(constructs2) ? handleListOfConstructs(constructs2) : "tokenize" in constructs2 ? ( // @ts-expect-error Looks like a construct. handleListOfConstructs([constructs2]) ) : handleMapOfConstructs(constructs2); function handleMapOfConstructs(map2) { return start; function start(code3) { const def = code3 !== null && map2[code3]; const all3 = code3 !== null && map2.null; const list3 = [ // To do: add more extension tests. /* c8 ignore next 2 */ ...Array.isArray(def) ? def : def ? [def] : [], ...Array.isArray(all3) ? all3 : all3 ? [all3] : [] ]; return handleListOfConstructs(list3)(code3); } } function handleListOfConstructs(list3) { listOfConstructs = list3; constructIndex = 0; if (list3.length === 0) { return bogusState; } return handleConstruct(list3[constructIndex]); } function handleConstruct(construct) { return start; function start(code3) { info = store(); currentConstruct = construct; if (!construct.partial) { context.currentConstruct = construct; } if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) { return nok(code3); } return construct.tokenize.call( // If we do have fields, create an object w/ `context` as its // prototype. // This allows a “live binding”, which is needed for `interrupt`. fields ? Object.assign(Object.create(context), fields) : context, effects, ok4, nok )(code3); } } function ok4(code3) { consumed = true; onreturn(currentConstruct, info); return returnState; } function nok(code3) { consumed = true; info.restore(); if (++constructIndex < listOfConstructs.length) { return handleConstruct(listOfConstructs[constructIndex]); } return bogusState; } } } function addResult(construct, from2) { if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { resolveAllConstructs.push(construct); } if (construct.resolve) { splice( context.events, from2, context.events.length - from2, construct.resolve(context.events.slice(from2), context) ); } if (construct.resolveTo) { context.events = construct.resolveTo(context.events, context); } } function store() { const startPoint = now(); const startPrevious = context.previous; const startCurrentConstruct = context.currentConstruct; const startEventsIndex = context.events.length; const startStack = Array.from(stack); return { restore, from: startEventsIndex }; function restore() { point5 = startPoint; context.previous = startPrevious; context.currentConstruct = startCurrentConstruct; context.events.length = startEventsIndex; stack = startStack; accountForPotentialSkip(); } } function accountForPotentialSkip() { if (point5.line in columnStart && point5.column < 2) { point5.column = columnStart[point5.line]; point5.offset += columnStart[point5.line] - 1; } } } function sliceChunks(chunks, token) { const startIndex = token.start._index; const startBufferIndex = token.start._bufferIndex; const endIndex = token.end._index; const endBufferIndex = token.end._bufferIndex; let view; if (startIndex === endIndex) { view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]; } else { view = chunks.slice(startIndex, endIndex); if (startBufferIndex > -1) { const head = view[0]; if (typeof head === "string") { view[0] = head.slice(startBufferIndex); } else { view.shift(); } } if (endBufferIndex > 0) { view.push(chunks[endIndex].slice(0, endBufferIndex)); } } return view; } function serializeChunks(chunks, expandTabs) { let index3 = -1; const result = []; let atTab; while (++index3 < chunks.length) { const chunk = chunks[index3]; let value; if (typeof chunk === "string") { value = chunk; } else switch (chunk) { case -5: { value = "\r"; break; } case -4: { value = "\n"; break; } case -3: { value = "\r\n"; break; } case -2: { value = expandTabs ? " " : " "; break; } case -1: { if (!expandTabs && atTab) continue; value = " "; break; } default: { value = String.fromCharCode(chunk); } } atTab = chunk === -2; result.push(value); } return result.join(""); } // node_modules/micromark/lib/constructs.js var constructs_exports = {}; __export(constructs_exports, { attentionMarkers: () => attentionMarkers, contentInitial: () => contentInitial, disable: () => disable, document: () => document3, flow: () => flow2, flowInitial: () => flowInitial, insideSpan: () => insideSpan, string: () => string2, text: () => text2 }); var document3 = { [42]: list, [43]: list, [45]: list, [48]: list, [49]: list, [50]: list, [51]: list, [52]: list, [53]: list, [54]: list, [55]: list, [56]: list, [57]: list, [62]: blockQuote }; var contentInitial = { [91]: definition }; var flowInitial = { [-2]: codeIndented, [-1]: codeIndented, [32]: codeIndented }; var flow2 = { [35]: headingAtx, [42]: thematicBreak, [45]: [setextUnderline, thematicBreak], [60]: htmlFlow, [61]: setextUnderline, [95]: thematicBreak, [96]: codeFenced, [126]: codeFenced }; var string2 = { [38]: characterReference, [92]: characterEscape }; var text2 = { [-5]: lineEnding, [-4]: lineEnding, [-3]: lineEnding, [33]: labelStartImage, [38]: characterReference, [42]: attention, [60]: [autolink, htmlText], [91]: labelStartLink, [92]: [hardBreakEscape, characterEscape], [93]: labelEnd, [95]: attention, [96]: codeText }; var insideSpan = { null: [attention, resolver] }; var attentionMarkers = { null: [42, 95] }; var disable = { null: [] }; // node_modules/micromark/lib/parse.js function parse(options) { const settings = options || {}; const constructs2 = ( /** @type {FullNormalizedExtension} */ combineExtensions([constructs_exports, ...settings.extensions || []]) ); const parser = { defined: [], lazy: {}, constructs: constructs2, content: create2(content), document: create2(document2), flow: create2(flow), string: create2(string), text: create2(text) }; return parser; function create2(initial) { return creator; function creator(from) { return createTokenizer(parser, initial, from); } } } // node_modules/micromark/lib/preprocess.js var search = /[\0\t\n\r]/g; function preprocess() { let column = 1; let buffer2 = ""; let start = true; let atCarriageReturn; return preprocessor; function preprocessor(value, encoding, end) { const chunks = []; let match; let next; let startPosition; let endPosition; let code3; value = buffer2 + value.toString(encoding); startPosition = 0; buffer2 = ""; if (start) { if (value.charCodeAt(0) === 65279) { startPosition++; } start = void 0; } while (startPosition < value.length) { search.lastIndex = startPosition; match = search.exec(value); endPosition = match && match.index !== void 0 ? match.index : value.length; code3 = value.charCodeAt(endPosition); if (!match) { buffer2 = value.slice(startPosition); break; } if (code3 === 10 && startPosition === endPosition && atCarriageReturn) { chunks.push(-3); atCarriageReturn = void 0; } else { if (atCarriageReturn) { chunks.push(-5); atCarriageReturn = void 0; } if (startPosition < endPosition) { chunks.push(value.slice(startPosition, endPosition)); column += endPosition - startPosition; } switch (code3) { case 0: { chunks.push(65533); column++; break; } case 9: { next = Math.ceil(column / 4) * 4; chunks.push(-2); while (column++ < next) chunks.push(-1); break; } case 10: { chunks.push(-4); column = 1; break; } default: { atCarriageReturn = true; column = 1; } } } startPosition = endPosition + 1; } if (end) { if (atCarriageReturn) chunks.push(-5); if (buffer2) chunks.push(buffer2); chunks.push(null); } return chunks; } } // node_modules/micromark/lib/postprocess.js function postprocess(events) { while (!subtokenize(events)) { } return events; } // node_modules/micromark-util-decode-numeric-character-reference/index.js function decodeNumericCharacterReference(value, base2) { const code3 = Number.parseInt(value, base2); if ( // C0 except for HT, LF, FF, CR, space. code3 < 9 || code3 === 11 || code3 > 13 && code3 < 32 || // Control character (DEL) of C0, and C1 controls. code3 > 126 && code3 < 160 || // Lone high surrogates and low surrogates. code3 > 55295 && code3 < 57344 || // Noncharacters. code3 > 64975 && code3 < 65008 || (code3 & 65535) === 65535 || (code3 & 65535) === 65534 || // Out of range code3 > 1114111 ) { return "\uFFFD"; } return String.fromCharCode(code3); } // node_modules/micromark-util-decode-string/index.js var characterEscapeOrReference = /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi; function decodeString(value) { return value.replace(characterEscapeOrReference, decode); } function decode($0, $1, $2) { if ($1) { return $1; } const head = $2.charCodeAt(0); if (head === 35) { const head2 = $2.charCodeAt(1); const hex = head2 === 120 || head2 === 88; return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10); } return decodeNamedCharacterReference($2) || $0; } // node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position/lib/index.js function stringifyPosition2(value) { if (!value || typeof value !== "object") { return ""; } if ("position" in value || "type" in value) { return position2(value.position); } if ("start" in value || "end" in value) { return position2(value); } if ("line" in value || "column" in value) { return point2(value); } return ""; } function point2(point5) { return index2(point5 && point5.line) + ":" + index2(point5 && point5.column); } function position2(pos) { return point2(pos && pos.start) + "-" + point2(pos && pos.end); } function index2(value) { return value && typeof value === "number" ? value : 1; } // node_modules/mdast-util-from-markdown/lib/index.js var own3 = {}.hasOwnProperty; var fromMarkdown = ( /** * @type {( * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & * ((value: Value, options?: Options | null | undefined) => Root) * )} */ /** * @param {Value} value * @param {Encoding | Options | null | undefined} [encoding] * @param {Options | null | undefined} [options] * @returns {Root} */ function(value, encoding, options) { if (typeof encoding !== "string") { options = encoding; encoding = void 0; } return compiler(options)( postprocess( parse(options).document().write(preprocess()(value, encoding, true)) ) ); } ); function compiler(options) { const config = { transforms: [], canContainEols: ["emphasis", "fragment", "heading", "paragraph", "strong"], enter: { autolink: opener(link2), autolinkProtocol: onenterdata, autolinkEmail: onenterdata, atxHeading: opener(heading2), blockQuote: opener(blockQuote2), characterEscape: onenterdata, characterReference: onenterdata, codeFenced: opener(codeFlow), codeFencedFenceInfo: buffer2, codeFencedFenceMeta: buffer2, codeIndented: opener(codeFlow, buffer2), codeText: opener(codeText2, buffer2), codeTextData: onenterdata, data: onenterdata, codeFlowValue: onenterdata, definition: opener(definition2), definitionDestinationString: buffer2, definitionLabelString: buffer2, definitionTitleString: buffer2, emphasis: opener(emphasis2), hardBreakEscape: opener(hardBreak2), hardBreakTrailing: opener(hardBreak2), htmlFlow: opener(html4, buffer2), htmlFlowData: onenterdata, htmlText: opener(html4, buffer2), htmlTextData: onenterdata, image: opener(image2), label: buffer2, link: opener(link2), listItem: opener(listItem3), listItemValue: onenterlistitemvalue, listOrdered: opener(list3, onenterlistordered), listUnordered: opener(list3), paragraph: opener(paragraph2), reference: onenterreference, referenceString: buffer2, resourceDestinationString: buffer2, resourceTitleString: buffer2, setextHeading: opener(heading2), strong: opener(strong2), thematicBreak: opener(thematicBreak3) }, exit: { atxHeading: closer(), atxHeadingSequence: onexitatxheadingsequence, autolink: closer(), autolinkEmail: onexitautolinkemail, autolinkProtocol: onexitautolinkprotocol, blockQuote: closer(), characterEscapeValue: onexitdata, characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, characterReferenceMarkerNumeric: onexitcharacterreferencemarker, characterReferenceValue: onexitcharacterreferencevalue, codeFenced: closer(onexitcodefenced), codeFencedFence: onexitcodefencedfence, codeFencedFenceInfo: onexitcodefencedfenceinfo, codeFencedFenceMeta: onexitcodefencedfencemeta, codeFlowValue: onexitdata, codeIndented: closer(onexitcodeindented), codeText: closer(onexitcodetext), codeTextData: onexitdata, data: onexitdata, definition: closer(), definitionDestinationString: onexitdefinitiondestinationstring, definitionLabelString: onexitdefinitionlabelstring, definitionTitleString: onexitdefinitiontitlestring, emphasis: closer(), hardBreakEscape: closer(onexithardbreak), hardBreakTrailing: closer(onexithardbreak), htmlFlow: closer(onexithtmlflow), htmlFlowData: onexitdata, htmlText: closer(onexithtmltext), htmlTextData: onexitdata, image: closer(onexitimage), label: onexitlabel, labelText: onexitlabeltext, lineEnding: onexitlineending, link: closer(onexitlink), listItem: closer(), listOrdered: closer(), listUnordered: closer(), paragraph: closer(), referenceString: onexitreferencestring, resourceDestinationString: onexitresourcedestinationstring, resourceTitleString: onexitresourcetitlestring, resource: onexitresource, setextHeading: closer(onexitsetextheading), setextHeadingLineSequence: onexitsetextheadinglinesequence, setextHeadingText: onexitsetextheadingtext, strong: closer(), thematicBreak: closer() } }; configure(config, (options || {}).mdastExtensions || []); const data = {}; return compile; function compile(events) { let tree = { type: "root", children: [] }; const context = { stack: [tree], tokenStack: [], config, enter, exit: exit3, buffer: buffer2, resume, setData, getData }; const listStack = []; let index3 = -1; while (++index3 < events.length) { if (events[index3][1].type === "listOrdered" || events[index3][1].type === "listUnordered") { if (events[index3][0] === "enter") { listStack.push(index3); } else { const tail = listStack.pop(); index3 = prepareList(events, tail, index3); } } } index3 = -1; while (++index3 < events.length) { const handler = config[events[index3][0]]; if (own3.call(handler, events[index3][1].type)) { handler[events[index3][1].type].call( Object.assign( { sliceSerialize: events[index3][2].sliceSerialize }, context ), events[index3][1] ); } } if (context.tokenStack.length > 0) { const tail = context.tokenStack[context.tokenStack.length - 1]; const handler = tail[1] || defaultOnError; handler.call(context, void 0, tail[0]); } tree.position = { start: point3( events.length > 0 ? events[0][1].start : { line: 1, column: 1, offset: 0 } ), end: point3( events.length > 0 ? events[events.length - 2][1].end : { line: 1, column: 1, offset: 0 } ) }; index3 = -1; while (++index3 < config.transforms.length) { tree = config.transforms[index3](tree) || tree; } return tree; } function prepareList(events, start, length) { let index3 = start - 1; let containerBalance = -1; let listSpread = false; let listItem4; let lineIndex; let firstBlankLineIndex; let atMarker; while (++index3 <= length) { const event = events[index3]; if (event[1].type === "listUnordered" || event[1].type === "listOrdered" || event[1].type === "blockQuote") { if (event[0] === "enter") { containerBalance++; } else { containerBalance--; } atMarker = void 0; } else if (event[1].type === "lineEndingBlank") { if (event[0] === "enter") { if (listItem4 && !atMarker && !containerBalance && !firstBlankLineIndex) { firstBlankLineIndex = index3; } atMarker = void 0; } } else if (event[1].type === "linePrefix" || event[1].type === "listItemValue" || event[1].type === "listItemMarker" || event[1].type === "listItemPrefix" || event[1].type === "listItemPrefixWhitespace") { } else { atMarker = void 0; } if (!containerBalance && event[0] === "enter" && event[1].type === "listItemPrefix" || containerBalance === -1 && event[0] === "exit" && (event[1].type === "listUnordered" || event[1].type === "listOrdered")) { if (listItem4) { let tailIndex = index3; lineIndex = void 0; while (tailIndex--) { const tailEvent = events[tailIndex]; if (tailEvent[1].type === "lineEnding" || tailEvent[1].type === "lineEndingBlank") { if (tailEvent[0] === "exit") continue; if (lineIndex) { events[lineIndex][1].type = "lineEndingBlank"; listSpread = true; } tailEvent[1].type = "lineEnding"; lineIndex = tailIndex; } else if (tailEvent[1].type === "linePrefix" || tailEvent[1].type === "blockQuotePrefix" || tailEvent[1].type === "blockQuotePrefixWhitespace" || tailEvent[1].type === "blockQuoteMarker" || tailEvent[1].type === "listItemIndent") { } else { break; } } if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) { listItem4._spread = true; } listItem4.end = Object.assign( {}, lineIndex ? events[lineIndex][1].start : event[1].end ); events.splice(lineIndex || index3, 0, ["exit", listItem4, event[2]]); index3++; length++; } if (event[1].type === "listItemPrefix") { listItem4 = { type: "listItem", _spread: false, start: Object.assign({}, event[1].start), // @ts-expect-error: we’ll add `end` in a second. end: void 0 }; events.splice(index3, 0, ["enter", listItem4, event[2]]); index3++; length++; firstBlankLineIndex = void 0; atMarker = true; } } } events[start][1]._spread = listSpread; return length; } function setData(key, value) { data[key] = value; } function getData(key) { return data[key]; } function opener(create2, and) { return open; function open(token) { enter.call(this, create2(token), token); if (and) and.call(this, token); } } function buffer2() { this.stack.push({ type: "fragment", children: [] }); } function enter(node2, token, errorHandler) { const parent = this.stack[this.stack.length - 1]; parent.children.push(node2); this.stack.push(node2); this.tokenStack.push([token, errorHandler]); node2.position = { start: point3(token.start) }; return node2; } function closer(and) { return close; function close(token) { if (and) and.call(this, token); exit3.call(this, token); } } function exit3(token, onExitError) { const node2 = this.stack.pop(); const open = this.tokenStack.pop(); if (!open) { throw new Error( "Cannot close `" + token.type + "` (" + stringifyPosition2({ start: token.start, end: token.end }) + "): it\u2019s not open" ); } else if (open[0].type !== token.type) { if (onExitError) { onExitError.call(this, token, open[0]); } else { const handler = open[1] || defaultOnError; handler.call(this, token, open[0]); } } node2.position.end = point3(token.end); return node2; } function resume() { return toString(this.stack.pop()); } function onenterlistordered() { setData("expectingFirstListItemValue", true); } function onenterlistitemvalue(token) { if (getData("expectingFirstListItemValue")) { const ancestor = this.stack[this.stack.length - 2]; ancestor.start = Number.parseInt(this.sliceSerialize(token), 10); setData("expectingFirstListItemValue"); } } function onexitcodefencedfenceinfo() { const data2 = this.resume(); const node2 = this.stack[this.stack.length - 1]; node2.lang = data2; } function onexitcodefencedfencemeta() { const data2 = this.resume(); const node2 = this.stack[this.stack.length - 1]; node2.meta = data2; } function onexitcodefencedfence() { if (getData("flowCodeInside")) return; this.buffer(); setData("flowCodeInside", true); } function onexitcodefenced() { const data2 = this.resume(); const node2 = this.stack[this.stack.length - 1]; node2.value = data2.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, ""); setData("flowCodeInside"); } function onexitcodeindented() { const data2 = this.resume(); const node2 = this.stack[this.stack.length - 1]; node2.value = data2.replace(/(\r?\n|\r)$/g, ""); } function onexitdefinitionlabelstring(token) { const label = this.resume(); const node2 = this.stack[this.stack.length - 1]; node2.label = label; node2.identifier = normalizeIdentifier( this.sliceSerialize(token) ).toLowerCase(); } function onexitdefinitiontitlestring() { const data2 = this.resume(); const node2 = this.stack[this.stack.length - 1]; node2.title = data2; } function onexitdefinitiondestinationstring() { const data2 = this.resume(); const node2 = this.stack[this.stack.length - 1]; node2.url = data2; } function onexitatxheadingsequence(token) { const node2 = this.stack[this.stack.length - 1]; if (!node2.depth) { const depth = this.sliceSerialize(token).length; node2.depth = depth; } } function onexitsetextheadingtext() { setData("setextHeadingSlurpLineEnding", true); } function onexitsetextheadinglinesequence(token) { const node2 = this.stack[this.stack.length - 1]; node2.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2; } function onexitsetextheading() { setData("setextHeadingSlurpLineEnding"); } function onenterdata(token) { const node2 = this.stack[this.stack.length - 1]; let tail = node2.children[node2.children.length - 1]; if (!tail || tail.type !== "text") { tail = text5(); tail.position = { start: point3(token.start) }; node2.children.push(tail); } this.stack.push(tail); } function onexitdata(token) { const tail = this.stack.pop(); tail.value += this.sliceSerialize(token); tail.position.end = point3(token.end); } function onexitlineending(token) { const context = this.stack[this.stack.length - 1]; if (getData("atHardBreak")) { const tail = context.children[context.children.length - 1]; tail.position.end = point3(token.end); setData("atHardBreak"); return; } if (!getData("setextHeadingSlurpLineEnding") && config.canContainEols.includes(context.type)) { onenterdata.call(this, token); onexitdata.call(this, token); } } function onexithardbreak() { setData("atHardBreak", true); } function onexithtmlflow() { const data2 = this.resume(); const node2 = this.stack[this.stack.length - 1]; node2.value = data2; } function onexithtmltext() { const data2 = this.resume(); const node2 = this.stack[this.stack.length - 1]; node2.value = data2; } function onexitcodetext() { const data2 = this.resume(); const node2 = this.stack[this.stack.length - 1]; node2.value = data2; } function onexitlink() { const node2 = this.stack[this.stack.length - 1]; if (getData("inReference")) { const referenceType = getData("referenceType") || "shortcut"; node2.type += "Reference"; node2.referenceType = referenceType; delete node2.url; delete node2.title; } else { delete node2.identifier; delete node2.label; } setData("referenceType"); } function onexitimage() { const node2 = this.stack[this.stack.length - 1]; if (getData("inReference")) { const referenceType = getData("referenceType") || "shortcut"; node2.type += "Reference"; node2.referenceType = referenceType; delete node2.url; delete node2.title; } else { delete node2.identifier; delete node2.label; } setData("referenceType"); } function onexitlabeltext(token) { const string3 = this.sliceSerialize(token); const ancestor = this.stack[this.stack.length - 2]; ancestor.label = decodeString(string3); ancestor.identifier = normalizeIdentifier(string3).toLowerCase(); } function onexitlabel() { const fragment = this.stack[this.stack.length - 1]; const value = this.resume(); const node2 = this.stack[this.stack.length - 1]; setData("inReference", true); if (node2.type === "link") { const children = fragment.children; node2.children = children; } else { node2.alt = value; } } function onexitresourcedestinationstring() { const data2 = this.resume(); const node2 = this.stack[this.stack.length - 1]; node2.url = data2; } function onexitresourcetitlestring() { const data2 = this.resume(); const node2 = this.stack[this.stack.length - 1]; node2.title = data2; } function onexitresource() { setData("inReference"); } function onenterreference() { setData("referenceType", "collapsed"); } function onexitreferencestring(token) { const label = this.resume(); const node2 = this.stack[this.stack.length - 1]; node2.label = label; node2.identifier = normalizeIdentifier( this.sliceSerialize(token) ).toLowerCase(); setData("referenceType", "full"); } function onexitcharacterreferencemarker(token) { setData("characterReferenceType", token.type); } function onexitcharacterreferencevalue(token) { const data2 = this.sliceSerialize(token); const type = getData("characterReferenceType"); let value; if (type) { value = decodeNumericCharacterReference( data2, type === "characterReferenceMarkerNumeric" ? 10 : 16 ); setData("characterReferenceType"); } else { const result = decodeNamedCharacterReference(data2); value = result; } const tail = this.stack.pop(); tail.value += value; tail.position.end = point3(token.end); } function onexitautolinkprotocol(token) { onexitdata.call(this, token); const node2 = this.stack[this.stack.length - 1]; node2.url = this.sliceSerialize(token); } function onexitautolinkemail(token) { onexitdata.call(this, token); const node2 = this.stack[this.stack.length - 1]; node2.url = "mailto:" + this.sliceSerialize(token); } function blockQuote2() { return { type: "blockquote", children: [] }; } function codeFlow() { return { type: "code", lang: null, meta: null, value: "" }; } function codeText2() { return { type: "inlineCode", value: "" }; } function definition2() { return { type: "definition", identifier: "", label: null, title: null, url: "" }; } function emphasis2() { return { type: "emphasis", children: [] }; } function heading2() { return { type: "heading", depth: void 0, children: [] }; } function hardBreak2() { return { type: "break" }; } function html4() { return { type: "html", value: "" }; } function image2() { return { type: "image", title: null, url: "", alt: null }; } function link2() { return { type: "link", title: null, url: "", children: [] }; } function list3(token) { return { type: "list", ordered: token.type === "listOrdered", start: null, spread: token._spread, children: [] }; } function listItem3(token) { return { type: "listItem", spread: token._spread, checked: null, children: [] }; } function paragraph2() { return { type: "paragraph", children: [] }; } function strong2() { return { type: "strong", children: [] }; } function text5() { return { type: "text", value: "" }; } function thematicBreak3() { return { type: "thematicBreak" }; } } function point3(d) { return { line: d.line, column: d.column, offset: d.offset }; } function configure(combined, extensions) { let index3 = -1; while (++index3 < extensions.length) { const value = extensions[index3]; if (Array.isArray(value)) { configure(combined, value); } else { extension(combined, value); } } } function extension(combined, extension2) { let key; for (key in extension2) { if (own3.call(extension2, key)) { if (key === "canContainEols") { const right = extension2[key]; if (right) { combined[key].push(...right); } } else if (key === "transforms") { const right = extension2[key]; if (right) { combined[key].push(...right); } } else if (key === "enter" || key === "exit") { const right = extension2[key]; if (right) { Object.assign(combined[key], right); } } } } } function defaultOnError(left, right) { if (left) { throw new Error( "Cannot close `" + left.type + "` (" + stringifyPosition2({ start: left.start, end: left.end }) + "): a different token (`" + right.type + "`, " + stringifyPosition2({ start: right.start, end: right.end }) + ") is open" ); } else { throw new Error( "Cannot close document, a token (`" + right.type + "`, " + stringifyPosition2({ start: right.start, end: right.end }) + ") is still open" ); } } // node_modules/remark-parse/lib/index.js function remarkParse(options) { const parser = (doc) => { const settings = ( /** @type {Options} */ this.data("settings") ); return fromMarkdown( doc, Object.assign({}, settings, options, { // Note: these options are not in the readme. // The goal is for them to be set by plugins on `data` instead of being // passed by users. extensions: this.data("micromarkExtensions") || [], mdastExtensions: this.data("fromMarkdownExtensions") || [] }) ); }; Object.assign(this, { Parser: parser }); } // node_modules/mdast-util-to-hast/lib/handlers/blockquote.js function blockquote(state, node2) { const result = { type: "element", tagName: "blockquote", properties: {}, children: state.wrap(state.all(node2), true) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/break.js function hardBreak(state, node2) { const result = { type: "element", tagName: "br", properties: {}, children: [] }; state.patch(node2, result); return [state.applyData(node2, result), { type: "text", value: "\n" }]; } // node_modules/mdast-util-to-hast/lib/handlers/code.js function code(state, node2) { const value = node2.value ? node2.value + "\n" : ""; const lang = node2.lang ? node2.lang.match(/^[^ \t]+(?=[ \t]|$)/) : null; const properties = {}; if (lang) { properties.className = ["language-" + lang]; } let result = { type: "element", tagName: "code", properties, children: [{ type: "text", value }] }; if (node2.meta) { result.data = { meta: node2.meta }; } state.patch(node2, result); result = state.applyData(node2, result); result = { type: "element", tagName: "pre", properties: {}, children: [result] }; state.patch(node2, result); return result; } // node_modules/mdast-util-to-hast/lib/handlers/delete.js function strikethrough(state, node2) { const result = { type: "element", tagName: "del", properties: {}, children: state.all(node2) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/emphasis.js function emphasis(state, node2) { const result = { type: "element", tagName: "em", properties: {}, children: state.all(node2) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/micromark-util-sanitize-uri/index.js function normalizeUri(value) { const result = []; let index3 = -1; let start = 0; let skip = 0; while (++index3 < value.length) { const code3 = value.charCodeAt(index3); let replace2 = ""; if (code3 === 37 && asciiAlphanumeric(value.charCodeAt(index3 + 1)) && asciiAlphanumeric(value.charCodeAt(index3 + 2))) { skip = 2; } else if (code3 < 128) { if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code3))) { replace2 = String.fromCharCode(code3); } } else if (code3 > 55295 && code3 < 57344) { const next = value.charCodeAt(index3 + 1); if (code3 < 56320 && next > 56319 && next < 57344) { replace2 = String.fromCharCode(code3, next); skip = 1; } else { replace2 = "\uFFFD"; } } else { replace2 = String.fromCharCode(code3); } if (replace2) { result.push(value.slice(start, index3), encodeURIComponent(replace2)); start = index3 + skip + 1; replace2 = ""; } if (skip) { index3 += skip; skip = 0; } } return result.join("") + value.slice(start); } // node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js function footnoteReference(state, node2) { const id = String(node2.identifier).toUpperCase(); const safeId = normalizeUri(id.toLowerCase()); const index3 = state.footnoteOrder.indexOf(id); let counter; if (index3 === -1) { state.footnoteOrder.push(id); state.footnoteCounts[id] = 1; counter = state.footnoteOrder.length; } else { state.footnoteCounts[id]++; counter = index3 + 1; } const reuseCounter = state.footnoteCounts[id]; const link2 = { type: "element", tagName: "a", properties: { href: "#" + state.clobberPrefix + "fn-" + safeId, id: state.clobberPrefix + "fnref-" + safeId + (reuseCounter > 1 ? "-" + reuseCounter : ""), dataFootnoteRef: true, ariaDescribedBy: ["footnote-label"] }, children: [{ type: "text", value: String(counter) }] }; state.patch(node2, link2); const sup = { type: "element", tagName: "sup", properties: {}, children: [link2] }; state.patch(node2, sup); return state.applyData(node2, sup); } // node_modules/mdast-util-to-hast/lib/handlers/footnote.js function footnote(state, node2) { const footnoteById = state.footnoteById; let no = 1; while (no in footnoteById) no++; const identifier = String(no); footnoteById[identifier] = { type: "footnoteDefinition", identifier, children: [{ type: "paragraph", children: node2.children }], position: node2.position }; return footnoteReference(state, { type: "footnoteReference", identifier, position: node2.position }); } // node_modules/mdast-util-to-hast/lib/handlers/heading.js function heading(state, node2) { const result = { type: "element", tagName: "h" + node2.depth, properties: {}, children: state.all(node2) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/html.js function html(state, node2) { if (state.dangerous) { const result = { type: "raw", value: node2.value }; state.patch(node2, result); return state.applyData(node2, result); } return null; } // node_modules/mdast-util-to-hast/lib/revert.js function revert(state, node2) { const subtype = node2.referenceType; let suffix = "]"; if (subtype === "collapsed") { suffix += "[]"; } else if (subtype === "full") { suffix += "[" + (node2.label || node2.identifier) + "]"; } if (node2.type === "imageReference") { return { type: "text", value: "![" + node2.alt + suffix }; } const contents = state.all(node2); const head = contents[0]; if (head && head.type === "text") { head.value = "[" + head.value; } else { contents.unshift({ type: "text", value: "[" }); } const tail = contents[contents.length - 1]; if (tail && tail.type === "text") { tail.value += suffix; } else { contents.push({ type: "text", value: suffix }); } return contents; } // node_modules/mdast-util-to-hast/lib/handlers/image-reference.js function imageReference(state, node2) { const def = state.definition(node2.identifier); if (!def) { return revert(state, node2); } const properties = { src: normalizeUri(def.url || ""), alt: node2.alt }; if (def.title !== null && def.title !== void 0) { properties.title = def.title; } const result = { type: "element", tagName: "img", properties, children: [] }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/image.js function image(state, node2) { const properties = { src: normalizeUri(node2.url) }; if (node2.alt !== null && node2.alt !== void 0) { properties.alt = node2.alt; } if (node2.title !== null && node2.title !== void 0) { properties.title = node2.title; } const result = { type: "element", tagName: "img", properties, children: [] }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/inline-code.js function inlineCode(state, node2) { const text5 = { type: "text", value: node2.value.replace(/\r?\n|\r/g, " ") }; state.patch(node2, text5); const result = { type: "element", tagName: "code", properties: {}, children: [text5] }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/link-reference.js function linkReference(state, node2) { const def = state.definition(node2.identifier); if (!def) { return revert(state, node2); } const properties = { href: normalizeUri(def.url || "") }; if (def.title !== null && def.title !== void 0) { properties.title = def.title; } const result = { type: "element", tagName: "a", properties, children: state.all(node2) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/link.js function link(state, node2) { const properties = { href: normalizeUri(node2.url) }; if (node2.title !== null && node2.title !== void 0) { properties.title = node2.title; } const result = { type: "element", tagName: "a", properties, children: state.all(node2) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/list-item.js function listItem(state, node2, parent) { const results = state.all(node2); const loose = parent ? listLoose(parent) : listItemLoose(node2); const properties = {}; const children = []; if (typeof node2.checked === "boolean") { const head = results[0]; let paragraph2; if (head && head.type === "element" && head.tagName === "p") { paragraph2 = head; } else { paragraph2 = { type: "element", tagName: "p", properties: {}, children: [] }; results.unshift(paragraph2); } if (paragraph2.children.length > 0) { paragraph2.children.unshift({ type: "text", value: " " }); } paragraph2.children.unshift({ type: "element", tagName: "input", properties: { type: "checkbox", checked: node2.checked, disabled: true }, children: [] }); properties.className = ["task-list-item"]; } let index3 = -1; while (++index3 < results.length) { const child = results[index3]; if (loose || index3 !== 0 || child.type !== "element" || child.tagName !== "p") { children.push({ type: "text", value: "\n" }); } if (child.type === "element" && child.tagName === "p" && !loose) { children.push(...child.children); } else { children.push(child); } } const tail = results[results.length - 1]; if (tail && (loose || tail.type !== "element" || tail.tagName !== "p")) { children.push({ type: "text", value: "\n" }); } const result = { type: "element", tagName: "li", properties, children }; state.patch(node2, result); return state.applyData(node2, result); } function listLoose(node2) { let loose = false; if (node2.type === "list") { loose = node2.spread || false; const children = node2.children; let index3 = -1; while (!loose && ++index3 < children.length) { loose = listItemLoose(children[index3]); } } return loose; } function listItemLoose(node2) { const spread = node2.spread; return spread === void 0 || spread === null ? node2.children.length > 1 : spread; } // node_modules/mdast-util-to-hast/lib/handlers/list.js function list2(state, node2) { const properties = {}; const results = state.all(node2); let index3 = -1; if (typeof node2.start === "number" && node2.start !== 1) { properties.start = node2.start; } while (++index3 < results.length) { const child = results[index3]; if (child.type === "element" && child.tagName === "li" && child.properties && Array.isArray(child.properties.className) && child.properties.className.includes("task-list-item")) { properties.className = ["contains-task-list"]; break; } } const result = { type: "element", tagName: node2.ordered ? "ol" : "ul", properties, children: state.wrap(results, true) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/paragraph.js function paragraph(state, node2) { const result = { type: "element", tagName: "p", properties: {}, children: state.all(node2) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/root.js function root(state, node2) { const result = { type: "root", children: state.wrap(state.all(node2)) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/strong.js function strong(state, node2) { const result = { type: "element", tagName: "strong", properties: {}, children: state.all(node2) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/unist-util-position/lib/index.js var pointStart = point4("start"); var pointEnd = point4("end"); function position3(node2) { return { start: pointStart(node2), end: pointEnd(node2) }; } function point4(type) { return point5; function point5(node2) { const point6 = node2 && node2.position && node2.position[type] || {}; return { // @ts-expect-error: in practice, null is allowed. line: point6.line || null, // @ts-expect-error: in practice, null is allowed. column: point6.column || null, // @ts-expect-error: in practice, null is allowed. offset: point6.offset > -1 ? point6.offset : null }; } } // node_modules/mdast-util-to-hast/lib/handlers/table.js function table(state, node2) { const rows = state.all(node2); const firstRow = rows.shift(); const tableContent = []; if (firstRow) { const head = { type: "element", tagName: "thead", properties: {}, children: state.wrap([firstRow], true) }; state.patch(node2.children[0], head); tableContent.push(head); } if (rows.length > 0) { const body = { type: "element", tagName: "tbody", properties: {}, children: state.wrap(rows, true) }; const start = pointStart(node2.children[1]); const end = pointEnd(node2.children[node2.children.length - 1]); if (start.line && end.line) body.position = { start, end }; tableContent.push(body); } const result = { type: "element", tagName: "table", properties: {}, children: state.wrap(tableContent, true) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/table-row.js function tableRow(state, node2, parent) { const siblings = parent ? parent.children : void 0; const rowIndex = siblings ? siblings.indexOf(node2) : 1; const tagName = rowIndex === 0 ? "th" : "td"; const align = parent && parent.type === "table" ? parent.align : void 0; const length = align ? align.length : node2.children.length; let cellIndex = -1; const cells = []; while (++cellIndex < length) { const cell = node2.children[cellIndex]; const properties = {}; const alignValue = align ? align[cellIndex] : void 0; if (alignValue) { properties.align = alignValue; } let result2 = { type: "element", tagName, properties, children: [] }; if (cell) { result2.children = state.all(cell); state.patch(cell, result2); result2 = state.applyData(node2, result2); } cells.push(result2); } const result = { type: "element", tagName: "tr", properties: {}, children: state.wrap(cells, true) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/table-cell.js function tableCell(state, node2) { const result = { type: "element", tagName: "td", // Assume body cell. properties: {}, children: state.all(node2) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/trim-lines/index.js var tab = 9; var space = 32; function trimLines(value) { const source = String(value); const search2 = /\r?\n|\r/g; let match = search2.exec(source); let last = 0; const lines = []; while (match) { lines.push( trimLine(source.slice(last, match.index), last > 0, true), match[0] ); last = match.index + match[0].length; match = search2.exec(source); } lines.push(trimLine(source.slice(last), last > 0, false)); return lines.join(""); } function trimLine(value, start, end) { let startIndex = 0; let endIndex = value.length; if (start) { let code3 = value.codePointAt(startIndex); while (code3 === tab || code3 === space) { startIndex++; code3 = value.codePointAt(startIndex); } } if (end) { let code3 = value.codePointAt(endIndex - 1); while (code3 === tab || code3 === space) { endIndex--; code3 = value.codePointAt(endIndex - 1); } } return endIndex > startIndex ? value.slice(startIndex, endIndex) : ""; } // node_modules/mdast-util-to-hast/lib/handlers/text.js function text3(state, node2) { const result = { type: "text", value: trimLines(String(node2.value)) }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js function thematicBreak2(state, node2) { const result = { type: "element", tagName: "hr", properties: {}, children: [] }; state.patch(node2, result); return state.applyData(node2, result); } // node_modules/mdast-util-to-hast/lib/handlers/index.js var handlers = { blockquote, break: hardBreak, code, delete: strikethrough, emphasis, footnoteReference, footnote, heading, html, imageReference, image, inlineCode, linkReference, link, listItem, list: list2, paragraph, root, strong, table, tableCell, tableRow, text: text3, thematicBreak: thematicBreak2, toml: ignore, yaml: ignore, definition: ignore, footnoteDefinition: ignore }; function ignore() { return null; } // node_modules/unist-util-is/lib/index.js var convert3 = ( /** * @type {( * ((test: PredicateTest) => AssertPredicate) & * ((test?: Test) => AssertAnything) * )} */ /** * @param {Test} [test] * @returns {AssertAnything} */ function(test3) { if (test3 === void 0 || test3 === null) { return ok3; } if (typeof test3 === "string") { return typeFactory3(test3); } if (typeof test3 === "object") { return Array.isArray(test3) ? anyFactory4(test3) : propsFactory3(test3); } if (typeof test3 === "function") { return castFactory4(test3); } throw new Error("Expected function, string, or object as test"); } ); function anyFactory4(tests) { const checks2 = []; let index3 = -1; while (++index3 < tests.length) { checks2[index3] = convert3(tests[index3]); } return castFactory4(any); function any(...parameters) { let index4 = -1; while (++index4 < checks2.length) { if (checks2[index4].call(this, ...parameters)) return true; } return false; } } function propsFactory3(check) { return castFactory4(all3); function all3(node2) { let key; for (key in check) { if (node2[key] !== check[key]) return false; } return true; } } function typeFactory3(check) { return castFactory4(type); function type(node2) { return node2 && node2.type === check; } } function castFactory4(check) { return assertion; function assertion(node2, ...parameters) { return Boolean( node2 && typeof node2 === "object" && "type" in node2 && // @ts-expect-error: fine. Boolean(check.call(this, node2, ...parameters)) ); } } function ok3() { return true; } // node_modules/unist-util-visit-parents/lib/color.js function color3(d) { return "\x1B[33m" + d + "\x1B[39m"; } // node_modules/unist-util-visit-parents/lib/index.js var CONTINUE3 = true; var EXIT3 = false; var SKIP3 = "skip"; var visitParents3 = ( /** * @type {( * ((tree: Tree, test: Check, visitor: BuildVisitor, reverse?: boolean | null | undefined) => void) & * ((tree: Tree, visitor: BuildVisitor, reverse?: boolean | null | undefined) => void) * )} */ /** * @param {Node} tree * @param {Test} test * @param {Visitor} visitor * @param {boolean | null | undefined} [reverse] * @returns {void} */ function(tree, test3, visitor3, reverse) { if (typeof test3 === "function" && typeof visitor3 !== "function") { reverse = visitor3; visitor3 = test3; test3 = null; } const is4 = convert3(test3); const step = reverse ? -1 : 1; factory(tree, void 0, [])(); function factory(node2, index3, parents) { const value = node2 && typeof node2 === "object" ? node2 : {}; if (typeof value.type === "string") { const name = ( // `hast` typeof value.tagName === "string" ? value.tagName : ( // `xast` typeof value.name === "string" ? value.name : void 0 ) ); Object.defineProperty(visit5, "name", { value: "node (" + color3(node2.type + (name ? "<" + name + ">" : "")) + ")" }); } return visit5; function visit5() { let result = []; let subresult; let offset; let grandparents; if (!test3 || is4(node2, index3, parents[parents.length - 1] || null)) { result = toResult3(visitor3(node2, parents)); if (result[0] === EXIT3) { return result; } } if (node2.children && result[0] !== SKIP3) { offset = (reverse ? node2.children.length : -1) + step; grandparents = parents.concat(node2); while (offset > -1 && offset < node2.children.length) { subresult = factory(node2.children[offset], offset, grandparents)(); if (subresult[0] === EXIT3) { return subresult; } offset = typeof subresult[1] === "number" ? subresult[1] : offset + step; } } return result; } } } ); function toResult3(value) { if (Array.isArray(value)) { return value; } if (typeof value === "number") { return [CONTINUE3, value]; } return [value]; } // node_modules/mdast-util-to-hast/node_modules/unist-util-visit/lib/index.js var visit2 = ( /** * @type {( * ((tree: Tree, test: Check, visitor: BuildVisitor, reverse?: boolean | null | undefined) => void) & * ((tree: Tree, visitor: BuildVisitor, reverse?: boolean | null | undefined) => void) * )} */ /** * @param {Node} tree * @param {Test} test * @param {Visitor} visitor * @param {boolean | null | undefined} [reverse] * @returns {void} */ function(tree, test3, visitor3, reverse) { if (typeof test3 === "function" && typeof visitor3 !== "function") { reverse = visitor3; visitor3 = test3; test3 = null; } visitParents3(tree, test3, overload, reverse); function overload(node2, parents) { const parent = parents[parents.length - 1]; return visitor3( node2, parent ? parent.children.indexOf(node2) : null, parent ); } } ); // node_modules/unist-util-generated/lib/index.js function generated(node2) { return !node2 || !node2.position || !node2.position.start || !node2.position.start.line || !node2.position.start.column || !node2.position.end || !node2.position.end.line || !node2.position.end.column; } // node_modules/mdast-util-definitions/node_modules/unist-util-visit/lib/index.js var visit3 = ( /** * @type {( * ((tree: Tree, test: Check, visitor: BuildVisitor, reverse?: boolean | null | undefined) => void) & * ((tree: Tree, visitor: BuildVisitor, reverse?: boolean | null | undefined) => void) * )} */ /** * @param {Node} tree * @param {Test} test * @param {Visitor} visitor * @param {boolean | null | undefined} [reverse] * @returns {void} */ function(tree, test3, visitor3, reverse) { if (typeof test3 === "function" && typeof visitor3 !== "function") { reverse = visitor3; visitor3 = test3; test3 = null; } visitParents3(tree, test3, overload, reverse); function overload(node2, parents) { const parent = parents[parents.length - 1]; return visitor3( node2, parent ? parent.children.indexOf(node2) : null, parent ); } } ); // node_modules/mdast-util-definitions/lib/index.js var own4 = {}.hasOwnProperty; function definitions(tree) { const cache = /* @__PURE__ */ Object.create(null); if (!tree || !tree.type) { throw new Error("mdast-util-definitions expected node"); } visit3(tree, "definition", (definition3) => { const id = clean(definition3.identifier); if (id && !own4.call(cache, id)) { cache[id] = definition3; } }); return definition2; function definition2(identifier) { const id = clean(identifier); return id && own4.call(cache, id) ? cache[id] : null; } } function clean(value) { return String(value || "").toUpperCase(); } // node_modules/mdast-util-to-hast/lib/state.js var own5 = {}.hasOwnProperty; function createState(tree, options) { const settings = options || {}; const dangerous = settings.allowDangerousHtml || false; const footnoteById = {}; state.dangerous = dangerous; state.clobberPrefix = settings.clobberPrefix === void 0 || settings.clobberPrefix === null ? "user-content-" : settings.clobberPrefix; state.footnoteLabel = settings.footnoteLabel || "Footnotes"; state.footnoteLabelTagName = settings.footnoteLabelTagName || "h2"; state.footnoteLabelProperties = settings.footnoteLabelProperties || { className: ["sr-only"] }; state.footnoteBackLabel = settings.footnoteBackLabel || "Back to content"; state.unknownHandler = settings.unknownHandler; state.passThrough = settings.passThrough; state.handlers = { ...handlers, ...settings.handlers }; state.definition = definitions(tree); state.footnoteById = footnoteById; state.footnoteOrder = []; state.footnoteCounts = {}; state.patch = patch; state.applyData = applyData; state.one = oneBound; state.all = allBound; state.wrap = wrap2; state.augment = augment; visit2(tree, "footnoteDefinition", (definition2) => { const id = String(definition2.identifier).toUpperCase(); if (!own5.call(footnoteById, id)) { footnoteById[id] = definition2; } }); return state; function augment(left, right) { if (left && "data" in left && left.data) { const data = left.data; if (data.hName) { if (right.type !== "element") { right = { type: "element", tagName: "", properties: {}, children: [] }; } right.tagName = data.hName; } if (right.type === "element" && data.hProperties) { right.properties = { ...right.properties, ...data.hProperties }; } if ("children" in right && right.children && data.hChildren) { right.children = data.hChildren; } } if (left) { const ctx = "type" in left ? left : { position: left }; if (!generated(ctx)) { right.position = { start: pointStart(ctx), end: pointEnd(ctx) }; } } return right; } function state(node2, tagName, props, children) { if (Array.isArray(props)) { children = props; props = {}; } return augment(node2, { type: "element", tagName, properties: props || {}, children: children || [] }); } function oneBound(node2, parent) { return one2(state, node2, parent); } function allBound(parent) { return all2(state, parent); } } function patch(from, to) { if (from.position) to.position = position3(from); } function applyData(from, to) { let result = to; if (from && from.data) { const hName = from.data.hName; const hChildren = from.data.hChildren; const hProperties = from.data.hProperties; if (typeof hName === "string") { if (result.type === "element") { result.tagName = hName; } else { result = { type: "element", tagName: hName, properties: {}, children: [] }; } } if (result.type === "element" && hProperties) { result.properties = { ...result.properties, ...hProperties }; } if ("children" in result && result.children && hChildren !== null && hChildren !== void 0) { result.children = hChildren; } } return result; } function one2(state, node2, parent) { const type = node2 && node2.type; if (!type) { throw new Error("Expected node, got `" + node2 + "`"); } if (own5.call(state.handlers, type)) { return state.handlers[type](state, node2, parent); } if (state.passThrough && state.passThrough.includes(type)) { return "children" in node2 ? { ...node2, children: all2(state, node2) } : node2; } if (state.unknownHandler) { return state.unknownHandler(state, node2, parent); } return defaultUnknownHandler(state, node2); } function all2(state, parent) { const values = []; if ("children" in parent) { const nodes = parent.children; let index3 = -1; while (++index3 < nodes.length) { const result = one2(state, nodes[index3], parent); if (result) { if (index3 && nodes[index3 - 1].type === "break") { if (!Array.isArray(result) && result.type === "text") { result.value = result.value.replace(/^\s+/, ""); } if (!Array.isArray(result) && result.type === "element") { const head = result.children[0]; if (head && head.type === "text") { head.value = head.value.replace(/^\s+/, ""); } } } if (Array.isArray(result)) { values.push(...result); } else { values.push(result); } } } } return values; } function defaultUnknownHandler(state, node2) { const data = node2.data || {}; const result = "value" in node2 && !(own5.call(data, "hProperties") || own5.call(data, "hChildren")) ? { type: "text", value: node2.value } : { type: "element", tagName: "div", properties: {}, children: all2(state, node2) }; state.patch(node2, result); return state.applyData(node2, result); } function wrap2(nodes, loose) { const result = []; let index3 = -1; if (loose) { result.push({ type: "text", value: "\n" }); } while (++index3 < nodes.length) { if (index3) result.push({ type: "text", value: "\n" }); result.push(nodes[index3]); } if (loose && nodes.length > 0) { result.push({ type: "text", value: "\n" }); } return result; } // node_modules/mdast-util-to-hast/lib/footer.js function footer(state) { const listItems = []; let index3 = -1; while (++index3 < state.footnoteOrder.length) { const def = state.footnoteById[state.footnoteOrder[index3]]; if (!def) { continue; } const content3 = state.all(def); const id = String(def.identifier).toUpperCase(); const safeId = normalizeUri(id.toLowerCase()); let referenceIndex = 0; const backReferences = []; while (++referenceIndex <= state.footnoteCounts[id]) { const backReference = { type: "element", tagName: "a", properties: { href: "#" + state.clobberPrefix + "fnref-" + safeId + (referenceIndex > 1 ? "-" + referenceIndex : ""), dataFootnoteBackref: true, className: ["data-footnote-backref"], ariaLabel: state.footnoteBackLabel }, children: [{ type: "text", value: "\u21A9" }] }; if (referenceIndex > 1) { backReference.children.push({ type: "element", tagName: "sup", children: [{ type: "text", value: String(referenceIndex) }] }); } if (backReferences.length > 0) { backReferences.push({ type: "text", value: " " }); } backReferences.push(backReference); } const tail = content3[content3.length - 1]; if (tail && tail.type === "element" && tail.tagName === "p") { const tailTail = tail.children[tail.children.length - 1]; if (tailTail && tailTail.type === "text") { tailTail.value += " "; } else { tail.children.push({ type: "text", value: " " }); } tail.children.push(...backReferences); } else { content3.push(...backReferences); } const listItem3 = { type: "element", tagName: "li", properties: { id: state.clobberPrefix + "fn-" + safeId }, children: state.wrap(content3, true) }; state.patch(def, listItem3); listItems.push(listItem3); } if (listItems.length === 0) { return; } return { type: "element", tagName: "section", properties: { dataFootnotes: true, className: ["footnotes"] }, children: [ { type: "element", tagName: state.footnoteLabelTagName, properties: { // To do: use structured clone. ...JSON.parse(JSON.stringify(state.footnoteLabelProperties)), id: "footnote-label" }, children: [{ type: "text", value: state.footnoteLabel }] }, { type: "text", value: "\n" }, { type: "element", tagName: "ol", properties: {}, children: state.wrap(listItems, true) }, { type: "text", value: "\n" } ] }; } // node_modules/mdast-util-to-hast/lib/index.js function toHast(tree, options) { const state = createState(tree, options); const node2 = state.one(tree, null); const foot = footer(state); if (foot) { node2.children.push({ type: "text", value: "\n" }, foot); } return Array.isArray(node2) ? { type: "root", children: node2 } : node2; } // node_modules/remark-rehype/lib/index.js var remarkRehype = ( /** @type {(import('unified').Plugin<[Processor, Options?]|[null|undefined, Options?]|[Options]|[], MdastRoot>)} */ function(destination, options) { return destination && "run" in destination ? bridge(destination, options) : mutate(destination || options); } ); var lib_default = remarkRehype; function bridge(destination, options) { return (node2, file, next) => { destination.run(toHast(node2, options), file, (error) => { next(error); }); }; } function mutate(options) { return (node2) => toHast(node2, options); } // node_modules/react-markdown/lib/react-markdown.js var import_prop_types = __toESM(require("prop-types"), 1); // node_modules/property-information/lib/util/schema.js var Schema = class { /** * @constructor * @param {Properties} property * @param {Normal} normal * @param {string} [space] */ constructor(property, normal, space2) { this.property = property; this.normal = normal; if (space2) { this.space = space2; } } }; Schema.prototype.property = {}; Schema.prototype.normal = {}; Schema.prototype.space = null; // node_modules/property-information/lib/util/merge.js function merge(definitions2, space2) { const property = {}; const normal = {}; let index3 = -1; while (++index3 < definitions2.length) { Object.assign(property, definitions2[index3].property); Object.assign(normal, definitions2[index3].normal); } return new Schema(property, normal, space2); } // node_modules/property-information/lib/normalize.js function normalize(value) { return value.toLowerCase(); } // node_modules/property-information/lib/util/info.js var Info = class { /** * @constructor * @param {string} property * @param {string} attribute */ constructor(property, attribute) { this.property = property; this.attribute = attribute; } }; Info.prototype.space = null; Info.prototype.boolean = false; Info.prototype.booleanish = false; Info.prototype.overloadedBoolean = false; Info.prototype.number = false; Info.prototype.commaSeparated = false; Info.prototype.spaceSeparated = false; Info.prototype.commaOrSpaceSeparated = false; Info.prototype.mustUseProperty = false; Info.prototype.defined = false; // node_modules/property-information/lib/util/types.js var types_exports = {}; __export(types_exports, { boolean: () => boolean, booleanish: () => booleanish, commaOrSpaceSeparated: () => commaOrSpaceSeparated, commaSeparated: () => commaSeparated, number: () => number, overloadedBoolean: () => overloadedBoolean, spaceSeparated: () => spaceSeparated }); var powers = 0; var boolean = increment(); var booleanish = increment(); var overloadedBoolean = increment(); var number = increment(); var spaceSeparated = increment(); var commaSeparated = increment(); var commaOrSpaceSeparated = increment(); function increment() { return 2 ** ++powers; } // node_modules/property-information/lib/util/defined-info.js var checks = Object.keys(types_exports); var DefinedInfo = class extends Info { /** * @constructor * @param {string} property * @param {string} attribute * @param {number|null} [mask] * @param {string} [space] */ constructor(property, attribute, mask, space2) { let index3 = -1; super(property, attribute); mark(this, "space", space2); if (typeof mask === "number") { while (++index3 < checks.length) { const check = checks[index3]; mark(this, checks[index3], (mask & types_exports[check]) === types_exports[check]); } } } }; DefinedInfo.prototype.defined = true; function mark(values, key, value) { if (value) { values[key] = value; } } // node_modules/property-information/lib/util/create.js var own6 = {}.hasOwnProperty; function create(definition2) { const property = {}; const normal = {}; let prop; for (prop in definition2.properties) { if (own6.call(definition2.properties, prop)) { const value = definition2.properties[prop]; const info = new DefinedInfo( prop, definition2.transform(definition2.attributes || {}, prop), value, definition2.space ); if (definition2.mustUseProperty && definition2.mustUseProperty.includes(prop)) { info.mustUseProperty = true; } property[prop] = info; normal[normalize(prop)] = prop; normal[normalize(info.attribute)] = prop; } } return new Schema(property, normal, definition2.space); } // node_modules/property-information/lib/xlink.js var xlink = create({ space: "xlink", transform(_, prop) { return "xlink:" + prop.slice(5).toLowerCase(); }, properties: { xLinkActuate: null, xLinkArcRole: null, xLinkHref: null, xLinkRole: null, xLinkShow: null, xLinkTitle: null, xLinkType: null } }); // node_modules/property-information/lib/xml.js var xml = create({ space: "xml", transform(_, prop) { return "xml:" + prop.slice(3).toLowerCase(); }, properties: { xmlLang: null, xmlBase: null, xmlSpace: null } }); // node_modules/property-information/lib/util/case-sensitive-transform.js function caseSensitiveTransform(attributes, attribute) { return attribute in attributes ? attributes[attribute] : attribute; } // node_modules/property-information/lib/util/case-insensitive-transform.js function caseInsensitiveTransform(attributes, property) { return caseSensitiveTransform(attributes, property.toLowerCase()); } // node_modules/property-information/lib/xmlns.js var xmlns = create({ space: "xmlns", attributes: { xmlnsxlink: "xmlns:xlink" }, transform: caseInsensitiveTransform, properties: { xmlns: null, xmlnsXLink: null } }); // node_modules/property-information/lib/aria.js var aria = create({ transform(_, prop) { return prop === "role" ? prop : "aria-" + prop.slice(4).toLowerCase(); }, properties: { ariaActiveDescendant: null, ariaAtomic: booleanish, ariaAutoComplete: null, ariaBusy: booleanish, ariaChecked: booleanish, ariaColCount: number, ariaColIndex: number, ariaColSpan: number, ariaControls: spaceSeparated, ariaCurrent: null, ariaDescribedBy: spaceSeparated, ariaDetails: null, ariaDisabled: booleanish, ariaDropEffect: spaceSeparated, ariaErrorMessage: null, ariaExpanded: booleanish, ariaFlowTo: spaceSeparated, ariaGrabbed: booleanish, ariaHasPopup: null, ariaHidden: booleanish, ariaInvalid: null, ariaKeyShortcuts: null, ariaLabel: null, ariaLabelledBy: spaceSeparated, ariaLevel: number, ariaLive: null, ariaModal: booleanish, ariaMultiLine: booleanish, ariaMultiSelectable: booleanish, ariaOrientation: null, ariaOwns: spaceSeparated, ariaPlaceholder: null, ariaPosInSet: number, ariaPressed: booleanish, ariaReadOnly: booleanish, ariaRelevant: null, ariaRequired: booleanish, ariaRoleDescription: spaceSeparated, ariaRowCount: number, ariaRowIndex: number, ariaRowSpan: number, ariaSelected: booleanish, ariaSetSize: number, ariaSort: null, ariaValueMax: number, ariaValueMin: number, ariaValueNow: number, ariaValueText: null, role: null } }); // node_modules/property-information/lib/html.js var html2 = create({ space: "html", attributes: { acceptcharset: "accept-charset", classname: "class", htmlfor: "for", httpequiv: "http-equiv" }, transform: caseInsensitiveTransform, mustUseProperty: ["checked", "multiple", "muted", "selected"], properties: { // Standard Properties. abbr: null, accept: commaSeparated, acceptCharset: spaceSeparated, accessKey: spaceSeparated, action: null, allow: null, allowFullScreen: boolean, allowPaymentRequest: boolean, allowUserMedia: boolean, alt: null, as: null, async: boolean, autoCapitalize: null, autoComplete: spaceSeparated, autoFocus: boolean, autoPlay: boolean, blocking: spaceSeparated, capture: boolean, charSet: null, checked: boolean, cite: null, className: spaceSeparated, cols: number, colSpan: null, content: null, contentEditable: booleanish, controls: boolean, controlsList: spaceSeparated, coords: number | commaSeparated, crossOrigin: null, data: null, dateTime: null, decoding: null, default: boolean, defer: boolean, dir: null, dirName: null, disabled: boolean, download: overloadedBoolean, draggable: booleanish, encType: null, enterKeyHint: null, fetchPriority: null, form: null, formAction: null, formEncType: null, formMethod: null, formNoValidate: boolean, formTarget: null, headers: spaceSeparated, height: number, hidden: boolean, high: number, href: null, hrefLang: null, htmlFor: spaceSeparated, httpEquiv: spaceSeparated, id: null, imageSizes: null, imageSrcSet: null, inert: boolean, inputMode: null, integrity: null, is: null, isMap: boolean, itemId: null, itemProp: spaceSeparated, itemRef: spaceSeparated, itemScope: boolean, itemType: spaceSeparated, kind: null, label: null, lang: null, language: null, list: null, loading: null, loop: boolean, low: number, manifest: null, max: null, maxLength: number, media: null, method: null, min: null, minLength: number, multiple: boolean, muted: boolean, name: null, nonce: null, noModule: boolean, noValidate: boolean, onAbort: null, onAfterPrint: null, onAuxClick: null, onBeforeMatch: null, onBeforePrint: null, onBeforeToggle: null, onBeforeUnload: null, onBlur: null, onCancel: null, onCanPlay: null, onCanPlayThrough: null, onChange: null, onClick: null, onClose: null, onContextLost: null, onContextMenu: null, onContextRestored: null, onCopy: null, onCueChange: null, onCut: null, onDblClick: null, onDrag: null, onDragEnd: null, onDragEnter: null, onDragExit: null, onDragLeave: null, onDragOver: null, onDragStart: null, onDrop: null, onDurationChange: null, onEmptied: null, onEnded: null, onError: null, onFocus: null, onFormData: null, onHashChange: null, onInput: null, onInvalid: null, onKeyDown: null, onKeyPress: null, onKeyUp: null, onLanguageChange: null, onLoad: null, onLoadedData: null, onLoadedMetadata: null, onLoadEnd: null, onLoadStart: null, onMessage: null, onMessageError: null, onMouseDown: null, onMouseEnter: null, onMouseLeave: null, onMouseMove: null, onMouseOut: null, onMouseOver: null, onMouseUp: null, onOffline: null, onOnline: null, onPageHide: null, onPageShow: null, onPaste: null, onPause: null, onPlay: null, onPlaying: null, onPopState: null, onProgress: null, onRateChange: null, onRejectionHandled: null, onReset: null, onResize: null, onScroll: null, onScrollEnd: null, onSecurityPolicyViolation: null, onSeeked: null, onSeeking: null, onSelect: null, onSlotChange: null, onStalled: null, onStorage: null, onSubmit: null, onSuspend: null, onTimeUpdate: null, onToggle: null, onUnhandledRejection: null, onUnload: null, onVolumeChange: null, onWaiting: null, onWheel: null, open: boolean, optimum: number, pattern: null, ping: spaceSeparated, placeholder: null, playsInline: boolean, popover: null, popoverTarget: null, popoverTargetAction: null, poster: null, preload: null, readOnly: boolean, referrerPolicy: null, rel: spaceSeparated, required: boolean, reversed: boolean, rows: number, rowSpan: number, sandbox: spaceSeparated, scope: null, scoped: boolean, seamless: boolean, selected: boolean, shadowRootDelegatesFocus: boolean, shadowRootMode: null, shape: null, size: number, sizes: null, slot: null, span: number, spellCheck: booleanish, src: null, srcDoc: null, srcLang: null, srcSet: null, start: number, step: null, style: null, tabIndex: number, target: null, title: null, translate: null, type: null, typeMustMatch: boolean, useMap: null, value: booleanish, width: number, wrap: null, // Legacy. // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis align: null, // Several. Use CSS `text-align` instead, aLink: null, // ``. Use CSS `a:active {color}` instead archive: spaceSeparated, // ``. List of URIs to archives axis: null, // `` and ``. Use `scope` on `` background: null, // ``. Use CSS `background-image` instead bgColor: null, // `` and table elements. Use CSS `background-color` instead border: number, // ``. Use CSS `border-width` instead, borderColor: null, // `
`. Use CSS `border-color` instead, bottomMargin: number, // `` cellPadding: null, // `
` cellSpacing: null, // `
` char: null, // Several table elements. When `align=char`, sets the character to align on charOff: null, // Several table elements. When `char`, offsets the alignment classId: null, // `` clear: null, // `
`. Use CSS `clear` instead code: null, // `` codeBase: null, // `` codeType: null, // `` color: null, // `` and `
`. Use CSS instead compact: boolean, // Lists. Use CSS to reduce space between items instead declare: boolean, // `` event: null, // `