/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ 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 __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key2 of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key2) && key2 !== except) __defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __toBinary = /* @__PURE__ */ (() => { var table = new Uint8Array(128); for (var i4 = 0; i4 < 64; i4++) table[i4 < 26 ? i4 + 65 : i4 < 52 ? i4 + 71 : i4 < 62 ? i4 - 4 : i4 * 4 - 205] = i4; return (base64) => { var n2 = base64.length, bytes = new Uint8Array((n2 - (base64[n2 - 1] == "=") - (base64[n2 - 2] == "=")) * 3 / 4 | 0); for (var i5 = 0, j4 = 0; i5 < n2; ) { var c0 = table[base64.charCodeAt(i5++)], c1 = table[base64.charCodeAt(i5++)]; var c22 = table[base64.charCodeAt(i5++)], c32 = table[base64.charCodeAt(i5++)]; bytes[j4++] = c0 << 2 | c1 >> 4; bytes[j4++] = c1 << 4 | c22 >> 2; bytes[j4++] = c22 << 6 | c32; } return bytes; }; })(); // node_modules/tslib/tslib.js var require_tslib = __commonJS({ "node_modules/tslib/tslib.js"(exports, module2) { var __extends2; var __assign3; var __rest3; var __decorate2; var __param2; var __metadata2; var __awaiter2; var __generator2; var __exportStar2; var __values2; var __read2; var __spread2; var __spreadArrays2; var __spreadArray3; var __await2; var __asyncGenerator2; var __asyncDelegator2; var __asyncValues2; var __makeTemplateObject2; var __importStar2; var __importDefault2; var __classPrivateFieldGet2; var __classPrivateFieldSet2; var __classPrivateFieldIn2; var __createBinding2; (function(factory) { var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; if (typeof define === "function" && define.amd) { define("tslib", ["exports"], function(exports2) { factory(createExporter(root, createExporter(exports2))); }); } else if (typeof module2 === "object" && typeof module2.exports === "object") { factory(createExporter(root, createExporter(module2.exports))); } else { factory(createExporter(root)); } function createExporter(exports2, previous) { if (exports2 !== root) { if (typeof Object.create === "function") { Object.defineProperty(exports2, "__esModule", { value: true }); } else { exports2.__esModule = true; } } return function(id2, v3) { return exports2[id2] = previous ? previous(id2, v3) : v3; }; } })(function(exporter) { var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d5, b4) { d5.__proto__ = b4; } || function(d5, b4) { for (var p3 in b4) if (Object.prototype.hasOwnProperty.call(b4, p3)) d5[p3] = b4[p3]; }; __extends2 = function(d5, b4) { if (typeof b4 !== "function" && b4 !== null) throw new TypeError("Class extends value " + String(b4) + " is not a constructor or null"); extendStatics(d5, b4); function __() { this.constructor = d5; } d5.prototype = b4 === null ? Object.create(b4) : (__.prototype = b4.prototype, new __()); }; __assign3 = Object.assign || function(t4) { for (var s5, i4 = 1, n2 = arguments.length; i4 < n2; i4++) { s5 = arguments[i4]; for (var p3 in s5) if (Object.prototype.hasOwnProperty.call(s5, p3)) t4[p3] = s5[p3]; } return t4; }; __rest3 = function(s5, e4) { var t4 = {}; for (var p3 in s5) if (Object.prototype.hasOwnProperty.call(s5, p3) && e4.indexOf(p3) < 0) t4[p3] = s5[p3]; if (s5 != null && typeof Object.getOwnPropertySymbols === "function") for (var i4 = 0, p3 = Object.getOwnPropertySymbols(s5); i4 < p3.length; i4++) { if (e4.indexOf(p3[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s5, p3[i4])) t4[p3[i4]] = s5[p3[i4]]; } return t4; }; __decorate2 = function(decorators, target, key2, desc) { var c4 = arguments.length, r3 = c4 < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key2) : desc, d5; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r3 = Reflect.decorate(decorators, target, key2, desc); else for (var i4 = decorators.length - 1; i4 >= 0; i4--) if (d5 = decorators[i4]) r3 = (c4 < 3 ? d5(r3) : c4 > 3 ? d5(target, key2, r3) : d5(target, key2)) || r3; return c4 > 3 && r3 && Object.defineProperty(target, key2, r3), r3; }; __param2 = function(paramIndex, decorator) { return function(target, key2) { decorator(target, key2, paramIndex); }; }; __metadata2 = function(metadataKey, metadataValue) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); }; __awaiter2 = function(thisArg, _arguments, P4, generator) { function adopt(value) { return value instanceof P4 ? value : new P4(function(resolve) { resolve(value); }); } return new (P4 || (P4 = Promise))(function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e4) { reject(e4); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e4) { reject(e4); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; __generator2 = function(thisArg, body) { var _5 = { label: 0, sent: function() { if (t4[0] & 1) throw t4[1]; return t4[1]; }, trys: [], ops: [] }, f4, y5, t4, g4; return g4 = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g4[Symbol.iterator] = function() { return this; }), g4; function verb(n2) { return function(v3) { return step([n2, v3]); }; } function step(op) { if (f4) throw new TypeError("Generator is already executing."); while (g4 && (g4 = 0, op[0] && (_5 = 0)), _5) try { if (f4 = 1, y5 && (t4 = op[0] & 2 ? y5["return"] : op[0] ? y5["throw"] || ((t4 = y5["return"]) && t4.call(y5), 0) : y5.next) && !(t4 = t4.call(y5, op[1])).done) return t4; if (y5 = 0, t4) op = [op[0] & 2, t4.value]; switch (op[0]) { case 0: case 1: t4 = op; break; case 4: _5.label++; return { value: op[1], done: false }; case 5: _5.label++; y5 = op[1]; op = [0]; continue; case 7: op = _5.ops.pop(); _5.trys.pop(); continue; default: if (!(t4 = _5.trys, t4 = t4.length > 0 && t4[t4.length - 1]) && (op[0] === 6 || op[0] === 2)) { _5 = 0; continue; } if (op[0] === 3 && (!t4 || op[1] > t4[0] && op[1] < t4[3])) { _5.label = op[1]; break; } if (op[0] === 6 && _5.label < t4[1]) { _5.label = t4[1]; t4 = op; break; } if (t4 && _5.label < t4[2]) { _5.label = t4[2]; _5.ops.push(op); break; } if (t4[2]) _5.ops.pop(); _5.trys.pop(); continue; } op = body.call(thisArg, _5); } catch (e4) { op = [6, e4]; y5 = 0; } finally { f4 = t4 = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; __exportStar2 = function(m5, o3) { for (var p3 in m5) if (p3 !== "default" && !Object.prototype.hasOwnProperty.call(o3, p3)) __createBinding2(o3, m5, p3); }; __createBinding2 = Object.create ? function(o3, m5, k5, k22) { if (k22 === void 0) k22 = k5; var desc = Object.getOwnPropertyDescriptor(m5, k5); if (!desc || ("get" in desc ? !m5.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m5[k5]; } }; } Object.defineProperty(o3, k22, desc); } : function(o3, m5, k5, k22) { if (k22 === void 0) k22 = k5; o3[k22] = m5[k5]; }; __values2 = function(o3) { var s5 = typeof Symbol === "function" && Symbol.iterator, m5 = s5 && o3[s5], i4 = 0; if (m5) return m5.call(o3); if (o3 && typeof o3.length === "number") return { next: function() { if (o3 && i4 >= o3.length) o3 = void 0; return { value: o3 && o3[i4++], done: !o3 }; } }; throw new TypeError(s5 ? "Object is not iterable." : "Symbol.iterator is not defined."); }; __read2 = function(o3, n2) { var m5 = typeof Symbol === "function" && o3[Symbol.iterator]; if (!m5) return o3; var i4 = m5.call(o3), r3, ar = [], e4; try { while ((n2 === void 0 || n2-- > 0) && !(r3 = i4.next()).done) ar.push(r3.value); } catch (error) { e4 = { error }; } finally { try { if (r3 && !r3.done && (m5 = i4["return"])) m5.call(i4); } finally { if (e4) throw e4.error; } } return ar; }; __spread2 = function() { for (var ar = [], i4 = 0; i4 < arguments.length; i4++) ar = ar.concat(__read2(arguments[i4])); return ar; }; __spreadArrays2 = function() { for (var s5 = 0, i4 = 0, il = arguments.length; i4 < il; i4++) s5 += arguments[i4].length; for (var r3 = Array(s5), k5 = 0, i4 = 0; i4 < il; i4++) for (var a5 = arguments[i4], j4 = 0, jl = a5.length; j4 < jl; j4++, k5++) r3[k5] = a5[j4]; return r3; }; __spreadArray3 = function(to, from, pack) { if (pack || arguments.length === 2) for (var i4 = 0, l3 = from.length, ar; i4 < l3; i4++) { if (ar || !(i4 in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i4); ar[i4] = from[i4]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; __await2 = function(v3) { return this instanceof __await2 ? (this.v = v3, this) : new __await2(v3); }; __asyncGenerator2 = function(thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var g4 = generator.apply(thisArg, _arguments || []), i4, q5 = []; return i4 = {}, verb("next"), verb("throw"), verb("return"), i4[Symbol.asyncIterator] = function() { return this; }, i4; function verb(n2) { if (g4[n2]) i4[n2] = function(v3) { return new Promise(function(a5, b4) { q5.push([n2, v3, a5, b4]) > 1 || resume(n2, v3); }); }; } function resume(n2, v3) { try { step(g4[n2](v3)); } catch (e4) { settle(q5[0][3], e4); } } function step(r3) { r3.value instanceof __await2 ? Promise.resolve(r3.value.v).then(fulfill, reject) : settle(q5[0][2], r3); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f4, v3) { if (f4(v3), q5.shift(), q5.length) resume(q5[0][0], q5[0][1]); } }; __asyncDelegator2 = function(o3) { var i4, p3; return i4 = {}, verb("next"), verb("throw", function(e4) { throw e4; }), verb("return"), i4[Symbol.iterator] = function() { return this; }, i4; function verb(n2, f4) { i4[n2] = o3[n2] ? function(v3) { return (p3 = !p3) ? { value: __await2(o3[n2](v3)), done: n2 === "return" } : f4 ? f4(v3) : v3; } : f4; } }; __asyncValues2 = function(o3) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m5 = o3[Symbol.asyncIterator], i4; return m5 ? m5.call(o3) : (o3 = typeof __values2 === "function" ? __values2(o3) : o3[Symbol.iterator](), i4 = {}, verb("next"), verb("throw"), verb("return"), i4[Symbol.asyncIterator] = function() { return this; }, i4); function verb(n2) { i4[n2] = o3[n2] && function(v3) { return new Promise(function(resolve, reject) { v3 = o3[n2](v3), settle(resolve, reject, v3.done, v3.value); }); }; } function settle(resolve, reject, d5, v3) { Promise.resolve(v3).then(function(v4) { resolve({ value: v4, done: d5 }); }, reject); } }; __makeTemplateObject2 = function(cooked, raw) { if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } return cooked; }; var __setModuleDefault = Object.create ? function(o3, v3) { Object.defineProperty(o3, "default", { enumerable: true, value: v3 }); } : function(o3, v3) { o3["default"] = v3; }; __importStar2 = function(mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) { for (var k5 in mod) if (k5 !== "default" && Object.prototype.hasOwnProperty.call(mod, k5)) __createBinding2(result, mod, k5); } __setModuleDefault(result, mod); return result; }; __importDefault2 = function(mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; __classPrivateFieldGet2 = function(receiver, state, kind, f4) { if (kind === "a" && !f4) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f4 : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f4 : kind === "a" ? f4.call(receiver) : f4 ? f4.value : state.get(receiver); }; __classPrivateFieldSet2 = function(receiver, state, value, kind, f4) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f4) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f4 : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return kind === "a" ? f4.call(receiver, value) : f4 ? f4.value = value : state.set(receiver, value), value; }; __classPrivateFieldIn2 = function(state, receiver) { if (receiver === null || typeof receiver !== "object" && typeof receiver !== "function") throw new TypeError("Cannot use 'in' operator on non-object"); return typeof state === "function" ? receiver === state : state.has(receiver); }; exporter("__extends", __extends2); exporter("__assign", __assign3); exporter("__rest", __rest3); exporter("__decorate", __decorate2); exporter("__param", __param2); exporter("__metadata", __metadata2); exporter("__awaiter", __awaiter2); exporter("__generator", __generator2); exporter("__exportStar", __exportStar2); exporter("__createBinding", __createBinding2); exporter("__values", __values2); exporter("__read", __read2); exporter("__spread", __spread2); exporter("__spreadArrays", __spreadArrays2); exporter("__spreadArray", __spreadArray3); exporter("__await", __await2); exporter("__asyncGenerator", __asyncGenerator2); exporter("__asyncDelegator", __asyncDelegator2); exporter("__asyncValues", __asyncValues2); exporter("__makeTemplateObject", __makeTemplateObject2); exporter("__importStar", __importStar2); exporter("__importDefault", __importDefault2); exporter("__classPrivateFieldGet", __classPrivateFieldGet2); exporter("__classPrivateFieldSet", __classPrivateFieldSet2); exporter("__classPrivateFieldIn", __classPrivateFieldIn2); }); } }); // node_modules/classnames/index.js var require_classnames = __commonJS({ "node_modules/classnames/index.js"(exports, module2) { (function() { "use strict"; var hasOwn = {}.hasOwnProperty; var nativeCodeString = "[native code]"; function classNames8() { var classes = []; for (var i4 = 0; i4 < arguments.length; i4++) { var arg = arguments[i4]; if (!arg) continue; var argType = typeof arg; if (argType === "string" || argType === "number") { classes.push(arg); } else if (Array.isArray(arg)) { if (arg.length) { var inner = classNames8.apply(null, arg); if (inner) { classes.push(inner); } } } else if (argType === "object") { if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) { classes.push(arg.toString()); continue; } for (var key2 in arg) { if (hasOwn.call(arg, key2) && arg[key2]) { classes.push(key2); } } } } return classes.join(" "); } if (typeof module2 !== "undefined" && module2.exports) { classNames8.default = classNames8; module2.exports = classNames8; } else if (typeof define === "function" && typeof define.amd === "object" && define.amd) { define("classnames", [], function() { return classNames8; }); } else { window.classNames = classNames8; } })(); } }); // node_modules/lodash/lodash.js var require_lodash = __commonJS({ "node_modules/lodash/lodash.js"(exports, module2) { (function() { var undefined2; var VERSION = "4.17.21"; var LARGE_ARRAY_SIZE = 200; var CORE_ERROR_TEXT = "Unsupported core-js use. Try https://npms.io/search?q=ponyfill.", FUNC_ERROR_TEXT = "Expected a function", INVALID_TEMPL_VAR_ERROR_TEXT = "Invalid `variable` option passed into `_.template`"; var HASH_UNDEFINED = "__lodash_hash_undefined__"; var MAX_MEMOIZE_SIZE = 500; var PLACEHOLDER = "__lodash_placeholder__"; var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4; var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; var WRAP_BIND_FLAG = 1, WRAP_BIND_KEY_FLAG = 2, WRAP_CURRY_BOUND_FLAG = 4, WRAP_CURRY_FLAG = 8, WRAP_CURRY_RIGHT_FLAG = 16, WRAP_PARTIAL_FLAG = 32, WRAP_PARTIAL_RIGHT_FLAG = 64, WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256, WRAP_FLIP_FLAG = 512; var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = "..."; var HOT_COUNT = 800, HOT_SPAN = 16; var LAZY_FILTER_FLAG = 1, LAZY_MAP_FLAG = 2, LAZY_WHILE_FLAG = 3; var INFINITY = 1 / 0, MAX_SAFE_INTEGER = 9007199254740991, MAX_INTEGER = 17976931348623157e292, NAN = 0 / 0; var MAX_ARRAY_LENGTH = 4294967295, MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; var wrapFlags = [ ["ary", WRAP_ARY_FLAG], ["bind", WRAP_BIND_FLAG], ["bindKey", WRAP_BIND_KEY_FLAG], ["curry", WRAP_CURRY_FLAG], ["curryRight", WRAP_CURRY_RIGHT_FLAG], ["flip", WRAP_FLIP_FLAG], ["partial", WRAP_PARTIAL_FLAG], ["partialRight", WRAP_PARTIAL_RIGHT_FLAG], ["rearg", WRAP_REARG_FLAG] ]; var argsTag = "[object Arguments]", arrayTag = "[object Array]", asyncTag = "[object AsyncFunction]", boolTag = "[object Boolean]", dateTag = "[object Date]", domExcTag = "[object DOMException]", errorTag = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag = "[object Map]", numberTag = "[object Number]", nullTag = "[object Null]", objectTag = "[object Object]", promiseTag = "[object Promise]", proxyTag = "[object Proxy]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]", undefinedTag = "[object Undefined]", weakMapTag = "[object WeakMap]", weakSetTag = "[object WeakSet]"; var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]"; var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, reUnescapedHtml = /[&<>"']/g, reHasEscapedHtml = RegExp(reEscapedHtml.source), reHasUnescapedHtml = RegExp(reUnescapedHtml.source); var reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, reInterpolate = /<%=([\s\S]+?)%>/g; var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, reHasRegExpChar = RegExp(reRegExpChar.source); var reTrimStart = /^\s+/; var reWhitespace = /\s/; var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, reSplitDetails = /,? & /; var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; var reEscapeChar = /\\(\\)?/g; var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; var reFlags = /\w*$/; var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; var reIsBinary = /^0b[01]+$/i; var reIsHostCtor = /^\[object .+?Constructor\]$/; var reIsOctal = /^0o[0-7]+$/i; var reIsUint = /^(?:0|[1-9]\d*)$/; var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; var reNoMatch = /($^)/; var reUnescapedString = /['\n\r\u2028\u2029\\]/g; var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsDingbatRange = "\\u2700-\\u27bf", rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff", rsMathOpRange = "\\xac\\xb1\\xd7\\xf7", rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf", rsPunctuationRange = "\\u2000-\\u206f", rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde", rsVarRange = "\\ufe0e\\ufe0f", rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; var rsApos = "['\u2019]", rsAstral = "[" + rsAstralRange + "]", rsBreak = "[" + rsBreakRange + "]", rsCombo = "[" + rsComboRange + "]", rsDigits = "\\d+", rsDingbat = "[" + rsDingbatRange + "]", rsLower = "[" + rsLowerRange + "]", rsMisc = "[^" + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsUpper = "[" + rsUpperRange + "]", rsZWJ = "\\u200d"; var rsMiscLower = "(?:" + rsLower + "|" + rsMisc + ")", rsMiscUpper = "(?:" + rsUpper + "|" + rsMisc + ")", rsOptContrLower = "(?:" + rsApos + "(?:d|ll|m|re|s|t|ve))?", rsOptContrUpper = "(?:" + rsApos + "(?:D|LL|M|RE|S|T|VE))?", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsOrdLower = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", rsOrdUpper = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = "(?:" + [rsDingbat, rsRegional, rsSurrPair].join("|") + ")" + rsSeq, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")"; var reApos = RegExp(rsApos, "g"); var reComboMark = RegExp(rsCombo, "g"); var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g"); var reUnicodeWord = RegExp([ rsUpper + "?" + rsLower + "+" + rsOptContrLower + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")", rsMiscUpper + "+" + rsOptContrUpper + "(?=" + [rsBreak, rsUpper + rsMiscLower, "$"].join("|") + ")", rsUpper + "?" + rsMiscLower + "+" + rsOptContrLower, rsUpper + "+" + rsOptContrUpper, rsOrdUpper, rsOrdLower, rsDigits, rsEmoji ].join("|"), "g"); var reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + "]"); var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; var contextProps = [ "Array", "Buffer", "DataView", "Date", "Error", "Float32Array", "Float64Array", "Function", "Int8Array", "Int16Array", "Int32Array", "Map", "Math", "Object", "Promise", "RegExp", "Set", "String", "Symbol", "TypeError", "Uint8Array", "Uint8ClampedArray", "Uint16Array", "Uint32Array", "WeakMap", "_", "clearTimeout", "isFinite", "parseInt", "setTimeout" ]; var templateCounter = -1; var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; var cloneableTags = {}; cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false; var deburredLetters = { "\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", "\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": "s" }; var htmlEscapes = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }; var htmlUnescapes = { "&": "&", "<": "<", ">": ">", """: '"', "'": "'" }; var stringEscapes = { "\\": "\\", "'": "'", "\n": "n", "\r": "r", "\u2028": "u2028", "\u2029": "u2029" }; var freeParseFloat = parseFloat, freeParseInt = parseInt; var freeGlobal = typeof global == "object" && global && global.Object === Object && global; var freeSelf = typeof self == "object" && self && self.Object === Object && self; var root = freeGlobal || freeSelf || Function("return this")(); var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; var freeModule = freeExports && typeof module2 == "object" && module2 && !module2.nodeType && module2; var moduleExports = freeModule && freeModule.exports === freeExports; var freeProcess = moduleExports && freeGlobal.process; var nodeUtil = function() { try { var types = freeModule && freeModule.require && freeModule.require("util").types; if (types) { return types; } return freeProcess && freeProcess.binding && freeProcess.binding("util"); } catch (e4) { } }(); var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, nodeIsDate = nodeUtil && nodeUtil.isDate, nodeIsMap = nodeUtil && nodeUtil.isMap, nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, nodeIsSet = nodeUtil && nodeUtil.isSet, nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; function apply(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } function arrayAggregator(array, setter, iteratee, accumulator) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { var value = array[index]; setter(accumulator, value, iteratee(value), array); } return accumulator; } function arrayEach(array, iteratee) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (iteratee(array[index], index, array) === false) { break; } } return array; } function arrayEachRight(array, iteratee) { var length = array == null ? 0 : array.length; while (length--) { if (iteratee(array[length], length, array) === false) { break; } } return array; } function arrayEvery(array, predicate) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (!predicate(array[index], index, array)) { return false; } } return true; } function arrayFilter(array, predicate) { var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { result[resIndex++] = value; } } return result; } function arrayIncludes(array, value) { var length = array == null ? 0 : array.length; return !!length && baseIndexOf(array, value, 0) > -1; } function arrayIncludesWith(array, value, comparator) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (comparator(value, array[index])) { return true; } } return false; } function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } function arrayPush(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } function arrayReduce(array, iteratee, accumulator, initAccum) { var index = -1, length = array == null ? 0 : array.length; if (initAccum && length) { accumulator = array[++index]; } while (++index < length) { accumulator = iteratee(accumulator, array[index], index, array); } return accumulator; } function arrayReduceRight(array, iteratee, accumulator, initAccum) { var length = array == null ? 0 : array.length; if (initAccum && length) { accumulator = array[--length]; } while (length--) { accumulator = iteratee(accumulator, array[length], length, array); } return accumulator; } function arraySome(array, predicate) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (predicate(array[index], index, array)) { return true; } } return false; } var asciiSize = baseProperty("length"); function asciiToArray(string) { return string.split(""); } function asciiWords(string) { return string.match(reAsciiWord) || []; } function baseFindKey(collection, predicate, eachFunc) { var result; eachFunc(collection, function(value, key2, collection2) { if (predicate(value, key2, collection2)) { result = key2; return false; } }); return result; } function baseFindIndex(array, predicate, fromIndex, fromRight) { var length = array.length, index = fromIndex + (fromRight ? 1 : -1); while (fromRight ? index-- : ++index < length) { if (predicate(array[index], index, array)) { return index; } } return -1; } function baseIndexOf(array, value, fromIndex) { return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); } function baseIndexOfWith(array, value, fromIndex, comparator) { var index = fromIndex - 1, length = array.length; while (++index < length) { if (comparator(array[index], value)) { return index; } } return -1; } function baseIsNaN(value) { return value !== value; } function baseMean(array, iteratee) { var length = array == null ? 0 : array.length; return length ? baseSum(array, iteratee) / length : NAN; } function baseProperty(key2) { return function(object) { return object == null ? undefined2 : object[key2]; }; } function basePropertyOf(object) { return function(key2) { return object == null ? undefined2 : object[key2]; }; } function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { eachFunc(collection, function(value, index, collection2) { accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection2); }); return accumulator; } function baseSortBy(array, comparer) { var length = array.length; array.sort(comparer); while (length--) { array[length] = array[length].value; } return array; } function baseSum(array, iteratee) { var result, index = -1, length = array.length; while (++index < length) { var current = iteratee(array[index]); if (current !== undefined2) { result = result === undefined2 ? current : result + current; } } return result; } function baseTimes(n2, iteratee) { var index = -1, result = Array(n2); while (++index < n2) { result[index] = iteratee(index); } return result; } function baseToPairs(object, props2) { return arrayMap(props2, function(key2) { return [key2, object[key2]]; }); } function baseTrim(string) { return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string; } function baseUnary(func) { return function(value) { return func(value); }; } function baseValues(object, props2) { return arrayMap(props2, function(key2) { return object[key2]; }); } function cacheHas(cache, key2) { return cache.has(key2); } function charsStartIndex(strSymbols, chrSymbols) { var index = -1, length = strSymbols.length; while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) { } return index; } function charsEndIndex(strSymbols, chrSymbols) { var index = strSymbols.length; while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) { } return index; } function countHolders(array, placeholder2) { var length = array.length, result = 0; while (length--) { if (array[length] === placeholder2) { ++result; } } return result; } var deburrLetter = basePropertyOf(deburredLetters); var escapeHtmlChar = basePropertyOf(htmlEscapes); function escapeStringChar(chr) { return "\\" + stringEscapes[chr]; } function getValue(object, key2) { return object == null ? undefined2 : object[key2]; } function hasUnicode(string) { return reHasUnicode.test(string); } function hasUnicodeWord(string) { return reHasUnicodeWord.test(string); } function iteratorToArray(iterator) { var data, result = []; while (!(data = iterator.next()).done) { result.push(data.value); } return result; } function mapToArray(map) { var index = -1, result = Array(map.size); map.forEach(function(value, key2) { result[++index] = [key2, value]; }); return result; } function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } function replaceHolders(array, placeholder2) { var index = -1, length = array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index]; if (value === placeholder2 || value === PLACEHOLDER) { array[index] = PLACEHOLDER; result[resIndex++] = index; } } return result; } function setToArray(set) { var index = -1, result = Array(set.size); set.forEach(function(value) { result[++index] = value; }); return result; } function setToPairs(set) { var index = -1, result = Array(set.size); set.forEach(function(value) { result[++index] = [value, value]; }); return result; } function strictIndexOf(array, value, fromIndex) { var index = fromIndex - 1, length = array.length; while (++index < length) { if (array[index] === value) { return index; } } return -1; } function strictLastIndexOf(array, value, fromIndex) { var index = fromIndex + 1; while (index--) { if (array[index] === value) { return index; } } return index; } function stringSize(string) { return hasUnicode(string) ? unicodeSize(string) : asciiSize(string); } function stringToArray(string) { return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string); } function trimmedEndIndex(string) { var index = string.length; while (index-- && reWhitespace.test(string.charAt(index))) { } return index; } var unescapeHtmlChar = basePropertyOf(htmlUnescapes); function unicodeSize(string) { var result = reUnicode.lastIndex = 0; while (reUnicode.test(string)) { ++result; } return result; } function unicodeToArray(string) { return string.match(reUnicode) || []; } function unicodeWords(string) { return string.match(reUnicodeWord) || []; } var runInContext = function runInContext2(context) { context = context == null ? root : _5.defaults(root.Object(), context, _5.pick(root, contextProps)); var Array2 = context.Array, Date2 = context.Date, Error2 = context.Error, Function2 = context.Function, Math2 = context.Math, Object2 = context.Object, RegExp2 = context.RegExp, String2 = context.String, TypeError2 = context.TypeError; var arrayProto = Array2.prototype, funcProto = Function2.prototype, objectProto = Object2.prototype; var coreJsData = context["__core-js_shared__"]; var funcToString = funcProto.toString; var hasOwnProperty = objectProto.hasOwnProperty; var idCounter = 0; var maskSrcKey = function() { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ""); return uid ? "Symbol(src)_1." + uid : ""; }(); var nativeObjectToString = objectProto.toString; var objectCtorString = funcToString.call(Object2); var oldDash = root._; var reIsNative = RegExp2( "^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" ); var Buffer2 = moduleExports ? context.Buffer : undefined2, Symbol2 = context.Symbol, Uint8Array2 = context.Uint8Array, allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : undefined2, getPrototype = overArg(Object2.getPrototypeOf, Object2), objectCreate = Object2.create, propertyIsEnumerable = objectProto.propertyIsEnumerable, splice = arrayProto.splice, spreadableSymbol = Symbol2 ? Symbol2.isConcatSpreadable : undefined2, symIterator = Symbol2 ? Symbol2.iterator : undefined2, symToStringTag = Symbol2 ? Symbol2.toStringTag : undefined2; var defineProperty = function() { try { var func = getNative(Object2, "defineProperty"); func({}, "", {}); return func; } catch (e4) { } }(); var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, ctxNow = Date2 && Date2.now !== root.Date.now && Date2.now, ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; var nativeCeil = Math2.ceil, nativeFloor = Math2.floor, nativeGetSymbols = Object2.getOwnPropertySymbols, nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : undefined2, nativeIsFinite = context.isFinite, nativeJoin = arrayProto.join, nativeKeys = overArg(Object2.keys, Object2), nativeMax = Math2.max, nativeMin = Math2.min, nativeNow = Date2.now, nativeParseInt = context.parseInt, nativeRandom = Math2.random, nativeReverse = arrayProto.reverse; var DataView = getNative(context, "DataView"), Map2 = getNative(context, "Map"), Promise2 = getNative(context, "Promise"), Set2 = getNative(context, "Set"), WeakMap2 = getNative(context, "WeakMap"), nativeCreate = getNative(Object2, "create"); var metaMap = WeakMap2 && new WeakMap2(); var realNames = {}; var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map2), promiseCtorString = toSource(Promise2), setCtorString = toSource(Set2), weakMapCtorString = toSource(WeakMap2); var symbolProto = Symbol2 ? Symbol2.prototype : undefined2, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined2, symbolToString = symbolProto ? symbolProto.toString : undefined2; function lodash(value) { if (isObjectLike(value) && !isArray2(value) && !(value instanceof LazyWrapper)) { if (value instanceof LodashWrapper) { return value; } if (hasOwnProperty.call(value, "__wrapped__")) { return wrapperClone(value); } } return new LodashWrapper(value); } var baseCreate = function() { function object() { } return function(proto) { if (!isObject(proto)) { return {}; } if (objectCreate) { return objectCreate(proto); } object.prototype = proto; var result2 = new object(); object.prototype = undefined2; return result2; }; }(); function baseLodash() { } function LodashWrapper(value, chainAll) { this.__wrapped__ = value; this.__actions__ = []; this.__chain__ = !!chainAll; this.__index__ = 0; this.__values__ = undefined2; } lodash.templateSettings = { "escape": reEscape, "evaluate": reEvaluate, "interpolate": reInterpolate, "variable": "", "imports": { "_": lodash } }; lodash.prototype = baseLodash.prototype; lodash.prototype.constructor = lodash; LodashWrapper.prototype = baseCreate(baseLodash.prototype); LodashWrapper.prototype.constructor = LodashWrapper; function LazyWrapper(value) { this.__wrapped__ = value; this.__actions__ = []; this.__dir__ = 1; this.__filtered__ = false; this.__iteratees__ = []; this.__takeCount__ = MAX_ARRAY_LENGTH; this.__views__ = []; } function lazyClone() { var result2 = new LazyWrapper(this.__wrapped__); result2.__actions__ = copyArray(this.__actions__); result2.__dir__ = this.__dir__; result2.__filtered__ = this.__filtered__; result2.__iteratees__ = copyArray(this.__iteratees__); result2.__takeCount__ = this.__takeCount__; result2.__views__ = copyArray(this.__views__); return result2; } function lazyReverse() { if (this.__filtered__) { var result2 = new LazyWrapper(this); result2.__dir__ = -1; result2.__filtered__ = true; } else { result2 = this.clone(); result2.__dir__ *= -1; } return result2; } function lazyValue() { var array = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray2(array), isRight = dir < 0, arrLength = isArr ? array.length : 0, view = getView(0, arrLength, this.__views__), start = view.start, end = view.end, length = end - start, index = isRight ? end : start - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin(length, this.__takeCount__); if (!isArr || !isRight && arrLength == length && takeCount == length) { return baseWrapperValue(array, this.__actions__); } var result2 = []; outer: while (length-- && resIndex < takeCount) { index += dir; var iterIndex = -1, value = array[index]; while (++iterIndex < iterLength) { var data = iteratees[iterIndex], iteratee2 = data.iteratee, type = data.type, computed = iteratee2(value); if (type == LAZY_MAP_FLAG) { value = computed; } else if (!computed) { if (type == LAZY_FILTER_FLAG) { continue outer; } else { break outer; } } } result2[resIndex++] = value; } return result2; } LazyWrapper.prototype = baseCreate(baseLodash.prototype); LazyWrapper.prototype.constructor = LazyWrapper; function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; this.size = 0; } function hashDelete(key2) { var result2 = this.has(key2) && delete this.__data__[key2]; this.size -= result2 ? 1 : 0; return result2; } function hashGet(key2) { var data = this.__data__; if (nativeCreate) { var result2 = data[key2]; return result2 === HASH_UNDEFINED ? undefined2 : result2; } return hasOwnProperty.call(data, key2) ? data[key2] : undefined2; } function hashHas(key2) { var data = this.__data__; return nativeCreate ? data[key2] !== undefined2 : hasOwnProperty.call(data, key2); } function hashSet(key2, value) { var data = this.__data__; this.size += this.has(key2) ? 0 : 1; data[key2] = nativeCreate && value === undefined2 ? HASH_UNDEFINED : value; return this; } Hash.prototype.clear = hashClear; Hash.prototype["delete"] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } function listCacheClear() { this.__data__ = []; this.size = 0; } function listCacheDelete(key2) { var data = this.__data__, index = assocIndexOf(data, key2); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } function listCacheGet(key2) { var data = this.__data__, index = assocIndexOf(data, key2); return index < 0 ? undefined2 : data[index][1]; } function listCacheHas(key2) { return assocIndexOf(this.__data__, key2) > -1; } function listCacheSet(key2, value) { var data = this.__data__, index = assocIndexOf(data, key2); if (index < 0) { ++this.size; data.push([key2, value]); } else { data[index][1] = value; } return this; } ListCache.prototype.clear = listCacheClear; ListCache.prototype["delete"] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; function MapCache2(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } function mapCacheClear() { this.size = 0; this.__data__ = { "hash": new Hash(), "map": new (Map2 || ListCache)(), "string": new Hash() }; } function mapCacheDelete(key2) { var result2 = getMapData(this, key2)["delete"](key2); this.size -= result2 ? 1 : 0; return result2; } function mapCacheGet(key2) { return getMapData(this, key2).get(key2); } function mapCacheHas(key2) { return getMapData(this, key2).has(key2); } function mapCacheSet(key2, value) { var data = getMapData(this, key2), size2 = data.size; data.set(key2, value); this.size += data.size == size2 ? 0 : 1; return this; } MapCache2.prototype.clear = mapCacheClear; MapCache2.prototype["delete"] = mapCacheDelete; MapCache2.prototype.get = mapCacheGet; MapCache2.prototype.has = mapCacheHas; MapCache2.prototype.set = mapCacheSet; function SetCache(values2) { var index = -1, length = values2 == null ? 0 : values2.length; this.__data__ = new MapCache2(); while (++index < length) { this.add(values2[index]); } } function setCacheAdd(value) { this.__data__.set(value, HASH_UNDEFINED); return this; } function setCacheHas(value) { return this.__data__.has(value); } SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; SetCache.prototype.has = setCacheHas; function Stack(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } function stackClear() { this.__data__ = new ListCache(); this.size = 0; } function stackDelete(key2) { var data = this.__data__, result2 = data["delete"](key2); this.size = data.size; return result2; } function stackGet(key2) { return this.__data__.get(key2); } function stackHas(key2) { return this.__data__.has(key2); } function stackSet(key2, value) { var data = this.__data__; if (data instanceof ListCache) { var pairs = data.__data__; if (!Map2 || pairs.length < LARGE_ARRAY_SIZE - 1) { pairs.push([key2, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache2(pairs); } data.set(key2, value); this.size = data.size; return this; } Stack.prototype.clear = stackClear; Stack.prototype["delete"] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; function arrayLikeKeys(value, inherited) { var isArr = isArray2(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result2 = skipIndexes ? baseTimes(value.length, String2) : [], length = result2.length; for (var key2 in value) { if ((inherited || hasOwnProperty.call(value, key2)) && !(skipIndexes && (key2 == "length" || isBuff && (key2 == "offset" || key2 == "parent") || isType && (key2 == "buffer" || key2 == "byteLength" || key2 == "byteOffset") || isIndex(key2, length)))) { result2.push(key2); } } return result2; } function arraySample(array) { var length = array.length; return length ? array[baseRandom(0, length - 1)] : undefined2; } function arraySampleSize(array, n2) { return shuffleSelf(copyArray(array), baseClamp(n2, 0, array.length)); } function arrayShuffle(array) { return shuffleSelf(copyArray(array)); } function assignMergeValue(object, key2, value) { if (value !== undefined2 && !eq(object[key2], value) || value === undefined2 && !(key2 in object)) { baseAssignValue(object, key2, value); } } function assignValue(object, key2, value) { var objValue = object[key2]; if (!(hasOwnProperty.call(object, key2) && eq(objValue, value)) || value === undefined2 && !(key2 in object)) { baseAssignValue(object, key2, value); } } function assocIndexOf(array, key2) { var length = array.length; while (length--) { if (eq(array[length][0], key2)) { return length; } } return -1; } function baseAggregator(collection, setter, iteratee2, accumulator) { baseEach(collection, function(value, key2, collection2) { setter(accumulator, value, iteratee2(value), collection2); }); return accumulator; } function baseAssign(object, source) { return object && copyObject(source, keys(source), object); } function baseAssignIn(object, source) { return object && copyObject(source, keysIn(source), object); } function baseAssignValue(object, key2, value) { if (key2 == "__proto__" && defineProperty) { defineProperty(object, key2, { "configurable": true, "enumerable": true, "value": value, "writable": true }); } else { object[key2] = value; } } function baseAt(object, paths) { var index = -1, length = paths.length, result2 = Array2(length), skip = object == null; while (++index < length) { result2[index] = skip ? undefined2 : get(object, paths[index]); } return result2; } function baseClamp(number, lower, upper) { if (number === number) { if (upper !== undefined2) { number = number <= upper ? number : upper; } if (lower !== undefined2) { number = number >= lower ? number : lower; } } return number; } function baseClone(value, bitmask, customizer, key2, object, stack) { var result2, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG; if (customizer) { result2 = object ? customizer(value, key2, object, stack) : customizer(value); } if (result2 !== undefined2) { return result2; } if (!isObject(value)) { return value; } var isArr = isArray2(value); if (isArr) { result2 = initCloneArray(value); if (!isDeep) { return copyArray(value, result2); } } else { var tag = getTag(value), isFunc = tag == funcTag || tag == genTag; if (isBuffer(value)) { return cloneBuffer(value, isDeep); } if (tag == objectTag || tag == argsTag || isFunc && !object) { result2 = isFlat || isFunc ? {} : initCloneObject(value); if (!isDeep) { return isFlat ? copySymbolsIn(value, baseAssignIn(result2, value)) : copySymbols(value, baseAssign(result2, value)); } } else { if (!cloneableTags[tag]) { return object ? value : {}; } result2 = initCloneByTag(value, tag, isDeep); } } stack || (stack = new Stack()); var stacked = stack.get(value); if (stacked) { return stacked; } stack.set(value, result2); if (isSet(value)) { value.forEach(function(subValue) { result2.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); }); } else if (isMap(value)) { value.forEach(function(subValue, key3) { result2.set(key3, baseClone(subValue, bitmask, customizer, key3, value, stack)); }); } var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys; var props2 = isArr ? undefined2 : keysFunc(value); arrayEach(props2 || value, function(subValue, key3) { if (props2) { key3 = subValue; subValue = value[key3]; } assignValue(result2, key3, baseClone(subValue, bitmask, customizer, key3, value, stack)); }); return result2; } function baseConforms(source) { var props2 = keys(source); return function(object) { return baseConformsTo(object, source, props2); }; } function baseConformsTo(object, source, props2) { var length = props2.length; if (object == null) { return !length; } object = Object2(object); while (length--) { var key2 = props2[length], predicate = source[key2], value = object[key2]; if (value === undefined2 && !(key2 in object) || !predicate(value)) { return false; } } return true; } function baseDelay(func, wait, args) { if (typeof func != "function") { throw new TypeError2(FUNC_ERROR_TEXT); } return setTimeout2(function() { func.apply(undefined2, args); }, wait); } function baseDifference(array, values2, iteratee2, comparator) { var index = -1, includes2 = arrayIncludes, isCommon = true, length = array.length, result2 = [], valuesLength = values2.length; if (!length) { return result2; } if (iteratee2) { values2 = arrayMap(values2, baseUnary(iteratee2)); } if (comparator) { includes2 = arrayIncludesWith; isCommon = false; } else if (values2.length >= LARGE_ARRAY_SIZE) { includes2 = cacheHas; isCommon = false; values2 = new SetCache(values2); } outer: while (++index < length) { var value = array[index], computed = iteratee2 == null ? value : iteratee2(value); value = comparator || value !== 0 ? value : 0; if (isCommon && computed === computed) { var valuesIndex = valuesLength; while (valuesIndex--) { if (values2[valuesIndex] === computed) { continue outer; } } result2.push(value); } else if (!includes2(values2, computed, comparator)) { result2.push(value); } } return result2; } var baseEach = createBaseEach(baseForOwn); var baseEachRight = createBaseEach(baseForOwnRight, true); function baseEvery(collection, predicate) { var result2 = true; baseEach(collection, function(value, index, collection2) { result2 = !!predicate(value, index, collection2); return result2; }); return result2; } function baseExtremum(array, iteratee2, comparator) { var index = -1, length = array.length; while (++index < length) { var value = array[index], current = iteratee2(value); if (current != null && (computed === undefined2 ? current === current && !isSymbol(current) : comparator(current, computed))) { var computed = current, result2 = value; } } return result2; } function baseFill(array, value, start, end) { var length = array.length; start = toInteger2(start); if (start < 0) { start = -start > length ? 0 : length + start; } end = end === undefined2 || end > length ? length : toInteger2(end); if (end < 0) { end += length; } end = start > end ? 0 : toLength(end); while (start < end) { array[start++] = value; } return array; } function baseFilter(collection, predicate) { var result2 = []; baseEach(collection, function(value, index, collection2) { if (predicate(value, index, collection2)) { result2.push(value); } }); return result2; } function baseFlatten(array, depth, predicate, isStrict, result2) { var index = -1, length = array.length; predicate || (predicate = isFlattenable); result2 || (result2 = []); while (++index < length) { var value = array[index]; if (depth > 0 && predicate(value)) { if (depth > 1) { baseFlatten(value, depth - 1, predicate, isStrict, result2); } else { arrayPush(result2, value); } } else if (!isStrict) { result2[result2.length] = value; } } return result2; } var baseFor = createBaseFor(); var baseForRight = createBaseFor(true); function baseForOwn(object, iteratee2) { return object && baseFor(object, iteratee2, keys); } function baseForOwnRight(object, iteratee2) { return object && baseForRight(object, iteratee2, keys); } function baseFunctions(object, props2) { return arrayFilter(props2, function(key2) { return isFunction2(object[key2]); }); } function baseGet(object, path) { path = castPath(path, object); var index = 0, length = path.length; while (object != null && index < length) { object = object[toKey(path[index++])]; } return index && index == length ? object : undefined2; } function baseGetAllKeys(object, keysFunc, symbolsFunc) { var result2 = keysFunc(object); return isArray2(object) ? result2 : arrayPush(result2, symbolsFunc(object)); } function baseGetTag(value) { if (value == null) { return value === undefined2 ? undefinedTag : nullTag; } return symToStringTag && symToStringTag in Object2(value) ? getRawTag(value) : objectToString(value); } function baseGt(value, other) { return value > other; } function baseHas(object, key2) { return object != null && hasOwnProperty.call(object, key2); } function baseHasIn(object, key2) { return object != null && key2 in Object2(object); } function baseInRange(number, start, end) { return number >= nativeMin(start, end) && number < nativeMax(start, end); } function baseIntersection(arrays, iteratee2, comparator) { var includes2 = comparator ? arrayIncludesWith : arrayIncludes, length = arrays[0].length, othLength = arrays.length, othIndex = othLength, caches = Array2(othLength), maxLength = Infinity, result2 = []; while (othIndex--) { var array = arrays[othIndex]; if (othIndex && iteratee2) { array = arrayMap(array, baseUnary(iteratee2)); } maxLength = nativeMin(array.length, maxLength); caches[othIndex] = !comparator && (iteratee2 || length >= 120 && array.length >= 120) ? new SetCache(othIndex && array) : undefined2; } array = arrays[0]; var index = -1, seen = caches[0]; outer: while (++index < length && result2.length < maxLength) { var value = array[index], computed = iteratee2 ? iteratee2(value) : value; value = comparator || value !== 0 ? value : 0; if (!(seen ? cacheHas(seen, computed) : includes2(result2, computed, comparator))) { othIndex = othLength; while (--othIndex) { var cache = caches[othIndex]; if (!(cache ? cacheHas(cache, computed) : includes2(arrays[othIndex], computed, comparator))) { continue outer; } } if (seen) { seen.push(computed); } result2.push(value); } } return result2; } function baseInverter(object, setter, iteratee2, accumulator) { baseForOwn(object, function(value, key2, object2) { setter(accumulator, iteratee2(value), key2, object2); }); return accumulator; } function baseInvoke(object, path, args) { path = castPath(path, object); object = parent(object, path); var func = object == null ? object : object[toKey(last(path))]; return func == null ? undefined2 : apply(func, object, args); } function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag; } function baseIsArrayBuffer(value) { return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; } function baseIsDate(value) { return isObjectLike(value) && baseGetTag(value) == dateTag; } function baseIsEqual(value, other, bitmask, customizer, stack) { if (value === other) { return true; } if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); } function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { var objIsArr = isArray2(object), othIsArr = isArray2(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other); objTag = objTag == argsTag ? objectTag : objTag; othTag = othTag == argsTag ? objectTag : othTag; var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; if (isSameTag && isBuffer(object)) { if (!isBuffer(other)) { return false; } objIsArr = true; objIsObj = false; } if (isSameTag && !objIsObj) { stack || (stack = new Stack()); return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); } if (!(bitmask & COMPARE_PARTIAL_FLAG)) { var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__"); if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; stack || (stack = new Stack()); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); } } if (!isSameTag) { return false; } stack || (stack = new Stack()); return equalObjects(object, other, bitmask, customizer, equalFunc, stack); } function baseIsMap(value) { return isObjectLike(value) && getTag(value) == mapTag; } function baseIsMatch(object, source, matchData, customizer) { var index = matchData.length, length = index, noCustomizer = !customizer; if (object == null) { return !length; } object = Object2(object); while (index--) { var data = matchData[index]; if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) { return false; } } while (++index < length) { data = matchData[index]; var key2 = data[0], objValue = object[key2], srcValue = data[1]; if (noCustomizer && data[2]) { if (objValue === undefined2 && !(key2 in object)) { return false; } } else { var stack = new Stack(); if (customizer) { var result2 = customizer(objValue, srcValue, key2, object, source, stack); } if (!(result2 === undefined2 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result2)) { return false; } } } return true; } function baseIsNative(value) { if (!isObject(value) || isMasked(value)) { return false; } var pattern = isFunction2(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } function baseIsRegExp(value) { return isObjectLike(value) && baseGetTag(value) == regexpTag; } function baseIsSet(value) { return isObjectLike(value) && getTag(value) == setTag; } function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } function baseIteratee(value) { if (typeof value == "function") { return value; } if (value == null) { return identity; } if (typeof value == "object") { return isArray2(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); } return property(value); } function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result2 = []; for (var key2 in Object2(object)) { if (hasOwnProperty.call(object, key2) && key2 != "constructor") { result2.push(key2); } } return result2; } function baseKeysIn(object) { if (!isObject(object)) { return nativeKeysIn(object); } var isProto = isPrototype(object), result2 = []; for (var key2 in object) { if (!(key2 == "constructor" && (isProto || !hasOwnProperty.call(object, key2)))) { result2.push(key2); } } return result2; } function baseLt(value, other) { return value < other; } function baseMap(collection, iteratee2) { var index = -1, result2 = isArrayLike(collection) ? Array2(collection.length) : []; baseEach(collection, function(value, key2, collection2) { result2[++index] = iteratee2(value, key2, collection2); }); return result2; } function baseMatches(source) { var matchData = getMatchData(source); if (matchData.length == 1 && matchData[0][2]) { return matchesStrictComparable(matchData[0][0], matchData[0][1]); } return function(object) { return object === source || baseIsMatch(object, source, matchData); }; } function baseMatchesProperty(path, srcValue) { if (isKey(path) && isStrictComparable(srcValue)) { return matchesStrictComparable(toKey(path), srcValue); } return function(object) { var objValue = get(object, path); return objValue === undefined2 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); }; } function baseMerge(object, source, srcIndex, customizer, stack) { if (object === source) { return; } baseFor(source, function(srcValue, key2) { stack || (stack = new Stack()); if (isObject(srcValue)) { baseMergeDeep(object, source, key2, srcIndex, baseMerge, customizer, stack); } else { var newValue = customizer ? customizer(safeGet(object, key2), srcValue, key2 + "", object, source, stack) : undefined2; if (newValue === undefined2) { newValue = srcValue; } assignMergeValue(object, key2, newValue); } }, keysIn); } function baseMergeDeep(object, source, key2, srcIndex, mergeFunc, customizer, stack) { var objValue = safeGet(object, key2), srcValue = safeGet(source, key2), stacked = stack.get(srcValue); if (stacked) { assignMergeValue(object, key2, stacked); return; } var newValue = customizer ? customizer(objValue, srcValue, key2 + "", object, source, stack) : undefined2; var isCommon = newValue === undefined2; if (isCommon) { var isArr = isArray2(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue); newValue = srcValue; if (isArr || isBuff || isTyped) { if (isArray2(objValue)) { newValue = objValue; } else if (isArrayLikeObject(objValue)) { newValue = copyArray(objValue); } else if (isBuff) { isCommon = false; newValue = cloneBuffer(srcValue, true); } else if (isTyped) { isCommon = false; newValue = cloneTypedArray(srcValue, true); } else { newValue = []; } } else if (isPlainObject(srcValue) || isArguments(srcValue)) { newValue = objValue; if (isArguments(objValue)) { newValue = toPlainObject(objValue); } else if (!isObject(objValue) || isFunction2(objValue)) { newValue = initCloneObject(srcValue); } } else { isCommon = false; } } if (isCommon) { stack.set(srcValue, newValue); mergeFunc(newValue, srcValue, srcIndex, customizer, stack); stack["delete"](srcValue); } assignMergeValue(object, key2, newValue); } function baseNth(array, n2) { var length = array.length; if (!length) { return; } n2 += n2 < 0 ? length : 0; return isIndex(n2, length) ? array[n2] : undefined2; } function baseOrderBy(collection, iteratees, orders) { if (iteratees.length) { iteratees = arrayMap(iteratees, function(iteratee2) { if (isArray2(iteratee2)) { return function(value) { return baseGet(value, iteratee2.length === 1 ? iteratee2[0] : iteratee2); }; } return iteratee2; }); } else { iteratees = [identity]; } var index = -1; iteratees = arrayMap(iteratees, baseUnary(getIteratee())); var result2 = baseMap(collection, function(value, key2, collection2) { var criteria = arrayMap(iteratees, function(iteratee2) { return iteratee2(value); }); return { "criteria": criteria, "index": ++index, "value": value }; }); return baseSortBy(result2, function(object, other) { return compareMultiple(object, other, orders); }); } function basePick(object, paths) { return basePickBy(object, paths, function(value, path) { return hasIn(object, path); }); } function basePickBy(object, paths, predicate) { var index = -1, length = paths.length, result2 = {}; while (++index < length) { var path = paths[index], value = baseGet(object, path); if (predicate(value, path)) { baseSet(result2, castPath(path, object), value); } } return result2; } function basePropertyDeep(path) { return function(object) { return baseGet(object, path); }; } function basePullAll(array, values2, iteratee2, comparator) { var indexOf2 = comparator ? baseIndexOfWith : baseIndexOf, index = -1, length = values2.length, seen = array; if (array === values2) { values2 = copyArray(values2); } if (iteratee2) { seen = arrayMap(array, baseUnary(iteratee2)); } while (++index < length) { var fromIndex = 0, value = values2[index], computed = iteratee2 ? iteratee2(value) : value; while ((fromIndex = indexOf2(seen, computed, fromIndex, comparator)) > -1) { if (seen !== array) { splice.call(seen, fromIndex, 1); } splice.call(array, fromIndex, 1); } } return array; } function basePullAt(array, indexes) { var length = array ? indexes.length : 0, lastIndex = length - 1; while (length--) { var index = indexes[length]; if (length == lastIndex || index !== previous) { var previous = index; if (isIndex(index)) { splice.call(array, index, 1); } else { baseUnset(array, index); } } } return array; } function baseRandom(lower, upper) { return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); } function baseRange(start, end, step, fromRight) { var index = -1, length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), result2 = Array2(length); while (length--) { result2[fromRight ? length : ++index] = start; start += step; } return result2; } function baseRepeat(string, n2) { var result2 = ""; if (!string || n2 < 1 || n2 > MAX_SAFE_INTEGER) { return result2; } do { if (n2 % 2) { result2 += string; } n2 = nativeFloor(n2 / 2); if (n2) { string += string; } } while (n2); return result2; } function baseRest(func, start) { return setToString(overRest(func, start, identity), func + ""); } function baseSample(collection) { return arraySample(values(collection)); } function baseSampleSize(collection, n2) { var array = values(collection); return shuffleSelf(array, baseClamp(n2, 0, array.length)); } function baseSet(object, path, value, customizer) { if (!isObject(object)) { return object; } path = castPath(path, object); var index = -1, length = path.length, lastIndex = length - 1, nested = object; while (nested != null && ++index < length) { var key2 = toKey(path[index]), newValue = value; if (key2 === "__proto__" || key2 === "constructor" || key2 === "prototype") { return object; } if (index != lastIndex) { var objValue = nested[key2]; newValue = customizer ? customizer(objValue, key2, nested) : undefined2; if (newValue === undefined2) { newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {}; } } assignValue(nested, key2, newValue); nested = nested[key2]; } return object; } var baseSetData = !metaMap ? identity : function(func, data) { metaMap.set(func, data); return func; }; var baseSetToString = !defineProperty ? identity : function(func, string) { return defineProperty(func, "toString", { "configurable": true, "enumerable": false, "value": constant(string), "writable": true }); }; function baseShuffle(collection) { return shuffleSelf(values(collection)); } function baseSlice(array, start, end) { var index = -1, length = array.length; if (start < 0) { start = -start > length ? 0 : length + start; } end = end > length ? length : end; if (end < 0) { end += length; } length = start > end ? 0 : end - start >>> 0; start >>>= 0; var result2 = Array2(length); while (++index < length) { result2[index] = array[index + start]; } return result2; } function baseSome(collection, predicate) { var result2; baseEach(collection, function(value, index, collection2) { result2 = predicate(value, index, collection2); return !result2; }); return !!result2; } function baseSortedIndex(array, value, retHighest) { var low = 0, high = array == null ? low : array.length; if (typeof value == "number" && value === value && high <= HALF_MAX_ARRAY_LENGTH) { while (low < high) { var mid = low + high >>> 1, computed = array[mid]; if (computed !== null && !isSymbol(computed) && (retHighest ? computed <= value : computed < value)) { low = mid + 1; } else { high = mid; } } return high; } return baseSortedIndexBy(array, value, identity, retHighest); } function baseSortedIndexBy(array, value, iteratee2, retHighest) { var low = 0, high = array == null ? 0 : array.length; if (high === 0) { return 0; } value = iteratee2(value); var valIsNaN = value !== value, valIsNull = value === null, valIsSymbol = isSymbol(value), valIsUndefined = value === undefined2; while (low < high) { var mid = nativeFloor((low + high) / 2), computed = iteratee2(array[mid]), othIsDefined = computed !== undefined2, othIsNull = computed === null, othIsReflexive = computed === computed, othIsSymbol = isSymbol(computed); if (valIsNaN) { var setLow = retHighest || othIsReflexive; } else if (valIsUndefined) { setLow = othIsReflexive && (retHighest || othIsDefined); } else if (valIsNull) { setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); } else if (valIsSymbol) { setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); } else if (othIsNull || othIsSymbol) { setLow = false; } else { setLow = retHighest ? computed <= value : computed < value; } if (setLow) { low = mid + 1; } else { high = mid; } } return nativeMin(high, MAX_ARRAY_INDEX); } function baseSortedUniq(array, iteratee2) { var index = -1, length = array.length, resIndex = 0, result2 = []; while (++index < length) { var value = array[index], computed = iteratee2 ? iteratee2(value) : value; if (!index || !eq(computed, seen)) { var seen = computed; result2[resIndex++] = value === 0 ? 0 : value; } } return result2; } function baseToNumber(value) { if (typeof value == "number") { return value; } if (isSymbol(value)) { return NAN; } return +value; } function baseToString(value) { if (typeof value == "string") { return value; } if (isArray2(value)) { return arrayMap(value, baseToString) + ""; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ""; } var result2 = value + ""; return result2 == "0" && 1 / value == -INFINITY ? "-0" : result2; } function baseUniq(array, iteratee2, comparator) { var index = -1, includes2 = arrayIncludes, length = array.length, isCommon = true, result2 = [], seen = result2; if (comparator) { isCommon = false; includes2 = arrayIncludesWith; } else if (length >= LARGE_ARRAY_SIZE) { var set2 = iteratee2 ? null : createSet(array); if (set2) { return setToArray(set2); } isCommon = false; includes2 = cacheHas; seen = new SetCache(); } else { seen = iteratee2 ? [] : result2; } outer: while (++index < length) { var value = array[index], computed = iteratee2 ? iteratee2(value) : value; value = comparator || value !== 0 ? value : 0; if (isCommon && computed === computed) { var seenIndex = seen.length; while (seenIndex--) { if (seen[seenIndex] === computed) { continue outer; } } if (iteratee2) { seen.push(computed); } result2.push(value); } else if (!includes2(seen, computed, comparator)) { if (seen !== result2) { seen.push(computed); } result2.push(value); } } return result2; } function baseUnset(object, path) { path = castPath(path, object); object = parent(object, path); return object == null || delete object[toKey(last(path))]; } function baseUpdate(object, path, updater, customizer) { return baseSet(object, path, updater(baseGet(object, path)), customizer); } function baseWhile(array, predicate, isDrop, fromRight) { var length = array.length, index = fromRight ? length : -1; while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) { } return isDrop ? baseSlice(array, fromRight ? 0 : index, fromRight ? index + 1 : length) : baseSlice(array, fromRight ? index + 1 : 0, fromRight ? length : index); } function baseWrapperValue(value, actions) { var result2 = value; if (result2 instanceof LazyWrapper) { result2 = result2.value(); } return arrayReduce(actions, function(result3, action) { return action.func.apply(action.thisArg, arrayPush([result3], action.args)); }, result2); } function baseXor(arrays, iteratee2, comparator) { var length = arrays.length; if (length < 2) { return length ? baseUniq(arrays[0]) : []; } var index = -1, result2 = Array2(length); while (++index < length) { var array = arrays[index], othIndex = -1; while (++othIndex < length) { if (othIndex != index) { result2[index] = baseDifference(result2[index] || array, arrays[othIndex], iteratee2, comparator); } } } return baseUniq(baseFlatten(result2, 1), iteratee2, comparator); } function baseZipObject(props2, values2, assignFunc) { var index = -1, length = props2.length, valsLength = values2.length, result2 = {}; while (++index < length) { var value = index < valsLength ? values2[index] : undefined2; assignFunc(result2, props2[index], value); } return result2; } function castArrayLikeObject(value) { return isArrayLikeObject(value) ? value : []; } function castFunction(value) { return typeof value == "function" ? value : identity; } function castPath(value, object) { if (isArray2(value)) { return value; } return isKey(value, object) ? [value] : stringToPath(toString2(value)); } var castRest = baseRest; function castSlice(array, start, end) { var length = array.length; end = end === undefined2 ? length : end; return !start && end >= length ? array : baseSlice(array, start, end); } var clearTimeout2 = ctxClearTimeout || function(id2) { return root.clearTimeout(id2); }; function cloneBuffer(buffer, isDeep) { if (isDeep) { return buffer.slice(); } var length = buffer.length, result2 = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); buffer.copy(result2); return result2; } function cloneArrayBuffer(arrayBuffer) { var result2 = new arrayBuffer.constructor(arrayBuffer.byteLength); new Uint8Array2(result2).set(new Uint8Array2(arrayBuffer)); return result2; } function cloneDataView(dataView, isDeep) { var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); } function cloneRegExp(regexp) { var result2 = new regexp.constructor(regexp.source, reFlags.exec(regexp)); result2.lastIndex = regexp.lastIndex; return result2; } function cloneSymbol(symbol) { return symbolValueOf ? Object2(symbolValueOf.call(symbol)) : {}; } function cloneTypedArray(typedArray, isDeep) { var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); } function compareAscending(value, other) { if (value !== other) { var valIsDefined = value !== undefined2, valIsNull = value === null, valIsReflexive = value === value, valIsSymbol = isSymbol(value); var othIsDefined = other !== undefined2, othIsNull = other === null, othIsReflexive = other === other, othIsSymbol = isSymbol(other); if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) { return 1; } if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) { return -1; } } return 0; } function compareMultiple(object, other, orders) { var index = -1, objCriteria = object.criteria, othCriteria = other.criteria, length = objCriteria.length, ordersLength = orders.length; while (++index < length) { var result2 = compareAscending(objCriteria[index], othCriteria[index]); if (result2) { if (index >= ordersLength) { return result2; } var order = orders[index]; return result2 * (order == "desc" ? -1 : 1); } } return object.index - other.index; } function composeArgs(args, partials, holders, isCurried) { var argsIndex = -1, argsLength = args.length, holdersLength = holders.length, leftIndex = -1, leftLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(leftLength + rangeLength), isUncurried = !isCurried; while (++leftIndex < leftLength) { result2[leftIndex] = partials[leftIndex]; } while (++argsIndex < holdersLength) { if (isUncurried || argsIndex < argsLength) { result2[holders[argsIndex]] = args[argsIndex]; } } while (rangeLength--) { result2[leftIndex++] = args[argsIndex++]; } return result2; } function composeArgsRight(args, partials, holders, isCurried) { var argsIndex = -1, argsLength = args.length, holdersIndex = -1, holdersLength = holders.length, rightIndex = -1, rightLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(rangeLength + rightLength), isUncurried = !isCurried; while (++argsIndex < rangeLength) { result2[argsIndex] = args[argsIndex]; } var offset = argsIndex; while (++rightIndex < rightLength) { result2[offset + rightIndex] = partials[rightIndex]; } while (++holdersIndex < holdersLength) { if (isUncurried || argsIndex < argsLength) { result2[offset + holders[holdersIndex]] = args[argsIndex++]; } } return result2; } function copyArray(source, array) { var index = -1, length = source.length; array || (array = Array2(length)); while (++index < length) { array[index] = source[index]; } return array; } function copyObject(source, props2, object, customizer) { var isNew = !object; object || (object = {}); var index = -1, length = props2.length; while (++index < length) { var key2 = props2[index]; var newValue = customizer ? customizer(object[key2], source[key2], key2, object, source) : undefined2; if (newValue === undefined2) { newValue = source[key2]; } if (isNew) { baseAssignValue(object, key2, newValue); } else { assignValue(object, key2, newValue); } } return object; } function copySymbols(source, object) { return copyObject(source, getSymbols(source), object); } function copySymbolsIn(source, object) { return copyObject(source, getSymbolsIn(source), object); } function createAggregator(setter, initializer) { return function(collection, iteratee2) { var func = isArray2(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {}; return func(collection, setter, getIteratee(iteratee2, 2), accumulator); }; } function createAssigner(assigner) { return baseRest(function(object, sources) { var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined2, guard = length > 2 ? sources[2] : undefined2; customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : undefined2; if (guard && isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? undefined2 : customizer; length = 1; } object = Object2(object); while (++index < length) { var source = sources[index]; if (source) { assigner(object, source, index, customizer); } } return object; }); } function createBaseEach(eachFunc, fromRight) { return function(collection, iteratee2) { if (collection == null) { return collection; } if (!isArrayLike(collection)) { return eachFunc(collection, iteratee2); } var length = collection.length, index = fromRight ? length : -1, iterable = Object2(collection); while (fromRight ? index-- : ++index < length) { if (iteratee2(iterable[index], index, iterable) === false) { break; } } return collection; }; } function createBaseFor(fromRight) { return function(object, iteratee2, keysFunc) { var index = -1, iterable = Object2(object), props2 = keysFunc(object), length = props2.length; while (length--) { var key2 = props2[fromRight ? length : ++index]; if (iteratee2(iterable[key2], key2, iterable) === false) { break; } } return object; }; } function createBind(func, bitmask, thisArg) { var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func); function wrapper() { var fn2 = this && this !== root && this instanceof wrapper ? Ctor : func; return fn2.apply(isBind ? thisArg : this, arguments); } return wrapper; } function createCaseFirst(methodName) { return function(string) { string = toString2(string); var strSymbols = hasUnicode(string) ? stringToArray(string) : undefined2; var chr = strSymbols ? strSymbols[0] : string.charAt(0); var trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string.slice(1); return chr[methodName]() + trailing; }; } function createCompounder(callback) { return function(string) { return arrayReduce(words(deburr(string).replace(reApos, "")), callback, ""); }; } function createCtor(Ctor) { return function() { var args = arguments; switch (args.length) { case 0: return new Ctor(); case 1: return new Ctor(args[0]); case 2: return new Ctor(args[0], args[1]); case 3: return new Ctor(args[0], args[1], args[2]); case 4: return new Ctor(args[0], args[1], args[2], args[3]); case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); } var thisBinding = baseCreate(Ctor.prototype), result2 = Ctor.apply(thisBinding, args); return isObject(result2) ? result2 : thisBinding; }; } function createCurry(func, bitmask, arity) { var Ctor = createCtor(func); function wrapper() { var length = arguments.length, args = Array2(length), index = length, placeholder2 = getHolder(wrapper); while (index--) { args[index] = arguments[index]; } var holders = length < 3 && args[0] !== placeholder2 && args[length - 1] !== placeholder2 ? [] : replaceHolders(args, placeholder2); length -= holders.length; if (length < arity) { return createRecurry( func, bitmask, createHybrid, wrapper.placeholder, undefined2, args, holders, undefined2, undefined2, arity - length ); } var fn2 = this && this !== root && this instanceof wrapper ? Ctor : func; return apply(fn2, this, args); } return wrapper; } function createFind(findIndexFunc) { return function(collection, predicate, fromIndex) { var iterable = Object2(collection); if (!isArrayLike(collection)) { var iteratee2 = getIteratee(predicate, 3); collection = keys(collection); predicate = function(key2) { return iteratee2(iterable[key2], key2, iterable); }; } var index = findIndexFunc(collection, predicate, fromIndex); return index > -1 ? iterable[iteratee2 ? collection[index] : index] : undefined2; }; } function createFlow(fromRight) { return flatRest(function(funcs) { var length = funcs.length, index = length, prereq = LodashWrapper.prototype.thru; if (fromRight) { funcs.reverse(); } while (index--) { var func = funcs[index]; if (typeof func != "function") { throw new TypeError2(FUNC_ERROR_TEXT); } if (prereq && !wrapper && getFuncName(func) == "wrapper") { var wrapper = new LodashWrapper([], true); } } index = wrapper ? index : length; while (++index < length) { func = funcs[index]; var funcName = getFuncName(func), data = funcName == "wrapper" ? getData(func) : undefined2; if (data && isLaziable(data[0]) && data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data[4].length && data[9] == 1) { wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); } else { wrapper = func.length == 1 && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func); } } return function() { var args = arguments, value = args[0]; if (wrapper && args.length == 1 && isArray2(value)) { return wrapper.plant(value).value(); } var index2 = 0, result2 = length ? funcs[index2].apply(this, args) : value; while (++index2 < length) { result2 = funcs[index2].call(this, result2); } return result2; }; }); } function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary2, arity) { var isAry = bitmask & WRAP_ARY_FLAG, isBind = bitmask & WRAP_BIND_FLAG, isBindKey = bitmask & WRAP_BIND_KEY_FLAG, isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), isFlip = bitmask & WRAP_FLIP_FLAG, Ctor = isBindKey ? undefined2 : createCtor(func); function wrapper() { var length = arguments.length, args = Array2(length), index = length; while (index--) { args[index] = arguments[index]; } if (isCurried) { var placeholder2 = getHolder(wrapper), holdersCount = countHolders(args, placeholder2); } if (partials) { args = composeArgs(args, partials, holders, isCurried); } if (partialsRight) { args = composeArgsRight(args, partialsRight, holdersRight, isCurried); } length -= holdersCount; if (isCurried && length < arity) { var newHolders = replaceHolders(args, placeholder2); return createRecurry( func, bitmask, createHybrid, wrapper.placeholder, thisArg, args, newHolders, argPos, ary2, arity - length ); } var thisBinding = isBind ? thisArg : this, fn2 = isBindKey ? thisBinding[func] : func; length = args.length; if (argPos) { args = reorder(args, argPos); } else if (isFlip && length > 1) { args.reverse(); } if (isAry && ary2 < length) { args.length = ary2; } if (this && this !== root && this instanceof wrapper) { fn2 = Ctor || createCtor(fn2); } return fn2.apply(thisBinding, args); } return wrapper; } function createInverter(setter, toIteratee) { return function(object, iteratee2) { return baseInverter(object, setter, toIteratee(iteratee2), {}); }; } function createMathOperation(operator, defaultValue2) { return function(value, other) { var result2; if (value === undefined2 && other === undefined2) { return defaultValue2; } if (value !== undefined2) { result2 = value; } if (other !== undefined2) { if (result2 === undefined2) { return other; } if (typeof value == "string" || typeof other == "string") { value = baseToString(value); other = baseToString(other); } else { value = baseToNumber(value); other = baseToNumber(other); } result2 = operator(value, other); } return result2; }; } function createOver(arrayFunc) { return flatRest(function(iteratees) { iteratees = arrayMap(iteratees, baseUnary(getIteratee())); return baseRest(function(args) { var thisArg = this; return arrayFunc(iteratees, function(iteratee2) { return apply(iteratee2, thisArg, args); }); }); }); } function createPadding(length, chars) { chars = chars === undefined2 ? " " : baseToString(chars); var charsLength = chars.length; if (charsLength < 2) { return charsLength ? baseRepeat(chars, length) : chars; } var result2 = baseRepeat(chars, nativeCeil(length / stringSize(chars))); return hasUnicode(chars) ? castSlice(stringToArray(result2), 0, length).join("") : result2.slice(0, length); } function createPartial(func, bitmask, thisArg, partials) { var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func); function wrapper() { var argsIndex = -1, argsLength = arguments.length, leftIndex = -1, leftLength = partials.length, args = Array2(leftLength + argsLength), fn2 = this && this !== root && this instanceof wrapper ? Ctor : func; while (++leftIndex < leftLength) { args[leftIndex] = partials[leftIndex]; } while (argsLength--) { args[leftIndex++] = arguments[++argsIndex]; } return apply(fn2, isBind ? thisArg : this, args); } return wrapper; } function createRange(fromRight) { return function(start, end, step) { if (step && typeof step != "number" && isIterateeCall(start, end, step)) { end = step = undefined2; } start = toFinite(start); if (end === undefined2) { end = start; start = 0; } else { end = toFinite(end); } step = step === undefined2 ? start < end ? 1 : -1 : toFinite(step); return baseRange(start, end, step, fromRight); }; } function createRelationalOperation(operator) { return function(value, other) { if (!(typeof value == "string" && typeof other == "string")) { value = toNumber(value); other = toNumber(other); } return operator(value, other); }; } function createRecurry(func, bitmask, wrapFunc, placeholder2, thisArg, partials, holders, argPos, ary2, arity) { var isCurry = bitmask & WRAP_CURRY_FLAG, newHolders = isCurry ? holders : undefined2, newHoldersRight = isCurry ? undefined2 : holders, newPartials = isCurry ? partials : undefined2, newPartialsRight = isCurry ? undefined2 : partials; bitmask |= isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG; bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); } var newData = [ func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, newHoldersRight, argPos, ary2, arity ]; var result2 = wrapFunc.apply(undefined2, newData); if (isLaziable(func)) { setData(result2, newData); } result2.placeholder = placeholder2; return setWrapToString(result2, func, bitmask); } function createRound(methodName) { var func = Math2[methodName]; return function(number, precision) { number = toNumber(number); precision = precision == null ? 0 : nativeMin(toInteger2(precision), 292); if (precision && nativeIsFinite(number)) { var pair = (toString2(number) + "e").split("e"), value = func(pair[0] + "e" + (+pair[1] + precision)); pair = (toString2(value) + "e").split("e"); return +(pair[0] + "e" + (+pair[1] - precision)); } return func(number); }; } var createSet = !(Set2 && 1 / setToArray(new Set2([, -0]))[1] == INFINITY) ? noop2 : function(values2) { return new Set2(values2); }; function createToPairs(keysFunc) { return function(object) { var tag = getTag(object); if (tag == mapTag) { return mapToArray(object); } if (tag == setTag) { return setToPairs(object); } return baseToPairs(object, keysFunc(object)); }; } function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary2, arity) { var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; if (!isBindKey && typeof func != "function") { throw new TypeError2(FUNC_ERROR_TEXT); } var length = partials ? partials.length : 0; if (!length) { bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); partials = holders = undefined2; } ary2 = ary2 === undefined2 ? ary2 : nativeMax(toInteger2(ary2), 0); arity = arity === undefined2 ? arity : toInteger2(arity); length -= holders ? holders.length : 0; if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { var partialsRight = partials, holdersRight = holders; partials = holders = undefined2; } var data = isBindKey ? undefined2 : getData(func); var newData = [ func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary2, arity ]; if (data) { mergeData(newData, data); } func = newData[0]; bitmask = newData[1]; thisArg = newData[2]; partials = newData[3]; holders = newData[4]; arity = newData[9] = newData[9] === undefined2 ? isBindKey ? 0 : func.length : nativeMax(newData[9] - length, 0); if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); } if (!bitmask || bitmask == WRAP_BIND_FLAG) { var result2 = createBind(func, bitmask, thisArg); } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { result2 = createCurry(func, bitmask, arity); } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { result2 = createPartial(func, bitmask, thisArg, partials); } else { result2 = createHybrid.apply(undefined2, newData); } var setter = data ? baseSetData : setData; return setWrapToString(setter(result2, newData), func, bitmask); } function customDefaultsAssignIn(objValue, srcValue, key2, object) { if (objValue === undefined2 || eq(objValue, objectProto[key2]) && !hasOwnProperty.call(object, key2)) { return srcValue; } return objValue; } function customDefaultsMerge(objValue, srcValue, key2, object, source, stack) { if (isObject(objValue) && isObject(srcValue)) { stack.set(srcValue, objValue); baseMerge(objValue, srcValue, undefined2, customDefaultsMerge, stack); stack["delete"](srcValue); } return objValue; } function customOmitClone(value) { return isPlainObject(value) ? undefined2 : value; } function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } var arrStacked = stack.get(array); var othStacked = stack.get(other); if (arrStacked && othStacked) { return arrStacked == other && othStacked == array; } var index = -1, result2 = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined2; stack.set(array, other); stack.set(other, array); while (++index < arrLength) { var arrValue = array[index], othValue = other[index]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); } if (compared !== undefined2) { if (compared) { continue; } result2 = false; break; } if (seen) { if (!arraySome(other, function(othValue2, othIndex) { if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { return seen.push(othIndex); } })) { result2 = false; break; } } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { result2 = false; break; } } stack["delete"](array); stack["delete"](other); return result2; } function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { switch (tag) { case dataViewTag: if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag: if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other))) { return false; } return true; case boolTag: case dateTag: case numberTag: return eq(+object, +other); case errorTag: return object.name == other.name && object.message == other.message; case regexpTag: case stringTag: return object == other + ""; case mapTag: var convert = mapToArray; case setTag: var isPartial = bitmask & COMPARE_PARTIAL_FLAG; convert || (convert = setToArray); if (object.size != other.size && !isPartial) { return false; } var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG; stack.set(object, other); var result2 = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack["delete"](object); return result2; case symbolTag: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index = objLength; while (index--) { var key2 = objProps[index]; if (!(isPartial ? key2 in other : hasOwnProperty.call(other, key2))) { return false; } } var objStacked = stack.get(object); var othStacked = stack.get(other); if (objStacked && othStacked) { return objStacked == other && othStacked == object; } var result2 = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index < objLength) { key2 = objProps[index]; var objValue = object[key2], othValue = other[key2]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key2, other, object, stack) : customizer(objValue, othValue, key2, object, other, stack); } if (!(compared === undefined2 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { result2 = false; break; } skipCtor || (skipCtor = key2 == "constructor"); } if (result2 && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { result2 = false; } } stack["delete"](object); stack["delete"](other); return result2; } function flatRest(func) { return setToString(overRest(func, undefined2, flatten), func + ""); } function getAllKeys(object) { return baseGetAllKeys(object, keys, getSymbols); } function getAllKeysIn(object) { return baseGetAllKeys(object, keysIn, getSymbolsIn); } var getData = !metaMap ? noop2 : function(func) { return metaMap.get(func); }; function getFuncName(func) { var result2 = func.name + "", array = realNames[result2], length = hasOwnProperty.call(realNames, result2) ? array.length : 0; while (length--) { var data = array[length], otherFunc = data.func; if (otherFunc == null || otherFunc == func) { return data.name; } } return result2; } function getHolder(func) { var object = hasOwnProperty.call(lodash, "placeholder") ? lodash : func; return object.placeholder; } function getIteratee() { var result2 = lodash.iteratee || iteratee; result2 = result2 === iteratee ? baseIteratee : result2; return arguments.length ? result2(arguments[0], arguments[1]) : result2; } function getMapData(map2, key2) { var data = map2.__data__; return isKeyable(key2) ? data[typeof key2 == "string" ? "string" : "hash"] : data.map; } function getMatchData(object) { var result2 = keys(object), length = result2.length; while (length--) { var key2 = result2[length], value = object[key2]; result2[length] = [key2, value, isStrictComparable(value)]; } return result2; } function getNative(object, key2) { var value = getValue(object, key2); return baseIsNative(value) ? value : undefined2; } function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined2; var unmasked = true; } catch (e4) { } var result2 = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result2; } var getSymbols = !nativeGetSymbols ? stubArray : function(object) { if (object == null) { return []; } object = Object2(object); return arrayFilter(nativeGetSymbols(object), function(symbol) { return propertyIsEnumerable.call(object, symbol); }); }; var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { var result2 = []; while (object) { arrayPush(result2, getSymbols(object)); object = getPrototype(object); } return result2; }; var getTag = baseGetTag; if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag(new Map2()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag || WeakMap2 && getTag(new WeakMap2()) != weakMapTag) { getTag = function(value) { var result2 = baseGetTag(value), Ctor = result2 == objectTag ? value.constructor : undefined2, ctorString = Ctor ? toSource(Ctor) : ""; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag; case mapCtorString: return mapTag; case promiseCtorString: return promiseTag; case setCtorString: return setTag; case weakMapCtorString: return weakMapTag; } } return result2; }; } function getView(start, end, transforms) { var index = -1, length = transforms.length; while (++index < length) { var data = transforms[index], size2 = data.size; switch (data.type) { case "drop": start += size2; break; case "dropRight": end -= size2; break; case "take": end = nativeMin(end, start + size2); break; case "takeRight": start = nativeMax(start, end - size2); break; } } return { "start": start, "end": end }; } function getWrapDetails(source) { var match2 = source.match(reWrapDetails); return match2 ? match2[1].split(reSplitDetails) : []; } function hasPath(object, path, hasFunc) { path = castPath(path, object); var index = -1, length = path.length, result2 = false; while (++index < length) { var key2 = toKey(path[index]); if (!(result2 = object != null && hasFunc(object, key2))) { break; } object = object[key2]; } if (result2 || ++index != length) { return result2; } length = object == null ? 0 : object.length; return !!length && isLength(length) && isIndex(key2, length) && (isArray2(object) || isArguments(object)); } function initCloneArray(array) { var length = array.length, result2 = new array.constructor(length); if (length && typeof array[0] == "string" && hasOwnProperty.call(array, "index")) { result2.index = array.index; result2.input = array.input; } return result2; } function initCloneObject(object) { return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {}; } function initCloneByTag(object, tag, isDeep) { var Ctor = object.constructor; switch (tag) { case arrayBufferTag: return cloneArrayBuffer(object); case boolTag: case dateTag: return new Ctor(+object); case dataViewTag: return cloneDataView(object, isDeep); case float32Tag: case float64Tag: case int8Tag: case int16Tag: case int32Tag: case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: return cloneTypedArray(object, isDeep); case mapTag: return new Ctor(); case numberTag: case stringTag: return new Ctor(object); case regexpTag: return cloneRegExp(object); case setTag: return new Ctor(); case symbolTag: return cloneSymbol(object); } } function insertWrapDetails(source, details) { var length = details.length; if (!length) { return source; } var lastIndex = length - 1; details[lastIndex] = (length > 1 ? "& " : "") + details[lastIndex]; details = details.join(length > 2 ? ", " : " "); return source.replace(reWrapComment, "{\n/* [wrapped with " + details + "] */\n"); } function isFlattenable(value) { return isArray2(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } function isIndex(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER : length; return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length); } function isIterateeCall(value, index, object) { if (!isObject(object)) { return false; } var type = typeof index; if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) { return eq(object[index], value); } return false; } function isKey(value, object) { if (isArray2(value)) { return false; } var type = typeof value; if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object2(object); } function isKeyable(value) { var type = typeof value; return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; } function isLaziable(func) { var funcName = getFuncName(func), other = lodash[funcName]; if (typeof other != "function" || !(funcName in LazyWrapper.prototype)) { return false; } if (func === other) { return true; } var data = getData(other); return !!data && func === data[0]; } function isMasked(func) { return !!maskSrcKey && maskSrcKey in func; } var isMaskable = coreJsData ? isFunction2 : stubFalse; function isPrototype(value) { var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto; return value === proto; } function isStrictComparable(value) { return value === value && !isObject(value); } function matchesStrictComparable(key2, srcValue) { return function(object) { if (object == null) { return false; } return object[key2] === srcValue && (srcValue !== undefined2 || key2 in Object2(object)); }; } function memoizeCapped(func) { var result2 = memoize(func, function(key2) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key2; }); var cache = result2.cache; return result2; } function mergeData(data, source) { var bitmask = data[1], srcBitmask = source[1], newBitmask = bitmask | srcBitmask, isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); var isCombo = srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_CURRY_FLAG || srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_REARG_FLAG && data[7].length <= source[8] || srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG) && source[7].length <= source[8] && bitmask == WRAP_CURRY_FLAG; if (!(isCommon || isCombo)) { return data; } if (srcBitmask & WRAP_BIND_FLAG) { data[2] = source[2]; newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; } var value = source[3]; if (value) { var partials = data[3]; data[3] = partials ? composeArgs(partials, value, source[4]) : value; data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; } value = source[5]; if (value) { partials = data[5]; data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; } value = source[7]; if (value) { data[7] = value; } if (srcBitmask & WRAP_ARY_FLAG) { data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); } if (data[9] == null) { data[9] = source[9]; } data[0] = source[0]; data[1] = newBitmask; return data; } function nativeKeysIn(object) { var result2 = []; if (object != null) { for (var key2 in Object2(object)) { result2.push(key2); } } return result2; } function objectToString(value) { return nativeObjectToString.call(value); } function overRest(func, start, transform2) { start = nativeMax(start === undefined2 ? func.length - 1 : start, 0); return function() { var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array2(length); while (++index < length) { array[index] = args[start + index]; } index = -1; var otherArgs = Array2(start + 1); while (++index < start) { otherArgs[index] = args[index]; } otherArgs[start] = transform2(array); return apply(func, this, otherArgs); }; } function parent(object, path) { return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); } function reorder(array, indexes) { var arrLength = array.length, length = nativeMin(indexes.length, arrLength), oldArray = copyArray(array); while (length--) { var index = indexes[length]; array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined2; } return array; } function safeGet(object, key2) { if (key2 === "constructor" && typeof object[key2] === "function") { return; } if (key2 == "__proto__") { return; } return object[key2]; } var setData = shortOut(baseSetData); var setTimeout2 = ctxSetTimeout || function(func, wait) { return root.setTimeout(func, wait); }; var setToString = shortOut(baseSetToString); function setWrapToString(wrapper, reference, bitmask) { var source = reference + ""; return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); } function shortOut(func) { var count2 = 0, lastCalled = 0; return function() { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count2 >= HOT_COUNT) { return arguments[0]; } } else { count2 = 0; } return func.apply(undefined2, arguments); }; } function shuffleSelf(array, size2) { var index = -1, length = array.length, lastIndex = length - 1; size2 = size2 === undefined2 ? length : size2; while (++index < size2) { var rand = baseRandom(index, lastIndex), value = array[rand]; array[rand] = array[index]; array[index] = value; } array.length = size2; return array; } var stringToPath = memoizeCapped(function(string) { var result2 = []; if (string.charCodeAt(0) === 46) { result2.push(""); } string.replace(rePropName, function(match2, number, quote, subString) { result2.push(quote ? subString.replace(reEscapeChar, "$1") : number || match2); }); return result2; }); function toKey(value) { if (typeof value == "string" || isSymbol(value)) { return value; } var result2 = value + ""; return result2 == "0" && 1 / value == -INFINITY ? "-0" : result2; } function toSource(func) { if (func != null) { try { return funcToString.call(func); } catch (e4) { } try { return func + ""; } catch (e4) { } } return ""; } function updateWrapDetails(details, bitmask) { arrayEach(wrapFlags, function(pair) { var value = "_." + pair[0]; if (bitmask & pair[1] && !arrayIncludes(details, value)) { details.push(value); } }); return details.sort(); } function wrapperClone(wrapper) { if (wrapper instanceof LazyWrapper) { return wrapper.clone(); } var result2 = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); result2.__actions__ = copyArray(wrapper.__actions__); result2.__index__ = wrapper.__index__; result2.__values__ = wrapper.__values__; return result2; } function chunk(array, size2, guard) { if (guard ? isIterateeCall(array, size2, guard) : size2 === undefined2) { size2 = 1; } else { size2 = nativeMax(toInteger2(size2), 0); } var length = array == null ? 0 : array.length; if (!length || size2 < 1) { return []; } var index = 0, resIndex = 0, result2 = Array2(nativeCeil(length / size2)); while (index < length) { result2[resIndex++] = baseSlice(array, index, index += size2); } return result2; } function compact(array) { var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result2 = []; while (++index < length) { var value = array[index]; if (value) { result2[resIndex++] = value; } } return result2; } function concat() { var length = arguments.length; if (!length) { return []; } var args = Array2(length - 1), array = arguments[0], index = length; while (index--) { args[index - 1] = arguments[index]; } return arrayPush(isArray2(array) ? copyArray(array) : [array], baseFlatten(args, 1)); } var difference = baseRest(function(array, values2) { return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true)) : []; }); var differenceBy = baseRest(function(array, values2) { var iteratee2 = last(values2); if (isArrayLikeObject(iteratee2)) { iteratee2 = undefined2; } return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2)) : []; }); var differenceWith = baseRest(function(array, values2) { var comparator = last(values2); if (isArrayLikeObject(comparator)) { comparator = undefined2; } return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true), undefined2, comparator) : []; }); function drop(array, n2, guard) { var length = array == null ? 0 : array.length; if (!length) { return []; } n2 = guard || n2 === undefined2 ? 1 : toInteger2(n2); return baseSlice(array, n2 < 0 ? 0 : n2, length); } function dropRight(array, n2, guard) { var length = array == null ? 0 : array.length; if (!length) { return []; } n2 = guard || n2 === undefined2 ? 1 : toInteger2(n2); n2 = length - n2; return baseSlice(array, 0, n2 < 0 ? 0 : n2); } function dropRightWhile(array, predicate) { return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true, true) : []; } function dropWhile(array, predicate) { return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true) : []; } function fill(array, value, start, end) { var length = array == null ? 0 : array.length; if (!length) { return []; } if (start && typeof start != "number" && isIterateeCall(array, value, start)) { start = 0; end = length; } return baseFill(array, value, start, end); } function findIndex2(array, predicate, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index = fromIndex == null ? 0 : toInteger2(fromIndex); if (index < 0) { index = nativeMax(length + index, 0); } return baseFindIndex(array, getIteratee(predicate, 3), index); } function findLastIndex(array, predicate, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index = length - 1; if (fromIndex !== undefined2) { index = toInteger2(fromIndex); index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); } return baseFindIndex(array, getIteratee(predicate, 3), index, true); } function flatten(array) { var length = array == null ? 0 : array.length; return length ? baseFlatten(array, 1) : []; } function flattenDeep(array) { var length = array == null ? 0 : array.length; return length ? baseFlatten(array, INFINITY) : []; } function flattenDepth(array, depth) { var length = array == null ? 0 : array.length; if (!length) { return []; } depth = depth === undefined2 ? 1 : toInteger2(depth); return baseFlatten(array, depth); } function fromPairs(pairs) { var index = -1, length = pairs == null ? 0 : pairs.length, result2 = {}; while (++index < length) { var pair = pairs[index]; result2[pair[0]] = pair[1]; } return result2; } function head(array) { return array && array.length ? array[0] : undefined2; } function indexOf(array, value, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index = fromIndex == null ? 0 : toInteger2(fromIndex); if (index < 0) { index = nativeMax(length + index, 0); } return baseIndexOf(array, value, index); } function initial(array) { var length = array == null ? 0 : array.length; return length ? baseSlice(array, 0, -1) : []; } var intersection = baseRest(function(arrays) { var mapped = arrayMap(arrays, castArrayLikeObject); return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : []; }); var intersectionBy = baseRest(function(arrays) { var iteratee2 = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject); if (iteratee2 === last(mapped)) { iteratee2 = undefined2; } else { mapped.pop(); } return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, getIteratee(iteratee2, 2)) : []; }); var intersectionWith = baseRest(function(arrays) { var comparator = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject); comparator = typeof comparator == "function" ? comparator : undefined2; if (comparator) { mapped.pop(); } return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined2, comparator) : []; }); function join(array, separator) { return array == null ? "" : nativeJoin.call(array, separator); } function last(array) { var length = array == null ? 0 : array.length; return length ? array[length - 1] : undefined2; } function lastIndexOf(array, value, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index = length; if (fromIndex !== undefined2) { index = toInteger2(fromIndex); index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); } return value === value ? strictLastIndexOf(array, value, index) : baseFindIndex(array, baseIsNaN, index, true); } function nth(array, n2) { return array && array.length ? baseNth(array, toInteger2(n2)) : undefined2; } var pull = baseRest(pullAll); function pullAll(array, values2) { return array && array.length && values2 && values2.length ? basePullAll(array, values2) : array; } function pullAllBy(array, values2, iteratee2) { return array && array.length && values2 && values2.length ? basePullAll(array, values2, getIteratee(iteratee2, 2)) : array; } function pullAllWith(array, values2, comparator) { return array && array.length && values2 && values2.length ? basePullAll(array, values2, undefined2, comparator) : array; } var pullAt = flatRest(function(array, indexes) { var length = array == null ? 0 : array.length, result2 = baseAt(array, indexes); basePullAt(array, arrayMap(indexes, function(index) { return isIndex(index, length) ? +index : index; }).sort(compareAscending)); return result2; }); function remove(array, predicate) { var result2 = []; if (!(array && array.length)) { return result2; } var index = -1, indexes = [], length = array.length; predicate = getIteratee(predicate, 3); while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { result2.push(value); indexes.push(index); } } basePullAt(array, indexes); return result2; } function reverse(array) { return array == null ? array : nativeReverse.call(array); } function slice(array, start, end) { var length = array == null ? 0 : array.length; if (!length) { return []; } if (end && typeof end != "number" && isIterateeCall(array, start, end)) { start = 0; end = length; } else { start = start == null ? 0 : toInteger2(start); end = end === undefined2 ? length : toInteger2(end); } return baseSlice(array, start, end); } function sortedIndex(array, value) { return baseSortedIndex(array, value); } function sortedIndexBy(array, value, iteratee2) { return baseSortedIndexBy(array, value, getIteratee(iteratee2, 2)); } function sortedIndexOf(array, value) { var length = array == null ? 0 : array.length; if (length) { var index = baseSortedIndex(array, value); if (index < length && eq(array[index], value)) { return index; } } return -1; } function sortedLastIndex(array, value) { return baseSortedIndex(array, value, true); } function sortedLastIndexBy(array, value, iteratee2) { return baseSortedIndexBy(array, value, getIteratee(iteratee2, 2), true); } function sortedLastIndexOf(array, value) { var length = array == null ? 0 : array.length; if (length) { var index = baseSortedIndex(array, value, true) - 1; if (eq(array[index], value)) { return index; } } return -1; } function sortedUniq(array) { return array && array.length ? baseSortedUniq(array) : []; } function sortedUniqBy(array, iteratee2) { return array && array.length ? baseSortedUniq(array, getIteratee(iteratee2, 2)) : []; } function tail(array) { var length = array == null ? 0 : array.length; return length ? baseSlice(array, 1, length) : []; } function take(array, n2, guard) { if (!(array && array.length)) { return []; } n2 = guard || n2 === undefined2 ? 1 : toInteger2(n2); return baseSlice(array, 0, n2 < 0 ? 0 : n2); } function takeRight(array, n2, guard) { var length = array == null ? 0 : array.length; if (!length) { return []; } n2 = guard || n2 === undefined2 ? 1 : toInteger2(n2); n2 = length - n2; return baseSlice(array, n2 < 0 ? 0 : n2, length); } function takeRightWhile(array, predicate) { return array && array.length ? baseWhile(array, getIteratee(predicate, 3), false, true) : []; } function takeWhile(array, predicate) { return array && array.length ? baseWhile(array, getIteratee(predicate, 3)) : []; } var union = baseRest(function(arrays) { return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); }); var unionBy = baseRest(function(arrays) { var iteratee2 = last(arrays); if (isArrayLikeObject(iteratee2)) { iteratee2 = undefined2; } return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2)); }); var unionWith = baseRest(function(arrays) { var comparator = last(arrays); comparator = typeof comparator == "function" ? comparator : undefined2; return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined2, comparator); }); function uniq6(array) { return array && array.length ? baseUniq(array) : []; } function uniqBy(array, iteratee2) { return array && array.length ? baseUniq(array, getIteratee(iteratee2, 2)) : []; } function uniqWith(array, comparator) { comparator = typeof comparator == "function" ? comparator : undefined2; return array && array.length ? baseUniq(array, undefined2, comparator) : []; } function unzip(array) { if (!(array && array.length)) { return []; } var length = 0; array = arrayFilter(array, function(group) { if (isArrayLikeObject(group)) { length = nativeMax(group.length, length); return true; } }); return baseTimes(length, function(index) { return arrayMap(array, baseProperty(index)); }); } function unzipWith(array, iteratee2) { if (!(array && array.length)) { return []; } var result2 = unzip(array); if (iteratee2 == null) { return result2; } return arrayMap(result2, function(group) { return apply(iteratee2, undefined2, group); }); } var without = baseRest(function(array, values2) { return isArrayLikeObject(array) ? baseDifference(array, values2) : []; }); var xor = baseRest(function(arrays) { return baseXor(arrayFilter(arrays, isArrayLikeObject)); }); var xorBy = baseRest(function(arrays) { var iteratee2 = last(arrays); if (isArrayLikeObject(iteratee2)) { iteratee2 = undefined2; } return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee2, 2)); }); var xorWith = baseRest(function(arrays) { var comparator = last(arrays); comparator = typeof comparator == "function" ? comparator : undefined2; return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined2, comparator); }); var zip = baseRest(unzip); function zipObject(props2, values2) { return baseZipObject(props2 || [], values2 || [], assignValue); } function zipObjectDeep(props2, values2) { return baseZipObject(props2 || [], values2 || [], baseSet); } var zipWith = baseRest(function(arrays) { var length = arrays.length, iteratee2 = length > 1 ? arrays[length - 1] : undefined2; iteratee2 = typeof iteratee2 == "function" ? (arrays.pop(), iteratee2) : undefined2; return unzipWith(arrays, iteratee2); }); function chain(value) { var result2 = lodash(value); result2.__chain__ = true; return result2; } function tap(value, interceptor) { interceptor(value); return value; } function thru(value, interceptor) { return interceptor(value); } var wrapperAt = flatRest(function(paths) { var length = paths.length, start = length ? paths[0] : 0, value = this.__wrapped__, interceptor = function(object) { return baseAt(object, paths); }; if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) { return this.thru(interceptor); } value = value.slice(start, +start + (length ? 1 : 0)); value.__actions__.push({ "func": thru, "args": [interceptor], "thisArg": undefined2 }); return new LodashWrapper(value, this.__chain__).thru(function(array) { if (length && !array.length) { array.push(undefined2); } return array; }); }); function wrapperChain() { return chain(this); } function wrapperCommit() { return new LodashWrapper(this.value(), this.__chain__); } function wrapperNext() { if (this.__values__ === undefined2) { this.__values__ = toArray(this.value()); } var done = this.__index__ >= this.__values__.length, value = done ? undefined2 : this.__values__[this.__index__++]; return { "done": done, "value": value }; } function wrapperToIterator() { return this; } function wrapperPlant(value) { var result2, parent2 = this; while (parent2 instanceof baseLodash) { var clone2 = wrapperClone(parent2); clone2.__index__ = 0; clone2.__values__ = undefined2; if (result2) { previous.__wrapped__ = clone2; } else { result2 = clone2; } var previous = clone2; parent2 = parent2.__wrapped__; } previous.__wrapped__ = value; return result2; } function wrapperReverse() { var value = this.__wrapped__; if (value instanceof LazyWrapper) { var wrapped = value; if (this.__actions__.length) { wrapped = new LazyWrapper(this); } wrapped = wrapped.reverse(); wrapped.__actions__.push({ "func": thru, "args": [reverse], "thisArg": undefined2 }); return new LodashWrapper(wrapped, this.__chain__); } return this.thru(reverse); } function wrapperValue() { return baseWrapperValue(this.__wrapped__, this.__actions__); } var countBy = createAggregator(function(result2, value, key2) { if (hasOwnProperty.call(result2, key2)) { ++result2[key2]; } else { baseAssignValue(result2, key2, 1); } }); function every(collection, predicate, guard) { var func = isArray2(collection) ? arrayEvery : baseEvery; if (guard && isIterateeCall(collection, predicate, guard)) { predicate = undefined2; } return func(collection, getIteratee(predicate, 3)); } function filter(collection, predicate) { var func = isArray2(collection) ? arrayFilter : baseFilter; return func(collection, getIteratee(predicate, 3)); } var find = createFind(findIndex2); var findLast = createFind(findLastIndex); function flatMap(collection, iteratee2) { return baseFlatten(map(collection, iteratee2), 1); } function flatMapDeep(collection, iteratee2) { return baseFlatten(map(collection, iteratee2), INFINITY); } function flatMapDepth(collection, iteratee2, depth) { depth = depth === undefined2 ? 1 : toInteger2(depth); return baseFlatten(map(collection, iteratee2), depth); } function forEach(collection, iteratee2) { var func = isArray2(collection) ? arrayEach : baseEach; return func(collection, getIteratee(iteratee2, 3)); } function forEachRight(collection, iteratee2) { var func = isArray2(collection) ? arrayEachRight : baseEachRight; return func(collection, getIteratee(iteratee2, 3)); } var groupBy2 = createAggregator(function(result2, value, key2) { if (hasOwnProperty.call(result2, key2)) { result2[key2].push(value); } else { baseAssignValue(result2, key2, [value]); } }); function includes(collection, value, fromIndex, guard) { collection = isArrayLike(collection) ? collection : values(collection); fromIndex = fromIndex && !guard ? toInteger2(fromIndex) : 0; var length = collection.length; if (fromIndex < 0) { fromIndex = nativeMax(length + fromIndex, 0); } return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1; } var invokeMap = baseRest(function(collection, path, args) { var index = -1, isFunc = typeof path == "function", result2 = isArrayLike(collection) ? Array2(collection.length) : []; baseEach(collection, function(value) { result2[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); }); return result2; }); var keyBy = createAggregator(function(result2, value, key2) { baseAssignValue(result2, key2, value); }); function map(collection, iteratee2) { var func = isArray2(collection) ? arrayMap : baseMap; return func(collection, getIteratee(iteratee2, 3)); } function orderBy(collection, iteratees, orders, guard) { if (collection == null) { return []; } if (!isArray2(iteratees)) { iteratees = iteratees == null ? [] : [iteratees]; } orders = guard ? undefined2 : orders; if (!isArray2(orders)) { orders = orders == null ? [] : [orders]; } return baseOrderBy(collection, iteratees, orders); } var partition = createAggregator(function(result2, value, key2) { result2[key2 ? 0 : 1].push(value); }, function() { return [[], []]; }); function reduce(collection, iteratee2, accumulator) { var func = isArray2(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3; return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEach); } function reduceRight(collection, iteratee2, accumulator) { var func = isArray2(collection) ? arrayReduceRight : baseReduce, initAccum = arguments.length < 3; return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEachRight); } function reject(collection, predicate) { var func = isArray2(collection) ? arrayFilter : baseFilter; return func(collection, negate(getIteratee(predicate, 3))); } function sample(collection) { var func = isArray2(collection) ? arraySample : baseSample; return func(collection); } function sampleSize(collection, n2, guard) { if (guard ? isIterateeCall(collection, n2, guard) : n2 === undefined2) { n2 = 1; } else { n2 = toInteger2(n2); } var func = isArray2(collection) ? arraySampleSize : baseSampleSize; return func(collection, n2); } function shuffle(collection) { var func = isArray2(collection) ? arrayShuffle : baseShuffle; return func(collection); } function size(collection) { if (collection == null) { return 0; } if (isArrayLike(collection)) { return isString(collection) ? stringSize(collection) : collection.length; } var tag = getTag(collection); if (tag == mapTag || tag == setTag) { return collection.size; } return baseKeys(collection).length; } function some(collection, predicate, guard) { var func = isArray2(collection) ? arraySome : baseSome; if (guard && isIterateeCall(collection, predicate, guard)) { predicate = undefined2; } return func(collection, getIteratee(predicate, 3)); } var sortBy = baseRest(function(collection, iteratees) { if (collection == null) { return []; } var length = iteratees.length; if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { iteratees = []; } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { iteratees = [iteratees[0]]; } return baseOrderBy(collection, baseFlatten(iteratees, 1), []); }); var now = ctxNow || function() { return root.Date.now(); }; function after(n2, func) { if (typeof func != "function") { throw new TypeError2(FUNC_ERROR_TEXT); } n2 = toInteger2(n2); return function() { if (--n2 < 1) { return func.apply(this, arguments); } }; } function ary(func, n2, guard) { n2 = guard ? undefined2 : n2; n2 = func && n2 == null ? func.length : n2; return createWrap(func, WRAP_ARY_FLAG, undefined2, undefined2, undefined2, undefined2, n2); } function before(n2, func) { var result2; if (typeof func != "function") { throw new TypeError2(FUNC_ERROR_TEXT); } n2 = toInteger2(n2); return function() { if (--n2 > 0) { result2 = func.apply(this, arguments); } if (n2 <= 1) { func = undefined2; } return result2; }; } var bind = baseRest(function(func, thisArg, partials) { var bitmask = WRAP_BIND_FLAG; if (partials.length) { var holders = replaceHolders(partials, getHolder(bind)); bitmask |= WRAP_PARTIAL_FLAG; } return createWrap(func, bitmask, thisArg, partials, holders); }); var bindKey = baseRest(function(object, key2, partials) { var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; if (partials.length) { var holders = replaceHolders(partials, getHolder(bindKey)); bitmask |= WRAP_PARTIAL_FLAG; } return createWrap(key2, bitmask, object, partials, holders); }); function curry(func, arity, guard) { arity = guard ? undefined2 : arity; var result2 = createWrap(func, WRAP_CURRY_FLAG, undefined2, undefined2, undefined2, undefined2, undefined2, arity); result2.placeholder = curry.placeholder; return result2; } function curryRight(func, arity, guard) { arity = guard ? undefined2 : arity; var result2 = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined2, undefined2, undefined2, undefined2, undefined2, arity); result2.placeholder = curryRight.placeholder; return result2; } function debounce4(func, wait, options) { var lastArgs, lastThis, maxWait, result2, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; if (typeof func != "function") { throw new TypeError2(FUNC_ERROR_TEXT); } wait = toNumber(wait) || 0; if (isObject(options)) { leading = !!options.leading; maxing = "maxWait" in options; maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; trailing = "trailing" in options ? !!options.trailing : trailing; } function invokeFunc(time) { var args = lastArgs, thisArg = lastThis; lastArgs = lastThis = undefined2; lastInvokeTime = time; result2 = func.apply(thisArg, args); return result2; } function leadingEdge(time) { lastInvokeTime = time; timerId = setTimeout2(timerExpired, wait); return leading ? invokeFunc(time) : result2; } function remainingWait(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; } function shouldInvoke(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; return lastCallTime === undefined2 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; } function timerExpired() { var time = now(); if (shouldInvoke(time)) { return trailingEdge(time); } timerId = setTimeout2(timerExpired, remainingWait(time)); } function trailingEdge(time) { timerId = undefined2; if (trailing && lastArgs) { return invokeFunc(time); } lastArgs = lastThis = undefined2; return result2; } function cancel() { if (timerId !== undefined2) { clearTimeout2(timerId); } lastInvokeTime = 0; lastArgs = lastCallTime = lastThis = timerId = undefined2; } function flush() { return timerId === undefined2 ? result2 : trailingEdge(now()); } function debounced() { var time = now(), isInvoking = shouldInvoke(time); lastArgs = arguments; lastThis = this; lastCallTime = time; if (isInvoking) { if (timerId === undefined2) { return leadingEdge(lastCallTime); } if (maxing) { clearTimeout2(timerId); timerId = setTimeout2(timerExpired, wait); return invokeFunc(lastCallTime); } } if (timerId === undefined2) { timerId = setTimeout2(timerExpired, wait); } return result2; } debounced.cancel = cancel; debounced.flush = flush; return debounced; } var defer = baseRest(function(func, args) { return baseDelay(func, 1, args); }); var delay = baseRest(function(func, wait, args) { return baseDelay(func, toNumber(wait) || 0, args); }); function flip(func) { return createWrap(func, WRAP_FLIP_FLAG); } function memoize(func, resolver) { if (typeof func != "function" || resolver != null && typeof resolver != "function") { throw new TypeError2(FUNC_ERROR_TEXT); } var memoized = function() { var args = arguments, key2 = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key2)) { return cache.get(key2); } var result2 = func.apply(this, args); memoized.cache = cache.set(key2, result2) || cache; return result2; }; memoized.cache = new (memoize.Cache || MapCache2)(); return memoized; } memoize.Cache = MapCache2; function negate(predicate) { if (typeof predicate != "function") { throw new TypeError2(FUNC_ERROR_TEXT); } return function() { var args = arguments; switch (args.length) { case 0: return !predicate.call(this); case 1: return !predicate.call(this, args[0]); case 2: return !predicate.call(this, args[0], args[1]); case 3: return !predicate.call(this, args[0], args[1], args[2]); } return !predicate.apply(this, args); }; } function once(func) { return before(2, func); } var overArgs = castRest(function(func, transforms) { transforms = transforms.length == 1 && isArray2(transforms[0]) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); var funcsLength = transforms.length; return baseRest(function(args) { var index = -1, length = nativeMin(args.length, funcsLength); while (++index < length) { args[index] = transforms[index].call(this, args[index]); } return apply(func, this, args); }); }); var partial = baseRest(function(func, partials) { var holders = replaceHolders(partials, getHolder(partial)); return createWrap(func, WRAP_PARTIAL_FLAG, undefined2, partials, holders); }); var partialRight = baseRest(function(func, partials) { var holders = replaceHolders(partials, getHolder(partialRight)); return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined2, partials, holders); }); var rearg = flatRest(function(func, indexes) { return createWrap(func, WRAP_REARG_FLAG, undefined2, undefined2, undefined2, indexes); }); function rest(func, start) { if (typeof func != "function") { throw new TypeError2(FUNC_ERROR_TEXT); } start = start === undefined2 ? start : toInteger2(start); return baseRest(func, start); } function spread(func, start) { if (typeof func != "function") { throw new TypeError2(FUNC_ERROR_TEXT); } start = start == null ? 0 : nativeMax(toInteger2(start), 0); return baseRest(function(args) { var array = args[start], otherArgs = castSlice(args, 0, start); if (array) { arrayPush(otherArgs, array); } return apply(func, this, otherArgs); }); } function throttle(func, wait, options) { var leading = true, trailing = true; if (typeof func != "function") { throw new TypeError2(FUNC_ERROR_TEXT); } if (isObject(options)) { leading = "leading" in options ? !!options.leading : leading; trailing = "trailing" in options ? !!options.trailing : trailing; } return debounce4(func, wait, { "leading": leading, "maxWait": wait, "trailing": trailing }); } function unary(func) { return ary(func, 1); } function wrap(value, wrapper) { return partial(castFunction(wrapper), value); } function castArray() { if (!arguments.length) { return []; } var value = arguments[0]; return isArray2(value) ? value : [value]; } function clone(value) { return baseClone(value, CLONE_SYMBOLS_FLAG); } function cloneWith(value, customizer) { customizer = typeof customizer == "function" ? customizer : undefined2; return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); } function cloneDeep(value) { return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); } function cloneDeepWith(value, customizer) { customizer = typeof customizer == "function" ? customizer : undefined2; return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); } function conformsTo(object, source) { return source == null || baseConformsTo(object, source, keys(source)); } function eq(value, other) { return value === other || value !== value && other !== other; } var gt = createRelationalOperation(baseGt); var gte = createRelationalOperation(function(value, other) { return value >= other; }); var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee"); }; var isArray2 = Array2.isArray; var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction2(value); } function isArrayLikeObject(value) { return isObjectLike(value) && isArrayLike(value); } function isBoolean(value) { return value === true || value === false || isObjectLike(value) && baseGetTag(value) == boolTag; } var isBuffer = nativeIsBuffer || stubFalse; var isDate2 = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; function isElement(value) { return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); } function isEmpty(value) { if (value == null) { return true; } if (isArrayLike(value) && (isArray2(value) || typeof value == "string" || typeof value.splice == "function" || isBuffer(value) || isTypedArray(value) || isArguments(value))) { return !value.length; } var tag = getTag(value); if (tag == mapTag || tag == setTag) { return !value.size; } if (isPrototype(value)) { return !baseKeys(value).length; } for (var key2 in value) { if (hasOwnProperty.call(value, key2)) { return false; } } return true; } function isEqual(value, other) { return baseIsEqual(value, other); } function isEqualWith(value, other, customizer) { customizer = typeof customizer == "function" ? customizer : undefined2; var result2 = customizer ? customizer(value, other) : undefined2; return result2 === undefined2 ? baseIsEqual(value, other, undefined2, customizer) : !!result2; } function isError2(value) { if (!isObjectLike(value)) { return false; } var tag = baseGetTag(value); return tag == errorTag || tag == domExcTag || typeof value.message == "string" && typeof value.name == "string" && !isPlainObject(value); } function isFinite(value) { return typeof value == "number" && nativeIsFinite(value); } function isFunction2(value) { if (!isObject(value)) { return false; } var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } function isInteger(value) { return typeof value == "number" && value == toInteger2(value); } function isLength(value) { return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } function isObject(value) { var type = typeof value; return value != null && (type == "object" || type == "function"); } function isObjectLike(value) { return value != null && typeof value == "object"; } var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; function isMatch2(object, source) { return object === source || baseIsMatch(object, source, getMatchData(source)); } function isMatchWith(object, source, customizer) { customizer = typeof customizer == "function" ? customizer : undefined2; return baseIsMatch(object, source, getMatchData(source), customizer); } function isNaN2(value) { return isNumber(value) && value != +value; } function isNative(value) { if (isMaskable(value)) { throw new Error2(CORE_ERROR_TEXT); } return baseIsNative(value); } function isNull(value) { return value === null; } function isNil(value) { return value == null; } function isNumber(value) { return typeof value == "number" || isObjectLike(value) && baseGetTag(value) == numberTag; } function isPlainObject(value) { if (!isObjectLike(value) || baseGetTag(value) != objectTag) { return false; } var proto = getPrototype(value); if (proto === null) { return true; } var Ctor = hasOwnProperty.call(proto, "constructor") && proto.constructor; return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; function isSafeInteger(value) { return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; } var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; function isString(value) { return typeof value == "string" || !isArray2(value) && isObjectLike(value) && baseGetTag(value) == stringTag; } function isSymbol(value) { return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag; } var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; function isUndefined(value) { return value === undefined2; } function isWeakMap(value) { return isObjectLike(value) && getTag(value) == weakMapTag; } function isWeakSet(value) { return isObjectLike(value) && baseGetTag(value) == weakSetTag; } var lt = createRelationalOperation(baseLt); var lte = createRelationalOperation(function(value, other) { return value <= other; }); function toArray(value) { if (!value) { return []; } if (isArrayLike(value)) { return isString(value) ? stringToArray(value) : copyArray(value); } if (symIterator && value[symIterator]) { return iteratorToArray(value[symIterator]()); } var tag = getTag(value), func = tag == mapTag ? mapToArray : tag == setTag ? setToArray : values; return func(value); } function toFinite(value) { if (!value) { return value === 0 ? value : 0; } value = toNumber(value); if (value === INFINITY || value === -INFINITY) { var sign = value < 0 ? -1 : 1; return sign * MAX_INTEGER; } return value === value ? value : 0; } function toInteger2(value) { var result2 = toFinite(value), remainder = result2 % 1; return result2 === result2 ? remainder ? result2 - remainder : result2 : 0; } function toLength(value) { return value ? baseClamp(toInteger2(value), 0, MAX_ARRAY_LENGTH) : 0; } function toNumber(value) { if (typeof value == "number") { return value; } if (isSymbol(value)) { return NAN; } if (isObject(value)) { var other = typeof value.valueOf == "function" ? value.valueOf() : value; value = isObject(other) ? other + "" : other; } if (typeof value != "string") { return value === 0 ? value : +value; } value = baseTrim(value); var isBinary = reIsBinary.test(value); return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; } function toPlainObject(value) { return copyObject(value, keysIn(value)); } function toSafeInteger(value) { return value ? baseClamp(toInteger2(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) : value === 0 ? value : 0; } function toString2(value) { return value == null ? "" : baseToString(value); } var assign2 = createAssigner(function(object, source) { if (isPrototype(source) || isArrayLike(source)) { copyObject(source, keys(source), object); return; } for (var key2 in source) { if (hasOwnProperty.call(source, key2)) { assignValue(object, key2, source[key2]); } } }); var assignIn = createAssigner(function(object, source) { copyObject(source, keysIn(source), object); }); var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { copyObject(source, keysIn(source), object, customizer); }); var assignWith = createAssigner(function(object, source, srcIndex, customizer) { copyObject(source, keys(source), object, customizer); }); var at = flatRest(baseAt); function create(prototype, properties2) { var result2 = baseCreate(prototype); return properties2 == null ? result2 : baseAssign(result2, properties2); } var defaults = baseRest(function(object, sources) { object = Object2(object); var index = -1; var length = sources.length; var guard = length > 2 ? sources[2] : undefined2; if (guard && isIterateeCall(sources[0], sources[1], guard)) { length = 1; } while (++index < length) { var source = sources[index]; var props2 = keysIn(source); var propsIndex = -1; var propsLength = props2.length; while (++propsIndex < propsLength) { var key2 = props2[propsIndex]; var value = object[key2]; if (value === undefined2 || eq(value, objectProto[key2]) && !hasOwnProperty.call(object, key2)) { object[key2] = source[key2]; } } } return object; }); var defaultsDeep = baseRest(function(args) { args.push(undefined2, customDefaultsMerge); return apply(mergeWith, undefined2, args); }); function findKey2(object, predicate) { return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); } function findLastKey(object, predicate) { return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); } function forIn(object, iteratee2) { return object == null ? object : baseFor(object, getIteratee(iteratee2, 3), keysIn); } function forInRight(object, iteratee2) { return object == null ? object : baseForRight(object, getIteratee(iteratee2, 3), keysIn); } function forOwn(object, iteratee2) { return object && baseForOwn(object, getIteratee(iteratee2, 3)); } function forOwnRight(object, iteratee2) { return object && baseForOwnRight(object, getIteratee(iteratee2, 3)); } function functions(object) { return object == null ? [] : baseFunctions(object, keys(object)); } function functionsIn(object) { return object == null ? [] : baseFunctions(object, keysIn(object)); } function get(object, path, defaultValue2) { var result2 = object == null ? undefined2 : baseGet(object, path); return result2 === undefined2 ? defaultValue2 : result2; } function has(object, path) { return object != null && hasPath(object, path, baseHas); } function hasIn(object, path) { return object != null && hasPath(object, path, baseHasIn); } var invert = createInverter(function(result2, value, key2) { if (value != null && typeof value.toString != "function") { value = nativeObjectToString.call(value); } result2[value] = key2; }, constant(identity)); var invertBy = createInverter(function(result2, value, key2) { if (value != null && typeof value.toString != "function") { value = nativeObjectToString.call(value); } if (hasOwnProperty.call(result2, value)) { result2[value].push(key2); } else { result2[value] = [key2]; } }, getIteratee); var invoke = baseRest(baseInvoke); function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } function keysIn(object) { return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); } function mapKeys(object, iteratee2) { var result2 = {}; iteratee2 = getIteratee(iteratee2, 3); baseForOwn(object, function(value, key2, object2) { baseAssignValue(result2, iteratee2(value, key2, object2), value); }); return result2; } function mapValues(object, iteratee2) { var result2 = {}; iteratee2 = getIteratee(iteratee2, 3); baseForOwn(object, function(value, key2, object2) { baseAssignValue(result2, key2, iteratee2(value, key2, object2)); }); return result2; } var merge = createAssigner(function(object, source, srcIndex) { baseMerge(object, source, srcIndex); }); var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { baseMerge(object, source, srcIndex, customizer); }); var omit = flatRest(function(object, paths) { var result2 = {}; if (object == null) { return result2; } var isDeep = false; paths = arrayMap(paths, function(path) { path = castPath(path, object); isDeep || (isDeep = path.length > 1); return path; }); copyObject(object, getAllKeysIn(object), result2); if (isDeep) { result2 = baseClone(result2, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); } var length = paths.length; while (length--) { baseUnset(result2, paths[length]); } return result2; }); function omitBy(object, predicate) { return pickBy(object, negate(getIteratee(predicate))); } var pick = flatRest(function(object, paths) { return object == null ? {} : basePick(object, paths); }); function pickBy(object, predicate) { if (object == null) { return {}; } var props2 = arrayMap(getAllKeysIn(object), function(prop) { return [prop]; }); predicate = getIteratee(predicate); return basePickBy(object, props2, function(value, path) { return predicate(value, path[0]); }); } function result(object, path, defaultValue2) { path = castPath(path, object); var index = -1, length = path.length; if (!length) { length = 1; object = undefined2; } while (++index < length) { var value = object == null ? undefined2 : object[toKey(path[index])]; if (value === undefined2) { index = length; value = defaultValue2; } object = isFunction2(value) ? value.call(object) : value; } return object; } function set(object, path, value) { return object == null ? object : baseSet(object, path, value); } function setWith(object, path, value, customizer) { customizer = typeof customizer == "function" ? customizer : undefined2; return object == null ? object : baseSet(object, path, value, customizer); } var toPairs = createToPairs(keys); var toPairsIn = createToPairs(keysIn); function transform(object, iteratee2, accumulator) { var isArr = isArray2(object), isArrLike = isArr || isBuffer(object) || isTypedArray(object); iteratee2 = getIteratee(iteratee2, 4); if (accumulator == null) { var Ctor = object && object.constructor; if (isArrLike) { accumulator = isArr ? new Ctor() : []; } else if (isObject(object)) { accumulator = isFunction2(Ctor) ? baseCreate(getPrototype(object)) : {}; } else { accumulator = {}; } } (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object2) { return iteratee2(accumulator, value, index, object2); }); return accumulator; } function unset(object, path) { return object == null ? true : baseUnset(object, path); } function update(object, path, updater) { return object == null ? object : baseUpdate(object, path, castFunction(updater)); } function updateWith(object, path, updater, customizer) { customizer = typeof customizer == "function" ? customizer : undefined2; return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); } function values(object) { return object == null ? [] : baseValues(object, keys(object)); } function valuesIn(object) { return object == null ? [] : baseValues(object, keysIn(object)); } function clamp(number, lower, upper) { if (upper === undefined2) { upper = lower; lower = undefined2; } if (upper !== undefined2) { upper = toNumber(upper); upper = upper === upper ? upper : 0; } if (lower !== undefined2) { lower = toNumber(lower); lower = lower === lower ? lower : 0; } return baseClamp(toNumber(number), lower, upper); } function inRange(number, start, end) { start = toFinite(start); if (end === undefined2) { end = start; start = 0; } else { end = toFinite(end); } number = toNumber(number); return baseInRange(number, start, end); } function random(lower, upper, floating) { if (floating && typeof floating != "boolean" && isIterateeCall(lower, upper, floating)) { upper = floating = undefined2; } if (floating === undefined2) { if (typeof upper == "boolean") { floating = upper; upper = undefined2; } else if (typeof lower == "boolean") { floating = lower; lower = undefined2; } } if (lower === undefined2 && upper === undefined2) { lower = 0; upper = 1; } else { lower = toFinite(lower); if (upper === undefined2) { upper = lower; lower = 0; } else { upper = toFinite(upper); } } if (lower > upper) { var temp = lower; lower = upper; upper = temp; } if (floating || lower % 1 || upper % 1) { var rand = nativeRandom(); return nativeMin(lower + rand * (upper - lower + freeParseFloat("1e-" + ((rand + "").length - 1))), upper); } return baseRandom(lower, upper); } var camelCase = createCompounder(function(result2, word, index) { word = word.toLowerCase(); return result2 + (index ? capitalize(word) : word); }); function capitalize(string) { return upperFirst(toString2(string).toLowerCase()); } function deburr(string) { string = toString2(string); return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ""); } function endsWith(string, target, position) { string = toString2(string); target = baseToString(target); var length = string.length; position = position === undefined2 ? length : baseClamp(toInteger2(position), 0, length); var end = position; position -= target.length; return position >= 0 && string.slice(position, end) == target; } function escape(string) { string = toString2(string); return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string; } function escapeRegExp(string) { string = toString2(string); return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, "\\$&") : string; } var kebabCase = createCompounder(function(result2, word, index) { return result2 + (index ? "-" : "") + word.toLowerCase(); }); var lowerCase = createCompounder(function(result2, word, index) { return result2 + (index ? " " : "") + word.toLowerCase(); }); var lowerFirst = createCaseFirst("toLowerCase"); function pad(string, length, chars) { string = toString2(string); length = toInteger2(length); var strLength = length ? stringSize(string) : 0; if (!length || strLength >= length) { return string; } var mid = (length - strLength) / 2; return createPadding(nativeFloor(mid), chars) + string + createPadding(nativeCeil(mid), chars); } function padEnd(string, length, chars) { string = toString2(string); length = toInteger2(length); var strLength = length ? stringSize(string) : 0; return length && strLength < length ? string + createPadding(length - strLength, chars) : string; } function padStart(string, length, chars) { string = toString2(string); length = toInteger2(length); var strLength = length ? stringSize(string) : 0; return length && strLength < length ? createPadding(length - strLength, chars) + string : string; } function parseInt2(string, radix, guard) { if (guard || radix == null) { radix = 0; } else if (radix) { radix = +radix; } return nativeParseInt(toString2(string).replace(reTrimStart, ""), radix || 0); } function repeat(string, n2, guard) { if (guard ? isIterateeCall(string, n2, guard) : n2 === undefined2) { n2 = 1; } else { n2 = toInteger2(n2); } return baseRepeat(toString2(string), n2); } function replace() { var args = arguments, string = toString2(args[0]); return args.length < 3 ? string : string.replace(args[1], args[2]); } var snakeCase = createCompounder(function(result2, word, index) { return result2 + (index ? "_" : "") + word.toLowerCase(); }); function split(string, separator, limit) { if (limit && typeof limit != "number" && isIterateeCall(string, separator, limit)) { separator = limit = undefined2; } limit = limit === undefined2 ? MAX_ARRAY_LENGTH : limit >>> 0; if (!limit) { return []; } string = toString2(string); if (string && (typeof separator == "string" || separator != null && !isRegExp(separator))) { separator = baseToString(separator); if (!separator && hasUnicode(string)) { return castSlice(stringToArray(string), 0, limit); } } return string.split(separator, limit); } var startCase = createCompounder(function(result2, word, index) { return result2 + (index ? " " : "") + upperFirst(word); }); function startsWith(string, target, position) { string = toString2(string); position = position == null ? 0 : baseClamp(toInteger2(position), 0, string.length); target = baseToString(target); return string.slice(position, position + target.length) == target; } function template(string, options, guard) { var settings = lodash.templateSettings; if (guard && isIterateeCall(string, options, guard)) { options = undefined2; } string = toString2(string); options = assignInWith({}, options, settings, customDefaultsAssignIn); var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), importsKeys = keys(imports), importsValues = baseValues(imports, importsKeys); var isEscaping, isEvaluating, index = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '"; var reDelimiters = RegExp2( (options.escape || reNoMatch).source + "|" + interpolate.source + "|" + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + "|" + (options.evaluate || reNoMatch).source + "|$", "g" ); var sourceURL = "//# sourceURL=" + (hasOwnProperty.call(options, "sourceURL") ? (options.sourceURL + "").replace(/\s/g, " ") : "lodash.templateSources[" + ++templateCounter + "]") + "\n"; string.replace(reDelimiters, function(match2, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { interpolateValue || (interpolateValue = esTemplateValue); source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); if (escapeValue) { isEscaping = true; source += "' +\n__e(" + escapeValue + ") +\n'"; } if (evaluateValue) { isEvaluating = true; source += "';\n" + evaluateValue + ";\n__p += '"; } if (interpolateValue) { source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; } index = offset + match2.length; return match2; }); source += "';\n"; var variable = hasOwnProperty.call(options, "variable") && options.variable; if (!variable) { source = "with (obj) {\n" + source + "\n}\n"; } else if (reForbiddenIdentifierChars.test(variable)) { throw new Error2(INVALID_TEMPL_VAR_ERROR_TEXT); } source = (isEvaluating ? source.replace(reEmptyStringLeading, "") : source).replace(reEmptyStringMiddle, "$1").replace(reEmptyStringTrailing, "$1;"); source = "function(" + (variable || "obj") + ") {\n" + (variable ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (isEscaping ? ", __e = _.escape" : "") + (isEvaluating ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + source + "return __p\n}"; var result2 = attempt(function() { return Function2(importsKeys, sourceURL + "return " + source).apply(undefined2, importsValues); }); result2.source = source; if (isError2(result2)) { throw result2; } return result2; } function toLower(value) { return toString2(value).toLowerCase(); } function toUpper(value) { return toString2(value).toUpperCase(); } function trim(string, chars, guard) { string = toString2(string); if (string && (guard || chars === undefined2)) { return baseTrim(string); } if (!string || !(chars = baseToString(chars))) { return string; } var strSymbols = stringToArray(string), chrSymbols = stringToArray(chars), start = charsStartIndex(strSymbols, chrSymbols), end = charsEndIndex(strSymbols, chrSymbols) + 1; return castSlice(strSymbols, start, end).join(""); } function trimEnd(string, chars, guard) { string = toString2(string); if (string && (guard || chars === undefined2)) { return string.slice(0, trimmedEndIndex(string) + 1); } if (!string || !(chars = baseToString(chars))) { return string; } var strSymbols = stringToArray(string), end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; return castSlice(strSymbols, 0, end).join(""); } function trimStart(string, chars, guard) { string = toString2(string); if (string && (guard || chars === undefined2)) { return string.replace(reTrimStart, ""); } if (!string || !(chars = baseToString(chars))) { return string; } var strSymbols = stringToArray(string), start = charsStartIndex(strSymbols, stringToArray(chars)); return castSlice(strSymbols, start).join(""); } function truncate(string, options) { var length = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION; if (isObject(options)) { var separator = "separator" in options ? options.separator : separator; length = "length" in options ? toInteger2(options.length) : length; omission = "omission" in options ? baseToString(options.omission) : omission; } string = toString2(string); var strLength = string.length; if (hasUnicode(string)) { var strSymbols = stringToArray(string); strLength = strSymbols.length; } if (length >= strLength) { return string; } var end = length - stringSize(omission); if (end < 1) { return omission; } var result2 = strSymbols ? castSlice(strSymbols, 0, end).join("") : string.slice(0, end); if (separator === undefined2) { return result2 + omission; } if (strSymbols) { end += result2.length - end; } if (isRegExp(separator)) { if (string.slice(end).search(separator)) { var match2, substring = result2; if (!separator.global) { separator = RegExp2(separator.source, toString2(reFlags.exec(separator)) + "g"); } separator.lastIndex = 0; while (match2 = separator.exec(substring)) { var newEnd = match2.index; } result2 = result2.slice(0, newEnd === undefined2 ? end : newEnd); } } else if (string.indexOf(baseToString(separator), end) != end) { var index = result2.lastIndexOf(separator); if (index > -1) { result2 = result2.slice(0, index); } } return result2 + omission; } function unescape(string) { string = toString2(string); return string && reHasEscapedHtml.test(string) ? string.replace(reEscapedHtml, unescapeHtmlChar) : string; } var upperCase = createCompounder(function(result2, word, index) { return result2 + (index ? " " : "") + word.toUpperCase(); }); var upperFirst = createCaseFirst("toUpperCase"); function words(string, pattern, guard) { string = toString2(string); pattern = guard ? undefined2 : pattern; if (pattern === undefined2) { return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); } return string.match(pattern) || []; } var attempt = baseRest(function(func, args) { try { return apply(func, undefined2, args); } catch (e4) { return isError2(e4) ? e4 : new Error2(e4); } }); var bindAll = flatRest(function(object, methodNames) { arrayEach(methodNames, function(key2) { key2 = toKey(key2); baseAssignValue(object, key2, bind(object[key2], object)); }); return object; }); function cond(pairs) { var length = pairs == null ? 0 : pairs.length, toIteratee = getIteratee(); pairs = !length ? [] : arrayMap(pairs, function(pair) { if (typeof pair[1] != "function") { throw new TypeError2(FUNC_ERROR_TEXT); } return [toIteratee(pair[0]), pair[1]]; }); return baseRest(function(args) { var index = -1; while (++index < length) { var pair = pairs[index]; if (apply(pair[0], this, args)) { return apply(pair[1], this, args); } } }); } function conforms(source) { return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); } function constant(value) { return function() { return value; }; } function defaultTo(value, defaultValue2) { return value == null || value !== value ? defaultValue2 : value; } var flow = createFlow(); var flowRight = createFlow(true); function identity(value) { return value; } function iteratee(func) { return baseIteratee(typeof func == "function" ? func : baseClone(func, CLONE_DEEP_FLAG)); } function matches(source) { return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); } function matchesProperty(path, srcValue) { return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); } var method = baseRest(function(path, args) { return function(object) { return baseInvoke(object, path, args); }; }); var methodOf = baseRest(function(object, args) { return function(path) { return baseInvoke(object, path, args); }; }); function mixin(object, source, options) { var props2 = keys(source), methodNames = baseFunctions(source, props2); if (options == null && !(isObject(source) && (methodNames.length || !props2.length))) { options = source; source = object; object = this; methodNames = baseFunctions(source, keys(source)); } var chain2 = !(isObject(options) && "chain" in options) || !!options.chain, isFunc = isFunction2(object); arrayEach(methodNames, function(methodName) { var func = source[methodName]; object[methodName] = func; if (isFunc) { object.prototype[methodName] = function() { var chainAll = this.__chain__; if (chain2 || chainAll) { var result2 = object(this.__wrapped__), actions = result2.__actions__ = copyArray(this.__actions__); actions.push({ "func": func, "args": arguments, "thisArg": object }); result2.__chain__ = chainAll; return result2; } return func.apply(object, arrayPush([this.value()], arguments)); }; } }); return object; } function noConflict() { if (root._ === this) { root._ = oldDash; } return this; } function noop2() { } function nthArg(n2) { n2 = toInteger2(n2); return baseRest(function(args) { return baseNth(args, n2); }); } var over = createOver(arrayMap); var overEvery = createOver(arrayEvery); var overSome = createOver(arraySome); function property(path) { return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); } function propertyOf(object) { return function(path) { return object == null ? undefined2 : baseGet(object, path); }; } var range = createRange(); var rangeRight = createRange(true); function stubArray() { return []; } function stubFalse() { return false; } function stubObject() { return {}; } function stubString() { return ""; } function stubTrue() { return true; } function times(n2, iteratee2) { n2 = toInteger2(n2); if (n2 < 1 || n2 > MAX_SAFE_INTEGER) { return []; } var index = MAX_ARRAY_LENGTH, length = nativeMin(n2, MAX_ARRAY_LENGTH); iteratee2 = getIteratee(iteratee2); n2 -= MAX_ARRAY_LENGTH; var result2 = baseTimes(length, iteratee2); while (++index < n2) { iteratee2(index); } return result2; } function toPath(value) { if (isArray2(value)) { return arrayMap(value, toKey); } return isSymbol(value) ? [value] : copyArray(stringToPath(toString2(value))); } function uniqueId(prefix) { var id2 = ++idCounter; return toString2(prefix) + id2; } var add2 = createMathOperation(function(augend, addend) { return augend + addend; }, 0); var ceil = createRound("ceil"); var divide = createMathOperation(function(dividend, divisor) { return dividend / divisor; }, 1); var floor = createRound("floor"); function max3(array) { return array && array.length ? baseExtremum(array, identity, baseGt) : undefined2; } function maxBy(array, iteratee2) { return array && array.length ? baseExtremum(array, getIteratee(iteratee2, 2), baseGt) : undefined2; } function mean2(array) { return baseMean(array, identity); } function meanBy(array, iteratee2) { return baseMean(array, getIteratee(iteratee2, 2)); } function min3(array) { return array && array.length ? baseExtremum(array, identity, baseLt) : undefined2; } function minBy(array, iteratee2) { return array && array.length ? baseExtremum(array, getIteratee(iteratee2, 2), baseLt) : undefined2; } var multiply = createMathOperation(function(multiplier, multiplicand) { return multiplier * multiplicand; }, 1); var round = createRound("round"); var subtract2 = createMathOperation(function(minuend, subtrahend) { return minuend - subtrahend; }, 0); function sum2(array) { return array && array.length ? baseSum(array, identity) : 0; } function sumBy(array, iteratee2) { return array && array.length ? baseSum(array, getIteratee(iteratee2, 2)) : 0; } lodash.after = after; lodash.ary = ary; lodash.assign = assign2; lodash.assignIn = assignIn; lodash.assignInWith = assignInWith; lodash.assignWith = assignWith; lodash.at = at; lodash.before = before; lodash.bind = bind; lodash.bindAll = bindAll; lodash.bindKey = bindKey; lodash.castArray = castArray; lodash.chain = chain; lodash.chunk = chunk; lodash.compact = compact; lodash.concat = concat; lodash.cond = cond; lodash.conforms = conforms; lodash.constant = constant; lodash.countBy = countBy; lodash.create = create; lodash.curry = curry; lodash.curryRight = curryRight; lodash.debounce = debounce4; lodash.defaults = defaults; lodash.defaultsDeep = defaultsDeep; lodash.defer = defer; lodash.delay = delay; lodash.difference = difference; lodash.differenceBy = differenceBy; lodash.differenceWith = differenceWith; lodash.drop = drop; lodash.dropRight = dropRight; lodash.dropRightWhile = dropRightWhile; lodash.dropWhile = dropWhile; lodash.fill = fill; lodash.filter = filter; lodash.flatMap = flatMap; lodash.flatMapDeep = flatMapDeep; lodash.flatMapDepth = flatMapDepth; lodash.flatten = flatten; lodash.flattenDeep = flattenDeep; lodash.flattenDepth = flattenDepth; lodash.flip = flip; lodash.flow = flow; lodash.flowRight = flowRight; lodash.fromPairs = fromPairs; lodash.functions = functions; lodash.functionsIn = functionsIn; lodash.groupBy = groupBy2; lodash.initial = initial; lodash.intersection = intersection; lodash.intersectionBy = intersectionBy; lodash.intersectionWith = intersectionWith; lodash.invert = invert; lodash.invertBy = invertBy; lodash.invokeMap = invokeMap; lodash.iteratee = iteratee; lodash.keyBy = keyBy; lodash.keys = keys; lodash.keysIn = keysIn; lodash.map = map; lodash.mapKeys = mapKeys; lodash.mapValues = mapValues; lodash.matches = matches; lodash.matchesProperty = matchesProperty; lodash.memoize = memoize; lodash.merge = merge; lodash.mergeWith = mergeWith; lodash.method = method; lodash.methodOf = methodOf; lodash.mixin = mixin; lodash.negate = negate; lodash.nthArg = nthArg; lodash.omit = omit; lodash.omitBy = omitBy; lodash.once = once; lodash.orderBy = orderBy; lodash.over = over; lodash.overArgs = overArgs; lodash.overEvery = overEvery; lodash.overSome = overSome; lodash.partial = partial; lodash.partialRight = partialRight; lodash.partition = partition; lodash.pick = pick; lodash.pickBy = pickBy; lodash.property = property; lodash.propertyOf = propertyOf; lodash.pull = pull; lodash.pullAll = pullAll; lodash.pullAllBy = pullAllBy; lodash.pullAllWith = pullAllWith; lodash.pullAt = pullAt; lodash.range = range; lodash.rangeRight = rangeRight; lodash.rearg = rearg; lodash.reject = reject; lodash.remove = remove; lodash.rest = rest; lodash.reverse = reverse; lodash.sampleSize = sampleSize; lodash.set = set; lodash.setWith = setWith; lodash.shuffle = shuffle; lodash.slice = slice; lodash.sortBy = sortBy; lodash.sortedUniq = sortedUniq; lodash.sortedUniqBy = sortedUniqBy; lodash.split = split; lodash.spread = spread; lodash.tail = tail; lodash.take = take; lodash.takeRight = takeRight; lodash.takeRightWhile = takeRightWhile; lodash.takeWhile = takeWhile; lodash.tap = tap; lodash.throttle = throttle; lodash.thru = thru; lodash.toArray = toArray; lodash.toPairs = toPairs; lodash.toPairsIn = toPairsIn; lodash.toPath = toPath; lodash.toPlainObject = toPlainObject; lodash.transform = transform; lodash.unary = unary; lodash.union = union; lodash.unionBy = unionBy; lodash.unionWith = unionWith; lodash.uniq = uniq6; lodash.uniqBy = uniqBy; lodash.uniqWith = uniqWith; lodash.unset = unset; lodash.unzip = unzip; lodash.unzipWith = unzipWith; lodash.update = update; lodash.updateWith = updateWith; lodash.values = values; lodash.valuesIn = valuesIn; lodash.without = without; lodash.words = words; lodash.wrap = wrap; lodash.xor = xor; lodash.xorBy = xorBy; lodash.xorWith = xorWith; lodash.zip = zip; lodash.zipObject = zipObject; lodash.zipObjectDeep = zipObjectDeep; lodash.zipWith = zipWith; lodash.entries = toPairs; lodash.entriesIn = toPairsIn; lodash.extend = assignIn; lodash.extendWith = assignInWith; mixin(lodash, lodash); lodash.add = add2; lodash.attempt = attempt; lodash.camelCase = camelCase; lodash.capitalize = capitalize; lodash.ceil = ceil; lodash.clamp = clamp; lodash.clone = clone; lodash.cloneDeep = cloneDeep; lodash.cloneDeepWith = cloneDeepWith; lodash.cloneWith = cloneWith; lodash.conformsTo = conformsTo; lodash.deburr = deburr; lodash.defaultTo = defaultTo; lodash.divide = divide; lodash.endsWith = endsWith; lodash.eq = eq; lodash.escape = escape; lodash.escapeRegExp = escapeRegExp; lodash.every = every; lodash.find = find; lodash.findIndex = findIndex2; lodash.findKey = findKey2; lodash.findLast = findLast; lodash.findLastIndex = findLastIndex; lodash.findLastKey = findLastKey; lodash.floor = floor; lodash.forEach = forEach; lodash.forEachRight = forEachRight; lodash.forIn = forIn; lodash.forInRight = forInRight; lodash.forOwn = forOwn; lodash.forOwnRight = forOwnRight; lodash.get = get; lodash.gt = gt; lodash.gte = gte; lodash.has = has; lodash.hasIn = hasIn; lodash.head = head; lodash.identity = identity; lodash.includes = includes; lodash.indexOf = indexOf; lodash.inRange = inRange; lodash.invoke = invoke; lodash.isArguments = isArguments; lodash.isArray = isArray2; lodash.isArrayBuffer = isArrayBuffer; lodash.isArrayLike = isArrayLike; lodash.isArrayLikeObject = isArrayLikeObject; lodash.isBoolean = isBoolean; lodash.isBuffer = isBuffer; lodash.isDate = isDate2; lodash.isElement = isElement; lodash.isEmpty = isEmpty; lodash.isEqual = isEqual; lodash.isEqualWith = isEqualWith; lodash.isError = isError2; lodash.isFinite = isFinite; lodash.isFunction = isFunction2; lodash.isInteger = isInteger; lodash.isLength = isLength; lodash.isMap = isMap; lodash.isMatch = isMatch2; lodash.isMatchWith = isMatchWith; lodash.isNaN = isNaN2; lodash.isNative = isNative; lodash.isNil = isNil; lodash.isNull = isNull; lodash.isNumber = isNumber; lodash.isObject = isObject; lodash.isObjectLike = isObjectLike; lodash.isPlainObject = isPlainObject; lodash.isRegExp = isRegExp; lodash.isSafeInteger = isSafeInteger; lodash.isSet = isSet; lodash.isString = isString; lodash.isSymbol = isSymbol; lodash.isTypedArray = isTypedArray; lodash.isUndefined = isUndefined; lodash.isWeakMap = isWeakMap; lodash.isWeakSet = isWeakSet; lodash.join = join; lodash.kebabCase = kebabCase; lodash.last = last; lodash.lastIndexOf = lastIndexOf; lodash.lowerCase = lowerCase; lodash.lowerFirst = lowerFirst; lodash.lt = lt; lodash.lte = lte; lodash.max = max3; lodash.maxBy = maxBy; lodash.mean = mean2; lodash.meanBy = meanBy; lodash.min = min3; lodash.minBy = minBy; lodash.stubArray = stubArray; lodash.stubFalse = stubFalse; lodash.stubObject = stubObject; lodash.stubString = stubString; lodash.stubTrue = stubTrue; lodash.multiply = multiply; lodash.nth = nth; lodash.noConflict = noConflict; lodash.noop = noop2; lodash.now = now; lodash.pad = pad; lodash.padEnd = padEnd; lodash.padStart = padStart; lodash.parseInt = parseInt2; lodash.random = random; lodash.reduce = reduce; lodash.reduceRight = reduceRight; lodash.repeat = repeat; lodash.replace = replace; lodash.result = result; lodash.round = round; lodash.runInContext = runInContext2; lodash.sample = sample; lodash.size = size; lodash.snakeCase = snakeCase; lodash.some = some; lodash.sortedIndex = sortedIndex; lodash.sortedIndexBy = sortedIndexBy; lodash.sortedIndexOf = sortedIndexOf; lodash.sortedLastIndex = sortedLastIndex; lodash.sortedLastIndexBy = sortedLastIndexBy; lodash.sortedLastIndexOf = sortedLastIndexOf; lodash.startCase = startCase; lodash.startsWith = startsWith; lodash.subtract = subtract2; lodash.sum = sum2; lodash.sumBy = sumBy; lodash.template = template; lodash.times = times; lodash.toFinite = toFinite; lodash.toInteger = toInteger2; lodash.toLength = toLength; lodash.toLower = toLower; lodash.toNumber = toNumber; lodash.toSafeInteger = toSafeInteger; lodash.toString = toString2; lodash.toUpper = toUpper; lodash.trim = trim; lodash.trimEnd = trimEnd; lodash.trimStart = trimStart; lodash.truncate = truncate; lodash.unescape = unescape; lodash.uniqueId = uniqueId; lodash.upperCase = upperCase; lodash.upperFirst = upperFirst; lodash.each = forEach; lodash.eachRight = forEachRight; lodash.first = head; mixin(lodash, function() { var source = {}; baseForOwn(lodash, function(func, methodName) { if (!hasOwnProperty.call(lodash.prototype, methodName)) { source[methodName] = func; } }); return source; }(), { "chain": false }); lodash.VERSION = VERSION; arrayEach(["bind", "bindKey", "curry", "curryRight", "partial", "partialRight"], function(methodName) { lodash[methodName].placeholder = lodash; }); arrayEach(["drop", "take"], function(methodName, index) { LazyWrapper.prototype[methodName] = function(n2) { n2 = n2 === undefined2 ? 1 : nativeMax(toInteger2(n2), 0); var result2 = this.__filtered__ && !index ? new LazyWrapper(this) : this.clone(); if (result2.__filtered__) { result2.__takeCount__ = nativeMin(n2, result2.__takeCount__); } else { result2.__views__.push({ "size": nativeMin(n2, MAX_ARRAY_LENGTH), "type": methodName + (result2.__dir__ < 0 ? "Right" : "") }); } return result2; }; LazyWrapper.prototype[methodName + "Right"] = function(n2) { return this.reverse()[methodName](n2).reverse(); }; }); arrayEach(["filter", "map", "takeWhile"], function(methodName, index) { var type = index + 1, isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; LazyWrapper.prototype[methodName] = function(iteratee2) { var result2 = this.clone(); result2.__iteratees__.push({ "iteratee": getIteratee(iteratee2, 3), "type": type }); result2.__filtered__ = result2.__filtered__ || isFilter; return result2; }; }); arrayEach(["head", "last"], function(methodName, index) { var takeName = "take" + (index ? "Right" : ""); LazyWrapper.prototype[methodName] = function() { return this[takeName](1).value()[0]; }; }); arrayEach(["initial", "tail"], function(methodName, index) { var dropName = "drop" + (index ? "" : "Right"); LazyWrapper.prototype[methodName] = function() { return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); }; }); LazyWrapper.prototype.compact = function() { return this.filter(identity); }; LazyWrapper.prototype.find = function(predicate) { return this.filter(predicate).head(); }; LazyWrapper.prototype.findLast = function(predicate) { return this.reverse().find(predicate); }; LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { if (typeof path == "function") { return new LazyWrapper(this); } return this.map(function(value) { return baseInvoke(value, path, args); }); }); LazyWrapper.prototype.reject = function(predicate) { return this.filter(negate(getIteratee(predicate))); }; LazyWrapper.prototype.slice = function(start, end) { start = toInteger2(start); var result2 = this; if (result2.__filtered__ && (start > 0 || end < 0)) { return new LazyWrapper(result2); } if (start < 0) { result2 = result2.takeRight(-start); } else if (start) { result2 = result2.drop(start); } if (end !== undefined2) { end = toInteger2(end); result2 = end < 0 ? result2.dropRight(-end) : result2.take(end - start); } return result2; }; LazyWrapper.prototype.takeRightWhile = function(predicate) { return this.reverse().takeWhile(predicate).reverse(); }; LazyWrapper.prototype.toArray = function() { return this.take(MAX_ARRAY_LENGTH); }; baseForOwn(LazyWrapper.prototype, function(func, methodName) { var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), isTaker = /^(?:head|last)$/.test(methodName), lodashFunc = lodash[isTaker ? "take" + (methodName == "last" ? "Right" : "") : methodName], retUnwrapped = isTaker || /^find/.test(methodName); if (!lodashFunc) { return; } lodash.prototype[methodName] = function() { var value = this.__wrapped__, args = isTaker ? [1] : arguments, isLazy = value instanceof LazyWrapper, iteratee2 = args[0], useLazy = isLazy || isArray2(value); var interceptor = function(value2) { var result3 = lodashFunc.apply(lodash, arrayPush([value2], args)); return isTaker && chainAll ? result3[0] : result3; }; if (useLazy && checkIteratee && typeof iteratee2 == "function" && iteratee2.length != 1) { isLazy = useLazy = false; } var chainAll = this.__chain__, isHybrid = !!this.__actions__.length, isUnwrapped = retUnwrapped && !chainAll, onlyLazy = isLazy && !isHybrid; if (!retUnwrapped && useLazy) { value = onlyLazy ? value : new LazyWrapper(this); var result2 = func.apply(value, args); result2.__actions__.push({ "func": thru, "args": [interceptor], "thisArg": undefined2 }); return new LodashWrapper(result2, chainAll); } if (isUnwrapped && onlyLazy) { return func.apply(this, args); } result2 = this.thru(interceptor); return isUnwrapped ? isTaker ? result2.value()[0] : result2.value() : result2; }; }); arrayEach(["pop", "push", "shift", "sort", "splice", "unshift"], function(methodName) { var func = arrayProto[methodName], chainName = /^(?:push|sort|unshift)$/.test(methodName) ? "tap" : "thru", retUnwrapped = /^(?:pop|shift)$/.test(methodName); lodash.prototype[methodName] = function() { var args = arguments; if (retUnwrapped && !this.__chain__) { var value = this.value(); return func.apply(isArray2(value) ? value : [], args); } return this[chainName](function(value2) { return func.apply(isArray2(value2) ? value2 : [], args); }); }; }); baseForOwn(LazyWrapper.prototype, function(func, methodName) { var lodashFunc = lodash[methodName]; if (lodashFunc) { var key2 = lodashFunc.name + ""; if (!hasOwnProperty.call(realNames, key2)) { realNames[key2] = []; } realNames[key2].push({ "name": methodName, "func": lodashFunc }); } }); realNames[createHybrid(undefined2, WRAP_BIND_KEY_FLAG).name] = [{ "name": "wrapper", "func": undefined2 }]; LazyWrapper.prototype.clone = lazyClone; LazyWrapper.prototype.reverse = lazyReverse; LazyWrapper.prototype.value = lazyValue; lodash.prototype.at = wrapperAt; lodash.prototype.chain = wrapperChain; lodash.prototype.commit = wrapperCommit; lodash.prototype.next = wrapperNext; lodash.prototype.plant = wrapperPlant; lodash.prototype.reverse = wrapperReverse; lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; lodash.prototype.first = lodash.prototype.head; if (symIterator) { lodash.prototype[symIterator] = wrapperToIterator; } return lodash; }; var _5 = runInContext(); if (typeof define == "function" && typeof define.amd == "object" && define.amd) { root._ = _5; define(function() { return _5; }); } else if (freeModule) { (freeModule.exports = _5)._ = _5; freeExports._ = _5; } else { root._ = _5; } }).call(exports); } }); // node_modules/sql.js/dist/sql-wasm.js var require_sql_wasm = __commonJS({ "node_modules/sql.js/dist/sql-wasm.js"(exports, module2) { var initSqlJsPromise = void 0; var initSqlJs2 = function(moduleConfig) { if (initSqlJsPromise) { return initSqlJsPromise; } initSqlJsPromise = new Promise(function(resolveModule, reject) { var Module = typeof moduleConfig !== "undefined" ? moduleConfig : {}; var originalOnAbortFunction = Module["onAbort"]; Module["onAbort"] = function(errorThatCausedAbort) { reject(new Error(errorThatCausedAbort)); if (originalOnAbortFunction) { originalOnAbortFunction(errorThatCausedAbort); } }; Module["postRun"] = Module["postRun"] || []; Module["postRun"].push(function() { resolveModule(Module); }); module2 = void 0; var e4; e4 || (e4 = typeof Module !== "undefined" ? Module : {}); null; e4.onRuntimeInitialized = function() { function a5(g4, m5) { switch (typeof m5) { case "boolean": gc(g4, m5 ? 1 : 0); break; case "number": hc(g4, m5); break; case "string": ic(g4, m5, -1, -1); break; case "object": if (null === m5) kb(g4); else if (null != m5.length) { var n2 = aa(m5); jc(g4, n2, m5.length, -1); ba(n2); } else xa(g4, "Wrong API use : tried to return a value of an unknown type (" + m5 + ").", -1); break; default: kb(g4); } } function b4(g4, m5) { for (var n2 = [], p3 = 0; p3 < g4; p3 += 1) { var v3 = l3(m5 + 4 * p3, "i32"), y5 = kc(v3); if (1 === y5 || 2 === y5) v3 = lc(v3); else if (3 === y5) v3 = mc(v3); else if (4 === y5) { y5 = v3; v3 = nc(y5); y5 = oc(y5); for (var L4 = new Uint8Array(v3), G3 = 0; G3 < v3; G3 += 1) L4[G3] = r3[y5 + G3]; v3 = L4; } else v3 = null; n2.push(v3); } return n2; } function c4(g4, m5) { this.La = g4; this.db = m5; this.Ja = 1; this.fb = []; } function d5(g4, m5) { this.db = m5; m5 = ca(g4) + 1; this.Ya = da(m5); if (null === this.Ya) throw Error("Unable to allocate memory for the SQL string"); t4(g4, u4, this.Ya, m5); this.eb = this.Ya; this.Ua = this.ib = null; } function f4(g4) { this.filename = "dbfile_" + (4294967295 * Math.random() >>> 0); if (null != g4) { var m5 = this.filename, n2 = "/", p3 = m5; n2 && (n2 = "string" == typeof n2 ? n2 : ea(n2), p3 = m5 ? z5(n2 + "/" + m5) : n2); m5 = fa( true, true ); p3 = ha(p3, (void 0 !== m5 ? m5 : 438) & 4095 | 32768, 0); if (g4) { if ("string" == typeof g4) { n2 = Array(g4.length); for (var v3 = 0, y5 = g4.length; v3 < y5; ++v3) n2[v3] = g4.charCodeAt(v3); g4 = n2; } ia(p3, m5 | 146); n2 = ja(p3, 577); ka(n2, g4, 0, g4.length, 0); la(n2); ia(p3, m5); } } this.handleError(q5(this.filename, h5)); this.db = l3(h5, "i32"); pc(this.db); this.Za = {}; this.Na = {}; } var h5 = B5(4), k5 = e4.cwrap, q5 = k5("sqlite3_open", "number", ["string", "number"]), x5 = k5("sqlite3_close_v2", "number", ["number"]), w5 = k5("sqlite3_exec", "number", ["number", "string", "number", "number", "number"]), A4 = k5( "sqlite3_changes", "number", ["number"] ), S4 = k5("sqlite3_prepare_v2", "number", ["number", "string", "number", "number", "number"]), nb = k5("sqlite3_sql", "string", ["number"]), qc = k5("sqlite3_normalized_sql", "string", ["number"]), ob = k5("sqlite3_prepare_v2", "number", ["number", "number", "number", "number", "number"]), rc = k5("sqlite3_bind_text", "number", ["number", "number", "number", "number", "number"]), pb = k5("sqlite3_bind_blob", "number", ["number", "number", "number", "number", "number"]), sc = k5("sqlite3_bind_double", "number", ["number", "number", "number"]), tc = k5("sqlite3_bind_int", "number", ["number", "number", "number"]), uc = k5("sqlite3_bind_parameter_index", "number", ["number", "string"]), vc = k5("sqlite3_step", "number", ["number"]), wc = k5("sqlite3_errmsg", "string", ["number"]), xc = k5("sqlite3_column_count", "number", ["number"]), yc = k5("sqlite3_data_count", "number", ["number"]), zc = k5("sqlite3_column_double", "number", ["number", "number"]), qb = k5("sqlite3_column_text", "string", ["number", "number"]), Ac = k5("sqlite3_column_blob", "number", ["number", "number"]), Bc = k5( "sqlite3_column_bytes", "number", ["number", "number"] ), Cc = k5("sqlite3_column_type", "number", ["number", "number"]), Dc = k5("sqlite3_column_name", "string", ["number", "number"]), Ec = k5("sqlite3_reset", "number", ["number"]), Fc = k5("sqlite3_clear_bindings", "number", ["number"]), Gc = k5("sqlite3_finalize", "number", ["number"]), rb = k5("sqlite3_create_function_v2", "number", "number string number number number number number number number".split(" ")), kc = k5("sqlite3_value_type", "number", ["number"]), nc = k5("sqlite3_value_bytes", "number", ["number"]), mc = k5( "sqlite3_value_text", "string", ["number"] ), oc = k5("sqlite3_value_blob", "number", ["number"]), lc = k5("sqlite3_value_double", "number", ["number"]), hc = k5("sqlite3_result_double", "", ["number", "number"]), kb = k5("sqlite3_result_null", "", ["number"]), ic = k5("sqlite3_result_text", "", ["number", "string", "number", "number"]), jc = k5("sqlite3_result_blob", "", ["number", "number", "number", "number"]), gc = k5("sqlite3_result_int", "", ["number", "number"]), xa = k5("sqlite3_result_error", "", ["number", "string", "number"]), sb = k5( "sqlite3_aggregate_context", "number", ["number", "number"] ), pc = k5("RegisterExtensionFunctions", "number", ["number"]); c4.prototype.bind = function(g4) { if (!this.La) throw "Statement closed"; this.reset(); return Array.isArray(g4) ? this.xb(g4) : null != g4 && "object" === typeof g4 ? this.yb(g4) : true; }; c4.prototype.step = function() { if (!this.La) throw "Statement closed"; this.Ja = 1; var g4 = vc(this.La); switch (g4) { case 100: return true; case 101: return false; default: throw this.db.handleError(g4); } }; c4.prototype.sb = function(g4) { null == g4 && (g4 = this.Ja, this.Ja += 1); return zc(this.La, g4); }; c4.prototype.Cb = function(g4) { null == g4 && (g4 = this.Ja, this.Ja += 1); g4 = qb(this.La, g4); if ("function" !== typeof BigInt) throw Error("BigInt is not supported"); return BigInt(g4); }; c4.prototype.Db = function(g4) { null == g4 && (g4 = this.Ja, this.Ja += 1); return qb(this.La, g4); }; c4.prototype.getBlob = function(g4) { null == g4 && (g4 = this.Ja, this.Ja += 1); var m5 = Bc(this.La, g4); g4 = Ac(this.La, g4); for (var n2 = new Uint8Array(m5), p3 = 0; p3 < m5; p3 += 1) n2[p3] = r3[g4 + p3]; return n2; }; c4.prototype.get = function(g4, m5) { m5 = m5 || {}; null != g4 && this.bind(g4) && this.step(); g4 = []; for (var n2 = yc(this.La), p3 = 0; p3 < n2; p3 += 1) switch (Cc(this.La, p3)) { case 1: var v3 = m5.useBigInt ? this.Cb(p3) : this.sb(p3); g4.push(v3); break; case 2: g4.push(this.sb(p3)); break; case 3: g4.push(this.Db(p3)); break; case 4: g4.push(this.getBlob(p3)); break; default: g4.push(null); } return g4; }; c4.prototype.getColumnNames = function() { for (var g4 = [], m5 = xc(this.La), n2 = 0; n2 < m5; n2 += 1) g4.push(Dc(this.La, n2)); return g4; }; c4.prototype.getAsObject = function(g4, m5) { g4 = this.get(g4, m5); m5 = this.getColumnNames(); for (var n2 = {}, p3 = 0; p3 < m5.length; p3 += 1) n2[m5[p3]] = g4[p3]; return n2; }; c4.prototype.getSQL = function() { return nb(this.La); }; c4.prototype.getNormalizedSQL = function() { return qc(this.La); }; c4.prototype.run = function(g4) { null != g4 && this.bind(g4); this.step(); return this.reset(); }; c4.prototype.nb = function(g4, m5) { null == m5 && (m5 = this.Ja, this.Ja += 1); g4 = ma(g4); var n2 = aa(g4); this.fb.push(n2); this.db.handleError(rc(this.La, m5, n2, g4.length - 1, 0)); }; c4.prototype.wb = function(g4, m5) { null == m5 && (m5 = this.Ja, this.Ja += 1); var n2 = aa(g4); this.fb.push(n2); this.db.handleError(pb(this.La, m5, n2, g4.length, 0)); }; c4.prototype.mb = function(g4, m5) { null == m5 && (m5 = this.Ja, this.Ja += 1); this.db.handleError((g4 === (g4 | 0) ? tc : sc)(this.La, m5, g4)); }; c4.prototype.zb = function(g4) { null == g4 && (g4 = this.Ja, this.Ja += 1); pb(this.La, g4, 0, 0, 0); }; c4.prototype.ob = function(g4, m5) { null == m5 && (m5 = this.Ja, this.Ja += 1); switch (typeof g4) { case "string": this.nb(g4, m5); return; case "number": this.mb(g4, m5); return; case "bigint": this.nb(g4.toString(), m5); return; case "boolean": this.mb(g4 + 0, m5); return; case "object": if (null === g4) { this.zb(m5); return; } if (null != g4.length) { this.wb(g4, m5); return; } } throw "Wrong API use : tried to bind a value of an unknown type (" + g4 + ")."; }; c4.prototype.yb = function(g4) { var m5 = this; Object.keys(g4).forEach(function(n2) { var p3 = uc(m5.La, n2); 0 !== p3 && m5.ob(g4[n2], p3); }); return true; }; c4.prototype.xb = function(g4) { for (var m5 = 0; m5 < g4.length; m5 += 1) this.ob(g4[m5], m5 + 1); return true; }; c4.prototype.reset = function() { this.freemem(); return 0 === Fc(this.La) && 0 === Ec(this.La); }; c4.prototype.freemem = function() { for (var g4; void 0 !== (g4 = this.fb.pop()); ) ba(g4); }; c4.prototype.free = function() { this.freemem(); var g4 = 0 === Gc(this.La); delete this.db.Za[this.La]; this.La = 0; return g4; }; d5.prototype.next = function() { if (null === this.Ya) return { done: true }; null !== this.Ua && (this.Ua.free(), this.Ua = null); if (!this.db.db) throw this.gb(), Error("Database closed"); var g4 = oa(), m5 = B5(4); pa(h5); pa(m5); try { this.db.handleError(ob(this.db.db, this.eb, -1, h5, m5)); this.eb = l3(m5, "i32"); var n2 = l3(h5, "i32"); if (0 === n2) return this.gb(), { done: true }; this.Ua = new c4(n2, this.db); this.db.Za[n2] = this.Ua; return { value: this.Ua, done: false }; } catch (p3) { throw this.ib = C3(this.eb), this.gb(), p3; } finally { qa(g4); } }; d5.prototype.gb = function() { ba(this.Ya); this.Ya = null; }; d5.prototype.getRemainingSQL = function() { return null !== this.ib ? this.ib : C3(this.eb); }; "function" === typeof Symbol && "symbol" === typeof Symbol.iterator && (d5.prototype[Symbol.iterator] = function() { return this; }); f4.prototype.run = function(g4, m5) { if (!this.db) throw "Database closed"; if (m5) { g4 = this.prepare(g4, m5); try { g4.step(); } finally { g4.free(); } } else this.handleError(w5(this.db, g4, 0, 0, h5)); return this; }; f4.prototype.exec = function(g4, m5, n2) { if (!this.db) throw "Database closed"; var p3 = oa(), v3 = null; try { var y5 = ca(g4) + 1, L4 = B5(y5); t4(g4, r3, L4, y5); var G3 = L4; var H5 = B5(4); for (g4 = []; 0 !== l3(G3, "i8"); ) { pa(h5); pa(H5); this.handleError(ob(this.db, G3, -1, h5, H5)); var I4 = l3(h5, "i32"); G3 = l3(H5, "i32"); if (0 !== I4) { y5 = null; v3 = new c4(I4, this); for (null != m5 && v3.bind(m5); v3.step(); ) null === y5 && (y5 = { columns: v3.getColumnNames(), values: [] }, g4.push(y5)), y5.values.push(v3.get(null, n2)); v3.free(); } } return g4; } catch (na) { throw v3 && v3.free(), na; } finally { qa(p3); } }; f4.prototype.each = function(g4, m5, n2, p3, v3) { "function" === typeof m5 && (p3 = n2, n2 = m5, m5 = void 0); g4 = this.prepare(g4, m5); try { for (; g4.step(); ) n2(g4.getAsObject(null, v3)); } finally { g4.free(); } if ("function" === typeof p3) return p3(); }; f4.prototype.prepare = function(g4, m5) { pa(h5); this.handleError(S4(this.db, g4, -1, h5, 0)); g4 = l3(h5, "i32"); if (0 === g4) throw "Nothing to prepare"; var n2 = new c4(g4, this); null != m5 && n2.bind(m5); return this.Za[g4] = n2; }; f4.prototype.iterateStatements = function(g4) { return new d5(g4, this); }; f4.prototype["export"] = function() { Object.values(this.Za).forEach(function(m5) { m5.free(); }); Object.values(this.Na).forEach(ra); this.Na = {}; this.handleError(x5(this.db)); var g4 = sa(this.filename); this.handleError(q5(this.filename, h5)); this.db = l3(h5, "i32"); return g4; }; f4.prototype.close = function() { null !== this.db && (Object.values(this.Za).forEach(function(g4) { g4.free(); }), Object.values(this.Na).forEach(ra), this.Na = {}, this.handleError(x5(this.db)), ta("/" + this.filename), this.db = null); }; f4.prototype.handleError = function(g4) { if (0 === g4) return null; g4 = wc(this.db); throw Error(g4); }; f4.prototype.getRowsModified = function() { return A4(this.db); }; f4.prototype.create_function = function(g4, m5) { Object.prototype.hasOwnProperty.call(this.Na, g4) && (ra(this.Na[g4]), delete this.Na[g4]); var n2 = ua(function(p3, v3, y5) { v3 = b4(v3, y5); try { var L4 = m5.apply(null, v3); } catch (G3) { xa(p3, G3, -1); return; } a5(p3, L4); }, "viii"); this.Na[g4] = n2; this.handleError(rb(this.db, g4, m5.length, 1, 0, n2, 0, 0, 0)); return this; }; f4.prototype.create_aggregate = function(g4, m5) { var n2 = m5.init || function() { return null; }, p3 = m5.finalize || function(H5) { return H5; }, v3 = m5.step; if (!v3) throw "An aggregate function must have a step function in " + g4; var y5 = {}; Object.hasOwnProperty.call(this.Na, g4) && (ra(this.Na[g4]), delete this.Na[g4]); m5 = g4 + "__finalize"; Object.hasOwnProperty.call(this.Na, m5) && (ra(this.Na[m5]), delete this.Na[m5]); var L4 = ua(function(H5, I4, na) { var Z2 = sb(H5, 1); Object.hasOwnProperty.call(y5, Z2) || (y5[Z2] = n2()); I4 = b4(I4, na); I4 = [y5[Z2]].concat(I4); try { y5[Z2] = v3.apply(null, I4); } catch (Ic) { delete y5[Z2], xa(H5, Ic, -1); } }, "viii"), G3 = ua(function(H5) { var I4 = sb(H5, 1); try { var na = p3(y5[I4]); } catch (Z2) { delete y5[I4]; xa(H5, Z2, -1); return; } a5(H5, na); delete y5[I4]; }, "vi"); this.Na[g4] = L4; this.Na[m5] = G3; this.handleError(rb(this.db, g4, v3.length - 1, 1, 0, 0, L4, G3, 0)); return this; }; e4.Database = f4; }; var va = Object.assign({}, e4), wa = "./this.program", ya = "object" == typeof window, za = "function" == typeof importScripts, Aa = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, D3 = "", Ba, Ca, Da, fs, Ea, Fa; if (Aa) D3 = za ? require("path").dirname(D3) + "/" : __dirname + "/", Fa = () => { Ea || (fs = require("fs"), Ea = require("path")); }, Ba = function(a5, b4) { Fa(); a5 = Ea.normalize(a5); return fs.readFileSync(a5, b4 ? void 0 : "utf8"); }, Da = (a5) => { a5 = Ba(a5, true); a5.buffer || (a5 = new Uint8Array(a5)); return a5; }, Ca = (a5, b4, c4) => { Fa(); a5 = Ea.normalize(a5); fs.readFile(a5, function(d5, f4) { d5 ? c4(d5) : b4(f4.buffer); }); }, 1 < process.argv.length && (wa = process.argv[1].replace(/\\/g, "/")), process.argv.slice(2), "undefined" != typeof module2 && (module2.exports = e4), e4.inspect = function() { return "[Emscripten Module object]"; }; else if (ya || za) za ? D3 = self.location.href : "undefined" != typeof document && document.currentScript && (D3 = document.currentScript.src), D3 = 0 !== D3.indexOf("blob:") ? D3.substr(0, D3.replace(/[?#].*/, "").lastIndexOf("/") + 1) : "", Ba = (a5) => { var b4 = new XMLHttpRequest(); b4.open("GET", a5, false); b4.send(null); return b4.responseText; }, za && (Da = (a5) => { var b4 = new XMLHttpRequest(); b4.open("GET", a5, false); b4.responseType = "arraybuffer"; b4.send(null); return new Uint8Array(b4.response); }), Ca = (a5, b4, c4) => { var d5 = new XMLHttpRequest(); d5.open("GET", a5, true); d5.responseType = "arraybuffer"; d5.onload = () => { 200 == d5.status || 0 == d5.status && d5.response ? b4(d5.response) : c4(); }; d5.onerror = c4; d5.send(null); }; var Ga = e4.print || console.log.bind(console), Ha = e4.printErr || console.warn.bind(console); Object.assign(e4, va); va = null; e4.thisProgram && (wa = e4.thisProgram); var Ia; e4.wasmBinary && (Ia = e4.wasmBinary); var noExitRuntime = e4.noExitRuntime || true; "object" != typeof WebAssembly && E3("no native wasm support detected"); var Ja, Ka = false, La = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0; function Ma(a5, b4, c4) { var d5 = b4 + c4; for (c4 = b4; a5[c4] && !(c4 >= d5); ) ++c4; if (16 < c4 - b4 && a5.buffer && La) return La.decode(a5.subarray(b4, c4)); for (d5 = ""; b4 < c4; ) { var f4 = a5[b4++]; if (f4 & 128) { var h5 = a5[b4++] & 63; if (192 == (f4 & 224)) d5 += String.fromCharCode((f4 & 31) << 6 | h5); else { var k5 = a5[b4++] & 63; f4 = 224 == (f4 & 240) ? (f4 & 15) << 12 | h5 << 6 | k5 : (f4 & 7) << 18 | h5 << 12 | k5 << 6 | a5[b4++] & 63; 65536 > f4 ? d5 += String.fromCharCode(f4) : (f4 -= 65536, d5 += String.fromCharCode(55296 | f4 >> 10, 56320 | f4 & 1023)); } } else d5 += String.fromCharCode(f4); } return d5; } function C3(a5, b4) { return a5 ? Ma(u4, a5, b4) : ""; } function t4(a5, b4, c4, d5) { if (!(0 < d5)) return 0; var f4 = c4; d5 = c4 + d5 - 1; for (var h5 = 0; h5 < a5.length; ++h5) { var k5 = a5.charCodeAt(h5); if (55296 <= k5 && 57343 >= k5) { var q5 = a5.charCodeAt(++h5); k5 = 65536 + ((k5 & 1023) << 10) | q5 & 1023; } if (127 >= k5) { if (c4 >= d5) break; b4[c4++] = k5; } else { if (2047 >= k5) { if (c4 + 1 >= d5) break; b4[c4++] = 192 | k5 >> 6; } else { if (65535 >= k5) { if (c4 + 2 >= d5) break; b4[c4++] = 224 | k5 >> 12; } else { if (c4 + 3 >= d5) break; b4[c4++] = 240 | k5 >> 18; b4[c4++] = 128 | k5 >> 12 & 63; } b4[c4++] = 128 | k5 >> 6 & 63; } b4[c4++] = 128 | k5 & 63; } } b4[c4] = 0; return c4 - f4; } function ca(a5) { for (var b4 = 0, c4 = 0; c4 < a5.length; ++c4) { var d5 = a5.charCodeAt(c4); 127 >= d5 ? b4++ : 2047 >= d5 ? b4 += 2 : 55296 <= d5 && 57343 >= d5 ? (b4 += 4, ++c4) : b4 += 3; } return b4; } var Na, r3, u4, Oa, F3, J2, Pa, Qa; function Ra() { var a5 = Ja.buffer; Na = a5; e4.HEAP8 = r3 = new Int8Array(a5); e4.HEAP16 = Oa = new Int16Array(a5); e4.HEAP32 = F3 = new Int32Array(a5); e4.HEAPU8 = u4 = new Uint8Array(a5); e4.HEAPU16 = new Uint16Array(a5); e4.HEAPU32 = J2 = new Uint32Array(a5); e4.HEAPF32 = Pa = new Float32Array(a5); e4.HEAPF64 = Qa = new Float64Array(a5); } var K3, Sa = [], Ta = [], Ua = []; function Va() { var a5 = e4.preRun.shift(); Sa.unshift(a5); } var Wa = 0, Xa = null, Ya = null; function E3(a5) { if (e4.onAbort) e4.onAbort(a5); a5 = "Aborted(" + a5 + ")"; Ha(a5); Ka = true; throw new WebAssembly.RuntimeError(a5 + ". Build with -sASSERTIONS for more info."); } function Za() { return M5.startsWith("data:application/octet-stream;base64,"); } var M5; M5 = "sql-wasm.wasm"; if (!Za()) { var $a = M5; M5 = e4.locateFile ? e4.locateFile($a, D3) : D3 + $a; } function ab() { var a5 = M5; try { if (a5 == M5 && Ia) return new Uint8Array(Ia); if (Da) return Da(a5); throw "both async and sync fetching of the wasm failed"; } catch (b4) { E3(b4); } } function bb() { if (!Ia && (ya || za)) { if ("function" == typeof fetch && !M5.startsWith("file://")) return fetch(M5, { credentials: "same-origin" }).then(function(a5) { if (!a5.ok) throw "failed to load wasm binary file at '" + M5 + "'"; return a5.arrayBuffer(); }).catch(function() { return ab(); }); if (Ca) return new Promise(function(a5, b4) { Ca(M5, function(c4) { a5(new Uint8Array(c4)); }, b4); }); } return Promise.resolve().then(function() { return ab(); }); } var N3, O4; function cb(a5) { for (; 0 < a5.length; ) a5.shift()(e4); } function l3(a5, b4 = "i8") { b4.endsWith("*") && (b4 = "*"); switch (b4) { case "i1": return r3[a5 >> 0]; case "i8": return r3[a5 >> 0]; case "i16": return Oa[a5 >> 1]; case "i32": return F3[a5 >> 2]; case "i64": return F3[a5 >> 2]; case "float": return Pa[a5 >> 2]; case "double": return Qa[a5 >> 3]; case "*": return J2[a5 >> 2]; default: E3("invalid type for getValue: " + b4); } return null; } function pa(a5) { var b4 = "i32"; b4.endsWith("*") && (b4 = "*"); switch (b4) { case "i1": r3[a5 >> 0] = 0; break; case "i8": r3[a5 >> 0] = 0; break; case "i16": Oa[a5 >> 1] = 0; break; case "i32": F3[a5 >> 2] = 0; break; case "i64": O4 = [0, (N3 = 0, 1 <= +Math.abs(N3) ? 0 < N3 ? (Math.min(+Math.floor(N3 / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((N3 - +(~~N3 >>> 0)) / 4294967296) >>> 0 : 0)]; F3[a5 >> 2] = O4[0]; F3[a5 + 4 >> 2] = O4[1]; break; case "float": Pa[a5 >> 2] = 0; break; case "double": Qa[a5 >> 3] = 0; break; case "*": J2[a5 >> 2] = 0; break; default: E3("invalid type for setValue: " + b4); } } var db = (a5, b4) => { for (var c4 = 0, d5 = a5.length - 1; 0 <= d5; d5--) { var f4 = a5[d5]; "." === f4 ? a5.splice(d5, 1) : ".." === f4 ? (a5.splice(d5, 1), c4++) : c4 && (a5.splice(d5, 1), c4--); } if (b4) for (; c4; c4--) a5.unshift(".."); return a5; }, z5 = (a5) => { var b4 = "/" === a5.charAt(0), c4 = "/" === a5.substr(-1); (a5 = db(a5.split("/").filter((d5) => !!d5), !b4).join("/")) || b4 || (a5 = "."); a5 && c4 && (a5 += "/"); return (b4 ? "/" : "") + a5; }, eb = (a5) => { var b4 = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a5).slice(1); a5 = b4[0]; b4 = b4[1]; if (!a5 && !b4) return "."; b4 && (b4 = b4.substr(0, b4.length - 1)); return a5 + b4; }, fb = (a5) => { if ("/" === a5) return "/"; a5 = z5(a5); a5 = a5.replace(/\/$/, ""); var b4 = a5.lastIndexOf("/"); return -1 === b4 ? a5 : a5.substr(b4 + 1); }; function gb() { if ("object" == typeof crypto && "function" == typeof crypto.getRandomValues) { var a5 = new Uint8Array(1); return () => { crypto.getRandomValues(a5); return a5[0]; }; } if (Aa) try { var b4 = require("crypto"); return () => b4.randomBytes(1)[0]; } catch (c4) { } return () => E3("randomDevice"); } function hb() { for (var a5 = "", b4 = false, c4 = arguments.length - 1; -1 <= c4 && !b4; c4--) { b4 = 0 <= c4 ? arguments[c4] : "/"; if ("string" != typeof b4) throw new TypeError("Arguments to path.resolve must be strings"); if (!b4) return ""; a5 = b4 + "/" + a5; b4 = "/" === b4.charAt(0); } a5 = db(a5.split("/").filter((d5) => !!d5), !b4).join("/"); return (b4 ? "/" : "") + a5 || "."; } function ma(a5, b4) { var c4 = Array(ca(a5) + 1); a5 = t4(a5, c4, 0, c4.length); b4 && (c4.length = a5); return c4; } var ib = []; function jb(a5, b4) { ib[a5] = { input: [], output: [], Xa: b4 }; lb(a5, mb); } var mb = { open: function(a5) { var b4 = ib[a5.node.rdev]; if (!b4) throw new P4(43); a5.tty = b4; a5.seekable = false; }, close: function(a5) { a5.tty.Xa.fsync(a5.tty); }, fsync: function(a5) { a5.tty.Xa.fsync(a5.tty); }, read: function(a5, b4, c4, d5) { if (!a5.tty || !a5.tty.Xa.tb) throw new P4(60); for (var f4 = 0, h5 = 0; h5 < d5; h5++) { try { var k5 = a5.tty.Xa.tb(a5.tty); } catch (q5) { throw new P4(29); } if (void 0 === k5 && 0 === f4) throw new P4(6); if (null === k5 || void 0 === k5) break; f4++; b4[c4 + h5] = k5; } f4 && (a5.node.timestamp = Date.now()); return f4; }, write: function(a5, b4, c4, d5) { if (!a5.tty || !a5.tty.Xa.jb) throw new P4(60); try { for (var f4 = 0; f4 < d5; f4++) a5.tty.Xa.jb(a5.tty, b4[c4 + f4]); } catch (h5) { throw new P4(29); } d5 && (a5.node.timestamp = Date.now()); return f4; } }, tb = { tb: function(a5) { if (!a5.input.length) { var b4 = null; if (Aa) { var c4 = Buffer.alloc(256), d5 = 0; try { d5 = fs.readSync(process.stdin.fd, c4, 0, 256, -1); } catch (f4) { if (f4.toString().includes("EOF")) d5 = 0; else throw f4; } 0 < d5 ? b4 = c4.slice(0, d5).toString("utf-8") : b4 = null; } else "undefined" != typeof window && "function" == typeof window.prompt ? (b4 = window.prompt("Input: "), null !== b4 && (b4 += "\n")) : "function" == typeof readline && (b4 = readline(), null !== b4 && (b4 += "\n")); if (!b4) return null; a5.input = ma(b4, true); } return a5.input.shift(); }, jb: function(a5, b4) { null === b4 || 10 === b4 ? (Ga(Ma(a5.output, 0)), a5.output = []) : 0 != b4 && a5.output.push(b4); }, fsync: function(a5) { a5.output && 0 < a5.output.length && (Ga(Ma(a5.output, 0)), a5.output = []); } }, ub = { jb: function(a5, b4) { null === b4 || 10 === b4 ? (Ha(Ma(a5.output, 0)), a5.output = []) : 0 != b4 && a5.output.push(b4); }, fsync: function(a5) { a5.output && 0 < a5.output.length && (Ha(Ma(a5.output, 0)), a5.output = []); } }, Q3 = { Qa: null, Ra: function() { return Q3.createNode( null, "/", 16895, 0 ); }, createNode: function(a5, b4, c4, d5) { if (24576 === (c4 & 61440) || 4096 === (c4 & 61440)) throw new P4(63); Q3.Qa || (Q3.Qa = { dir: { node: { Pa: Q3.Ga.Pa, Oa: Q3.Ga.Oa, lookup: Q3.Ga.lookup, ab: Q3.Ga.ab, rename: Q3.Ga.rename, unlink: Q3.Ga.unlink, rmdir: Q3.Ga.rmdir, readdir: Q3.Ga.readdir, symlink: Q3.Ga.symlink }, stream: { Ta: Q3.Ha.Ta } }, file: { node: { Pa: Q3.Ga.Pa, Oa: Q3.Ga.Oa }, stream: { Ta: Q3.Ha.Ta, read: Q3.Ha.read, write: Q3.Ha.write, lb: Q3.Ha.lb, bb: Q3.Ha.bb, cb: Q3.Ha.cb } }, link: { node: { Pa: Q3.Ga.Pa, Oa: Q3.Ga.Oa, readlink: Q3.Ga.readlink }, stream: {} }, pb: { node: { Pa: Q3.Ga.Pa, Oa: Q3.Ga.Oa }, stream: vb } }); c4 = wb(a5, b4, c4, d5); 16384 === (c4.mode & 61440) ? (c4.Ga = Q3.Qa.dir.node, c4.Ha = Q3.Qa.dir.stream, c4.Ia = {}) : 32768 === (c4.mode & 61440) ? (c4.Ga = Q3.Qa.file.node, c4.Ha = Q3.Qa.file.stream, c4.Ma = 0, c4.Ia = null) : 40960 === (c4.mode & 61440) ? (c4.Ga = Q3.Qa.link.node, c4.Ha = Q3.Qa.link.stream) : 8192 === (c4.mode & 61440) && (c4.Ga = Q3.Qa.pb.node, c4.Ha = Q3.Qa.pb.stream); c4.timestamp = Date.now(); a5 && (a5.Ia[b4] = c4, a5.timestamp = c4.timestamp); return c4; }, Jb: function(a5) { return a5.Ia ? a5.Ia.subarray ? a5.Ia.subarray(0, a5.Ma) : new Uint8Array(a5.Ia) : new Uint8Array(0); }, qb: function(a5, b4) { var c4 = a5.Ia ? a5.Ia.length : 0; c4 >= b4 || (b4 = Math.max(b4, c4 * (1048576 > c4 ? 2 : 1.125) >>> 0), 0 != c4 && (b4 = Math.max(b4, 256)), c4 = a5.Ia, a5.Ia = new Uint8Array(b4), 0 < a5.Ma && a5.Ia.set(c4.subarray(0, a5.Ma), 0)); }, Gb: function(a5, b4) { if (a5.Ma != b4) if (0 == b4) a5.Ia = null, a5.Ma = 0; else { var c4 = a5.Ia; a5.Ia = new Uint8Array(b4); c4 && a5.Ia.set(c4.subarray(0, Math.min(b4, a5.Ma))); a5.Ma = b4; } }, Ga: { Pa: function(a5) { var b4 = {}; b4.dev = 8192 === (a5.mode & 61440) ? a5.id : 1; b4.ino = a5.id; b4.mode = a5.mode; b4.nlink = 1; b4.uid = 0; b4.gid = 0; b4.rdev = a5.rdev; 16384 === (a5.mode & 61440) ? b4.size = 4096 : 32768 === (a5.mode & 61440) ? b4.size = a5.Ma : 40960 === (a5.mode & 61440) ? b4.size = a5.link.length : b4.size = 0; b4.atime = new Date(a5.timestamp); b4.mtime = new Date(a5.timestamp); b4.ctime = new Date(a5.timestamp); b4.Ab = 4096; b4.blocks = Math.ceil(b4.size / b4.Ab); return b4; }, Oa: function(a5, b4) { void 0 !== b4.mode && (a5.mode = b4.mode); void 0 !== b4.timestamp && (a5.timestamp = b4.timestamp); void 0 !== b4.size && Q3.Gb(a5, b4.size); }, lookup: function() { throw xb[44]; }, ab: function(a5, b4, c4, d5) { return Q3.createNode(a5, b4, c4, d5); }, rename: function(a5, b4, c4) { if (16384 === (a5.mode & 61440)) { try { var d5 = yb(b4, c4); } catch (h5) { } if (d5) for (var f4 in d5.Ia) throw new P4(55); } delete a5.parent.Ia[a5.name]; a5.parent.timestamp = Date.now(); a5.name = c4; b4.Ia[c4] = a5; b4.timestamp = a5.parent.timestamp; a5.parent = b4; }, unlink: function(a5, b4) { delete a5.Ia[b4]; a5.timestamp = Date.now(); }, rmdir: function(a5, b4) { var c4 = yb(a5, b4), d5; for (d5 in c4.Ia) throw new P4(55); delete a5.Ia[b4]; a5.timestamp = Date.now(); }, readdir: function(a5) { var b4 = [".", ".."], c4; for (c4 in a5.Ia) a5.Ia.hasOwnProperty(c4) && b4.push(c4); return b4; }, symlink: function(a5, b4, c4) { a5 = Q3.createNode(a5, b4, 41471, 0); a5.link = c4; return a5; }, readlink: function(a5) { if (40960 !== (a5.mode & 61440)) throw new P4(28); return a5.link; } }, Ha: { read: function(a5, b4, c4, d5, f4) { var h5 = a5.node.Ia; if (f4 >= a5.node.Ma) return 0; a5 = Math.min(a5.node.Ma - f4, d5); if (8 < a5 && h5.subarray) b4.set(h5.subarray(f4, f4 + a5), c4); else for (d5 = 0; d5 < a5; d5++) b4[c4 + d5] = h5[f4 + d5]; return a5; }, write: function(a5, b4, c4, d5, f4, h5) { b4.buffer === r3.buffer && (h5 = false); if (!d5) return 0; a5 = a5.node; a5.timestamp = Date.now(); if (b4.subarray && (!a5.Ia || a5.Ia.subarray)) { if (h5) return a5.Ia = b4.subarray(c4, c4 + d5), a5.Ma = d5; if (0 === a5.Ma && 0 === f4) return a5.Ia = b4.slice(c4, c4 + d5), a5.Ma = d5; if (f4 + d5 <= a5.Ma) return a5.Ia.set(b4.subarray(c4, c4 + d5), f4), d5; } Q3.qb(a5, f4 + d5); if (a5.Ia.subarray && b4.subarray) a5.Ia.set(b4.subarray(c4, c4 + d5), f4); else for (h5 = 0; h5 < d5; h5++) a5.Ia[f4 + h5] = b4[c4 + h5]; a5.Ma = Math.max(a5.Ma, f4 + d5); return d5; }, Ta: function(a5, b4, c4) { 1 === c4 ? b4 += a5.position : 2 === c4 && 32768 === (a5.node.mode & 61440) && (b4 += a5.node.Ma); if (0 > b4) throw new P4(28); return b4; }, lb: function(a5, b4, c4) { Q3.qb(a5.node, b4 + c4); a5.node.Ma = Math.max(a5.node.Ma, b4 + c4); }, bb: function(a5, b4, c4, d5, f4) { if (32768 !== (a5.node.mode & 61440)) throw new P4(43); a5 = a5.node.Ia; if (f4 & 2 || a5.buffer !== Na) { if (0 < c4 || c4 + b4 < a5.length) a5.subarray ? a5 = a5.subarray(c4, c4 + b4) : a5 = Array.prototype.slice.call( a5, c4, c4 + b4 ); c4 = true; b4 = 65536 * Math.ceil(b4 / 65536); (f4 = zb(65536, b4)) ? (u4.fill(0, f4, f4 + b4), b4 = f4) : b4 = 0; if (!b4) throw new P4(48); r3.set(a5, b4); } else c4 = false, b4 = a5.byteOffset; return { Fb: b4, vb: c4 }; }, cb: function(a5, b4, c4, d5, f4) { if (32768 !== (a5.node.mode & 61440)) throw new P4(43); if (f4 & 2) return 0; Q3.Ha.write(a5, b4, 0, d5, c4, false); return 0; } } }, Ab = null, Bb = {}, R3 = [], Cb = 1, T6 = null, Db = true, P4 = null, xb = {}, U2 = (a5, b4 = {}) => { a5 = hb("/", a5); if (!a5) return { path: "", node: null }; b4 = Object.assign({ rb: true, kb: 0 }, b4); if (8 < b4.kb) throw new P4(32); a5 = db(a5.split("/").filter((k5) => !!k5), false); for (var c4 = Ab, d5 = "/", f4 = 0; f4 < a5.length; f4++) { var h5 = f4 === a5.length - 1; if (h5 && b4.parent) break; c4 = yb(c4, a5[f4]); d5 = z5(d5 + "/" + a5[f4]); c4.Va && (!h5 || h5 && b4.rb) && (c4 = c4.Va.root); if (!h5 || b4.Sa) { for (h5 = 0; 40960 === (c4.mode & 61440); ) if (c4 = Eb(d5), d5 = hb(eb(d5), c4), c4 = U2(d5, { kb: b4.kb + 1 }).node, 40 < h5++) throw new P4(32); } } return { path: d5, node: c4 }; }, ea = (a5) => { for (var b4; ; ) { if (a5 === a5.parent) return a5 = a5.Ra.ub, b4 ? "/" !== a5[a5.length - 1] ? a5 + "/" + b4 : a5 + b4 : a5; b4 = b4 ? a5.name + "/" + b4 : a5.name; a5 = a5.parent; } }, Fb = (a5, b4) => { for (var c4 = 0, d5 = 0; d5 < b4.length; d5++) c4 = (c4 << 5) - c4 + b4.charCodeAt(d5) | 0; return (a5 + c4 >>> 0) % T6.length; }, Gb = (a5) => { var b4 = Fb(a5.parent.id, a5.name); if (T6[b4] === a5) T6[b4] = a5.Wa; else for (b4 = T6[b4]; b4; ) { if (b4.Wa === a5) { b4.Wa = a5.Wa; break; } b4 = b4.Wa; } }, yb = (a5, b4) => { var c4; if (c4 = (c4 = Hb(a5, "x")) ? c4 : a5.Ga.lookup ? 0 : 2) throw new P4(c4, a5); for (c4 = T6[Fb(a5.id, b4)]; c4; c4 = c4.Wa) { var d5 = c4.name; if (c4.parent.id === a5.id && d5 === b4) return c4; } return a5.Ga.lookup(a5, b4); }, wb = (a5, b4, c4, d5) => { a5 = new Ib(a5, b4, c4, d5); b4 = Fb(a5.parent.id, a5.name); a5.Wa = T6[b4]; return T6[b4] = a5; }, Jb = { r: 0, "r+": 2, w: 577, "w+": 578, a: 1089, "a+": 1090 }, Kb = (a5) => { var b4 = ["r", "w", "rw"][a5 & 3]; a5 & 512 && (b4 += "w"); return b4; }, Hb = (a5, b4) => { if (Db) return 0; if (!b4.includes("r") || a5.mode & 292) { if (b4.includes("w") && !(a5.mode & 146) || b4.includes("x") && !(a5.mode & 73)) return 2; } else return 2; return 0; }, Lb = (a5, b4) => { try { return yb(a5, b4), 20; } catch (c4) { } return Hb(a5, "wx"); }, Mb = (a5, b4, c4) => { try { var d5 = yb(a5, b4); } catch (f4) { return f4.Ka; } if (a5 = Hb(a5, "wx")) return a5; if (c4) { if (16384 !== (d5.mode & 61440)) return 54; if (d5 === d5.parent || "/" === ea(d5)) return 10; } else if (16384 === (d5.mode & 61440)) return 31; return 0; }, Nb = (a5 = 0) => { for (; 4096 >= a5; a5++) if (!R3[a5]) return a5; throw new P4(33); }, Pb = (a5, b4) => { Ob || (Ob = function() { this.$a = {}; }, Ob.prototype = {}, Object.defineProperties(Ob.prototype, { object: { get: function() { return this.node; }, set: function(c4) { this.node = c4; } }, flags: { get: function() { return this.$a.flags; }, set: function(c4) { this.$a.flags = c4; } }, position: { get: function() { return this.$a.position; }, set: function(c4) { this.$a.position = c4; } } })); a5 = Object.assign(new Ob(), a5); b4 = Nb(b4); a5.fd = b4; return R3[b4] = a5; }, vb = { open: (a5) => { a5.Ha = Bb[a5.node.rdev].Ha; a5.Ha.open && a5.Ha.open(a5); }, Ta: () => { throw new P4(70); } }, lb = (a5, b4) => { Bb[a5] = { Ha: b4 }; }, Qb = (a5, b4) => { var c4 = "/" === b4, d5 = !b4; if (c4 && Ab) throw new P4(10); if (!c4 && !d5) { var f4 = U2(b4, { rb: false }); b4 = f4.path; f4 = f4.node; if (f4.Va) throw new P4(10); if (16384 !== (f4.mode & 61440)) throw new P4(54); } b4 = { type: a5, Kb: {}, ub: b4, Eb: [] }; a5 = a5.Ra(b4); a5.Ra = b4; b4.root = a5; c4 ? Ab = a5 : f4 && (f4.Va = b4, f4.Ra && f4.Ra.Eb.push(b4)); }, ha = (a5, b4, c4) => { var d5 = U2(a5, { parent: true }).node; a5 = fb(a5); if (!a5 || "." === a5 || ".." === a5) throw new P4(28); var f4 = Lb(d5, a5); if (f4) throw new P4(f4); if (!d5.Ga.ab) throw new P4(63); return d5.Ga.ab(d5, a5, b4, c4); }, V3 = (a5, b4) => ha(a5, (void 0 !== b4 ? b4 : 511) & 1023 | 16384, 0), Rb = (a5, b4, c4) => { "undefined" == typeof c4 && (c4 = b4, b4 = 438); ha(a5, b4 | 8192, c4); }, Sb = (a5, b4) => { if (!hb(a5)) throw new P4(44); var c4 = U2(b4, { parent: true }).node; if (!c4) throw new P4(44); b4 = fb(b4); var d5 = Lb(c4, b4); if (d5) throw new P4(d5); if (!c4.Ga.symlink) throw new P4(63); c4.Ga.symlink(c4, b4, a5); }, Tb = (a5) => { var b4 = U2(a5, { parent: true }).node; a5 = fb(a5); var c4 = yb(b4, a5), d5 = Mb(b4, a5, true); if (d5) throw new P4(d5); if (!b4.Ga.rmdir) throw new P4(63); if (c4.Va) throw new P4(10); b4.Ga.rmdir(b4, a5); Gb(c4); }, ta = (a5) => { var b4 = U2(a5, { parent: true }).node; if (!b4) throw new P4(44); a5 = fb(a5); var c4 = yb(b4, a5), d5 = Mb(b4, a5, false); if (d5) throw new P4(d5); if (!b4.Ga.unlink) throw new P4(63); if (c4.Va) throw new P4(10); b4.Ga.unlink(b4, a5); Gb(c4); }, Eb = (a5) => { a5 = U2(a5).node; if (!a5) throw new P4(44); if (!a5.Ga.readlink) throw new P4(28); return hb(ea(a5.parent), a5.Ga.readlink(a5)); }, Ub = (a5, b4) => { a5 = U2(a5, { Sa: !b4 }).node; if (!a5) throw new P4(44); if (!a5.Ga.Pa) throw new P4(63); return a5.Ga.Pa(a5); }, Vb = (a5) => Ub(a5, true), ia = (a5, b4) => { a5 = "string" == typeof a5 ? U2(a5, { Sa: true }).node : a5; if (!a5.Ga.Oa) throw new P4(63); a5.Ga.Oa(a5, { mode: b4 & 4095 | a5.mode & -4096, timestamp: Date.now() }); }, Wb = (a5, b4) => { if (0 > b4) throw new P4(28); a5 = "string" == typeof a5 ? U2(a5, { Sa: true }).node : a5; if (!a5.Ga.Oa) throw new P4(63); if (16384 === (a5.mode & 61440)) throw new P4(31); if (32768 !== (a5.mode & 61440)) throw new P4(28); var c4 = Hb(a5, "w"); if (c4) throw new P4(c4); a5.Ga.Oa(a5, { size: b4, timestamp: Date.now() }); }, ja = (a5, b4, c4) => { if ("" === a5) throw new P4(44); if ("string" == typeof b4) { var d5 = Jb[b4]; if ("undefined" == typeof d5) throw Error("Unknown file open mode: " + b4); b4 = d5; } c4 = b4 & 64 ? ("undefined" == typeof c4 ? 438 : c4) & 4095 | 32768 : 0; if ("object" == typeof a5) var f4 = a5; else { a5 = z5(a5); try { f4 = U2(a5, { Sa: !(b4 & 131072) }).node; } catch (h5) { } } d5 = false; if (b4 & 64) if (f4) { if (b4 & 128) throw new P4(20); } else f4 = ha(a5, c4, 0), d5 = true; if (!f4) throw new P4(44); 8192 === (f4.mode & 61440) && (b4 &= -513); if (b4 & 65536 && 16384 !== (f4.mode & 61440)) throw new P4(54); if (!d5 && (c4 = f4 ? 40960 === (f4.mode & 61440) ? 32 : 16384 === (f4.mode & 61440) && ("r" !== Kb(b4) || b4 & 512) ? 31 : Hb(f4, Kb(b4)) : 44)) throw new P4(c4); b4 & 512 && !d5 && Wb(f4, 0); b4 &= -131713; f4 = Pb({ node: f4, path: ea(f4), flags: b4, seekable: true, position: 0, Ha: f4.Ha, Ib: [], error: false }); f4.Ha.open && f4.Ha.open(f4); !e4.logReadFiles || b4 & 1 || (Xb || (Xb = {}), a5 in Xb || (Xb[a5] = 1)); return f4; }, la = (a5) => { if (null === a5.fd) throw new P4(8); a5.hb && (a5.hb = null); try { a5.Ha.close && a5.Ha.close(a5); } catch (b4) { throw b4; } finally { R3[a5.fd] = null; } a5.fd = null; }, Yb = (a5, b4, c4) => { if (null === a5.fd) throw new P4(8); if (!a5.seekable || !a5.Ha.Ta) throw new P4(70); if (0 != c4 && 1 != c4 && 2 != c4) throw new P4(28); a5.position = a5.Ha.Ta(a5, b4, c4); a5.Ib = []; }, Zb = (a5, b4, c4, d5, f4) => { if (0 > d5 || 0 > f4) throw new P4(28); if (null === a5.fd) throw new P4(8); if (1 === (a5.flags & 2097155)) throw new P4(8); if (16384 === (a5.node.mode & 61440)) throw new P4(31); if (!a5.Ha.read) throw new P4(28); var h5 = "undefined" != typeof f4; if (!h5) f4 = a5.position; else if (!a5.seekable) throw new P4(70); b4 = a5.Ha.read(a5, b4, c4, d5, f4); h5 || (a5.position += b4); return b4; }, ka = (a5, b4, c4, d5, f4) => { if (0 > d5 || 0 > f4) throw new P4(28); if (null === a5.fd) throw new P4(8); if (0 === (a5.flags & 2097155)) throw new P4(8); if (16384 === (a5.node.mode & 61440)) throw new P4(31); if (!a5.Ha.write) throw new P4(28); a5.seekable && a5.flags & 1024 && Yb(a5, 0, 2); var h5 = "undefined" != typeof f4; if (!h5) f4 = a5.position; else if (!a5.seekable) throw new P4(70); b4 = a5.Ha.write(a5, b4, c4, d5, f4, void 0); h5 || (a5.position += b4); return b4; }, sa = (a5) => { var b4 = "binary"; if ("utf8" !== b4 && "binary" !== b4) throw Error('Invalid encoding type "' + b4 + '"'); var c4; var d5 = ja(a5, d5 || 0); a5 = Ub(a5).size; var f4 = new Uint8Array(a5); Zb(d5, f4, 0, a5, 0); "utf8" === b4 ? c4 = Ma(f4, 0) : "binary" === b4 && (c4 = f4); la(d5); return c4; }, $b = () => { P4 || (P4 = function(a5, b4) { this.node = b4; this.Hb = function(c4) { this.Ka = c4; }; this.Hb(a5); this.message = "FS error"; }, P4.prototype = Error(), P4.prototype.constructor = P4, [44].forEach((a5) => { xb[a5] = new P4(a5); xb[a5].stack = ""; })); }, ac, fa = (a5, b4) => { var c4 = 0; a5 && (c4 |= 365); b4 && (c4 |= 146); return c4; }, cc = (a5, b4, c4) => { a5 = z5("/dev/" + a5); var d5 = fa(!!b4, !!c4); bc || (bc = 64); var f4 = bc++ << 8 | 0; lb(f4, { open: (h5) => { h5.seekable = false; }, close: () => { c4 && c4.buffer && c4.buffer.length && c4(10); }, read: (h5, k5, q5, x5) => { for (var w5 = 0, A4 = 0; A4 < x5; A4++) { try { var S4 = b4(); } catch (nb) { throw new P4(29); } if (void 0 === S4 && 0 === w5) throw new P4(6); if (null === S4 || void 0 === S4) break; w5++; k5[q5 + A4] = S4; } w5 && (h5.node.timestamp = Date.now()); return w5; }, write: (h5, k5, q5, x5) => { for (var w5 = 0; w5 < x5; w5++) try { c4(k5[q5 + w5]); } catch (A4) { throw new P4(29); } x5 && (h5.node.timestamp = Date.now()); return w5; } }); Rb(a5, d5, f4); }, bc, W2 = {}, Ob, Xb; function dc(a5, b4, c4) { if ("/" === b4.charAt(0)) return b4; a5 = -100 === a5 ? "/" : X3(a5).path; if (0 == b4.length) { if (!c4) throw new P4(44); return a5; } return z5(a5 + "/" + b4); } function ec(a5, b4, c4) { try { var d5 = a5(b4); } catch (f4) { if (f4 && f4.node && z5(b4) !== z5(ea(f4.node))) return -54; throw f4; } F3[c4 >> 2] = d5.dev; F3[c4 + 8 >> 2] = d5.ino; F3[c4 + 12 >> 2] = d5.mode; J2[c4 + 16 >> 2] = d5.nlink; F3[c4 + 20 >> 2] = d5.uid; F3[c4 + 24 >> 2] = d5.gid; F3[c4 + 28 >> 2] = d5.rdev; O4 = [d5.size >>> 0, (N3 = d5.size, 1 <= +Math.abs(N3) ? 0 < N3 ? (Math.min(+Math.floor(N3 / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((N3 - +(~~N3 >>> 0)) / 4294967296) >>> 0 : 0)]; F3[c4 + 40 >> 2] = O4[0]; F3[c4 + 44 >> 2] = O4[1]; F3[c4 + 48 >> 2] = 4096; F3[c4 + 52 >> 2] = d5.blocks; O4 = [Math.floor(d5.atime.getTime() / 1e3) >>> 0, (N3 = Math.floor(d5.atime.getTime() / 1e3), 1 <= +Math.abs(N3) ? 0 < N3 ? (Math.min(+Math.floor(N3 / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((N3 - +(~~N3 >>> 0)) / 4294967296) >>> 0 : 0)]; F3[c4 + 56 >> 2] = O4[0]; F3[c4 + 60 >> 2] = O4[1]; J2[c4 + 64 >> 2] = 0; O4 = [Math.floor(d5.mtime.getTime() / 1e3) >>> 0, (N3 = Math.floor(d5.mtime.getTime() / 1e3), 1 <= +Math.abs(N3) ? 0 < N3 ? (Math.min(+Math.floor(N3 / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((N3 - +(~~N3 >>> 0)) / 4294967296) >>> 0 : 0)]; F3[c4 + 72 >> 2] = O4[0]; F3[c4 + 76 >> 2] = O4[1]; J2[c4 + 80 >> 2] = 0; O4 = [Math.floor(d5.ctime.getTime() / 1e3) >>> 0, (N3 = Math.floor(d5.ctime.getTime() / 1e3), 1 <= +Math.abs(N3) ? 0 < N3 ? (Math.min(+Math.floor(N3 / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((N3 - +(~~N3 >>> 0)) / 4294967296) >>> 0 : 0)]; F3[c4 + 88 >> 2] = O4[0]; F3[c4 + 92 >> 2] = O4[1]; J2[c4 + 96 >> 2] = 0; O4 = [d5.ino >>> 0, (N3 = d5.ino, 1 <= +Math.abs(N3) ? 0 < N3 ? (Math.min(+Math.floor(N3 / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((N3 - +(~~N3 >>> 0)) / 4294967296) >>> 0 : 0)]; F3[c4 + 104 >> 2] = O4[0]; F3[c4 + 108 >> 2] = O4[1]; return 0; } var fc = void 0; function Hc() { fc += 4; return F3[fc - 4 >> 2]; } function X3(a5) { a5 = R3[a5]; if (!a5) throw new P4(8); return a5; } function Jc(a5) { return J2[a5 >> 2] + 4294967296 * F3[a5 + 4 >> 2]; } function Kc(a5) { var b4 = ca(a5) + 1, c4 = da(b4); c4 && t4(a5, r3, c4, b4); return c4; } function Lc(a5, b4, c4) { function d5(x5) { return (x5 = x5.toTimeString().match(/\(([A-Za-z ]+)\)$/)) ? x5[1] : "GMT"; } var f4 = new Date().getFullYear(), h5 = new Date(f4, 0, 1), k5 = new Date(f4, 6, 1); f4 = h5.getTimezoneOffset(); var q5 = k5.getTimezoneOffset(); F3[a5 >> 2] = 60 * Math.max(f4, q5); F3[b4 >> 2] = Number(f4 != q5); a5 = d5(h5); b4 = d5(k5); a5 = Kc(a5); b4 = Kc(b4); q5 < f4 ? (J2[c4 >> 2] = a5, J2[c4 + 4 >> 2] = b4) : (J2[c4 >> 2] = b4, J2[c4 + 4 >> 2] = a5); } function Mc(a5, b4, c4) { Mc.Bb || (Mc.Bb = true, Lc(a5, b4, c4)); } var Nc; Nc = Aa ? () => { var a5 = process.hrtime(); return 1e3 * a5[0] + a5[1] / 1e6; } : () => performance.now(); var Oc = {}; function Pc() { if (!Qc) { var a5 = { USER: "web_user", LOGNAME: "web_user", PATH: "/", PWD: "/", HOME: "/home/web_user", LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8", _: wa || "./this.program" }, b4; for (b4 in Oc) void 0 === Oc[b4] ? delete a5[b4] : a5[b4] = Oc[b4]; var c4 = []; for (b4 in a5) c4.push(b4 + "=" + a5[b4]); Qc = c4; } return Qc; } var Qc, Y3 = void 0, Rc = []; function ua(a5, b4) { if (!Y3) { Y3 = /* @__PURE__ */ new WeakMap(); var c4 = K3.length; if (Y3) for (var d5 = 0; d5 < 0 + c4; d5++) { var f4 = K3.get(d5); f4 && Y3.set(f4, d5); } } if (Y3.has(a5)) return Y3.get(a5); if (Rc.length) c4 = Rc.pop(); else { try { K3.grow(1); } catch (q5) { if (!(q5 instanceof RangeError)) throw q5; throw "Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."; } c4 = K3.length - 1; } try { K3.set(c4, a5); } catch (q5) { if (!(q5 instanceof TypeError)) throw q5; if ("function" == typeof WebAssembly.Function) { d5 = WebAssembly.Function; f4 = { i: "i32", j: "i64", f: "f32", d: "f64", p: "i32" }; for (var h5 = { parameters: [], results: "v" == b4[0] ? [] : [f4[b4[0]]] }, k5 = 1; k5 < b4.length; ++k5) h5.parameters.push(f4[b4[k5]]); b4 = new d5(h5, a5); } else { d5 = [1, 96]; f4 = b4.slice(0, 1); b4 = b4.slice(1); h5 = { i: 127, p: 127, j: 126, f: 125, d: 124 }; k5 = b4.length; 128 > k5 ? d5.push(k5) : d5.push(k5 % 128 | 128, k5 >> 7); for (k5 = 0; k5 < b4.length; ++k5) d5.push(h5[b4[k5]]); "v" == f4 ? d5.push(0) : d5.push(1, h5[f4]); b4 = [0, 97, 115, 109, 1, 0, 0, 0, 1]; f4 = d5.length; 128 > f4 ? b4.push(f4) : b4.push(f4 % 128 | 128, f4 >> 7); b4.push.apply(b4, d5); b4.push(2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0); b4 = new WebAssembly.Module(new Uint8Array(b4)); b4 = new WebAssembly.Instance(b4, { e: { f: a5 } }).exports.f; } K3.set( c4, b4 ); } Y3.set(a5, c4); return c4; } function ra(a5) { Y3.delete(K3.get(a5)); Rc.push(a5); } var Sc = 0, Tc = 1; function aa(a5) { var b4 = Sc == Tc ? B5(a5.length) : da(a5.length); a5.subarray || a5.slice || (a5 = new Uint8Array(a5)); u4.set(a5, b4); return b4; } function Uc(a5, b4, c4, d5) { var f4 = { string: (w5) => { var A4 = 0; if (null !== w5 && void 0 !== w5 && 0 !== w5) { var S4 = (w5.length << 2) + 1; A4 = B5(S4); t4(w5, u4, A4, S4); } return A4; }, array: (w5) => { var A4 = B5(w5.length); r3.set(w5, A4); return A4; } }; a5 = e4["_" + a5]; var h5 = [], k5 = 0; if (d5) for (var q5 = 0; q5 < d5.length; q5++) { var x5 = f4[c4[q5]]; x5 ? (0 === k5 && (k5 = oa()), h5[q5] = x5(d5[q5])) : h5[q5] = d5[q5]; } c4 = a5.apply(null, h5); return c4 = function(w5) { 0 !== k5 && qa(k5); return "string" === b4 ? C3(w5) : "boolean" === b4 ? !!w5 : w5; }(c4); } function Ib(a5, b4, c4, d5) { a5 || (a5 = this); this.parent = a5; this.Ra = a5.Ra; this.Va = null; this.id = Cb++; this.name = b4; this.mode = c4; this.Ga = {}; this.Ha = {}; this.rdev = d5; } Object.defineProperties(Ib.prototype, { read: { get: function() { return 365 === (this.mode & 365); }, set: function(a5) { a5 ? this.mode |= 365 : this.mode &= -366; } }, write: { get: function() { return 146 === (this.mode & 146); }, set: function(a5) { a5 ? this.mode |= 146 : this.mode &= -147; } } }); $b(); T6 = Array(4096); Qb(Q3, "/"); V3("/tmp"); V3("/home"); V3("/home/web_user"); (() => { V3("/dev"); lb(259, { read: () => 0, write: (b4, c4, d5, f4) => f4 }); Rb("/dev/null", 259); jb(1280, tb); jb(1536, ub); Rb("/dev/tty", 1280); Rb("/dev/tty1", 1536); var a5 = gb(); cc("random", a5); cc("urandom", a5); V3("/dev/shm"); V3("/dev/shm/tmp"); })(); (() => { V3("/proc"); var a5 = V3("/proc/self"); V3("/proc/self/fd"); Qb({ Ra: () => { var b4 = wb(a5, "fd", 16895, 73); b4.Ga = { lookup: (c4, d5) => { var f4 = R3[+d5]; if (!f4) throw new P4(8); c4 = { parent: null, Ra: { ub: "fake" }, Ga: { readlink: () => f4.path } }; return c4.parent = c4; } }; return b4; } }, "/proc/self/fd"); })(); var Wc = { a: function(a5, b4, c4, d5) { E3("Assertion failed: " + C3(a5) + ", at: " + [b4 ? C3(b4) : "unknown filename", c4, d5 ? C3(d5) : "unknown function"]); }, h: function(a5, b4) { try { return a5 = C3(a5), ia(a5, b4), 0; } catch (c4) { if ("undefined" == typeof W2 || !(c4 instanceof P4)) throw c4; return -c4.Ka; } }, H: function(a5, b4, c4) { try { b4 = C3(b4); b4 = dc(a5, b4); if (c4 & -8) return -28; var d5 = U2(b4, { Sa: true }).node; if (!d5) return -44; a5 = ""; c4 & 4 && (a5 += "r"); c4 & 2 && (a5 += "w"); c4 & 1 && (a5 += "x"); return a5 && Hb(d5, a5) ? -2 : 0; } catch (f4) { if ("undefined" == typeof W2 || !(f4 instanceof P4)) throw f4; return -f4.Ka; } }, i: function(a5, b4) { try { var c4 = R3[a5]; if (!c4) throw new P4(8); ia(c4.node, b4); return 0; } catch (d5) { if ("undefined" == typeof W2 || !(d5 instanceof P4)) throw d5; return -d5.Ka; } }, g: function(a5) { try { var b4 = R3[a5]; if (!b4) throw new P4(8); var c4 = b4.node; var d5 = "string" == typeof c4 ? U2(c4, { Sa: true }).node : c4; if (!d5.Ga.Oa) throw new P4(63); d5.Ga.Oa(d5, { timestamp: Date.now() }); return 0; } catch (f4) { if ("undefined" == typeof W2 || !(f4 instanceof P4)) throw f4; return -f4.Ka; } }, b: function(a5, b4, c4) { fc = c4; try { var d5 = X3(a5); switch (b4) { case 0: var f4 = Hc(); return 0 > f4 ? -28 : Pb(d5, f4).fd; case 1: case 2: return 0; case 3: return d5.flags; case 4: return f4 = Hc(), d5.flags |= f4, 0; case 5: return f4 = Hc(), Oa[f4 + 0 >> 1] = 2, 0; case 6: case 7: return 0; case 16: case 8: return -28; case 9: return F3[Vc() >> 2] = 28, -1; default: return -28; } } catch (h5) { if ("undefined" == typeof W2 || !(h5 instanceof P4)) throw h5; return -h5.Ka; } }, G: function(a5, b4) { try { var c4 = X3(a5); return ec(Ub, c4.path, b4); } catch (d5) { if ("undefined" == typeof W2 || !(d5 instanceof P4)) throw d5; return -d5.Ka; } }, l: function(a5, b4, c4) { try { b4 = c4 + 2097152 >>> 0 < 4194305 - !!b4 ? (b4 >>> 0) + 4294967296 * c4 : NaN; if (isNaN(b4)) return -61; var d5 = R3[a5]; if (!d5) throw new P4(8); if (0 === (d5.flags & 2097155)) throw new P4(28); Wb(d5.node, b4); return 0; } catch (f4) { if ("undefined" == typeof W2 || !(f4 instanceof P4)) throw f4; return -f4.Ka; } }, B: function(a5, b4) { try { if (0 === b4) return -28; var c4 = ca("/") + 1; if (b4 < c4) return -68; t4("/", u4, a5, b4); return c4; } catch (d5) { if ("undefined" == typeof W2 || !(d5 instanceof P4)) throw d5; return -d5.Ka; } }, E: function(a5, b4) { try { return a5 = C3(a5), ec(Vb, a5, b4); } catch (c4) { if ("undefined" == typeof W2 || !(c4 instanceof P4)) throw c4; return -c4.Ka; } }, y: function(a5, b4, c4) { try { return b4 = C3(b4), b4 = dc(a5, b4), b4 = z5(b4), "/" === b4[b4.length - 1] && (b4 = b4.substr(0, b4.length - 1)), V3(b4, c4), 0; } catch (d5) { if ("undefined" == typeof W2 || !(d5 instanceof P4)) throw d5; return -d5.Ka; } }, D: function(a5, b4, c4, d5) { try { b4 = C3(b4); var f4 = d5 & 256; b4 = dc(a5, b4, d5 & 4096); return ec(f4 ? Vb : Ub, b4, c4); } catch (h5) { if ("undefined" == typeof W2 || !(h5 instanceof P4)) throw h5; return -h5.Ka; } }, v: function(a5, b4, c4, d5) { fc = d5; try { b4 = C3(b4); b4 = dc(a5, b4); var f4 = d5 ? Hc() : 0; return ja(b4, c4, f4).fd; } catch (h5) { if ("undefined" == typeof W2 || !(h5 instanceof P4)) throw h5; return -h5.Ka; } }, t: function(a5, b4, c4, d5) { try { b4 = C3(b4); b4 = dc(a5, b4); if (0 >= d5) return -28; var f4 = Eb(b4), h5 = Math.min( d5, ca(f4) ), k5 = r3[c4 + h5]; t4(f4, u4, c4, d5 + 1); r3[c4 + h5] = k5; return h5; } catch (q5) { if ("undefined" == typeof W2 || !(q5 instanceof P4)) throw q5; return -q5.Ka; } }, s: function(a5) { try { return a5 = C3(a5), Tb(a5), 0; } catch (b4) { if ("undefined" == typeof W2 || !(b4 instanceof P4)) throw b4; return -b4.Ka; } }, F: function(a5, b4) { try { return a5 = C3(a5), ec(Ub, a5, b4); } catch (c4) { if ("undefined" == typeof W2 || !(c4 instanceof P4)) throw c4; return -c4.Ka; } }, p: function(a5, b4, c4) { try { return b4 = C3(b4), b4 = dc(a5, b4), 0 === c4 ? ta(b4) : 512 === c4 ? Tb(b4) : E3("Invalid flags passed to unlinkat"), 0; } catch (d5) { if ("undefined" == typeof W2 || !(d5 instanceof P4)) throw d5; return -d5.Ka; } }, o: function(a5, b4, c4) { try { b4 = C3(b4); b4 = dc(a5, b4, true); if (c4) { var d5 = Jc(c4), f4 = F3[c4 + 8 >> 2]; h5 = 1e3 * d5 + f4 / 1e6; c4 += 16; d5 = Jc(c4); f4 = F3[c4 + 8 >> 2]; k5 = 1e3 * d5 + f4 / 1e6; } else var h5 = Date.now(), k5 = h5; a5 = h5; var q5 = U2(b4, { Sa: true }).node; q5.Ga.Oa(q5, { timestamp: Math.max(a5, k5) }); return 0; } catch (x5) { if ("undefined" == typeof W2 || !(x5 instanceof P4)) throw x5; return -x5.Ka; } }, e: function() { return Date.now(); }, j: function(a5, b4) { a5 = new Date(1e3 * Jc(a5)); F3[b4 >> 2] = a5.getSeconds(); F3[b4 + 4 >> 2] = a5.getMinutes(); F3[b4 + 8 >> 2] = a5.getHours(); F3[b4 + 12 >> 2] = a5.getDate(); F3[b4 + 16 >> 2] = a5.getMonth(); F3[b4 + 20 >> 2] = a5.getFullYear() - 1900; F3[b4 + 24 >> 2] = a5.getDay(); var c4 = new Date(a5.getFullYear(), 0, 1); F3[b4 + 28 >> 2] = (a5.getTime() - c4.getTime()) / 864e5 | 0; F3[b4 + 36 >> 2] = -(60 * a5.getTimezoneOffset()); var d5 = new Date(a5.getFullYear(), 6, 1).getTimezoneOffset(); c4 = c4.getTimezoneOffset(); F3[b4 + 32 >> 2] = (d5 != c4 && a5.getTimezoneOffset() == Math.min(c4, d5)) | 0; }, w: function(a5, b4, c4, d5, f4, h5) { try { var k5 = X3(d5); if (0 !== (b4 & 2) && 0 === (c4 & 2) && 2 !== (k5.flags & 2097155)) throw new P4(2); if (1 === (k5.flags & 2097155)) throw new P4(2); if (!k5.Ha.bb) throw new P4(43); var q5 = k5.Ha.bb(k5, a5, f4, b4, c4); var x5 = q5.Fb; F3[h5 >> 2] = q5.vb; return x5; } catch (w5) { if ("undefined" == typeof W2 || !(w5 instanceof P4)) throw w5; return -w5.Ka; } }, x: function(a5, b4, c4, d5, f4, h5) { try { var k5 = X3(f4); if (c4 & 2) { var q5 = u4.slice(a5, a5 + b4); k5 && k5.Ha.cb && k5.Ha.cb(k5, q5, h5, b4, d5); } } catch (x5) { if ("undefined" == typeof W2 || !(x5 instanceof P4)) throw x5; return -x5.Ka; } }, n: Mc, q: function() { return 2147483648; }, d: Nc, c: function(a5) { var b4 = u4.length; a5 >>>= 0; if (2147483648 < a5) return false; for (var c4 = 1; 4 >= c4; c4 *= 2) { var d5 = b4 * (1 + 0.2 / c4); d5 = Math.min(d5, a5 + 100663296); var f4 = Math; d5 = Math.max( a5, d5 ); f4 = f4.min.call(f4, 2147483648, d5 + (65536 - d5 % 65536) % 65536); a: { try { Ja.grow(f4 - Na.byteLength + 65535 >>> 16); Ra(); var h5 = 1; break a; } catch (k5) { } h5 = void 0; } if (h5) return true; } return false; }, z: function(a5, b4) { var c4 = 0; Pc().forEach(function(d5, f4) { var h5 = b4 + c4; f4 = J2[a5 + 4 * f4 >> 2] = h5; for (h5 = 0; h5 < d5.length; ++h5) r3[f4++ >> 0] = d5.charCodeAt(h5); r3[f4 >> 0] = 0; c4 += d5.length + 1; }); return 0; }, A: function(a5, b4) { var c4 = Pc(); J2[a5 >> 2] = c4.length; var d5 = 0; c4.forEach(function(f4) { d5 += f4.length + 1; }); J2[b4 >> 2] = d5; return 0; }, f: function(a5) { try { var b4 = X3(a5); la(b4); return 0; } catch (c4) { if ("undefined" == typeof W2 || !(c4 instanceof P4)) throw c4; return c4.Ka; } }, m: function(a5, b4) { try { var c4 = X3(a5); r3[b4 >> 0] = c4.tty ? 2 : 16384 === (c4.mode & 61440) ? 3 : 40960 === (c4.mode & 61440) ? 7 : 4; return 0; } catch (d5) { if ("undefined" == typeof W2 || !(d5 instanceof P4)) throw d5; return d5.Ka; } }, u: function(a5, b4, c4, d5) { try { a: { var f4 = X3(a5); a5 = b4; for (var h5 = b4 = 0; h5 < c4; h5++) { var k5 = J2[a5 >> 2], q5 = J2[a5 + 4 >> 2]; a5 += 8; var x5 = Zb(f4, r3, k5, q5); if (0 > x5) { var w5 = -1; break a; } b4 += x5; if (x5 < q5) break; } w5 = b4; } J2[d5 >> 2] = w5; return 0; } catch (A4) { if ("undefined" == typeof W2 || !(A4 instanceof P4)) throw A4; return A4.Ka; } }, k: function(a5, b4, c4, d5, f4) { try { b4 = c4 + 2097152 >>> 0 < 4194305 - !!b4 ? (b4 >>> 0) + 4294967296 * c4 : NaN; if (isNaN(b4)) return 61; var h5 = X3(a5); Yb(h5, b4, d5); O4 = [h5.position >>> 0, (N3 = h5.position, 1 <= +Math.abs(N3) ? 0 < N3 ? (Math.min(+Math.floor(N3 / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((N3 - +(~~N3 >>> 0)) / 4294967296) >>> 0 : 0)]; F3[f4 >> 2] = O4[0]; F3[f4 + 4 >> 2] = O4[1]; h5.hb && 0 === b4 && 0 === d5 && (h5.hb = null); return 0; } catch (k5) { if ("undefined" == typeof W2 || !(k5 instanceof P4)) throw k5; return k5.Ka; } }, C: function(a5) { try { var b4 = X3(a5); return b4.Ha && b4.Ha.fsync ? b4.Ha.fsync(b4) : 0; } catch (c4) { if ("undefined" == typeof W2 || !(c4 instanceof P4)) throw c4; return c4.Ka; } }, r: function(a5, b4, c4, d5) { try { a: { var f4 = X3(a5); a5 = b4; for (var h5 = b4 = 0; h5 < c4; h5++) { var k5 = J2[a5 >> 2], q5 = J2[a5 + 4 >> 2]; a5 += 8; var x5 = ka(f4, r3, k5, q5); if (0 > x5) { var w5 = -1; break a; } b4 += x5; } w5 = b4; } J2[d5 >> 2] = w5; return 0; } catch (A4) { if ("undefined" == typeof W2 || !(A4 instanceof P4)) throw A4; return A4.Ka; } } }; (function() { function a5(f4) { e4.asm = f4.exports; Ja = e4.asm.I; Ra(); K3 = e4.asm.Aa; Ta.unshift(e4.asm.J); Wa--; e4.monitorRunDependencies && e4.monitorRunDependencies(Wa); 0 == Wa && (null !== Xa && (clearInterval(Xa), Xa = null), Ya && (f4 = Ya, Ya = null, f4())); } function b4(f4) { a5(f4.instance); } function c4(f4) { return bb().then(function(h5) { return WebAssembly.instantiate(h5, d5); }).then(function(h5) { return h5; }).then(f4, function(h5) { Ha("failed to asynchronously prepare wasm: " + h5); E3(h5); }); } var d5 = { a: Wc }; Wa++; e4.monitorRunDependencies && e4.monitorRunDependencies(Wa); if (e4.instantiateWasm) try { return e4.instantiateWasm(d5, a5); } catch (f4) { return Ha("Module.instantiateWasm callback failed with error: " + f4), false; } (function() { return Ia || "function" != typeof WebAssembly.instantiateStreaming || Za() || M5.startsWith("file://") || Aa || "function" != typeof fetch ? c4(b4) : fetch(M5, { credentials: "same-origin" }).then(function(f4) { return WebAssembly.instantiateStreaming(f4, d5).then(b4, function(h5) { Ha("wasm streaming compile failed: " + h5); Ha("falling back to ArrayBuffer instantiation"); return c4(b4); }); }); })(); return {}; })(); e4.___wasm_call_ctors = function() { return (e4.___wasm_call_ctors = e4.asm.J).apply(null, arguments); }; e4._sqlite3_free = function() { return (e4._sqlite3_free = e4.asm.K).apply(null, arguments); }; e4._sqlite3_value_double = function() { return (e4._sqlite3_value_double = e4.asm.L).apply(null, arguments); }; e4._sqlite3_value_text = function() { return (e4._sqlite3_value_text = e4.asm.M).apply(null, arguments); }; var Vc = e4.___errno_location = function() { return (Vc = e4.___errno_location = e4.asm.N).apply(null, arguments); }; e4._sqlite3_prepare_v2 = function() { return (e4._sqlite3_prepare_v2 = e4.asm.O).apply(null, arguments); }; e4._sqlite3_step = function() { return (e4._sqlite3_step = e4.asm.P).apply(null, arguments); }; e4._sqlite3_finalize = function() { return (e4._sqlite3_finalize = e4.asm.Q).apply(null, arguments); }; e4._sqlite3_reset = function() { return (e4._sqlite3_reset = e4.asm.R).apply(null, arguments); }; e4._sqlite3_value_int = function() { return (e4._sqlite3_value_int = e4.asm.S).apply(null, arguments); }; e4._sqlite3_clear_bindings = function() { return (e4._sqlite3_clear_bindings = e4.asm.T).apply(null, arguments); }; e4._sqlite3_value_blob = function() { return (e4._sqlite3_value_blob = e4.asm.U).apply(null, arguments); }; e4._sqlite3_value_bytes = function() { return (e4._sqlite3_value_bytes = e4.asm.V).apply(null, arguments); }; e4._sqlite3_value_type = function() { return (e4._sqlite3_value_type = e4.asm.W).apply(null, arguments); }; e4._sqlite3_result_blob = function() { return (e4._sqlite3_result_blob = e4.asm.X).apply(null, arguments); }; e4._sqlite3_result_double = function() { return (e4._sqlite3_result_double = e4.asm.Y).apply(null, arguments); }; e4._sqlite3_result_error = function() { return (e4._sqlite3_result_error = e4.asm.Z).apply(null, arguments); }; e4._sqlite3_result_int = function() { return (e4._sqlite3_result_int = e4.asm._).apply(null, arguments); }; e4._sqlite3_result_int64 = function() { return (e4._sqlite3_result_int64 = e4.asm.$).apply(null, arguments); }; e4._sqlite3_result_null = function() { return (e4._sqlite3_result_null = e4.asm.aa).apply(null, arguments); }; e4._sqlite3_result_text = function() { return (e4._sqlite3_result_text = e4.asm.ba).apply(null, arguments); }; e4._sqlite3_sql = function() { return (e4._sqlite3_sql = e4.asm.ca).apply(null, arguments); }; e4._sqlite3_aggregate_context = function() { return (e4._sqlite3_aggregate_context = e4.asm.da).apply(null, arguments); }; e4._sqlite3_column_count = function() { return (e4._sqlite3_column_count = e4.asm.ea).apply(null, arguments); }; e4._sqlite3_data_count = function() { return (e4._sqlite3_data_count = e4.asm.fa).apply(null, arguments); }; e4._sqlite3_column_blob = function() { return (e4._sqlite3_column_blob = e4.asm.ga).apply(null, arguments); }; e4._sqlite3_column_bytes = function() { return (e4._sqlite3_column_bytes = e4.asm.ha).apply(null, arguments); }; e4._sqlite3_column_double = function() { return (e4._sqlite3_column_double = e4.asm.ia).apply(null, arguments); }; e4._sqlite3_column_text = function() { return (e4._sqlite3_column_text = e4.asm.ja).apply(null, arguments); }; e4._sqlite3_column_type = function() { return (e4._sqlite3_column_type = e4.asm.ka).apply(null, arguments); }; e4._sqlite3_column_name = function() { return (e4._sqlite3_column_name = e4.asm.la).apply(null, arguments); }; e4._sqlite3_bind_blob = function() { return (e4._sqlite3_bind_blob = e4.asm.ma).apply(null, arguments); }; e4._sqlite3_bind_double = function() { return (e4._sqlite3_bind_double = e4.asm.na).apply(null, arguments); }; e4._sqlite3_bind_int = function() { return (e4._sqlite3_bind_int = e4.asm.oa).apply(null, arguments); }; e4._sqlite3_bind_text = function() { return (e4._sqlite3_bind_text = e4.asm.pa).apply(null, arguments); }; e4._sqlite3_bind_parameter_index = function() { return (e4._sqlite3_bind_parameter_index = e4.asm.qa).apply(null, arguments); }; e4._sqlite3_normalized_sql = function() { return (e4._sqlite3_normalized_sql = e4.asm.ra).apply(null, arguments); }; e4._sqlite3_errmsg = function() { return (e4._sqlite3_errmsg = e4.asm.sa).apply(null, arguments); }; e4._sqlite3_exec = function() { return (e4._sqlite3_exec = e4.asm.ta).apply(null, arguments); }; e4._sqlite3_changes = function() { return (e4._sqlite3_changes = e4.asm.ua).apply(null, arguments); }; e4._sqlite3_close_v2 = function() { return (e4._sqlite3_close_v2 = e4.asm.va).apply(null, arguments); }; e4._sqlite3_create_function_v2 = function() { return (e4._sqlite3_create_function_v2 = e4.asm.wa).apply(null, arguments); }; e4._sqlite3_open = function() { return (e4._sqlite3_open = e4.asm.xa).apply(null, arguments); }; var da = e4._malloc = function() { return (da = e4._malloc = e4.asm.ya).apply(null, arguments); }, ba = e4._free = function() { return (ba = e4._free = e4.asm.za).apply(null, arguments); }; e4._RegisterExtensionFunctions = function() { return (e4._RegisterExtensionFunctions = e4.asm.Ba).apply(null, arguments); }; var zb = e4._emscripten_builtin_memalign = function() { return (zb = e4._emscripten_builtin_memalign = e4.asm.Ca).apply(null, arguments); }, oa = e4.stackSave = function() { return (oa = e4.stackSave = e4.asm.Da).apply(null, arguments); }, qa = e4.stackRestore = function() { return (qa = e4.stackRestore = e4.asm.Ea).apply(null, arguments); }, B5 = e4.stackAlloc = function() { return (B5 = e4.stackAlloc = e4.asm.Fa).apply(null, arguments); }; e4.UTF8ToString = C3; e4.stackAlloc = B5; e4.stackSave = oa; e4.stackRestore = qa; e4.cwrap = function(a5, b4, c4, d5) { c4 = c4 || []; var f4 = c4.every((h5) => "number" === h5 || "boolean" === h5); return "string" !== b4 && f4 && !d5 ? e4["_" + a5] : function() { return Uc(a5, b4, c4, arguments); }; }; var Xc; Ya = function Yc() { Xc || Zc(); Xc || (Ya = Yc); }; function Zc() { function a5() { if (!Xc && (Xc = true, e4.calledRun = true, !Ka)) { e4.noFSInit || ac || (ac = true, $b(), e4.stdin = e4.stdin, e4.stdout = e4.stdout, e4.stderr = e4.stderr, e4.stdin ? cc("stdin", e4.stdin) : Sb("/dev/tty", "/dev/stdin"), e4.stdout ? cc("stdout", null, e4.stdout) : Sb("/dev/tty", "/dev/stdout"), e4.stderr ? cc("stderr", null, e4.stderr) : Sb("/dev/tty1", "/dev/stderr"), ja("/dev/stdin", 0), ja("/dev/stdout", 1), ja("/dev/stderr", 1)); Db = false; cb(Ta); if (e4.onRuntimeInitialized) e4.onRuntimeInitialized(); if (e4.postRun) for ("function" == typeof e4.postRun && (e4.postRun = [e4.postRun]); e4.postRun.length; ) { var b4 = e4.postRun.shift(); Ua.unshift(b4); } cb(Ua); } } if (!(0 < Wa)) { if (e4.preRun) for ("function" == typeof e4.preRun && (e4.preRun = [e4.preRun]); e4.preRun.length; ) Va(); cb(Sa); 0 < Wa || (e4.setStatus ? (e4.setStatus("Running..."), setTimeout(function() { setTimeout(function() { e4.setStatus(""); }, 1); a5(); }, 1)) : a5()); } } if (e4.preInit) for ("function" == typeof e4.preInit && (e4.preInit = [e4.preInit]); 0 < e4.preInit.length; ) e4.preInit.pop()(); Zc(); return Module; }); return initSqlJsPromise; }; if (typeof exports === "object" && typeof module2 === "object") { module2.exports = initSqlJs2; module2.exports.default = initSqlJs2; } else if (typeof define === "function" && define["amd"]) { define([], function() { return initSqlJs2; }); } else if (typeof exports === "object") { exports["Module"] = initSqlJs2; } } }); // node_modules/obsidian-dataview/lib/index.js var require_lib = __commonJS({ "node_modules/obsidian-dataview/lib/index.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("obsidian"); var getAPI2 = (app2) => { var _a2; if (app2) return (_a2 = app2.plugins.plugins.dataview) === null || _a2 === void 0 ? void 0 : _a2.api; else return window["DataviewAPI"]; }; var isPluginEnabled = (app2) => app2.plugins.enabledPlugins.has("dataview"); exports.getAPI = getAPI2; exports.isPluginEnabled = isPluginEnabled; } }); // src/main.ts var main_exports = {}; __export(main_exports, { default: () => MakeMDPlugin }); module.exports = __toCommonJS(main_exports); // src/cm-extensions/flowEditor/atomic.ts var import_state6 = require("@codemirror/state"); // src/types/types.ts var eventTypes = { selectedFileChange: "mkmd-selected-file-change", activeFileChange: "mkmd-active-file-change", refreshView: "mkmd-refresh-view", revealFile: "mkmd-reveal-file", tagsChange: "mkmd-tags-change", vaultChange: "mkmd-vault-change", mdbChange: "mkmd-mdb-change", spacesChange: "mkmd-spaces-change", updateSections: "mkmd-update-sections", settingsChanged: "mkmd-settings-changed", spawnPortal: "mkmd-portal-spawn", loadPortal: "mkmd-portal-load", openFilePortal: "mkmd-portal-file", focusPortal: "mkmd-portal-focus" }; // src/dispatch/flowDispatch.ts var createFlowEditorInElement = (id2, el, type, file, ref, from, to) => { let evt = new CustomEvent(eventTypes.spawnPortal, { detail: { id: id2, el, file, from, to, ref, type } }); activeWindow.dispatchEvent(evt); }; var loadFlowEditorByDOM = (el, view, id2) => { let evt = new CustomEvent(eventTypes.loadPortal, { detail: { id: id2, el, view } }); activeWindow.dispatchEvent(evt); }; var focusFlowEditor = (id2, top) => { let evt = new CustomEvent(eventTypes.focusPortal, { detail: { id: id2, parent: false, top } }); activeWindow.dispatchEvent(evt); }; var focusFlowEditorParent = (id2, top) => { let evt = new CustomEvent(eventTypes.focusPortal, { detail: { id: id2, parent: true, top } }); activeWindow.dispatchEvent(evt); }; var openFileFlowEditor = (file, source) => { let evt = new CustomEvent(eventTypes.openFilePortal, { detail: { file, source } }); activeWindow.dispatchEvent(evt); }; // src/cm-extensions/markSans/callout.tsx var import_language = require("@codemirror/language"); var import_state = require("@codemirror/state"); var import_view = require("@codemirror/view"); // src/utils/uuid.js function genId() { return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace( /[018]/g, (c4) => (c4 ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c4 / 4).toString(16) ); } // src/cm-extensions/markSans/callout.tsx var portalTypeAnnotation = import_state.Annotation.define(); var flowIDAnnotation = import_state.Annotation.define(); var flowIDStateField = import_state.StateField.define({ create: () => void 0, update(value, tr) { if (tr.annotation(flowIDAnnotation)) return tr.annotation(flowIDAnnotation); return value; } }); var flowTypeStateField = import_state.StateField.define({ create: () => "none", update(value, tr) { if (tr.annotation(portalTypeAnnotation)) return tr.annotation(portalTypeAnnotation); return value; } }); var calloutField = import_state.StateField.define({ create() { return import_view.Decoration.none; }, update(value, tr) { if (tr.state.field(flowTypeStateField) != "doc") { return value; } let builder = new import_state.RangeSetBuilder(); let nodes2 = []; (0, import_language.syntaxTree)(tr.state).iterate({ enter: ({ name, from, to }) => { nodes2.push({ name, from, to }); } }); const nextQuote = (ns, to) => { const nq = ns.find( (f4) => f4.from == to + 1 && f4.name.contains("HyperMD-quote") ); if (nq) { return nextQuote(ns, nq.to); } return to; }; const previous = value.iter(); const previousSpecs = []; while (previous.value !== null) { previousSpecs.push(previous.value.spec.widget.info); previous.next(); } let index = 0; nodes2.map(({ name, from, to }) => { if (name.contains("HyperMD-callout")) { const existingCallout = previousSpecs[index]; const endQuote = nextQuote(nodes2, to); const lineStart = tr.state.doc.lineAt(from).number; const lineEnd = tr.state.doc.lineAt(endQuote).number; if (existingCallout) { builder.add( from, endQuote + 1, calloutBlock( { from: lineStart, to: lineEnd }, tr.state.sliceDoc(from, endQuote), existingCallout.id ) ); } else { builder.add( from, endQuote + 1, calloutBlock( { from: lineStart, to: lineEnd }, tr.state.sliceDoc(from, endQuote), genId() ) ); } index++; } }); const dec = builder.finish(); return dec; }, provide: (f4) => import_view.EditorView.decorations.from(f4) }); var CalloutWidget = class extends import_view.WidgetType { constructor(info) { super(); this.info = info; } eq(other) { return other.info.id === this.info.id; } toDOM() { const parseTextToCallout = (text2) => { if (!this.info.text) { return { icon: "", title: "" }; } const stringArray = text2.split("\n"); const titleRegex = RegExp(/.*\[!(\w*)\]\s(.*)/); const title = titleRegex.exec(stringArray[0]); if (!title || title.length < 3) { return { icon: "", title: "" }; } return { icon: title[1], title: title[2] }; }; const callOutData = parseTextToCallout(this.info.text); const div = document.createElement("div"); div.toggleClass("callout", true); const divTitle = div.createDiv("div"); divTitle.toggleClass("callout-title", true); const div2 = div.createDiv("div"); div2.toggleClass("callout-content", true); div2.setAttribute("id", "mk-callout-" + this.info.id); return div; } }; var calloutBlock = (range, text2, id2) => import_view.Decoration.widget({ widget: new CalloutWidget({ range, text: text2, id: id2 }), block: true }); // src/cm-extensions/flowEditor/flowEditor.tsx var import_state5 = require("@codemirror/state"); var import_view4 = require("@codemirror/view"); // src/cm-extensions/tooltip.ts var import_view2 = require("@codemirror/view"); var import_state2 = require("@codemirror/state"); var ios = typeof navigator != "undefined" && !/Edge\/(\d+)/.exec(navigator.userAgent) && /Apple Computer/.test(navigator.vendor) && (/Mobile\/\w+/.test(navigator.userAgent) || navigator.maxTouchPoints > 2); var Outside = "-10000px"; var TooltipViewManager = class { constructor(view, facet, createTooltipView) { this.facet = facet; this.createTooltipView = createTooltipView; this.input = view.state.facet(facet); this.tooltips = this.input.filter((t4) => t4); this.tooltipViews = this.tooltips.map(createTooltipView); } update(update) { let input = update.state.facet(this.facet); let tooltips2 = input.filter((x5) => x5); if (input === this.input) { for (let t4 of this.tooltipViews) if (t4.update) t4.update(update); return false; } let tooltipViews = []; for (let i4 = 0; i4 < tooltips2.length; i4++) { let tip = tooltips2[i4], known = -1; if (!tip) continue; for (let i5 = 0; i5 < this.tooltips.length; i5++) { let other = this.tooltips[i5]; if (other && other.create == tip.create) known = i5; } if (known < 0) { tooltipViews[i4] = this.createTooltipView(tip); } else { let tooltipView = tooltipViews[i4] = this.tooltipViews[known]; if (tooltipView.update) tooltipView.update(update); } } for (let t4 of this.tooltipViews) if (tooltipViews.indexOf(t4) < 0) t4.dom.remove(); this.input = input; this.tooltips = tooltips2; this.tooltipViews = tooltipViews; return true; } }; function tooltips(config = {}) { return tooltipConfig.of(config); } function windowSpace() { return { top: 0, left: 0, bottom: innerHeight, right: innerWidth }; } var tooltipConfig = import_state2.Facet.define({ combine: (values) => { var _a2, _b2, _c2; return { position: ios ? "absolute" : ((_a2 = values.find((conf) => conf.position)) == null ? void 0 : _a2.position) || "fixed", parent: ((_b2 = values.find((conf) => conf.parent)) == null ? void 0 : _b2.parent) || null, tooltipSpace: ((_c2 = values.find((conf) => conf.tooltipSpace)) == null ? void 0 : _c2.tooltipSpace) || windowSpace }; } }); var tooltipPlugin = import_view2.ViewPlugin.fromClass( class { constructor(view) { this.view = view; this.inView = true; this.lastTransaction = 0; this.measureTimeout = -1; var _a2; let config = view.state.facet(tooltipConfig); this.position = config.position; this.parent = config.parent; this.classes = view.themeClasses; this.createContainer(); this.measureReq = { read: this.readMeasure.bind(this), write: this.writeMeasure.bind(this), key: this }; this.manager = new TooltipViewManager( view, showTooltip, (t4) => this.createTooltip(t4) ); this.intersectionObserver = typeof IntersectionObserver == "function" ? new IntersectionObserver( (entries) => { if (Date.now() > this.lastTransaction - 50 && entries.length > 0 && entries[entries.length - 1].intersectionRatio < 1) this.measureSoon(); }, { threshold: [1] } ) : null; this.observeIntersection(); (_a2 = view.dom.ownerDocument.defaultView) == null ? void 0 : _a2.addEventListener( "resize", this.measureSoon = this.measureSoon.bind(this) ); this.maybeMeasure(); } createContainer() { if (this.parent) { this.container = document.createElement("div"); this.container.style.position = "relative"; this.container.className = this.view.themeClasses; this.parent.appendChild(this.container); } else { this.container = this.view.dom; } } observeIntersection() { if (this.intersectionObserver) { this.intersectionObserver.disconnect(); for (let tooltip of this.manager.tooltipViews) this.intersectionObserver.observe(tooltip.dom); } } measureSoon() { if (this.measureTimeout < 0) this.measureTimeout = setTimeout(() => { this.measureTimeout = -1; this.maybeMeasure(); }, 50); } update(update) { if (update.transactions.length) this.lastTransaction = Date.now(); let updated = this.manager.update(update); if (updated) this.observeIntersection(); let shouldMeasure = updated || update.geometryChanged; let newConfig = update.state.facet(tooltipConfig); if (newConfig.position != this.position) { this.position = newConfig.position; for (let t4 of this.manager.tooltipViews) t4.dom.style.position = this.position; shouldMeasure = true; } if (newConfig.parent != this.parent) { if (this.parent) this.container.remove(); this.parent = newConfig.parent; this.createContainer(); for (let t4 of this.manager.tooltipViews) this.container.appendChild(t4.dom); shouldMeasure = true; } else if (this.parent && this.view.themeClasses != this.classes) { this.classes = this.container.className = this.view.themeClasses; } if (shouldMeasure) this.maybeMeasure(); } createTooltip(tooltip) { let tooltipView = tooltip.create(this.view); tooltipView.dom.classList.add("cm-tooltip"); if (tooltip.arrow && !tooltipView.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")) { let arrow = document.createElement("div"); arrow.className = "cm-tooltip-arrow"; tooltipView.dom.appendChild(arrow); } tooltipView.dom.style.position = this.position; tooltipView.dom.style.top = Outside; this.container.appendChild(tooltipView.dom); if (tooltipView.mount) tooltipView.mount(this.view); return tooltipView; } destroy() { var _a2, _b2; (_a2 = this.view.dom.ownerDocument.defaultView) == null ? void 0 : _a2.removeEventListener( "resize", this.measureSoon ); for (let { dom } of this.manager.tooltipViews) dom.remove(); (_b2 = this.intersectionObserver) == null ? void 0 : _b2.disconnect(); clearTimeout(this.measureTimeout); } readMeasure() { let editor = this.view.dom.getBoundingClientRect(); return { editor, parent: this.parent ? this.container.getBoundingClientRect() : editor, pos: this.manager.tooltips.map((t4, i4) => { let tv = this.manager.tooltipViews[i4]; return tv.getCoords ? tv.getCoords(t4.pos) : this.view.coordsAtPos(t4.pos); }), size: this.manager.tooltipViews.map( ({ dom }) => dom.getBoundingClientRect() ), space: this.view.state.facet(tooltipConfig).tooltipSpace(this.view) }; } writeMeasure(measured) { let { editor, space } = measured; let others = []; for (let i4 = 0; i4 < this.manager.tooltips.length; i4++) { let tooltip = this.manager.tooltips[i4], tView = this.manager.tooltipViews[i4], { dom } = tView; let pos = measured.pos[i4], size = measured.size[i4]; if (!pos || pos.bottom <= Math.max(editor.top, space.top) || pos.top >= Math.min(editor.bottom, space.bottom) || pos.right < Math.max(editor.left, space.left) - 0.1 || pos.left > Math.min(editor.right, space.right) + 0.1) { dom.style.top = Outside; continue; } let arrow = tooltip.arrow ? tView.dom.querySelector(".cm-tooltip-arrow") : null; let arrowHeight = arrow ? 7 /* Size */ : 0; let width = size.right - size.left, height = size.bottom - size.top; let offset = tView.offset || noOffset, ltr = this.view.textDirection == import_view2.Direction.LTR; let left = size.width > space.right - space.left ? ltr ? space.left : space.right - size.width : ltr ? Math.min( pos.left - (arrow ? 14 /* Offset */ : 0) + offset.x, space.right - width ) : Math.max( space.left, pos.left - width + (arrow ? 14 /* Offset */ : 0) - offset.x ); let above = !!tooltip.above; if (!tooltip.strictSide && (above ? pos.top - (size.bottom - size.top) - offset.y < space.top : pos.bottom + (size.bottom - size.top) + offset.y > space.bottom) && above == space.bottom - pos.bottom > pos.top - space.top) above = !above; let top = above ? pos.top - height - arrowHeight - offset.y : pos.bottom + arrowHeight + offset.y; let right = left + width; if (tView.overlap !== true) { for (let r3 of others) if (r3.left < right && r3.right > left && r3.top < top + height && r3.bottom > top) top = above ? r3.top - height - 2 - arrowHeight : r3.bottom + arrowHeight + 2; } if (this.position == "absolute") { dom.style.top = top - measured.parent.top + "px"; dom.style.left = left - measured.parent.left + "px"; } else { dom.style.top = top + "px"; dom.style.left = left + "px"; } if (arrow) arrow.style.left = `${pos.left + (ltr ? offset.x : -offset.x) - (left + 14 /* Offset */ - 7 /* Size */)}px`; if (tView.overlap !== true) others.push({ left, top, right, bottom: top + height }); dom.classList.toggle("cm-tooltip-above", above); dom.classList.toggle("cm-tooltip-below", !above); if (tView.positioned) tView.positioned(); } } maybeMeasure() { if (this.manager.tooltips.length) { if (this.view.inView) this.view.requestMeasure(this.measureReq); if (this.inView != this.view.inView) { this.inView = this.view.inView; if (!this.inView) for (let tv of this.manager.tooltipViews) tv.dom.style.top = Outside; } } } }, { eventHandlers: { scroll() { this.maybeMeasure(); } } } ); var baseTheme = import_view2.EditorView.baseTheme({ ".cm-tooltip": { zIndex: 100 }, "&light .cm-tooltip": { border: "1px solid #bbb", backgroundColor: "#f5f5f5" }, "&light .cm-tooltip-section:not(:first-child)": { borderTop: "1px solid #bbb" }, "&dark .cm-tooltip": { backgroundColor: "#333338", color: "white" }, ".cm-tooltip-arrow": { height: `${7 /* Size */}px`, width: `${7 /* Size */ * 2}px`, position: "absolute", zIndex: -1, overflow: "hidden", "&:before, &:after": { content: "''", position: "absolute", width: 0, height: 0, borderLeft: `${7 /* Size */}px solid transparent`, borderRight: `${7 /* Size */}px solid transparent` }, ".cm-tooltip-above &": { bottom: `-${7 /* Size */}px`, "&:before": { borderTop: `${7 /* Size */}px solid #bbb` }, "&:after": { borderTop: `${7 /* Size */}px solid #f5f5f5`, bottom: "1px" } }, ".cm-tooltip-below &": { top: `-${7 /* Size */}px`, "&:before": { borderBottom: `${7 /* Size */}px solid #bbb` }, "&:after": { borderBottom: `${7 /* Size */}px solid #f5f5f5`, top: "1px" } } }, "&dark .cm-tooltip .cm-tooltip-arrow": { "&:before": { borderTopColor: "#333338", borderBottomColor: "#333338" }, "&:after": { borderTopColor: "transparent", borderBottomColor: "transparent" } } }); var noOffset = { x: 0, y: 0 }; var showTooltip = import_state2.Facet.define({ enables: [tooltipPlugin, baseTheme] }); var showHoverTooltip = import_state2.Facet.define(); var HoverTooltipHost = class { constructor(view) { this.view = view; this.mounted = false; this.dom = document.createElement("div"); this.dom.classList.add("cm-tooltip-hover"); this.manager = new TooltipViewManager( view, showHoverTooltip, (t4) => this.createHostedView(t4) ); } static create(view) { return new HoverTooltipHost(view); } createHostedView(tooltip) { let hostedView = tooltip.create(this.view); hostedView.dom.classList.add("cm-tooltip-section"); this.dom.appendChild(hostedView.dom); if (this.mounted && hostedView.mount) hostedView.mount(this.view); return hostedView; } mount(view) { for (let hostedView of this.manager.tooltipViews) { if (hostedView.mount) hostedView.mount(view); } this.mounted = true; } positioned() { for (let hostedView of this.manager.tooltipViews) { if (hostedView.positioned) hostedView.positioned(); } } update(update) { this.manager.update(update); } }; var showHoverTooltipHost = showTooltip.compute( [showHoverTooltip], (state) => { let tooltips2 = state.facet(showHoverTooltip).filter((t4) => t4); if (tooltips2.length === 0) return null; return { pos: Math.min(...tooltips2.map((t4) => t4.pos)), end: Math.max( ...tooltips2.filter((t4) => t4.end != null).map((t4) => t4.end) ), create: HoverTooltipHost.create, above: tooltips2[0].above, arrow: tooltips2.some((t4) => t4.arrow) }; } ); var HoverPlugin = class { constructor(view, source, field, setHover, hoverTime) { this.view = view; this.source = source; this.field = field; this.setHover = setHover; this.hoverTime = hoverTime; this.hoverTimeout = -1; this.restartTimeout = -1; this.pending = null; this.lastMove = { x: 0, y: 0, target: view.dom, time: 0 }; this.checkHover = this.checkHover.bind(this); view.dom.addEventListener( "mouseleave", this.mouseleave = this.mouseleave.bind(this) ); view.dom.addEventListener( "mousemove", this.mousemove = this.mousemove.bind(this) ); } update() { if (this.pending) { this.pending = null; clearTimeout(this.restartTimeout); this.restartTimeout = setTimeout(() => this.startHover(), 20); } } get active() { return this.view.state.field(this.field); } checkHover() { this.hoverTimeout = -1; if (this.active) return; let hovered = Date.now() - this.lastMove.time; if (hovered < this.hoverTime) this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime - hovered); else this.startHover(); } startHover() { clearTimeout(this.restartTimeout); let { lastMove } = this; let pos = this.view.contentDOM.contains(lastMove.target) ? this.view.posAtCoords(lastMove) : null; if (pos == null) return; let posCoords = this.view.coordsAtPos(pos); if (posCoords == null || lastMove.y < posCoords.top || lastMove.y > posCoords.bottom || lastMove.x < posCoords.left - this.view.defaultCharacterWidth || lastMove.x > posCoords.right + this.view.defaultCharacterWidth) return; let bidi = this.view.bidiSpans(this.view.state.doc.lineAt(pos)).find((s5) => s5.from <= pos && s5.to >= pos); let rtl = bidi && bidi.dir == import_view2.Direction.RTL ? -1 : 1; let open = this.source( this.view, pos, lastMove.x < posCoords.left ? -rtl : rtl ); if (open == null ? void 0 : open.then) { let pending = this.pending = { pos }; open.then( (result) => { if (this.pending == pending) { this.pending = null; if (result) this.view.dispatch({ effects: this.setHover.of(result) }); } }, (e4) => (0, import_view2.logException)(this.view.state, e4, "hover tooltip") ); } else if (open) { this.view.dispatch({ effects: this.setHover.of(open) }); } } mousemove(event) { var _a2; this.lastMove = { x: event.clientX, y: event.clientY, target: event.target, time: Date.now() }; if (this.hoverTimeout < 0) this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime); let tooltip = this.active; if (tooltip && !isInTooltip(this.lastMove.target) || this.pending) { let { pos } = tooltip || this.pending, end = (_a2 = tooltip == null ? void 0 : tooltip.end) != null ? _a2 : pos; if (pos == end ? this.view.posAtCoords(this.lastMove) != pos : !isOverRange( this.view, pos, end, event.clientX, event.clientY, 6 /* MaxDist */ )) { this.view.dispatch({ effects: this.setHover.of(null) }); this.pending = null; } } } mouseleave(e4) { clearTimeout(this.hoverTimeout); this.hoverTimeout = -1; if (this.active && !isInTooltip(e4.relatedTarget)) this.view.dispatch({ effects: this.setHover.of(null) }); } destroy() { clearTimeout(this.hoverTimeout); this.view.dom.removeEventListener("mouseleave", this.mouseleave); this.view.dom.removeEventListener("mousemove", this.mousemove); } }; function isInTooltip(elt) { for (let cur = elt; cur; cur = cur.parentNode) if (cur.nodeType == 1 && cur.classList.contains("cm-tooltip")) return true; return false; } function isOverRange(view, from, to, x5, y5, margin) { let range = document.createRange(); let fromDOM = view.domAtPos(from), toDOM = view.domAtPos(to); range.setEnd(toDOM.node, toDOM.offset); range.setStart(fromDOM.node, fromDOM.offset); let rects = range.getClientRects(); range.detach(); for (let i4 = 0; i4 < rects.length; i4++) { let rect = rects[i4]; let dist = Math.max( rect.top - y5, y5 - rect.bottom, rect.left - x5, x5 - rect.right ); if (dist <= margin) return true; } return false; } function hoverTooltip(source, options = {}) { let setHover = import_state2.StateEffect.define(); let hoverState = import_state2.StateField.define({ create() { return null; }, update(value, tr) { if (value && options.hideOnChange && (tr.docChanged || tr.selection)) return null; for (let effect of tr.effects) { if (effect.is(setHover)) { return effect.value; } if (effect.is(closeHoverTooltipEffect)) return null; } if (value && tr.docChanged) { let newPos = tr.changes.mapPos(value.pos, -1, import_state2.MapMode.TrackDel); if (newPos == null) return null; let copy = Object.assign(/* @__PURE__ */ Object.create(null), value); copy.pos = newPos; if (value.end != null) copy.end = tr.changes.mapPos(value.end); return copy; } return value; }, provide: (f4) => showHoverTooltip.from(f4) }); return [ hoverState, import_view2.ViewPlugin.define( (view) => new HoverPlugin( view, source, hoverState, setHover, options.hoverTime || 300 /* Time */ ) ), showHoverTooltipHost ]; } var closeHoverTooltipEffect = import_state2.StateEffect.define(); var closeHoverTooltips = closeHoverTooltipEffect.of(null); // node_modules/preact/dist/preact.module.js var n; var l; var u; var i; var t; var o; var r; var f = {}; var e = []; var c = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i; function s(n2, l3) { for (var u4 in l3) n2[u4] = l3[u4]; return n2; } function a(n2) { var l3 = n2.parentNode; l3 && l3.removeChild(n2); } function h(l3, u4, i4) { var t4, o3, r3, f4 = {}; for (r3 in u4) "key" == r3 ? t4 = u4[r3] : "ref" == r3 ? o3 = u4[r3] : f4[r3] = u4[r3]; if (arguments.length > 2 && (f4.children = arguments.length > 3 ? n.call(arguments, 2) : i4), "function" == typeof l3 && null != l3.defaultProps) for (r3 in l3.defaultProps) void 0 === f4[r3] && (f4[r3] = l3.defaultProps[r3]); return v(l3, f4, t4, o3, null); } function v(n2, i4, t4, o3, r3) { var f4 = { type: n2, props: i4, key: t4, ref: o3, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, __h: null, constructor: void 0, __v: null == r3 ? ++u : r3 }; return null == r3 && null != l.vnode && l.vnode(f4), f4; } function y() { return { current: null }; } function p(n2) { return n2.children; } function d(n2, l3) { this.props = n2, this.context = l3; } function _(n2, l3) { if (null == l3) return n2.__ ? _(n2.__, n2.__.__k.indexOf(n2) + 1) : null; for (var u4; l3 < n2.__k.length; l3++) if (null != (u4 = n2.__k[l3]) && null != u4.__e) return u4.__e; return "function" == typeof n2.type ? _(n2) : null; } function k(n2) { var l3, u4; if (null != (n2 = n2.__) && null != n2.__c) { for (n2.__e = n2.__c.base = null, l3 = 0; l3 < n2.__k.length; l3++) if (null != (u4 = n2.__k[l3]) && null != u4.__e) { n2.__e = n2.__c.base = u4.__e; break; } return k(n2); } } function b(n2) { (!n2.__d && (n2.__d = true) && t.push(n2) && !g.__r++ || o !== l.debounceRendering) && ((o = l.debounceRendering) || setTimeout)(g); } function g() { for (var n2; g.__r = t.length; ) n2 = t.sort(function(n3, l3) { return n3.__v.__b - l3.__v.__b; }), t = [], n2.some(function(n3) { var l3, u4, i4, t4, o3, r3; n3.__d && (o3 = (t4 = (l3 = n3).__v).__e, (r3 = l3.__P) && (u4 = [], (i4 = s({}, t4)).__v = t4.__v + 1, j(r3, t4, i4, l3.__n, void 0 !== r3.ownerSVGElement, null != t4.__h ? [o3] : null, u4, null == o3 ? _(t4) : o3, t4.__h), z(u4, t4), t4.__e != o3 && k(t4))); }); } function w(n2, l3, u4, i4, t4, o3, r3, c4, s5, a5) { var h5, y5, d5, k5, b4, g4, w5, x5 = i4 && i4.__k || e, C3 = x5.length; for (u4.__k = [], h5 = 0; h5 < l3.length; h5++) if (null != (k5 = u4.__k[h5] = null == (k5 = l3[h5]) || "boolean" == typeof k5 ? null : "string" == typeof k5 || "number" == typeof k5 || "bigint" == typeof k5 ? v(null, k5, null, null, k5) : Array.isArray(k5) ? v(p, { children: k5 }, null, null, null) : k5.__b > 0 ? v(k5.type, k5.props, k5.key, k5.ref ? k5.ref : null, k5.__v) : k5)) { if (k5.__ = u4, k5.__b = u4.__b + 1, null === (d5 = x5[h5]) || d5 && k5.key == d5.key && k5.type === d5.type) x5[h5] = void 0; else for (y5 = 0; y5 < C3; y5++) { if ((d5 = x5[y5]) && k5.key == d5.key && k5.type === d5.type) { x5[y5] = void 0; break; } d5 = null; } j(n2, k5, d5 = d5 || f, t4, o3, r3, c4, s5, a5), b4 = k5.__e, (y5 = k5.ref) && d5.ref != y5 && (w5 || (w5 = []), d5.ref && w5.push(d5.ref, null, k5), w5.push(y5, k5.__c || b4, k5)), null != b4 ? (null == g4 && (g4 = b4), "function" == typeof k5.type && k5.__k === d5.__k ? k5.__d = s5 = m(k5, s5, n2) : s5 = A(n2, k5, d5, x5, b4, s5), "function" == typeof u4.type && (u4.__d = s5)) : s5 && d5.__e == s5 && s5.parentNode != n2 && (s5 = _(d5)); } for (u4.__e = g4, h5 = C3; h5--; ) null != x5[h5] && N(x5[h5], x5[h5]); if (w5) for (h5 = 0; h5 < w5.length; h5++) M(w5[h5], w5[++h5], w5[++h5]); } function m(n2, l3, u4) { for (var i4, t4 = n2.__k, o3 = 0; t4 && o3 < t4.length; o3++) (i4 = t4[o3]) && (i4.__ = n2, l3 = "function" == typeof i4.type ? m(i4, l3, u4) : A(u4, i4, i4, t4, i4.__e, l3)); return l3; } function x(n2, l3) { return l3 = l3 || [], null == n2 || "boolean" == typeof n2 || (Array.isArray(n2) ? n2.some(function(n3) { x(n3, l3); }) : l3.push(n2)), l3; } function A(n2, l3, u4, i4, t4, o3) { var r3, f4, e4; if (void 0 !== l3.__d) r3 = l3.__d, l3.__d = void 0; else if (null == u4 || t4 != o3 || null == t4.parentNode) n: if (null == o3 || o3.parentNode !== n2) n2.appendChild(t4), r3 = null; else { for (f4 = o3, e4 = 0; (f4 = f4.nextSibling) && e4 < i4.length; e4 += 1) if (f4 == t4) break n; n2.insertBefore(t4, o3), r3 = o3; } return void 0 !== r3 ? r3 : t4.nextSibling; } function C(n2, l3, u4, i4, t4) { var o3; for (o3 in u4) "children" === o3 || "key" === o3 || o3 in l3 || H(n2, o3, null, u4[o3], i4); for (o3 in l3) t4 && "function" != typeof l3[o3] || "children" === o3 || "key" === o3 || "value" === o3 || "checked" === o3 || u4[o3] === l3[o3] || H(n2, o3, l3[o3], u4[o3], i4); } function $(n2, l3, u4) { "-" === l3[0] ? n2.setProperty(l3, u4) : n2[l3] = null == u4 ? "" : "number" != typeof u4 || c.test(l3) ? u4 : u4 + "px"; } function H(n2, l3, u4, i4, t4) { var o3; n: if ("style" === l3) if ("string" == typeof u4) n2.style.cssText = u4; else { if ("string" == typeof i4 && (n2.style.cssText = i4 = ""), i4) for (l3 in i4) u4 && l3 in u4 || $(n2.style, l3, ""); if (u4) for (l3 in u4) i4 && u4[l3] === i4[l3] || $(n2.style, l3, u4[l3]); } else if ("o" === l3[0] && "n" === l3[1]) o3 = l3 !== (l3 = l3.replace(/Capture$/, "")), l3 = l3.toLowerCase() in n2 ? l3.toLowerCase().slice(2) : l3.slice(2), n2.l || (n2.l = {}), n2.l[l3 + o3] = u4, u4 ? i4 || n2.addEventListener(l3, o3 ? T : I, o3) : n2.removeEventListener(l3, o3 ? T : I, o3); else if ("dangerouslySetInnerHTML" !== l3) { if (t4) l3 = l3.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s"); else if ("href" !== l3 && "list" !== l3 && "form" !== l3 && "tabIndex" !== l3 && "download" !== l3 && l3 in n2) try { n2[l3] = null == u4 ? "" : u4; break n; } catch (n3) { } "function" == typeof u4 || (null == u4 || false === u4 && -1 == l3.indexOf("-") ? n2.removeAttribute(l3) : n2.setAttribute(l3, u4)); } } function I(n2) { this.l[n2.type + false](l.event ? l.event(n2) : n2); } function T(n2) { this.l[n2.type + true](l.event ? l.event(n2) : n2); } function j(n2, u4, i4, t4, o3, r3, f4, e4, c4) { var a5, h5, v3, y5, _5, k5, b4, g4, m5, x5, A4, C3, $3, H5, I4, T6 = u4.type; if (void 0 !== u4.constructor) return null; null != i4.__h && (c4 = i4.__h, e4 = u4.__e = i4.__e, u4.__h = null, r3 = [e4]), (a5 = l.__b) && a5(u4); try { n: if ("function" == typeof T6) { if (g4 = u4.props, m5 = (a5 = T6.contextType) && t4[a5.__c], x5 = a5 ? m5 ? m5.props.value : a5.__ : t4, i4.__c ? b4 = (h5 = u4.__c = i4.__c).__ = h5.__E : ("prototype" in T6 && T6.prototype.render ? u4.__c = h5 = new T6(g4, x5) : (u4.__c = h5 = new d(g4, x5), h5.constructor = T6, h5.render = O), m5 && m5.sub(h5), h5.props = g4, h5.state || (h5.state = {}), h5.context = x5, h5.__n = t4, v3 = h5.__d = true, h5.__h = [], h5._sb = []), null == h5.__s && (h5.__s = h5.state), null != T6.getDerivedStateFromProps && (h5.__s == h5.state && (h5.__s = s({}, h5.__s)), s(h5.__s, T6.getDerivedStateFromProps(g4, h5.__s))), y5 = h5.props, _5 = h5.state, v3) null == T6.getDerivedStateFromProps && null != h5.componentWillMount && h5.componentWillMount(), null != h5.componentDidMount && h5.__h.push(h5.componentDidMount); else { if (null == T6.getDerivedStateFromProps && g4 !== y5 && null != h5.componentWillReceiveProps && h5.componentWillReceiveProps(g4, x5), !h5.__e && null != h5.shouldComponentUpdate && false === h5.shouldComponentUpdate(g4, h5.__s, x5) || u4.__v === i4.__v) { for (h5.props = g4, h5.state = h5.__s, u4.__v !== i4.__v && (h5.__d = false), h5.__v = u4, u4.__e = i4.__e, u4.__k = i4.__k, u4.__k.forEach(function(n3) { n3 && (n3.__ = u4); }), A4 = 0; A4 < h5._sb.length; A4++) h5.__h.push(h5._sb[A4]); h5._sb = [], h5.__h.length && f4.push(h5); break n; } null != h5.componentWillUpdate && h5.componentWillUpdate(g4, h5.__s, x5), null != h5.componentDidUpdate && h5.__h.push(function() { h5.componentDidUpdate(y5, _5, k5); }); } if (h5.context = x5, h5.props = g4, h5.__v = u4, h5.__P = n2, C3 = l.__r, $3 = 0, "prototype" in T6 && T6.prototype.render) { for (h5.state = h5.__s, h5.__d = false, C3 && C3(u4), a5 = h5.render(h5.props, h5.state, h5.context), H5 = 0; H5 < h5._sb.length; H5++) h5.__h.push(h5._sb[H5]); h5._sb = []; } else do { h5.__d = false, C3 && C3(u4), a5 = h5.render(h5.props, h5.state, h5.context), h5.state = h5.__s; } while (h5.__d && ++$3 < 25); h5.state = h5.__s, null != h5.getChildContext && (t4 = s(s({}, t4), h5.getChildContext())), v3 || null == h5.getSnapshotBeforeUpdate || (k5 = h5.getSnapshotBeforeUpdate(y5, _5)), I4 = null != a5 && a5.type === p && null == a5.key ? a5.props.children : a5, w(n2, Array.isArray(I4) ? I4 : [I4], u4, i4, t4, o3, r3, f4, e4, c4), h5.base = u4.__e, u4.__h = null, h5.__h.length && f4.push(h5), b4 && (h5.__E = h5.__ = null), h5.__e = false; } else null == r3 && u4.__v === i4.__v ? (u4.__k = i4.__k, u4.__e = i4.__e) : u4.__e = L(i4.__e, u4, i4, t4, o3, r3, f4, c4); (a5 = l.diffed) && a5(u4); } catch (n3) { u4.__v = null, (c4 || null != r3) && (u4.__e = e4, u4.__h = !!c4, r3[r3.indexOf(e4)] = null), l.__e(n3, u4, i4); } } function z(n2, u4) { l.__c && l.__c(u4, n2), n2.some(function(u5) { try { n2 = u5.__h, u5.__h = [], n2.some(function(n3) { n3.call(u5); }); } catch (n3) { l.__e(n3, u5.__v); } }); } function L(l3, u4, i4, t4, o3, r3, e4, c4) { var s5, h5, v3, y5 = i4.props, p3 = u4.props, d5 = u4.type, k5 = 0; if ("svg" === d5 && (o3 = true), null != r3) { for (; k5 < r3.length; k5++) if ((s5 = r3[k5]) && "setAttribute" in s5 == !!d5 && (d5 ? s5.localName === d5 : 3 === s5.nodeType)) { l3 = s5, r3[k5] = null; break; } } if (null == l3) { if (null === d5) return document.createTextNode(p3); l3 = o3 ? document.createElementNS("http://www.w3.org/2000/svg", d5) : document.createElement(d5, p3.is && p3), r3 = null, c4 = false; } if (null === d5) y5 === p3 || c4 && l3.data === p3 || (l3.data = p3); else { if (r3 = r3 && n.call(l3.childNodes), h5 = (y5 = i4.props || f).dangerouslySetInnerHTML, v3 = p3.dangerouslySetInnerHTML, !c4) { if (null != r3) for (y5 = {}, k5 = 0; k5 < l3.attributes.length; k5++) y5[l3.attributes[k5].name] = l3.attributes[k5].value; (v3 || h5) && (v3 && (h5 && v3.__html == h5.__html || v3.__html === l3.innerHTML) || (l3.innerHTML = v3 && v3.__html || "")); } if (C(l3, p3, y5, o3, c4), v3) u4.__k = []; else if (k5 = u4.props.children, w(l3, Array.isArray(k5) ? k5 : [k5], u4, i4, t4, o3 && "foreignObject" !== d5, r3, e4, r3 ? r3[0] : i4.__k && _(i4, 0), c4), null != r3) for (k5 = r3.length; k5--; ) null != r3[k5] && a(r3[k5]); c4 || ("value" in p3 && void 0 !== (k5 = p3.value) && (k5 !== l3.value || "progress" === d5 && !k5 || "option" === d5 && k5 !== y5.value) && H(l3, "value", k5, y5.value, false), "checked" in p3 && void 0 !== (k5 = p3.checked) && k5 !== l3.checked && H(l3, "checked", k5, y5.checked, false)); } return l3; } function M(n2, u4, i4) { try { "function" == typeof n2 ? n2(u4) : n2.current = u4; } catch (n3) { l.__e(n3, i4); } } function N(n2, u4, i4) { var t4, o3; if (l.unmount && l.unmount(n2), (t4 = n2.ref) && (t4.current && t4.current !== n2.__e || M(t4, null, u4)), null != (t4 = n2.__c)) { if (t4.componentWillUnmount) try { t4.componentWillUnmount(); } catch (n3) { l.__e(n3, u4); } t4.base = t4.__P = null, n2.__c = void 0; } if (t4 = n2.__k) for (o3 = 0; o3 < t4.length; o3++) t4[o3] && N(t4[o3], u4, i4 || "function" != typeof n2.type); i4 || null == n2.__e || a(n2.__e), n2.__ = n2.__e = n2.__d = void 0; } function O(n2, l3, u4) { return this.constructor(n2, u4); } function P(u4, i4, t4) { var o3, r3, e4; l.__ && l.__(u4, i4), r3 = (o3 = "function" == typeof t4) ? null : t4 && t4.__k || i4.__k, e4 = [], j(i4, u4 = (!o3 && t4 || i4).__k = h(p, null, [u4]), r3 || f, f, void 0 !== i4.ownerSVGElement, !o3 && t4 ? [t4] : r3 ? null : i4.firstChild ? n.call(i4.childNodes) : null, e4, !o3 && t4 ? t4 : r3 ? r3.__e : i4.firstChild, o3), z(e4, u4); } function S(n2, l3) { P(n2, l3, S); } function q(l3, u4, i4) { var t4, o3, r3, f4 = s({}, l3.props); for (r3 in u4) "key" == r3 ? t4 = u4[r3] : "ref" == r3 ? o3 = u4[r3] : f4[r3] = u4[r3]; return arguments.length > 2 && (f4.children = arguments.length > 3 ? n.call(arguments, 2) : i4), v(l3.type, f4, t4 || l3.key, o3 || l3.ref, null); } function B(n2, l3) { var u4 = { __c: l3 = "__cC" + r++, __: n2, Consumer: function(n3, l4) { return n3.children(l4); }, Provider: function(n3) { var u5, i4; return this.getChildContext || (u5 = [], (i4 = {})[l3] = this, this.getChildContext = function() { return i4; }, this.shouldComponentUpdate = function(n4) { this.props.value !== n4.value && u5.some(b); }, this.sub = function(n4) { u5.push(n4); var l4 = n4.componentWillUnmount; n4.componentWillUnmount = function() { u5.splice(u5.indexOf(n4), 1), l4 && l4.call(n4); }; }), n3.children; } }; return u4.Provider.__ = u4.Consumer.contextType = u4; } n = e.slice, l = { __e: function(n2, l3, u4, i4) { for (var t4, o3, r3; l3 = l3.__; ) if ((t4 = l3.__c) && !t4.__) try { if ((o3 = t4.constructor) && null != o3.getDerivedStateFromError && (t4.setState(o3.getDerivedStateFromError(n2)), r3 = t4.__d), null != t4.componentDidCatch && (t4.componentDidCatch(n2, i4 || {}), r3 = t4.__d), r3) return t4.__E = t4; } catch (l4) { n2 = l4; } throw n2; } }, u = 0, i = function(n2) { return null != n2 && void 0 === n2.constructor; }, d.prototype.setState = function(n2, l3) { var u4; u4 = null != this.__s && this.__s !== this.state ? this.__s : this.__s = s({}, this.state), "function" == typeof n2 && (n2 = n2(s({}, u4), this.props)), n2 && s(u4, n2), null != n2 && this.__v && (l3 && this._sb.push(l3), b(this)); }, d.prototype.forceUpdate = function(n2) { this.__v && (this.__e = true, n2 && this.__h.push(n2), b(this)); }, d.prototype.render = p, t = [], g.__r = 0, r = 0; // node_modules/preact/hooks/dist/hooks.module.js var t2; var r2; var u2; var i2; var o2 = 0; var f2 = []; var c2 = []; var e2 = l.__b; var a2 = l.__r; var v2 = l.diffed; var l2 = l.__c; var m2 = l.unmount; function d2(t4, u4) { l.__h && l.__h(r2, t4, o2 || u4), o2 = 0; var i4 = r2.__H || (r2.__H = { __: [], __h: [] }); return t4 >= i4.__.length && i4.__.push({ __V: c2 }), i4.__[t4]; } function p2(n2) { return o2 = 1, y2(B2, n2); } function y2(n2, u4, i4) { var o3 = d2(t2++, 2); if (o3.t = n2, !o3.__c && (o3.__ = [i4 ? i4(u4) : B2(void 0, u4), function(n3) { var t4 = o3.__N ? o3.__N[0] : o3.__[0], r3 = o3.t(t4, n3); t4 !== r3 && (o3.__N = [r3, o3.__[1]], o3.__c.setState({})); }], o3.__c = r2, !r2.u)) { r2.u = true; var f4 = r2.shouldComponentUpdate; r2.shouldComponentUpdate = function(n3, t4, r3) { if (!o3.__c.__H) return true; var u5 = o3.__c.__H.__.filter(function(n4) { return n4.__c; }); if (u5.every(function(n4) { return !n4.__N; })) return !f4 || f4.call(this, n3, t4, r3); var i5 = false; return u5.forEach(function(n4) { if (n4.__N) { var t5 = n4.__[0]; n4.__ = n4.__N, n4.__N = void 0, t5 !== n4.__[0] && (i5 = true); } }), !(!i5 && o3.__c.props === n3) && (!f4 || f4.call(this, n3, t4, r3)); }; } return o3.__N || o3.__; } function h2(u4, i4) { var o3 = d2(t2++, 3); !l.__s && z2(o3.__H, i4) && (o3.__ = u4, o3.i = i4, r2.__H.__h.push(o3)); } function s2(u4, i4) { var o3 = d2(t2++, 4); !l.__s && z2(o3.__H, i4) && (o3.__ = u4, o3.i = i4, r2.__h.push(o3)); } function _2(n2) { return o2 = 5, F(function() { return { current: n2 }; }, []); } function A2(n2, t4, r3) { o2 = 6, s2(function() { return "function" == typeof n2 ? (n2(t4()), function() { return n2(null); }) : n2 ? (n2.current = t4(), function() { return n2.current = null; }) : void 0; }, null == r3 ? r3 : r3.concat(n2)); } function F(n2, r3) { var u4 = d2(t2++, 7); return z2(u4.__H, r3) ? (u4.__V = n2(), u4.i = r3, u4.__h = n2, u4.__V) : u4.__; } function T2(n2, t4) { return o2 = 8, F(function() { return n2; }, t4); } function q2(n2) { var u4 = r2.context[n2.__c], i4 = d2(t2++, 9); return i4.c = n2, u4 ? (null == i4.__ && (i4.__ = true, u4.sub(r2)), u4.props.value) : n2.__; } function x2(t4, r3) { l.useDebugValue && l.useDebugValue(r3 ? r3(t4) : t4); } function P2(n2) { var u4 = d2(t2++, 10), i4 = p2(); return u4.__ = n2, r2.componentDidCatch || (r2.componentDidCatch = function(n3, t4) { u4.__ && u4.__(n3, t4), i4[1](n3); }), [i4[0], function() { i4[1](void 0); }]; } function V() { var n2 = d2(t2++, 11); if (!n2.__) { for (var u4 = r2.__v; null !== u4 && !u4.__m && null !== u4.__; ) u4 = u4.__; var i4 = u4.__m || (u4.__m = [0, 0]); n2.__ = "P" + i4[0] + "-" + i4[1]++; } return n2.__; } function b2() { for (var t4; t4 = f2.shift(); ) if (t4.__P && t4.__H) try { t4.__H.__h.forEach(k2), t4.__H.__h.forEach(w2), t4.__H.__h = []; } catch (r3) { t4.__H.__h = [], l.__e(r3, t4.__v); } } l.__b = function(n2) { r2 = null, e2 && e2(n2); }, l.__r = function(n2) { a2 && a2(n2), t2 = 0; var i4 = (r2 = n2.__c).__H; i4 && (u2 === r2 ? (i4.__h = [], r2.__h = [], i4.__.forEach(function(n3) { n3.__N && (n3.__ = n3.__N), n3.__V = c2, n3.__N = n3.i = void 0; })) : (i4.__h.forEach(k2), i4.__h.forEach(w2), i4.__h = [])), u2 = r2; }, l.diffed = function(t4) { v2 && v2(t4); var o3 = t4.__c; o3 && o3.__H && (o3.__H.__h.length && (1 !== f2.push(o3) && i2 === l.requestAnimationFrame || ((i2 = l.requestAnimationFrame) || j2)(b2)), o3.__H.__.forEach(function(n2) { n2.i && (n2.__H = n2.i), n2.__V !== c2 && (n2.__ = n2.__V), n2.i = void 0, n2.__V = c2; })), u2 = r2 = null; }, l.__c = function(t4, r3) { r3.some(function(t5) { try { t5.__h.forEach(k2), t5.__h = t5.__h.filter(function(n2) { return !n2.__ || w2(n2); }); } catch (u4) { r3.some(function(n2) { n2.__h && (n2.__h = []); }), r3 = [], l.__e(u4, t5.__v); } }), l2 && l2(t4, r3); }, l.unmount = function(t4) { m2 && m2(t4); var r3, u4 = t4.__c; u4 && u4.__H && (u4.__H.__.forEach(function(n2) { try { k2(n2); } catch (n3) { r3 = n3; } }), u4.__H = void 0, r3 && l.__e(r3, u4.__v)); }; var g2 = "function" == typeof requestAnimationFrame; function j2(n2) { var t4, r3 = function() { clearTimeout(u4), g2 && cancelAnimationFrame(t4), setTimeout(n2); }, u4 = setTimeout(r3, 100); g2 && (t4 = requestAnimationFrame(r3)); } function k2(n2) { var t4 = r2, u4 = n2.__c; "function" == typeof u4 && (n2.__c = void 0, u4()), r2 = t4; } function w2(n2) { var t4 = r2; n2.__c = n2.__(), r2 = t4; } function z2(n2, t4) { return !n2 || n2.length !== t4.length || t4.some(function(t5, r3) { return t5 !== n2[r3]; }); } function B2(n2, t4) { return "function" == typeof t4 ? t4(n2) : t4; } // node_modules/preact/compat/dist/compat.module.js function g3(n2, t4) { for (var e4 in t4) n2[e4] = t4[e4]; return n2; } function C2(n2, t4) { for (var e4 in n2) if ("__source" !== e4 && !(e4 in t4)) return true; for (var r3 in t4) if ("__source" !== r3 && n2[r3] !== t4[r3]) return true; return false; } function E(n2, t4) { return n2 === t4 && (0 !== n2 || 1 / n2 == 1 / t4) || n2 != n2 && t4 != t4; } function w3(n2) { this.props = n2; } function R(n2, e4) { function r3(n3) { var t4 = this.props.ref, r4 = t4 == n3.ref; return !r4 && t4 && (t4.call ? t4(null) : t4.current = null), e4 ? !e4(this.props, n3) || !r4 : C2(this.props, n3); } function u4(e5) { return this.shouldComponentUpdate = r3, h(n2, e5); } return u4.displayName = "Memo(" + (n2.displayName || n2.name) + ")", u4.prototype.isReactComponent = true, u4.__f = true, u4; } (w3.prototype = new d()).isPureReactComponent = true, w3.prototype.shouldComponentUpdate = function(n2, t4) { return C2(this.props, n2) || C2(this.state, t4); }; var x3 = l.__b; l.__b = function(n2) { n2.type && n2.type.__f && n2.ref && (n2.props.ref = n2.ref, n2.ref = null), x3 && x3(n2); }; var N2 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911; function k3(n2) { function t4(t5) { var e4 = g3({}, t5); return delete e4.ref, n2(e4, t5.ref || null); } return t4.$$typeof = N2, t4.render = t4, t4.prototype.isReactComponent = t4.__f = true, t4.displayName = "ForwardRef(" + (n2.displayName || n2.name) + ")", t4; } var A3 = function(n2, t4) { return null == n2 ? null : x(x(n2).map(t4)); }; var O2 = { map: A3, forEach: A3, count: function(n2) { return n2 ? x(n2).length : 0; }, only: function(n2) { var t4 = x(n2); if (1 !== t4.length) throw "Children.only"; return t4[0]; }, toArray: x }; var T3 = l.__e; l.__e = function(n2, t4, e4, r3) { if (n2.then) { for (var u4, o3 = t4; o3 = o3.__; ) if ((u4 = o3.__c) && u4.__c) return null == t4.__e && (t4.__e = e4.__e, t4.__k = e4.__k), u4.__c(n2, t4); } T3(n2, t4, e4, r3); }; var I2 = l.unmount; function L2(n2, t4, e4) { return n2 && (n2.__c && n2.__c.__H && (n2.__c.__H.__.forEach(function(n3) { "function" == typeof n3.__c && n3.__c(); }), n2.__c.__H = null), null != (n2 = g3({}, n2)).__c && (n2.__c.__P === e4 && (n2.__c.__P = t4), n2.__c = null), n2.__k = n2.__k && n2.__k.map(function(n3) { return L2(n3, t4, e4); })), n2; } function U(n2, t4, e4) { return n2 && (n2.__v = null, n2.__k = n2.__k && n2.__k.map(function(n3) { return U(n3, t4, e4); }), n2.__c && n2.__c.__P === t4 && (n2.__e && e4.insertBefore(n2.__e, n2.__d), n2.__c.__e = true, n2.__c.__P = e4)), n2; } function D() { this.__u = 0, this.t = null, this.__b = null; } function F2(n2) { var t4 = n2.__.__c; return t4 && t4.__a && t4.__a(n2); } function M2(n2) { var e4, r3, u4; function o3(o4) { if (e4 || (e4 = n2()).then(function(n3) { r3 = n3.default || n3; }, function(n3) { u4 = n3; }), u4) throw u4; if (!r3) throw e4; return h(r3, o4); } return o3.displayName = "Lazy", o3.__f = true, o3; } function V2() { this.u = null, this.o = null; } l.unmount = function(n2) { var t4 = n2.__c; t4 && t4.__R && t4.__R(), t4 && true === n2.__h && (n2.type = null), I2 && I2(n2); }, (D.prototype = new d()).__c = function(n2, t4) { var e4 = t4.__c, r3 = this; null == r3.t && (r3.t = []), r3.t.push(e4); var u4 = F2(r3.__v), o3 = false, i4 = function() { o3 || (o3 = true, e4.__R = null, u4 ? u4(l3) : l3()); }; e4.__R = i4; var l3 = function() { if (!--r3.__u) { if (r3.state.__a) { var n3 = r3.state.__a; r3.__v.__k[0] = U(n3, n3.__c.__P, n3.__c.__O); } var t5; for (r3.setState({ __a: r3.__b = null }); t5 = r3.t.pop(); ) t5.forceUpdate(); } }, c4 = true === t4.__h; r3.__u++ || c4 || r3.setState({ __a: r3.__b = r3.__v.__k[0] }), n2.then(i4, i4); }, D.prototype.componentWillUnmount = function() { this.t = []; }, D.prototype.render = function(n2, e4) { if (this.__b) { if (this.__v.__k) { var r3 = document.createElement("div"), o3 = this.__v.__k[0].__c; this.__v.__k[0] = L2(this.__b, r3, o3.__O = o3.__P); } this.__b = null; } var i4 = e4.__a && h(p, null, n2.fallback); return i4 && (i4.__h = null), [h(p, null, e4.__a ? null : n2.children), i4]; }; var W = function(n2, t4, e4) { if (++e4[1] === e4[0] && n2.o.delete(t4), n2.props.revealOrder && ("t" !== n2.props.revealOrder[0] || !n2.o.size)) for (e4 = n2.u; e4; ) { for (; e4.length > 3; ) e4.pop()(); if (e4[1] < e4[0]) break; n2.u = e4 = e4[2]; } }; function P3(n2) { return this.getChildContext = function() { return n2.context; }, n2.children; } function $2(n2) { var e4 = this, r3 = n2.i; e4.componentWillUnmount = function() { P(null, e4.l), e4.l = null, e4.i = null; }, e4.i && e4.i !== r3 && e4.componentWillUnmount(), n2.__v ? (e4.l || (e4.i = r3, e4.l = { nodeType: 1, parentNode: r3, childNodes: [], appendChild: function(n3) { this.childNodes.push(n3), e4.i.appendChild(n3); }, insertBefore: function(n3, t4) { this.childNodes.push(n3), e4.i.appendChild(n3); }, removeChild: function(n3) { this.childNodes.splice(this.childNodes.indexOf(n3) >>> 1, 1), e4.i.removeChild(n3); } }), P(h(P3, { context: e4.context }, n2.__v), e4.l)) : e4.l && e4.componentWillUnmount(); } function j3(n2, e4) { var r3 = h($2, { __v: n2, i: e4 }); return r3.containerInfo = e4, r3; } (V2.prototype = new d()).__a = function(n2) { var t4 = this, e4 = F2(t4.__v), r3 = t4.o.get(n2); return r3[0]++, function(u4) { var o3 = function() { t4.props.revealOrder ? (r3.push(u4), W(t4, n2, r3)) : u4(); }; e4 ? e4(o3) : o3(); }; }, V2.prototype.render = function(n2) { this.u = null, this.o = /* @__PURE__ */ new Map(); var t4 = x(n2.children); n2.revealOrder && "b" === n2.revealOrder[0] && t4.reverse(); for (var e4 = t4.length; e4--; ) this.o.set(t4[e4], this.u = [1, 0, this.u]); return n2.children; }, V2.prototype.componentDidUpdate = V2.prototype.componentDidMount = function() { var n2 = this; this.o.forEach(function(t4, e4) { W(n2, e4, t4); }); }; var z3 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103; var B3 = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/; var H2 = "undefined" != typeof document; var Z = function(n2) { return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/i : /fil|che|ra/i).test(n2); }; function Y(n2, t4, e4) { return null == t4.__k && (t4.textContent = ""), P(n2, t4), "function" == typeof e4 && e4(), n2 ? n2.__c : null; } function q3(n2, t4, e4) { return S(n2, t4), "function" == typeof e4 && e4(), n2 ? n2.__c : null; } d.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t4) { Object.defineProperty(d.prototype, t4, { configurable: true, get: function() { return this["UNSAFE_" + t4]; }, set: function(n2) { Object.defineProperty(this, t4, { configurable: true, writable: true, value: n2 }); } }); }); var G = l.event; function J() { } function K() { return this.cancelBubble; } function Q() { return this.defaultPrevented; } l.event = function(n2) { return G && (n2 = G(n2)), n2.persist = J, n2.isPropagationStopped = K, n2.isDefaultPrevented = Q, n2.nativeEvent = n2; }; var X; var nn = { configurable: true, get: function() { return this.class; } }; var tn = l.vnode; l.vnode = function(n2) { var t4 = n2.type, e4 = n2.props, u4 = e4; if ("string" == typeof t4) { var o3 = -1 === t4.indexOf("-"); for (var i4 in u4 = {}, e4) { var l3 = e4[i4]; H2 && "children" === i4 && "noscript" === t4 || "value" === i4 && "defaultValue" in e4 && null == l3 || ("defaultValue" === i4 && "value" in e4 && null == e4.value ? i4 = "value" : "download" === i4 && true === l3 ? l3 = "" : /ondoubleclick/i.test(i4) ? i4 = "ondblclick" : /^onchange(textarea|input)/i.test(i4 + t4) && !Z(e4.type) ? i4 = "oninput" : /^onfocus$/i.test(i4) ? i4 = "onfocusin" : /^onblur$/i.test(i4) ? i4 = "onfocusout" : /^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i4) ? i4 = i4.toLowerCase() : o3 && B3.test(i4) ? i4 = i4.replace(/[A-Z0-9]/g, "-$&").toLowerCase() : null === l3 && (l3 = void 0), /^oninput$/i.test(i4) && (i4 = i4.toLowerCase(), u4[i4] && (i4 = "oninputCapture")), u4[i4] = l3); } "select" == t4 && u4.multiple && Array.isArray(u4.value) && (u4.value = x(e4.children).forEach(function(n3) { n3.props.selected = -1 != u4.value.indexOf(n3.props.value); })), "select" == t4 && null != u4.defaultValue && (u4.value = x(e4.children).forEach(function(n3) { n3.props.selected = u4.multiple ? -1 != u4.defaultValue.indexOf(n3.props.value) : u4.defaultValue == n3.props.value; })), n2.props = u4, e4.class != e4.className && (nn.enumerable = "className" in e4, null != e4.className && (u4.class = e4.className), Object.defineProperty(u4, "className", nn)); } n2.$$typeof = z3, tn && tn(n2); }; var en = l.__r; l.__r = function(n2) { en && en(n2), X = n2.__c; }; var rn = { ReactCurrentDispatcher: { current: { readContext: function(n2) { return X.__n[n2.__c].props.value; } } } }; function on(n2) { return h.bind(null, n2); } function ln(n2) { return !!n2 && n2.$$typeof === z3; } function cn(n2) { return ln(n2) ? q.apply(null, arguments) : n2; } function fn(n2) { return !!n2.__k && (P(null, n2), true); } function an(n2) { return n2 && (n2.base || 1 === n2.nodeType && n2) || null; } var sn = function(n2, t4) { return n2(t4); }; var hn = function(n2, t4) { return n2(t4); }; var vn = p; function dn(n2) { n2(); } function pn(n2) { return n2; } function mn() { return [false, dn]; } var yn = s2; function _n(n2, t4) { var e4 = t4(), r3 = p2({ h: { __: e4, v: t4 } }), u4 = r3[0].h, o3 = r3[1]; return s2(function() { u4.__ = e4, u4.v = t4, E(u4.__, t4()) || o3({ h: u4 }); }, [n2, e4, t4]), h2(function() { return E(u4.__, u4.v()) || o3({ h: u4 }), n2(function() { E(u4.__, u4.v()) || o3({ h: u4 }); }); }, [n2]), e4; } var bn = { useState: p2, useId: V, useReducer: y2, useEffect: h2, useLayoutEffect: s2, useInsertionEffect: yn, useTransition: mn, useDeferredValue: pn, useSyncExternalStore: _n, startTransition: dn, useRef: _2, useImperativeHandle: A2, useMemo: F, useCallback: T2, useContext: q2, useDebugValue: x2, version: "17.0.2", Children: O2, render: Y, hydrate: q3, unmountComponentAtNode: fn, createPortal: j3, createElement: h, createContext: B, createFactory: on, cloneElement: cn, createRef: y, Fragment: p, isValidElement: ln, findDOMNode: an, Component: d, PureComponent: w3, memo: R, forwardRef: k3, flushSync: hn, unstable_batchedUpdates: sn, StrictMode: vn, Suspense: D, SuspenseList: V2, lazy: M2, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: rn }; // node_modules/preact/compat/client.mjs function createRoot(container) { return { render(children) { Y(children, container); }, unmount() { fn(container); } }; } // src/utils/codemirror.ts var import_language2 = require("@codemirror/language"); var getActiveCM = () => { let rcm; app.workspace.iterateLeaves((leaf) => { var _a2; const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; if (cm == null ? void 0 : cm.hasFocus) { rcm = cm; return true; } }, app.workspace["rootSplit"]); return rcm; }; var getActiveMarkdownView = () => { let rv; app.workspace.iterateLeaves((leaf) => { var _a2; const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; if (cm == null ? void 0 : cm.hasFocus) { rv = leaf.view; return true; } }, app.workspace["rootSplit"]); return rv; }; function iterateTreeAtPos(pos, state, iterateFns) { (0, import_language2.syntaxTree)(state).iterate({ ...iterateFns, from: pos, to: pos }); } function iterateTreeInSelection(selection, state, iterateFns) { (0, import_language2.syntaxTree)(state).iterate({ ...iterateFns, from: selection.from, to: selection.to }); } // src/i18n.ts var T4 = class { constructor() { this.all = { en: { commands: { h1: "Heading 1", h2: "Heading 2", h3: "Heading 3", list: "Bullet List", "ordered-list": "Numbered List", todo: "To-do List", quote: "Quote", divider: "Divider", note: "Link to Note", link: "Web Link", callout: "Callout", table: "Table", codeblock: "Code Block", emoji: "Emoji", image: "Image", flow: "Flow Note", tag: "Tag", makeMenu: "Make Menu", selectStyle: "Style", toggleKeyboard: "Toggle Keyboard" }, styles: { bold: "Bold", italics: "Italics", strikethrough: "Strikethrough", code: "Code", link: "Web Link", blocklink: "Link to Note", textColor: "Text Color", highlight: "Highlight" }, commandsSuggest: { noResult: "No result" }, commandPalette: { enable: "Enable", disabled: "Disable", openFlow: "Open Flow Editors in Selection", closeFlow: "Close Flow Editors in Selection", toggleBold: "Toggle Bold", toggleItalics: "Toggle Italics", openSpaces: "Open Spaces", blink: "Blink", openFileContext: "Open Context Explorer" }, menu: { openFilePane: "Open in a new pane", rename: "Rename", moveFile: "Move file to...", duplicate: "Make a copy", edit: "Edit", delete: "Delete", getHelp: "Make.md Community", openVault: "Open Another Vault", obSettings: "Obsidian Settings", commandPalette: "Command Palette", backToSpace: "Back to Spaces", newSpace: "New Space", collapseAllSections: "Collapse All Spaces", expandAllSections: "Expand All Spaces", collapseAllFolders: "Collapse All Folders", expandAllFolders: "Expand All Folders", spaceTitle: "Add/Remove in Space", none: "None", tableView: "Table View", cardView: "Card View", listView: "List View", flowView: "Flow View", groupBy: "Group By", sortBy: "Sort By", newFilter: "New Filter", clearFilters: "Clear Filters", unhideFields: "Unhide All Properties", importDataview: "Import All Dataview Properties", saveAllProperties: "Save All Properties to Files", mergeProperties: "Merge Properties", openTag: "Open Tag", removeTag: "Remove Tag", deleteProperty: "Delete Property", hideProperty: "Hide Property", unhideProperty: "Unhide Property", saveProperty: "Save Property", sortAscending: "Sort Ascending", sortDescending: "Sort Descending", deleteRow: "Delete Item", collapseAll: "Collapse All", customSort: "Custom Sort", fileNameSortAlphaAsc: "File Name (A to Z)", fileNameSortAlphaDesc: "File Name (Z to A)", createdTimeSortAsc: "Created Time (new to old)", createdTimeSortDesc: "Created Time (old to new)", spaces: "Spaces", tags: "Tags", manageHiddenFiles: "Manage Hidden Files", unpinSpace: "Unpin Space", pinSpace: "Pin Space", deleteSpace: "Delete Space", changeColor: "Change Color", deleteFiles: "Delete Files", createFolderSpace: "Create Folder Space", folder: "Folder" }, buttons: { moreOptions: "More Options", newNote: "New Note", changeIcon: "Change Sticker", removeIcon: "Remove Sticker", rename: "Change Name", createFolder: "New Folder", createNote: "New Note", createSection: "New Space", cancel: "Cancel", search: "Search", delete: "Delete", toggleFlow: "Toggle Flow", openFlow: "Open Flow", hideFlow: "Hide Flow", openLink: "Open Link", addTag: "Add Tag", tag: "Tag", syncFields: "Sync Properties", cutTable: "Cut Table", deleteTable: "Delete Table", blink: "Blink", addFile: "Add File", merge: "Merge", saveView: "Save View", saveTable: "Save Table", renameView: "Rename View", renameTable: "Rename Table", currentFolder: "Current Folder", sync: "Sync" }, filterTypes: { contains: "contains", notContains: "does not contain", is: "is", isNot: "is not", before: "before", after: "after", anyOf: "is any of", noneOf: "is none of", checked: "is checked", unchecked: "is unchecked" }, sortTypes: { alphaAsc: "A to Z", alphaDesc: "Z to A", earliest: "Earliest", latest: "Latest", checkAsc: "Checked \u2192 Unchecked", checkDesc: "Unchecked \u2192 Checked", itemsAsc: "Least Items", itemsDesc: "Most Items" }, properties: { defaultField: "Name", text: { label: "Text" }, number: { label: "Number" }, preview: { label: "Preview" }, boolean: { label: "Yes/No" }, date: { label: "Date" }, option: { label: "Option" }, file: { label: "File" }, link: { label: "Link" }, tag: { label: "Tag" }, context: { label: "Context" }, image: { label: "Image" }, fileProperty: { label: "Look Up", createdTime: "Created", modifiedTime: "Last Edited", extension: "Extension", size: "Size", preview: "Note Preview", parentFolder: "Folder" } }, labels: { createFolder: "New Folder Name", rename: "Rename Note", renameSection: "Rename Space", createSection: "New Space", createNote: "New Note Name", select: "Select", collapse: "Collapse", expand: "Expand", findStickers: "Find Sticker", mergeProperties: "Merge Properties", placeholder: "Type '/' for commands", noFile: "is not created yet. Click to create.", blinkPlaceholder: "Quickly Search a File, Folder, Tag... Press Tab to Edit", searchPlaceholder: "Type to search...", contextItemSelectPlaceholder: "Find Item", linkItemSelectPlaceholder: "Find or Create Note", optionItemSelectPlaceholder: "Select Option", viewItemSelectPlaceholder: "Select View", tagItemSelectPlaceholder: "Find Tag", propertyItemSelectPlaceholder: "Select Property", sortItemSelectPlaceholder: "Select Sort", filterItemSelectPlaceholder: "Select Filter", syncFrontmatterProperty: "Sync Frontmatter Property", newProperty: "New Property", propertyType: "Type", propertyContext: "Context", propertyFileProp: "Property", multiple: "Multiple", filesCount: "{$1} Files", hiddenFiles: "Hidden Files", addExtension: "Add Extension", saveView: "Save View", saveTable: "Save Table", renameView: "Rename View", renameTable: "Rename Table", syncMetadata: "Sync Metadata", syncProperties: "Sync Properties", selectContext: "Select Context", metadata: "Metadata", backlinks: "Backlinks", context: "Context" }, descriptions: { syncMetadata: "Select which fields from your notes to start syncing with the context.", syncProperties: "Contexts defines and syncs the same fields across your notes depending on their folder or tag.", selectContext: "Select which folder or tag context you want to sync the fields." }, flowView: { emptyDoc: "Empty Document", itemsCount: " Items", emptyFolder: "This Folder is Empty" }, notice: { duplicateFile: "Folder already contains note with same name", addedToSection: "Added to Space", fileExists: "File Already Exists", folderExists: "Folder Already Exists", noPropertyName: "Property Name is Required", duplicatePropertyName: "Duplicate Property Name", newSpaceName: "Enter a name for your space", duplicateSpaceName: "Space name already exists" }, settings: { sectionSidebar: "Spaces", sectionEditor: "Maker Mode", sectionFlow: "Flow Editor", sectionAdvanced: "Advanced", sectionAppearance: "Appearance", sectionContext: "Context", folderNoteLocation: { name: "Folder Note Location Inside Folder", desc: "Turn on to have folder notes inside the folder, turn off to have it outside" }, internalLinkFlowEditor: { name: "Open Flow Editor on Internal Link Click", desc: "Turn on to toggle Flow Editor directly by clicking on internal links, otherwise a tooltip will be shown" }, syncContextToFrontmatter: { name: "Sync Context Fields to Frontmatter", desc: "Turn on to automatically save all context fields to frontmatter fields, not just existing frontmatter fields." }, openFileContext: { name: "Auto Open Context Explorer", desc: "Automatically open context explorer panel in the right panel" }, folderNote: { name: "Enable Folder Note", desc: "Access the folder note in the folder page and hide the folder note from spaces" }, activeFile: { name: "Reveal Active File", desc: "Automatically reveal the active file in Spaces" }, compactMode: { name: "Compact Mode", desc: "Display the Spaces menu in a more compact format" }, spaces: { name: "Spaces", desc: `Spaces gives you control over how you organize your files` }, spacesStickers: { name: "Stickers", desc: `Use Emojis to make it easier to find your notes` }, spacesFileExplorerDual: { name: "Use Spaces Alongside File Explorer", desc: "This will allow plugins that uses the File Explorer to work while using Spaces" }, spacesDeleteOption: { name: "Delete File Option", desc: "Select how you want files to be deleted" }, spacesDeleteOptions: { permanant: "Delete Permanently", trash: "Move to Obsidian Trash", "system-trash": "Move to System Trash" }, hideRibbon: { name: "App Ribbon", desc: `Show/hide the left menu aka. ribbon` }, sidebarTabs: { name: "Sidebar Tabs", desc: `Show/hide other sidebar tabs` }, spacesPerformance: { name: "Spaces Performance Mode", desc: `Turn on performance mode for Spaces, may affect scrolling appearance. Requires Restart` }, inlineStyler: { name: "Inline Styler", desc: `Select text to add styling, recommended for Flow Editor` }, inlineStylerColor: { name: "Text and Highlight Colors \u{1F9EA}", desc: `Select text color and highlight color, (this may change in the future because of the limitations with HTML and Obsidian)` }, makeChar: { name: "Make Menu Trigger", desc: "Character to open the Make Menu" }, mobileMakeBar: { name: "Make Bar (Mobile)", desc: "Replaces the mobile toolbar" }, editorMarkSans: { name: "Mark Sans \u{1F9EA}", desc: `Use the editor without Markdown.` }, editorMakerMode: { name: "Maker Mode", desc: `Turn on Maker Mode for a more intuitive editor experience` }, editorMakePlacholder: { name: "Make Menu Hint Text", desc: `Show a hint text on how to open the Make Menu Shortcut` }, editorMakeMenu: { name: "Make Menu Shortcut", desc: `Open the Make menu to quickly add content` }, editorFlowReplace: { name: "Flow Editor", desc: `Open your internal links or toggle your embeds in the flow editor.` }, editorFlowStyle: { name: "Flow Editor Style", desc: "Select a theme for your flow editors", seamless: "Seamless", classic: "Classic", minimal: "Minimal" } } } }; this.lang = localStorage.getItem("language"); } get texts() { return this.all["en"]; } }; var i18n_default = new T4().texts; // src/utils/icons.ts var uiIconSet = { "mk-ui-close": ` `, "mk-ui-flow-hover": ` `, "mk-ui-folder": ` `, "mk-ui-open-link": ` `, "mk-ui-file": ` `, "mk-ui-expand": ` `, "mk-ui-new-folder": ``, "mk-ui-new-note": ``, "mk-ui-collapse": ` `, "mk-ui-options": ` `, "mk-ui-plus": ` `, "mk-ui-collapse-sm": ` `, "mk-ui-search": ` `, "mk-ui-view-options": ` `, "mk-ui-clear": ` `, "mk-ui-new-file": ` `, "mk-ui-blink": ` `, "mk-ui-spaces": ` `, "mk-ui-tags": ` `, "mk-ui-handle": ` `, "mk-ui-new-space": ` `, "mk-ui-file-solid": ` `, "mk-ui-folder-solid": ` `, "mk-ui-sync": ` `, "mk-ui-stack": ` `, "mk-ui-cut": ` ` }; var makeIconSet = { "mk-make-todo": ` `, "mk-make-list": ` `, "mk-make-ordered": ` `, "mk-make-h1": ` `, "mk-make-h2": ` `, "mk-make-h3": ` `, "mk-make-quote": ` `, "mk-make-hr": ` `, "mk-make-link": ` `, "mk-make-image": ` `, "mk-make-codeblock": ` `, "mk-make-callout": ` `, "mk-make-note": ` `, "mk-make-flow": ` `, "mk-make-tag": ` `, "mk-make-table": ` ` }; var mkLogo = ` `; var markIconSet = { "mk-mark-strong": ` `, "mk-mark-em": ` `, "mk-mark-strikethrough": ` `, "mk-mark-code": ` `, "mk-mark-link": ` `, "mk-mark-blocklink": ` `, "mk-mark-highlight": ` `, "mk-make-attach": ` `, "mk-make-keyboard": ` `, "mk-make-slash": ` `, "mk-make-style": ` `, "mk-mark-color": ` ` }; // src/components/FlowEditor/FlowEditorHover.tsx var FlowEditorHover = (props2) => { return props2.type == "file" ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, props2.toggle && /* @__PURE__ */ bn.createElement("div", { "aria-label": i18n_default.buttons.toggleFlow, onClick: props2.toggleFlow, className: props2.toggleState ? "mk-toggle-on" : "", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-flow-hover"] } }), /* @__PURE__ */ bn.createElement("div", { "aria-label": i18n_default.buttons.openLink, onClick: props2.openLink, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-open-link"] } })) : /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { "aria-label": i18n_default.buttons.cutTable, onClick: props2.cutTable, className: "mk-icon-xsmall", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-cut"] } }), /* @__PURE__ */ bn.createElement("div", { "aria-label": i18n_default.buttons.deleteTable, onClick: props2.deleteTable, className: "mk-icon-xsmall", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } })); }; // src/utils/tree.ts var import_obsidian29 = require("obsidian"); // src/components/ContextView/ContextView.tsx var import_obsidian27 = require("obsidian"); // src/utils/contexts/contexts.ts var import_obsidian = require("obsidian"); // src/utils/contexts/predicate/filter.ts var stringEqual = (value, filterValue) => { return value == filterValue; }; var stringCompare = (value, filterValue) => { return (value != null ? value : "").toLowerCase().includes((filterValue != null ? filterValue : "").toLowerCase()); }; var greaterThan = (value, filterValue) => { return parseFloat(value) > parseFloat(filterValue); }; var lessThan = (value, filterValue) => { return parseInt(value) > parseInt(filterValue); }; var listIncludes = (value, filterValue) => { const valueList = value ? splitString(value) : []; const strings = filterValue ? splitString(filterValue) : []; return strings.some((f4) => valueList.some((g4) => g4 == f4)); }; var filterFnTypes = { include: { type: ["text", "file", "link", "link-multi", "tag", "tag-multi", "fileprop"], fn: stringCompare, label: i18n_default.filterTypes.contains, valueType: "text" }, notInclude: { type: ["text", "file", "link", "link-multi", "tag", "tag-multi", "fileprop"], fn: (v3, f4) => !stringCompare(v3, f4), label: i18n_default.filterTypes.notContains, valueType: "text" }, is: { type: ["text", "file", "link", "context", "tag"], fn: stringEqual, label: i18n_default.filterTypes.is, valueType: "text" }, isNot: { type: ["text", "file", "link", "context", "tag"], fn: (v3, f4) => !stringEqual(v3, f4), label: i18n_default.filterTypes.isNot, valueType: "text" }, equal: { type: ["number"], fn: stringEqual, label: "=", valueType: "number" }, isGreatThan: { type: ["number"], fn: greaterThan, label: ">", valueType: "number" }, isLessThan: { type: ["number"], fn: lessThan, label: "<", valueType: "number" }, isLessThanOrEqual: { type: ["number"], fn: (v3, f4) => !greaterThan(v3, f4), label: "\u2264", valueType: "number" }, isGreatThanOrEqual: { type: ["number"], fn: (v3, f4) => !lessThan(v3, f4), label: "\u2265", valueType: "number" }, dateBefore: { type: ["date"], fn: lessThan, label: i18n_default.filterTypes.before, valueType: "date" }, dateAfter: { type: ["date"], fn: greaterThan, label: i18n_default.filterTypes.after, valueType: "date" }, isAnyInList: { type: ["option", "context", "option-multi", "context-multi"], fn: listIncludes, label: i18n_default.filterTypes.anyOf, valueType: "list" }, isNoneInList: { type: ["option", "context", "option-multi", "context-multi"], fn: (v3, f4) => !listIncludes(v3, f4), label: i18n_default.filterTypes.noneOf, valueType: "list" }, isTrue: { type: ["boolean"], fn: (v3, f4) => v3 == "true", label: i18n_default.filterTypes.checked, valueType: "boolean" }, isFalse: { type: ["boolean"], fn: (v3, f4) => v3 != "true", label: i18n_default.filterTypes.unchecked, valueType: "boolean" } }; var filterReturnForCol = (col, filter, row) => { if (!col) return true; const filterType = filterFnTypes[filter.type]; let result = true; if (filterType) { result = filterType.fn(row[filter.field], filter.value); } return result; }; // src/utils/contexts/predicate/sort.ts var simpleSort = (a5, b4) => { if (a5 < b4) return -1; if (a5 > b4) return 1; return 0; }; var stringSort = (value, filterValue) => simpleSort(value, filterValue); var numSort = (value, filterValue) => simpleSort(parseFloat(value), parseFloat(filterValue)); var boolSort = (value, filterValue) => simpleSort(value == "true" ? 1 : 0, filterValue == "true" ? 1 : 0); var countSort = (value, filterValue) => simpleSort(splitString(value).length, splitString(filterValue).length); var normalizedSortForType = (type, desc) => { return Object.keys(sortFnTypes).find( (f4) => sortFnTypes[f4].type.some((g4) => g4 == type) && sortFnTypes[f4].desc == desc ); }; var sortFnTypes = { alphabetical: { type: ["text", "file", "link", "context"], fn: stringSort, label: i18n_default.sortTypes.alphaAsc, desc: false }, reverseAlphabetical: { type: ["text", "file", "link", "context"], fn: (v3, f4) => stringSort(v3, f4) * -1, label: i18n_default.sortTypes.alphaDesc, desc: true }, earliest: { type: ["date"], fn: stringSort, label: i18n_default.sortTypes.earliest, desc: false }, latest: { type: ["date"], fn: (v3, f4) => stringSort(v3, f4) * -1, label: i18n_default.sortTypes.latest, desc: true }, boolean: { type: ["boolean"], fn: boolSort, label: i18n_default.sortTypes.checkAsc, desc: false }, booleanReverse: { type: ["boolean"], fn: (v3, f4) => boolSort(v3, f4) * -1, label: i18n_default.sortTypes.checkDesc, desc: true }, number: { type: ["number"], fn: numSort, label: "1 \u2192 9", desc: false }, reverseNumber: { type: ["number"], fn: (v3, f4) => numSort(v3, f4) * -1, label: "9 \u2192 1", desc: true }, count: { type: ["option-multi", "context-multi", "link-multi"], fn: countSort, label: i18n_default.sortTypes.itemsDesc, desc: true }, reverseCount: { type: ["option-multi", "context-multi", "link-multi"], fn: (v3, f4) => countSort(v3, f4) * -1, label: i18n_default.sortTypes.itemsAsc, desc: false } }; var sortReturnForCol = (col, sort, row, row2) => { if (!col) return 0; const sortType = sortFnTypes[sort.type]; if (sortType) { return sortType.fn(row[sort.field], row2[sort.field]); } return 0; }; // src/utils/contexts/predicate/predicate.tsx var defaultPredicateFnForType = (type, types) => { const fnType = Object.keys(types).find( (f4) => types[f4].type.find((g4) => g4 == type) ); return fnType; }; var predicateFnsForType = (type, types) => { const fnTypes = Object.keys(types).filter( (f4) => types[f4].type.find((g4) => g4 == type) ); return fnTypes; }; var cleanPredicateType = (type, definedTypes) => { return type.filter((f4) => Object.keys(definedTypes).find((g4) => g4 == f4.type)); }; var validatePredicate = (prevPredicate) => { if (!prevPredicate) { return defaultPredicate; } return { ...defaultPredicate, filters: Array.isArray(prevPredicate.filters) ? cleanPredicateType(prevPredicate.filters, filterFnTypes) : [], sort: Array.isArray(prevPredicate.sort) ? cleanPredicateType(prevPredicate.sort, sortFnTypes) : [], groupBy: Array.isArray(prevPredicate.groupBy) ? prevPredicate.groupBy : [], colsOrder: Array.isArray(prevPredicate.colsOrder) ? prevPredicate.colsOrder : [], colsHidden: Array.isArray(prevPredicate.colsHidden) ? prevPredicate.colsHidden : [], colsSize: prevPredicate.colsSize }; }; var defaultPredicate = { filters: [], sort: [], groupBy: [], colsOrder: [], colsHidden: [], colsSize: {} }; var splitString = (str) => { var _a2; return (_a2 = str == null ? void 0 : str.match(/(\\.|[^,])+/g)) != null ? _a2 : []; }; var splitPropString = (str) => { var _a2; return (_a2 = str == null ? void 0 : str.match(/(\\.|[^.])+/g)) != null ? _a2 : []; }; // src/utils/contexts/contexts.ts var tagFromString = (tag) => { if (!tag) return null; let string = tag; if (string.charAt(0) != "#") string = "#" + string; return string.replace(/\//g, "+"); }; var stringToTag = (string) => { return string.replace(/\+/g, "/"); }; var stringFromTag = (string) => { if (string.charAt(0) == "#") { return string.substring(1, string.length); } return string; }; var loadTags = (plugin) => { var _a2; const folder = plugin.settings.tagContextFolder == "" ? app.vault.getRoot() : getAbstractFileAtPath( app, getFolderPathFromString(plugin.settings.tagContextFolder) ); return uniq([ ...Object.keys(app.metadataCache.getTags()), ...(_a2 = folder == null ? void 0 : folder.children.filter( (f4) => f4 instanceof import_obsidian.TFile && f4.extension == "mdb" && f4.name.charAt(0) == "#" ).map((f4) => stringToTag(fileNameToString(f4.name)))) != null ? _a2 : [] ]); }; var tagContextFromTag = (plugin, tag) => { return getFolderPathFromString(plugin.settings.tagContextFolder) + "/" + tagFromString(tag) + ".mdb"; }; var folderContextFromFolder = (plugin, folder) => { return (folder == "/" ? "" : folder + "/") + plugin.settings.folderContextFile + ".mdb"; }; var linkContextRow = (row, fields, tagContexts) => { return { ...row, ...fields.filter((f4) => f4.type == "fileprop").reduce( (p3, c4) => { const refCol = splitPropString(c4.value); const col = refCol.length == 1 ? fields.find((f4) => f4.name == "File") : fields.find((f4) => f4.name == refCol[0]); const prop = refCol.length == 1 ? refCol[0] : refCol[1]; if (!col || !prop) { return p3; } if (col.type == "file" || col.type == "link") { return { ...p3, [c4.name]: appendFilesMetaData(prop, row[col.name]) }; } if (col.type.includes("context")) { const context = col.value; if (tagContexts[context]) { return { ...p3, [c4.name]: linkContextProp(prop, row[col.name], tagContexts[context]) }; } } return p3; }, {} ) }; }; var linkContextProp = (propType, rows, contextTable) => { const contextRows = contextTable.rows.filter((f4) => splitString(rows).contains(f4.File)); return uniq(contextRows.map((f4) => f4[propType]).filter((f4) => f4)).join(","); }; // src/utils/flow/flowEditor.ts var import_state4 = require("@codemirror/state"); // src/cm-extensions/flowEditor/selectiveEditor.ts var import_state3 = require("@codemirror/state"); var import_view3 = require("@codemirror/view"); // node_modules/tslib/modules/index.js var import_tslib = __toESM(require_tslib(), 1); var { __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __createBinding, __values, __read, __spread, __spreadArrays, __spreadArray, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet, __classPrivateFieldIn } = import_tslib.default; // src/cm-extensions/flowEditor/selectiveEditor.ts var editableRange = import_state3.Annotation.define(); var hiddenLine = import_view3.Decoration.replace({ inclusive: true }); var hideLine = import_state3.StateField.define({ create() { return import_view3.Decoration.none; }, update(value, tr) { var _a2; let builder = new import_state3.RangeSetBuilder(); if (((_a2 = tr.state.field(selectiveLinesFacet)) == null ? void 0 : _a2[0]) != void 0) { builder.add( tr.state.doc.line(1).from, tr.state.doc.line(tr.state.field(selectiveLinesFacet)[0]).from, hiddenLine ); builder.add( tr.state.doc.line( Math.min(tr.newDoc.lines, tr.state.field(selectiveLinesFacet)[1]) ).to, tr.state.doc.line(tr.newDoc.lines).to, hiddenLine ); } const dec = builder.finish(); return dec; }, provide: (f4) => import_view3.EditorView.decorations.from(f4) }); var selectiveLinesFacet = import_state3.StateField.define({ create: () => [void 0, void 0], update(value, tr) { if (tr.annotation(editableRange)) { if (tr.annotation(editableRange)[0]) { return [ tr.annotation(editableRange)[0], Math.min(tr.state.doc.lines, tr.annotation(editableRange)[1]) ]; } return tr.annotation(editableRange); } return value; } }); var lineRangeToPosRange = (state, range) => { return { from: state.doc.line(range[0]).from, to: state.doc.line(Math.min(state.doc.lines, range[1])).to }; }; var smartDelete = import_state3.EditorState.transactionFilter.of( (tr) => { var _a2; if (tr.isUserEvent("delete") && !tr.isUserEvent("delete.smart")) { const initialSelections = tr.startState.selection.ranges.map((range) => ({ from: range.from, to: range.to })); if (initialSelections.length > 0 && ((_a2 = tr.startState.field(selectiveLinesFacet)) == null ? void 0 : _a2[0])) { const posRange = lineRangeToPosRange( tr.startState, tr.startState.field(selectiveLinesFacet) ); const minFrom = Math.max(posRange.from, initialSelections[0].from); const minTo = Math.min(posRange.to, initialSelections[0].to); tr.startState.update({ changes: { from: Math.min(minFrom, minTo), to: Math.max(minFrom, minTo) }, annotations: import_state3.Transaction.userEvent.of( `${tr.annotation(import_state3.Transaction.userEvent)}.smart` ) }); } } return tr; } ); var preventModifyTargetRanges = import_state3.EditorState.transactionFilter.of( (tr) => { let newTrans = []; try { const selectiveLines = tr.startState.field(selectiveLinesFacet); if (tr.isUserEvent("input") || tr.isUserEvent("delete") || tr.isUserEvent("move")) { if (selectiveLines == null ? void 0 : selectiveLines[0]) { const posRange = lineRangeToPosRange( tr.startState, tr.startState.field(selectiveLinesFacet) ); if (tr.changes.touchesRange(0, posRange.from - 1) || !tr.changes.touchesRange(posRange.from, posRange.to)) { return []; } } } if (tr.state.doc.lines != tr.startState.doc.lines) { const numberNewLines = tr.state.doc.lines - tr.startState.doc.lines; if (selectiveLines == null ? void 0 : selectiveLines[0]) { const posRange = lineRangeToPosRange( tr.startState, tr.startState.field(selectiveLinesFacet) ); if (tr.changes.touchesRange(0, posRange.from - 1)) { newTrans.push({ annotations: [ editableRange.of([ selectiveLines[0] + numberNewLines, selectiveLines[1] + numberNewLines ]) ] }); } else if (tr.changes.touchesRange(posRange.from - 1, posRange.to)) { newTrans.push({ annotations: [ editableRange.of([ selectiveLines[0], selectiveLines[1] + numberNewLines ]) ] }); } } } } catch (e4) { return []; } return [tr, ...newTrans]; } ); var readOnlyRangesExtension = [smartDelete, preventModifyTargetRanges]; var editBlockExtensions = () => [ readOnlyRangesExtension, hideLine, selectiveLinesFacet ]; // src/components/ContextView/InlineContextView.tsx var import_obsidian19 = require("obsidian"); // node_modules/@dnd-kit/utilities/dist/utilities.esm.js function useCombinedRefs(...refs) { return F( () => (node) => { refs.forEach((ref) => ref(node)); }, refs ); } var canUseDOM = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined"; function isWindow(element) { const elementString = Object.prototype.toString.call(element); return elementString === "[object Window]" || elementString === "[object global]"; } function isNode(node) { return "nodeType" in node; } function getWindow(target) { var _target$ownerDocument, _target$ownerDocument2; if (!target) { return window; } if (isWindow(target)) { return target; } if (!isNode(target)) { return window; } return (_target$ownerDocument = (_target$ownerDocument2 = target.ownerDocument) == null ? void 0 : _target$ownerDocument2.defaultView) != null ? _target$ownerDocument : window; } function isDocument(node) { const { Document } = getWindow(node); return node instanceof Document; } function isHTMLElement(node) { if (isWindow(node)) { return false; } return node instanceof getWindow(node).HTMLElement; } function isSVGElement(node) { return node instanceof getWindow(node).SVGElement; } function getOwnerDocument(target) { if (!target) { return document; } if (isWindow(target)) { return target.document; } if (!isNode(target)) { return document; } if (isDocument(target)) { return target; } if (isHTMLElement(target)) { return target.ownerDocument; } return document; } var useIsomorphicLayoutEffect = canUseDOM ? s2 : h2; function useEvent(handler) { const handlerRef = _2(handler); useIsomorphicLayoutEffect(() => { handlerRef.current = handler; }); return T2(function(...args) { return handlerRef.current == null ? void 0 : handlerRef.current(...args); }, []); } function useInterval() { const intervalRef = _2(null); const set = T2((listener, duration) => { intervalRef.current = setInterval(listener, duration); }, []); const clear = T2(() => { if (intervalRef.current !== null) { clearInterval(intervalRef.current); intervalRef.current = null; } }, []); return [set, clear]; } function useLatestValue(value, dependencies = [value]) { const valueRef = _2(value); useIsomorphicLayoutEffect(() => { if (valueRef.current !== value) { valueRef.current = value; } }, dependencies); return valueRef; } function useLazyMemo(callback, dependencies) { const valueRef = _2(); return F( () => { const newValue = callback(valueRef.current); valueRef.current = newValue; return newValue; }, [...dependencies] ); } function useNodeRef(onChange) { const onChangeHandler = useEvent(onChange); const node = _2(null); const setNodeRef = T2( (element) => { if (element !== node.current) { onChangeHandler == null ? void 0 : onChangeHandler(element, node.current); } node.current = element; }, [] ); return [node, setNodeRef]; } function usePrevious(value) { const ref = _2(); h2(() => { ref.current = value; }, [value]); return ref.current; } var ids = {}; function useUniqueId(prefix, value) { return F(() => { if (value) { return value; } const id2 = ids[prefix] == null ? 0 : ids[prefix] + 1; ids[prefix] = id2; return `${prefix}-${id2}`; }, [prefix, value]); } function createAdjustmentFn(modifier) { return (object, ...adjustments) => { return adjustments.reduce((accumulator, adjustment) => { const entries = Object.entries(adjustment); for (const [key2, valueAdjustment] of entries) { const value = accumulator[key2]; if (value != null) { accumulator[key2] = value + modifier * valueAdjustment; } } return accumulator; }, { ...object }); }; } var add = /* @__PURE__ */ createAdjustmentFn(1); var subtract = /* @__PURE__ */ createAdjustmentFn(-1); function hasViewportRelativeCoordinates(event) { return "clientX" in event && "clientY" in event; } function isKeyboardEvent(event) { if (!event) { return false; } const { KeyboardEvent } = getWindow(event.target); return KeyboardEvent && event instanceof KeyboardEvent; } function isTouchEvent(event) { if (!event) { return false; } const { TouchEvent } = getWindow(event.target); return TouchEvent && event instanceof TouchEvent; } function getEventCoordinates(event) { if (isTouchEvent(event)) { if (event.touches && event.touches.length) { const { clientX: x5, clientY: y5 } = event.touches[0]; return { x: x5, y: y5 }; } else if (event.changedTouches && event.changedTouches.length) { const { clientX: x5, clientY: y5 } = event.changedTouches[0]; return { x: x5, y: y5 }; } } if (hasViewportRelativeCoordinates(event)) { return { x: event.clientX, y: event.clientY }; } return null; } var CSS = /* @__PURE__ */ Object.freeze({ Translate: { toString(transform) { if (!transform) { return; } const { x: x5, y: y5 } = transform; return `translate3d(${x5 ? Math.round(x5) : 0}px, ${y5 ? Math.round(y5) : 0}px, 0)`; } }, Scale: { toString(transform) { if (!transform) { return; } const { scaleX, scaleY } = transform; return `scaleX(${scaleX}) scaleY(${scaleY})`; } }, Transform: { toString(transform) { if (!transform) { return; } return [CSS.Translate.toString(transform), CSS.Scale.toString(transform)].join(" "); } }, Transition: { toString({ property, duration, easing }) { return `${property} ${duration}ms ${easing}`; } } }); var SELECTOR = "a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]"; function findFirstFocusableNode(element) { if (element.matches(SELECTOR)) { return element; } return element.querySelector(SELECTOR); } // node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js var hiddenStyles = { display: "none" }; function HiddenText(_ref) { let { id: id2, value } = _ref; return bn.createElement("div", { id: id2, style: hiddenStyles }, value); } var visuallyHidden = { position: "fixed", width: 1, height: 1, margin: -1, border: 0, padding: 0, overflow: "hidden", clip: "rect(0 0 0 0)", clipPath: "inset(100%)", whiteSpace: "nowrap" }; function LiveRegion(_ref) { let { id: id2, announcement } = _ref; return bn.createElement("div", { id: id2, style: visuallyHidden, role: "status", "aria-live": "assertive", "aria-atomic": true }, announcement); } function useAnnouncement() { const [announcement, setAnnouncement] = p2(""); const announce = T2((value) => { if (value != null) { setAnnouncement(value); } }, []); return { announce, announcement }; } // node_modules/@dnd-kit/core/dist/core.esm.js var DndMonitorContext = /* @__PURE__ */ B(null); function useDndMonitor(listener) { const registerListener = q2(DndMonitorContext); h2(() => { if (!registerListener) { throw new Error("useDndMonitor must be used within a children of "); } const unsubscribe = registerListener(listener); return unsubscribe; }, [listener, registerListener]); } function useDndMonitorProvider() { const [listeners] = p2(() => /* @__PURE__ */ new Set()); const registerListener = T2((listener) => { listeners.add(listener); return () => listeners.delete(listener); }, [listeners]); const dispatch = T2((_ref) => { let { type, event } = _ref; listeners.forEach((listener) => { var _listener$type; return (_listener$type = listener[type]) == null ? void 0 : _listener$type.call(listener, event); }); }, [listeners]); return [dispatch, registerListener]; } var defaultScreenReaderInstructions = { draggable: "\n To pick up a draggable item, press the space bar.\n While dragging, use the arrow keys to move the item.\n Press space again to drop the item in its new position, or press escape to cancel.\n " }; var defaultAnnouncements = { onDragStart(_ref) { let { active } = _ref; return "Picked up draggable item " + active.id + "."; }, onDragOver(_ref2) { let { active, over } = _ref2; if (over) { return "Draggable item " + active.id + " was moved over droppable area " + over.id + "."; } return "Draggable item " + active.id + " is no longer over a droppable area."; }, onDragEnd(_ref3) { let { active, over } = _ref3; if (over) { return "Draggable item " + active.id + " was dropped over droppable area " + over.id; } return "Draggable item " + active.id + " was dropped."; }, onDragCancel(_ref4) { let { active } = _ref4; return "Dragging was cancelled. Draggable item " + active.id + " was dropped."; } }; function Accessibility(_ref) { let { announcements = defaultAnnouncements, container, hiddenTextDescribedById, screenReaderInstructions = defaultScreenReaderInstructions } = _ref; const { announce, announcement } = useAnnouncement(); const liveRegionId = useUniqueId("DndLiveRegion"); const [mounted, setMounted] = p2(false); h2(() => { setMounted(true); }, []); useDndMonitor(F(() => ({ onDragStart(_ref2) { let { active } = _ref2; announce(announcements.onDragStart({ active })); }, onDragMove(_ref3) { let { active, over } = _ref3; if (announcements.onDragMove) { announce(announcements.onDragMove({ active, over })); } }, onDragOver(_ref4) { let { active, over } = _ref4; announce(announcements.onDragOver({ active, over })); }, onDragEnd(_ref5) { let { active, over } = _ref5; announce(announcements.onDragEnd({ active, over })); }, onDragCancel(_ref6) { let { active, over } = _ref6; announce(announcements.onDragCancel({ active, over })); } }), [announce, announcements])); if (!mounted) { return null; } const markup = bn.createElement(bn.Fragment, null, bn.createElement(HiddenText, { id: hiddenTextDescribedById, value: screenReaderInstructions.draggable }), bn.createElement(LiveRegion, { id: liveRegionId, announcement })); return container ? j3(markup, container) : markup; } var Action; (function(Action2) { Action2["DragStart"] = "dragStart"; Action2["DragMove"] = "dragMove"; Action2["DragEnd"] = "dragEnd"; Action2["DragCancel"] = "dragCancel"; Action2["DragOver"] = "dragOver"; Action2["RegisterDroppable"] = "registerDroppable"; Action2["SetDroppableDisabled"] = "setDroppableDisabled"; Action2["UnregisterDroppable"] = "unregisterDroppable"; })(Action || (Action = {})); function noop() { } function useSensor(sensor, options) { return F( () => ({ sensor, options: options != null ? options : {} }), [sensor, options] ); } function useSensors() { for (var _len = arguments.length, sensors = new Array(_len), _key = 0; _key < _len; _key++) { sensors[_key] = arguments[_key]; } return F( () => [...sensors].filter((sensor) => sensor != null), [...sensors] ); } var defaultCoordinates = /* @__PURE__ */ Object.freeze({ x: 0, y: 0 }); function distanceBetween(p1, p22) { return Math.sqrt(Math.pow(p1.x - p22.x, 2) + Math.pow(p1.y - p22.y, 2)); } function getRelativeTransformOrigin(event, rect) { const eventCoordinates = getEventCoordinates(event); if (!eventCoordinates) { return "0 0"; } const transformOrigin = { x: (eventCoordinates.x - rect.left) / rect.width * 100, y: (eventCoordinates.y - rect.top) / rect.height * 100 }; return transformOrigin.x + "% " + transformOrigin.y + "%"; } function sortCollisionsAsc(_ref, _ref2) { let { data: { value: a5 } } = _ref; let { data: { value: b4 } } = _ref2; return a5 - b4; } function sortCollisionsDesc(_ref3, _ref4) { let { data: { value: a5 } } = _ref3; let { data: { value: b4 } } = _ref4; return b4 - a5; } function cornersOfRectangle(_ref5) { let { left, top, height, width } = _ref5; return [{ x: left, y: top }, { x: left + width, y: top }, { x: left, y: top + height }, { x: left + width, y: top + height }]; } function getFirstCollision(collisions, property) { if (!collisions || collisions.length === 0) { return null; } const [firstCollision] = collisions; return property ? firstCollision[property] : firstCollision; } function centerOfRectangle(rect, left, top) { if (left === void 0) { left = rect.left; } if (top === void 0) { top = rect.top; } return { x: left + rect.width * 0.5, y: top + rect.height * 0.5 }; } var closestCenter = (_ref) => { let { collisionRect, droppableRects, droppableContainers } = _ref; const centerRect = centerOfRectangle(collisionRect, collisionRect.left, collisionRect.top); const collisions = []; for (const droppableContainer of droppableContainers) { const { id: id2 } = droppableContainer; const rect = droppableRects.get(id2); if (rect) { const distBetween = distanceBetween(centerOfRectangle(rect), centerRect); collisions.push({ id: id2, data: { droppableContainer, value: distBetween } }); } } return collisions.sort(sortCollisionsAsc); }; var closestCorners = (_ref) => { let { collisionRect, droppableRects, droppableContainers } = _ref; const corners = cornersOfRectangle(collisionRect); const collisions = []; for (const droppableContainer of droppableContainers) { const { id: id2 } = droppableContainer; const rect = droppableRects.get(id2); if (rect) { const rectCorners = cornersOfRectangle(rect); const distances = corners.reduce((accumulator, corner, index) => { return accumulator + distanceBetween(rectCorners[index], corner); }, 0); const effectiveDistance = Number((distances / 4).toFixed(4)); collisions.push({ id: id2, data: { droppableContainer, value: effectiveDistance } }); } } return collisions.sort(sortCollisionsAsc); }; function getIntersectionRatio(entry, target) { const top = Math.max(target.top, entry.top); const left = Math.max(target.left, entry.left); const right = Math.min(target.left + target.width, entry.left + entry.width); const bottom = Math.min(target.top + target.height, entry.top + entry.height); const width = right - left; const height = bottom - top; if (left < right && top < bottom) { const targetArea = target.width * target.height; const entryArea = entry.width * entry.height; const intersectionArea = width * height; const intersectionRatio = intersectionArea / (targetArea + entryArea - intersectionArea); return Number(intersectionRatio.toFixed(4)); } return 0; } var rectIntersection = (_ref) => { let { collisionRect, droppableRects, droppableContainers } = _ref; const collisions = []; for (const droppableContainer of droppableContainers) { const { id: id2 } = droppableContainer; const rect = droppableRects.get(id2); if (rect) { const intersectionRatio = getIntersectionRatio(rect, collisionRect); if (intersectionRatio > 0) { collisions.push({ id: id2, data: { droppableContainer, value: intersectionRatio } }); } } } return collisions.sort(sortCollisionsDesc); }; function adjustScale(transform, rect1, rect2) { return { ...transform, scaleX: rect1 && rect2 ? rect1.width / rect2.width : 1, scaleY: rect1 && rect2 ? rect1.height / rect2.height : 1 }; } function getRectDelta(rect1, rect2) { return rect1 && rect2 ? { x: rect1.left - rect2.left, y: rect1.top - rect2.top } : defaultCoordinates; } function createRectAdjustmentFn(modifier) { return function adjustClientRect(rect) { for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { adjustments[_key - 1] = arguments[_key]; } return adjustments.reduce((acc, adjustment) => ({ ...acc, top: acc.top + modifier * adjustment.y, bottom: acc.bottom + modifier * adjustment.y, left: acc.left + modifier * adjustment.x, right: acc.right + modifier * adjustment.x }), { ...rect }); }; } var getAdjustedRect = /* @__PURE__ */ createRectAdjustmentFn(1); function parseTransform(transform) { if (transform.startsWith("matrix3d(")) { const transformArray = transform.slice(9, -1).split(/, /); return { x: +transformArray[12], y: +transformArray[13], scaleX: +transformArray[0], scaleY: +transformArray[5] }; } else if (transform.startsWith("matrix(")) { const transformArray = transform.slice(7, -1).split(/, /); return { x: +transformArray[4], y: +transformArray[5], scaleX: +transformArray[0], scaleY: +transformArray[3] }; } return null; } function inverseTransform(rect, transform, transformOrigin) { const parsedTransform = parseTransform(transform); if (!parsedTransform) { return rect; } const { scaleX, scaleY, x: translateX, y: translateY } = parsedTransform; const x5 = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin); const y5 = rect.top - translateY - (1 - scaleY) * parseFloat(transformOrigin.slice(transformOrigin.indexOf(" ") + 1)); const w5 = scaleX ? rect.width / scaleX : rect.width; const h5 = scaleY ? rect.height / scaleY : rect.height; return { width: w5, height: h5, top: y5, right: x5 + w5, bottom: y5 + h5, left: x5 }; } var defaultOptions = { ignoreTransform: false }; function getClientRect(element, options) { if (options === void 0) { options = defaultOptions; } let rect = element.getBoundingClientRect(); if (options.ignoreTransform) { const { getComputedStyle } = getWindow(element); const { transform, transformOrigin } = getComputedStyle(element); if (transform) { rect = inverseTransform(rect, transform, transformOrigin); } } const { top, left, width, height, bottom, right } = rect; return { top, left, width, height, bottom, right }; } function getTransformAgnosticClientRect(element) { return getClientRect(element, { ignoreTransform: true }); } function getWindowClientRect(element) { const width = element.innerWidth; const height = element.innerHeight; return { top: 0, left: 0, right: width, bottom: height, width, height }; } function isFixed(node, computedStyle) { if (computedStyle === void 0) { computedStyle = getWindow(node).getComputedStyle(node); } return computedStyle.position === "fixed"; } function isScrollable(element, computedStyle) { if (computedStyle === void 0) { computedStyle = getWindow(element).getComputedStyle(element); } const overflowRegex = /(auto|scroll|overlay)/; const properties2 = ["overflow", "overflowX", "overflowY"]; return properties2.some((property) => { const value = computedStyle[property]; return typeof value === "string" ? overflowRegex.test(value) : false; }); } function getScrollableAncestors(element, limit) { const scrollParents = []; function findScrollableAncestors(node) { if (limit != null && scrollParents.length >= limit) { return scrollParents; } if (!node) { return scrollParents; } if (isDocument(node) && node.scrollingElement != null && !scrollParents.includes(node.scrollingElement)) { scrollParents.push(node.scrollingElement); return scrollParents; } if (!isHTMLElement(node) || isSVGElement(node)) { return scrollParents; } if (scrollParents.includes(node)) { return scrollParents; } const { getComputedStyle } = getWindow(node); const computedStyle = getComputedStyle(node); if (node !== element) { if (isScrollable(node, computedStyle)) { scrollParents.push(node); } } if (isFixed(node, computedStyle)) { return scrollParents; } return findScrollableAncestors(node.parentNode); } if (!element) { return scrollParents; } return findScrollableAncestors(element); } function getFirstScrollableAncestor(node) { const [firstScrollableAncestor] = getScrollableAncestors(node, 1); return firstScrollableAncestor != null ? firstScrollableAncestor : null; } function getScrollableElement(element) { if (!canUseDOM || !element) { return null; } if (isWindow(element)) { return element; } if (!isNode(element)) { return null; } if (isDocument(element) || element === getOwnerDocument(element).scrollingElement) { return window; } if (isHTMLElement(element)) { return element; } return null; } function getScrollXCoordinate(element) { if (isWindow(element)) { return element.scrollX; } return element.scrollLeft; } function getScrollYCoordinate(element) { if (isWindow(element)) { return element.scrollY; } return element.scrollTop; } function getScrollCoordinates(element) { return { x: getScrollXCoordinate(element), y: getScrollYCoordinate(element) }; } var Direction2; (function(Direction3) { Direction3[Direction3["Forward"] = 1] = "Forward"; Direction3[Direction3["Backward"] = -1] = "Backward"; })(Direction2 || (Direction2 = {})); function isDocumentScrollingElement(element) { if (!canUseDOM || !element) { return false; } return element === document.scrollingElement; } function getScrollPosition(scrollingContainer) { const minScroll = { x: 0, y: 0 }; const dimensions = isDocumentScrollingElement(scrollingContainer) ? { height: window.innerHeight, width: window.innerWidth } : { height: scrollingContainer.clientHeight, width: scrollingContainer.clientWidth }; const maxScroll = { x: scrollingContainer.scrollWidth - dimensions.width, y: scrollingContainer.scrollHeight - dimensions.height }; const isTop = scrollingContainer.scrollTop <= minScroll.y; const isLeft = scrollingContainer.scrollLeft <= minScroll.x; const isBottom = scrollingContainer.scrollTop >= maxScroll.y; const isRight = scrollingContainer.scrollLeft >= maxScroll.x; return { isTop, isLeft, isBottom, isRight, maxScroll, minScroll }; } var defaultThreshold = { x: 0.2, y: 0.2 }; function getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, _ref, acceleration, thresholdPercentage) { let { top, left, right, bottom } = _ref; if (acceleration === void 0) { acceleration = 10; } if (thresholdPercentage === void 0) { thresholdPercentage = defaultThreshold; } const { isTop, isBottom, isLeft, isRight } = getScrollPosition(scrollContainer); const direction = { x: 0, y: 0 }; const speed = { x: 0, y: 0 }; const threshold = { height: scrollContainerRect.height * thresholdPercentage.y, width: scrollContainerRect.width * thresholdPercentage.x }; if (!isTop && top <= scrollContainerRect.top + threshold.height) { direction.y = Direction2.Backward; speed.y = acceleration * Math.abs((scrollContainerRect.top + threshold.height - top) / threshold.height); } else if (!isBottom && bottom >= scrollContainerRect.bottom - threshold.height) { direction.y = Direction2.Forward; speed.y = acceleration * Math.abs((scrollContainerRect.bottom - threshold.height - bottom) / threshold.height); } if (!isRight && right >= scrollContainerRect.right - threshold.width) { direction.x = Direction2.Forward; speed.x = acceleration * Math.abs((scrollContainerRect.right - threshold.width - right) / threshold.width); } else if (!isLeft && left <= scrollContainerRect.left + threshold.width) { direction.x = Direction2.Backward; speed.x = acceleration * Math.abs((scrollContainerRect.left + threshold.width - left) / threshold.width); } return { direction, speed }; } function getScrollElementRect(element) { if (element === document.scrollingElement) { const { innerWidth: innerWidth2, innerHeight: innerHeight2 } = window; return { top: 0, left: 0, right: innerWidth2, bottom: innerHeight2, width: innerWidth2, height: innerHeight2 }; } const { top, left, right, bottom } = element.getBoundingClientRect(); return { top, left, right, bottom, width: element.clientWidth, height: element.clientHeight }; } function getScrollOffsets(scrollableAncestors) { return scrollableAncestors.reduce((acc, node) => { return add(acc, getScrollCoordinates(node)); }, defaultCoordinates); } function getScrollXOffset(scrollableAncestors) { return scrollableAncestors.reduce((acc, node) => { return acc + getScrollXCoordinate(node); }, 0); } function getScrollYOffset(scrollableAncestors) { return scrollableAncestors.reduce((acc, node) => { return acc + getScrollYCoordinate(node); }, 0); } function scrollIntoViewIfNeeded(element, measure) { if (measure === void 0) { measure = getClientRect; } if (!element) { return; } const { top, left, bottom, right } = measure(element); const firstScrollableAncestor = getFirstScrollableAncestor(element); if (!firstScrollableAncestor) { return; } if (bottom <= 0 || right <= 0 || top >= window.innerHeight || left >= window.innerWidth) { element.scrollIntoView({ block: "center", inline: "center" }); } } var properties = [["x", ["left", "right"], getScrollXOffset], ["y", ["top", "bottom"], getScrollYOffset]]; var Rect = class { constructor(rect, element) { this.rect = void 0; this.width = void 0; this.height = void 0; this.top = void 0; this.bottom = void 0; this.right = void 0; this.left = void 0; const scrollableAncestors = getScrollableAncestors(element); const scrollOffsets = getScrollOffsets(scrollableAncestors); this.rect = { ...rect }; this.width = rect.width; this.height = rect.height; for (const [axis, keys, getScrollOffset] of properties) { for (const key2 of keys) { Object.defineProperty(this, key2, { get: () => { const currentOffsets = getScrollOffset(scrollableAncestors); const scrollOffsetsDeltla = scrollOffsets[axis] - currentOffsets; return this.rect[key2] + scrollOffsetsDeltla; }, enumerable: true }); } } Object.defineProperty(this, "rect", { enumerable: false }); } }; var Listeners = class { constructor(target) { this.target = void 0; this.listeners = []; this.removeAll = () => { this.listeners.forEach((listener) => { var _this$target; return (_this$target = this.target) == null ? void 0 : _this$target.removeEventListener(...listener); }); }; this.target = target; } add(eventName, handler, options) { var _this$target2; (_this$target2 = this.target) == null ? void 0 : _this$target2.addEventListener(eventName, handler, options); this.listeners.push([eventName, handler, options]); } }; function getEventListenerTarget(target) { const { EventTarget } = getWindow(target); return target instanceof EventTarget ? target : getOwnerDocument(target); } function hasExceededDistance(delta, measurement) { const dx = Math.abs(delta.x); const dy = Math.abs(delta.y); if (typeof measurement === "number") { return Math.sqrt(dx ** 2 + dy ** 2) > measurement; } if ("x" in measurement && "y" in measurement) { return dx > measurement.x && dy > measurement.y; } if ("x" in measurement) { return dx > measurement.x; } if ("y" in measurement) { return dy > measurement.y; } return false; } var EventName; (function(EventName2) { EventName2["Click"] = "click"; EventName2["DragStart"] = "dragstart"; EventName2["Keydown"] = "keydown"; EventName2["ContextMenu"] = "contextmenu"; EventName2["Resize"] = "resize"; EventName2["SelectionChange"] = "selectionchange"; EventName2["VisibilityChange"] = "visibilitychange"; })(EventName || (EventName = {})); function preventDefault(event) { event.preventDefault(); } function stopPropagation(event) { event.stopPropagation(); } var KeyboardCode; (function(KeyboardCode2) { KeyboardCode2["Space"] = "Space"; KeyboardCode2["Down"] = "ArrowDown"; KeyboardCode2["Right"] = "ArrowRight"; KeyboardCode2["Left"] = "ArrowLeft"; KeyboardCode2["Up"] = "ArrowUp"; KeyboardCode2["Esc"] = "Escape"; KeyboardCode2["Enter"] = "Enter"; })(KeyboardCode || (KeyboardCode = {})); var defaultKeyboardCodes = { start: [KeyboardCode.Space, KeyboardCode.Enter], cancel: [KeyboardCode.Esc], end: [KeyboardCode.Space, KeyboardCode.Enter] }; var defaultKeyboardCoordinateGetter = (event, _ref) => { let { currentCoordinates } = _ref; switch (event.code) { case KeyboardCode.Right: return { ...currentCoordinates, x: currentCoordinates.x + 25 }; case KeyboardCode.Left: return { ...currentCoordinates, x: currentCoordinates.x - 25 }; case KeyboardCode.Down: return { ...currentCoordinates, y: currentCoordinates.y + 25 }; case KeyboardCode.Up: return { ...currentCoordinates, y: currentCoordinates.y - 25 }; } return void 0; }; var KeyboardSensor = class { constructor(props2) { this.props = void 0; this.autoScrollEnabled = false; this.referenceCoordinates = void 0; this.listeners = void 0; this.windowListeners = void 0; this.props = props2; const { event: { target } } = props2; this.props = props2; this.listeners = new Listeners(getOwnerDocument(target)); this.windowListeners = new Listeners(getWindow(target)); this.handleKeyDown = this.handleKeyDown.bind(this); this.handleCancel = this.handleCancel.bind(this); this.attach(); } attach() { this.handleStart(); this.windowListeners.add(EventName.Resize, this.handleCancel); this.windowListeners.add(EventName.VisibilityChange, this.handleCancel); setTimeout(() => this.listeners.add(EventName.Keydown, this.handleKeyDown)); } handleStart() { const { activeNode, onStart } = this.props; const node = activeNode.node.current; if (node) { scrollIntoViewIfNeeded(node); } onStart(defaultCoordinates); } handleKeyDown(event) { if (isKeyboardEvent(event)) { const { active, context, options } = this.props; const { keyboardCodes = defaultKeyboardCodes, coordinateGetter = defaultKeyboardCoordinateGetter, scrollBehavior = "smooth" } = options; const { code } = event; if (keyboardCodes.end.includes(code)) { this.handleEnd(event); return; } if (keyboardCodes.cancel.includes(code)) { this.handleCancel(event); return; } const { collisionRect } = context.current; const currentCoordinates = collisionRect ? { x: collisionRect.left, y: collisionRect.top } : defaultCoordinates; if (!this.referenceCoordinates) { this.referenceCoordinates = currentCoordinates; } const newCoordinates = coordinateGetter(event, { active, context: context.current, currentCoordinates }); if (newCoordinates) { const coordinatesDelta = subtract(newCoordinates, currentCoordinates); const scrollDelta = { x: 0, y: 0 }; const { scrollableAncestors } = context.current; for (const scrollContainer of scrollableAncestors) { const direction = event.code; const { isTop, isRight, isLeft, isBottom, maxScroll, minScroll } = getScrollPosition(scrollContainer); const scrollElementRect = getScrollElementRect(scrollContainer); const clampedCoordinates = { x: Math.min(direction === KeyboardCode.Right ? scrollElementRect.right - scrollElementRect.width / 2 : scrollElementRect.right, Math.max(direction === KeyboardCode.Right ? scrollElementRect.left : scrollElementRect.left + scrollElementRect.width / 2, newCoordinates.x)), y: Math.min(direction === KeyboardCode.Down ? scrollElementRect.bottom - scrollElementRect.height / 2 : scrollElementRect.bottom, Math.max(direction === KeyboardCode.Down ? scrollElementRect.top : scrollElementRect.top + scrollElementRect.height / 2, newCoordinates.y)) }; const canScrollX = direction === KeyboardCode.Right && !isRight || direction === KeyboardCode.Left && !isLeft; const canScrollY = direction === KeyboardCode.Down && !isBottom || direction === KeyboardCode.Up && !isTop; if (canScrollX && clampedCoordinates.x !== newCoordinates.x) { const newScrollCoordinates = scrollContainer.scrollLeft + coordinatesDelta.x; const canScrollToNewCoordinates = direction === KeyboardCode.Right && newScrollCoordinates <= maxScroll.x || direction === KeyboardCode.Left && newScrollCoordinates >= minScroll.x; if (canScrollToNewCoordinates && !coordinatesDelta.y) { scrollContainer.scrollTo({ left: newScrollCoordinates, behavior: scrollBehavior }); return; } if (canScrollToNewCoordinates) { scrollDelta.x = scrollContainer.scrollLeft - newScrollCoordinates; } else { scrollDelta.x = direction === KeyboardCode.Right ? scrollContainer.scrollLeft - maxScroll.x : scrollContainer.scrollLeft - minScroll.x; } if (scrollDelta.x) { scrollContainer.scrollBy({ left: -scrollDelta.x, behavior: scrollBehavior }); } break; } else if (canScrollY && clampedCoordinates.y !== newCoordinates.y) { const newScrollCoordinates = scrollContainer.scrollTop + coordinatesDelta.y; const canScrollToNewCoordinates = direction === KeyboardCode.Down && newScrollCoordinates <= maxScroll.y || direction === KeyboardCode.Up && newScrollCoordinates >= minScroll.y; if (canScrollToNewCoordinates && !coordinatesDelta.x) { scrollContainer.scrollTo({ top: newScrollCoordinates, behavior: scrollBehavior }); return; } if (canScrollToNewCoordinates) { scrollDelta.y = scrollContainer.scrollTop - newScrollCoordinates; } else { scrollDelta.y = direction === KeyboardCode.Down ? scrollContainer.scrollTop - maxScroll.y : scrollContainer.scrollTop - minScroll.y; } if (scrollDelta.y) { scrollContainer.scrollBy({ top: -scrollDelta.y, behavior: scrollBehavior }); } break; } } this.handleMove(event, add(subtract(newCoordinates, this.referenceCoordinates), scrollDelta)); } } } handleMove(event, coordinates) { const { onMove } = this.props; event.preventDefault(); onMove(coordinates); } handleEnd(event) { const { onEnd } = this.props; event.preventDefault(); this.detach(); onEnd(); } handleCancel(event) { const { onCancel } = this.props; event.preventDefault(); this.detach(); onCancel(); } detach() { this.listeners.removeAll(); this.windowListeners.removeAll(); } }; KeyboardSensor.activators = [{ eventName: "onKeyDown", handler: (event, _ref, _ref2) => { let { keyboardCodes = defaultKeyboardCodes, onActivation } = _ref; let { active } = _ref2; const { code } = event.nativeEvent; if (keyboardCodes.start.includes(code)) { const activator = active.activatorNode.current; if (activator && event.target !== activator) { return false; } event.preventDefault(); onActivation == null ? void 0 : onActivation({ event: event.nativeEvent }); return true; } return false; } }]; function isDistanceConstraint(constraint) { return Boolean(constraint && "distance" in constraint); } function isDelayConstraint(constraint) { return Boolean(constraint && "delay" in constraint); } var AbstractPointerSensor = class { constructor(props2, events2, listenerTarget) { var _getEventCoordinates; if (listenerTarget === void 0) { listenerTarget = getEventListenerTarget(props2.event.target); } this.props = void 0; this.events = void 0; this.autoScrollEnabled = true; this.document = void 0; this.activated = false; this.initialCoordinates = void 0; this.timeoutId = null; this.listeners = void 0; this.documentListeners = void 0; this.windowListeners = void 0; this.props = props2; this.events = events2; const { event } = props2; const { target } = event; this.props = props2; this.events = events2; this.document = getOwnerDocument(target); this.documentListeners = new Listeners(this.document); this.listeners = new Listeners(listenerTarget); this.windowListeners = new Listeners(getWindow(target)); this.initialCoordinates = (_getEventCoordinates = getEventCoordinates(event)) != null ? _getEventCoordinates : defaultCoordinates; this.handleStart = this.handleStart.bind(this); this.handleMove = this.handleMove.bind(this); this.handleEnd = this.handleEnd.bind(this); this.handleCancel = this.handleCancel.bind(this); this.handleKeydown = this.handleKeydown.bind(this); this.removeTextSelection = this.removeTextSelection.bind(this); this.attach(); } attach() { const { events: events2, props: { options: { activationConstraint } } } = this; this.listeners.add(events2.move.name, this.handleMove, { passive: false }); this.listeners.add(events2.end.name, this.handleEnd); this.windowListeners.add(EventName.Resize, this.handleCancel); this.windowListeners.add(EventName.DragStart, preventDefault); this.windowListeners.add(EventName.VisibilityChange, this.handleCancel); this.windowListeners.add(EventName.ContextMenu, preventDefault); this.documentListeners.add(EventName.Keydown, this.handleKeydown); if (activationConstraint) { if (isDistanceConstraint(activationConstraint)) { return; } if (isDelayConstraint(activationConstraint)) { this.timeoutId = setTimeout(this.handleStart, activationConstraint.delay); return; } } this.handleStart(); } detach() { this.listeners.removeAll(); this.windowListeners.removeAll(); setTimeout(this.documentListeners.removeAll, 50); if (this.timeoutId !== null) { clearTimeout(this.timeoutId); this.timeoutId = null; } } handleStart() { const { initialCoordinates } = this; const { onStart } = this.props; if (initialCoordinates) { this.activated = true; this.documentListeners.add(EventName.Click, stopPropagation, { capture: true }); this.removeTextSelection(); this.documentListeners.add(EventName.SelectionChange, this.removeTextSelection); onStart(initialCoordinates); } } handleMove(event) { var _getEventCoordinates2; const { activated, initialCoordinates, props: props2 } = this; const { onMove, options: { activationConstraint } } = props2; if (!initialCoordinates) { return; } const coordinates = (_getEventCoordinates2 = getEventCoordinates(event)) != null ? _getEventCoordinates2 : defaultCoordinates; const delta = subtract(initialCoordinates, coordinates); if (!activated && activationConstraint) { if (isDelayConstraint(activationConstraint)) { if (hasExceededDistance(delta, activationConstraint.tolerance)) { return this.handleCancel(); } return; } if (isDistanceConstraint(activationConstraint)) { if (activationConstraint.tolerance != null && hasExceededDistance(delta, activationConstraint.tolerance)) { return this.handleCancel(); } if (hasExceededDistance(delta, activationConstraint.distance)) { return this.handleStart(); } return; } } if (event.cancelable) { event.preventDefault(); } onMove(coordinates); } handleEnd() { const { onEnd } = this.props; this.detach(); onEnd(); } handleCancel() { const { onCancel } = this.props; this.detach(); onCancel(); } handleKeydown(event) { if (event.code === KeyboardCode.Esc) { this.handleCancel(); } } removeTextSelection() { var _this$document$getSel; (_this$document$getSel = this.document.getSelection()) == null ? void 0 : _this$document$getSel.removeAllRanges(); } }; var events = { move: { name: "pointermove" }, end: { name: "pointerup" } }; var PointerSensor = class extends AbstractPointerSensor { constructor(props2) { const { event } = props2; const listenerTarget = getOwnerDocument(event.target); super(props2, events, listenerTarget); } }; PointerSensor.activators = [{ eventName: "onPointerDown", handler: (_ref, _ref2) => { let { nativeEvent: event } = _ref; let { onActivation } = _ref2; if (!event.isPrimary || event.button !== 0) { return false; } onActivation == null ? void 0 : onActivation({ event }); return true; } }]; var events$1 = { move: { name: "mousemove" }, end: { name: "mouseup" } }; var MouseButton; (function(MouseButton2) { MouseButton2[MouseButton2["RightClick"] = 2] = "RightClick"; })(MouseButton || (MouseButton = {})); var MouseSensor = class extends AbstractPointerSensor { constructor(props2) { super(props2, events$1, getOwnerDocument(props2.event.target)); } }; MouseSensor.activators = [{ eventName: "onMouseDown", handler: (_ref, _ref2) => { let { nativeEvent: event } = _ref; let { onActivation } = _ref2; if (event.button === MouseButton.RightClick) { return false; } onActivation == null ? void 0 : onActivation({ event }); return true; } }]; var events$2 = { move: { name: "touchmove" }, end: { name: "touchend" } }; var TouchSensor = class extends AbstractPointerSensor { constructor(props2) { super(props2, events$2); } static setup() { window.addEventListener(events$2.move.name, noop2, { capture: false, passive: false }); return function teardown() { window.removeEventListener(events$2.move.name, noop2); }; function noop2() { } } }; TouchSensor.activators = [{ eventName: "onTouchStart", handler: (_ref, _ref2) => { let { nativeEvent: event } = _ref; let { onActivation } = _ref2; const { touches } = event; if (touches.length > 1) { return false; } onActivation == null ? void 0 : onActivation({ event }); return true; } }]; var AutoScrollActivator; (function(AutoScrollActivator2) { AutoScrollActivator2[AutoScrollActivator2["Pointer"] = 0] = "Pointer"; AutoScrollActivator2[AutoScrollActivator2["DraggableRect"] = 1] = "DraggableRect"; })(AutoScrollActivator || (AutoScrollActivator = {})); var TraversalOrder; (function(TraversalOrder2) { TraversalOrder2[TraversalOrder2["TreeOrder"] = 0] = "TreeOrder"; TraversalOrder2[TraversalOrder2["ReversedTreeOrder"] = 1] = "ReversedTreeOrder"; })(TraversalOrder || (TraversalOrder = {})); function useAutoScroller(_ref) { let { acceleration, activator = AutoScrollActivator.Pointer, canScroll, draggingRect, enabled, interval = 5, order = TraversalOrder.TreeOrder, pointerCoordinates, scrollableAncestors, scrollableAncestorRects, delta, threshold } = _ref; const scrollIntent = useScrollIntent({ delta, disabled: !enabled }); const [setAutoScrollInterval, clearAutoScrollInterval] = useInterval(); const scrollSpeed = _2({ x: 0, y: 0 }); const scrollDirection = _2({ x: 0, y: 0 }); const rect = F(() => { switch (activator) { case AutoScrollActivator.Pointer: return pointerCoordinates ? { top: pointerCoordinates.y, bottom: pointerCoordinates.y, left: pointerCoordinates.x, right: pointerCoordinates.x } : null; case AutoScrollActivator.DraggableRect: return draggingRect; } }, [activator, draggingRect, pointerCoordinates]); const scrollContainerRef = _2(null); const autoScroll = T2(() => { const scrollContainer = scrollContainerRef.current; if (!scrollContainer) { return; } const scrollLeft = scrollSpeed.current.x * scrollDirection.current.x; const scrollTop = scrollSpeed.current.y * scrollDirection.current.y; scrollContainer.scrollBy(scrollLeft, scrollTop); }, []); const sortedScrollableAncestors = F(() => order === TraversalOrder.TreeOrder ? [...scrollableAncestors].reverse() : scrollableAncestors, [order, scrollableAncestors]); h2( () => { if (!enabled || !scrollableAncestors.length || !rect) { clearAutoScrollInterval(); return; } for (const scrollContainer of sortedScrollableAncestors) { if ((canScroll == null ? void 0 : canScroll(scrollContainer)) === false) { continue; } const index = scrollableAncestors.indexOf(scrollContainer); const scrollContainerRect = scrollableAncestorRects[index]; if (!scrollContainerRect) { continue; } const { direction, speed } = getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, rect, acceleration, threshold); for (const axis of ["x", "y"]) { if (!scrollIntent[axis][direction[axis]]) { speed[axis] = 0; direction[axis] = 0; } } if (speed.x > 0 || speed.y > 0) { clearAutoScrollInterval(); scrollContainerRef.current = scrollContainer; setAutoScrollInterval(autoScroll, interval); scrollSpeed.current = speed; scrollDirection.current = direction; return; } } scrollSpeed.current = { x: 0, y: 0 }; scrollDirection.current = { x: 0, y: 0 }; clearAutoScrollInterval(); }, [ acceleration, autoScroll, canScroll, clearAutoScrollInterval, enabled, interval, JSON.stringify(rect), JSON.stringify(scrollIntent), setAutoScrollInterval, scrollableAncestors, sortedScrollableAncestors, scrollableAncestorRects, JSON.stringify(threshold) ] ); } var defaultScrollIntent = { x: { [Direction2.Backward]: false, [Direction2.Forward]: false }, y: { [Direction2.Backward]: false, [Direction2.Forward]: false } }; function useScrollIntent(_ref2) { let { delta, disabled } = _ref2; const previousDelta = usePrevious(delta); return useLazyMemo((previousIntent) => { if (disabled || !previousDelta || !previousIntent) { return defaultScrollIntent; } const direction = { x: Math.sign(delta.x - previousDelta.x), y: Math.sign(delta.y - previousDelta.y) }; return { x: { [Direction2.Backward]: previousIntent.x[Direction2.Backward] || direction.x === -1, [Direction2.Forward]: previousIntent.x[Direction2.Forward] || direction.x === 1 }, y: { [Direction2.Backward]: previousIntent.y[Direction2.Backward] || direction.y === -1, [Direction2.Forward]: previousIntent.y[Direction2.Forward] || direction.y === 1 } }; }, [disabled, delta, previousDelta]); } function useCachedNode(draggableNodes, id2) { const draggableNode = id2 !== null ? draggableNodes.get(id2) : void 0; const node = draggableNode ? draggableNode.node.current : null; return useLazyMemo((cachedNode) => { var _ref; if (id2 === null) { return null; } return (_ref = node != null ? node : cachedNode) != null ? _ref : null; }, [node, id2]); } function useCombineActivators(sensors, getSyntheticHandler) { return F(() => sensors.reduce((accumulator, sensor) => { const { sensor: Sensor } = sensor; const sensorActivators = Sensor.activators.map((activator) => ({ eventName: activator.eventName, handler: getSyntheticHandler(activator.handler, sensor) })); return [...accumulator, ...sensorActivators]; }, []), [sensors, getSyntheticHandler]); } var MeasuringStrategy; (function(MeasuringStrategy2) { MeasuringStrategy2[MeasuringStrategy2["Always"] = 0] = "Always"; MeasuringStrategy2[MeasuringStrategy2["BeforeDragging"] = 1] = "BeforeDragging"; MeasuringStrategy2[MeasuringStrategy2["WhileDragging"] = 2] = "WhileDragging"; })(MeasuringStrategy || (MeasuringStrategy = {})); var MeasuringFrequency; (function(MeasuringFrequency2) { MeasuringFrequency2["Optimized"] = "optimized"; })(MeasuringFrequency || (MeasuringFrequency = {})); var defaultValue = /* @__PURE__ */ new Map(); function useDroppableMeasuring(containers, _ref) { let { dragging, dependencies, config } = _ref; const [containerIdsScheduledForMeasurement, setContainerIdsScheduledForMeasurement] = p2(null); const measuringScheduled = containerIdsScheduledForMeasurement != null; const { frequency, measure, strategy } = config; const containersRef = _2(containers); const disabled = isDisabled(); const disabledRef = useLatestValue(disabled); const measureDroppableContainers = T2(function(ids2) { if (ids2 === void 0) { ids2 = []; } if (disabledRef.current) { return; } setContainerIdsScheduledForMeasurement((value) => value ? value.concat(ids2) : ids2); }, [disabledRef]); const timeoutId = _2(null); const droppableRects = useLazyMemo((previousValue) => { if (disabled && !dragging) { return defaultValue; } const ids2 = containerIdsScheduledForMeasurement; if (!previousValue || previousValue === defaultValue || containersRef.current !== containers || ids2 != null) { const map = /* @__PURE__ */ new Map(); for (let container of containers) { if (!container) { continue; } if (ids2 && ids2.length > 0 && !ids2.includes(container.id) && container.rect.current) { map.set(container.id, container.rect.current); continue; } const node = container.node.current; const rect = node ? new Rect(measure(node), node) : null; container.rect.current = rect; if (rect) { map.set(container.id, rect); } } return map; } return previousValue; }, [containers, containerIdsScheduledForMeasurement, dragging, disabled, measure]); h2(() => { containersRef.current = containers; }, [containers]); h2( () => { if (disabled) { return; } requestAnimationFrame(() => measureDroppableContainers()); }, [dragging, disabled] ); h2(() => { if (measuringScheduled) { setContainerIdsScheduledForMeasurement(null); } }, [measuringScheduled]); h2( () => { if (disabled || typeof frequency !== "number" || timeoutId.current !== null) { return; } timeoutId.current = setTimeout(() => { measureDroppableContainers(); timeoutId.current = null; }, frequency); }, [frequency, disabled, measureDroppableContainers, ...dependencies] ); return { droppableRects, measureDroppableContainers, measuringScheduled }; function isDisabled() { switch (strategy) { case MeasuringStrategy.Always: return false; case MeasuringStrategy.BeforeDragging: return dragging; default: return !dragging; } } } function useInitialValue(value, computeFn) { return useLazyMemo((previousValue) => { if (!value) { return null; } if (previousValue) { return previousValue; } return typeof computeFn === "function" ? computeFn(value) : value; }, [computeFn, value]); } function useInitialRect(node, measure) { return useInitialValue(node, measure); } function useMutationObserver(_ref) { let { callback, disabled } = _ref; const handleMutations = useEvent(callback); const mutationObserver = F(() => { if (disabled || typeof window === "undefined" || typeof window.MutationObserver === "undefined") { return void 0; } const { MutationObserver } = window; return new MutationObserver(handleMutations); }, [handleMutations, disabled]); h2(() => { return () => mutationObserver == null ? void 0 : mutationObserver.disconnect(); }, [mutationObserver]); return mutationObserver; } function useResizeObserver(_ref) { let { callback, disabled } = _ref; const handleResize = useEvent(callback); const resizeObserver = F( () => { if (disabled || typeof window === "undefined" || typeof window.ResizeObserver === "undefined") { return void 0; } const { ResizeObserver } = window; return new ResizeObserver(handleResize); }, [disabled] ); h2(() => { return () => resizeObserver == null ? void 0 : resizeObserver.disconnect(); }, [resizeObserver]); return resizeObserver; } function defaultMeasure(element) { return new Rect(getClientRect(element), element); } function useRect(element, measure, fallbackRect) { if (measure === void 0) { measure = defaultMeasure; } const [rect, measureRect] = y2(reducer2, null); const mutationObserver = useMutationObserver({ callback(records) { if (!element) { return; } for (const record of records) { const { type, target } = record; if (type === "childList" && target instanceof HTMLElement && target.contains(element)) { measureRect(); break; } } } }); const resizeObserver = useResizeObserver({ callback: measureRect }); useIsomorphicLayoutEffect(() => { measureRect(); if (element) { resizeObserver == null ? void 0 : resizeObserver.observe(element); mutationObserver == null ? void 0 : mutationObserver.observe(document.body, { childList: true, subtree: true }); } else { resizeObserver == null ? void 0 : resizeObserver.disconnect(); mutationObserver == null ? void 0 : mutationObserver.disconnect(); } }, [element]); return rect; function reducer2(currentRect) { if (!element) { return null; } if (element.isConnected === false) { var _ref; return (_ref = currentRect != null ? currentRect : fallbackRect) != null ? _ref : null; } const newRect = measure(element); if (JSON.stringify(currentRect) === JSON.stringify(newRect)) { return currentRect; } return newRect; } } function useRectDelta(rect) { const initialRect = useInitialValue(rect); return getRectDelta(rect, initialRect); } var defaultValue$1 = []; function useScrollableAncestors(node) { const previousNode = _2(node); const ancestors = useLazyMemo((previousValue) => { if (!node) { return defaultValue$1; } if (previousValue && previousValue !== defaultValue$1 && node && previousNode.current && node.parentNode === previousNode.current.parentNode) { return previousValue; } return getScrollableAncestors(node); }, [node]); h2(() => { previousNode.current = node; }, [node]); return ancestors; } function useScrollOffsets(elements) { const [scrollCoordinates, setScrollCoordinates] = p2(null); const prevElements = _2(elements); const handleScroll = T2((event) => { const scrollingElement = getScrollableElement(event.target); if (!scrollingElement) { return; } setScrollCoordinates((scrollCoordinates2) => { if (!scrollCoordinates2) { return null; } scrollCoordinates2.set(scrollingElement, getScrollCoordinates(scrollingElement)); return new Map(scrollCoordinates2); }); }, []); h2(() => { const previousElements = prevElements.current; if (elements !== previousElements) { cleanup(previousElements); const entries = elements.map((element) => { const scrollableElement = getScrollableElement(element); if (scrollableElement) { scrollableElement.addEventListener("scroll", handleScroll, { passive: true }); return [scrollableElement, getScrollCoordinates(scrollableElement)]; } return null; }).filter((entry) => entry != null); setScrollCoordinates(entries.length ? new Map(entries) : null); prevElements.current = elements; } return () => { cleanup(elements); cleanup(previousElements); }; function cleanup(elements2) { elements2.forEach((element) => { const scrollableElement = getScrollableElement(element); scrollableElement == null ? void 0 : scrollableElement.removeEventListener("scroll", handleScroll); }); } }, [handleScroll, elements]); return F(() => { if (elements.length) { return scrollCoordinates ? Array.from(scrollCoordinates.values()).reduce((acc, coordinates) => add(acc, coordinates), defaultCoordinates) : getScrollOffsets(elements); } return defaultCoordinates; }, [elements, scrollCoordinates]); } function useScrollOffsetsDelta(scrollOffsets, dependencies) { if (dependencies === void 0) { dependencies = []; } const initialScrollOffsets = _2(null); h2( () => { initialScrollOffsets.current = null; }, dependencies ); h2(() => { const hasScrollOffsets = scrollOffsets !== defaultCoordinates; if (hasScrollOffsets && !initialScrollOffsets.current) { initialScrollOffsets.current = scrollOffsets; } if (!hasScrollOffsets && initialScrollOffsets.current) { initialScrollOffsets.current = null; } }, [scrollOffsets]); return initialScrollOffsets.current ? subtract(scrollOffsets, initialScrollOffsets.current) : defaultCoordinates; } function useSensorSetup(sensors) { h2( () => { if (!canUseDOM) { return; } const teardownFns = sensors.map((_ref) => { let { sensor } = _ref; return sensor.setup == null ? void 0 : sensor.setup(); }); return () => { for (const teardown of teardownFns) { teardown == null ? void 0 : teardown(); } }; }, sensors.map((_ref2) => { let { sensor } = _ref2; return sensor; }) ); } function useSyntheticListeners(listeners, id2) { return F(() => { return listeners.reduce((acc, _ref) => { let { eventName, handler } = _ref; acc[eventName] = (event) => { handler(event, id2); }; return acc; }, {}); }, [listeners, id2]); } function useWindowRect(element) { return F(() => element ? getWindowClientRect(element) : null, [element]); } var defaultValue$2 = []; function useRects(elements, measure) { if (measure === void 0) { measure = getClientRect; } const [firstElement] = elements; const windowRect = useWindowRect(firstElement ? getWindow(firstElement) : null); const [rects, measureRects] = y2(reducer2, defaultValue$2); const resizeObserver = useResizeObserver({ callback: measureRects }); if (elements.length > 0 && rects === defaultValue$2) { measureRects(); } useIsomorphicLayoutEffect(() => { if (elements.length) { elements.forEach((element) => resizeObserver == null ? void 0 : resizeObserver.observe(element)); } else { resizeObserver == null ? void 0 : resizeObserver.disconnect(); measureRects(); } }, [elements]); return rects; function reducer2() { if (!elements.length) { return defaultValue$2; } return elements.map((element) => isDocumentScrollingElement(element) ? windowRect : new Rect(measure(element), element)); } } function getMeasurableNode(node) { if (!node) { return null; } if (node.children.length > 1) { return node; } const firstChild = node.children[0]; return isHTMLElement(firstChild) ? firstChild : node; } function useDragOverlayMeasuring(_ref) { let { measure } = _ref; const [rect, setRect] = p2(null); const handleResize = T2((entries) => { for (const { target } of entries) { if (isHTMLElement(target)) { setRect((rect2) => { const newRect = measure(target); return rect2 ? { ...rect2, width: newRect.width, height: newRect.height } : newRect; }); break; } } }, [measure]); const resizeObserver = useResizeObserver({ callback: handleResize }); const handleNodeChange = T2((element) => { const node = getMeasurableNode(element); resizeObserver == null ? void 0 : resizeObserver.disconnect(); if (node) { resizeObserver == null ? void 0 : resizeObserver.observe(node); } setRect(node ? measure(node) : null); }, [measure, resizeObserver]); const [nodeRef, setRef] = useNodeRef(handleNodeChange); return F(() => ({ nodeRef, rect, setRef }), [rect, nodeRef, setRef]); } var defaultSensors = [{ sensor: PointerSensor, options: {} }, { sensor: KeyboardSensor, options: {} }]; var defaultData = { current: {} }; var defaultMeasuringConfiguration = { draggable: { measure: getTransformAgnosticClientRect }, droppable: { measure: getTransformAgnosticClientRect, strategy: MeasuringStrategy.WhileDragging, frequency: MeasuringFrequency.Optimized }, dragOverlay: { measure: getClientRect } }; var DroppableContainersMap = class extends Map { get(id2) { var _super$get; return id2 != null ? (_super$get = super.get(id2)) != null ? _super$get : void 0 : void 0; } toArray() { return Array.from(this.values()); } getEnabled() { return this.toArray().filter((_ref) => { let { disabled } = _ref; return !disabled; }); } getNodeFor(id2) { var _this$get$node$curren, _this$get; return (_this$get$node$curren = (_this$get = this.get(id2)) == null ? void 0 : _this$get.node.current) != null ? _this$get$node$curren : void 0; } }; var defaultPublicContext = { activatorEvent: null, active: null, activeNode: null, activeNodeRect: null, collisions: null, containerNodeRect: null, draggableNodes: /* @__PURE__ */ new Map(), droppableRects: /* @__PURE__ */ new Map(), droppableContainers: /* @__PURE__ */ new DroppableContainersMap(), over: null, dragOverlay: { nodeRef: { current: null }, rect: null, setRef: noop }, scrollableAncestors: [], scrollableAncestorRects: [], measuringConfiguration: defaultMeasuringConfiguration, measureDroppableContainers: noop, windowRect: null, measuringScheduled: false }; var defaultInternalContext = { activatorEvent: null, activators: [], active: null, activeNodeRect: null, ariaDescribedById: { draggable: "" }, dispatch: noop, draggableNodes: /* @__PURE__ */ new Map(), over: null, measureDroppableContainers: noop }; var InternalContext = /* @__PURE__ */ B(defaultInternalContext); var PublicContext = /* @__PURE__ */ B(defaultPublicContext); function getInitialState() { return { draggable: { active: null, initialCoordinates: { x: 0, y: 0 }, nodes: /* @__PURE__ */ new Map(), translate: { x: 0, y: 0 } }, droppable: { containers: new DroppableContainersMap() } }; } function reducer(state, action) { switch (action.type) { case Action.DragStart: return { ...state, draggable: { ...state.draggable, initialCoordinates: action.initialCoordinates, active: action.active } }; case Action.DragMove: if (!state.draggable.active) { return state; } return { ...state, draggable: { ...state.draggable, translate: { x: action.coordinates.x - state.draggable.initialCoordinates.x, y: action.coordinates.y - state.draggable.initialCoordinates.y } } }; case Action.DragEnd: case Action.DragCancel: return { ...state, draggable: { ...state.draggable, active: null, initialCoordinates: { x: 0, y: 0 }, translate: { x: 0, y: 0 } } }; case Action.RegisterDroppable: { const { element } = action; const { id: id2 } = element; const containers = new DroppableContainersMap(state.droppable.containers); containers.set(id2, element); return { ...state, droppable: { ...state.droppable, containers } }; } case Action.SetDroppableDisabled: { const { id: id2, key: key2, disabled } = action; const element = state.droppable.containers.get(id2); if (!element || key2 !== element.key) { return state; } const containers = new DroppableContainersMap(state.droppable.containers); containers.set(id2, { ...element, disabled }); return { ...state, droppable: { ...state.droppable, containers } }; } case Action.UnregisterDroppable: { const { id: id2, key: key2 } = action; const element = state.droppable.containers.get(id2); if (!element || key2 !== element.key) { return state; } const containers = new DroppableContainersMap(state.droppable.containers); containers.delete(id2); return { ...state, droppable: { ...state.droppable, containers } }; } default: { return state; } } } function RestoreFocus(_ref) { let { disabled } = _ref; const { active, activatorEvent, draggableNodes } = q2(InternalContext); const previousActivatorEvent = usePrevious(activatorEvent); const previousActiveId = usePrevious(active == null ? void 0 : active.id); h2(() => { if (disabled) { return; } if (!activatorEvent && previousActivatorEvent && previousActiveId != null) { if (!isKeyboardEvent(previousActivatorEvent)) { return; } if (document.activeElement === previousActivatorEvent.target) { return; } const draggableNode = draggableNodes.get(previousActiveId); if (!draggableNode) { return; } const { activatorNode, node } = draggableNode; if (!activatorNode.current && !node.current) { return; } requestAnimationFrame(() => { for (const element of [activatorNode.current, node.current]) { if (!element) { continue; } const focusableNode = findFirstFocusableNode(element); if (focusableNode) { focusableNode.focus(); break; } } }); } }, [activatorEvent, disabled, draggableNodes, previousActiveId, previousActivatorEvent]); return null; } function applyModifiers(modifiers, _ref) { let { transform, ...args } = _ref; return modifiers != null && modifiers.length ? modifiers.reduce((accumulator, modifier) => { return modifier({ transform: accumulator, ...args }); }, transform) : transform; } function useMeasuringConfiguration(config) { return F( () => ({ draggable: { ...defaultMeasuringConfiguration.draggable, ...config == null ? void 0 : config.draggable }, droppable: { ...defaultMeasuringConfiguration.droppable, ...config == null ? void 0 : config.droppable }, dragOverlay: { ...defaultMeasuringConfiguration.dragOverlay, ...config == null ? void 0 : config.dragOverlay } }), [config == null ? void 0 : config.draggable, config == null ? void 0 : config.droppable, config == null ? void 0 : config.dragOverlay] ); } function useLayoutShiftScrollCompensation(_ref) { let { activeNode, measure, initialRect, config = true } = _ref; const initialized = _2(false); const { x: x5, y: y5 } = typeof config === "boolean" ? { x: config, y: config } : config; useIsomorphicLayoutEffect(() => { const disabled = !x5 && !y5; if (disabled || !activeNode) { initialized.current = false; return; } if (initialized.current || !initialRect) { return; } const node = activeNode == null ? void 0 : activeNode.node.current; if (!node || node.isConnected === false) { return; } const rect = measure(node); const rectDelta = getRectDelta(rect, initialRect); if (!x5) { rectDelta.x = 0; } if (!y5) { rectDelta.y = 0; } initialized.current = true; if (Math.abs(rectDelta.x) > 0 || Math.abs(rectDelta.y) > 0) { const firstScrollableAncestor = getFirstScrollableAncestor(node); if (firstScrollableAncestor) { firstScrollableAncestor.scrollBy({ top: rectDelta.y, left: rectDelta.x }); } } }, [activeNode, x5, y5, initialRect, measure]); } var ActiveDraggableContext = /* @__PURE__ */ B({ ...defaultCoordinates, scaleX: 1, scaleY: 1 }); var Status; (function(Status2) { Status2[Status2["Uninitialized"] = 0] = "Uninitialized"; Status2[Status2["Initializing"] = 1] = "Initializing"; Status2[Status2["Initialized"] = 2] = "Initialized"; })(Status || (Status = {})); var DndContext = /* @__PURE__ */ R(function DndContext2(_ref) { var _sensorContext$curren, _dragOverlay$nodeRef$, _dragOverlay$rect, _over$rect; let { id: id2, accessibility, autoScroll = true, children, sensors = defaultSensors, collisionDetection = rectIntersection, measuring, modifiers, ...props2 } = _ref; const store = y2(reducer, void 0, getInitialState); const [state, dispatch] = store; const [dispatchMonitorEvent, registerMonitorListener] = useDndMonitorProvider(); const [status, setStatus] = p2(Status.Uninitialized); const isInitialized = status === Status.Initialized; const { draggable: { active: activeId, nodes: draggableNodes, translate }, droppable: { containers: droppableContainers } } = state; const node = activeId ? draggableNodes.get(activeId) : null; const activeRects = _2({ initial: null, translated: null }); const active = F(() => { var _node$data; return activeId != null ? { id: activeId, data: (_node$data = node == null ? void 0 : node.data) != null ? _node$data : defaultData, rect: activeRects } : null; }, [activeId, node]); const activeRef = _2(null); const [activeSensor, setActiveSensor] = p2(null); const [activatorEvent, setActivatorEvent] = p2(null); const latestProps = useLatestValue(props2, Object.values(props2)); const draggableDescribedById = useUniqueId("DndDescribedBy", id2); const enabledDroppableContainers = F(() => droppableContainers.getEnabled(), [droppableContainers]); const measuringConfiguration = useMeasuringConfiguration(measuring); const { droppableRects, measureDroppableContainers, measuringScheduled } = useDroppableMeasuring(enabledDroppableContainers, { dragging: isInitialized, dependencies: [translate.x, translate.y], config: measuringConfiguration.droppable }); const activeNode = useCachedNode(draggableNodes, activeId); const activationCoordinates = F(() => activatorEvent ? getEventCoordinates(activatorEvent) : null, [activatorEvent]); const autoScrollOptions = getAutoScrollerOptions(); const initialActiveNodeRect = useInitialRect(activeNode, measuringConfiguration.draggable.measure); useLayoutShiftScrollCompensation({ activeNode: activeId ? draggableNodes.get(activeId) : null, config: autoScrollOptions.layoutShiftCompensation, initialRect: initialActiveNodeRect, measure: measuringConfiguration.draggable.measure }); const activeNodeRect = useRect(activeNode, measuringConfiguration.draggable.measure, initialActiveNodeRect); const containerNodeRect = useRect(activeNode ? activeNode.parentElement : null); const sensorContext = _2({ activatorEvent: null, active: null, activeNode, collisionRect: null, collisions: null, droppableRects, draggableNodes, draggingNode: null, draggingNodeRect: null, droppableContainers, over: null, scrollableAncestors: [], scrollAdjustedTranslate: null }); const overNode = droppableContainers.getNodeFor((_sensorContext$curren = sensorContext.current.over) == null ? void 0 : _sensorContext$curren.id); const dragOverlay = useDragOverlayMeasuring({ measure: measuringConfiguration.dragOverlay.measure }); const draggingNode = (_dragOverlay$nodeRef$ = dragOverlay.nodeRef.current) != null ? _dragOverlay$nodeRef$ : activeNode; const draggingNodeRect = isInitialized ? (_dragOverlay$rect = dragOverlay.rect) != null ? _dragOverlay$rect : activeNodeRect : null; const usesDragOverlay = Boolean(dragOverlay.nodeRef.current && dragOverlay.rect); const nodeRectDelta = useRectDelta(usesDragOverlay ? null : activeNodeRect); const windowRect = useWindowRect(draggingNode ? getWindow(draggingNode) : null); const scrollableAncestors = useScrollableAncestors(isInitialized ? overNode != null ? overNode : activeNode : null); const scrollableAncestorRects = useRects(scrollableAncestors); const modifiedTranslate = applyModifiers(modifiers, { transform: { x: translate.x - nodeRectDelta.x, y: translate.y - nodeRectDelta.y, scaleX: 1, scaleY: 1 }, activatorEvent, active, activeNodeRect, containerNodeRect, draggingNodeRect, over: sensorContext.current.over, overlayNodeRect: dragOverlay.rect, scrollableAncestors, scrollableAncestorRects, windowRect }); const pointerCoordinates = activationCoordinates ? add(activationCoordinates, translate) : null; const scrollOffsets = useScrollOffsets(scrollableAncestors); const scrollAdjustment = useScrollOffsetsDelta(scrollOffsets); const activeNodeScrollDelta = useScrollOffsetsDelta(scrollOffsets, [activeNodeRect]); const scrollAdjustedTranslate = add(modifiedTranslate, scrollAdjustment); const collisionRect = draggingNodeRect ? getAdjustedRect(draggingNodeRect, modifiedTranslate) : null; const collisions = active && collisionRect ? collisionDetection({ active, collisionRect, droppableRects, droppableContainers: enabledDroppableContainers, pointerCoordinates }) : null; const overId = getFirstCollision(collisions, "id"); const [over, setOver] = p2(null); const appliedTranslate = usesDragOverlay ? modifiedTranslate : add(modifiedTranslate, activeNodeScrollDelta); const transform = adjustScale(appliedTranslate, (_over$rect = over == null ? void 0 : over.rect) != null ? _over$rect : null, activeNodeRect); const instantiateSensor = T2( (event, _ref2) => { let { sensor: Sensor, options } = _ref2; if (activeRef.current == null) { return; } const activeNode2 = draggableNodes.get(activeRef.current); if (!activeNode2) { return; } const activatorEvent2 = event.nativeEvent; const sensorInstance = new Sensor({ active: activeRef.current, activeNode: activeNode2, event: activatorEvent2, options, context: sensorContext, onStart(initialCoordinates) { const id3 = activeRef.current; if (id3 == null) { return; } const draggableNode = draggableNodes.get(id3); if (!draggableNode) { return; } const { onDragStart } = latestProps.current; const event2 = { active: { id: id3, data: draggableNode.data, rect: activeRects } }; sn(() => { onDragStart == null ? void 0 : onDragStart(event2); setStatus(Status.Initializing); dispatch({ type: Action.DragStart, initialCoordinates, active: id3 }); dispatchMonitorEvent({ type: "onDragStart", event: event2 }); }); }, onMove(coordinates) { dispatch({ type: Action.DragMove, coordinates }); }, onEnd: createHandler(Action.DragEnd), onCancel: createHandler(Action.DragCancel) }); sn(() => { setActiveSensor(sensorInstance); setActivatorEvent(event.nativeEvent); }); function createHandler(type) { return async function handler() { const { active: active2, collisions: collisions2, over: over2, scrollAdjustedTranslate: scrollAdjustedTranslate2 } = sensorContext.current; let event2 = null; if (active2 && scrollAdjustedTranslate2) { const { cancelDrop } = latestProps.current; event2 = { activatorEvent: activatorEvent2, active: active2, collisions: collisions2, delta: scrollAdjustedTranslate2, over: over2 }; if (type === Action.DragEnd && typeof cancelDrop === "function") { const shouldCancel = await Promise.resolve(cancelDrop(event2)); if (shouldCancel) { type = Action.DragCancel; } } } activeRef.current = null; sn(() => { dispatch({ type }); setStatus(Status.Uninitialized); setOver(null); setActiveSensor(null); setActivatorEvent(null); const eventName = type === Action.DragEnd ? "onDragEnd" : "onDragCancel"; if (event2) { const handler2 = latestProps.current[eventName]; handler2 == null ? void 0 : handler2(event2); dispatchMonitorEvent({ type: eventName, event: event2 }); } }); }; } }, [draggableNodes] ); const bindActivatorToSensorInstantiator = T2((handler, sensor) => { return (event, active2) => { const nativeEvent = event.nativeEvent; const activeDraggableNode = draggableNodes.get(active2); if (activeRef.current !== null || !activeDraggableNode || nativeEvent.dndKit || nativeEvent.defaultPrevented) { return; } const activationContext = { active: activeDraggableNode }; const shouldActivate = handler(event, sensor.options, activationContext); if (shouldActivate === true) { nativeEvent.dndKit = { capturedBy: sensor.sensor }; activeRef.current = active2; instantiateSensor(event, sensor); } }; }, [draggableNodes, instantiateSensor]); const activators = useCombineActivators(sensors, bindActivatorToSensorInstantiator); useSensorSetup(sensors); useIsomorphicLayoutEffect(() => { if (activeNodeRect && status === Status.Initializing) { setStatus(Status.Initialized); } }, [activeNodeRect, status]); h2( () => { const { onDragMove } = latestProps.current; const { active: active2, activatorEvent: activatorEvent2, collisions: collisions2, over: over2 } = sensorContext.current; if (!active2 || !activatorEvent2) { return; } const event = { active: active2, activatorEvent: activatorEvent2, collisions: collisions2, delta: { x: scrollAdjustedTranslate.x, y: scrollAdjustedTranslate.y }, over: over2 }; sn(() => { onDragMove == null ? void 0 : onDragMove(event); dispatchMonitorEvent({ type: "onDragMove", event }); }); }, [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y] ); h2( () => { const { active: active2, activatorEvent: activatorEvent2, collisions: collisions2, droppableContainers: droppableContainers2, scrollAdjustedTranslate: scrollAdjustedTranslate2 } = sensorContext.current; if (!active2 || activeRef.current == null || !activatorEvent2 || !scrollAdjustedTranslate2) { return; } const { onDragOver } = latestProps.current; const overContainer = droppableContainers2.get(overId); const over2 = overContainer && overContainer.rect.current ? { id: overContainer.id, rect: overContainer.rect.current, data: overContainer.data, disabled: overContainer.disabled } : null; const event = { active: active2, activatorEvent: activatorEvent2, collisions: collisions2, delta: { x: scrollAdjustedTranslate2.x, y: scrollAdjustedTranslate2.y }, over: over2 }; sn(() => { setOver(over2); onDragOver == null ? void 0 : onDragOver(event); dispatchMonitorEvent({ type: "onDragOver", event }); }); }, [overId] ); useIsomorphicLayoutEffect(() => { sensorContext.current = { activatorEvent, active, activeNode, collisionRect, collisions, droppableRects, draggableNodes, draggingNode, draggingNodeRect, droppableContainers, over, scrollableAncestors, scrollAdjustedTranslate }; activeRects.current = { initial: draggingNodeRect, translated: collisionRect }; }, [active, activeNode, collisions, collisionRect, draggableNodes, draggingNode, draggingNodeRect, droppableRects, droppableContainers, over, scrollableAncestors, scrollAdjustedTranslate]); useAutoScroller({ ...autoScrollOptions, delta: translate, draggingRect: collisionRect, pointerCoordinates, scrollableAncestors, scrollableAncestorRects }); const publicContext = F(() => { const context = { active, activeNode, activeNodeRect, activatorEvent, collisions, containerNodeRect, dragOverlay, draggableNodes, droppableContainers, droppableRects, over, measureDroppableContainers, scrollableAncestors, scrollableAncestorRects, measuringConfiguration, measuringScheduled, windowRect }; return context; }, [active, activeNode, activeNodeRect, activatorEvent, collisions, containerNodeRect, dragOverlay, draggableNodes, droppableContainers, droppableRects, over, measureDroppableContainers, scrollableAncestors, scrollableAncestorRects, measuringConfiguration, measuringScheduled, windowRect]); const internalContext = F(() => { const context = { activatorEvent, activators, active, activeNodeRect, ariaDescribedById: { draggable: draggableDescribedById }, dispatch, draggableNodes, over, measureDroppableContainers }; return context; }, [activatorEvent, activators, active, activeNodeRect, dispatch, draggableDescribedById, draggableNodes, over, measureDroppableContainers]); return bn.createElement(DndMonitorContext.Provider, { value: registerMonitorListener }, bn.createElement(InternalContext.Provider, { value: internalContext }, bn.createElement(PublicContext.Provider, { value: publicContext }, bn.createElement(ActiveDraggableContext.Provider, { value: transform }, children)), bn.createElement(RestoreFocus, { disabled: (accessibility == null ? void 0 : accessibility.restoreFocus) === false })), bn.createElement(Accessibility, { ...accessibility, hiddenTextDescribedById: draggableDescribedById })); function getAutoScrollerOptions() { const activeSensorDisablesAutoscroll = (activeSensor == null ? void 0 : activeSensor.autoScrollEnabled) === false; const autoScrollGloballyDisabled = typeof autoScroll === "object" ? autoScroll.enabled === false : autoScroll === false; const enabled = isInitialized && !activeSensorDisablesAutoscroll && !autoScrollGloballyDisabled; if (typeof autoScroll === "object") { return { ...autoScroll, enabled }; } return { enabled }; } }); var NullContext = /* @__PURE__ */ B(null); var defaultRole = "button"; var ID_PREFIX = "Droppable"; function useDraggable(_ref) { let { id: id2, data, disabled = false, attributes } = _ref; const key2 = useUniqueId(ID_PREFIX); const { activators, activatorEvent, active, activeNodeRect, ariaDescribedById, draggableNodes, over } = q2(InternalContext); const { role = defaultRole, roleDescription = "draggable", tabIndex = 0 } = attributes != null ? attributes : {}; const isDragging = (active == null ? void 0 : active.id) === id2; const transform = q2(isDragging ? ActiveDraggableContext : NullContext); const [node, setNodeRef] = useNodeRef(); const [activatorNode, setActivatorNodeRef] = useNodeRef(); const listeners = useSyntheticListeners(activators, id2); const dataRef = useLatestValue(data); useIsomorphicLayoutEffect( () => { draggableNodes.set(id2, { id: id2, key: key2, node, activatorNode, data: dataRef }); return () => { const node2 = draggableNodes.get(id2); if (node2 && node2.key === key2) { draggableNodes.delete(id2); } }; }, [draggableNodes, id2] ); const memoizedAttributes = F(() => ({ role, tabIndex, "aria-disabled": disabled, "aria-pressed": isDragging && role === defaultRole ? true : void 0, "aria-roledescription": roleDescription, "aria-describedby": ariaDescribedById.draggable }), [disabled, role, tabIndex, isDragging, roleDescription, ariaDescribedById.draggable]); return { active, activatorEvent, activeNodeRect, attributes: memoizedAttributes, isDragging, listeners: disabled ? void 0 : listeners, node, over, setNodeRef, setActivatorNodeRef, transform }; } function useDndContext() { return q2(PublicContext); } var ID_PREFIX$1 = "Droppable"; var defaultResizeObserverConfig = { timeout: 25 }; function useDroppable(_ref) { let { data, disabled = false, id: id2, resizeObserverConfig } = _ref; const key2 = useUniqueId(ID_PREFIX$1); const { active, dispatch, over, measureDroppableContainers } = q2(InternalContext); const previous = _2({ disabled }); const resizeObserverConnected = _2(false); const rect = _2(null); const callbackId = _2(null); const { disabled: resizeObserverDisabled, updateMeasurementsFor, timeout: resizeObserverTimeout } = { ...defaultResizeObserverConfig, ...resizeObserverConfig }; const ids2 = useLatestValue(updateMeasurementsFor != null ? updateMeasurementsFor : id2); const handleResize = T2( () => { if (!resizeObserverConnected.current) { resizeObserverConnected.current = true; return; } if (callbackId.current != null) { clearTimeout(callbackId.current); } callbackId.current = setTimeout(() => { measureDroppableContainers(Array.isArray(ids2.current) ? ids2.current : [ids2.current]); callbackId.current = null; }, resizeObserverTimeout); }, [resizeObserverTimeout] ); const resizeObserver = useResizeObserver({ callback: handleResize, disabled: resizeObserverDisabled || !active }); const handleNodeChange = T2((newElement, previousElement) => { if (!resizeObserver) { return; } if (previousElement) { resizeObserver.unobserve(previousElement); resizeObserverConnected.current = false; } if (newElement) { resizeObserver.observe(newElement); } }, [resizeObserver]); const [nodeRef, setNodeRef] = useNodeRef(handleNodeChange); const dataRef = useLatestValue(data); h2(() => { if (!resizeObserver || !nodeRef.current) { return; } resizeObserver.disconnect(); resizeObserverConnected.current = false; resizeObserver.observe(nodeRef.current); }, [nodeRef, resizeObserver]); useIsomorphicLayoutEffect( () => { dispatch({ type: Action.RegisterDroppable, element: { id: id2, key: key2, disabled, node: nodeRef, rect, data: dataRef } }); return () => dispatch({ type: Action.UnregisterDroppable, key: key2, id: id2 }); }, [id2] ); h2(() => { if (disabled !== previous.current.disabled) { dispatch({ type: Action.SetDroppableDisabled, id: id2, key: key2, disabled }); previous.current.disabled = disabled; } }, [id2, key2, disabled, dispatch]); return { active, rect, isOver: (over == null ? void 0 : over.id) === id2, node: nodeRef, over, setNodeRef }; } function AnimationManager(_ref) { let { animation, children } = _ref; const [clonedChildren, setClonedChildren] = p2(null); const [element, setElement] = p2(null); const previousChildren = usePrevious(children); if (!children && !clonedChildren && previousChildren) { setClonedChildren(previousChildren); } useIsomorphicLayoutEffect(() => { if (!element) { return; } const key2 = clonedChildren == null ? void 0 : clonedChildren.key; const id2 = clonedChildren == null ? void 0 : clonedChildren.props.id; if (key2 == null || id2 == null) { setClonedChildren(null); return; } Promise.resolve(animation(id2, element)).then(() => { setClonedChildren(null); }); }, [animation, clonedChildren, element]); return bn.createElement(bn.Fragment, null, children, clonedChildren ? cn(clonedChildren, { ref: setElement }) : null); } var defaultTransform = { x: 0, y: 0, scaleX: 1, scaleY: 1 }; function NullifiedContextProvider(_ref) { let { children } = _ref; return bn.createElement(InternalContext.Provider, { value: defaultInternalContext }, bn.createElement(ActiveDraggableContext.Provider, { value: defaultTransform }, children)); } var baseStyles = { position: "fixed", touchAction: "none" }; var defaultTransition = (activatorEvent) => { const isKeyboardActivator = isKeyboardEvent(activatorEvent); return isKeyboardActivator ? "transform 250ms ease" : void 0; }; var PositionedOverlay = /* @__PURE__ */ k3((_ref, ref) => { let { as, activatorEvent, adjustScale: adjustScale2, children, className, rect, style, transform, transition = defaultTransition } = _ref; if (!rect) { return null; } const scaleAdjustedTransform = adjustScale2 ? transform : { ...transform, scaleX: 1, scaleY: 1 }; const styles = { ...baseStyles, width: rect.width, height: rect.height, top: rect.top, left: rect.left, transform: CSS.Transform.toString(scaleAdjustedTransform), transformOrigin: adjustScale2 && activatorEvent ? getRelativeTransformOrigin(activatorEvent, rect) : void 0, transition: typeof transition === "function" ? transition(activatorEvent) : transition, ...style }; return bn.createElement(as, { className, style: styles, ref }, children); }); var defaultDropAnimationSideEffects = (options) => (_ref) => { let { active, dragOverlay } = _ref; const originalStyles = {}; const { styles, className } = options; if (styles != null && styles.active) { for (const [key2, value] of Object.entries(styles.active)) { if (value === void 0) { continue; } originalStyles[key2] = active.node.style.getPropertyValue(key2); active.node.style.setProperty(key2, value); } } if (styles != null && styles.dragOverlay) { for (const [key2, value] of Object.entries(styles.dragOverlay)) { if (value === void 0) { continue; } dragOverlay.node.style.setProperty(key2, value); } } if (className != null && className.active) { active.node.classList.add(className.active); } if (className != null && className.dragOverlay) { dragOverlay.node.classList.add(className.dragOverlay); } return function cleanup() { for (const [key2, value] of Object.entries(originalStyles)) { active.node.style.setProperty(key2, value); } if (className != null && className.active) { active.node.classList.remove(className.active); } }; }; var defaultKeyframeResolver = (_ref2) => { let { transform: { initial, final } } = _ref2; return [{ transform: CSS.Transform.toString(initial) }, { transform: CSS.Transform.toString(final) }]; }; var defaultDropAnimationConfiguration = { duration: 250, easing: "ease", keyframes: defaultKeyframeResolver, sideEffects: /* @__PURE__ */ defaultDropAnimationSideEffects({ styles: { active: { opacity: "0" } } }) }; function useDropAnimation(_ref3) { let { config, draggableNodes, droppableContainers, measuringConfiguration } = _ref3; return useEvent((id2, node) => { if (config === null) { return; } const activeDraggable = draggableNodes.get(id2); if (!activeDraggable) { return; } const activeNode = activeDraggable.node.current; if (!activeNode) { return; } const measurableNode = getMeasurableNode(node); if (!measurableNode) { return; } const { transform } = getWindow(node).getComputedStyle(node); const parsedTransform = parseTransform(transform); if (!parsedTransform) { return; } const animation = typeof config === "function" ? config : createDefaultDropAnimation(config); scrollIntoViewIfNeeded(activeNode, measuringConfiguration.draggable.measure); return animation({ active: { id: id2, data: activeDraggable.data, node: activeNode, rect: measuringConfiguration.draggable.measure(activeNode) }, draggableNodes, dragOverlay: { node, rect: measuringConfiguration.dragOverlay.measure(measurableNode) }, droppableContainers, measuringConfiguration, transform: parsedTransform }); }); } function createDefaultDropAnimation(options) { const { duration, easing, sideEffects, keyframes } = { ...defaultDropAnimationConfiguration, ...options }; return (_ref4) => { let { active, dragOverlay, transform, ...rest } = _ref4; if (!duration) { return; } const delta = { x: dragOverlay.rect.left - active.rect.left, y: dragOverlay.rect.top - active.rect.top }; const scale = { scaleX: transform.scaleX !== 1 ? active.rect.width * transform.scaleX / dragOverlay.rect.width : 1, scaleY: transform.scaleY !== 1 ? active.rect.height * transform.scaleY / dragOverlay.rect.height : 1 }; const finalTransform = { x: transform.x - delta.x, y: transform.y - delta.y, ...scale }; const animationKeyframes = keyframes({ ...rest, active, dragOverlay, transform: { initial: transform, final: finalTransform } }); const [firstKeyframe] = animationKeyframes; const lastKeyframe = animationKeyframes[animationKeyframes.length - 1]; if (JSON.stringify(firstKeyframe) === JSON.stringify(lastKeyframe)) { return; } const cleanup = sideEffects == null ? void 0 : sideEffects({ active, dragOverlay, ...rest }); const animation = dragOverlay.node.animate(animationKeyframes, { duration, easing, fill: "forwards" }); return new Promise((resolve) => { animation.onfinish = () => { cleanup == null ? void 0 : cleanup(); resolve(); }; }); }; } var key = 0; function useKey(id2) { return F(() => { if (id2 == null) { return; } key++; return key; }, [id2]); } var DragOverlay = /* @__PURE__ */ bn.memo((_ref) => { let { adjustScale: adjustScale2 = false, children, dropAnimation: dropAnimationConfig, style, transition, modifiers, wrapperElement = "div", className, zIndex = 999 } = _ref; const { activatorEvent, active, activeNodeRect, containerNodeRect, draggableNodes, droppableContainers, dragOverlay, over, measuringConfiguration, scrollableAncestors, scrollableAncestorRects, windowRect } = useDndContext(); const transform = q2(ActiveDraggableContext); const key2 = useKey(active == null ? void 0 : active.id); const modifiedTransform = applyModifiers(modifiers, { activatorEvent, active, activeNodeRect, containerNodeRect, draggingNodeRect: dragOverlay.rect, over, overlayNodeRect: dragOverlay.rect, scrollableAncestors, scrollableAncestorRects, transform, windowRect }); const initialRect = useInitialValue(activeNodeRect); const dropAnimation = useDropAnimation({ config: dropAnimationConfig, draggableNodes, droppableContainers, measuringConfiguration }); const ref = initialRect ? dragOverlay.setRef : void 0; return bn.createElement(NullifiedContextProvider, null, bn.createElement(AnimationManager, { animation: dropAnimation }, active && key2 ? bn.createElement(PositionedOverlay, { key: key2, id: active.id, ref, as: wrapperElement, activatorEvent, adjustScale: adjustScale2, className, transition, rect: initialRect, style: { zIndex, ...style }, transform: modifiedTransform }, children) : null)); }); // node_modules/@dnd-kit/sortable/dist/sortable.esm.js function arrayMove(array, from, to) { const newArray = array.slice(); newArray.splice(to < 0 ? newArray.length + to : to, 0, newArray.splice(from, 1)[0]); return newArray; } function getSortedRects(items, rects) { return items.reduce((accumulator, id2, index) => { const rect = rects.get(id2); if (rect) { accumulator[index] = rect; } return accumulator; }, Array(items.length)); } function isValidIndex(index) { return index !== null && index >= 0; } function itemsEqual(a5, b4) { if (a5 === b4) { return true; } if (a5.length !== b4.length) { return false; } for (let i4 = 0; i4 < a5.length; i4++) { if (a5[i4] !== b4[i4]) { return false; } } return true; } function normalizeDisabled(disabled) { if (typeof disabled === "boolean") { return { draggable: disabled, droppable: disabled }; } return disabled; } var defaultScale = { scaleX: 1, scaleY: 1 }; var horizontalListSortingStrategy = (_ref) => { var _rects$activeIndex; let { rects, activeNodeRect: fallbackActiveRect, activeIndex, overIndex, index } = _ref; const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect; if (!activeNodeRect) { return null; } const itemGap = getItemGap(rects, index, activeIndex); if (index === activeIndex) { const newIndexRect = rects[overIndex]; if (!newIndexRect) { return null; } return { x: activeIndex < overIndex ? newIndexRect.left + newIndexRect.width - (activeNodeRect.left + activeNodeRect.width) : newIndexRect.left - activeNodeRect.left, y: 0, ...defaultScale }; } if (index > activeIndex && index <= overIndex) { return { x: -activeNodeRect.width - itemGap, y: 0, ...defaultScale }; } if (index < activeIndex && index >= overIndex) { return { x: activeNodeRect.width + itemGap, y: 0, ...defaultScale }; } return { x: 0, y: 0, ...defaultScale }; }; function getItemGap(rects, index, activeIndex) { const currentRect = rects[index]; const previousRect = rects[index - 1]; const nextRect = rects[index + 1]; if (!currentRect || !previousRect && !nextRect) { return 0; } if (activeIndex < index) { return previousRect ? currentRect.left - (previousRect.left + previousRect.width) : nextRect.left - (currentRect.left + currentRect.width); } return nextRect ? nextRect.left - (currentRect.left + currentRect.width) : currentRect.left - (previousRect.left + previousRect.width); } var rectSortingStrategy = (_ref) => { let { rects, activeIndex, overIndex, index } = _ref; const newRects = arrayMove(rects, overIndex, activeIndex); const oldRect = rects[index]; const newRect = newRects[index]; if (!newRect || !oldRect) { return null; } return { x: newRect.left - oldRect.left, y: newRect.top - oldRect.top, scaleX: newRect.width / oldRect.width, scaleY: newRect.height / oldRect.height }; }; var defaultScale$1 = { scaleX: 1, scaleY: 1 }; var verticalListSortingStrategy = (_ref) => { var _rects$activeIndex; let { activeIndex, activeNodeRect: fallbackActiveRect, index, rects, overIndex } = _ref; const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect; if (!activeNodeRect) { return null; } if (index === activeIndex) { const overIndexRect = rects[overIndex]; if (!overIndexRect) { return null; } return { x: 0, y: activeIndex < overIndex ? overIndexRect.top + overIndexRect.height - (activeNodeRect.top + activeNodeRect.height) : overIndexRect.top - activeNodeRect.top, ...defaultScale$1 }; } const itemGap = getItemGap$1(rects, index, activeIndex); if (index > activeIndex && index <= overIndex) { return { x: 0, y: -activeNodeRect.height - itemGap, ...defaultScale$1 }; } if (index < activeIndex && index >= overIndex) { return { x: 0, y: activeNodeRect.height + itemGap, ...defaultScale$1 }; } return { x: 0, y: 0, ...defaultScale$1 }; }; function getItemGap$1(clientRects, index, activeIndex) { const currentRect = clientRects[index]; const previousRect = clientRects[index - 1]; const nextRect = clientRects[index + 1]; if (!currentRect) { return 0; } if (activeIndex < index) { return previousRect ? currentRect.top - (previousRect.top + previousRect.height) : nextRect ? nextRect.top - (currentRect.top + currentRect.height) : 0; } return nextRect ? nextRect.top - (currentRect.top + currentRect.height) : previousRect ? currentRect.top - (previousRect.top + previousRect.height) : 0; } var ID_PREFIX2 = "Sortable"; var Context = /* @__PURE__ */ bn.createContext({ activeIndex: -1, containerId: ID_PREFIX2, disableTransforms: false, items: [], overIndex: -1, useDragOverlay: false, sortedRects: [], strategy: rectSortingStrategy, disabled: { draggable: false, droppable: false } }); function SortableContext(_ref) { let { children, id: id2, items: userDefinedItems, strategy = rectSortingStrategy, disabled: disabledProp = false } = _ref; const { active, dragOverlay, droppableRects, over, measureDroppableContainers, measuringScheduled } = useDndContext(); const containerId = useUniqueId(ID_PREFIX2, id2); const useDragOverlay = Boolean(dragOverlay.rect !== null); const items = F(() => userDefinedItems.map((item) => typeof item === "object" && "id" in item ? item.id : item), [userDefinedItems]); const isDragging = active != null; const activeIndex = active ? items.indexOf(active.id) : -1; const overIndex = over ? items.indexOf(over.id) : -1; const previousItemsRef = _2(items); const itemsHaveChanged = !itemsEqual(items, previousItemsRef.current); const disableTransforms = overIndex !== -1 && activeIndex === -1 || itemsHaveChanged; const disabled = normalizeDisabled(disabledProp); useIsomorphicLayoutEffect(() => { if (itemsHaveChanged && isDragging && !measuringScheduled) { measureDroppableContainers(items); } }, [itemsHaveChanged, items, isDragging, measureDroppableContainers, measuringScheduled]); h2(() => { previousItemsRef.current = items; }, [items]); const contextValue = F( () => ({ activeIndex, containerId, disabled, disableTransforms, items, overIndex, useDragOverlay, sortedRects: getSortedRects(items, droppableRects), strategy }), [activeIndex, containerId, disabled.draggable, disabled.droppable, disableTransforms, items, overIndex, droppableRects, useDragOverlay, strategy] ); return bn.createElement(Context.Provider, { value: contextValue }, children); } var defaultNewIndexGetter = (_ref) => { let { id: id2, items, activeIndex, overIndex } = _ref; return arrayMove(items, activeIndex, overIndex).indexOf(id2); }; var defaultAnimateLayoutChanges = (_ref2) => { let { containerId, isSorting, wasDragging, index, items, newIndex, previousItems, previousContainerId, transition } = _ref2; if (!transition || !wasDragging) { return false; } if (previousItems !== items && index === newIndex) { return false; } if (isSorting) { return true; } return newIndex !== index && containerId === previousContainerId; }; var defaultTransition2 = { duration: 200, easing: "ease" }; var transitionProperty = "transform"; var disabledTransition = /* @__PURE__ */ CSS.Transition.toString({ property: transitionProperty, duration: 0, easing: "linear" }); var defaultAttributes = { roleDescription: "sortable" }; function useDerivedTransform(_ref) { let { disabled, index, node, rect } = _ref; const [derivedTransform, setDerivedtransform] = p2(null); const previousIndex = _2(index); useIsomorphicLayoutEffect(() => { if (!disabled && index !== previousIndex.current && node.current) { const initial = rect.current; if (initial) { const current = getClientRect(node.current, { ignoreTransform: true }); const delta = { x: initial.left - current.left, y: initial.top - current.top, scaleX: initial.width / current.width, scaleY: initial.height / current.height }; if (delta.x || delta.y) { setDerivedtransform(delta); } } } if (index !== previousIndex.current) { previousIndex.current = index; } }, [disabled, index, node, rect]); h2(() => { if (derivedTransform) { requestAnimationFrame(() => { setDerivedtransform(null); }); } }, [derivedTransform]); return derivedTransform; } function useSortable(_ref) { let { animateLayoutChanges: animateLayoutChanges3 = defaultAnimateLayoutChanges, attributes: userDefinedAttributes, disabled: localDisabled, data: customData, getNewIndex = defaultNewIndexGetter, id: id2, strategy: localStrategy, resizeObserverConfig, transition = defaultTransition2 } = _ref; const { items, containerId, activeIndex, disabled: globalDisabled, disableTransforms, sortedRects, overIndex, useDragOverlay, strategy: globalStrategy } = q2(Context); const disabled = normalizeLocalDisabled(localDisabled, globalDisabled); const index = items.indexOf(id2); const data = F(() => ({ sortable: { containerId, index, items }, ...customData }), [containerId, customData, index, items]); const itemsAfterCurrentSortable = F(() => items.slice(items.indexOf(id2)), [items, id2]); const { rect, node, isOver, setNodeRef: setDroppableNodeRef } = useDroppable({ id: id2, data, disabled: disabled.droppable, resizeObserverConfig: { updateMeasurementsFor: itemsAfterCurrentSortable, ...resizeObserverConfig } }); const { active, activatorEvent, activeNodeRect, attributes, setNodeRef: setDraggableNodeRef, listeners, isDragging, over, setActivatorNodeRef, transform } = useDraggable({ id: id2, data, attributes: { ...defaultAttributes, ...userDefinedAttributes }, disabled: disabled.draggable }); const setNodeRef = useCombinedRefs(setDroppableNodeRef, setDraggableNodeRef); const isSorting = Boolean(active); const displaceItem = isSorting && !disableTransforms && isValidIndex(activeIndex) && isValidIndex(overIndex); const shouldDisplaceDragSource = !useDragOverlay && isDragging; const dragSourceDisplacement = shouldDisplaceDragSource && displaceItem ? transform : null; const strategy = localStrategy != null ? localStrategy : globalStrategy; const finalTransform = displaceItem ? dragSourceDisplacement != null ? dragSourceDisplacement : strategy({ rects: sortedRects, activeNodeRect, activeIndex, overIndex, index }) : null; const newIndex = isValidIndex(activeIndex) && isValidIndex(overIndex) ? getNewIndex({ id: id2, items, activeIndex, overIndex }) : index; const activeId = active == null ? void 0 : active.id; const previous = _2({ activeId, items, newIndex, containerId }); const itemsHaveChanged = items !== previous.current.items; const shouldAnimateLayoutChanges = animateLayoutChanges3({ active, containerId, isDragging, isSorting, id: id2, index, items, newIndex: previous.current.newIndex, previousItems: previous.current.items, previousContainerId: previous.current.containerId, transition, wasDragging: previous.current.activeId != null }); const derivedTransform = useDerivedTransform({ disabled: !shouldAnimateLayoutChanges, index, node, rect }); h2(() => { if (isSorting && previous.current.newIndex !== newIndex) { previous.current.newIndex = newIndex; } if (containerId !== previous.current.containerId) { previous.current.containerId = containerId; } if (items !== previous.current.items) { previous.current.items = items; } }, [isSorting, newIndex, containerId, items]); h2(() => { if (activeId === previous.current.activeId) { return; } if (activeId && !previous.current.activeId) { previous.current.activeId = activeId; return; } const timeoutId = setTimeout(() => { previous.current.activeId = activeId; }, 50); return () => clearTimeout(timeoutId); }, [activeId]); return { active, activeIndex, attributes, data, rect, index, newIndex, items, isOver, isSorting, isDragging, listeners, node, overIndex, over, setNodeRef, setActivatorNodeRef, setDroppableNodeRef, setDraggableNodeRef, transform: derivedTransform != null ? derivedTransform : finalTransform, transition: getTransition() }; function getTransition() { if (derivedTransform || itemsHaveChanged && previous.current.newIndex === index) { return disabledTransition; } if (shouldDisplaceDragSource && !isKeyboardEvent(activatorEvent) || !transition) { return void 0; } if (isSorting || shouldAnimateLayoutChanges) { return CSS.Transition.toString({ ...transition, property: transitionProperty }); } return void 0; } } function normalizeLocalDisabled(localDisabled, globalDisabled) { var _localDisabled$dragga, _localDisabled$droppa; if (typeof localDisabled === "boolean") { return { draggable: localDisabled, droppable: false }; } return { draggable: (_localDisabled$dragga = localDisabled == null ? void 0 : localDisabled.draggable) != null ? _localDisabled$dragga : globalDisabled.draggable, droppable: (_localDisabled$droppa = localDisabled == null ? void 0 : localDisabled.droppable) != null ? _localDisabled$droppa : globalDisabled.droppable }; } function hasSortableData(entry) { if (!entry) { return false; } const data = entry.data.current; if (data && "sortable" in data && typeof data.sortable === "object" && "containerId" in data.sortable && "items" in data.sortable && "index" in data.sortable) { return true; } return false; } var directions = [KeyboardCode.Down, KeyboardCode.Right, KeyboardCode.Up, KeyboardCode.Left]; var sortableKeyboardCoordinates = (event, _ref) => { let { context: { active, collisionRect, droppableRects, droppableContainers, over, scrollableAncestors } } = _ref; if (directions.includes(event.code)) { event.preventDefault(); if (!active || !collisionRect) { return; } const filteredContainers = []; droppableContainers.getEnabled().forEach((entry) => { if (!entry || entry != null && entry.disabled) { return; } const rect = droppableRects.get(entry.id); if (!rect) { return; } switch (event.code) { case KeyboardCode.Down: if (collisionRect.top < rect.top) { filteredContainers.push(entry); } break; case KeyboardCode.Up: if (collisionRect.top > rect.top) { filteredContainers.push(entry); } break; case KeyboardCode.Left: if (collisionRect.left > rect.left) { filteredContainers.push(entry); } break; case KeyboardCode.Right: if (collisionRect.left < rect.left) { filteredContainers.push(entry); } break; } }); const collisions = closestCorners({ active, collisionRect, droppableRects, droppableContainers: filteredContainers, pointerCoordinates: null }); let closestId = getFirstCollision(collisions, "id"); if (closestId === (over == null ? void 0 : over.id) && collisions.length > 1) { closestId = collisions[1].id; } if (closestId != null) { const activeDroppable = droppableContainers.get(active.id); const newDroppable = droppableContainers.get(closestId); const newRect = newDroppable ? droppableRects.get(newDroppable.id) : null; const newNode = newDroppable == null ? void 0 : newDroppable.node.current; if (newNode && newRect && activeDroppable && newDroppable) { const newScrollAncestors = getScrollableAncestors(newNode); const hasDifferentScrollAncestors = newScrollAncestors.some((element, index) => scrollableAncestors[index] !== element); const hasSameContainer = isSameContainer(activeDroppable, newDroppable); const isAfterActive = isAfter(activeDroppable, newDroppable); const offset = hasDifferentScrollAncestors || !hasSameContainer ? { x: 0, y: 0 } : { x: isAfterActive ? collisionRect.width - newRect.width : 0, y: isAfterActive ? collisionRect.height - newRect.height : 0 }; const rectCoordinates = { x: newRect.left, y: newRect.top }; const newCoordinates = offset.x && offset.y ? rectCoordinates : subtract(rectCoordinates, offset); return newCoordinates; } } } return void 0; }; function isSameContainer(a5, b4) { if (!hasSortableData(a5) || !hasSortableData(b4)) { return false; } return a5.data.current.sortable.containerId === b4.data.current.sortable.containerId; } function isAfter(a5, b4) { if (!hasSortableData(a5) || !hasSortableData(b4)) { return false; } if (!isSameContainer(a5, b4)) { return false; } return a5.data.current.sortable.index < b4.data.current.sortable.index; } // src/components/ContextView/CardsView/CardsView.tsx var import_classnames3 = __toESM(require_classnames()); // src/utils/ui/selection.ts var selectNextIndex = (currIndex, array) => { if (!currIndex && array.length > 0) return array[0]; const pos = array.indexOf(currIndex); if (pos < array.length - 1) return array[pos + 1]; return currIndex; }; var selectPrevIndex = (currIndex, array) => { const pos = array.indexOf(currIndex); if (pos > 0) return array[pos - 1]; return array[0]; }; var selectRange = (currSel, newSel, array) => { const lastIndex = array.findIndex((f4) => f4 == currSel); const newIndex = array.findIndex((f4) => f4 == newSel); if (lastIndex < newIndex) { return array.filter((f4, i4) => i4 > lastIndex && i4 <= newIndex); } return array.filter((f4, i4) => i4 < lastIndex && i4 >= newIndex); }; // src/components/ui/menus/selectMenu/concerns/matchers.js function escapeForRegExp(string) { return string.replace(/[-\\^$*+?.()|[\]{}]/g, "\\$&"); } function matchAny(string) { return new RegExp(escapeForRegExp(string), "gi"); } function matchExact(string) { return new RegExp(`^${escapeForRegExp(string)}$`, "i"); } // src/components/ContextView/MDBContext.tsx var import_obsidian6 = require("obsidian"); // src/schemas/mdb.ts var fieldTypes = [ { type: "unknown", label: "", restricted: true }, { type: "preview", label: i18n_default.properties.preview.label, restricted: true }, { type: "text", label: i18n_default.properties.text.label }, { type: "number", label: i18n_default.properties.number.label }, { type: "boolean", label: i18n_default.properties.boolean.label }, { type: "date", label: i18n_default.properties.date.label }, { type: "option", label: i18n_default.properties.option.label, multi: true, multiType: "option-multi" }, { type: "file", label: i18n_default.properties.file.label, restricted: true }, { type: "fileprop", label: i18n_default.properties.fileProperty.label }, { type: "link", label: i18n_default.properties.link.label }, { type: "context", label: i18n_default.properties.context.label }, { type: "tag", label: i18n_default.properties.tag.label }, { type: "image", label: i18n_default.properties.image.label, multi: true, multiType: "image-multi" } ]; var defaultFileDBSchema = { id: "files", name: "Files", type: "db", primary: "true" }; var defaultFileListSchema = { id: "filesView", name: "Files", type: "list", def: "files" }; var defaultFileTableSchema = { id: "filesView", name: "Files", type: "table", def: "files" }; var defaultFolderSchema = { uniques: ["id"], cols: ["id", "name", "type", "def", "predicate", "primary"], rows: [defaultFileDBSchema, defaultFileListSchema] }; var defaultTagSchema = { uniques: ["id"], cols: ["id", "name", "type", "def", "predicate", "primary"], rows: [defaultFileDBSchema, defaultFileTableSchema] }; var fieldSchema = { uniques: ["name,schemaId"], cols: [ "name", "schemaId", "type", "value", "attrs", "hidden", "unique", "primary" ] }; var defaultFolderFields = { ...fieldSchema, rows: [ { name: "_id", schemaId: "files", type: "id", unique: "true", hidden: "true" }, { name: "_source", schemaId: "files", type: "source", hidden: "true" }, { name: i18n_default.properties.preview.label, schemaId: "files", type: "preview" }, { name: "File", schemaId: "files", type: "file", primary: "true" }, { name: i18n_default.properties.fileProperty.createdTime, schemaId: "files", type: "fileprop", value: "ctime" } ] }; var defaultTableFields = [ { name: i18n_default.properties.defaultField, schemaId: "", type: "text" } ]; var defaultTagFields = { ...fieldSchema, rows: [ { name: "_id", schemaId: "files", type: "id", unique: "true", hidden: "true" }, { name: "_source", schemaId: "files", type: "source", hidden: "true" }, { name: "_sourceId", schemaId: "files", type: "sourceid", hidden: "true" }, { name: "File", schemaId: "files", type: "file", primary: "true" } ] }; var defaultFolderMDBTable = { schema: defaultFileDBSchema, cols: defaultFolderFields.rows, rows: [] }; var defaultTagMDBTable = { schema: defaultFileDBSchema, cols: defaultTagFields.rows, rows: [] }; var fieldsToTable = (fields, schemas) => { return fields.filter((s5) => schemas.find((g4) => g4.id == s5.schemaId && g4.type == "db")).reduce((p3, c4) => { return { ...p3, ...p3[c4.schemaId] ? { [c4.schemaId]: { uniques: c4.unique == "true" ? [...p3[c4.schemaId].uniques, c4.name] : p3[c4.schemaId].uniques, cols: [...p3[c4.schemaId].cols, c4.name], rows: [] } } : { [c4.schemaId]: { uniques: c4.unique == "true" ? [c4.name] : [], cols: [c4.name], rows: [] } } }; }, {}); }; var defaultFolderTables = { m_schema: defaultFolderSchema, m_fields: defaultFolderFields, ...fieldsToTable( defaultFolderFields.rows, defaultFolderSchema.rows ) }; var defaultTagTables = { m_schema: defaultTagSchema, m_fields: defaultTagFields, ...fieldsToTable( defaultTagFields.rows, defaultTagSchema.rows ) }; // node_modules/date-fns/esm/_lib/toInteger/index.js function toInteger(dirtyNumber) { if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) { return NaN; } var number = Number(dirtyNumber); if (isNaN(number)) { return number; } return number < 0 ? Math.ceil(number) : Math.floor(number); } // node_modules/date-fns/esm/_lib/requiredArgs/index.js function requiredArgs(required, args) { if (args.length < required) { throw new TypeError(required + " argument" + (required > 1 ? "s" : "") + " required, but only " + args.length + " present"); } } // node_modules/date-fns/esm/toDate/index.js function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof5(obj2) { return typeof obj2; }; } else { _typeof = function _typeof5(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof(obj); } function toDate(argument) { requiredArgs(1, arguments); var argStr = Object.prototype.toString.call(argument); if (argument instanceof Date || _typeof(argument) === "object" && argStr === "[object Date]") { return new Date(argument.getTime()); } else if (typeof argument === "number" || argStr === "[object Number]") { return new Date(argument); } else { if ((typeof argument === "string" || argStr === "[object String]") && typeof console !== "undefined") { console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments"); console.warn(new Error().stack); } return new Date(NaN); } } // node_modules/date-fns/esm/addDays/index.js function addDays(dirtyDate, dirtyAmount) { requiredArgs(2, arguments); var date = toDate(dirtyDate); var amount = toInteger(dirtyAmount); if (isNaN(amount)) { return new Date(NaN); } if (!amount) { return date; } date.setDate(date.getDate() + amount); return date; } // node_modules/date-fns/esm/addMonths/index.js function addMonths(dirtyDate, dirtyAmount) { requiredArgs(2, arguments); var date = toDate(dirtyDate); var amount = toInteger(dirtyAmount); if (isNaN(amount)) { return new Date(NaN); } if (!amount) { return date; } var dayOfMonth = date.getDate(); var endOfDesiredMonth = new Date(date.getTime()); endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0); var daysInMonth = endOfDesiredMonth.getDate(); if (dayOfMonth >= daysInMonth) { return endOfDesiredMonth; } else { date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth); return date; } } // node_modules/date-fns/esm/addMilliseconds/index.js function addMilliseconds(dirtyDate, dirtyAmount) { requiredArgs(2, arguments); var timestamp = toDate(dirtyDate).getTime(); var amount = toInteger(dirtyAmount); return new Date(timestamp + amount); } // node_modules/date-fns/esm/_lib/defaultOptions/index.js var defaultOptions2 = {}; function getDefaultOptions() { return defaultOptions2; } // node_modules/date-fns/esm/startOfWeek/index.js function startOfWeek(dirtyDate, options) { var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; requiredArgs(1, arguments); var defaultOptions3 = getDefaultOptions(); var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); } var date = toDate(dirtyDate); var day = date.getDay(); var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; date.setDate(date.getDate() - diff); date.setHours(0, 0, 0, 0); return date; } // node_modules/date-fns/esm/startOfISOWeek/index.js function startOfISOWeek(dirtyDate) { requiredArgs(1, arguments); return startOfWeek(dirtyDate, { weekStartsOn: 1 }); } // node_modules/date-fns/esm/getISOWeekYear/index.js function getISOWeekYear(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var year = date.getFullYear(); var fourthOfJanuaryOfNextYear = new Date(0); fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear); var fourthOfJanuaryOfThisYear = new Date(0); fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear); if (date.getTime() >= startOfNextYear.getTime()) { return year + 1; } else if (date.getTime() >= startOfThisYear.getTime()) { return year; } else { return year - 1; } } // node_modules/date-fns/esm/startOfISOWeekYear/index.js function startOfISOWeekYear(dirtyDate) { requiredArgs(1, arguments); var year = getISOWeekYear(dirtyDate); var fourthOfJanuary = new Date(0); fourthOfJanuary.setFullYear(year, 0, 4); fourthOfJanuary.setHours(0, 0, 0, 0); var date = startOfISOWeek(fourthOfJanuary); return date; } // node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js function getTimezoneOffsetInMilliseconds(date) { var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds())); utcDate.setUTCFullYear(date.getFullYear()); return date.getTime() - utcDate.getTime(); } // node_modules/date-fns/esm/startOfDay/index.js function startOfDay(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); date.setHours(0, 0, 0, 0); return date; } // node_modules/date-fns/esm/differenceInCalendarDays/index.js var MILLISECONDS_IN_DAY = 864e5; function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) { requiredArgs(2, arguments); var startOfDayLeft = startOfDay(dirtyDateLeft); var startOfDayRight = startOfDay(dirtyDateRight); var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft); var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight); return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY); } // node_modules/date-fns/esm/addWeeks/index.js function addWeeks(dirtyDate, dirtyAmount) { requiredArgs(2, arguments); var amount = toInteger(dirtyAmount); var days = amount * 7; return addDays(dirtyDate, days); } // node_modules/date-fns/esm/addYears/index.js function addYears(dirtyDate, dirtyAmount) { requiredArgs(2, arguments); var amount = toInteger(dirtyAmount); return addMonths(dirtyDate, amount * 12); } // node_modules/date-fns/esm/max/index.js function _typeof2(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof5(obj2) { return typeof obj2; }; } else { _typeof2 = function _typeof5(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof2(obj); } function max(dirtyDatesArray) { requiredArgs(1, arguments); var datesArray; if (dirtyDatesArray && typeof dirtyDatesArray.forEach === "function") { datesArray = dirtyDatesArray; } else if (_typeof2(dirtyDatesArray) === "object" && dirtyDatesArray !== null) { datesArray = Array.prototype.slice.call(dirtyDatesArray); } else { return new Date(NaN); } var result; datesArray.forEach(function(dirtyDate) { var currentDate = toDate(dirtyDate); if (result === void 0 || result < currentDate || isNaN(Number(currentDate))) { result = currentDate; } }); return result || new Date(NaN); } // node_modules/date-fns/esm/min/index.js function _typeof3(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof3 = function _typeof5(obj2) { return typeof obj2; }; } else { _typeof3 = function _typeof5(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof3(obj); } function min(dirtyDatesArray) { requiredArgs(1, arguments); var datesArray; if (dirtyDatesArray && typeof dirtyDatesArray.forEach === "function") { datesArray = dirtyDatesArray; } else if (_typeof3(dirtyDatesArray) === "object" && dirtyDatesArray !== null) { datesArray = Array.prototype.slice.call(dirtyDatesArray); } else { return new Date(NaN); } var result; datesArray.forEach(function(dirtyDate) { var currentDate = toDate(dirtyDate); if (result === void 0 || result > currentDate || isNaN(currentDate.getDate())) { result = currentDate; } }); return result || new Date(NaN); } // node_modules/date-fns/esm/compareAsc/index.js function compareAsc(dirtyDateLeft, dirtyDateRight) { requiredArgs(2, arguments); var dateLeft = toDate(dirtyDateLeft); var dateRight = toDate(dirtyDateRight); var diff = dateLeft.getTime() - dateRight.getTime(); if (diff < 0) { return -1; } else if (diff > 0) { return 1; } else { return diff; } } // node_modules/date-fns/esm/isSameDay/index.js function isSameDay(dirtyDateLeft, dirtyDateRight) { requiredArgs(2, arguments); var dateLeftStartOfDay = startOfDay(dirtyDateLeft); var dateRightStartOfDay = startOfDay(dirtyDateRight); return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime(); } // node_modules/date-fns/esm/isDate/index.js function _typeof4(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof4 = function _typeof5(obj2) { return typeof obj2; }; } else { _typeof4 = function _typeof5(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof4(obj); } function isDate(value) { requiredArgs(1, arguments); return value instanceof Date || _typeof4(value) === "object" && Object.prototype.toString.call(value) === "[object Date]"; } // node_modules/date-fns/esm/isValid/index.js function isValid(dirtyDate) { requiredArgs(1, arguments); if (!isDate(dirtyDate) && typeof dirtyDate !== "number") { return false; } var date = toDate(dirtyDate); return !isNaN(Number(date)); } // node_modules/date-fns/esm/differenceInCalendarMonths/index.js function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) { requiredArgs(2, arguments); var dateLeft = toDate(dirtyDateLeft); var dateRight = toDate(dirtyDateRight); var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear(); var monthDiff = dateLeft.getMonth() - dateRight.getMonth(); return yearDiff * 12 + monthDiff; } // node_modules/date-fns/esm/differenceInCalendarWeeks/index.js var MILLISECONDS_IN_WEEK = 6048e5; function differenceInCalendarWeeks(dirtyDateLeft, dirtyDateRight, options) { requiredArgs(2, arguments); var startOfWeekLeft = startOfWeek(dirtyDateLeft, options); var startOfWeekRight = startOfWeek(dirtyDateRight, options); var timestampLeft = startOfWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekLeft); var timestampRight = startOfWeekRight.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekRight); return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK); } // node_modules/date-fns/esm/differenceInMilliseconds/index.js function differenceInMilliseconds(dateLeft, dateRight) { requiredArgs(2, arguments); return toDate(dateLeft).getTime() - toDate(dateRight).getTime(); } // node_modules/date-fns/esm/_lib/roundingMethods/index.js var roundingMap = { ceil: Math.ceil, round: Math.round, floor: Math.floor, trunc: function trunc(value) { return value < 0 ? Math.ceil(value) : Math.floor(value); } }; var defaultRoundingMethod = "trunc"; function getRoundingMethod(method) { return method ? roundingMap[method] : roundingMap[defaultRoundingMethod]; } // node_modules/date-fns/esm/endOfDay/index.js function endOfDay(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); date.setHours(23, 59, 59, 999); return date; } // node_modules/date-fns/esm/endOfMonth/index.js function endOfMonth(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var month = date.getMonth(); date.setFullYear(date.getFullYear(), month + 1, 0); date.setHours(23, 59, 59, 999); return date; } // node_modules/date-fns/esm/isLastDayOfMonth/index.js function isLastDayOfMonth(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); return endOfDay(date).getTime() === endOfMonth(date).getTime(); } // node_modules/date-fns/esm/differenceInMonths/index.js function differenceInMonths(dirtyDateLeft, dirtyDateRight) { requiredArgs(2, arguments); var dateLeft = toDate(dirtyDateLeft); var dateRight = toDate(dirtyDateRight); var sign = compareAsc(dateLeft, dateRight); var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight)); var result; if (difference < 1) { result = 0; } else { if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) { dateLeft.setDate(30); } dateLeft.setMonth(dateLeft.getMonth() - sign * difference); var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign; if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) { isLastMonthNotFull = false; } result = sign * (difference - Number(isLastMonthNotFull)); } return result === 0 ? 0 : result; } // node_modules/date-fns/esm/differenceInSeconds/index.js function differenceInSeconds(dateLeft, dateRight, options) { requiredArgs(2, arguments); var diff = differenceInMilliseconds(dateLeft, dateRight) / 1e3; return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff); } // node_modules/date-fns/esm/startOfMonth/index.js function startOfMonth(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); date.setDate(1); date.setHours(0, 0, 0, 0); return date; } // node_modules/date-fns/esm/startOfYear/index.js function startOfYear(dirtyDate) { requiredArgs(1, arguments); var cleanDate = toDate(dirtyDate); var date = new Date(0); date.setFullYear(cleanDate.getFullYear(), 0, 1); date.setHours(0, 0, 0, 0); return date; } // node_modules/date-fns/esm/endOfWeek/index.js function endOfWeek(dirtyDate, options) { var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; requiredArgs(1, arguments); var defaultOptions3 = getDefaultOptions(); var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); } var date = toDate(dirtyDate); var day = date.getDay(); var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn); date.setDate(date.getDate() + diff); date.setHours(23, 59, 59, 999); return date; } // node_modules/date-fns/esm/endOfISOWeek/index.js function endOfISOWeek(dirtyDate) { requiredArgs(1, arguments); return endOfWeek(dirtyDate, { weekStartsOn: 1 }); } // node_modules/date-fns/esm/subMilliseconds/index.js function subMilliseconds(dirtyDate, dirtyAmount) { requiredArgs(2, arguments); var amount = toInteger(dirtyAmount); return addMilliseconds(dirtyDate, -amount); } // node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js var MILLISECONDS_IN_DAY2 = 864e5; function getUTCDayOfYear(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var timestamp = date.getTime(); date.setUTCMonth(0, 1); date.setUTCHours(0, 0, 0, 0); var startOfYearTimestamp = date.getTime(); var difference = timestamp - startOfYearTimestamp; return Math.floor(difference / MILLISECONDS_IN_DAY2) + 1; } // node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js function startOfUTCISOWeek(dirtyDate) { requiredArgs(1, arguments); var weekStartsOn = 1; var date = toDate(dirtyDate); var day = date.getUTCDay(); var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; date.setUTCDate(date.getUTCDate() - diff); date.setUTCHours(0, 0, 0, 0); return date; } // node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js function getUTCISOWeekYear(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var year = date.getUTCFullYear(); var fourthOfJanuaryOfNextYear = new Date(0); fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4); fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0); var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear); var fourthOfJanuaryOfThisYear = new Date(0); fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4); fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0); var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear); if (date.getTime() >= startOfNextYear.getTime()) { return year + 1; } else if (date.getTime() >= startOfThisYear.getTime()) { return year; } else { return year - 1; } } // node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js function startOfUTCISOWeekYear(dirtyDate) { requiredArgs(1, arguments); var year = getUTCISOWeekYear(dirtyDate); var fourthOfJanuary = new Date(0); fourthOfJanuary.setUTCFullYear(year, 0, 4); fourthOfJanuary.setUTCHours(0, 0, 0, 0); var date = startOfUTCISOWeek(fourthOfJanuary); return date; } // node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js var MILLISECONDS_IN_WEEK2 = 6048e5; function getUTCISOWeek(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); return Math.round(diff / MILLISECONDS_IN_WEEK2) + 1; } // node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js function startOfUTCWeek(dirtyDate, options) { var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; requiredArgs(1, arguments); var defaultOptions3 = getDefaultOptions(); var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); } var date = toDate(dirtyDate); var day = date.getUTCDay(); var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; date.setUTCDate(date.getUTCDate() - diff); date.setUTCHours(0, 0, 0, 0); return date; } // node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js function getUTCWeekYear(dirtyDate, options) { var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; requiredArgs(1, arguments); var date = toDate(dirtyDate); var year = date.getUTCFullYear(); var defaultOptions3 = getDefaultOptions(); var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively"); } var firstWeekOfNextYear = new Date(0); firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate); firstWeekOfNextYear.setUTCHours(0, 0, 0, 0); var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, options); var firstWeekOfThisYear = new Date(0); firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate); firstWeekOfThisYear.setUTCHours(0, 0, 0, 0); var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, options); if (date.getTime() >= startOfNextYear.getTime()) { return year + 1; } else if (date.getTime() >= startOfThisYear.getTime()) { return year; } else { return year - 1; } } // node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js function startOfUTCWeekYear(dirtyDate, options) { var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; requiredArgs(1, arguments); var defaultOptions3 = getDefaultOptions(); var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); var year = getUTCWeekYear(dirtyDate, options); var firstWeek = new Date(0); firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate); firstWeek.setUTCHours(0, 0, 0, 0); var date = startOfUTCWeek(firstWeek, options); return date; } // node_modules/date-fns/esm/_lib/getUTCWeek/index.js var MILLISECONDS_IN_WEEK3 = 6048e5; function getUTCWeek(dirtyDate, options) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); return Math.round(diff / MILLISECONDS_IN_WEEK3) + 1; } // node_modules/date-fns/esm/_lib/addLeadingZeros/index.js function addLeadingZeros(number, targetLength) { var sign = number < 0 ? "-" : ""; var output = Math.abs(number).toString(); while (output.length < targetLength) { output = "0" + output; } return sign + output; } // node_modules/date-fns/esm/_lib/format/lightFormatters/index.js var formatters = { y: function y3(date, token) { var signedYear = date.getUTCFullYear(); var year = signedYear > 0 ? signedYear : 1 - signedYear; return addLeadingZeros(token === "yy" ? year % 100 : year, token.length); }, M: function M3(date, token) { var month = date.getUTCMonth(); return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2); }, d: function d3(date, token) { return addLeadingZeros(date.getUTCDate(), token.length); }, a: function a3(date, token) { var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? "pm" : "am"; switch (token) { case "a": case "aa": return dayPeriodEnumValue.toUpperCase(); case "aaa": return dayPeriodEnumValue; case "aaaaa": return dayPeriodEnumValue[0]; case "aaaa": default: return dayPeriodEnumValue === "am" ? "a.m." : "p.m."; } }, h: function h3(date, token) { return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length); }, H: function H3(date, token) { return addLeadingZeros(date.getUTCHours(), token.length); }, m: function m3(date, token) { return addLeadingZeros(date.getUTCMinutes(), token.length); }, s: function s3(date, token) { return addLeadingZeros(date.getUTCSeconds(), token.length); }, S: function S2(date, token) { var numberOfDigits = token.length; var milliseconds = date.getUTCMilliseconds(); var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3)); return addLeadingZeros(fractionalSeconds, token.length); } }; var lightFormatters_default = formatters; // node_modules/date-fns/esm/_lib/format/formatters/index.js var dayPeriodEnum = { am: "am", pm: "pm", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" }; var formatters2 = { G: function G2(date, token, localize2) { var era = date.getUTCFullYear() > 0 ? 1 : 0; switch (token) { case "G": case "GG": case "GGG": return localize2.era(era, { width: "abbreviated" }); case "GGGGG": return localize2.era(era, { width: "narrow" }); case "GGGG": default: return localize2.era(era, { width: "wide" }); } }, y: function y4(date, token, localize2) { if (token === "yo") { var signedYear = date.getUTCFullYear(); var year = signedYear > 0 ? signedYear : 1 - signedYear; return localize2.ordinalNumber(year, { unit: "year" }); } return lightFormatters_default.y(date, token); }, Y: function Y2(date, token, localize2, options) { var signedWeekYear = getUTCWeekYear(date, options); var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; if (token === "YY") { var twoDigitYear = weekYear % 100; return addLeadingZeros(twoDigitYear, 2); } if (token === "Yo") { return localize2.ordinalNumber(weekYear, { unit: "year" }); } return addLeadingZeros(weekYear, token.length); }, R: function R2(date, token) { var isoWeekYear = getUTCISOWeekYear(date); return addLeadingZeros(isoWeekYear, token.length); }, u: function u3(date, token) { var year = date.getUTCFullYear(); return addLeadingZeros(year, token.length); }, Q: function Q2(date, token, localize2) { var quarter = Math.ceil((date.getUTCMonth() + 1) / 3); switch (token) { case "Q": return String(quarter); case "QQ": return addLeadingZeros(quarter, 2); case "Qo": return localize2.ordinalNumber(quarter, { unit: "quarter" }); case "QQQ": return localize2.quarter(quarter, { width: "abbreviated", context: "formatting" }); case "QQQQQ": return localize2.quarter(quarter, { width: "narrow", context: "formatting" }); case "QQQQ": default: return localize2.quarter(quarter, { width: "wide", context: "formatting" }); } }, q: function q4(date, token, localize2) { var quarter = Math.ceil((date.getUTCMonth() + 1) / 3); switch (token) { case "q": return String(quarter); case "qq": return addLeadingZeros(quarter, 2); case "qo": return localize2.ordinalNumber(quarter, { unit: "quarter" }); case "qqq": return localize2.quarter(quarter, { width: "abbreviated", context: "standalone" }); case "qqqqq": return localize2.quarter(quarter, { width: "narrow", context: "standalone" }); case "qqqq": default: return localize2.quarter(quarter, { width: "wide", context: "standalone" }); } }, M: function M4(date, token, localize2) { var month = date.getUTCMonth(); switch (token) { case "M": case "MM": return lightFormatters_default.M(date, token); case "Mo": return localize2.ordinalNumber(month + 1, { unit: "month" }); case "MMM": return localize2.month(month, { width: "abbreviated", context: "formatting" }); case "MMMMM": return localize2.month(month, { width: "narrow", context: "formatting" }); case "MMMM": default: return localize2.month(month, { width: "wide", context: "formatting" }); } }, L: function L3(date, token, localize2) { var month = date.getUTCMonth(); switch (token) { case "L": return String(month + 1); case "LL": return addLeadingZeros(month + 1, 2); case "Lo": return localize2.ordinalNumber(month + 1, { unit: "month" }); case "LLL": return localize2.month(month, { width: "abbreviated", context: "standalone" }); case "LLLLL": return localize2.month(month, { width: "narrow", context: "standalone" }); case "LLLL": default: return localize2.month(month, { width: "wide", context: "standalone" }); } }, w: function w4(date, token, localize2, options) { var week = getUTCWeek(date, options); if (token === "wo") { return localize2.ordinalNumber(week, { unit: "week" }); } return addLeadingZeros(week, token.length); }, I: function I3(date, token, localize2) { var isoWeek = getUTCISOWeek(date); if (token === "Io") { return localize2.ordinalNumber(isoWeek, { unit: "week" }); } return addLeadingZeros(isoWeek, token.length); }, d: function d4(date, token, localize2) { if (token === "do") { return localize2.ordinalNumber(date.getUTCDate(), { unit: "date" }); } return lightFormatters_default.d(date, token); }, D: function D2(date, token, localize2) { var dayOfYear = getUTCDayOfYear(date); if (token === "Do") { return localize2.ordinalNumber(dayOfYear, { unit: "dayOfYear" }); } return addLeadingZeros(dayOfYear, token.length); }, E: function E2(date, token, localize2) { var dayOfWeek = date.getUTCDay(); switch (token) { case "E": case "EE": case "EEE": return localize2.day(dayOfWeek, { width: "abbreviated", context: "formatting" }); case "EEEEE": return localize2.day(dayOfWeek, { width: "narrow", context: "formatting" }); case "EEEEEE": return localize2.day(dayOfWeek, { width: "short", context: "formatting" }); case "EEEE": default: return localize2.day(dayOfWeek, { width: "wide", context: "formatting" }); } }, e: function e3(date, token, localize2, options) { var dayOfWeek = date.getUTCDay(); var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; switch (token) { case "e": return String(localDayOfWeek); case "ee": return addLeadingZeros(localDayOfWeek, 2); case "eo": return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); case "eee": return localize2.day(dayOfWeek, { width: "abbreviated", context: "formatting" }); case "eeeee": return localize2.day(dayOfWeek, { width: "narrow", context: "formatting" }); case "eeeeee": return localize2.day(dayOfWeek, { width: "short", context: "formatting" }); case "eeee": default: return localize2.day(dayOfWeek, { width: "wide", context: "formatting" }); } }, c: function c3(date, token, localize2, options) { var dayOfWeek = date.getUTCDay(); var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; switch (token) { case "c": return String(localDayOfWeek); case "cc": return addLeadingZeros(localDayOfWeek, token.length); case "co": return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); case "ccc": return localize2.day(dayOfWeek, { width: "abbreviated", context: "standalone" }); case "ccccc": return localize2.day(dayOfWeek, { width: "narrow", context: "standalone" }); case "cccccc": return localize2.day(dayOfWeek, { width: "short", context: "standalone" }); case "cccc": default: return localize2.day(dayOfWeek, { width: "wide", context: "standalone" }); } }, i: function i3(date, token, localize2) { var dayOfWeek = date.getUTCDay(); var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; switch (token) { case "i": return String(isoDayOfWeek); case "ii": return addLeadingZeros(isoDayOfWeek, token.length); case "io": return localize2.ordinalNumber(isoDayOfWeek, { unit: "day" }); case "iii": return localize2.day(dayOfWeek, { width: "abbreviated", context: "formatting" }); case "iiiii": return localize2.day(dayOfWeek, { width: "narrow", context: "formatting" }); case "iiiiii": return localize2.day(dayOfWeek, { width: "short", context: "formatting" }); case "iiii": default: return localize2.day(dayOfWeek, { width: "wide", context: "formatting" }); } }, a: function a4(date, token, localize2) { var hours = date.getUTCHours(); var dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; switch (token) { case "a": case "aa": return localize2.dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting" }); case "aaa": return localize2.dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting" }).toLowerCase(); case "aaaaa": return localize2.dayPeriod(dayPeriodEnumValue, { width: "narrow", context: "formatting" }); case "aaaa": default: return localize2.dayPeriod(dayPeriodEnumValue, { width: "wide", context: "formatting" }); } }, b: function b3(date, token, localize2) { var hours = date.getUTCHours(); var dayPeriodEnumValue; if (hours === 12) { dayPeriodEnumValue = dayPeriodEnum.noon; } else if (hours === 0) { dayPeriodEnumValue = dayPeriodEnum.midnight; } else { dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; } switch (token) { case "b": case "bb": return localize2.dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting" }); case "bbb": return localize2.dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting" }).toLowerCase(); case "bbbbb": return localize2.dayPeriod(dayPeriodEnumValue, { width: "narrow", context: "formatting" }); case "bbbb": default: return localize2.dayPeriod(dayPeriodEnumValue, { width: "wide", context: "formatting" }); } }, B: function B4(date, token, localize2) { var hours = date.getUTCHours(); var dayPeriodEnumValue; if (hours >= 17) { dayPeriodEnumValue = dayPeriodEnum.evening; } else if (hours >= 12) { dayPeriodEnumValue = dayPeriodEnum.afternoon; } else if (hours >= 4) { dayPeriodEnumValue = dayPeriodEnum.morning; } else { dayPeriodEnumValue = dayPeriodEnum.night; } switch (token) { case "B": case "BB": case "BBB": return localize2.dayPeriod(dayPeriodEnumValue, { width: "abbreviated", context: "formatting" }); case "BBBBB": return localize2.dayPeriod(dayPeriodEnumValue, { width: "narrow", context: "formatting" }); case "BBBB": default: return localize2.dayPeriod(dayPeriodEnumValue, { width: "wide", context: "formatting" }); } }, h: function h4(date, token, localize2) { if (token === "ho") { var hours = date.getUTCHours() % 12; if (hours === 0) hours = 12; return localize2.ordinalNumber(hours, { unit: "hour" }); } return lightFormatters_default.h(date, token); }, H: function H4(date, token, localize2) { if (token === "Ho") { return localize2.ordinalNumber(date.getUTCHours(), { unit: "hour" }); } return lightFormatters_default.H(date, token); }, K: function K2(date, token, localize2) { var hours = date.getUTCHours() % 12; if (token === "Ko") { return localize2.ordinalNumber(hours, { unit: "hour" }); } return addLeadingZeros(hours, token.length); }, k: function k4(date, token, localize2) { var hours = date.getUTCHours(); if (hours === 0) hours = 24; if (token === "ko") { return localize2.ordinalNumber(hours, { unit: "hour" }); } return addLeadingZeros(hours, token.length); }, m: function m4(date, token, localize2) { if (token === "mo") { return localize2.ordinalNumber(date.getUTCMinutes(), { unit: "minute" }); } return lightFormatters_default.m(date, token); }, s: function s4(date, token, localize2) { if (token === "so") { return localize2.ordinalNumber(date.getUTCSeconds(), { unit: "second" }); } return lightFormatters_default.s(date, token); }, S: function S3(date, token) { return lightFormatters_default.S(date, token); }, X: function X2(date, token, _localize, options) { var originalDate = options._originalDate || date; var timezoneOffset = originalDate.getTimezoneOffset(); if (timezoneOffset === 0) { return "Z"; } switch (token) { case "X": return formatTimezoneWithOptionalMinutes(timezoneOffset); case "XXXX": case "XX": return formatTimezone(timezoneOffset); case "XXXXX": case "XXX": default: return formatTimezone(timezoneOffset, ":"); } }, x: function x4(date, token, _localize, options) { var originalDate = options._originalDate || date; var timezoneOffset = originalDate.getTimezoneOffset(); switch (token) { case "x": return formatTimezoneWithOptionalMinutes(timezoneOffset); case "xxxx": case "xx": return formatTimezone(timezoneOffset); case "xxxxx": case "xxx": default: return formatTimezone(timezoneOffset, ":"); } }, O: function O3(date, token, _localize, options) { var originalDate = options._originalDate || date; var timezoneOffset = originalDate.getTimezoneOffset(); switch (token) { case "O": case "OO": case "OOO": return "GMT" + formatTimezoneShort(timezoneOffset, ":"); case "OOOO": default: return "GMT" + formatTimezone(timezoneOffset, ":"); } }, z: function z4(date, token, _localize, options) { var originalDate = options._originalDate || date; var timezoneOffset = originalDate.getTimezoneOffset(); switch (token) { case "z": case "zz": case "zzz": return "GMT" + formatTimezoneShort(timezoneOffset, ":"); case "zzzz": default: return "GMT" + formatTimezone(timezoneOffset, ":"); } }, t: function t3(date, token, _localize, options) { var originalDate = options._originalDate || date; var timestamp = Math.floor(originalDate.getTime() / 1e3); return addLeadingZeros(timestamp, token.length); }, T: function T5(date, token, _localize, options) { var originalDate = options._originalDate || date; var timestamp = originalDate.getTime(); return addLeadingZeros(timestamp, token.length); } }; function formatTimezoneShort(offset, dirtyDelimiter) { var sign = offset > 0 ? "-" : "+"; var absOffset = Math.abs(offset); var hours = Math.floor(absOffset / 60); var minutes = absOffset % 60; if (minutes === 0) { return sign + String(hours); } var delimiter = dirtyDelimiter || ""; return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2); } function formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) { if (offset % 60 === 0) { var sign = offset > 0 ? "-" : "+"; return sign + addLeadingZeros(Math.abs(offset) / 60, 2); } return formatTimezone(offset, dirtyDelimiter); } function formatTimezone(offset, dirtyDelimiter) { var delimiter = dirtyDelimiter || ""; var sign = offset > 0 ? "-" : "+"; var absOffset = Math.abs(offset); var hours = addLeadingZeros(Math.floor(absOffset / 60), 2); var minutes = addLeadingZeros(absOffset % 60, 2); return sign + hours + delimiter + minutes; } var formatters_default = formatters2; // node_modules/date-fns/esm/_lib/format/longFormatters/index.js var dateLongFormatter = function dateLongFormatter2(pattern, formatLong2) { switch (pattern) { case "P": return formatLong2.date({ width: "short" }); case "PP": return formatLong2.date({ width: "medium" }); case "PPP": return formatLong2.date({ width: "long" }); case "PPPP": default: return formatLong2.date({ width: "full" }); } }; var timeLongFormatter = function timeLongFormatter2(pattern, formatLong2) { switch (pattern) { case "p": return formatLong2.time({ width: "short" }); case "pp": return formatLong2.time({ width: "medium" }); case "ppp": return formatLong2.time({ width: "long" }); case "pppp": default: return formatLong2.time({ width: "full" }); } }; var dateTimeLongFormatter = function dateTimeLongFormatter2(pattern, formatLong2) { var matchResult = pattern.match(/(P+)(p+)?/) || []; var datePattern = matchResult[1]; var timePattern = matchResult[2]; if (!timePattern) { return dateLongFormatter(pattern, formatLong2); } var dateTimeFormat; switch (datePattern) { case "P": dateTimeFormat = formatLong2.dateTime({ width: "short" }); break; case "PP": dateTimeFormat = formatLong2.dateTime({ width: "medium" }); break; case "PPP": dateTimeFormat = formatLong2.dateTime({ width: "long" }); break; case "PPPP": default: dateTimeFormat = formatLong2.dateTime({ width: "full" }); break; } return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2)); }; var longFormatters = { p: timeLongFormatter, P: dateTimeLongFormatter }; var longFormatters_default = longFormatters; // node_modules/date-fns/esm/_lib/protectedTokens/index.js var protectedDayOfYearTokens = ["D", "DD"]; var protectedWeekYearTokens = ["YY", "YYYY"]; function isProtectedDayOfYearToken(token) { return protectedDayOfYearTokens.indexOf(token) !== -1; } function isProtectedWeekYearToken(token) { return protectedWeekYearTokens.indexOf(token) !== -1; } function throwProtectedError(token, format2, input) { if (token === "YYYY") { throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(format2, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); } else if (token === "YY") { throw new RangeError("Use `yy` instead of `YY` (in `".concat(format2, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); } else if (token === "D") { throw new RangeError("Use `d` instead of `D` (in `".concat(format2, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); } else if (token === "DD") { throw new RangeError("Use `dd` instead of `DD` (in `".concat(format2, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); } } // node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js var formatDistanceLocale = { lessThanXSeconds: { one: "less than a second", other: "less than {{count}} seconds" }, xSeconds: { one: "1 second", other: "{{count}} seconds" }, halfAMinute: "half a minute", lessThanXMinutes: { one: "less than a minute", other: "less than {{count}} minutes" }, xMinutes: { one: "1 minute", other: "{{count}} minutes" }, aboutXHours: { one: "about 1 hour", other: "about {{count}} hours" }, xHours: { one: "1 hour", other: "{{count}} hours" }, xDays: { one: "1 day", other: "{{count}} days" }, aboutXWeeks: { one: "about 1 week", other: "about {{count}} weeks" }, xWeeks: { one: "1 week", other: "{{count}} weeks" }, aboutXMonths: { one: "about 1 month", other: "about {{count}} months" }, xMonths: { one: "1 month", other: "{{count}} months" }, aboutXYears: { one: "about 1 year", other: "about {{count}} years" }, xYears: { one: "1 year", other: "{{count}} years" }, overXYears: { one: "over 1 year", other: "over {{count}} years" }, almostXYears: { one: "almost 1 year", other: "almost {{count}} years" } }; var formatDistance = function formatDistance2(token, count2, options) { var result; var tokenValue = formatDistanceLocale[token]; if (typeof tokenValue === "string") { result = tokenValue; } else if (count2 === 1) { result = tokenValue.one; } else { result = tokenValue.other.replace("{{count}}", count2.toString()); } if (options !== null && options !== void 0 && options.addSuffix) { if (options.comparison && options.comparison > 0) { return "in " + result; } else { return result + " ago"; } } return result; }; var formatDistance_default = formatDistance; // node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js function buildFormatLongFn(args) { return function() { var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; var width = options.width ? String(options.width) : args.defaultWidth; var format2 = args.formats[width] || args.formats[args.defaultWidth]; return format2; }; } // node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js var dateFormats = { full: "EEEE, MMMM do, y", long: "MMMM do, y", medium: "MMM d, y", short: "MM/dd/yyyy" }; var timeFormats = { full: "h:mm:ss a zzzz", long: "h:mm:ss a z", medium: "h:mm:ss a", short: "h:mm a" }; var dateTimeFormats = { full: "{{date}} 'at' {{time}}", long: "{{date}} 'at' {{time}}", medium: "{{date}}, {{time}}", short: "{{date}}, {{time}}" }; var formatLong = { date: buildFormatLongFn({ formats: dateFormats, defaultWidth: "full" }), time: buildFormatLongFn({ formats: timeFormats, defaultWidth: "full" }), dateTime: buildFormatLongFn({ formats: dateTimeFormats, defaultWidth: "full" }) }; var formatLong_default = formatLong; // node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js var formatRelativeLocale = { lastWeek: "'last' eeee 'at' p", yesterday: "'yesterday at' p", today: "'today at' p", tomorrow: "'tomorrow at' p", nextWeek: "eeee 'at' p", other: "P" }; var formatRelative = function formatRelative2(token, _date, _baseDate, _options) { return formatRelativeLocale[token]; }; var formatRelative_default = formatRelative; // node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js function buildLocalizeFn(args) { return function(dirtyIndex, options) { var context = options !== null && options !== void 0 && options.context ? String(options.context) : "standalone"; var valuesArray; if (context === "formatting" && args.formattingValues) { var defaultWidth = args.defaultFormattingWidth || args.defaultWidth; var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth; valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; } else { var _defaultWidth = args.defaultWidth; var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth; valuesArray = args.values[_width] || args.values[_defaultWidth]; } var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; return valuesArray[index]; }; } // node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js var eraValues = { narrow: ["B", "A"], abbreviated: ["BC", "AD"], wide: ["Before Christ", "Anno Domini"] }; var quarterValues = { narrow: ["1", "2", "3", "4"], abbreviated: ["Q1", "Q2", "Q3", "Q4"], wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"] }; var monthValues = { narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], abbreviated: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], wide: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] }; var dayValues = { narrow: ["S", "M", "T", "W", "T", "F", "S"], short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], wide: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] }; var dayPeriodValues = { narrow: { am: "a", pm: "p", midnight: "mi", noon: "n", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" }, abbreviated: { am: "AM", pm: "PM", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" }, wide: { am: "a.m.", pm: "p.m.", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" } }; var formattingDayPeriodValues = { narrow: { am: "a", pm: "p", midnight: "mi", noon: "n", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" }, abbreviated: { am: "AM", pm: "PM", midnight: "midnight", noon: "noon", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" }, wide: { am: "a.m.", pm: "p.m.", midnight: "midnight", noon: "noon", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" } }; var ordinalNumber = function ordinalNumber2(dirtyNumber, _options) { var number = Number(dirtyNumber); var rem100 = number % 100; if (rem100 > 20 || rem100 < 10) { switch (rem100 % 10) { case 1: return number + "st"; case 2: return number + "nd"; case 3: return number + "rd"; } } return number + "th"; }; var localize = { ordinalNumber, era: buildLocalizeFn({ values: eraValues, defaultWidth: "wide" }), quarter: buildLocalizeFn({ values: quarterValues, defaultWidth: "wide", argumentCallback: function argumentCallback(quarter) { return quarter - 1; } }), month: buildLocalizeFn({ values: monthValues, defaultWidth: "wide" }), day: buildLocalizeFn({ values: dayValues, defaultWidth: "wide" }), dayPeriod: buildLocalizeFn({ values: dayPeriodValues, defaultWidth: "wide", formattingValues: formattingDayPeriodValues, defaultFormattingWidth: "wide" }) }; var localize_default = localize; // node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js function buildMatchFn(args) { return function(string) { var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; var width = options.width; var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; var matchResult = string.match(matchPattern); if (!matchResult) { return null; } var matchedString = matchResult[0]; var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; var key2 = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function(pattern) { return pattern.test(matchedString); }) : findKey(parsePatterns, function(pattern) { return pattern.test(matchedString); }); var value; value = args.valueCallback ? args.valueCallback(key2) : key2; value = options.valueCallback ? options.valueCallback(value) : value; var rest = string.slice(matchedString.length); return { value, rest }; }; } function findKey(object, predicate) { for (var key2 in object) { if (object.hasOwnProperty(key2) && predicate(object[key2])) { return key2; } } return void 0; } function findIndex(array, predicate) { for (var key2 = 0; key2 < array.length; key2++) { if (predicate(array[key2])) { return key2; } } return void 0; } // node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js function buildMatchPatternFn(args) { return function(string) { var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; var matchResult = string.match(args.matchPattern); if (!matchResult) return null; var matchedString = matchResult[0]; var parseResult = string.match(args.parsePattern); if (!parseResult) return null; var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; value = options.valueCallback ? options.valueCallback(value) : value; var rest = string.slice(matchedString.length); return { value, rest }; }; } // node_modules/date-fns/esm/locale/en-US/_lib/match/index.js var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; var parseOrdinalNumberPattern = /\d+/i; var matchEraPatterns = { narrow: /^(b|a)/i, abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, wide: /^(before christ|before common era|anno domini|common era)/i }; var parseEraPatterns = { any: [/^b/i, /^(a|c)/i] }; var matchQuarterPatterns = { narrow: /^[1234]/i, abbreviated: /^q[1234]/i, wide: /^[1234](th|st|nd|rd)? quarter/i }; var parseQuarterPatterns = { any: [/1/i, /2/i, /3/i, /4/i] }; var matchMonthPatterns = { narrow: /^[jfmasond]/i, abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i }; var parseMonthPatterns = { narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i], any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i] }; var matchDayPatterns = { narrow: /^[smtwf]/i, short: /^(su|mo|tu|we|th|fr|sa)/i, abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i }; var parseDayPatterns = { narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] }; var matchDayPeriodPatterns = { narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i }; var parseDayPeriodPatterns = { any: { am: /^a/i, pm: /^p/i, midnight: /^mi/i, noon: /^no/i, morning: /morning/i, afternoon: /afternoon/i, evening: /evening/i, night: /night/i } }; var match = { ordinalNumber: buildMatchPatternFn({ matchPattern: matchOrdinalNumberPattern, parsePattern: parseOrdinalNumberPattern, valueCallback: function valueCallback(value) { return parseInt(value, 10); } }), era: buildMatchFn({ matchPatterns: matchEraPatterns, defaultMatchWidth: "wide", parsePatterns: parseEraPatterns, defaultParseWidth: "any" }), quarter: buildMatchFn({ matchPatterns: matchQuarterPatterns, defaultMatchWidth: "wide", parsePatterns: parseQuarterPatterns, defaultParseWidth: "any", valueCallback: function valueCallback2(index) { return index + 1; } }), month: buildMatchFn({ matchPatterns: matchMonthPatterns, defaultMatchWidth: "wide", parsePatterns: parseMonthPatterns, defaultParseWidth: "any" }), day: buildMatchFn({ matchPatterns: matchDayPatterns, defaultMatchWidth: "wide", parsePatterns: parseDayPatterns, defaultParseWidth: "any" }), dayPeriod: buildMatchFn({ matchPatterns: matchDayPeriodPatterns, defaultMatchWidth: "any", parsePatterns: parseDayPeriodPatterns, defaultParseWidth: "any" }) }; var match_default = match; // node_modules/date-fns/esm/locale/en-US/index.js var locale = { code: "en-US", formatDistance: formatDistance_default, formatLong: formatLong_default, formatRelative: formatRelative_default, localize: localize_default, match: match_default, options: { weekStartsOn: 0, firstWeekContainsDate: 1 } }; var en_US_default = locale; // node_modules/date-fns/esm/_lib/defaultLocale/index.js var defaultLocale_default = en_US_default; // node_modules/date-fns/esm/format/index.js var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; var escapedStringRegExp = /^'([^]*?)'?$/; var doubleQuoteRegExp = /''/g; var unescapedLatinCharacterRegExp = /[a-zA-Z]/; function format(dirtyDate, dirtyFormatStr, options) { var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4; requiredArgs(2, arguments); var formatStr = String(dirtyFormatStr); var defaultOptions3 = getDefaultOptions(); var locale2 = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions3.locale) !== null && _ref !== void 0 ? _ref : defaultLocale_default; var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions3.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1); if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively"); } var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions3.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions3.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0); if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); } if (!locale2.localize) { throw new RangeError("locale must contain localize property"); } if (!locale2.formatLong) { throw new RangeError("locale must contain formatLong property"); } var originalDate = toDate(dirtyDate); if (!isValid(originalDate)) { throw new RangeError("Invalid time value"); } var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate); var utcDate = subMilliseconds(originalDate, timezoneOffset); var formatterOptions = { firstWeekContainsDate, weekStartsOn, locale: locale2, _originalDate: originalDate }; var result = formatStr.match(longFormattingTokensRegExp).map(function(substring) { var firstCharacter = substring[0]; if (firstCharacter === "p" || firstCharacter === "P") { var longFormatter = longFormatters_default[firstCharacter]; return longFormatter(substring, locale2.formatLong); } return substring; }).join("").match(formattingTokensRegExp).map(function(substring) { if (substring === "''") { return "'"; } var firstCharacter = substring[0]; if (firstCharacter === "'") { return cleanEscapedString(substring); } var formatter = formatters_default[firstCharacter]; if (formatter) { if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(substring)) { throwProtectedError(substring, dirtyFormatStr, String(dirtyDate)); } if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(substring)) { throwProtectedError(substring, dirtyFormatStr, String(dirtyDate)); } return formatter(utcDate, substring, locale2.localize, formatterOptions); } if (firstCharacter.match(unescapedLatinCharacterRegExp)) { throw new RangeError("Format string contains an unescaped latin alphabet character `" + firstCharacter + "`"); } return substring; }).join(""); return result; } function cleanEscapedString(input) { var matched = input.match(escapedStringRegExp); if (!matched) { return input; } return matched[1].replace(doubleQuoteRegExp, "'"); } // node_modules/date-fns/esm/_lib/assign/index.js function assign(target, object) { if (target == null) { throw new TypeError("assign requires that input parameter not be null or undefined"); } for (var property in object) { if (Object.prototype.hasOwnProperty.call(object, property)) { ; target[property] = object[property]; } } return target; } // node_modules/date-fns/esm/_lib/cloneObject/index.js function cloneObject(object) { return assign({}, object); } // node_modules/date-fns/esm/formatDistance/index.js var MINUTES_IN_DAY = 1440; var MINUTES_IN_ALMOST_TWO_DAYS = 2520; var MINUTES_IN_MONTH = 43200; var MINUTES_IN_TWO_MONTHS = 86400; function formatDistance3(dirtyDate, dirtyBaseDate, options) { var _ref, _options$locale; requiredArgs(2, arguments); var defaultOptions3 = getDefaultOptions(); var locale2 = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions3.locale) !== null && _ref !== void 0 ? _ref : defaultLocale_default; if (!locale2.formatDistance) { throw new RangeError("locale must contain formatDistance property"); } var comparison = compareAsc(dirtyDate, dirtyBaseDate); if (isNaN(comparison)) { throw new RangeError("Invalid time value"); } var localizeOptions = assign(cloneObject(options), { addSuffix: Boolean(options === null || options === void 0 ? void 0 : options.addSuffix), comparison }); var dateLeft; var dateRight; if (comparison > 0) { dateLeft = toDate(dirtyBaseDate); dateRight = toDate(dirtyDate); } else { dateLeft = toDate(dirtyDate); dateRight = toDate(dirtyBaseDate); } var seconds = differenceInSeconds(dateRight, dateLeft); var offsetInSeconds = (getTimezoneOffsetInMilliseconds(dateRight) - getTimezoneOffsetInMilliseconds(dateLeft)) / 1e3; var minutes = Math.round((seconds - offsetInSeconds) / 60); var months; if (minutes < 2) { if (options !== null && options !== void 0 && options.includeSeconds) { if (seconds < 5) { return locale2.formatDistance("lessThanXSeconds", 5, localizeOptions); } else if (seconds < 10) { return locale2.formatDistance("lessThanXSeconds", 10, localizeOptions); } else if (seconds < 20) { return locale2.formatDistance("lessThanXSeconds", 20, localizeOptions); } else if (seconds < 40) { return locale2.formatDistance("halfAMinute", 0, localizeOptions); } else if (seconds < 60) { return locale2.formatDistance("lessThanXMinutes", 1, localizeOptions); } else { return locale2.formatDistance("xMinutes", 1, localizeOptions); } } else { if (minutes === 0) { return locale2.formatDistance("lessThanXMinutes", 1, localizeOptions); } else { return locale2.formatDistance("xMinutes", minutes, localizeOptions); } } } else if (minutes < 45) { return locale2.formatDistance("xMinutes", minutes, localizeOptions); } else if (minutes < 90) { return locale2.formatDistance("aboutXHours", 1, localizeOptions); } else if (minutes < MINUTES_IN_DAY) { var hours = Math.round(minutes / 60); return locale2.formatDistance("aboutXHours", hours, localizeOptions); } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) { return locale2.formatDistance("xDays", 1, localizeOptions); } else if (minutes < MINUTES_IN_MONTH) { var days = Math.round(minutes / MINUTES_IN_DAY); return locale2.formatDistance("xDays", days, localizeOptions); } else if (minutes < MINUTES_IN_TWO_MONTHS) { months = Math.round(minutes / MINUTES_IN_MONTH); return locale2.formatDistance("aboutXMonths", months, localizeOptions); } months = differenceInMonths(dateRight, dateLeft); if (months < 12) { var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH); return locale2.formatDistance("xMonths", nearestMonth, localizeOptions); } else { var monthsSinceStartOfYear = months % 12; var years = Math.floor(months / 12); if (monthsSinceStartOfYear < 3) { return locale2.formatDistance("aboutXYears", years, localizeOptions); } else if (monthsSinceStartOfYear < 9) { return locale2.formatDistance("overXYears", years, localizeOptions); } else { return locale2.formatDistance("almostXYears", years + 1, localizeOptions); } } } // node_modules/date-fns/esm/getDaysInMonth/index.js function getDaysInMonth(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var year = date.getFullYear(); var monthIndex = date.getMonth(); var lastDayOfMonth2 = new Date(0); lastDayOfMonth2.setFullYear(year, monthIndex + 1, 0); lastDayOfMonth2.setHours(0, 0, 0, 0); return lastDayOfMonth2.getDate(); } // node_modules/date-fns/esm/getISOWeek/index.js var MILLISECONDS_IN_WEEK4 = 6048e5; function getISOWeek(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var diff = startOfISOWeek(date).getTime() - startOfISOWeekYear(date).getTime(); return Math.round(diff / MILLISECONDS_IN_WEEK4) + 1; } // node_modules/date-fns/esm/getTime/index.js function getTime(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var timestamp = date.getTime(); return timestamp; } // node_modules/date-fns/esm/getUnixTime/index.js function getUnixTime(dirtyDate) { requiredArgs(1, arguments); return Math.floor(getTime(dirtyDate) / 1e3); } // node_modules/date-fns/esm/getWeekYear/index.js function getWeekYear(dirtyDate, options) { var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; requiredArgs(1, arguments); var date = toDate(dirtyDate); var year = date.getFullYear(); var defaultOptions3 = getDefaultOptions(); var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively"); } var firstWeekOfNextYear = new Date(0); firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate); firstWeekOfNextYear.setHours(0, 0, 0, 0); var startOfNextYear = startOfWeek(firstWeekOfNextYear, options); var firstWeekOfThisYear = new Date(0); firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate); firstWeekOfThisYear.setHours(0, 0, 0, 0); var startOfThisYear = startOfWeek(firstWeekOfThisYear, options); if (date.getTime() >= startOfNextYear.getTime()) { return year + 1; } else if (date.getTime() >= startOfThisYear.getTime()) { return year; } else { return year - 1; } } // node_modules/date-fns/esm/startOfWeekYear/index.js function startOfWeekYear(dirtyDate, options) { var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; requiredArgs(1, arguments); var defaultOptions3 = getDefaultOptions(); var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); var year = getWeekYear(dirtyDate, options); var firstWeek = new Date(0); firstWeek.setFullYear(year, 0, firstWeekContainsDate); firstWeek.setHours(0, 0, 0, 0); var date = startOfWeek(firstWeek, options); return date; } // node_modules/date-fns/esm/getWeek/index.js var MILLISECONDS_IN_WEEK5 = 6048e5; function getWeek(dirtyDate, options) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var diff = startOfWeek(date, options).getTime() - startOfWeekYear(date, options).getTime(); return Math.round(diff / MILLISECONDS_IN_WEEK5) + 1; } // node_modules/date-fns/esm/lastDayOfMonth/index.js function lastDayOfMonth(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var month = date.getMonth(); date.setFullYear(date.getFullYear(), month + 1, 0); date.setHours(0, 0, 0, 0); return date; } // node_modules/date-fns/esm/getWeeksInMonth/index.js function getWeeksInMonth(date, options) { requiredArgs(1, arguments); return differenceInCalendarWeeks(lastDayOfMonth(date), startOfMonth(date), options) + 1; } // node_modules/date-fns/esm/isAfter/index.js function isAfter2(dirtyDate, dirtyDateToCompare) { requiredArgs(2, arguments); var date = toDate(dirtyDate); var dateToCompare = toDate(dirtyDateToCompare); return date.getTime() > dateToCompare.getTime(); } // node_modules/date-fns/esm/isBefore/index.js function isBefore(dirtyDate, dirtyDateToCompare) { requiredArgs(2, arguments); var date = toDate(dirtyDate); var dateToCompare = toDate(dirtyDateToCompare); return date.getTime() < dateToCompare.getTime(); } // node_modules/date-fns/esm/isSameMonth/index.js function isSameMonth(dirtyDateLeft, dirtyDateRight) { requiredArgs(2, arguments); var dateLeft = toDate(dirtyDateLeft); var dateRight = toDate(dirtyDateRight); return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth(); } // node_modules/date-fns/esm/isSameYear/index.js function isSameYear(dirtyDateLeft, dirtyDateRight) { requiredArgs(2, arguments); var dateLeft = toDate(dirtyDateLeft); var dateRight = toDate(dirtyDateRight); return dateLeft.getFullYear() === dateRight.getFullYear(); } // node_modules/date-fns/esm/subDays/index.js function subDays(dirtyDate, dirtyAmount) { requiredArgs(2, arguments); var amount = toInteger(dirtyAmount); return addDays(dirtyDate, -amount); } // node_modules/date-fns/esm/setMonth/index.js function setMonth(dirtyDate, dirtyMonth) { requiredArgs(2, arguments); var date = toDate(dirtyDate); var month = toInteger(dirtyMonth); var year = date.getFullYear(); var day = date.getDate(); var dateWithDesiredMonth = new Date(0); dateWithDesiredMonth.setFullYear(year, month, 15); dateWithDesiredMonth.setHours(0, 0, 0, 0); var daysInMonth = getDaysInMonth(dateWithDesiredMonth); date.setMonth(month, Math.min(day, daysInMonth)); return date; } // node_modules/date-fns/esm/setYear/index.js function setYear(dirtyDate, dirtyYear) { requiredArgs(2, arguments); var date = toDate(dirtyDate); var year = toInteger(dirtyYear); if (isNaN(date.getTime())) { return new Date(NaN); } date.setFullYear(year); return date; } // src/utils/contexts/fm.ts var import_lodash = __toESM(require_lodash()); var import_obsidian3 = require("obsidian"); // src/utils/contexts/dv.ts var import_obsidian2 = require("obsidian"); var LocationWrapper = { "fullLine": { start: "", end: "" }, "brackets": { start: "[", end: "]" }, "parenthesis": { start: "(", end: ")" } }; var fieldComponents = ["inQuote", "inList", "startStyle", "attribute", "endStyle", "beforeSeparatorSpacer", "afterSeparatorSpacer", "values"]; var genericFieldRegex = "(?>(\\s+)?)?(?- )?(?[_\\*~`]*)(?[0-9\\w\\p{Letter}\\p{Emoji_Presentation}][-0-9\\w\\p{Letter}\\p{Emoji_Presentation}\\s]*)(?[_\\*~`]*)(?\\s*)"; var inlineFieldRegex = (attribute) => `(?>(\\s+)?)?(?- )?(?[_\\*~\`]*)(?${attribute})(?[_\\*~\`]*)(?\\s*)::(?\\s*)`; var fullLineRegex = new RegExp(`^${genericFieldRegex}::\\s*(?.*)?`, "u"); var inSentenceRegexBrackets = new RegExp(`\\[${genericFieldRegex}::\\s*(?[^\\]]+)?\\]`, "gu"); var inSentenceRegexPar = new RegExp(`\\(${genericFieldRegex}::\\s*(?[^\\)]+)?\\)`, "gu"); var encodeLink = (value) => { return value ? value.replace(/\[\[/g, "\u{1F54C}\u{1F527}").replace(/\]\]/g, "\u{1F413}\u{1F400}") : value; }; var decodeLink = (value) => { return value ? value.replace(/🕌🔧/gu, "[[").replace(/🐓🐀/gu, "]]") : value; }; var matchInlineFields = (regex, line, attribute, input, location = "fullLine") => { const sR = line.matchAll(regex); let next = sR.next(); const newFields = []; while (!next.done) { const match2 = next.value; if (match2.groups && Object.keys(match2.groups).every((j4) => fieldComponents.includes(j4))) { const { inList, inQuote, startStyle, endStyle, beforeSeparatorSpacer, afterSeparatorSpacer, values } = match2.groups; const inputArray = input ? input.replace(/(\,\s+)/g, ",").split(",") : [""]; const newValue = inputArray.length == 1 ? inputArray[0] : `${inputArray.join(", ")}`; const start = LocationWrapper[location].start; const end = LocationWrapper[location].end; newFields.push({ oldField: match2[0], newField: `${inQuote || ""}${start}${inList || ""}${startStyle}${attribute}${endStyle}${beforeSeparatorSpacer}::${afterSeparatorSpacer}${newValue}${end}` }); } next = sR.next(); } return newFields; }; async function replaceValues(plugin, fileOrFilePath, attribute, input, previousItemsCount = 0) { var _a2, _b2; let file; if (fileOrFilePath instanceof import_obsidian2.TFile) { file = fileOrFilePath; } else { const _file = plugin.app.vault.getAbstractFileByPath(fileOrFilePath); if (_file instanceof import_obsidian2.TFile && _file.extension == "md") { file = _file; } else { throw Error("path doesn't correspond to a proper file"); } } const content = (await plugin.app.vault.read(file)).split("\n"); const frontmatter = (_a2 = plugin.app.metadataCache.getFileCache(file)) == null ? void 0 : _a2.frontmatter; const skippedLines = []; const { position: { start, end } } = frontmatter ? frontmatter : { position: { start: void 0, end: void 0 } }; const newContent = content.map((line, i4) => { const encodedInput = encodeLink(input); let encodedLine = encodeLink(line); const fullLineRegex2 = new RegExp(`^${inlineFieldRegex(attribute)}(?[^\\]]*)`, "u"); const fR = encodedLine.match(fullLineRegex2); if ((fR == null ? void 0 : fR.groups) && Object.keys(fR.groups).every((j4) => fieldComponents.includes(j4))) { const { inList, inQuote, startStyle, endStyle, beforeSeparatorSpacer, afterSeparatorSpacer, values } = fR.groups; const inputArray = input ? input.replace(/(\,\s+)/g, ",").split(",").sort() : []; let newValue; let hiddenValue = ""; newValue = inputArray.length == 1 ? inputArray[0] : `${inputArray.join(", ")}`; return `${inQuote || ""}${inList || ""}${startStyle}${attribute}${endStyle}${beforeSeparatorSpacer}::${afterSeparatorSpacer}${hiddenValue + newValue}`; } else { const newFields = []; const inSentenceRegexBrackets2 = new RegExp(`\\[${inlineFieldRegex(attribute)}(?[^\\]]+)?\\]`, "gu"); const inSentenceRegexPar2 = new RegExp(`\\(${inlineFieldRegex(attribute)}(?[^\\)]+)?\\)`, "gu"); newFields.push(...matchInlineFields(inSentenceRegexBrackets2, encodedLine, attribute, encodedInput, "brackets" /* brackets */)); newFields.push(...matchInlineFields(inSentenceRegexPar2, encodedLine, attribute, encodedInput, "parenthesis" /* parenthesis */)); newFields.forEach((field) => { const fieldRegex = new RegExp(field.oldField.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "u"); encodedLine = encodedLine.replace(fieldRegex, field.newField); }); return decodeLink(encodedLine); } }); await plugin.app.vault.modify(file, newContent.filter((line, i4) => !skippedLines.includes(i4)).join("\n")); const editor = (_b2 = plugin.app.workspace.getActiveViewOfType(import_obsidian2.MarkdownView)) == null ? void 0 : _b2.editor; if (editor) { const lineNumber = editor.getCursor().line; editor.setCursor({ line: editor.getCursor().line, ch: editor.getLine(lineNumber).length }); } } // src/utils/contexts/fm.ts var saveContextToFile = (file, cols, context, plugin) => { if (app.fileManager.processFrontMatter) { app.fileManager.processFrontMatter(file, (frontmatter) => { Object.keys(context).filter( (f4) => cols.find((c4) => c4.name == f4) && cols.find((c4) => c4.name == f4).hidden != "true" && !cols.find((c4) => c4.name == f4).type.contains("file") && context[f4] ).forEach((f4) => { const col = cols.find((c4) => c4.name == f4); frontmatter[f4] = valueForFrontmatter(col.type, context[f4]); if (plugin.dataViewAPI()) { if (plugin.dataViewAPI().page(file.path)[f4] && !frontmatter[f4]) { replaceValues(plugin, file.path, f4, context[f4]); } else { frontmatter[f4] = valueForFrontmatter(col.type, context[f4]); } } else { frontmatter[f4] = valueForFrontmatter(col.type, context[f4]); } }); }); } }; var frontMatterForFile = (file) => { let currentCache; if (file instanceof import_obsidian3.TFile && app.metadataCache.getFileCache(file) !== null) { currentCache = app.metadataCache.getFileCache(file); } return currentCache == null ? void 0 : currentCache.frontmatter; }; var frontMatterKeys = (fm) => { return Object.keys(fm != null ? fm : {}).filter((f4) => f4 != "position"); }; var yamlTypeToMDBType = (YAMLtype) => { switch (YAMLtype) { case "duration": return "text"; break; case "unknown": return "text"; break; } return YAMLtype; }; var detectYAMLType = (value, key2) => { if (typeof value === "string") { if (/\/\/(\S+?(?:jpe?g|png|gif|svg))/gi.test(value) || value.contains("unsplash")) { return "image"; } if (/^\d{4}-\d{2}-\d{2}$/.test(value)) { return "date"; } if (key2 == "tag" || key2 == "tags") { return "tag"; } if (/\[\[.*?\]\]/.test(value)) { return "link"; } return "text"; } else if (typeof value === "number") { return "number"; } else if (typeof value === "boolean") { return "boolean"; } else if (!value) { return "unknown"; } else if (Array.isArray(value)) { if (key2 == "tag" || key2 == "tags") { return "tag-multi"; } if (value.length == 1 && Array.isArray(value[0]) && value[0].length == 1 && typeof value[0][0] === "string") { return "link"; } const types = uniq(value.map((f4) => detectYAMLType(f4, key2))); if (types.length == 1 && types[0] == "link") { return "link-multi"; } return "option-multi"; } else if (value.isLuxonDateTime) { return "date"; } else if (value.isLuxonDuration) { return "duration"; } else if (value.type == "file") { return "link"; } return "text"; }; var mergeTableData = (mdb, yamlmdb, types) => { return { ...mdb, cols: [ ...mdb.cols, ...yamlmdb.cols.filter( (f4) => !mdb.cols.find((g4) => g4.name.toLowerCase() == f4.toLowerCase()) ).map((f4) => ({ name: f4, schemaId: mdb.schema.id, type: yamlTypeToMDBType(types[f4]) })) ].filter(onlyUniqueProp("name")), rows: mdb.rows.map((r3) => { const fmRow = yamlmdb.rows.find((f4) => f4.File == r3.File); if (fmRow) { return { ...r3, ...fmRow }; } return r3; }) }; }; var guestimateTypes = (_files, plugin, dv) => { const typesArray = _files.map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4).map((k5) => { const fm = dv && plugin.dataViewAPI() ? plugin.dataViewAPI().page(k5.path) : frontMatterForFile(k5); const fmKeys = dv ? Object.keys(fm != null ? fm : {}).filter( (f4, i4, self2) => !self2.find( (g4, j4) => g4.toLowerCase().replace(/\s/g, "-") == f4.toLowerCase().replace(/\s/g, "-") && i4 > j4 ) ? true : false ).filter((f4) => f4 != "file") : frontMatterKeys(fm); return fmKeys.reduce( (pk, ck) => ({ ...pk, [ck]: detectYAMLType(fm[ck], ck) }), {} ); }); const types = typesArray.reduce( (p3, c4) => { const newSet = Object.keys(c4).reduce( (pk, ck) => { var _a2; return { ...pk, [ck]: [...(_a2 = p3 == null ? void 0 : p3[ck]) != null ? _a2 : [], c4[ck]] }; }, { ...p3 } ); return newSet; }, {} ); const guessType = (ts) => { return import_lodash.default.head((0, import_lodash.default)(ts).countBy().entries().maxBy(import_lodash.default.last)); }; const guessedTypes = Object.keys(types).reduce((p3, c4) => { return { ...p3, [c4]: guessType(types[c4]) }; }, {}); return guessedTypes; }; var valueForFrontmatter = (type, value) => { if (type == "number") { return parseInt(value); } else if (type == "boolean") { return value == "true"; } else if (type.contains("multi")) { return splitString(value); } return value; }; var saveFrontmatterValue = (plugin, path, key2, value, type, forceSave) => { const afile = getAbstractFileAtPath(app, path); if (afile) { if (app.fileManager.processFrontMatter) { app.fileManager.processFrontMatter(afile, (frontmatter) => { if (plugin.dataViewAPI()) { if (plugin.dataViewAPI().page(path)[key2] && !frontmatter[key2]) { replaceValues(plugin, path, key2, value); } else { if (key2 in frontmatter || forceSave) { frontmatter[key2] = valueForFrontmatter(type, value); } } } else { if (key2 in frontmatter || forceSave) { frontmatter[key2] = valueForFrontmatter(type, value); } } }); } } }; var parseFrontMatter = (field, value, dv) => { const YAMLtype = detectYAMLType(value, field); switch (YAMLtype) { case "number": return value.toString(); break; case "boolean": return value ? "true" : "false"; break; case "date": if (!dv) { return value; } else { return format(new Date(value.ts), "yyyy-MM-dd"); ; } break; case "duration": return Object.keys(value.values).reduce( (p3, c4) => [ ...p3, ...value.values[c4] > 0 ? [value.values[c4] + " " + c4] : [] ], [] ).join(", "); break; case "option-multi": case "link-multi": case "tag-multi": return value.join(","); break; case "link": { if (Array.isArray(value) && value.length == 1 && Array.isArray(value[0]) && value[0].length == 1 && typeof value[0][0] === "string") { return value[0][0]; } else if (typeof value === "string") { return value; } return value.path; } break; case "text": case "tag": case "image": return value; break; } return ""; }; // src/utils/array.ts var insert = (arr, index, newItem) => [ ...arr.slice(0, index), newItem, ...arr.slice(index) ]; // src/utils/sanitize.ts var sanitizeTableName = (name) => { return name == null ? void 0 : name.replace(/[^a-z0-9+]+/gi, ""); }; var sanitizeColumnName = (name) => { return name == null ? void 0 : name.replace(/"/g, ``); }; var sanitizeSQLStatement = (name) => { return name == null ? void 0 : name.replace(/'/g, `''`); }; // src/dispatch/mdb.ts var import_lodash2 = __toESM(require_lodash()); var import_obsidian4 = require("obsidian"); var dispatchDatabaseFileChanged = (dbPath, tag) => { let evt = new CustomEvent(eventTypes.mdbChange, { detail: { dbPath, tag } }); window.dispatchEvent(evt); }; var processFolderDB = async (plugin, folderPath, processor, fallback) => { let tags = []; const dbPath = folderContextFromFolder(plugin, folderPath); const dbFileExists = getAbstractFileAtPath(app, dbPath); if (dbFileExists) { const folderDB = await getMDBTable(plugin, "files", dbPath, false); if (folderDB) { tags.push(...folderDB.schema.def.split("&")); const newDB = await processor(folderDB, dbPath); const promises = tags.map((tag) => { const tagdbPath = tagContextFromTag(plugin, tag); const tagFileExists = getAbstractFileAtPath(app, tagdbPath); if (tagFileExists) { return consolidateRowsToTag( plugin, tagdbPath, "files", dbPath, newDB.rows ).then((f4) => { }); } }); return Promise.all(promises); } else if (fallback) { await fallback(); } } else if (fallback) { await fallback(); } }; var saveDB = async (plugin, dbPath, newTable) => { return saveMDBToPath(plugin, dbPath, newTable); }; var renameRow = (folder, filePath, toFilePath) => { return { ...folder, rows: folder.rows.map( (f4) => f4.File == filePath && f4._source == "folder" ? { ...f4, File: toFilePath } : f4 ) }; }; var removeRows = (folder, source) => { return { ...folder, rows: folder.rows.filter((f4) => f4._source != source) }; }; var removeRow = (folder, filePath) => { return { ...folder, rows: folder.rows.filter( (f4) => f4.File != filePath && f4._source == "folder" ) }; }; var insertRow = (folder, row, parent) => { const existingRow = folder.rows.find( (f4) => f4.File == row.File || parent + "/" + f4.File + ".md" == row.File ); if (existingRow) { return { ...folder, rows: folder.rows.map( (f4) => f4.File == existingRow.File ? { ...f4, File: row.File, _source: "folder", ...row } : f4 ) }; } return { ...folder, rows: [...folder.rows, row] }; }; var insertRows = (folder, rows) => { const newRows = rows.filter( (row) => { var _a2; return ((_a2 = row.File) == null ? void 0 : _a2.length) > 0 && !folder.rows.some((f4) => f4.File == row.File && f4._source == "folder"); } ); return { ...folder, rows: [...folder.rows, ...newRows] }; }; var saveContextToFrontmatter = (file, cols, context, plugin) => { const afile = getAbstractFileAtPath(app, file); if (afile && afile instanceof import_obsidian4.TFile) saveContextToFile(afile, cols, context, plugin); }; var removeSourceFromTag = async (plugin, tag, source) => { const dbPath = tagContextFromTag(plugin, tag); const tagFileExists = getAbstractFileAtPath(app, dbPath); if (tagFileExists) { const tagDB = await getMDBTable(plugin, "files", dbPath, true); const files = tagDB.rows.filter((f4) => f4._source == source); files.forEach( (row) => saveContextToFrontmatter( row["File"], tagDB.cols, tagDB.cols.reduce((p3, c4) => ({ ...p3, [c4.name]: row[c4.name] }), {}), plugin ) ); await saveDB(plugin, dbPath, removeRows(tagDB, source)); } }; var contextShouldExist = async (plugin, tag) => { const dbPath = tagContextFromTag(plugin, tag); const tagFileExists = getAbstractFileAtPath(app, dbPath); if (!tagFileExists) return false; return getMDBTable(plugin, "files", dbPath, true).then((f4) => (f4 == null ? void 0 : f4.rows.length) > 0); }; var initiateContextIfNotExists = async (plugin, tag) => { const dbPath = tagContextFromTag(plugin, tag); const tagFileExists = getAbstractFileAtPath(app, dbPath); if (tagFileExists) return false; return createDefaultDB(plugin, dbPath, true); }; var insertContextItems = async (plugin, newPaths, t4) => { const saveNewContextRows = async (tag, path) => { const newRow = newPaths.map((newPath) => ({ File: newPath })); await saveDB(plugin, path, insertRows(tag, newRow)); }; const dbPath = tagContextFromTag(plugin, t4); const tagFileExists = getAbstractFileAtPath(app, dbPath); if (!tagFileExists) { await createDefaultDB(plugin, dbPath, true); } await getMDBTable(plugin, "files", dbPath, true).then( (tagDB) => saveNewContextRows(tagDB, dbPath).then((f4) => { }) ); }; var fileToFM = (file, cols, plugin) => { const fm = frontMatterForFile(file); const fmKeys = frontMatterKeys(fm).filter((f4) => cols.some((g4) => f4 == g4)); const rows = fmKeys.reduce( (p3, c4) => ({ ...p3, [c4]: parseFrontMatter(c4, fm[c4], false) }), {} ); if (plugin.dataViewAPI()) { return { ...rows, ...fileToDV(file, cols, plugin) }; } return rows; }; var fileToDV = (file, cols, plugin) => { const dvValues = plugin.dataViewAPI().page(file.path); const fmKeys = uniqCaseInsensitive( Object.keys(dvValues != null ? dvValues : {}).filter( (f4, i4, self2) => !self2.find( (g4, j4) => g4.toLowerCase().replace(/\s/g, "-") == f4.toLowerCase().replace(/\s/g, "-") && i4 > j4 ) ? true : false ).filter((f4) => f4 != "file") ).filter((f4) => cols.some((g4) => f4 == g4)); ; return fmKeys.reduce( (p3, c4) => ({ ...p3, [c4]: parseFrontMatter(c4, dvValues[c4], true) }), {} ); }; var onMetadataChange = async (plugin, file) => { const folderPath = getFolderPathFromString(file.path); let tags = []; const dbPath = folderContextFromFolder(plugin, folderPath); const dbFileExists = getAbstractFileAtPath(app, dbPath); if (dbFileExists) { const folderDB = await getMDBTable(plugin, "files", dbPath, false); if (folderDB) { tags.push(...folderDB.schema.def.split("&")); const newDB = { ...folderDB, rows: folderDB.rows.map( (f4) => f4.File == file.path && f4._source == "folder" ? { ...f4, ...fileToFM( file, folderDB.cols.map((f5) => f5.name), plugin ) } : f4 ) }; const dbChanged = !import_lodash2.default.isEqual(folderDB.rows, newDB.rows); if (dbChanged) { await saveDB(plugin, dbPath, newDB); } const promises = tags.map((tag) => { const tagdbPath = tagContextFromTag(plugin, tag); const tagFileExists = getAbstractFileAtPath(app, tagdbPath); if (tagFileExists) { return getMDBTable(plugin, "files", tagdbPath, false).then( (tagDB) => { const newDB2 = { ...tagDB, rows: tagDB.rows.map( (f4) => f4.File == file.path && f4._source == dbPath ? { ...f4, ...fileToFM( file, tagDB.cols.map((f5) => f5.name), plugin ) } : f4 ) }; const dbChanged2 = !import_lodash2.default.isEqual(tagDB.rows, newDB2.rows); if (dbChanged2) { return saveDB(plugin, tagdbPath, newDB2); } return; } ); } }); await Promise.all(promises); } } }; var onFileCreated = async (plugin, newPath) => { const newFolderPath = getFolderPathFromString(newPath); await processFolderDB(plugin, newFolderPath, async (folder, path) => { const amendedFolderDB = insertRow( folder, newRowByDBRow({ File: newPath, _source: "folder" }), newFolderPath ); await saveDB(plugin, path, amendedFolderDB); return amendedFolderDB; }); }; var onFileChanged = async (plugin, oldPath, newPath) => { const oldFolderPath = getFolderPathFromString(oldPath); const newFolderPath = getFolderPathFromString(newPath); if (oldFolderPath == newFolderPath) { await processFolderDB(plugin, oldFolderPath, async (folder, path) => { const amendedFolderDB = renameRow(folder, oldPath, newPath); await saveDB(plugin, path, amendedFolderDB); return amendedFolderDB; }); } else { await processFolderDB( plugin, oldFolderPath, async (folder, path) => { const amendedFolderDB = removeRow(folder, oldPath); await saveDB(plugin, path, amendedFolderDB); const dbPath = folderContextFromFolder(plugin, newFolderPath); const fromDBRow = folder.rows.find((f4) => f4.File == oldPath); const toDBFileExists = getAbstractFileAtPath(app, dbPath); if (toDBFileExists) { const toFolderDB = await getMDBTable(plugin, "files", dbPath, false); if (toFolderDB) { const [newDBCols, fmDBCols] = Object.keys(fromDBRow).reduce( (p3, c4) => fromDBRow[c4].length == 0 ? p3 : toFolderDB.cols.find((f4) => f4.name == fromDBRow[c4]) ? [[...p3[0], c4], p3[1]] : [p3[0], [...p3[1], c4]], [[], []] ); const newRow = { ...newDBCols.reduce((p3, c4) => ({ ...p3, [c4]: fromDBRow[c4] }), {}), File: newPath }; await saveDB( plugin, dbPath, insertRow(toFolderDB, newRowByDBRow(newRow), newFolderPath) ); saveContextToFrontmatter( newPath, folder.cols, fmDBCols.reduce((p3, c4) => ({ ...p3, [c4]: fromDBRow[c4] }), {}), plugin ); } } else { saveContextToFrontmatter( newPath, folder.cols, Object.keys(fromDBRow).reduce( (p3, c4) => ({ ...p3, [c4]: fromDBRow[c4] }), {} ), plugin ); } return amendedFolderDB; }, async () => { const dbPath = folderContextFromFolder(plugin, newFolderPath); const toDBFileExists = getAbstractFileAtPath(app, dbPath); if (toDBFileExists) { const toFolderDB = await getMDBTable(plugin, "files", dbPath, false); } } ); } }; var onFileDeleted = async (plugin, oldPath) => { const oldFolderPath = getFolderPathFromString(oldPath); await processFolderDB(plugin, oldFolderPath, async (folder, path) => { const amendedFolderDB = removeRow(folder, oldPath); await saveDB(plugin, path, amendedFolderDB); return amendedFolderDB; }); }; var onFolderChanged = async (plugin, oldPath, newPath) => { await processFolderDB(plugin, newPath, async (folder, path) => { const newDB = { ...folder, rows: folder.rows.map( (f4) => getFolderPathFromString(f4["File"]) == oldPath ? { ...f4, File: f4["File"].replace(oldPath, newPath) } : f4 ) }; await saveDB(plugin, path, newDB); return newDB; }); }; var onFolderDeleted = async (oldPath) => { }; // src/utils/db/db.ts var import_obsidian5 = require("obsidian"); var getDBFile = async (path) => { if (!await app.vault.adapter.exists((0, import_obsidian5.normalizePath)(path))) { return null; } const file = await app.vault.adapter.readBinary( (0, import_obsidian5.normalizePath)(path) ); return file; }; var getDB = async (sqlJS, path) => { const buf = await getDBFile(path); if (buf) { return new sqlJS.Database(new Uint8Array(buf)); } return new sqlJS.Database(); }; var saveDBAndKeepAlive = (db, path) => { const results = saveDBFile(path, db.export().buffer); return results; }; var saveDBFile = async (path, binary) => { const file = app.vault.adapter.writeBinary( (0, import_obsidian5.normalizePath)(path), binary ); return file; }; var dbResultsToDBTables = (res) => { return res.reduce( (p3, c4, i4) => [ ...p3, { cols: c4.columns, rows: c4 ? c4.values.map( (r3) => c4.columns.reduce( (prev, curr, index) => ({ ...prev, [curr]: r3[index] }), {} ) ) : [] } ], [] ); }; var selectDB = (db, table, condition, fields) => { const fieldsStr = fields != null ? fields : "*"; const sqlstr = condition ? `SELECT ${fieldsStr} FROM "${table}" WHERE ${condition};` : `SELECT ${fieldsStr} FROM ${table};`; let tables; try { tables = dbResultsToDBTables(db.exec(sqlstr)); } catch (e4) { return null; } if (tables.length == 1) return tables[0]; return null; }; var updateDB = (db, tables, updateCol, updateRef) => { const sqlstr = Object.keys(tables).map((t4) => { const tableFields = tables[t4].cols.filter((f4) => f4 != updateRef); const rowsQuery = tables[t4].rows.reduce((prev, curr) => { var _a2; return `${prev} UPDATE "${t4}" SET ${tableFields.map((c4) => { var _a3; return `${c4}='${(_a3 = sanitizeSQLStatement(curr == null ? void 0 : curr[c4])) != null ? _a3 : ""}'`; }).join(", ")} WHERE ${updateCol}='${(_a2 = sanitizeSQLStatement(curr == null ? void 0 : curr[updateRef])) != null ? _a2 : ""}';`; }, ""); return rowsQuery; }).join("; "); try { db.exec(sqlstr); } catch (e4) { console.log(e4); } }; var execQuery = (db, sqlstr) => { try { db.exec(sqlstr); } catch (e4) { console.log(e4); } }; var deleteFromDB = (db, table, condition) => { const sqlstr = `DELETE FROM "${table}" WHERE ${condition};`; try { db.exec(sqlstr); } catch (e4) { console.log(e4); } }; var dropTable = (db, table) => { const sqlstr = `DROP TABLE IF EXISTS "${table}";`; try { db.exec(sqlstr); } catch (e4) { console.log(e4); } }; var insertIntoDB = (db, tables) => { const sqlstr = Object.keys(tables).map((t4) => { const tableFields = tables[t4].cols; const rowsQuery = tables[t4].rows.reduce((prev, curr) => { return `${prev} INSERT INTO "${t4}" VALUES (${tableFields.map((c4) => { var _a2; return `'${(_a2 = sanitizeSQLStatement(curr == null ? void 0 : curr[c4])) != null ? _a2 : ""}'`; }).join(", ")});`; }, ""); return rowsQuery; }).join("; "); try { db.exec(`BEGIN TRANSACTION; ${sqlstr} COMMIT;`); } catch (e4) { console.log(e4); } }; var replaceDB = (db, tables) => { const sqlstr = Object.keys(tables).map((t4) => { const tableFields = tables[t4].cols; const fieldQuery = uniq(tableFields).map((f4) => `'${sanitizeSQLStatement(f4)}' char`).join(", "); const rowsQuery = tables[t4].rows.reduce((prev, curr) => { return `${prev} REPLACE INTO "${t4}" VALUES (${tableFields.map((c4) => { var _a2; return `'${(_a2 = sanitizeSQLStatement(curr == null ? void 0 : curr[c4])) != null ? _a2 : ""}'`; }).join(", ")});`; }, ""); const idxQuery = tables[t4].uniques.filter((f4) => f4).reduce((p3, c4) => { return `${p3} CREATE UNIQUE INDEX IF NOT EXISTS idx_${t4}_${c4.replace( /,/g, "_" )} ON ${t4}(${c4});`; }, ""); const insertQuery = `CREATE TABLE IF NOT EXISTS "${t4}" (${fieldQuery}); ${idxQuery} BEGIN TRANSACTION; ${rowsQuery} COMMIT;`; return `DROP TABLE IF EXISTS "${t4}"; ${fieldQuery.length > 0 ? insertQuery : ""}`; }).join("; "); try { db.exec(sqlstr); } catch (e4) { console.log(e4); } }; var saveDBToPath = async (plugin, path, tables) => { const sqlJS = await plugin.sqlJS(); let db = await getDB(sqlJS, path); replaceDB(db, tables); await saveDBFile(path, db.export().buffer); dispatchDatabaseFileChanged(path); db.close(); return true; }; // src/utils/contexts/mdb.ts var dbTableToMDBTable = (table, schema, fields) => { var _a2; return { schema, cols: fields, rows: (_a2 = table == null ? void 0 : table.rows) != null ? _a2 : [] }; }; var updateFieldsToSchema = (fields, tag) => { if (tag) { return [ ...fields, ...defaultTagFields.rows.filter( (f4) => !fields.some((g4) => g4.name == f4.name && g4.schemaId == f4.schemaId) ) ]; } return [ ...fields, ...defaultFolderFields.rows.filter( (f4) => !fields.some((g4) => g4.name == f4.name && g4.schemaId == f4.schemaId) ) ]; }; var getMDBTable = async (plugin, table, path, tag) => { const sqlJS = await plugin.sqlJS(); const buf = await getDBFile(path); if (!buf) { return null; } const db = new sqlJS.Database(new Uint8Array(buf)); await sanitizeTableSchema(plugin, db, path, tag); let fieldsTables; let schema; try { fieldsTables = dbResultsToDBTables( db.exec(`SELECT * FROM m_fields WHERE schemaId = '${table}'`) ); schema = dbResultsToDBTables( db.exec(`SELECT * FROM m_schema WHERE id = '${table}'`) )[0].rows[0]; } catch (e4) { db.close(); return null; } if (fieldsTables.length == 0) { db.close(); return { schema, cols: [], rows: [] }; } const fields = fieldsTables[0].rows.filter( (f4) => f4.name.length > 0 ); const dbTable = dbResultsToDBTables( db.exec( `SELECT ${fields.reduce((p3, c4) => [...p3, `"${c4.name}"`], []).join(", ")} FROM "${table}"` ) ); db.close(); return dbTableToMDBTable( dbTable[0], schema, schema.primary ? updateFieldsToSchema(fields, tag) : fields ); }; var deleteMDBTable = async (plugin, path, mdb) => { const sqlJS = await plugin.sqlJS(); const buf = await getDBFile(path); if (!buf) { return false; } const db = new sqlJS.Database(new Uint8Array(buf)); deleteFromDB(db, "m_schema", `id = '${sanitizeSQLStatement(mdb)}'`); deleteFromDB(db, "m_schema", `def = '${sanitizeSQLStatement(mdb)}'`); deleteFromDB(db, "m_fields", `schemaId = '${sanitizeSQLStatement(mdb)}'`); dropTable(db, mdb); await saveDBFile(path, db.export().buffer); db.close(); return true; }; var getMDBTableSchemas = async (plugin, path, tag) => { const sqlJS = await plugin.sqlJS(); const buf = await getDBFile(path); if (!buf) { return null; } const db = new sqlJS.Database(new Uint8Array(buf)); await sanitizeTableSchema(plugin, db, path, tag); const tables = db.exec(`SELECT * FROM m_schema`); db.close(); return tables[0].values.map((f4) => { const [id2, name, type, def, predicate, primary] = f4; return { id: id2, name, type, def, predicate, primary }; }); }; var getMDBSchema = async (plugin, path, schema) => { const sqlJS = await plugin.sqlJS(); const buf = await getDBFile(path); if (!buf) { return null; } const db = new sqlJS.Database(new Uint8Array(buf)); const tables = db.exec(`SELECT * FROM m_schema WHERE id='${sanitizeSQLStatement(schema)}'`); db.close(); if (!tables[0] || !tables[0].values[0]) { return null; } return tables[0].values.map((f4) => { const [id2, name, type, def, predicate, primary] = f4; return { id: id2, name, type, def, predicate, primary }; })[0]; }; var saveMDBToPath = async (plugin, path, mdb) => { var _a2, _b2; const sqlJS = await plugin.sqlJS(); const buf = await getDBFile(path); if (!buf) { return null; } const db = new sqlJS.Database(new Uint8Array(buf)); const fieldsTables = dbResultsToDBTables( db.exec(`SELECT * FROM m_fields WHERE schemaId != '${mdb.schema.id}'`) ); const tables = { m_fields: { uniques: fieldSchema.uniques, cols: fieldSchema.cols, rows: [...(_b2 = (_a2 = fieldsTables[0]) == null ? void 0 : _a2.rows) != null ? _b2 : [], ...mdb.cols] }, [mdb.schema.id]: { uniques: mdb.cols.filter((c4) => c4.unique == "true").map((c4) => c4.name), cols: mdb.cols.map((c4) => c4.name), rows: mdb.rows } }; db.close(); return saveDBToPath(plugin, path, tables); }; var optionValuesForColumn = (column, table) => { var _a2; return uniq( (_a2 = table == null ? void 0 : table.rows.reduce((p3, c4) => { return [...p3, ...splitString(c4[column])]; }, [])) != null ? _a2 : [] ); }; var createDefaultDB = async (plugin, path, tag) => { const sqlJS = await plugin.sqlJS(); const table = tag ? defaultTagTables : defaultFolderTables; return saveDBToPath(plugin, path, table); }; var sanitizeTableSchema = async (plugin, db, path, tag) => { const sqlJS = await plugin.sqlJS(); const tableRes = db.exec( `SELECT name FROM sqlite_master WHERE type='table';` ); if (!tableRes[0] || !tableRes[0].values.some((f4) => f4[0] == "m_schema") || !tableRes[0].values.some((f4) => f4[0] == "m_fields") || !tableRes[0].values.some((f4) => f4[0] == "files")) { await createDefaultDB(plugin, path, tag); } }; var newRowByDBRow = (row) => ({ _id: genId(), ...row }); var rowWithID = (row, tag) => { return row._id && row._id.length > 0 ? row : { ...newRowByDBRow({ ...row, _source: tag ? "tag" : "folder" }) }; }; var createNewRow = (mdb, row, index) => { if (index) { return { ...mdb, rows: insert(mdb.rows, index, newRowByDBRow(row)) }; } return { ...mdb, rows: [...mdb.rows, newRowByDBRow(row)] }; }; var consolidateFilesToTable = async (plugin, path, table, files, tag) => { const sqlJS = await plugin.sqlJS(); const isTag = tag ? true : false; let db; if (getAbstractFileAtPath(app, path)) { const buf = await getDBFile(path); db = new sqlJS.Database(new Uint8Array(buf)); } else { db = new sqlJS.Database(); await createDefaultDB(plugin, path, false); } const mdbTable = await getMDBTable(plugin, table, path, isTag); const missingFiles = files.filter((f4) => !mdbTable.rows.some((g4) => g4.File == f4 && g4._source != "")).map((f4) => ({ File: f4 })); const mergeDuplicates = (rows, tag2) => { const mergeFields = (row, row2) => { return { ...row, ...row2 }; }; return rows.reduce((p3, c4) => { const findIndex2 = p3.findIndex((f4) => f4._source != "" && f4.File == c4.File); if (findIndex2 != -1) { return p3.map((f4, i4) => i4 == findIndex2 ? mergeFields(f4, c4) : f4); } return [...p3, c4]; }, []); }; let linkedFolderContexts = [""]; if (tag) { const contexts = uniq( mdbTable.rows.map((f4) => f4._source).filter((f4) => f4 != "" && f4 != "tag") ); const promises = contexts.map( (context) => getMDBTable(plugin, "files", context, false).then((f4) => [f4, context]) ); const results = await Promise.all(promises); linkedFolderContexts.push( ...results.filter(([f4, g4]) => { var _a2, _b2; return (_b2 = (_a2 = f4 == null ? void 0 : f4.schema) == null ? void 0 : _a2.def) == null ? void 0 : _b2.split("&").some((h5) => h5 == tag); }).map(([f4, g4]) => g4) ); } const nonLinkedRows = mdbTable.rows.filter( (f4) => linkedFolderContexts.some((g4) => g4 == f4._source) && !missingFiles.some((g4) => f4.File == g4.File) ); const newRows = [ ...nonLinkedRows, ...[ ...mergeDuplicates( mdbTable.rows.filter( (f4) => (f4._source != "" || missingFiles.some((g4) => f4.File == g4.File)) && files.some((g4) => g4 == f4.File) ), isTag ), ...missingFiles ].map((f4) => rowWithID(f4, isTag)) ]; const newMDBTable = { ...mdbTable, cols: [ ...(isTag ? defaultTagFields : defaultFolderFields).rows, ...mdbTable.cols ].filter(onlyUniqueProp("name")), rows: newRows }; await saveMDBToPath(plugin, path, newMDBTable); db.close(); return newMDBTable; }; var consolidateRowsToTag = async (plugin, path, table, source, rows) => { const sqlJS = await plugin.sqlJS(); if (getAbstractFileAtPath(app, path)) { } else { await createDefaultDB(plugin, path, true); } const mdbTable = await getMDBTable(plugin, table, path, true); const prevRows = mdbTable.rows.map((f4) => { if (f4._source != source) { return f4; } const row = rows.find((g4) => g4._id == f4._sourceId); return row ? { ...f4, File: row["File"] } : f4; }).filter( (f4) => f4._source != source || rows.some((g4) => g4._id == f4._sourceId) ); const missingRows = rows.filter( (f4) => !mdbTable.rows.some((g4) => g4._source == source && g4._sourceId == f4._id) ).map( (f4) => newRowByDBRow({ File: f4.File, _source: source, _sourceId: f4._id }) ); const newRows = [...prevRows, ...missingRows]; const newMDBTable = { ...mdbTable, cols: [...defaultTagFields.rows, ...mdbTable.cols].filter( onlyUniqueProp("name") ), rows: newRows }; await saveMDBToPath(plugin, path, newMDBTable); return newMDBTable; }; // src/components/ContextView/MDBContext.tsx var MDBContext = B({ tables: [], cols: [], sortedColumns: [], data: [], filteredData: [], tableData: null, contextTable: {}, selectedRows: [], selectRows: () => { }, setContextTable: () => { }, predicate: defaultPredicate, savePredicate: () => { }, saveDB: () => null, saveContextDB: () => null, schema: null, dbSchema: null, setSchema: () => { }, setDBSchema: () => { }, dbPath: null, isFolderContext: false, folderPath: "", hideColumn: () => { }, saveColumn: () => false, newColumn: () => false, sortColumn: () => { }, delColumn: () => { }, saveSchema: () => null, deleteSchema: () => null, tagContexts: [], dbFileExists: false, searchString: "", setSearchString: () => { }, loadContextFields: () => { }, updateValue: () => { }, updateFieldValue: () => { } }); var MDBProvider = (props2) => { var _a2, _b2, _c2; const { dbPath } = props2; const [dbFileExists, setDBFileExists] = p2(false); const [schema, setSchema] = p2(null); const [searchString, setSearchString] = p2(null); const [schemaTable, setSchemaTable] = p2(null); const tables = (_a2 = schemaTable == null ? void 0 : schemaTable.rows) != null ? _a2 : []; const [tableData, setTableData] = p2(null); const [dbSchema, setDBSchema] = p2(null); const [contextTable, setContextTable] = p2({}); const [predicate, setPredicate] = p2(defaultPredicate); const [selectedRows, setSelectedRows] = p2([]); const defaultSchema = props2.tag ? defaultTagSchema : defaultFolderSchema; const folderPath = (_c2 = (_b2 = props2.folder) != null ? _b2 : props2.tag) != null ? _c2 : ""; const isFolderContext = props2.folder ? true : false; const tagContexts = F( () => { var _a3, _b3, _c3; return ((_a3 = dbSchema == null ? void 0 : dbSchema.def) == null ? void 0 : _a3.length) > 0 ? (_c3 = (_b3 = dbSchema == null ? void 0 : dbSchema.def) == null ? void 0 : _b3.split("&")) != null ? _c3 : [] : []; }, [dbSchema] ); const cols = F( () => { var _a3; return [ ...(_a3 = tableData == null ? void 0 : tableData.cols.map((f4) => ({ ...f4, table: "" }))) != null ? _a3 : [], ...tagContexts.reduce( (p3, c4) => { var _a4, _b3; return [ ...p3, ...(_b3 = (_a4 = contextTable[c4]) == null ? void 0 : _a4.cols.filter((f4) => f4.name != "File" && f4.type != "fileprop").map((f4) => ({ ...f4, table: c4 }))) != null ? _b3 : [] ]; }, [] ) ]; }, [tableData, schema, contextTable, tagContexts] ); const data = F( () => { var _a3; return (_a3 = tableData == null ? void 0 : tableData.rows.map((r3, index) => linkContextRow({ _index: index.toString(), ...r3, ...tagContexts.reduce((p3, c4) => { var _a4, _b3, _c3, _d2; const contextRowIndexByFile = (_b3 = (_a4 = contextTable[c4]) == null ? void 0 : _a4.rows.findIndex((f4) => f4.File == r3.File)) != null ? _b3 : -1; const contextRowsByFile = (_d2 = (_c3 = contextTable[c4]) == null ? void 0 : _c3.rows[contextRowIndexByFile]) != null ? _d2 : {}; const contextRowsWithKeysAppended = Object.keys( contextRowsByFile ).reduce((pa, ca) => ({ ...pa, [ca + c4]: contextRowsByFile[ca] }), { ["_index" + c4]: contextRowIndexByFile.toString() }); return { ...p3, ...contextRowsWithKeysAppended }; }, {}) }, cols, contextTable))) != null ? _a3 : []; }, [tableData, schema, contextTable] ); const sortedColumns = F( () => { return cols.filter((f4) => f4.hidden != "true" && !predicate.colsHidden.some((c4) => c4 == f4.name + f4.table)).sort( (a5, b4) => predicate.colsOrder.findIndex((x5) => x5 == a5.name + a5.table) - predicate.colsOrder.findIndex((x5) => x5 == b4.name + b4.table) ); }, [cols, predicate] ); const filteredData = F( () => data.filter((f4) => { return predicate.filters.reduce((p3, c4) => { return p3 ? filterReturnForCol( cols.find((col) => col.name + col.table == c4.field), c4, f4 ) : p3; }, true); }).filter( (f4) => (searchString == null ? void 0 : searchString.length) > 0 ? matchAny(searchString).test( Object.keys(f4).filter((g4) => g4.charAt(0) != "_").map((g4) => f4[g4]).join("|") ) : true ).sort((a5, b4) => { return predicate.sort.reduce((p3, c4) => { return p3 == 0 ? sortReturnForCol( cols.find((col) => col.name + col.table == c4.field), c4, a5, b4 ) : p3; }, 0); }), [predicate, data, cols, searchString] ); const deleteSchema = async (table) => { if (table.primary) return; const deleteResult = await deleteMDBTable(props2.plugin, dbPath, table.id); if (deleteResult) { const newSchemaTable = { ...schemaTable, rows: schemaTable.rows.filter( (f4) => f4.id != table.id && f4.def != table.id ) }; setSchemaTable(newSchemaTable); if (dbSchema.id == table.id) { setDBSchema( newSchemaTable.rows.find((g4) => g4.type == "db") ); } } }; const saveSchema = async (table) => { const newSchema = schemaTable.rows.find((f4) => f4.id == table.id) ? true : false; const newSchemaTable = newSchema ? { ...schemaTable, rows: schemaTable.rows.map((f4) => f4.id == table.id ? table : f4) } : { ...schemaTable, rows: [...schemaTable.rows, table] }; await saveDBToPath(props2.plugin, dbPath, { m_schema: newSchemaTable }); if (table.id == (schema == null ? void 0 : schema.id)) { setSchema(table); } if (table.id == (dbSchema == null ? void 0 : dbSchema.id)) { setDBSchema(table); setTableData((f4) => ({ ...f4, schema: table })); } setSchemaTable(newSchemaTable); }; const updateValue = (column, value, table, index, file) => { var _a3, _b3; const col = (_a3 = table == "" ? tableData : contextTable[table]) == null ? void 0 : _a3.cols.find( (f4) => f4.name == column ); if (col) saveFrontmatterValue(props2.plugin, file != null ? file : (_b3 = tableData.rows[index]) == null ? void 0 : _b3.File, column, value, col.type, props2.plugin.settings.saveAllContextToFrontmatter); if (table == "") { saveDB2({ ...tableData, rows: tableData.rows.map( (r3, i4) => i4 == index ? { ...r3, [column]: value } : r3 ) }); } else if (contextTable[table]) { saveContextDB( { ...contextTable[table], rows: contextTable[table].rows.map( (r3, i4) => i4 == index ? { ...r3, [column]: value } : r3 ) }, table ); } }; const sortColumn = (sort) => { savePredicate({ ...predicate, sort: [sort] }); }; const hideColumn = (col, hidden) => { savePredicate({ ...predicate, colsHidden: hidden ? [...predicate.colsHidden.filter((s5) => s5 != col.name + col.table), col.name + col.table] : predicate.colsHidden.filter((s5) => s5 != col.name + col.table) }); }; const updateFieldValue = (column, fieldValue, value, table, index, file) => { var _a3; const col = tableData.cols.find((f4) => f4.name == column); saveFrontmatterValue(props2.plugin, file != null ? file : (_a3 = tableData.rows[index]) == null ? void 0 : _a3.File, column, value, col.type, props2.plugin.settings.saveAllContextToFrontmatter); if (table == "") { const newTable = { ...tableData, cols: tableData.cols.map( (m5) => m5.name == column ? { ...m5, value: fieldValue } : m5 ), rows: tableData.rows.map( (r3, i4) => i4 == index ? { ...r3, [column]: value } : r3 ) }; saveDB2(newTable); } else if (contextTable[table]) { saveContextDB( { ...contextTable[table], cols: contextTable[table].cols.map( (m5) => m5.name == column ? { ...m5, value: fieldValue } : m5 ), rows: contextTable[table].rows.map( (r3, i4) => i4 == index ? { ...r3, [column]: value } : r3 ) }, table ); } }; const syncAllMetadata = (f4) => { const files = f4.rows.map((f5) => f5.File); const importYAML = (files2, fmKeys) => { return files2.map((f5) => getAbstractFileAtPath(app, f5)).filter((f5) => f5).reduce( (p3, c4) => { const fm = frontMatterForFile(c4); if (!fm) return p3; return { uniques: [], cols: uniq([...p3.cols, ...fmKeys]), rows: [ ...p3.rows, { File: c4.path, ...fmKeys.reduce((p4, c5) => { const value = parseFrontMatter(c5, fm[c5], false); if ((value == null ? void 0 : value.length) > 0) return { ...p4, [c5]: value }; return p4; }, {}) } ] }; }, { uniques: [], cols: [], rows: [] } ); }; const yamlTableData = importYAML( files, f4.cols.filter((f5) => !f5.type.contains("file")).map((f5) => f5.name) ); saveDB2({ ...f4, rows: f4.rows.map((r3) => { const fmRow = yamlTableData.rows.find((f5) => f5.File == r3.File); if (fmRow) { return { ...r3, ...fmRow }; } return r3; }) }); }; h2(() => { if (props2.schema && schemaTable && (dbSchema == null ? void 0 : dbSchema.id) != props2.schema) { const preselectSchema = schemaTable.rows.find( (g4) => g4.id == props2.schema ); if (preselectSchema) { if (preselectSchema.type == "db") { setDBSchema(preselectSchema); return; } else { const preselectDBSchema = schemaTable.rows.find( (g4) => g4.id == preselectSchema.def ); if (preselectDBSchema) { setDBSchema(preselectDBSchema); return; } } } else { const newSchema = { id: uniqueNameFromString( sanitizeTableName(props2.schema), schemaTable.rows.map((g4) => g4.id) ), name: props2.schema, type: "db" }; setDBSchema(newSchema); saveSchema(newSchema).then( (f4) => saveDB2({ schema: newSchema, cols: defaultTableFields.map((g4) => ({ ...g4, schemaId: newSchema.id })), rows: [] }) ); } } }, [schemaTable]); const loadTables = async () => { if (getAbstractFileAtPath(app, props2.dbPath)) { setDBFileExists(true); getMDBTableSchemas( props2.plugin, props2.dbPath, props2.tag ? true : false ).then((f4) => { setSchemaTable({ ...defaultSchema, rows: f4 }); if (!props2.schema) setDBSchema(f4 == null ? void 0 : f4.find((g4) => g4.type == "db")); }); } else { if (props2.schema) { saveDB2(props2.tag ? defaultTagMDBTable : defaultFolderMDBTable).then( (f4) => { setSchemaTable(defaultSchema); } ); } else { setSchemaTable(defaultSchema); setDBSchema(defaultFileDBSchema); } } }; const refreshTags = async (evt) => { if (!dbFileExists) { loadDefaultTableData(); } else { if (dbSchema.primary) { runDef(); } else { getMDBData(); } } }; const refreshSpace = async (evt) => { if (!dbFileExists) { loadDefaultTableData(); } }; const getMDBData = () => { getMDBTable(props2.plugin, dbSchema.id, dbPath, !isFolderContext).then( (f4) => setTableData(f4) ); }; const refreshSchema = (schema2) => { }; const refreshMDB = async (evt) => { if (!dbFileExists || (dbSchema == null ? void 0 : dbSchema.primary) != "true") { return; } if (evt.detail.dbPath == dbPath) { if (dbSchema) { if (schema) getMDBSchema(props2.plugin, dbPath, schema.id).then((f4) => { if (f4) { setSchema(f4); const newSchemaTable = { ...schemaTable, rows: schemaTable.rows.map((s5) => s5.id == f4.id ? f4 : s5) }; setSchemaTable(newSchemaTable); } }); getMDBTable(props2.plugin, dbSchema.id, dbPath, !isFolderContext).then( (f4) => setTableData(f4) ); } } else { const tag = Object.keys(contextTable).find( (t4) => tagContextFromTag(props2.plugin, t4) == evt.detail.dbPath ); if (tag) loadContextFields(tag); } }; h2(() => { window.addEventListener(eventTypes.mdbChange, refreshMDB); window.addEventListener(eventTypes.spacesChange, refreshSpace); window.addEventListener(eventTypes.tagsChange, refreshTags); return () => { window.removeEventListener(eventTypes.mdbChange, refreshMDB); window.removeEventListener(eventTypes.spacesChange, refreshSpace); window.removeEventListener(eventTypes.tagsChange, refreshTags); }; }, [contextTable, dbSchema, dbPath, schema]); h2(() => { loadTables(); }, [dbPath]); const saveDB2 = async (newTable) => { var _a3; if (!dbFileExists) { const defaultFields = isFolderContext ? defaultFolderFields : defaultTagFields; const defaultTable = isFolderContext ? defaultFolderTables : defaultTagTables; const dbField = { ...defaultTable, m_fields: { uniques: defaultFields.uniques, cols: defaultFields.cols, rows: [...(_a3 = defaultFields.rows) != null ? _a3 : [], ...newTable.cols] }, [newTable.schema.id]: { uniques: newTable.cols.filter((c4) => c4.unique == "true").map((c4) => c4.name), cols: newTable.cols.map((c4) => c4.name), rows: newTable.rows } }; await saveDBToPath(props2.plugin, dbPath, dbField).then((f4) => { setDBFileExists(true); f4 ? setTableData(newTable) : new import_obsidian6.Notice("DB ERROR"); }); } else { await saveMDBToPath(props2.plugin, dbPath, newTable).then((f4) => { setDBFileExists(true); f4 ? setTableData(newTable) : new import_obsidian6.Notice("DB ERROR"); }); } }; h2(() => { var _a3; if (!schemaTable || !dbSchema) return; const _schema = (schema == null ? void 0 : schema.def) == dbSchema.id ? schema : (_a3 = schemaTable.rows.find((f4) => f4.def == dbSchema.id)) != null ? _a3 : { ...dbSchema, id: uniqueNameFromString( dbSchema.id + "View", schemaTable.rows.map((f4) => f4.id) ), type: "table", def: dbSchema.id }; if (_schema) { setSchema(_schema); if (dbFileExists) { if (dbSchema.primary) { runDef(); } else { getMDBData(); } } else { loadDefaultTableData(); } } }, [dbSchema]); h2(() => { if (dbFileExists) parsePredicate(schema == null ? void 0 : schema.predicate); }, [schema]); h2(() => { if (dbFileExists && tableData) getContextTags(tableData); }, [tableData]); const selectRows = (lastSelected, rows) => { if (lastSelected) { const path = tableData.rows[parseInt(lastSelected)].File; let evt = new CustomEvent(eventTypes.selectedFileChange, { detail: { filePath: path } }); window.dispatchEvent(evt); } else { let evt = new CustomEvent(eventTypes.selectedFileChange, { detail: { filePath: null } }); window.dispatchEvent(evt); } setSelectedRows(rows); }; const loadDefaultTableData = () => { let files; if (props2.folder) { files = folderChildren( props2.plugin, getAbstractFileAtPath(props2.plugin.app, props2.folder) ); setTableData({ ...isFolderContext ? defaultFolderMDBTable : defaultTagMDBTable, rows: files.map( (f4) => newRowByDBRow({ _source: "folder", File: f4.path }) ) }); } else if (props2.tag) { files = getAllFilesForTag(props2.tag).map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4); setTableData({ ...isFolderContext ? defaultFolderMDBTable : defaultTagMDBTable, rows: files.map((f4) => newRowByDBRow({ _source: "tag", File: f4.path })) }); } }; const getContextTags = async (_tableData) => { const contextFields = _tableData.cols.filter((f4) => f4.type.contains("context")).map((f4) => f4.value).filter((f4) => !tagContexts.some((g4) => g4 == f4)); for (let c4 of contextFields) { loadContextFields(c4); } }; const runDef = async () => { let files; if (props2.folder) { files = folderChildren( props2.plugin, getAbstractFileAtPath(props2.plugin.app, props2.folder) ); consolidateFilesToTable( props2.plugin, dbPath, dbSchema.id, files.map((f4) => f4.path) ).then((f4) => { for (let c4 of tagContexts) { loadTagContext(c4, f4.rows); } setTableData(f4); return f4; }).then((f4) => syncAllMetadata(f4)); } else if (props2.tag) { files = getAllFilesForTag(props2.tag).map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4); consolidateFilesToTable( props2.plugin, dbPath, dbSchema.id, files.map((f4) => f4.path), props2.tag ).then((f4) => { for (let c4 of tagContexts) { loadTagContext(c4, f4.rows); } setTableData(f4); return f4; }).then((f4) => syncAllMetadata(f4)); } }; const loadTagContext = async (tag, files) => { consolidateRowsToTag( props2.plugin, tagContextFromTag(props2.plugin, tag), dbSchema.id, dbPath, files ).then((f4) => { if (f4) { const contextFields = f4.cols.filter((g4) => g4.type.contains("context")).map((g4) => g4.value).filter((g4) => !tagContexts.some((h5) => h5 == g4)); for (let c4 of contextFields) { loadContextFields(c4); } setContextTable((t4) => ({ ...t4, [tag]: f4 })); } }); }; const loadContextFields = async (tag) => { getMDBTable( props2.plugin, "files", tagContextFromTag(props2.plugin, tag), true ).then((f4) => { setContextTable((t4) => ({ ...t4, [tag]: f4 })); }); }; const tagExists = (currentCache, findTag) => { let currentTags = []; if ((0, import_obsidian6.getAllTags)(currentCache)) { currentTags = (0, import_obsidian6.getAllTags)(currentCache); } return currentTags.find((tag) => tag.toLowerCase() == findTag.toLowerCase()) ? true : false; }; const getAllFilesForTag = (tag) => { let tagsCache = []; (() => { app.vault.getMarkdownFiles().forEach((tfile) => { let currentCache; if (app.metadataCache.getFileCache(tfile) !== null) { currentCache = app.metadataCache.getFileCache(tfile); } let relativePath = tfile.path; const hasTag = tagExists(currentCache, tag); if (hasTag) { tagsCache.push(relativePath); } }); })(); return tagsCache; }; const saveContextDB = async (newTable, context) => { const dbPath2 = tagContextFromTag(props2.plugin, context); await saveMDBToPath(props2.plugin, dbPath2, newTable).then( (f4) => f4 && setContextTable((t4) => ({ ...t4, [context]: newTable })) ); }; const savePredicate = (newPredicate) => { const cleanedPredicate = validatePredicate(newPredicate); saveSchema({ ...schema, predicate: JSON.stringify(cleanedPredicate) }); setPredicate(cleanedPredicate); }; h2(() => { setPredicate((p3) => ({ ...p3, colsOrder: uniq([ ...p3.colsOrder, ...cols.filter((f4) => f4.hidden != "true").map((c4) => c4.name + c4.table) ]) })); }, [cols]); const parsePredicate = (predicateStr) => { const newPredicate = safelyParseJSON(predicateStr); setPredicate(validatePredicate(newPredicate)); }; const delColumn = (column) => { let mdbtable; const table = column.table; if (table == "") { mdbtable = tableData; } else if (contextTable[table]) { mdbtable = contextTable[table]; } const newFields = mdbtable.cols.filter( (f4, i4) => f4.name != column.name ); const newTable = { ...mdbtable, cols: newFields, rows: mdbtable.rows.map((r3) => { const { [column.name]: val, ...rest } = r3; return rest; }) }; if (table == "") { saveDB2(newTable); } else if (contextTable[table]) { saveContextDB(newTable, table); } }; const newColumn = (col) => { return saveColumn(col); }; const saveColumn = (newColumn2, oldColumn) => { let mdbtable; const column = { ...newColumn2, name: sanitizeColumnName(newColumn2.name) }; const table = column.table; if (table == "") { mdbtable = tableData; } else if (contextTable[table]) { mdbtable = contextTable[table]; } if (column.name == "") { new import_obsidian6.Notice(i18n_default.notice.noPropertyName); return false; } if (!oldColumn && mdbtable.cols.find( (f4) => f4.name.toLowerCase() == column.name.toLowerCase() ) || oldColumn && oldColumn.name != column.name && mdbtable.cols.find( (f4) => f4.name.toLowerCase() == column.name.toLowerCase() )) { new import_obsidian6.Notice(i18n_default.notice.duplicatePropertyName); return false; } const oldFieldIndex = oldColumn ? mdbtable.cols.findIndex((f4) => f4.name == oldColumn.name) : -1; const newFields = oldFieldIndex == -1 ? [...mdbtable.cols, column] : mdbtable.cols.map((f4, i4) => i4 == oldFieldIndex ? column : f4); const newTable = { ...mdbtable, cols: newFields, rows: mdbtable.rows.map( (f4) => oldColumn ? { ...f4, [column.name]: f4[oldColumn.name], oldColumn: void 0 } : f4 ) }; if (oldColumn) savePredicate({ filters: predicate.filters.map( (f4) => f4.field == oldColumn.name + oldColumn.table ? { ...f4, field: column.name + column.table } : f4 ), sort: predicate.sort.map( (f4) => f4.field == oldColumn.name + oldColumn.table ? { ...f4, field: column.name + column.table } : f4 ), groupBy: predicate.groupBy.map( (f4) => f4 == oldColumn.name + oldColumn.table ? column.name + column.table : f4 ), colsHidden: predicate.colsHidden.map( (f4) => f4 == oldColumn.name + oldColumn.table ? column.name + column.table : f4 ), colsOrder: predicate.colsOrder.map( (f4) => f4 == oldColumn.name + oldColumn.table ? column.name + column.table : f4 ), colsSize: { ...predicate.colsSize, [column.name + column.table]: predicate.colsSize[oldColumn.name + oldColumn.table], [oldColumn.name + oldColumn.table]: void 0 } }); if (table == "") { syncAllMetadata(newTable); } else if (contextTable[table]) { saveContextDB(newTable, table); } return true; }; return /* @__PURE__ */ bn.createElement(MDBContext.Provider, { value: { data, filteredData, loadContextFields, selectedRows, selectRows, tableData, cols, sortedColumns, contextTable, setContextTable, predicate, savePredicate, saveDB: saveDB2, saveContextDB, schema, dbPath, saveColumn, hideColumn, sortColumn, delColumn, newColumn, tagContexts, tables, setSchema, saveSchema, deleteSchema, dbFileExists, dbSchema, searchString, setSearchString, folderPath, isFolderContext, setDBSchema, updateValue, updateFieldValue } }, props2.children); }; // src/components/ContextView/CardsView/CardView.tsx var import_classnames = __toESM(require_classnames()); // src/components/FlowEditor/FlowView.tsx var FlowView = (props2) => { const ref = _2(null); const loadFile = async () => { const div = ref.current; const [link, refStr] = parseOutReferences(props2.path); const type = viewTypeByString(link); const portalType = type == "tag" || type == "folder" ? "context" : "doc"; const leaf = await spawnLeafFromFile(props2.plugin, link, div, portalType, refStr, props2.from, props2.to); }; const toggleFlow = () => { if (props2.load) { loadFile(); } else { ref.current.empty(); } }; h2(() => { toggleFlow(); }, [props2.load, props2.path, props2.from, props2.to]); return /* @__PURE__ */ bn.createElement("div", { className: "mk-flowspace-editor", ref }); }; // node_modules/@tanstack/table-core/build/lib/index.mjs function functionalUpdate(updater, input) { return typeof updater === "function" ? updater(input) : updater; } function makeStateUpdater(key2, instance) { return (updater) => { instance.setState((old) => { return { ...old, [key2]: functionalUpdate(updater, old[key2]) }; }); }; } function isFunction(d5) { return d5 instanceof Function; } function flattenBy(arr, getChildren) { const flat = []; const recurse = (subArr) => { subArr.forEach((item) => { flat.push(item); const children = getChildren(item); if (children == null ? void 0 : children.length) { recurse(children); } }); }; recurse(arr); return flat; } function memo(getDeps, fn2, opts) { let deps = []; let result; return () => { var _a2; let depTime; if (opts.key && opts.debug) depTime = Date.now(); const newDeps = getDeps(); const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep); if (!depsChanged) { return result; } deps = newDeps; let resultTime; if (opts.key && opts.debug) resultTime = Date.now(); result = fn2(...newDeps); (_a2 = opts == null ? void 0 : opts.onChange) == null ? void 0 : _a2.call(opts, result); if (opts.key && opts.debug) { if (opts == null ? void 0 : opts.debug()) { const depEndTime = Math.round((Date.now() - depTime) * 100) / 100; const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100; const resultFpsPercentage = resultEndTime / 16; const pad = (str, num) => { str = String(str); while (str.length < num) { str = " " + str; } return str; }; console.info(`%c\u23F1 ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, ` font-size: .6rem; font-weight: bold; color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key); } } return result; }; } function createColumn(table, columnDef, depth, parent) { var _ref, _resolvedColumnDef$id; const defaultColumn = table._getDefaultColumnDef(); const resolvedColumnDef = { ...defaultColumn, ...columnDef }; const accessorKey = resolvedColumnDef.accessorKey; let id2 = (_ref = (_resolvedColumnDef$id = resolvedColumnDef.id) != null ? _resolvedColumnDef$id : accessorKey ? accessorKey.replace(".", "_") : void 0) != null ? _ref : typeof resolvedColumnDef.header === "string" ? resolvedColumnDef.header : void 0; let accessorFn; if (resolvedColumnDef.accessorFn) { accessorFn = resolvedColumnDef.accessorFn; } else if (accessorKey) { if (accessorKey.includes(".")) { accessorFn = (originalRow) => { let result = originalRow; for (const key2 of accessorKey.split(".")) { result = result[key2]; if (result === void 0) { throw new Error(`"${key2}" in deeply nested key "${accessorKey}" returned undefined.`); } } return result; }; } else { accessorFn = (originalRow) => originalRow[resolvedColumnDef.accessorKey]; } } if (!id2) { if (true) { throw new Error(resolvedColumnDef.accessorFn ? `Columns require an id when using an accessorFn` : `Columns require an id when using a non-string header`); } throw new Error(); } let column = { id: `${String(id2)}`, accessorFn, parent, depth, columnDef: resolvedColumnDef, columns: [], getFlatColumns: memo(() => [true], () => { var _a2; return [column, ...(_a2 = column.columns) == null ? void 0 : _a2.flatMap((d5) => d5.getFlatColumns())]; }, { key: false, debug: () => { var _table$options$debugA; return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugColumns; } }), getLeafColumns: memo(() => [table._getOrderColumnsFn()], (orderColumns2) => { var _a2; if ((_a2 = column.columns) == null ? void 0 : _a2.length) { let leafColumns = column.columns.flatMap((column2) => column2.getLeafColumns()); return orderColumns2(leafColumns); } return [column]; }, { key: false, debug: () => { var _table$options$debugA2; return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugColumns; } }) }; column = table._features.reduce((obj, feature) => { var _a2; return Object.assign(obj, (_a2 = feature.createColumn) == null ? void 0 : _a2.call(feature, column, table)); }, column); return column; } function createHeader(table, column, options) { var _options$id; const id2 = (_options$id = options.id) != null ? _options$id : column.id; let header = { id: id2, column, index: options.index, isPlaceholder: !!options.isPlaceholder, placeholderId: options.placeholderId, depth: options.depth, subHeaders: [], colSpan: 0, rowSpan: 0, headerGroup: null, getLeafHeaders: () => { const leafHeaders = []; const recurseHeader = (h5) => { if (h5.subHeaders && h5.subHeaders.length) { h5.subHeaders.map(recurseHeader); } leafHeaders.push(h5); }; recurseHeader(header); return leafHeaders; }, getContext: () => ({ table, header, column }) }; table._features.forEach((feature) => { var _a2; Object.assign(header, (_a2 = feature.createHeader) == null ? void 0 : _a2.call(feature, header, table)); }); return header; } var Headers = { createTable: (table) => { return { getHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => { var _left$map$filter, _right$map$filter; const leftColumns = (_left$map$filter = left == null ? void 0 : left.map((columnId) => leafColumns.find((d5) => d5.id === columnId)).filter(Boolean)) != null ? _left$map$filter : []; const rightColumns = (_right$map$filter = right == null ? void 0 : right.map((columnId) => leafColumns.find((d5) => d5.id === columnId)).filter(Boolean)) != null ? _right$map$filter : []; const centerColumns = leafColumns.filter((column) => !(left == null ? void 0 : left.includes(column.id)) && !(right == null ? void 0 : right.includes(column.id))); const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], table); return headerGroups; }, { key: "getHeaderGroups", debug: () => { var _table$options$debugA; return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugHeaders; } }), getCenterHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => { leafColumns = leafColumns.filter((column) => !(left == null ? void 0 : left.includes(column.id)) && !(right == null ? void 0 : right.includes(column.id))); return buildHeaderGroups(allColumns, leafColumns, table, "center"); }, { key: "getCenterHeaderGroups", debug: () => { var _table$options$debugA2; return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugHeaders; } }), getLeftHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left], (allColumns, leafColumns, left) => { var _left$map$filter2; const orderedLeafColumns = (_left$map$filter2 = left == null ? void 0 : left.map((columnId) => leafColumns.find((d5) => d5.id === columnId)).filter(Boolean)) != null ? _left$map$filter2 : []; return buildHeaderGroups(allColumns, orderedLeafColumns, table, "left"); }, { key: "getLeftHeaderGroups", debug: () => { var _table$options$debugA3; return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugHeaders; } }), getRightHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.right], (allColumns, leafColumns, right) => { var _right$map$filter2; const orderedLeafColumns = (_right$map$filter2 = right == null ? void 0 : right.map((columnId) => leafColumns.find((d5) => d5.id === columnId)).filter(Boolean)) != null ? _right$map$filter2 : []; return buildHeaderGroups(allColumns, orderedLeafColumns, table, "right"); }, { key: "getRightHeaderGroups", debug: () => { var _table$options$debugA4; return (_table$options$debugA4 = table.options.debugAll) != null ? _table$options$debugA4 : table.options.debugHeaders; } }), getFooterGroups: memo(() => [table.getHeaderGroups()], (headerGroups) => { return [...headerGroups].reverse(); }, { key: "getFooterGroups", debug: () => { var _table$options$debugA5; return (_table$options$debugA5 = table.options.debugAll) != null ? _table$options$debugA5 : table.options.debugHeaders; } }), getLeftFooterGroups: memo(() => [table.getLeftHeaderGroups()], (headerGroups) => { return [...headerGroups].reverse(); }, { key: "getLeftFooterGroups", debug: () => { var _table$options$debugA6; return (_table$options$debugA6 = table.options.debugAll) != null ? _table$options$debugA6 : table.options.debugHeaders; } }), getCenterFooterGroups: memo(() => [table.getCenterHeaderGroups()], (headerGroups) => { return [...headerGroups].reverse(); }, { key: "getCenterFooterGroups", debug: () => { var _table$options$debugA7; return (_table$options$debugA7 = table.options.debugAll) != null ? _table$options$debugA7 : table.options.debugHeaders; } }), getRightFooterGroups: memo(() => [table.getRightHeaderGroups()], (headerGroups) => { return [...headerGroups].reverse(); }, { key: "getRightFooterGroups", debug: () => { var _table$options$debugA8; return (_table$options$debugA8 = table.options.debugAll) != null ? _table$options$debugA8 : table.options.debugHeaders; } }), getFlatHeaders: memo(() => [table.getHeaderGroups()], (headerGroups) => { return headerGroups.map((headerGroup) => { return headerGroup.headers; }).flat(); }, { key: "getFlatHeaders", debug: () => { var _table$options$debugA9; return (_table$options$debugA9 = table.options.debugAll) != null ? _table$options$debugA9 : table.options.debugHeaders; } }), getLeftFlatHeaders: memo(() => [table.getLeftHeaderGroups()], (left) => { return left.map((headerGroup) => { return headerGroup.headers; }).flat(); }, { key: "getLeftFlatHeaders", debug: () => { var _table$options$debugA10; return (_table$options$debugA10 = table.options.debugAll) != null ? _table$options$debugA10 : table.options.debugHeaders; } }), getCenterFlatHeaders: memo(() => [table.getCenterHeaderGroups()], (left) => { return left.map((headerGroup) => { return headerGroup.headers; }).flat(); }, { key: "getCenterFlatHeaders", debug: () => { var _table$options$debugA11; return (_table$options$debugA11 = table.options.debugAll) != null ? _table$options$debugA11 : table.options.debugHeaders; } }), getRightFlatHeaders: memo(() => [table.getRightHeaderGroups()], (left) => { return left.map((headerGroup) => { return headerGroup.headers; }).flat(); }, { key: "getRightFlatHeaders", debug: () => { var _table$options$debugA12; return (_table$options$debugA12 = table.options.debugAll) != null ? _table$options$debugA12 : table.options.debugHeaders; } }), getCenterLeafHeaders: memo(() => [table.getCenterFlatHeaders()], (flatHeaders) => { return flatHeaders.filter((header) => { var _a2; return !((_a2 = header.subHeaders) == null ? void 0 : _a2.length); }); }, { key: "getCenterLeafHeaders", debug: () => { var _table$options$debugA13; return (_table$options$debugA13 = table.options.debugAll) != null ? _table$options$debugA13 : table.options.debugHeaders; } }), getLeftLeafHeaders: memo(() => [table.getLeftFlatHeaders()], (flatHeaders) => { return flatHeaders.filter((header) => { var _a2; return !((_a2 = header.subHeaders) == null ? void 0 : _a2.length); }); }, { key: "getLeftLeafHeaders", debug: () => { var _table$options$debugA14; return (_table$options$debugA14 = table.options.debugAll) != null ? _table$options$debugA14 : table.options.debugHeaders; } }), getRightLeafHeaders: memo(() => [table.getRightFlatHeaders()], (flatHeaders) => { return flatHeaders.filter((header) => { var _a2; return !((_a2 = header.subHeaders) == null ? void 0 : _a2.length); }); }, { key: "getRightLeafHeaders", debug: () => { var _table$options$debugA15; return (_table$options$debugA15 = table.options.debugAll) != null ? _table$options$debugA15 : table.options.debugHeaders; } }), getLeafHeaders: memo(() => [table.getLeftHeaderGroups(), table.getCenterHeaderGroups(), table.getRightHeaderGroups()], (left, center, right) => { var _a2, _b2, _c2; var _left$0$headers, _center$0$headers, _right$0$headers; return [...(_left$0$headers = (_a2 = left[0]) == null ? void 0 : _a2.headers) != null ? _left$0$headers : [], ...(_center$0$headers = (_b2 = center[0]) == null ? void 0 : _b2.headers) != null ? _center$0$headers : [], ...(_right$0$headers = (_c2 = right[0]) == null ? void 0 : _c2.headers) != null ? _right$0$headers : []].map((header) => { return header.getLeafHeaders(); }).flat(); }, { key: "getLeafHeaders", debug: () => { var _table$options$debugA16; return (_table$options$debugA16 = table.options.debugAll) != null ? _table$options$debugA16 : table.options.debugHeaders; } }) }; } }; function buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) { var _a2; var _headerGroups$0$heade; let maxDepth = 0; const findMaxDepth = function(columns, depth) { if (depth === void 0) { depth = 1; } maxDepth = Math.max(maxDepth, depth); columns.filter((column) => column.getIsVisible()).forEach((column) => { var _a3; if ((_a3 = column.columns) == null ? void 0 : _a3.length) { findMaxDepth(column.columns, depth + 1); } }, 0); }; findMaxDepth(allColumns); let headerGroups = []; const createHeaderGroup = (headersToGroup, depth) => { const headerGroup = { depth, id: [headerFamily, `${depth}`].filter(Boolean).join("_"), headers: [] }; const pendingParentHeaders = []; headersToGroup.forEach((headerToGroup) => { const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0]; const isLeafHeader = headerToGroup.column.depth === headerGroup.depth; let column; let isPlaceholder = false; if (isLeafHeader && headerToGroup.column.parent) { column = headerToGroup.column.parent; } else { column = headerToGroup.column; isPlaceholder = true; } if (latestPendingParentHeader && (latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) { latestPendingParentHeader.subHeaders.push(headerToGroup); } else { const header = createHeader(table, column, { id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join("_"), isPlaceholder, placeholderId: isPlaceholder ? `${pendingParentHeaders.filter((d5) => d5.column === column).length}` : void 0, depth, index: pendingParentHeaders.length }); header.subHeaders.push(headerToGroup); pendingParentHeaders.push(header); } headerGroup.headers.push(headerToGroup); headerToGroup.headerGroup = headerGroup; }); headerGroups.push(headerGroup); if (depth > 0) { createHeaderGroup(pendingParentHeaders, depth - 1); } }; const bottomHeaders = columnsToGroup.map((column, index) => createHeader(table, column, { depth: maxDepth, index })); createHeaderGroup(bottomHeaders, maxDepth - 1); headerGroups.reverse(); const recurseHeadersForSpans = (headers) => { const filteredHeaders = headers.filter((header) => header.column.getIsVisible()); return filteredHeaders.map((header) => { let colSpan = 0; let rowSpan = 0; let childRowSpans = [0]; if (header.subHeaders && header.subHeaders.length) { childRowSpans = []; recurseHeadersForSpans(header.subHeaders).forEach((_ref) => { let { colSpan: childColSpan, rowSpan: childRowSpan } = _ref; colSpan += childColSpan; childRowSpans.push(childRowSpan); }); } else { colSpan = 1; } const minChildRowSpan = Math.min(...childRowSpans); rowSpan = rowSpan + minChildRowSpan; header.colSpan = colSpan; header.rowSpan = rowSpan; return { colSpan, rowSpan }; }); }; recurseHeadersForSpans((_headerGroups$0$heade = (_a2 = headerGroups[0]) == null ? void 0 : _a2.headers) != null ? _headerGroups$0$heade : []); return headerGroups; } var defaultColumnSizing = { size: 150, minSize: 20, maxSize: Number.MAX_SAFE_INTEGER }; var getDefaultColumnSizingInfoState = () => ({ startOffset: null, startSize: null, deltaOffset: null, deltaPercentage: null, isResizingColumn: false, columnSizingStart: [] }); var ColumnSizing = { getDefaultColumnDef: () => { return defaultColumnSizing; }, getInitialState: (state) => { return { columnSizing: {}, columnSizingInfo: getDefaultColumnSizingInfoState(), ...state }; }, getDefaultOptions: (table) => { return { columnResizeMode: "onEnd", onColumnSizingChange: makeStateUpdater("columnSizing", table), onColumnSizingInfoChange: makeStateUpdater("columnSizingInfo", table) }; }, createColumn: (column, table) => { return { getSize: () => { var _column$columnDef$min, _ref, _column$columnDef$max; const columnSize = table.getState().columnSizing[column.id]; return Math.min(Math.max((_column$columnDef$min = column.columnDef.minSize) != null ? _column$columnDef$min : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.columnDef.size) != null ? _ref : defaultColumnSizing.size), (_column$columnDef$max = column.columnDef.maxSize) != null ? _column$columnDef$max : defaultColumnSizing.maxSize); }, getStart: (position) => { const columns = !position ? table.getVisibleLeafColumns() : position === "left" ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns(); const index = columns.findIndex((d5) => d5.id === column.id); if (index > 0) { const prevSiblingColumn = columns[index - 1]; return prevSiblingColumn.getStart(position) + prevSiblingColumn.getSize(); } return 0; }, resetSize: () => { table.setColumnSizing((_ref2) => { let { [column.id]: _5, ...rest } = _ref2; return rest; }); }, getCanResize: () => { var _column$columnDef$ena, _table$options$enable; return ((_column$columnDef$ena = column.columnDef.enableResizing) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnResizing) != null ? _table$options$enable : true); }, getIsResizing: () => { return table.getState().columnSizingInfo.isResizingColumn === column.id; } }; }, createHeader: (header, table) => { return { getSize: () => { let sum2 = 0; const recurse = (header2) => { if (header2.subHeaders.length) { header2.subHeaders.forEach(recurse); } else { var _header$column$getSiz; sum2 += (_header$column$getSiz = header2.column.getSize()) != null ? _header$column$getSiz : 0; } }; recurse(header); return sum2; }, getStart: () => { if (header.index > 0) { const prevSiblingHeader = header.headerGroup.headers[header.index - 1]; return prevSiblingHeader.getStart() + prevSiblingHeader.getSize(); } return 0; }, getResizeHandler: () => { const column = table.getColumn(header.column.id); const canResize = column.getCanResize(); return (e4) => { var _a2; if (!canResize) { return; } (_a2 = e4.persist) == null ? void 0 : _a2.call(e4); if (isTouchStartEvent(e4)) { if (e4.touches && e4.touches.length > 1) { return; } } const startSize = header.getSize(); const columnSizingStart = header ? header.getLeafHeaders().map((d5) => [d5.column.id, d5.column.getSize()]) : [[column.id, column.getSize()]]; const clientX = isTouchStartEvent(e4) ? Math.round(e4.touches[0].clientX) : e4.clientX; const newColumnSizing = {}; const updateOffset = (eventType, clientXPos) => { if (typeof clientXPos !== "number") { return; } table.setColumnSizingInfo((old) => { var _old$startOffset, _old$startSize; const deltaOffset = clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0); const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999); old.columnSizingStart.forEach((_ref3) => { let [columnId, headerSize] = _ref3; newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100; }); return { ...old, deltaOffset, deltaPercentage }; }); if (table.options.columnResizeMode === "onChange" || eventType === "end") { table.setColumnSizing((old) => ({ ...old, ...newColumnSizing })); } }; const onMove = (clientXPos) => updateOffset("move", clientXPos); const onEnd = (clientXPos) => { updateOffset("end", clientXPos); table.setColumnSizingInfo((old) => ({ ...old, isResizingColumn: false, startOffset: null, startSize: null, deltaOffset: null, deltaPercentage: null, columnSizingStart: [] })); }; const mouseEvents = { moveHandler: (e5) => onMove(e5.clientX), upHandler: (e5) => { document.removeEventListener("mousemove", mouseEvents.moveHandler); document.removeEventListener("mouseup", mouseEvents.upHandler); onEnd(e5.clientX); } }; const touchEvents = { moveHandler: (e5) => { if (e5.cancelable) { e5.preventDefault(); e5.stopPropagation(); } onMove(e5.touches[0].clientX); return false; }, upHandler: (e5) => { var _a3; document.removeEventListener("touchmove", touchEvents.moveHandler); document.removeEventListener("touchend", touchEvents.upHandler); if (e5.cancelable) { e5.preventDefault(); e5.stopPropagation(); } onEnd((_a3 = e5.touches[0]) == null ? void 0 : _a3.clientX); } }; const passiveIfSupported = passiveEventSupported() ? { passive: false } : false; if (isTouchStartEvent(e4)) { document.addEventListener("touchmove", touchEvents.moveHandler, passiveIfSupported); document.addEventListener("touchend", touchEvents.upHandler, passiveIfSupported); } else { document.addEventListener("mousemove", mouseEvents.moveHandler, passiveIfSupported); document.addEventListener("mouseup", mouseEvents.upHandler, passiveIfSupported); } table.setColumnSizingInfo((old) => ({ ...old, startOffset: clientX, startSize, deltaOffset: 0, deltaPercentage: 0, columnSizingStart, isResizingColumn: column.id })); }; } }; }, createTable: (table) => { return { setColumnSizing: (updater) => { var _a2, _b2; return (_b2 = (_a2 = table.options).onColumnSizingChange) == null ? void 0 : _b2.call(_a2, updater); }, setColumnSizingInfo: (updater) => { var _a2, _b2; return (_b2 = (_a2 = table.options).onColumnSizingInfoChange) == null ? void 0 : _b2.call(_a2, updater); }, resetColumnSizing: (defaultState) => { var _table$initialState$c; table.setColumnSizing(defaultState ? {} : (_table$initialState$c = table.initialState.columnSizing) != null ? _table$initialState$c : {}); }, resetHeaderSizeInfo: (defaultState) => { var _table$initialState$c2; table.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_table$initialState$c2 = table.initialState.columnSizingInfo) != null ? _table$initialState$c2 : getDefaultColumnSizingInfoState()); }, getTotalSize: () => { var _a2; var _table$getHeaderGroup; return (_table$getHeaderGroup = (_a2 = table.getHeaderGroups()[0]) == null ? void 0 : _a2.headers.reduce((sum2, header) => { return sum2 + header.getSize(); }, 0)) != null ? _table$getHeaderGroup : 0; }, getLeftTotalSize: () => { var _a2; var _table$getLeftHeaderG; return (_table$getLeftHeaderG = (_a2 = table.getLeftHeaderGroups()[0]) == null ? void 0 : _a2.headers.reduce((sum2, header) => { return sum2 + header.getSize(); }, 0)) != null ? _table$getLeftHeaderG : 0; }, getCenterTotalSize: () => { var _a2; var _table$getCenterHeade; return (_table$getCenterHeade = (_a2 = table.getCenterHeaderGroups()[0]) == null ? void 0 : _a2.headers.reduce((sum2, header) => { return sum2 + header.getSize(); }, 0)) != null ? _table$getCenterHeade : 0; }, getRightTotalSize: () => { var _a2; var _table$getRightHeader; return (_table$getRightHeader = (_a2 = table.getRightHeaderGroups()[0]) == null ? void 0 : _a2.headers.reduce((sum2, header) => { return sum2 + header.getSize(); }, 0)) != null ? _table$getRightHeader : 0; } }; } }; var passiveSupported = null; function passiveEventSupported() { if (typeof passiveSupported === "boolean") return passiveSupported; let supported = false; try { const options = { get passive() { supported = true; return false; } }; const noop2 = () => { }; window.addEventListener("test", noop2, options); window.removeEventListener("test", noop2); } catch (err) { supported = false; } passiveSupported = supported; return passiveSupported; } function isTouchStartEvent(e4) { return e4.type === "touchstart"; } var Expanding = { getInitialState: (state) => { return { expanded: {}, ...state }; }, getDefaultOptions: (table) => { return { onExpandedChange: makeStateUpdater("expanded", table), paginateExpandedRows: true }; }, createTable: (table) => { let registered = false; let queued = false; return { _autoResetExpanded: () => { var _ref, _table$options$autoRe; if (!registered) { table._queue(() => { registered = true; }); return; } if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) { if (queued) return; queued = true; table._queue(() => { table.resetExpanded(); queued = false; }); } }, setExpanded: (updater) => { var _a2, _b2; return (_b2 = (_a2 = table.options).onExpandedChange) == null ? void 0 : _b2.call(_a2, updater); }, toggleAllRowsExpanded: (expanded) => { if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) { table.setExpanded(true); } else { table.setExpanded({}); } }, resetExpanded: (defaultState) => { var _a2; var _table$initialState$e; table.setExpanded(defaultState ? {} : (_table$initialState$e = (_a2 = table.initialState) == null ? void 0 : _a2.expanded) != null ? _table$initialState$e : {}); }, getCanSomeRowsExpand: () => { return table.getRowModel().flatRows.some((row) => row.getCanExpand()); }, getToggleAllRowsExpandedHandler: () => { return (e4) => { var _a2; (_a2 = e4.persist) == null ? void 0 : _a2.call(e4); table.toggleAllRowsExpanded(); }; }, getIsSomeRowsExpanded: () => { const expanded = table.getState().expanded; return expanded === true || Object.values(expanded).some(Boolean); }, getIsAllRowsExpanded: () => { const expanded = table.getState().expanded; if (typeof expanded === "boolean") { return expanded === true; } if (!Object.keys(expanded).length) { return false; } if (table.getRowModel().flatRows.some((row) => !row.getIsExpanded())) { return false; } return true; }, getExpandedDepth: () => { let maxDepth = 0; const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded); rowIds.forEach((id2) => { const splitId = id2.split("."); maxDepth = Math.max(maxDepth, splitId.length); }); return maxDepth; }, getPreExpandedRowModel: () => table.getSortedRowModel(), getExpandedRowModel: () => { if (!table._getExpandedRowModel && table.options.getExpandedRowModel) { table._getExpandedRowModel = table.options.getExpandedRowModel(table); } if (table.options.manualExpanding || !table._getExpandedRowModel) { return table.getPreExpandedRowModel(); } return table._getExpandedRowModel(); } }; }, createRow: (row, table) => { return { toggleExpanded: (expanded) => { table.setExpanded((old) => { var _expanded; const exists = old === true ? true : !!(old == null ? void 0 : old[row.id]); let oldExpanded = {}; if (old === true) { Object.keys(table.getRowModel().rowsById).forEach((rowId) => { oldExpanded[rowId] = true; }); } else { oldExpanded = old; } expanded = (_expanded = expanded) != null ? _expanded : !exists; if (!exists && expanded) { return { ...oldExpanded, [row.id]: true }; } if (exists && !expanded) { const { [row.id]: _5, ...rest } = oldExpanded; return rest; } return old; }); }, getIsExpanded: () => { var _a2, _b2; var _table$options$getIsR; const expanded = table.getState().expanded; return !!((_table$options$getIsR = (_b2 = (_a2 = table.options).getIsRowExpanded) == null ? void 0 : _b2.call(_a2, row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id])); }, getCanExpand: () => { var _a2, _b2, _c2; var _table$options$getRow, _table$options$enable; return (_table$options$getRow = (_b2 = (_a2 = table.options).getRowCanExpand) == null ? void 0 : _b2.call(_a2, row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_c2 = row.subRows) == null ? void 0 : _c2.length); }, getToggleExpandedHandler: () => { const canExpand = row.getCanExpand(); return () => { if (!canExpand) return; row.toggleExpanded(); }; } }; } }; var includesString = (row, columnId, filterValue) => { var _a2; const search = filterValue.toLowerCase(); return Boolean((_a2 = row.getValue(columnId)) == null ? void 0 : _a2.toLowerCase().includes(search)); }; includesString.autoRemove = (val) => testFalsey(val); var includesStringSensitive = (row, columnId, filterValue) => { var _a2; return Boolean((_a2 = row.getValue(columnId)) == null ? void 0 : _a2.includes(filterValue)); }; includesStringSensitive.autoRemove = (val) => testFalsey(val); var equalsString = (row, columnId, filterValue) => { var _a2; return ((_a2 = row.getValue(columnId)) == null ? void 0 : _a2.toLowerCase()) === filterValue.toLowerCase(); }; equalsString.autoRemove = (val) => testFalsey(val); var arrIncludes = (row, columnId, filterValue) => { var _a2; return (_a2 = row.getValue(columnId)) == null ? void 0 : _a2.includes(filterValue); }; arrIncludes.autoRemove = (val) => testFalsey(val) || !(val == null ? void 0 : val.length); var arrIncludesAll = (row, columnId, filterValue) => { return !filterValue.some((val) => { var _a2; return !((_a2 = row.getValue(columnId)) == null ? void 0 : _a2.includes(val)); }); }; arrIncludesAll.autoRemove = (val) => testFalsey(val) || !(val == null ? void 0 : val.length); var arrIncludesSome = (row, columnId, filterValue) => { return filterValue.some((val) => { var _a2; return (_a2 = row.getValue(columnId)) == null ? void 0 : _a2.includes(val); }); }; arrIncludesSome.autoRemove = (val) => testFalsey(val) || !(val == null ? void 0 : val.length); var equals = (row, columnId, filterValue) => { return row.getValue(columnId) === filterValue; }; equals.autoRemove = (val) => testFalsey(val); var weakEquals = (row, columnId, filterValue) => { return row.getValue(columnId) == filterValue; }; weakEquals.autoRemove = (val) => testFalsey(val); var inNumberRange = (row, columnId, filterValue) => { let [min3, max3] = filterValue; const rowValue = row.getValue(columnId); return rowValue >= min3 && rowValue <= max3; }; inNumberRange.resolveFilterValue = (val) => { let [unsafeMin, unsafeMax] = val; let parsedMin = typeof unsafeMin !== "number" ? parseFloat(unsafeMin) : unsafeMin; let parsedMax = typeof unsafeMax !== "number" ? parseFloat(unsafeMax) : unsafeMax; let min3 = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin; let max3 = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax; if (min3 > max3) { const temp = min3; min3 = max3; max3 = temp; } return [min3, max3]; }; inNumberRange.autoRemove = (val) => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]); var filterFns = { includesString, includesStringSensitive, equalsString, arrIncludes, arrIncludesAll, arrIncludesSome, equals, weakEquals, inNumberRange }; function testFalsey(val) { return val === void 0 || val === null || val === ""; } var Filters = { getDefaultColumnDef: () => { return { filterFn: "auto" }; }, getInitialState: (state) => { return { columnFilters: [], globalFilter: void 0, ...state }; }, getDefaultOptions: (table) => { return { onColumnFiltersChange: makeStateUpdater("columnFilters", table), onGlobalFilterChange: makeStateUpdater("globalFilter", table), filterFromLeafRows: false, maxLeafRowFilterDepth: 100, globalFilterFn: "auto", getColumnCanGlobalFilter: (column) => { var _a2, _b2; const value = (_b2 = (_a2 = table.getCoreRowModel().flatRows[0]) == null ? void 0 : _a2._getAllCellsByColumnId()[column.id]) == null ? void 0 : _b2.getValue(); return typeof value === "string" || typeof value === "number"; } }; }, createColumn: (column, table) => { return { getAutoFilterFn: () => { const firstRow = table.getCoreRowModel().flatRows[0]; const value = firstRow == null ? void 0 : firstRow.getValue(column.id); if (typeof value === "string") { return filterFns.includesString; } if (typeof value === "number") { return filterFns.inNumberRange; } if (typeof value === "boolean") { return filterFns.equals; } if (value !== null && typeof value === "object") { return filterFns.equals; } if (Array.isArray(value)) { return filterFns.arrIncludes; } return filterFns.weakEquals; }, getFilterFn: () => { var _a2; var _table$options$filter; return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === "auto" ? column.getAutoFilterFn() : (_table$options$filter = (_a2 = table.options.filterFns) == null ? void 0 : _a2[column.columnDef.filterFn]) != null ? _table$options$filter : filterFns[column.columnDef.filterFn]; }, getCanFilter: () => { var _column$columnDef$ena, _table$options$enable, _table$options$enable2; return ((_column$columnDef$ena = column.columnDef.enableColumnFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnFilters) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && !!column.accessorFn; }, getCanGlobalFilter: () => { var _a2, _b2; var _column$columnDef$ena2, _table$options$enable3, _table$options$enable4, _table$options$getCol; return ((_column$columnDef$ena2 = column.columnDef.enableGlobalFilter) != null ? _column$columnDef$ena2 : true) && ((_table$options$enable3 = table.options.enableGlobalFilter) != null ? _table$options$enable3 : true) && ((_table$options$enable4 = table.options.enableFilters) != null ? _table$options$enable4 : true) && ((_table$options$getCol = (_b2 = (_a2 = table.options).getColumnCanGlobalFilter) == null ? void 0 : _b2.call(_a2, column)) != null ? _table$options$getCol : true) && !!column.accessorFn; }, getIsFiltered: () => column.getFilterIndex() > -1, getFilterValue: () => { var _a2, _b2; return (_b2 = (_a2 = table.getState().columnFilters) == null ? void 0 : _a2.find((d5) => d5.id === column.id)) == null ? void 0 : _b2.value; }, getFilterIndex: () => { var _a2; var _table$getState$colum; return (_table$getState$colum = (_a2 = table.getState().columnFilters) == null ? void 0 : _a2.findIndex((d5) => d5.id === column.id)) != null ? _table$getState$colum : -1; }, setFilterValue: (value) => { table.setColumnFilters((old) => { const filterFn = column.getFilterFn(); const previousfilter = old == null ? void 0 : old.find((d5) => d5.id === column.id); const newFilter = functionalUpdate(value, previousfilter ? previousfilter.value : void 0); if (shouldAutoRemoveFilter(filterFn, newFilter, column)) { var _old$filter; return (_old$filter = old == null ? void 0 : old.filter((d5) => d5.id !== column.id)) != null ? _old$filter : []; } const newFilterObj = { id: column.id, value: newFilter }; if (previousfilter) { var _old$map; return (_old$map = old == null ? void 0 : old.map((d5) => { if (d5.id === column.id) { return newFilterObj; } return d5; })) != null ? _old$map : []; } if (old == null ? void 0 : old.length) { return [...old, newFilterObj]; } return [newFilterObj]; }); }, _getFacetedRowModel: table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, column.id), getFacetedRowModel: () => { if (!column._getFacetedRowModel) { return table.getPreFilteredRowModel(); } return column._getFacetedRowModel(); }, _getFacetedUniqueValues: table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, column.id), getFacetedUniqueValues: () => { if (!column._getFacetedUniqueValues) { return /* @__PURE__ */ new Map(); } return column._getFacetedUniqueValues(); }, _getFacetedMinMaxValues: table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, column.id), getFacetedMinMaxValues: () => { if (!column._getFacetedMinMaxValues) { return void 0; } return column._getFacetedMinMaxValues(); } }; }, createRow: (row, table) => { return { columnFilters: {}, columnFiltersMeta: {} }; }, createTable: (table) => { return { getGlobalAutoFilterFn: () => { return filterFns.includesString; }, getGlobalFilterFn: () => { var _a2; var _table$options$filter2; const { globalFilterFn } = table.options; return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === "auto" ? table.getGlobalAutoFilterFn() : (_table$options$filter2 = (_a2 = table.options.filterFns) == null ? void 0 : _a2[globalFilterFn]) != null ? _table$options$filter2 : filterFns[globalFilterFn]; }, setColumnFilters: (updater) => { var _a2, _b2; const leafColumns = table.getAllLeafColumns(); const updateFn = (old) => { var _a3; return (_a3 = functionalUpdate(updater, old)) == null ? void 0 : _a3.filter((filter) => { const column = leafColumns.find((d5) => d5.id === filter.id); if (column) { const filterFn = column.getFilterFn(); if (shouldAutoRemoveFilter(filterFn, filter.value, column)) { return false; } } return true; }); }; (_b2 = (_a2 = table.options).onColumnFiltersChange) == null ? void 0 : _b2.call(_a2, updateFn); }, setGlobalFilter: (updater) => { var _a2, _b2; (_b2 = (_a2 = table.options).onGlobalFilterChange) == null ? void 0 : _b2.call(_a2, updater); }, resetGlobalFilter: (defaultState) => { table.setGlobalFilter(defaultState ? void 0 : table.initialState.globalFilter); }, resetColumnFilters: (defaultState) => { var _a2; var _table$initialState$c; table.setColumnFilters(defaultState ? [] : (_table$initialState$c = (_a2 = table.initialState) == null ? void 0 : _a2.columnFilters) != null ? _table$initialState$c : []); }, getPreFilteredRowModel: () => table.getCoreRowModel(), getFilteredRowModel: () => { if (!table._getFilteredRowModel && table.options.getFilteredRowModel) { table._getFilteredRowModel = table.options.getFilteredRowModel(table); } if (table.options.manualFiltering || !table._getFilteredRowModel) { return table.getPreFilteredRowModel(); } return table._getFilteredRowModel(); }, _getGlobalFacetedRowModel: table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, "__global__"), getGlobalFacetedRowModel: () => { if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) { return table.getPreFilteredRowModel(); } return table._getGlobalFacetedRowModel(); }, _getGlobalFacetedUniqueValues: table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, "__global__"), getGlobalFacetedUniqueValues: () => { if (!table._getGlobalFacetedUniqueValues) { return /* @__PURE__ */ new Map(); } return table._getGlobalFacetedUniqueValues(); }, _getGlobalFacetedMinMaxValues: table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, "__global__"), getGlobalFacetedMinMaxValues: () => { if (!table._getGlobalFacetedMinMaxValues) { return; } return table._getGlobalFacetedMinMaxValues(); } }; } }; function shouldAutoRemoveFilter(filterFn, value, column) { return (filterFn && filterFn.autoRemove ? filterFn.autoRemove(value, column) : false) || typeof value === "undefined" || typeof value === "string" && !value; } var sum = (columnId, _leafRows, childRows) => { return childRows.reduce((sum2, next) => { const nextValue = next.getValue(columnId); return sum2 + (typeof nextValue === "number" ? nextValue : 0); }, 0); }; var min2 = (columnId, _leafRows, childRows) => { let min3; childRows.forEach((row) => { const value = row.getValue(columnId); if (value != null && (min3 > value || min3 === void 0 && value >= value)) { min3 = value; } }); return min3; }; var max2 = (columnId, _leafRows, childRows) => { let max3; childRows.forEach((row) => { const value = row.getValue(columnId); if (value != null && (max3 < value || max3 === void 0 && value >= value)) { max3 = value; } }); return max3; }; var extent = (columnId, _leafRows, childRows) => { let min3; let max3; childRows.forEach((row) => { const value = row.getValue(columnId); if (value != null) { if (min3 === void 0) { if (value >= value) min3 = max3 = value; } else { if (min3 > value) min3 = value; if (max3 < value) max3 = value; } } }); return [min3, max3]; }; var mean = (columnId, leafRows) => { let count2 = 0; let sum2 = 0; leafRows.forEach((row) => { let value = row.getValue(columnId); if (value != null && (value = +value) >= value) { ++count2, sum2 += value; } }); if (count2) return sum2 / count2; return; }; var median = (columnId, leafRows) => { if (!leafRows.length) { return; } let min3 = 0; let max3 = 0; leafRows.forEach((row) => { let value = row.getValue(columnId); if (typeof value === "number") { min3 = Math.min(min3, value); max3 = Math.max(max3, value); } }); return (min3 + max3) / 2; }; var unique = (columnId, leafRows) => { return Array.from(new Set(leafRows.map((d5) => d5.getValue(columnId))).values()); }; var uniqueCount = (columnId, leafRows) => { return new Set(leafRows.map((d5) => d5.getValue(columnId))).size; }; var count = (_columnId, leafRows) => { return leafRows.length; }; var aggregationFns = { sum, min: min2, max: max2, extent, mean, median, unique, uniqueCount, count }; var Grouping = { getDefaultColumnDef: () => { return { aggregatedCell: (props2) => { var _a2, _b2; var _toString; return (_toString = (_b2 = (_a2 = props2.getValue()) == null ? void 0 : _a2.toString) == null ? void 0 : _b2.call(_a2)) != null ? _toString : null; }, aggregationFn: "auto" }; }, getInitialState: (state) => { return { grouping: [], ...state }; }, getDefaultOptions: (table) => { return { onGroupingChange: makeStateUpdater("grouping", table), groupedColumnMode: "reorder" }; }, createColumn: (column, table) => { return { toggleGrouping: () => { table.setGrouping((old) => { if (old == null ? void 0 : old.includes(column.id)) { return old.filter((d5) => d5 !== column.id); } return [...old != null ? old : [], column.id]; }); }, getCanGroup: () => { var _ref, _ref2, _ref3, _column$columnDef$ena; return (_ref = (_ref2 = (_ref3 = (_column$columnDef$ena = column.columnDef.enableGrouping) != null ? _column$columnDef$ena : true) != null ? _ref3 : table.options.enableGrouping) != null ? _ref2 : true) != null ? _ref : !!column.accessorFn; }, getIsGrouped: () => { var _a2; return (_a2 = table.getState().grouping) == null ? void 0 : _a2.includes(column.id); }, getGroupedIndex: () => { var _a2; return (_a2 = table.getState().grouping) == null ? void 0 : _a2.indexOf(column.id); }, getToggleGroupingHandler: () => { const canGroup = column.getCanGroup(); return () => { if (!canGroup) return; column.toggleGrouping(); }; }, getAutoAggregationFn: () => { const firstRow = table.getCoreRowModel().flatRows[0]; const value = firstRow == null ? void 0 : firstRow.getValue(column.id); if (typeof value === "number") { return aggregationFns.sum; } if (Object.prototype.toString.call(value) === "[object Date]") { return aggregationFns.extent; } }, getAggregationFn: () => { var _a2; var _table$options$aggreg; if (!column) { throw new Error(); } return isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === "auto" ? column.getAutoAggregationFn() : (_table$options$aggreg = (_a2 = table.options.aggregationFns) == null ? void 0 : _a2[column.columnDef.aggregationFn]) != null ? _table$options$aggreg : aggregationFns[column.columnDef.aggregationFn]; } }; }, createTable: (table) => { return { setGrouping: (updater) => { var _a2, _b2; return (_b2 = (_a2 = table.options).onGroupingChange) == null ? void 0 : _b2.call(_a2, updater); }, resetGrouping: (defaultState) => { var _a2; var _table$initialState$g; table.setGrouping(defaultState ? [] : (_table$initialState$g = (_a2 = table.initialState) == null ? void 0 : _a2.grouping) != null ? _table$initialState$g : []); }, getPreGroupedRowModel: () => table.getFilteredRowModel(), getGroupedRowModel: () => { if (!table._getGroupedRowModel && table.options.getGroupedRowModel) { table._getGroupedRowModel = table.options.getGroupedRowModel(table); } if (table.options.manualGrouping || !table._getGroupedRowModel) { return table.getPreGroupedRowModel(); } return table._getGroupedRowModel(); } }; }, createRow: (row) => { return { getIsGrouped: () => !!row.groupingColumnId, _groupingValuesCache: {} }; }, createCell: (cell, column, row, table) => { return { getIsGrouped: () => column.getIsGrouped() && column.id === row.groupingColumnId, getIsPlaceholder: () => !cell.getIsGrouped() && column.getIsGrouped(), getIsAggregated: () => { var _a2; return !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!((_a2 = row.subRows) == null ? void 0 : _a2.length); } }; } }; function orderColumns(leafColumns, grouping, groupedColumnMode) { if (!(grouping == null ? void 0 : grouping.length) || !groupedColumnMode) { return leafColumns; } const nonGroupingColumns = leafColumns.filter((col) => !grouping.includes(col.id)); if (groupedColumnMode === "remove") { return nonGroupingColumns; } const groupingColumns = grouping.map((g4) => leafColumns.find((col) => col.id === g4)).filter(Boolean); return [...groupingColumns, ...nonGroupingColumns]; } var Ordering = { getInitialState: (state) => { return { columnOrder: [], ...state }; }, getDefaultOptions: (table) => { return { onColumnOrderChange: makeStateUpdater("columnOrder", table) }; }, createTable: (table) => { return { setColumnOrder: (updater) => { var _a2, _b2; return (_b2 = (_a2 = table.options).onColumnOrderChange) == null ? void 0 : _b2.call(_a2, updater); }, resetColumnOrder: (defaultState) => { var _table$initialState$c; table.setColumnOrder(defaultState ? [] : (_table$initialState$c = table.initialState.columnOrder) != null ? _table$initialState$c : []); }, _getOrderColumnsFn: memo(() => [table.getState().columnOrder, table.getState().grouping, table.options.groupedColumnMode], (columnOrder, grouping, groupedColumnMode) => (columns) => { let orderedColumns = []; if (!(columnOrder == null ? void 0 : columnOrder.length)) { orderedColumns = columns; } else { const columnOrderCopy = [...columnOrder]; const columnsCopy = [...columns]; while (columnsCopy.length && columnOrderCopy.length) { const targetColumnId = columnOrderCopy.shift(); const foundIndex = columnsCopy.findIndex((d5) => d5.id === targetColumnId); if (foundIndex > -1) { orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]); } } orderedColumns = [...orderedColumns, ...columnsCopy]; } return orderColumns(orderedColumns, grouping, groupedColumnMode); }, { key: "getOrderColumnsFn" }) }; } }; var defaultPageIndex = 0; var defaultPageSize = 10; var getDefaultPaginationState = () => ({ pageIndex: defaultPageIndex, pageSize: defaultPageSize }); var Pagination = { getInitialState: (state) => { return { ...state, pagination: { ...getDefaultPaginationState(), ...state == null ? void 0 : state.pagination } }; }, getDefaultOptions: (table) => { return { onPaginationChange: makeStateUpdater("pagination", table) }; }, createTable: (table) => { let registered = false; let queued = false; return { _autoResetPageIndex: () => { var _ref, _table$options$autoRe; if (!registered) { table._queue(() => { registered = true; }); return; } if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetPageIndex) != null ? _ref : !table.options.manualPagination) { if (queued) return; queued = true; table._queue(() => { table.resetPageIndex(); queued = false; }); } }, setPagination: (updater) => { var _a2, _b2; const safeUpdater = (old) => { let newState = functionalUpdate(updater, old); return newState; }; return (_b2 = (_a2 = table.options).onPaginationChange) == null ? void 0 : _b2.call(_a2, safeUpdater); }, resetPagination: (defaultState) => { var _table$initialState$p; table.setPagination(defaultState ? getDefaultPaginationState() : (_table$initialState$p = table.initialState.pagination) != null ? _table$initialState$p : getDefaultPaginationState()); }, setPageIndex: (updater) => { table.setPagination((old) => { let pageIndex = functionalUpdate(updater, old.pageIndex); const maxPageIndex = typeof table.options.pageCount === "undefined" || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1; pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex)); return { ...old, pageIndex }; }); }, resetPageIndex: (defaultState) => { var _a2, _b2; var _table$initialState$p2; table.setPageIndex(defaultState ? defaultPageIndex : (_table$initialState$p2 = (_b2 = (_a2 = table.initialState) == null ? void 0 : _a2.pagination) == null ? void 0 : _b2.pageIndex) != null ? _table$initialState$p2 : defaultPageIndex); }, resetPageSize: (defaultState) => { var _a2, _b2; var _table$initialState$p3; table.setPageSize(defaultState ? defaultPageSize : (_table$initialState$p3 = (_b2 = (_a2 = table.initialState) == null ? void 0 : _a2.pagination) == null ? void 0 : _b2.pageSize) != null ? _table$initialState$p3 : defaultPageSize); }, setPageSize: (updater) => { table.setPagination((old) => { const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize)); const topRowIndex = old.pageSize * old.pageIndex; const pageIndex = Math.floor(topRowIndex / pageSize); return { ...old, pageIndex, pageSize }; }); }, setPageCount: (updater) => table.setPagination((old) => { var _table$options$pageCo; let newPageCount = functionalUpdate(updater, (_table$options$pageCo = table.options.pageCount) != null ? _table$options$pageCo : -1); if (typeof newPageCount === "number") { newPageCount = Math.max(-1, newPageCount); } return { ...old, pageCount: newPageCount }; }), getPageOptions: memo(() => [table.getPageCount()], (pageCount) => { let pageOptions = []; if (pageCount && pageCount > 0) { pageOptions = [...new Array(pageCount)].fill(null).map((_5, i4) => i4); } return pageOptions; }, { key: "getPageOptions", debug: () => { var _table$options$debugA; return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; } }), getCanPreviousPage: () => table.getState().pagination.pageIndex > 0, getCanNextPage: () => { const { pageIndex } = table.getState().pagination; const pageCount = table.getPageCount(); if (pageCount === -1) { return true; } if (pageCount === 0) { return false; } return pageIndex < pageCount - 1; }, previousPage: () => { return table.setPageIndex((old) => old - 1); }, nextPage: () => { return table.setPageIndex((old) => { return old + 1; }); }, getPrePaginationRowModel: () => table.getExpandedRowModel(), getPaginationRowModel: () => { if (!table._getPaginationRowModel && table.options.getPaginationRowModel) { table._getPaginationRowModel = table.options.getPaginationRowModel(table); } if (table.options.manualPagination || !table._getPaginationRowModel) { return table.getPrePaginationRowModel(); } return table._getPaginationRowModel(); }, getPageCount: () => { var _table$options$pageCo2; return (_table$options$pageCo2 = table.options.pageCount) != null ? _table$options$pageCo2 : Math.ceil(table.getPrePaginationRowModel().rows.length / table.getState().pagination.pageSize); } }; } }; var getDefaultPinningState = () => ({ left: [], right: [] }); var Pinning = { getInitialState: (state) => { return { columnPinning: getDefaultPinningState(), ...state }; }, getDefaultOptions: (table) => { return { onColumnPinningChange: makeStateUpdater("columnPinning", table) }; }, createColumn: (column, table) => { return { pin: (position) => { const columnIds = column.getLeafColumns().map((d5) => d5.id).filter(Boolean); table.setColumnPinning((old) => { var _old$left3, _old$right3; if (position === "right") { var _old$left, _old$right; return { left: ((_old$left = old == null ? void 0 : old.left) != null ? _old$left : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))), right: [...((_old$right = old == null ? void 0 : old.right) != null ? _old$right : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))), ...columnIds] }; } if (position === "left") { var _old$left2, _old$right2; return { left: [...((_old$left2 = old == null ? void 0 : old.left) != null ? _old$left2 : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))), ...columnIds], right: ((_old$right2 = old == null ? void 0 : old.right) != null ? _old$right2 : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))) }; } return { left: ((_old$left3 = old == null ? void 0 : old.left) != null ? _old$left3 : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))), right: ((_old$right3 = old == null ? void 0 : old.right) != null ? _old$right3 : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))) }; }); }, getCanPin: () => { const leafColumns = column.getLeafColumns(); return leafColumns.some((d5) => { var _d$columnDef$enablePi, _table$options$enable; return ((_d$columnDef$enablePi = d5.columnDef.enablePinning) != null ? _d$columnDef$enablePi : true) && ((_table$options$enable = table.options.enablePinning) != null ? _table$options$enable : true); }); }, getIsPinned: () => { const leafColumnIds = column.getLeafColumns().map((d5) => d5.id); const { left, right } = table.getState().columnPinning; const isLeft = leafColumnIds.some((d5) => left == null ? void 0 : left.includes(d5)); const isRight = leafColumnIds.some((d5) => right == null ? void 0 : right.includes(d5)); return isLeft ? "left" : isRight ? "right" : false; }, getPinnedIndex: () => { var _a2, _b2; var _table$getState$colum; const position = column.getIsPinned(); return position ? (_table$getState$colum = (_b2 = (_a2 = table.getState().columnPinning) == null ? void 0 : _a2[position]) == null ? void 0 : _b2.indexOf(column.id)) != null ? _table$getState$colum : -1 : 0; } }; }, createRow: (row, table) => { return { getCenterVisibleCells: memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allCells, left, right) => { const leftAndRight = [...left != null ? left : [], ...right != null ? right : []]; return allCells.filter((d5) => !leftAndRight.includes(d5.column.id)); }, { key: false, debug: () => { var _table$options$debugA; return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugRows; } }), getLeftVisibleCells: memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, ,], (allCells, left) => { const cells = (left != null ? left : []).map((columnId) => allCells.find((cell) => cell.column.id === columnId)).filter(Boolean).map((d5) => ({ ...d5, position: "left" })); return cells; }, { key: false, debug: () => { var _table$options$debugA2; return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugRows; } }), getRightVisibleCells: memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.right], (allCells, right) => { const cells = (right != null ? right : []).map((columnId) => allCells.find((cell) => cell.column.id === columnId)).filter(Boolean).map((d5) => ({ ...d5, position: "right" })); return cells; }, { key: false, debug: () => { var _table$options$debugA3; return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugRows; } }) }; }, createTable: (table) => { return { setColumnPinning: (updater) => { var _a2, _b2; return (_b2 = (_a2 = table.options).onColumnPinningChange) == null ? void 0 : _b2.call(_a2, updater); }, resetColumnPinning: (defaultState) => { var _a2; var _table$initialState$c; return table.setColumnPinning(defaultState ? getDefaultPinningState() : (_table$initialState$c = (_a2 = table.initialState) == null ? void 0 : _a2.columnPinning) != null ? _table$initialState$c : getDefaultPinningState()); }, getIsSomeColumnsPinned: (position) => { var _a2, _b2, _c2; const pinningState = table.getState().columnPinning; if (!position) { return Boolean(((_a2 = pinningState.left) == null ? void 0 : _a2.length) || ((_b2 = pinningState.right) == null ? void 0 : _b2.length)); } return Boolean((_c2 = pinningState[position]) == null ? void 0 : _c2.length); }, getLeftLeafColumns: memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left], (allColumns, left) => { return (left != null ? left : []).map((columnId) => allColumns.find((column) => column.id === columnId)).filter(Boolean); }, { key: "getLeftLeafColumns", debug: () => { var _table$options$debugA4; return (_table$options$debugA4 = table.options.debugAll) != null ? _table$options$debugA4 : table.options.debugColumns; } }), getRightLeafColumns: memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.right], (allColumns, right) => { return (right != null ? right : []).map((columnId) => allColumns.find((column) => column.id === columnId)).filter(Boolean); }, { key: "getRightLeafColumns", debug: () => { var _table$options$debugA5; return (_table$options$debugA5 = table.options.debugAll) != null ? _table$options$debugA5 : table.options.debugColumns; } }), getCenterLeafColumns: memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, left, right) => { const leftAndRight = [...left != null ? left : [], ...right != null ? right : []]; return allColumns.filter((d5) => !leftAndRight.includes(d5.id)); }, { key: "getCenterLeafColumns", debug: () => { var _table$options$debugA6; return (_table$options$debugA6 = table.options.debugAll) != null ? _table$options$debugA6 : table.options.debugColumns; } }) }; } }; var RowSelection = { getInitialState: (state) => { return { rowSelection: {}, ...state }; }, getDefaultOptions: (table) => { return { onRowSelectionChange: makeStateUpdater("rowSelection", table), enableRowSelection: true, enableMultiRowSelection: true, enableSubRowSelection: true }; }, createTable: (table) => { return { setRowSelection: (updater) => { var _a2, _b2; return (_b2 = (_a2 = table.options).onRowSelectionChange) == null ? void 0 : _b2.call(_a2, updater); }, resetRowSelection: (defaultState) => { var _table$initialState$r; return table.setRowSelection(defaultState ? {} : (_table$initialState$r = table.initialState.rowSelection) != null ? _table$initialState$r : {}); }, toggleAllRowsSelected: (value) => { table.setRowSelection((old) => { value = typeof value !== "undefined" ? value : !table.getIsAllRowsSelected(); const rowSelection = { ...old }; const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows; if (value) { preGroupedFlatRows.forEach((row) => { if (!row.getCanSelect()) { return; } rowSelection[row.id] = true; }); } else { preGroupedFlatRows.forEach((row) => { delete rowSelection[row.id]; }); } return rowSelection; }); }, toggleAllPageRowsSelected: (value) => table.setRowSelection((old) => { const resolvedValue = typeof value !== "undefined" ? value : !table.getIsAllPageRowsSelected(); const rowSelection = { ...old }; table.getRowModel().rows.forEach((row) => { mutateRowIsSelected(rowSelection, row.id, resolvedValue, table); }); return rowSelection; }), getPreSelectedRowModel: () => table.getCoreRowModel(), getSelectedRowModel: memo(() => [table.getState().rowSelection, table.getCoreRowModel()], (rowSelection, rowModel) => { if (!Object.keys(rowSelection).length) { return { rows: [], flatRows: [], rowsById: {} }; } return selectRowsFn(table, rowModel); }, { key: "getSelectedRowModel", debug: () => { var _table$options$debugA; return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; } }), getFilteredSelectedRowModel: memo(() => [table.getState().rowSelection, table.getFilteredRowModel()], (rowSelection, rowModel) => { if (!Object.keys(rowSelection).length) { return { rows: [], flatRows: [], rowsById: {} }; } return selectRowsFn(table, rowModel); }, { key: false, debug: () => { var _table$options$debugA2; return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugTable; } }), getGroupedSelectedRowModel: memo(() => [table.getState().rowSelection, table.getSortedRowModel()], (rowSelection, rowModel) => { if (!Object.keys(rowSelection).length) { return { rows: [], flatRows: [], rowsById: {} }; } return selectRowsFn(table, rowModel); }, { key: false, debug: () => { var _table$options$debugA3; return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugTable; } }), getIsAllRowsSelected: () => { const preGroupedFlatRows = table.getFilteredRowModel().flatRows; const { rowSelection } = table.getState(); let isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length); if (isAllRowsSelected) { if (preGroupedFlatRows.some((row) => row.getCanSelect() && !rowSelection[row.id])) { isAllRowsSelected = false; } } return isAllRowsSelected; }, getIsAllPageRowsSelected: () => { const paginationFlatRows = table.getPaginationRowModel().flatRows; const { rowSelection } = table.getState(); let isAllPageRowsSelected = !!paginationFlatRows.length; if (isAllPageRowsSelected && paginationFlatRows.some((row) => !rowSelection[row.id])) { isAllPageRowsSelected = false; } return isAllPageRowsSelected; }, getIsSomeRowsSelected: () => { var _table$getState$rowSe; const totalSelected = Object.keys((_table$getState$rowSe = table.getState().rowSelection) != null ? _table$getState$rowSe : {}).length; return totalSelected > 0 && totalSelected < table.getFilteredRowModel().flatRows.length; }, getIsSomePageRowsSelected: () => { const paginationFlatRows = table.getPaginationRowModel().flatRows; return table.getIsAllPageRowsSelected() ? false : paginationFlatRows.some((d5) => d5.getIsSelected() || d5.getIsSomeSelected()); }, getToggleAllRowsSelectedHandler: () => { return (e4) => { table.toggleAllRowsSelected(e4.target.checked); }; }, getToggleAllPageRowsSelectedHandler: () => { return (e4) => { table.toggleAllPageRowsSelected(e4.target.checked); }; } }; }, createRow: (row, table) => { return { toggleSelected: (value) => { const isSelected = row.getIsSelected(); table.setRowSelection((old) => { value = typeof value !== "undefined" ? value : !isSelected; if (isSelected === value) { return old; } const selectedRowIds = { ...old }; mutateRowIsSelected(selectedRowIds, row.id, value, table); return selectedRowIds; }); }, getIsSelected: () => { const { rowSelection } = table.getState(); return isRowSelected(row, rowSelection); }, getIsSomeSelected: () => { const { rowSelection } = table.getState(); return isSubRowSelected(row, rowSelection) === "some"; }, getIsAllSubRowsSelected: () => { const { rowSelection } = table.getState(); return isSubRowSelected(row, rowSelection) === "all"; }, getCanSelect: () => { var _table$options$enable; if (typeof table.options.enableRowSelection === "function") { return table.options.enableRowSelection(row); } return (_table$options$enable = table.options.enableRowSelection) != null ? _table$options$enable : true; }, getCanSelectSubRows: () => { var _table$options$enable2; if (typeof table.options.enableSubRowSelection === "function") { return table.options.enableSubRowSelection(row); } return (_table$options$enable2 = table.options.enableSubRowSelection) != null ? _table$options$enable2 : true; }, getCanMultiSelect: () => { var _table$options$enable3; if (typeof table.options.enableMultiRowSelection === "function") { return table.options.enableMultiRowSelection(row); } return (_table$options$enable3 = table.options.enableMultiRowSelection) != null ? _table$options$enable3 : true; }, getToggleSelectedHandler: () => { const canSelect = row.getCanSelect(); return (e4) => { var _a2; if (!canSelect) return; row.toggleSelected((_a2 = e4.target) == null ? void 0 : _a2.checked); }; } }; } }; var mutateRowIsSelected = (selectedRowIds, id2, value, table) => { var _a2; const row = table.getRow(id2); if (value) { if (!row.getCanMultiSelect()) { Object.keys(selectedRowIds).forEach((key2) => delete selectedRowIds[key2]); } if (row.getCanSelect()) { selectedRowIds[id2] = true; } } else { delete selectedRowIds[id2]; } if (((_a2 = row.subRows) == null ? void 0 : _a2.length) && row.getCanSelectSubRows()) { row.subRows.forEach((row2) => mutateRowIsSelected(selectedRowIds, row2.id, value, table)); } }; function selectRowsFn(table, rowModel) { const rowSelection = table.getState().rowSelection; const newSelectedFlatRows = []; const newSelectedRowsById = {}; const recurseRows = function(rows, depth) { return rows.map((row) => { var _a2; const isSelected = isRowSelected(row, rowSelection); if (isSelected) { newSelectedFlatRows.push(row); newSelectedRowsById[row.id] = row; } if ((_a2 = row.subRows) == null ? void 0 : _a2.length) { row = { ...row, subRows: recurseRows(row.subRows) }; } if (isSelected) { return row; } }).filter(Boolean); }; return { rows: recurseRows(rowModel.rows), flatRows: newSelectedFlatRows, rowsById: newSelectedRowsById }; } function isRowSelected(row, selection) { var _selection$row$id; return (_selection$row$id = selection[row.id]) != null ? _selection$row$id : false; } function isSubRowSelected(row, selection, table) { if (row.subRows && row.subRows.length) { let allChildrenSelected = true; let someSelected = false; row.subRows.forEach((subRow) => { if (someSelected && !allChildrenSelected) { return; } if (isRowSelected(subRow, selection)) { someSelected = true; } else { allChildrenSelected = false; } }); return allChildrenSelected ? "all" : someSelected ? "some" : false; } return false; } var reSplitAlphaNumeric = /([0-9]+)/gm; var alphanumeric = (rowA, rowB, columnId) => { return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase()); }; var alphanumericCaseSensitive = (rowA, rowB, columnId) => { return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId))); }; var text = (rowA, rowB, columnId) => { return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase()); }; var textCaseSensitive = (rowA, rowB, columnId) => { return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId))); }; var datetime = (rowA, rowB, columnId) => { const a5 = rowA.getValue(columnId); const b4 = rowB.getValue(columnId); return a5 > b4 ? 1 : a5 < b4 ? -1 : 0; }; var basic = (rowA, rowB, columnId) => { return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId)); }; function compareBasic(a5, b4) { return a5 === b4 ? 0 : a5 > b4 ? 1 : -1; } function toString(a5) { if (typeof a5 === "number") { if (isNaN(a5) || a5 === Infinity || a5 === -Infinity) { return ""; } return String(a5); } if (typeof a5 === "string") { return a5; } return ""; } function compareAlphanumeric(aStr, bStr) { const a5 = aStr.split(reSplitAlphaNumeric).filter(Boolean); const b4 = bStr.split(reSplitAlphaNumeric).filter(Boolean); while (a5.length && b4.length) { const aa = a5.shift(); const bb = b4.shift(); const an2 = parseInt(aa, 10); const bn2 = parseInt(bb, 10); const combo = [an2, bn2].sort(); if (isNaN(combo[0])) { if (aa > bb) { return 1; } if (bb > aa) { return -1; } continue; } if (isNaN(combo[1])) { return isNaN(an2) ? -1 : 1; } if (an2 > bn2) { return 1; } if (bn2 > an2) { return -1; } } return a5.length - b4.length; } var sortingFns = { alphanumeric, alphanumericCaseSensitive, text, textCaseSensitive, datetime, basic }; var Sorting = { getInitialState: (state) => { return { sorting: [], ...state }; }, getDefaultColumnDef: () => { return { sortingFn: "auto" }; }, getDefaultOptions: (table) => { return { onSortingChange: makeStateUpdater("sorting", table), isMultiSortEvent: (e4) => { return e4.shiftKey; } }; }, createColumn: (column, table) => { return { getAutoSortingFn: () => { const firstRows = table.getFilteredRowModel().flatRows.slice(10); let isString = false; for (const row of firstRows) { const value = row == null ? void 0 : row.getValue(column.id); if (Object.prototype.toString.call(value) === "[object Date]") { return sortingFns.datetime; } if (typeof value === "string") { isString = true; if (value.split(reSplitAlphaNumeric).length > 1) { return sortingFns.alphanumeric; } } } if (isString) { return sortingFns.text; } return sortingFns.basic; }, getAutoSortDir: () => { const firstRow = table.getFilteredRowModel().flatRows[0]; const value = firstRow == null ? void 0 : firstRow.getValue(column.id); if (typeof value === "string") { return "asc"; } return "desc"; }, getSortingFn: () => { var _a2; var _table$options$sortin; if (!column) { throw new Error(); } return isFunction(column.columnDef.sortingFn) ? column.columnDef.sortingFn : column.columnDef.sortingFn === "auto" ? column.getAutoSortingFn() : (_table$options$sortin = (_a2 = table.options.sortingFns) == null ? void 0 : _a2[column.columnDef.sortingFn]) != null ? _table$options$sortin : sortingFns[column.columnDef.sortingFn]; }, toggleSorting: (desc, multi) => { const nextSortingOrder = column.getNextSortingOrder(); const hasManualValue = typeof desc !== "undefined" && desc !== null; table.setSorting((old) => { const existingSorting = old == null ? void 0 : old.find((d5) => d5.id === column.id); const existingIndex = old == null ? void 0 : old.findIndex((d5) => d5.id === column.id); let newSorting = []; let sortAction; let nextDesc = hasManualValue ? desc : nextSortingOrder === "desc"; if ((old == null ? void 0 : old.length) && column.getCanMultiSort() && multi) { if (existingSorting) { sortAction = "toggle"; } else { sortAction = "add"; } } else { if ((old == null ? void 0 : old.length) && existingIndex !== old.length - 1) { sortAction = "replace"; } else if (existingSorting) { sortAction = "toggle"; } else { sortAction = "replace"; } } if (sortAction === "toggle") { if (!hasManualValue) { if (!nextSortingOrder) { sortAction = "remove"; } } } if (sortAction === "add") { var _table$options$maxMul; newSorting = [...old, { id: column.id, desc: nextDesc }]; newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER)); } else if (sortAction === "toggle") { newSorting = old.map((d5) => { if (d5.id === column.id) { return { ...d5, desc: nextDesc }; } return d5; }); } else if (sortAction === "remove") { newSorting = old.filter((d5) => d5.id !== column.id); } else { newSorting = [{ id: column.id, desc: nextDesc }]; } return newSorting; }); }, getFirstSortDir: () => { var _ref, _column$columnDef$sor; const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === "desc"; return sortDescFirst ? "desc" : "asc"; }, getNextSortingOrder: (multi) => { var _table$options$enable, _table$options$enable2; const firstSortDirection = column.getFirstSortDir(); const isSorted = column.getIsSorted(); if (!isSorted) { return firstSortDirection; } if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && (multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true)) { return false; } return isSorted === "desc" ? "asc" : "desc"; }, getCanSort: () => { var _column$columnDef$ena, _table$options$enable3; return ((_column$columnDef$ena = column.columnDef.enableSorting) != null ? _column$columnDef$ena : true) && ((_table$options$enable3 = table.options.enableSorting) != null ? _table$options$enable3 : true) && !!column.accessorFn; }, getCanMultiSort: () => { var _ref2, _column$columnDef$ena2; return (_ref2 = (_column$columnDef$ena2 = column.columnDef.enableMultiSort) != null ? _column$columnDef$ena2 : table.options.enableMultiSort) != null ? _ref2 : !!column.accessorFn; }, getIsSorted: () => { var _a2; const columnSort = (_a2 = table.getState().sorting) == null ? void 0 : _a2.find((d5) => d5.id === column.id); return !columnSort ? false : columnSort.desc ? "desc" : "asc"; }, getSortIndex: () => { var _a2; var _table$getState$sorti; return (_table$getState$sorti = (_a2 = table.getState().sorting) == null ? void 0 : _a2.findIndex((d5) => d5.id === column.id)) != null ? _table$getState$sorti : -1; }, clearSorting: () => { table.setSorting((old) => (old == null ? void 0 : old.length) ? old.filter((d5) => d5.id !== column.id) : []); }, getToggleSortingHandler: () => { const canSort = column.getCanSort(); return (e4) => { var _a2, _b2, _c2, _d2; if (!canSort) return; (_a2 = e4.persist) == null ? void 0 : _a2.call(e4); (_d2 = column.toggleSorting) == null ? void 0 : _d2.call(column, void 0, column.getCanMultiSort() ? (_c2 = (_b2 = table.options).isMultiSortEvent) == null ? void 0 : _c2.call(_b2, e4) : false); }; } }; }, createTable: (table) => { return { setSorting: (updater) => { var _a2, _b2; return (_b2 = (_a2 = table.options).onSortingChange) == null ? void 0 : _b2.call(_a2, updater); }, resetSorting: (defaultState) => { var _a2; var _table$initialState$s; table.setSorting(defaultState ? [] : (_table$initialState$s = (_a2 = table.initialState) == null ? void 0 : _a2.sorting) != null ? _table$initialState$s : []); }, getPreSortedRowModel: () => table.getGroupedRowModel(), getSortedRowModel: () => { if (!table._getSortedRowModel && table.options.getSortedRowModel) { table._getSortedRowModel = table.options.getSortedRowModel(table); } if (table.options.manualSorting || !table._getSortedRowModel) { return table.getPreSortedRowModel(); } return table._getSortedRowModel(); } }; } }; var Visibility = { getInitialState: (state) => { return { columnVisibility: {}, ...state }; }, getDefaultOptions: (table) => { return { onColumnVisibilityChange: makeStateUpdater("columnVisibility", table) }; }, createColumn: (column, table) => { return { toggleVisibility: (value) => { if (column.getCanHide()) { table.setColumnVisibility((old) => ({ ...old, [column.id]: value != null ? value : !column.getIsVisible() })); } }, getIsVisible: () => { var _a2; var _table$getState$colum; return (_table$getState$colum = (_a2 = table.getState().columnVisibility) == null ? void 0 : _a2[column.id]) != null ? _table$getState$colum : true; }, getCanHide: () => { var _column$columnDef$ena, _table$options$enable; return ((_column$columnDef$ena = column.columnDef.enableHiding) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableHiding) != null ? _table$options$enable : true); }, getToggleVisibilityHandler: () => { return (e4) => { var _a2; (_a2 = column.toggleVisibility) == null ? void 0 : _a2.call(column, e4.target.checked); }; } }; }, createRow: (row, table) => { return { _getAllVisibleCells: memo(() => [row.getAllCells(), table.getState().columnVisibility], (cells) => { return cells.filter((cell) => cell.column.getIsVisible()); }, { key: false, debug: () => { var _table$options$debugA; return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugRows; } }), getVisibleCells: memo(() => [row.getLeftVisibleCells(), row.getCenterVisibleCells(), row.getRightVisibleCells()], (left, center, right) => [...left, ...center, ...right], { key: "row.getVisibleCells", debug: () => { var _table$options$debugA2; return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugRows; } }) }; }, createTable: (table) => { const makeVisibleColumnsMethod = (key2, getColumns) => { return memo(() => [getColumns(), getColumns().filter((d5) => d5.getIsVisible()).map((d5) => d5.id).join("_")], (columns) => { return columns.filter((d5) => { var _a2; return (_a2 = d5.getIsVisible) == null ? void 0 : _a2.call(d5); }); }, { key: key2, debug: () => { var _table$options$debugA3; return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugColumns; } }); }; return { getVisibleFlatColumns: makeVisibleColumnsMethod("getVisibleFlatColumns", () => table.getAllFlatColumns()), getVisibleLeafColumns: makeVisibleColumnsMethod("getVisibleLeafColumns", () => table.getAllLeafColumns()), getLeftVisibleLeafColumns: makeVisibleColumnsMethod("getLeftVisibleLeafColumns", () => table.getLeftLeafColumns()), getRightVisibleLeafColumns: makeVisibleColumnsMethod("getRightVisibleLeafColumns", () => table.getRightLeafColumns()), getCenterVisibleLeafColumns: makeVisibleColumnsMethod("getCenterVisibleLeafColumns", () => table.getCenterLeafColumns()), setColumnVisibility: (updater) => { var _a2, _b2; return (_b2 = (_a2 = table.options).onColumnVisibilityChange) == null ? void 0 : _b2.call(_a2, updater); }, resetColumnVisibility: (defaultState) => { var _table$initialState$c; table.setColumnVisibility(defaultState ? {} : (_table$initialState$c = table.initialState.columnVisibility) != null ? _table$initialState$c : {}); }, toggleAllColumnsVisible: (value) => { var _value; value = (_value = value) != null ? _value : !table.getIsAllColumnsVisible(); table.setColumnVisibility(table.getAllLeafColumns().reduce((obj, column) => { var _a2; return { ...obj, [column.id]: !value ? !((_a2 = column.getCanHide) == null ? void 0 : _a2.call(column)) : value }; }, {})); }, getIsAllColumnsVisible: () => !table.getAllLeafColumns().some((column) => { var _a2; return !((_a2 = column.getIsVisible) == null ? void 0 : _a2.call(column)); }), getIsSomeColumnsVisible: () => table.getAllLeafColumns().some((column) => { var _a2; return (_a2 = column.getIsVisible) == null ? void 0 : _a2.call(column); }), getToggleAllColumnsVisibilityHandler: () => { return (e4) => { var _a2; table.toggleAllColumnsVisible((_a2 = e4.target) == null ? void 0 : _a2.checked); }; } }; } }; var features = [Headers, Visibility, Ordering, Pinning, Filters, Sorting, Grouping, Expanding, Pagination, RowSelection, ColumnSizing]; function createTable(options) { var _options$initialState; if (options.debugAll || options.debugTable) { console.info("Creating Table Instance..."); } let table = { _features: features }; const defaultOptions3 = table._features.reduce((obj, feature) => { var _a2; return Object.assign(obj, (_a2 = feature.getDefaultOptions) == null ? void 0 : _a2.call(feature, table)); }, {}); const mergeOptions = (options2) => { if (table.options.mergeOptions) { return table.options.mergeOptions(defaultOptions3, options2); } return { ...defaultOptions3, ...options2 }; }; const coreInitialState = {}; let initialState = { ...coreInitialState, ...(_options$initialState = options.initialState) != null ? _options$initialState : {} }; table._features.forEach((feature) => { var _a2; var _feature$getInitialSt; initialState = (_feature$getInitialSt = (_a2 = feature.getInitialState) == null ? void 0 : _a2.call(feature, initialState)) != null ? _feature$getInitialSt : initialState; }); const queued = []; let queuedTimeout = false; const coreInstance = { _features: features, options: { ...defaultOptions3, ...options }, initialState, _queue: (cb) => { queued.push(cb); if (!queuedTimeout) { queuedTimeout = true; Promise.resolve().then(() => { while (queued.length) { queued.shift()(); } queuedTimeout = false; }).catch((error) => setTimeout(() => { throw error; })); } }, reset: () => { table.setState(table.initialState); }, setOptions: (updater) => { const newOptions = functionalUpdate(updater, table.options); table.options = mergeOptions(newOptions); }, getState: () => { return table.options.state; }, setState: (updater) => { var _a2, _b2; (_b2 = (_a2 = table.options).onStateChange) == null ? void 0 : _b2.call(_a2, updater); }, _getRowId: (row, index, parent) => { var _a2, _b2; var _table$options$getRow; return (_table$options$getRow = (_b2 = (_a2 = table.options).getRowId) == null ? void 0 : _b2.call(_a2, row, index, parent)) != null ? _table$options$getRow : `${parent ? [parent.id, index].join(".") : index}`; }, getCoreRowModel: () => { if (!table._getCoreRowModel) { table._getCoreRowModel = table.options.getCoreRowModel(table); } return table._getCoreRowModel(); }, getRowModel: () => { return table.getPaginationRowModel(); }, getRow: (id2) => { const row = table.getRowModel().rowsById[id2]; if (!row) { if (true) { throw new Error(`getRow expected an ID, but got ${id2}`); } throw new Error(); } return row; }, _getDefaultColumnDef: memo(() => [table.options.defaultColumn], (defaultColumn) => { var _defaultColumn; defaultColumn = (_defaultColumn = defaultColumn) != null ? _defaultColumn : {}; return { header: (props2) => { const resolvedColumnDef = props2.header.column.columnDef; if (resolvedColumnDef.accessorKey) { return resolvedColumnDef.accessorKey; } if (resolvedColumnDef.accessorFn) { return resolvedColumnDef.id; } return null; }, cell: (props2) => { var _a2, _b2; var _props$renderValue$to; return (_props$renderValue$to = (_b2 = (_a2 = props2.renderValue()) == null ? void 0 : _a2.toString) == null ? void 0 : _b2.call(_a2)) != null ? _props$renderValue$to : null; }, ...table._features.reduce((obj, feature) => { var _a2; return Object.assign(obj, (_a2 = feature.getDefaultColumnDef) == null ? void 0 : _a2.call(feature)); }, {}), ...defaultColumn }; }, { debug: () => { var _table$options$debugA; return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugColumns; }, key: "getDefaultColumnDef" }), _getColumnDefs: () => table.options.columns, getAllColumns: memo(() => [table._getColumnDefs()], (columnDefs) => { const recurseColumns = function(columnDefs2, parent, depth) { if (depth === void 0) { depth = 0; } return columnDefs2.map((columnDef) => { const column = createColumn(table, columnDef, depth, parent); const groupingColumnDef = columnDef; column.columns = groupingColumnDef.columns ? recurseColumns(groupingColumnDef.columns, column, depth + 1) : []; return column; }); }; return recurseColumns(columnDefs); }, { key: "getAllColumns", debug: () => { var _table$options$debugA2; return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugColumns; } }), getAllFlatColumns: memo(() => [table.getAllColumns()], (allColumns) => { return allColumns.flatMap((column) => { return column.getFlatColumns(); }); }, { key: "getAllFlatColumns", debug: () => { var _table$options$debugA3; return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugColumns; } }), _getAllFlatColumnsById: memo(() => [table.getAllFlatColumns()], (flatColumns) => { return flatColumns.reduce((acc, column) => { acc[column.id] = column; return acc; }, {}); }, { key: "getAllFlatColumnsById", debug: () => { var _table$options$debugA4; return (_table$options$debugA4 = table.options.debugAll) != null ? _table$options$debugA4 : table.options.debugColumns; } }), getAllLeafColumns: memo(() => [table.getAllColumns(), table._getOrderColumnsFn()], (allColumns, orderColumns2) => { let leafColumns = allColumns.flatMap((column) => column.getLeafColumns()); return orderColumns2(leafColumns); }, { key: "getAllLeafColumns", debug: () => { var _table$options$debugA5; return (_table$options$debugA5 = table.options.debugAll) != null ? _table$options$debugA5 : table.options.debugColumns; } }), getColumn: (columnId) => { const column = table._getAllFlatColumnsById()[columnId]; if (!column) { if (true) { console.warn(`[Table] Column with id ${columnId} does not exist.`); } throw new Error(); } return column; } }; Object.assign(table, coreInstance); table._features.forEach((feature) => { var _a2; return Object.assign(table, (_a2 = feature.createTable) == null ? void 0 : _a2.call(feature, table)); }); return table; } function createCell(table, row, column, columnId) { const getRenderValue = () => { var _cell$getValue; return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : table.options.renderFallbackValue; }; const cell = { id: `${row.id}_${column.id}`, row, column, getValue: () => row.getValue(columnId), renderValue: getRenderValue, getContext: memo(() => [table, column, row, cell], (table2, column2, row2, cell2) => ({ table: table2, column: column2, row: row2, cell: cell2, getValue: cell2.getValue, renderValue: cell2.renderValue }), { key: "cell.getContext", debug: () => table.options.debugAll }) }; table._features.forEach((feature) => { var _a2; Object.assign(cell, (_a2 = feature.createCell) == null ? void 0 : _a2.call(feature, cell, column, row, table)); }, {}); return cell; } var createRow = (table, id2, original, rowIndex, depth, subRows) => { var _a2; let row = { id: id2, index: rowIndex, original, depth, _valuesCache: {}, _uniqueValuesCache: {}, getValue: (columnId) => { if (row._valuesCache.hasOwnProperty(columnId)) { return row._valuesCache[columnId]; } const column = table.getColumn(columnId); if (!column.accessorFn) { return void 0; } row._valuesCache[columnId] = column.accessorFn(row.original, rowIndex); return row._valuesCache[columnId]; }, getUniqueValues: (columnId) => { if (row._uniqueValuesCache.hasOwnProperty(columnId)) { return row._uniqueValuesCache[columnId]; } const column = table.getColumn(columnId); if (!column.accessorFn) { return void 0; } if (!column.columnDef.getUniqueValues) { row._uniqueValuesCache[columnId] = [row.getValue(columnId)]; return row._uniqueValuesCache[columnId]; } row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, rowIndex); return row._uniqueValuesCache[columnId]; }, renderValue: (columnId) => { var _row$getValue; return (_row$getValue = row.getValue(columnId)) != null ? _row$getValue : table.options.renderFallbackValue; }, subRows: subRows != null ? subRows : [], getLeafRows: () => flattenBy(row.subRows, (d5) => d5.subRows), getAllCells: memo(() => [table.getAllLeafColumns()], (leafColumns) => { return leafColumns.map((column) => { return createCell(table, row, column, column.id); }); }, { key: "row.getAllCells", debug: () => { var _table$options$debugA; return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugRows; } }), _getAllCellsByColumnId: memo(() => [row.getAllCells()], (allCells) => { return allCells.reduce((acc, cell) => { acc[cell.column.id] = cell; return acc; }, {}); }, { key: false, debug: () => { var _table$options$debugA2; return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugRows; } }) }; for (let i4 = 0; i4 < table._features.length; i4++) { const feature = table._features[i4]; Object.assign(row, (_a2 = feature == null ? void 0 : feature.createRow) == null ? void 0 : _a2.call(feature, row, table)); } return row; }; function getCoreRowModel() { return (table) => memo(() => [table.options.data], (data) => { const rowModel = { rows: [], flatRows: [], rowsById: {} }; const accessRows = function(originalRows, depth, parent) { var _a2; if (depth === void 0) { depth = 0; } const rows = []; for (let i4 = 0; i4 < originalRows.length; i4++) { const row = createRow(table, table._getRowId(originalRows[i4], i4, parent), originalRows[i4], i4, depth); rowModel.flatRows.push(row); rowModel.rowsById[row.id] = row; rows.push(row); if (table.options.getSubRows) { row.originalSubRows = table.options.getSubRows(originalRows[i4], i4); if ((_a2 = row.originalSubRows) == null ? void 0 : _a2.length) { row.subRows = accessRows(row.originalSubRows, depth + 1, row); } } } return rows; }; rowModel.rows = accessRows(data); return rowModel; }, { key: "getRowModel", debug: () => { var _table$options$debugA; return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; }, onChange: () => { table._autoResetPageIndex(); } }); } function getGroupedRowModel() { return (table) => memo(() => [table.getState().grouping, table.getPreGroupedRowModel()], (grouping, rowModel) => { if (!rowModel.rows.length || !grouping.length) { return rowModel; } const existingGrouping = grouping.filter((columnId) => table.getColumn(columnId)); const groupedFlatRows = []; const groupedRowsById = {}; const groupUpRecursively = function(rows, depth, parentId) { if (depth === void 0) { depth = 0; } if (depth >= existingGrouping.length) { return rows.map((row) => { row.depth = depth; groupedFlatRows.push(row); groupedRowsById[row.id] = row; if (row.subRows) { row.subRows = groupUpRecursively(row.subRows, depth + 1); } return row; }); } const columnId = existingGrouping[depth]; const rowGroupsMap = groupBy(rows, columnId); const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map((_ref, index) => { let [groupingValue, groupedRows2] = _ref; let id2 = `${columnId}:${groupingValue}`; id2 = parentId ? `${parentId}>${id2}` : id2; const subRows = groupUpRecursively(groupedRows2, depth + 1, id2); const leafRows = depth ? flattenBy(groupedRows2, (row2) => row2.subRows) : groupedRows2; const row = createRow(table, id2, leafRows[0].original, index, depth); Object.assign(row, { groupingColumnId: columnId, groupingValue, subRows, leafRows, getValue: (columnId2) => { if (existingGrouping.includes(columnId2)) { if (row._valuesCache.hasOwnProperty(columnId2)) { return row._valuesCache[columnId2]; } if (groupedRows2[0]) { var _groupedRows$0$getVal; row._valuesCache[columnId2] = (_groupedRows$0$getVal = groupedRows2[0].getValue(columnId2)) != null ? _groupedRows$0$getVal : void 0; } return row._valuesCache[columnId2]; } if (row._groupingValuesCache.hasOwnProperty(columnId2)) { return row._groupingValuesCache[columnId2]; } const column = table.getColumn(columnId2); const aggregateFn = column.getAggregationFn(); if (aggregateFn) { row._groupingValuesCache[columnId2] = aggregateFn(columnId2, leafRows, groupedRows2); return row._groupingValuesCache[columnId2]; } } }); subRows.forEach((subRow) => { groupedFlatRows.push(subRow); groupedRowsById[subRow.id] = subRow; }); return row; }); return aggregatedGroupedRows; }; const groupedRows = groupUpRecursively(rowModel.rows, 0, ""); groupedRows.forEach((subRow) => { groupedFlatRows.push(subRow); groupedRowsById[subRow.id] = subRow; }); return { rows: groupedRows, flatRows: groupedFlatRows, rowsById: groupedRowsById }; }, { key: "getGroupedRowModel", debug: () => { var _table$options$debugA; return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; }, onChange: () => { table._queue(() => { table._autoResetExpanded(); table._autoResetPageIndex(); }); } }); } function groupBy(rows, columnId) { const groupMap = /* @__PURE__ */ new Map(); return rows.reduce((map, row) => { const resKey = `${row.getValue(columnId)}`; const previous = map.get(resKey); if (!previous) { map.set(resKey, [row]); } else { previous.push(row); } return map; }, groupMap); } function getExpandedRowModel() { return (table) => memo(() => [table.getState().expanded, table.getPreExpandedRowModel(), table.options.paginateExpandedRows], (expanded, rowModel, paginateExpandedRows) => { if (!rowModel.rows.length || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) { return rowModel; } if (!paginateExpandedRows) { return rowModel; } return expandRows(rowModel); }, { key: "getExpandedRowModel", debug: () => { var _table$options$debugA; return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; } }); } function expandRows(rowModel) { const expandedRows = []; const handleRow = (row) => { var _a2; expandedRows.push(row); if (((_a2 = row.subRows) == null ? void 0 : _a2.length) && row.getIsExpanded()) { row.subRows.forEach(handleRow); } }; rowModel.rows.forEach(handleRow); return { rows: expandedRows, flatRows: rowModel.flatRows, rowsById: rowModel.rowsById }; } // node_modules/@tanstack/react-table/build/lib/index.mjs function flexRender(Comp, props2) { return !Comp ? null : isReactComponent(Comp) ? /* @__PURE__ */ h(Comp, props2) : Comp; } function isReactComponent(component) { return isClassComponent(component) || typeof component === "function" || isExoticComponent(component); } function isClassComponent(component) { return typeof component === "function" && (() => { const proto = Object.getPrototypeOf(component); return proto.prototype && proto.prototype.isReactComponent; })(); } function isExoticComponent(component) { return typeof component === "object" && typeof component.$$typeof === "symbol" && ["react.memo", "react.forward_ref"].includes(component.$$typeof.description); } function useReactTable(options) { const resolvedOptions = { state: {}, onStateChange: () => { }, renderFallbackValue: null, ...options }; const [tableRef] = p2(() => ({ current: createTable(resolvedOptions) })); const [state, setState] = p2(() => tableRef.current.initialState); tableRef.current.setOptions((prev) => ({ ...prev, ...options, state: { ...state, ...options.state }, onStateChange: (updater) => { var _a2; setState(updater); (_a2 = options.onStateChange) == null ? void 0 : _a2.call(options, updater); } })); return tableRef.current; } // src/components/ui/menus/menuItems.tsx var import_obsidian7 = require("obsidian"); // src/components/ui/menus/selectMenu/concerns/focusNextElement.js function focusNextElement(scope, currentTarget) { const interactiveEls = scope.querySelectorAll("a,button,input"); const currentEl = Array.prototype.findIndex.call( interactiveEls, (element) => element === currentTarget ); const nextEl = interactiveEls[currentEl - 1] || interactiveEls[currentEl + 1]; if (nextEl) { nextEl.focus(); } } // src/components/ui/menus/selectMenu/SelectMenuInput.tsx var SIZER_STYLES = { position: "absolute", width: 0, height: 0, visibility: "hidden", overflow: "scroll", whiteSpace: "pre" }; var STYLE_PROPS = [ "fontSize", "fontFamily", "fontWeight", "fontStyle", "letterSpacing", "textTransform" ]; var SelectMenuInput = k3( (props2, input) => { const { classNames: classNames8, inputAttributes, inputEventHandlers, index } = props2; const sizer = _2(null); const [inputWidth, setInputWidth] = p2(null); const [query, setQuery] = p2(""); const [placeholderText, setPlaceholderText] = p2(""); h2(() => { copyInputStyles(); updateInputWidth(); setTimeout(() => { input.current.focus(); }, 50); }, []); h2(() => { if (query !== props2.query || placeholderText !== props2.placeholderText) { setQuery(props2.query); setPlaceholderText(props2.placeholderText); updateInputWidth(); } }, [props2.query, props2.placeholderText]); const copyInputStyles = () => { const inputStyle = window.getComputedStyle(input.current); STYLE_PROPS.forEach((prop) => { sizer.current.style[prop] = inputStyle[prop]; }); }; const updateInputWidth = () => { let _inputWidth; _inputWidth = Math.ceil(sizer.current.scrollWidth) + 2; if (_inputWidth !== inputWidth) { setInputWidth(_inputWidth); } }; return /* @__PURE__ */ bn.createElement("div", { className: classNames8.searchWrapper }, /* @__PURE__ */ bn.createElement("input", { ...inputAttributes, ...inputEventHandlers, ref: input, value: query, placeholder: placeholderText, className: classNames8.searchInput, role: "combobox", style: { width: "100%" } }), /* @__PURE__ */ bn.createElement("div", { ref: sizer, style: SIZER_STYLES }, query || placeholderText)); } ); var SelectMenuInput_default = SelectMenuInput; // src/components/ui/menus/selectMenu/SelectMenuSuggestions.tsx function markIt(name, query) { const regexp = matchAny(query); return name.replace(regexp, "$&"); } var SelectMenuSuggestionsComponent = (props2) => { const ref = _2(null); h2(() => { var _a2; if (props2.active) { (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.scrollIntoViewIfNeeded(); } }, [props2.active]); return /* @__PURE__ */ bn.createElement(bn.Fragment, null, props2.item.onToggle && /* @__PURE__ */ bn.createElement("div", null, "Toggle"), /* @__PURE__ */ bn.createElement("span", { ref, dangerouslySetInnerHTML: { __html: markIt(props2.item.name, props2.query) } }), props2.item.description && /* @__PURE__ */ bn.createElement("span", { className: "mk-description", ref, dangerouslySetInnerHTML: { __html: markIt(props2.item.description, props2.query) } }), props2.item.removeable && /* @__PURE__ */ bn.createElement("div", null, "Remove")); }; var SelectMenuSuggestions = (props2) => { const timer = _2(null); const mouseOver = (e4, index) => { if (!props2.hoverSelect) { return; } timer.current && clearTimeout(timer.current); timer.current = setTimeout(() => props2.setIndex(index), 300); }; const options = props2.options.map((item, index) => { const key2 = `${props2.id}-${index}`; const classNames8 = []; if (props2.index === index) { classNames8.push(props2.classNames.suggestionActive); } if (item.disabled) { classNames8.push(props2.classNames.suggestionDisabled); } return /* @__PURE__ */ bn.createElement("li", { id: key2, key: key2, role: "option", className: classNames8.join(" "), "aria-disabled": Boolean(item.disabled), onMouseDown: (e4) => e4.preventDefault(), onClick: () => props2.addTag(item), onMouseOver: (e4) => mouseOver(e4, index), onMouseOut: (e4) => props2.hoverSelect && clearTimeout(timer.current) }, /* @__PURE__ */ bn.createElement(SelectMenuSuggestionsComponent, { item, query: props2.query, active: index == props2.index })); }); return /* @__PURE__ */ bn.createElement("div", { className: props2.classNames.suggestions }, /* @__PURE__ */ bn.createElement("ul", { role: "listbox", id: props2.id }, options, props2.query && props2.allowNew && /* @__PURE__ */ bn.createElement("li", { onMouseDown: (e4) => e4.preventDefault(), onClick: () => props2.addTag({ name: props2.query, value: props2.query }) }, "Add ", props2.query))); }; var SelectMenuSuggestions_default = SelectMenuSuggestions; // src/components/ui/menus/selectMenu/SelectMenuPill.tsx var SelectMenuPillComponent = (props2) => { return /* @__PURE__ */ bn.createElement("button", { type: "button", className: props2.classNames.selectedTag, onClick: props2.onDelete }, /* @__PURE__ */ bn.createElement("span", { className: props2.classNames.selectedTagName }, props2.tag.name)); }; var SelectMenuPill_default = SelectMenuPillComponent; // src/components/ui/menus/selectMenu/SelectMenuComponent.tsx var import_lodash3 = __toESM(require_lodash()); var KEYS = { ENTER: "Enter", TAB: "Tab", BACKSPACE: "Backspace", UP_ARROW: "ArrowUp", UP_ARROW_COMPAT: "Up", DOWN_ARROW: "ArrowDown", DOWN_ARROW_COMPAT: "Down" }; var CLASS_NAMES = { root: "mk-options-menu", rootFocused: "is-focused", selected: "mk-options-menu__selected", selectedTag: "mk-options-menu__selected-tag", selectedTagName: "mk-options-menu__selected-tag-name", search: "mk-options-menu__search", searchWrapper: "mk-options-menu__search-wrapper", searchInput: "mk-options-menu__search-input", suggestions: "mk-options-menu__suggestions", suggestionActive: "is-active", suggestionDisabled: "is-disabled" }; var defaultProps = { id: "SelectMenu", tags: [], suggestionsOnly: false, placeholderText: i18n_default.labels.optionItemSelectPlaceholder, noSuggestionsText: null, newTagText: null, suggestions: [], suggestionsFilter: defaultSuggestionsFilter, suggestionsTransform: null, classNames: CLASS_NAMES, delimiters: [KEYS.ENTER], minQueryLength: 2, maxSuggestionsLength: 8, inputAttributes: {}, hoverSelect: false }; var findMatchIndex = (options, query) => { return options.findIndex((option) => matchExact(query).test(option.name)); }; var pressDelimiter = (props2, query, index, options, addTag) => { if (query.length >= props2.minQueryLength) { const match2 = findMatchIndex(options, query); const _index = index === -1 ? match2 : index; const tag = _index > -1 ? options[_index] : null; if (tag) { addTag(tag); } else { addTag({ name: query, value: query }); } } }; function defaultSuggestionsFilter(item, query) { const regexp = matchAny(query); return regexp.test(item.name); } function getOptions(props2, query) { let options; if (props2.suggestionsTransform) { options = props2.suggestionsTransform(query, props2.suggestions); } else { options = props2.suggestions.filter( (item) => props2.suggestionsFilter(item, query) ); } options = options.slice(0, props2.maxSuggestionsLength); if (props2.newTagText && findMatchIndex(options, query) === -1) { options.push({ id: 0, name: query, value: query }); } else if (props2.noSuggestionsText && options.length === 0) { options.push({ id: 0, name: props2.noSuggestionsText, value: "", disabled: true }); } return options; } var SelectMenuComponent = bn.forwardRef((_props, ref) => { const props2 = { ...defaultProps, ..._props }; const [options, setOptions] = p2([]); const inputRef = _2(null); const [query, setQuery] = p2(""); const [focused, setFocused] = p2(false); const [index, setIndex] = p2(0); const onComposition = _2(false); h2(() => { if (ref) { ref.current = () => { var _a2; if (!focused) { (_a2 = inputRef == null ? void 0 : inputRef.current) == null ? void 0 : _a2.focus(); setFocused(true); return false; } return true; }; } }, [focused]); h2(() => { var _a2; if (index != -1 && props2.onHover && props2.hoverSelect) { debounceFn((_a2 = options[index]) == null ? void 0 : _a2.value); } }, [index, options]); const debounceFn = T2((0, import_lodash3.debounce)(handleDebounceFn, 100), []); function handleDebounceFn(inputValue) { props2.onHover(inputValue); } h2(() => { if (query.length == 0 && props2.defaultSuggestions) { setOptions(props2.defaultSuggestions); return; } setOptions(getOptions(props2, query)); }, [query, props2.suggestions]); const container = _2(null); const onInput = (e4) => { if (e4.type === "compositionstart") { onComposition.current = true; return; } if (e4.type === "compositionend") { onComposition.current = false; } if (onComposition.current) { return; } const _query = e4.target.value; if (props2.onInput) { props2.onInput(_query); } if (_query.length === query.length + 1 && props2.delimiters.indexOf(query.slice(-1)) > -1) { pressDelimiter(props2, query, index, options, addTag); } else if (_query !== query) { setQuery(_query); } }; const onKeyDown = (e4) => { if (props2.delimiters.indexOf(e4.key) > -1) { if (query || index > -1) { e4.preventDefault(); } pressDelimiter(props2, query, index, options, addTag); } if (e4.key === KEYS.BACKSPACE) { pressBackspaceKey(); } if (e4.key === KEYS.UP_ARROW || e4.key === KEYS.UP_ARROW_COMPAT) { pressUpKey(e4); } if (e4.key === KEYS.DOWN_ARROW || e4.key === KEYS.DOWN_ARROW_COMPAT) { pressDownKey(e4); } }; const onBlur = () => { setFocused(false); if (props2.onBlur) { props2.onBlur(); } }; const onFocus = () => { setFocused(true); if (props2.onFocus) { props2.onFocus(); } }; const onDeleteTag = (index2, event) => { if (container.current) { focusNextElement(container.current, event.currentTarget); } deleteTag(index2); }; const addTag = (tag) => { if (tag.disabled) { return; } if (props2.onValidate && !props2.onValidate(tag)) { return; } props2.onAddition(tag); clearInput(); }; const deleteTag = (i4) => { props2.onDelete(i4); }; const clearInput = () => { setQuery(""); setIndex(-1); }; const clearSelectedIndex = () => { setIndex(-1); }; const pressUpKey = (e4) => { e4.preventDefault(); const size = options.length - 1; setIndex(index <= 0 ? size : index - 1); }; const pressDownKey = (e4) => { e4.preventDefault(); const size = options.length - 1; setIndex((i4) => i4 >= size ? 0 : i4 + 1); }; function pressBackspaceKey() { if (!query.length) { deleteTag(props2.tags.length - 1); } } const focusInput = () => { inputRef.current.focus(); }; const inputEventHandlers = { onChange: onInput, onBlur, onFocus, onInput: () => { }, onKeyDown, onCompositionEnd: onInput, onCompositionStart: onInput }; const expanded = focused && query.length >= props2.minQueryLength; const classNames8 = Object.assign({}, CLASS_NAMES, props2.classNames); const rootClassNames = [classNames8.root]; focused && rootClassNames.push(classNames8.rootFocused); return /* @__PURE__ */ bn.createElement("div", { ref: container, className: rootClassNames.join(" ") }, !props2.suggestionsOnly ? /* @__PURE__ */ bn.createElement("div", { className: classNames8.selected, "aria-relevant": "additions removals", "aria-live": "polite" }, /* @__PURE__ */ bn.createElement(bn.Fragment, null, props2.tags.map((tag, i4) => /* @__PURE__ */ bn.createElement(SelectMenuPill_default, { key: i4, tag, classNames: classNames8, onDelete: (e4) => onDeleteTag(i4, e4) }))), /* @__PURE__ */ bn.createElement("div", { className: classNames8.search }, /* @__PURE__ */ bn.createElement(SelectMenuInput_default, { ref: inputRef, query, index, id: props2.id, classNames: classNames8, inputAttributes: props2.inputAttributes, inputEventHandlers, expanded, placeholderText: props2.placeholderText }))) : null, options.length || props2.allowNew ? /* @__PURE__ */ bn.createElement(SelectMenuSuggestions_default, { options, hoverSelect: props2.hoverSelect, query, setIndex, index, id: props2.id, classNames: classNames8, expanded, addTag, allowNew: props2.allowNew }) : null, props2.previewComponent); }); var SelectMenuComponent_default = SelectMenuComponent; // src/components/ui/menus/selectMenu.tsx var SelectMenu = bn.forwardRef( (props2, ref) => { var _a2; const initialOptions = props2.options.map((o3, i4) => { return { ...o3, id: i4 + 1 }; }); h2(() => { setSuggestions( props2.options.map((o3, i4) => { return { ...o3, id: i4 + 1 }; }) ); }, [props2.options]); const [suggestions, setSuggestions] = p2(initialOptions); const [tags, setTags] = p2( props2.value.map( (v3) => { var _a3; return (_a3 = initialOptions.find((f4) => f4.value == v3)) != null ? _a3 : { id: 0, name: v3, value: v3 }; } ) ); const onDelete = T2( (tagIndex) => { const newTags = tags.filter((_5, i4) => i4 !== tagIndex); setTags(newTags); props2.saveOptions( suggestions.map((f4) => f4.value), newTags.map((f4) => f4.value) ); }, [suggestions, tags] ); const onAddition = T2( (newTag) => { let tag = newTag; let newSuggestions = suggestions; let newTags = tags; if (!suggestions.find((s5) => s5.value == newTag.value)) { tag = { id: suggestions.length + 1, name: newTag.name, value: newTag.name }; newSuggestions = [...suggestions, tag]; setSuggestions(newSuggestions); } if (props2.multi) { if (!tags.find((t4) => t4.value == tag.value)) { newTags = [...tags, tag]; setTags(newTags); } } else { newTags = [tag]; setTags(newTags); } props2.saveOptions( newSuggestions.map((f4) => f4.value), newTags.map((f4) => f4.value) ); if (!props2.multi) { props2.hide(); } }, [tags, suggestions] ); const onValidation = T2( (newTag) => { if (!props2.editable && !suggestions.find((s5) => s5.value == newTag.value)) { return false; } if (newTag.name.length == 0) { return false; } return true; }, [suggestions] ); return /* @__PURE__ */ bn.createElement(SelectMenuComponent_default, { tags: props2.multi ? tags : [], suggestions, ref, onDelete, onAddition, onValidate: onValidation, defaultSuggestions: props2.defaultOptions, placeholderText: (_a2 = props2.placeholder) != null ? _a2 : "", minQueryLength: 0, onHover: props2.onHover, hoverSelect: props2.onHover ? true : false, maxSuggestionsLength: props2.showAll ? Math.min(50, props2.options.length) : 8, suggestionsOnly: !props2.searchable && !props2.editable, allowNew: props2.editable, previewComponent: props2.previewComponent }); } ); // src/components/ui/menus/menuItems.tsx var inputMenuItem = (menuItem, value, setValue) => { const frag = document.createDocumentFragment(); const spanEl = frag.createEl("span"); const inputEl = frag.createEl("input"); inputEl.type = "text"; inputEl.value = value; inputEl.addEventListener("click", (e4) => { e4.stopImmediatePropagation(); }); inputEl.addEventListener("mousedown", (e4) => { e4.stopImmediatePropagation(); }); inputEl.addEventListener("mouseup", (e4) => { e4.stopImmediatePropagation(); }); inputEl.addEventListener("blur", (e4) => { setValue(inputEl.value); }); menuItem.dom.toggleClass("mk-menu-input", true); menuItem.setTitle(frag); return menuItem; }; var showSelectMenu = (point, optionProps) => { const menu = new import_obsidian7.Menu(); menu.dom.toggleClass("mk-menu", true); menu.setUseNativeMenu(false); const frag = document.createDocumentFragment(); const div = frag.createDiv("mk-options-container"); div.style.minHeight = Math.min( 200, (optionProps.options.length + (optionProps.searchable ? 1 : 0)) * 28 ).toString() + "px"; div.addEventListener("click", (e4) => { e4.stopImmediatePropagation(); }); div.addEventListener("mousedown", (e4) => { e4.stopImmediatePropagation(); }); div.addEventListener("mouseup", (e4) => { e4.stopImmediatePropagation(); }); div.addEventListener("keydown", (e4) => { }); menu.onHide(() => optionProps.onHide && optionProps.onHide()); const root = createRoot(div); root.render( /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement(SelectMenu, { hide: () => { menu.hide(); optionProps.onHide && optionProps.onHide(); }, ...optionProps })) ); menu.addItem((item) => { item.setTitle(frag); }); const keys = [...menu.scope.keys]; for (let i4 = 0; i4 < keys.length; i4++) { if (keys[i4].key != "Escape") { menu.scope.unregister(keys[i4]); } } menu.showAtPosition(point); return menu; }; var disclosureMenuItem = (menuItem, multi, editable, title, value, options, saveOptions) => { const frag = document.createDocumentFragment(); const div = frag.createDiv("title"); div.textContent = title; const div2 = frag.createDiv("disclosure"); div2.textContent = value; menuItem.setTitle(frag); menuItem.onClick((ev) => { var _a2; ev.stopPropagation(); const offset = menuItem.dom.getBoundingClientRect(); showSelectMenu( { x: offset.right + 10, y: offset.top }, { multi, editable, value: (_a2 = splitString(value)) != null ? _a2 : [], options, saveOptions, searchable: true, showAll: true } ); }); return menuItem; }; // src/components/ContextView/DataTypeView/OptionCell.tsx var OptionCell = (props2) => { var _a2, _b2; const initialValue = (props2.multi ? (_a2 = splitString(props2.initialValue)) != null ? _a2 : [] : [props2.initialValue]).filter((f4) => f4); const initialOptions = [ ...(_b2 = splitString(props2.options).filter((f4) => f4).map((t4) => ({ name: t4, value: t4 }))) != null ? _b2 : [], ...initialValue.map((f4) => ({ name: f4, value: f4 })) ].filter(onlyUniqueProp("value")); const [options, setOptions] = p2(initialOptions); const [value, setValue] = p2(initialValue); h2(() => { var _a3; setValue( (props2.multi ? (_a3 = splitString(props2.initialValue)) != null ? _a3 : [] : [props2.initialValue]).filter((f4) => f4) ); }, [props2.initialValue]); const removeValue = (v3) => { const newValues = value.filter((f4) => f4 != v3); setValue(newValues); props2.saveOptions( options.map((f4) => f4.value).join(","), newValues.join(",") ); }; const saveOptions = (_options, _value) => { if (!props2.multi) { setOptions( _options.filter((f4) => f4.length > 0).map((t4) => ({ name: t4, value: t4 })) ); setValue(_value); props2.saveOptions(_options.filter((f4) => f4.length > 0).join(","), _value.join(",")); } else { setOptions(_options.map((t4) => ({ name: t4, value: t4 }))); setValue(_value); props2.saveOptions(_options.filter((f4) => f4.length > 0).join(","), _value.join(",")); } }; const menuProps = () => ({ multi: false, editable: true, value, options: !props2.multi ? [{ name: i18n_default.menu.none, value: "" }, ...options] : options, saveOptions, placeholder: i18n_default.labels.optionItemSelectPlaceholder, searchable: true, showAll: true, onHide: () => props2.setEditMode(null) }); return /* @__PURE__ */ bn.createElement(OptionCellBase, { value, menuProps, multi: props2.multi, editMode: props2.editMode, removeValue }); }; var OptionCellBase = (props2) => { const { value, menuProps, removeValue, getLabelString, openItem, valueClass } = props2; const menuRef = _2(null); h2(() => { if (props2.editMode == 2) { if (!menuRef.current) showMenu(); } }, [props2.editMode]); const ref = _2(null); const showMenu = () => { const offset = ref.current.getBoundingClientRect(); menuRef.current = showSelectMenu( { x: offset.left - 4, y: offset.bottom - 4 }, menuProps() ); }; const editable = props2.editMode > 0; return /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-option", ref }, value.length > 0 ? value.map((o3) => /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-option-item" }, (getLabelString ? getLabelString(o3).length > 0 : o3.length > 0) ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { className: valueClass && valueClass(o3), onClick: () => openItem && openItem(o3) }, getLabelString ? getLabelString(o3) : o3), editable && props2.multi ? /* @__PURE__ */ bn.createElement("div", { className: "mk-icon-xsmall", onClick: () => removeValue(o3), dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null)) : /* @__PURE__ */ bn.createElement("div", null, i18n_default.labels.select), editable && !props2.multi && value.length > 0 ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("span", null), /* @__PURE__ */ bn.createElement("div", { onClick: (e4) => editable && !props2.multi && showMenu(), className: "mk-cell-option-select mk-icon-xxsmall mk-icon-rotated", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-collapse-sm"] } })) : /* @__PURE__ */ bn.createElement(bn.Fragment, null))) : editable && !props2.multi ? /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-option-item" }, /* @__PURE__ */ bn.createElement("div", { onClick: (e4) => !props2.multi && showMenu() }, i18n_default.labels.select)) : props2.editMode == -1 ? /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-option-item mk-cell-empty" }, /* @__PURE__ */ bn.createElement("div", null, i18n_default.menu.none)) : /* @__PURE__ */ bn.createElement(bn.Fragment, null), editable && props2.multi ? /* @__PURE__ */ bn.createElement("div", { onClick: (e4) => editable && showMenu(), className: "mk-cell-option-new mk-icon-small", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-plus"] } }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null)); }; // src/components/ContextView/DataTypeView/ContextCell.tsx var ContextCell = (props2) => { var _a2, _b2, _c2; const initialValue = (props2.multi ? (_a2 = splitString(props2.initialValue)) != null ? _a2 : [] : [props2.initialValue]).filter((f4) => (f4 == null ? void 0 : f4.length) > 0).map((f4) => ({ path: f4, label: fileNameToString(folderPathToString(f4)) })); const ref = _2(null); const options = (_c2 = (_b2 = props2.contextTable) == null ? void 0 : _b2.rows.map((f4) => ({ name: fileNameToString(folderPathToString(f4["File"])), value: f4["File"] }))) != null ? _c2 : []; const [value, setValue] = p2(initialValue); const removeValue = (v3) => { const newValues = value.filter((f4) => f4.path != v3.path); setValue(newValues); props2.saveValue(newValues.map((f4) => f4.path).join(",")); }; h2(() => { var _a3; setValue( (props2.multi ? (_a3 = splitString(props2.initialValue)) != null ? _a3 : [] : [props2.initialValue]).filter((f4) => (f4 == null ? void 0 : f4.length) > 0).map((f4) => ({ path: f4, label: fileNameToString(folderPathToString(f4)) })) ); }, [props2.initialValue]); const saveOptions = (_options, _value) => { insertContextItems(props2.plugin, _options, props2.contextTag); if (!props2.multi) { setValue( _value.map((f4) => ({ path: f4, label: fileNameToString(folderPathToString(f4)) })) ); props2.saveValue(_value.join(",")); } else { const newValue = _value[0]; if (newValue) { const newValues = uniq([...value.map((f4) => f4.path), newValue]); setValue( newValues.map((f4) => ({ label: fileNameToString(folderPathToString(f4)), path: f4 })) ); props2.saveValue(newValues.join(",")); } } }; const openLink = async (o3) => { const file = getAbstractFileAtPath(app, o3.path); if (file) { openAFile(file, props2.plugin, false); } }; const menuProps = () => { const _options = !props2.multi ? [{ name: i18n_default.menu.none, value: "" }, ...options] : options; return { multi: false, editable: true, value: value.map((f4) => f4.path), options: _options, saveOptions, placeholder: i18n_default.labels.contextItemSelectPlaceholder, searchable: true, showAll: true, onHide: () => props2.setEditMode(null) }; }; return /* @__PURE__ */ bn.createElement(OptionCellBase, { menuProps, openItem: openLink, getLabelString: (o3) => o3.label, value, multi: props2.multi, editMode: props2.editMode, removeValue }); }; // src/components/ui/menus/datePickerMenu.tsx var import_obsidian8 = require("obsidian"); // node_modules/react-day-picker/dist/index.esm.js var __assign2 = function() { __assign2 = Object.assign || function __assign3(t4) { for (var s5, i4 = 1, n2 = arguments.length; i4 < n2; i4++) { s5 = arguments[i4]; for (var p3 in s5) if (Object.prototype.hasOwnProperty.call(s5, p3)) t4[p3] = s5[p3]; } return t4; }; return __assign2.apply(this, arguments); }; function __rest2(s5, e4) { var t4 = {}; for (var p3 in s5) if (Object.prototype.hasOwnProperty.call(s5, p3) && e4.indexOf(p3) < 0) t4[p3] = s5[p3]; if (s5 != null && typeof Object.getOwnPropertySymbols === "function") for (var i4 = 0, p3 = Object.getOwnPropertySymbols(s5); i4 < p3.length; i4++) { if (e4.indexOf(p3[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s5, p3[i4])) t4[p3[i4]] = s5[p3[i4]]; } return t4; } function __spreadArray2(to, from, pack) { if (pack || arguments.length === 2) for (var i4 = 0, l3 = from.length, ar; i4 < l3; i4++) { if (ar || !(i4 in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i4); ar[i4] = from[i4]; } } return to.concat(ar || Array.prototype.slice.call(from)); } function isDayPickerMultiple(props2) { return props2.mode === "multiple"; } function isDayPickerRange(props2) { return props2.mode === "range"; } function isDayPickerSingle(props2) { return props2.mode === "single"; } var defaultClassNames = { root: "rdp", multiple_months: "rdp-multiple_months", with_weeknumber: "rdp-with_weeknumber", vhidden: "rdp-vhidden", button_reset: "rdp-button_reset", button: "rdp-button", caption: "rdp-caption", caption_start: "rdp-caption_start", caption_end: "rdp-caption_end", caption_between: "rdp-caption_between", caption_label: "rdp-caption_label", caption_dropdowns: "rdp-caption_dropdowns", dropdown: "rdp-dropdown", dropdown_month: "rdp-dropdown_month", dropdown_year: "rdp-dropdown_year", dropdown_icon: "rdp-dropdown_icon", months: "rdp-months", month: "rdp-month", table: "rdp-table", tbody: "rdp-tbody", tfoot: "rdp-tfoot", head: "rdp-head", head_row: "rdp-head_row", head_cell: "rdp-head_cell", nav: "rdp-nav", nav_button: "rdp-nav_button", nav_button_previous: "rdp-nav_button_previous", nav_button_next: "rdp-nav_button_next", nav_icon: "rdp-nav_icon", row: "rdp-row", weeknumber: "rdp-weeknumber", cell: "rdp-cell", day: "rdp-day", day_today: "rdp-day_today", day_outside: "rdp-day_outside", day_selected: "rdp-day_selected", day_disabled: "rdp-day_disabled", day_hidden: "rdp-day_hidden", day_range_start: "rdp-day_range_start", day_range_end: "rdp-day_range_end", day_range_middle: "rdp-day_range_middle" }; function formatCaption(month, options) { return format(month, "LLLL y", options); } function formatDay(day, options) { return format(day, "d", options); } function formatMonthCaption(month, options) { return format(month, "LLLL", options); } function formatWeekNumber(weekNumber) { return "".concat(weekNumber); } function formatWeekdayName(weekday, options) { return format(weekday, "cccccc", options); } function formatYearCaption(year, options) { return format(year, "yyyy", options); } var formatters3 = /* @__PURE__ */ Object.freeze({ __proto__: null, formatCaption, formatDay, formatMonthCaption, formatWeekNumber, formatWeekdayName, formatYearCaption }); var labelDay = function(day, activeModifiers, options) { return format(day, "do MMMM (EEEE)", options); }; var labelMonthDropdown = function() { return "Month: "; }; var labelNext = function() { return "Go to next month"; }; var labelPrevious = function() { return "Go to previous month"; }; var labelWeekday = function(day, options) { return format(day, "cccc", options); }; var labelWeekNumber = function(n2) { return "Week n. ".concat(n2); }; var labelYearDropdown = function() { return "Year: "; }; var labels = /* @__PURE__ */ Object.freeze({ __proto__: null, labelDay, labelMonthDropdown, labelNext, labelPrevious, labelWeekday, labelWeekNumber, labelYearDropdown }); function getDefaultContextValues() { var captionLayout = "buttons"; var classNames8 = defaultClassNames; var locale2 = en_US_default; var modifiersClassNames = {}; var modifiers = {}; var numberOfMonths = 1; var styles = {}; var today = new Date(); return { captionLayout, classNames: classNames8, formatters: formatters3, labels, locale: locale2, modifiersClassNames, modifiers, numberOfMonths, styles, today, mode: "default" }; } function parseFromToProps(props2) { var fromYear = props2.fromYear, toYear = props2.toYear, fromMonth = props2.fromMonth, toMonth = props2.toMonth; var fromDate = props2.fromDate, toDate2 = props2.toDate; if (fromMonth) { fromDate = startOfMonth(fromMonth); } else if (fromYear) { fromDate = new Date(fromYear, 0, 1); } if (toMonth) { toDate2 = endOfMonth(toMonth); } else if (toYear) { toDate2 = new Date(toYear, 11, 31); } return { fromDate: fromDate ? startOfDay(fromDate) : void 0, toDate: toDate2 ? startOfDay(toDate2) : void 0 }; } var DayPickerContext = B(void 0); function DayPickerProvider(props2) { var _a2; var initialProps = props2.initialProps; var defaultContextValues = getDefaultContextValues(); var _b2 = parseFromToProps(initialProps), fromDate = _b2.fromDate, toDate2 = _b2.toDate; var captionLayout = (_a2 = initialProps.captionLayout) !== null && _a2 !== void 0 ? _a2 : defaultContextValues.captionLayout; if (captionLayout !== "buttons" && (!fromDate || !toDate2)) { captionLayout = "buttons"; } var onSelect; if (isDayPickerSingle(initialProps) || isDayPickerMultiple(initialProps) || isDayPickerRange(initialProps)) { onSelect = initialProps.onSelect; } var value = __assign2(__assign2(__assign2({}, defaultContextValues), initialProps), { captionLayout, classNames: __assign2(__assign2({}, defaultContextValues.classNames), initialProps.classNames), components: __assign2({}, initialProps.components), formatters: __assign2(__assign2({}, defaultContextValues.formatters), initialProps.formatters), fromDate, labels: __assign2(__assign2({}, defaultContextValues.labels), initialProps.labels), mode: initialProps.mode || defaultContextValues.mode, modifiers: __assign2(__assign2({}, defaultContextValues.modifiers), initialProps.modifiers), modifiersClassNames: __assign2(__assign2({}, defaultContextValues.modifiersClassNames), initialProps.modifiersClassNames), onSelect, styles: __assign2(__assign2({}, defaultContextValues.styles), initialProps.styles), toDate: toDate2 }); return bn.createElement(DayPickerContext.Provider, { value }, props2.children); } function useDayPicker() { var context = q2(DayPickerContext); if (!context) { throw new Error("useDayPicker must be used within a DayPickerProvider."); } return context; } function CaptionLabel(props2) { var _a2 = useDayPicker(), locale2 = _a2.locale, classNames8 = _a2.classNames, styles = _a2.styles, formatCaption2 = _a2.formatters.formatCaption; return bn.createElement("h2", { className: classNames8.caption_label, style: styles.caption_label, "aria-live": "polite", "aria-atomic": "true", id: props2.id }, formatCaption2(props2.displayMonth, { locale: locale2 })); } function IconDropdown(props2) { return bn.createElement( "svg", __assign2({ width: "8px", height: "8px", viewBox: "0 0 120 120", "data-testid": "iconDropdown" }, props2), bn.createElement("path", { d: "M4.22182541,48.2218254 C8.44222828,44.0014225 15.2388494,43.9273804 19.5496459,47.9996989 L19.7781746,48.2218254 L60,88.443 L100.221825,48.2218254 C104.442228,44.0014225 111.238849,43.9273804 115.549646,47.9996989 L115.778175,48.2218254 C119.998577,52.4422283 120.07262,59.2388494 116.000301,63.5496459 L115.778175,63.7781746 L67.7781746,111.778175 C63.5577717,115.998577 56.7611506,116.07262 52.4503541,112.000301 L52.2218254,111.778175 L4.22182541,63.7781746 C-0.0739418023,59.4824074 -0.0739418023,52.5175926 4.22182541,48.2218254 Z", fill: "currentColor", fillRule: "nonzero" }) ); } function Dropdown(props2) { var _a2, _b2; var onChange = props2.onChange, value = props2.value, children = props2.children, caption = props2.caption, className = props2.className, style = props2.style; var dayPicker = useDayPicker(); var IconDropdownComponent = (_b2 = (_a2 = dayPicker.components) === null || _a2 === void 0 ? void 0 : _a2.IconDropdown) !== null && _b2 !== void 0 ? _b2 : IconDropdown; return bn.createElement( "div", { className, style }, bn.createElement("span", { className: dayPicker.classNames.vhidden }, props2["aria-label"]), bn.createElement("select", { name: props2.name, "aria-label": props2["aria-label"], className: dayPicker.classNames.dropdown, style: dayPicker.styles.dropdown, value, onChange }, children), bn.createElement( "div", { className: dayPicker.classNames.caption_label, style: dayPicker.styles.caption_label, "aria-hidden": "true" }, caption, bn.createElement(IconDropdownComponent, { className: dayPicker.classNames.dropdown_icon, style: dayPicker.styles.dropdown_icon }) ) ); } function MonthsDropdown(props2) { var _a2; var _b2 = useDayPicker(), fromDate = _b2.fromDate, toDate2 = _b2.toDate, styles = _b2.styles, locale2 = _b2.locale, formatMonthCaption2 = _b2.formatters.formatMonthCaption, classNames8 = _b2.classNames, components = _b2.components, labelMonthDropdown2 = _b2.labels.labelMonthDropdown; if (!fromDate) return bn.createElement(bn.Fragment, null); if (!toDate2) return bn.createElement(bn.Fragment, null); var dropdownMonths = []; if (isSameYear(fromDate, toDate2)) { var date = startOfMonth(fromDate); for (var month = fromDate.getMonth(); month <= toDate2.getMonth(); month++) { dropdownMonths.push(setMonth(date, month)); } } else { var date = startOfMonth(new Date()); for (var month = 0; month <= 11; month++) { dropdownMonths.push(setMonth(date, month)); } } var handleChange = function(e4) { var selectedMonth = Number(e4.target.value); var newMonth = setMonth(startOfMonth(props2.displayMonth), selectedMonth); props2.onChange(newMonth); }; var DropdownComponent2 = (_a2 = components === null || components === void 0 ? void 0 : components.Dropdown) !== null && _a2 !== void 0 ? _a2 : Dropdown; return bn.createElement(DropdownComponent2, { name: "months", "aria-label": labelMonthDropdown2(), className: classNames8.dropdown_month, style: styles.dropdown_month, onChange: handleChange, value: props2.displayMonth.getMonth(), caption: formatMonthCaption2(props2.displayMonth, { locale: locale2 }) }, dropdownMonths.map(function(m5) { return bn.createElement("option", { key: m5.getMonth(), value: m5.getMonth() }, formatMonthCaption2(m5, { locale: locale2 })); })); } function YearsDropdown(props2) { var _a2; var displayMonth = props2.displayMonth; var _b2 = useDayPicker(), fromDate = _b2.fromDate, toDate2 = _b2.toDate, locale2 = _b2.locale, styles = _b2.styles, classNames8 = _b2.classNames, components = _b2.components, formatYearCaption2 = _b2.formatters.formatYearCaption, labelYearDropdown2 = _b2.labels.labelYearDropdown; var years = []; if (!fromDate) return bn.createElement(bn.Fragment, null); if (!toDate2) return bn.createElement(bn.Fragment, null); var fromYear = fromDate.getFullYear(); var toYear = toDate2.getFullYear(); for (var year = fromYear; year <= toYear; year++) { years.push(setYear(startOfYear(new Date()), year)); } var handleChange = function(e4) { var newMonth = setYear(startOfMonth(displayMonth), Number(e4.target.value)); props2.onChange(newMonth); }; var DropdownComponent2 = (_a2 = components === null || components === void 0 ? void 0 : components.Dropdown) !== null && _a2 !== void 0 ? _a2 : Dropdown; return bn.createElement(DropdownComponent2, { name: "years", "aria-label": labelYearDropdown2(), className: classNames8.dropdown_year, style: styles.dropdown_year, onChange: handleChange, value: displayMonth.getFullYear(), caption: formatYearCaption2(displayMonth, { locale: locale2 }) }, years.map(function(year2) { return bn.createElement("option", { key: year2.getFullYear(), value: year2.getFullYear() }, formatYearCaption2(year2, { locale: locale2 })); })); } function useControlledValue(defaultValue2, controlledValue) { var _a2 = p2(defaultValue2), uncontrolledValue = _a2[0], setValue = _a2[1]; var value = controlledValue === void 0 ? uncontrolledValue : controlledValue; return [value, setValue]; } function getInitialMonth(context) { var month = context.month, defaultMonth = context.defaultMonth, today = context.today; var initialMonth = month || defaultMonth || today || new Date(); var toDate2 = context.toDate, fromDate = context.fromDate, _a2 = context.numberOfMonths, numberOfMonths = _a2 === void 0 ? 1 : _a2; if (toDate2 && differenceInCalendarMonths(toDate2, initialMonth) < 0) { var offset = -1 * (numberOfMonths - 1); initialMonth = addMonths(toDate2, offset); } if (fromDate && differenceInCalendarMonths(initialMonth, fromDate) < 0) { initialMonth = fromDate; } return startOfMonth(initialMonth); } function useNavigationState() { var context = useDayPicker(); var initialMonth = getInitialMonth(context); var _a2 = useControlledValue(initialMonth, context.month), month = _a2[0], setMonth2 = _a2[1]; var goToMonth = function(date) { var _a3; if (context.disableNavigation) return; var month2 = startOfMonth(date); setMonth2(month2); (_a3 = context.onMonthChange) === null || _a3 === void 0 ? void 0 : _a3.call(context, month2); }; return [month, goToMonth]; } function getDisplayMonths(month, _a2) { var reverseMonths = _a2.reverseMonths, numberOfMonths = _a2.numberOfMonths; var start = startOfMonth(month); var end = startOfMonth(addMonths(start, numberOfMonths)); var monthsDiff = differenceInCalendarMonths(end, start); var months = []; for (var i4 = 0; i4 < monthsDiff; i4++) { var nextMonth = addMonths(start, i4); months.push(nextMonth); } if (reverseMonths) months = months.reverse(); return months; } function getNextMonth(startingMonth, options) { if (options.disableNavigation) { return void 0; } var toDate2 = options.toDate, pagedNavigation = options.pagedNavigation, _a2 = options.numberOfMonths, numberOfMonths = _a2 === void 0 ? 1 : _a2; var offset = pagedNavigation ? numberOfMonths : 1; var month = startOfMonth(startingMonth); if (!toDate2) { return addMonths(month, offset); } var monthsDiff = differenceInCalendarMonths(toDate2, startingMonth); if (monthsDiff < numberOfMonths) { return void 0; } return addMonths(month, offset); } function getPreviousMonth(startingMonth, options) { if (options.disableNavigation) { return void 0; } var fromDate = options.fromDate, pagedNavigation = options.pagedNavigation, _a2 = options.numberOfMonths, numberOfMonths = _a2 === void 0 ? 1 : _a2; var offset = pagedNavigation ? numberOfMonths : 1; var month = startOfMonth(startingMonth); if (!fromDate) { return addMonths(month, -offset); } var monthsDiff = differenceInCalendarMonths(month, fromDate); if (monthsDiff <= 0) { return void 0; } return addMonths(month, -offset); } var NavigationContext = B(void 0); function NavigationProvider(props2) { var dayPicker = useDayPicker(); var _a2 = useNavigationState(), currentMonth = _a2[0], goToMonth = _a2[1]; var displayMonths = getDisplayMonths(currentMonth, dayPicker); var nextMonth = getNextMonth(currentMonth, dayPicker); var previousMonth = getPreviousMonth(currentMonth, dayPicker); var isDateDisplayed = function(date) { return displayMonths.some(function(displayMonth) { return isSameMonth(date, displayMonth); }); }; var goToDate = function(date, refDate) { if (isDateDisplayed(date)) { return; } if (refDate && isBefore(date, refDate)) { goToMonth(addMonths(date, 1 + dayPicker.numberOfMonths * -1)); } else { goToMonth(date); } }; var value = { currentMonth, displayMonths, goToMonth, goToDate, previousMonth, nextMonth, isDateDisplayed }; return bn.createElement(NavigationContext.Provider, { value }, props2.children); } function useNavigation() { var context = q2(NavigationContext); if (!context) { throw new Error("useNavigation must be used within a NavigationProvider"); } return context; } function CaptionDropdowns(props2) { var _a2; var _b2 = useDayPicker(), classNames8 = _b2.classNames, styles = _b2.styles, components = _b2.components; var goToMonth = useNavigation().goToMonth; var handleMonthChange = function(newMonth) { goToMonth(newMonth); }; var CaptionLabelComponent = (_a2 = components === null || components === void 0 ? void 0 : components.CaptionLabel) !== null && _a2 !== void 0 ? _a2 : CaptionLabel; var captionLabel = bn.createElement(CaptionLabelComponent, { id: props2.id, displayMonth: props2.displayMonth }); return bn.createElement( "div", { className: classNames8.caption_dropdowns, style: styles.caption_dropdowns }, bn.createElement("div", { className: classNames8.vhidden }, captionLabel), bn.createElement(MonthsDropdown, { onChange: handleMonthChange, displayMonth: props2.displayMonth }), bn.createElement(YearsDropdown, { onChange: handleMonthChange, displayMonth: props2.displayMonth }) ); } function IconLeft(props2) { return bn.createElement( "svg", __assign2({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props2), bn.createElement("path", { d: "M69.490332,3.34314575 C72.6145263,0.218951416 77.6798462,0.218951416 80.8040405,3.34314575 C83.8617626,6.40086786 83.9268205,11.3179931 80.9992143,14.4548388 L80.8040405,14.6568542 L35.461,60 L80.8040405,105.343146 C83.8617626,108.400868 83.9268205,113.317993 80.9992143,116.454839 L80.8040405,116.656854 C77.7463184,119.714576 72.8291931,119.779634 69.6923475,116.852028 L69.490332,116.656854 L18.490332,65.6568542 C15.4326099,62.5991321 15.367552,57.6820069 18.2951583,54.5451612 L18.490332,54.3431458 L69.490332,3.34314575 Z", fill: "currentColor", fillRule: "nonzero" }) ); } function IconRight(props2) { return bn.createElement( "svg", __assign2({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props2), bn.createElement("path", { d: "M49.8040405,3.34314575 C46.6798462,0.218951416 41.6145263,0.218951416 38.490332,3.34314575 C35.4326099,6.40086786 35.367552,11.3179931 38.2951583,14.4548388 L38.490332,14.6568542 L83.8333725,60 L38.490332,105.343146 C35.4326099,108.400868 35.367552,113.317993 38.2951583,116.454839 L38.490332,116.656854 C41.5480541,119.714576 46.4651794,119.779634 49.602025,116.852028 L49.8040405,116.656854 L100.804041,65.6568542 C103.861763,62.5991321 103.926821,57.6820069 100.999214,54.5451612 L100.804041,54.3431458 L49.8040405,3.34314575 Z", fill: "currentColor" }) ); } var Button = k3(function(props2, ref) { var _a2 = useDayPicker(), classNames8 = _a2.classNames, styles = _a2.styles; var classNamesArr = [classNames8.button_reset, classNames8.button]; if (props2.className) { classNamesArr.push(props2.className); } var className = classNamesArr.join(" "); var style = __assign2(__assign2({}, styles.button_reset), styles.button); if (props2.style) { Object.assign(style, props2.style); } return bn.createElement("button", __assign2({}, props2, { ref, type: "button", className, style })); }); function Navigation(props2) { var _a2, _b2; var _c2 = useDayPicker(), dir = _c2.dir, locale2 = _c2.locale, classNames8 = _c2.classNames, styles = _c2.styles, _d2 = _c2.labels, labelPrevious2 = _d2.labelPrevious, labelNext2 = _d2.labelNext, components = _c2.components; if (!props2.nextMonth && !props2.previousMonth) { return bn.createElement(bn.Fragment, null); } var previousLabel = labelPrevious2(props2.previousMonth, { locale: locale2 }); var previousClassName = [ classNames8.nav_button, classNames8.nav_button_previous ].join(" "); var nextLabel = labelNext2(props2.nextMonth, { locale: locale2 }); var nextClassName = [ classNames8.nav_button, classNames8.nav_button_next ].join(" "); var IconRightComponent = (_a2 = components === null || components === void 0 ? void 0 : components.IconRight) !== null && _a2 !== void 0 ? _a2 : IconRight; var IconLeftComponent = (_b2 = components === null || components === void 0 ? void 0 : components.IconLeft) !== null && _b2 !== void 0 ? _b2 : IconLeft; return bn.createElement( "div", { className: classNames8.nav, style: styles.nav }, !props2.hidePrevious && bn.createElement(Button, { name: "previous-month", "aria-label": previousLabel, className: previousClassName, style: styles.nav_button_previous, disabled: !props2.previousMonth, onClick: props2.onPreviousClick }, dir === "rtl" ? bn.createElement(IconRightComponent, { className: classNames8.nav_icon, style: styles.nav_icon }) : bn.createElement(IconLeftComponent, { className: classNames8.nav_icon, style: styles.nav_icon })), !props2.hideNext && bn.createElement(Button, { name: "next-month", "aria-label": nextLabel, className: nextClassName, style: styles.nav_button_next, disabled: !props2.nextMonth, onClick: props2.onNextClick }, dir === "rtl" ? bn.createElement(IconLeftComponent, { className: classNames8.nav_icon, style: styles.nav_icon }) : bn.createElement(IconRightComponent, { className: classNames8.nav_icon, style: styles.nav_icon })) ); } function CaptionNavigation(props2) { var _a2; var _b2; var _c2 = useDayPicker(), numberOfMonths = _c2.numberOfMonths, dir = _c2.dir, components = _c2.components; var _d2 = useNavigation(), previousMonth = _d2.previousMonth, nextMonth = _d2.nextMonth, goToMonth = _d2.goToMonth, displayMonths = _d2.displayMonths; var displayIndex = displayMonths.findIndex(function(month) { return isSameMonth(props2.displayMonth, month); }); var isFirst = displayIndex === 0; var isLast = displayIndex === displayMonths.length - 1; if (dir === "rtl") { _a2 = [isFirst, isLast], isLast = _a2[0], isFirst = _a2[1]; } var hideNext = numberOfMonths > 1 && (isFirst || !isLast); var hidePrevious = numberOfMonths > 1 && (isLast || !isFirst); var handlePreviousClick = function() { if (!previousMonth) return; goToMonth(previousMonth); }; var handleNextClick = function() { if (!nextMonth) return; goToMonth(nextMonth); }; var CaptionLabelComponent = (_b2 = components === null || components === void 0 ? void 0 : components.CaptionLabel) !== null && _b2 !== void 0 ? _b2 : CaptionLabel; var captionLabel = bn.createElement(CaptionLabelComponent, { id: props2.id, displayMonth: props2.displayMonth }); return bn.createElement( bn.Fragment, null, captionLabel, bn.createElement(Navigation, { displayMonth: props2.displayMonth, hideNext, hidePrevious, nextMonth, previousMonth, onPreviousClick: handlePreviousClick, onNextClick: handleNextClick }) ); } function Caption(props2) { var _a2; var _b2 = useDayPicker(), classNames8 = _b2.classNames, disableNavigation = _b2.disableNavigation, styles = _b2.styles, captionLayout = _b2.captionLayout, components = _b2.components; var CaptionLabelComponent = (_a2 = components === null || components === void 0 ? void 0 : components.CaptionLabel) !== null && _a2 !== void 0 ? _a2 : CaptionLabel; var caption; if (disableNavigation) { caption = bn.createElement(CaptionLabelComponent, { id: props2.id, displayMonth: props2.displayMonth }); } else if (captionLayout === "dropdown") { caption = bn.createElement(CaptionDropdowns, { displayMonth: props2.displayMonth, id: props2.id }); } else { caption = bn.createElement(CaptionNavigation, { displayMonth: props2.displayMonth, id: props2.id }); } return bn.createElement("div", { className: classNames8.caption, style: styles.caption }, caption); } function Footer() { var _a2 = useDayPicker(), footer = _a2.footer, styles = _a2.styles, tfoot = _a2.classNames.tfoot; if (!footer) return bn.createElement(bn.Fragment, null); return bn.createElement( "tfoot", { className: tfoot, style: styles.tfoot }, bn.createElement( "tr", null, bn.createElement("td", { colSpan: 8 }, footer) ) ); } function getWeekdays(locale2, weekStartsOn, ISOWeek) { var start = ISOWeek ? startOfISOWeek(new Date()) : startOfWeek(new Date(), { locale: locale2, weekStartsOn }); var days = []; for (var i4 = 0; i4 < 7; i4++) { var day = addDays(start, i4); days.push(day); } return days; } function HeadRow() { var _a2 = useDayPicker(), classNames8 = _a2.classNames, styles = _a2.styles, showWeekNumber = _a2.showWeekNumber, locale2 = _a2.locale, weekStartsOn = _a2.weekStartsOn, ISOWeek = _a2.ISOWeek, formatWeekdayName2 = _a2.formatters.formatWeekdayName, labelWeekday2 = _a2.labels.labelWeekday; var weekdays = getWeekdays(locale2, weekStartsOn, ISOWeek); return bn.createElement( "tr", { style: styles.head_row, className: classNames8.head_row }, showWeekNumber && bn.createElement("th", { scope: "col", style: styles.head_cell, className: classNames8.head_cell }), weekdays.map(function(weekday, i4) { return bn.createElement( "th", { key: i4, scope: "col", className: classNames8.head_cell, style: styles.head_cell }, bn.createElement("span", { "aria-hidden": true }, formatWeekdayName2(weekday, { locale: locale2 })), bn.createElement("span", { className: classNames8.vhidden }, labelWeekday2(weekday, { locale: locale2 })) ); }) ); } function Head() { var _a2; var _b2 = useDayPicker(), classNames8 = _b2.classNames, styles = _b2.styles, components = _b2.components; var HeadRowComponent = (_a2 = components === null || components === void 0 ? void 0 : components.HeadRow) !== null && _a2 !== void 0 ? _a2 : HeadRow; return bn.createElement( "thead", { style: styles.head, className: classNames8.head }, bn.createElement(HeadRowComponent, null) ); } function DayContent(props2) { var _a2 = useDayPicker(), locale2 = _a2.locale, formatDay2 = _a2.formatters.formatDay; return bn.createElement(bn.Fragment, null, formatDay2(props2.date, { locale: locale2 })); } var SelectMultipleContext = B(void 0); function SelectMultipleProvider(props2) { if (!isDayPickerMultiple(props2.initialProps)) { var emptyContextValue = { selected: void 0, modifiers: { disabled: [] } }; return bn.createElement(SelectMultipleContext.Provider, { value: emptyContextValue }, props2.children); } return bn.createElement(SelectMultipleProviderInternal, { initialProps: props2.initialProps, children: props2.children }); } function SelectMultipleProviderInternal(_a2) { var initialProps = _a2.initialProps, children = _a2.children; var selected = initialProps.selected, min3 = initialProps.min, max3 = initialProps.max; var onDayClick = function(day, activeModifiers, e4) { var _a3, _b2; (_a3 = initialProps.onDayClick) === null || _a3 === void 0 ? void 0 : _a3.call(initialProps, day, activeModifiers, e4); var isMinSelected = Boolean(activeModifiers.selected && min3 && (selected === null || selected === void 0 ? void 0 : selected.length) === min3); if (isMinSelected) { return; } var isMaxSelected = Boolean(!activeModifiers.selected && max3 && (selected === null || selected === void 0 ? void 0 : selected.length) === max3); if (isMaxSelected) { return; } var selectedDays = selected ? __spreadArray2([], selected, true) : []; if (activeModifiers.selected) { var index = selectedDays.findIndex(function(selectedDay) { return isSameDay(day, selectedDay); }); selectedDays.splice(index, 1); } else { selectedDays.push(day); } (_b2 = initialProps.onSelect) === null || _b2 === void 0 ? void 0 : _b2.call(initialProps, selectedDays, day, activeModifiers, e4); }; var modifiers = { disabled: [] }; if (selected) { modifiers.disabled.push(function(day) { var isMaxSelected = max3 && selected.length > max3 - 1; var isSelected = selected.some(function(selectedDay) { return isSameDay(selectedDay, day); }); return Boolean(isMaxSelected && !isSelected); }); } var contextValue = { selected, onDayClick, modifiers }; return bn.createElement(SelectMultipleContext.Provider, { value: contextValue }, children); } function useSelectMultiple() { var context = q2(SelectMultipleContext); if (!context) { throw new Error("useSelectMultiple must be used within a SelectMultipleProvider"); } return context; } function addToRange(day, range) { var _a2 = range || {}, from = _a2.from, to = _a2.to; if (!from) { return { from: day, to: void 0 }; } if (!to && isSameDay(from, day)) { return { from, to: day }; } if (!to && isBefore(day, from)) { return { from: day, to: from }; } if (!to) { return { from, to: day }; } if (isSameDay(to, day) && isSameDay(from, day)) { return void 0; } if (isSameDay(to, day)) { return { from: to, to: void 0 }; } if (isSameDay(from, day)) { return void 0; } if (isAfter2(from, day)) { return { from: day, to }; } return { from, to: day }; } var SelectRangeContext = B(void 0); function SelectRangeProvider(props2) { if (!isDayPickerRange(props2.initialProps)) { var emptyContextValue = { selected: void 0, modifiers: { range_start: [], range_end: [], range_middle: [], disabled: [] } }; return bn.createElement(SelectRangeContext.Provider, { value: emptyContextValue }, props2.children); } return bn.createElement(SelectRangeProviderInternal, { initialProps: props2.initialProps, children: props2.children }); } function SelectRangeProviderInternal(_a2) { var initialProps = _a2.initialProps, children = _a2.children; var selected = initialProps.selected; var _b2 = selected || {}, selectedFrom = _b2.from, selectedTo = _b2.to; var min3 = initialProps.min; var max3 = initialProps.max; var onDayClick = function(day, activeModifiers, e4) { var _a3, _b3; (_a3 = initialProps.onDayClick) === null || _a3 === void 0 ? void 0 : _a3.call(initialProps, day, activeModifiers, e4); var newRange = addToRange(day, selected); (_b3 = initialProps.onSelect) === null || _b3 === void 0 ? void 0 : _b3.call(initialProps, newRange, day, activeModifiers, e4); }; var modifiers = { range_start: [], range_end: [], range_middle: [], disabled: [] }; if (selectedFrom) { modifiers.range_start = [selectedFrom]; if (!selectedTo) { modifiers.range_end = [selectedFrom]; } else { modifiers.range_end = [selectedTo]; if (!isSameDay(selectedFrom, selectedTo)) { modifiers.range_middle = [ { after: selectedFrom, before: selectedTo } ]; } } } if (min3) { if (selectedFrom && !selectedTo) { modifiers.disabled.push({ after: subDays(selectedFrom, min3 - 1), before: addDays(selectedFrom, min3 - 1) }); } if (selectedFrom && selectedTo) { modifiers.disabled.push({ after: selectedFrom, before: addDays(selectedFrom, min3 - 1) }); } } if (max3) { if (selectedFrom && !selectedTo) { modifiers.disabled.push({ before: addDays(selectedFrom, -max3 + 1) }); modifiers.disabled.push({ after: addDays(selectedFrom, max3 - 1) }); } if (selectedFrom && selectedTo) { var selectedCount = differenceInCalendarDays(selectedTo, selectedFrom) + 1; var offset = max3 - selectedCount; modifiers.disabled.push({ before: subDays(selectedFrom, offset) }); modifiers.disabled.push({ after: addDays(selectedTo, offset) }); } } return bn.createElement(SelectRangeContext.Provider, { value: { selected, onDayClick, modifiers } }, children); } function useSelectRange() { var context = q2(SelectRangeContext); if (!context) { throw new Error("useSelectRange must be used within a SelectRangeProvider"); } return context; } function matcherToArray(matcher) { if (Array.isArray(matcher)) { return __spreadArray2([], matcher, true); } else if (matcher !== void 0) { return [matcher]; } else { return []; } } function getCustomModifiers(dayModifiers) { var customModifiers = {}; Object.entries(dayModifiers).forEach(function(_a2) { var modifier = _a2[0], matcher = _a2[1]; customModifiers[modifier] = matcherToArray(matcher); }); return customModifiers; } var InternalModifier; (function(InternalModifier2) { InternalModifier2["Outside"] = "outside"; InternalModifier2["Disabled"] = "disabled"; InternalModifier2["Selected"] = "selected"; InternalModifier2["Hidden"] = "hidden"; InternalModifier2["Today"] = "today"; InternalModifier2["RangeStart"] = "range_start"; InternalModifier2["RangeEnd"] = "range_end"; InternalModifier2["RangeMiddle"] = "range_middle"; })(InternalModifier || (InternalModifier = {})); var Selected = InternalModifier.Selected; var Disabled = InternalModifier.Disabled; var Hidden = InternalModifier.Hidden; var Today = InternalModifier.Today; var RangeEnd = InternalModifier.RangeEnd; var RangeMiddle = InternalModifier.RangeMiddle; var RangeStart = InternalModifier.RangeStart; var Outside2 = InternalModifier.Outside; function getInternalModifiers(dayPicker, selectMultiple, selectRange2) { var _a2; var internalModifiers = (_a2 = {}, _a2[Selected] = matcherToArray(dayPicker.selected), _a2[Disabled] = matcherToArray(dayPicker.disabled), _a2[Hidden] = matcherToArray(dayPicker.hidden), _a2[Today] = [dayPicker.today], _a2[RangeEnd] = [], _a2[RangeMiddle] = [], _a2[RangeStart] = [], _a2[Outside2] = [], _a2); if (dayPicker.fromDate) { internalModifiers[Disabled].push({ before: dayPicker.fromDate }); } if (dayPicker.toDate) { internalModifiers[Disabled].push({ after: dayPicker.toDate }); } if (isDayPickerMultiple(dayPicker)) { internalModifiers[Disabled] = internalModifiers[Disabled].concat(selectMultiple.modifiers[Disabled]); } else if (isDayPickerRange(dayPicker)) { internalModifiers[Disabled] = internalModifiers[Disabled].concat(selectRange2.modifiers[Disabled]); internalModifiers[RangeStart] = selectRange2.modifiers[RangeStart]; internalModifiers[RangeMiddle] = selectRange2.modifiers[RangeMiddle]; internalModifiers[RangeEnd] = selectRange2.modifiers[RangeEnd]; } return internalModifiers; } var ModifiersContext = B(void 0); function ModifiersProvider(props2) { var dayPicker = useDayPicker(); var selectMultiple = useSelectMultiple(); var selectRange2 = useSelectRange(); var internalModifiers = getInternalModifiers(dayPicker, selectMultiple, selectRange2); var customModifiers = getCustomModifiers(dayPicker.modifiers); var modifiers = __assign2(__assign2({}, internalModifiers), customModifiers); return bn.createElement(ModifiersContext.Provider, { value: modifiers }, props2.children); } function useModifiers() { var context = q2(ModifiersContext); if (!context) { throw new Error("useModifiers must be used within a ModifiersProvider"); } return context; } function isDateInterval(matcher) { return Boolean(matcher && typeof matcher === "object" && "before" in matcher && "after" in matcher); } function isDateRange(value) { return Boolean(value && typeof value === "object" && "from" in value); } function isDateAfterType(value) { return Boolean(value && typeof value === "object" && "after" in value); } function isDateBeforeType(value) { return Boolean(value && typeof value === "object" && "before" in value); } function isDayOfWeekType(value) { return Boolean(value && typeof value === "object" && "dayOfWeek" in value); } function isDateInRange(date, range) { var _a2; var from = range.from, to = range.to; if (!from) { return false; } if (!to && isSameDay(from, date)) { return true; } if (!to) { return false; } var isRangeInverted = differenceInCalendarDays(to, from) < 0; if (isRangeInverted) { _a2 = [to, from], from = _a2[0], to = _a2[1]; } var isInRange = differenceInCalendarDays(date, from) >= 0 && differenceInCalendarDays(to, date) >= 0; return isInRange; } function isDateType(value) { return isDate(value); } function isArrayOfDates(value) { return Array.isArray(value) && value.every(isDate); } function isMatch(day, matchers) { return matchers.some(function(matcher) { if (typeof matcher === "boolean") { return matcher; } if (isDateType(matcher)) { return isSameDay(day, matcher); } if (isArrayOfDates(matcher)) { return matcher.includes(day); } if (isDateRange(matcher)) { return isDateInRange(day, matcher); } if (isDayOfWeekType(matcher)) { return matcher.dayOfWeek.includes(day.getDay()); } if (isDateInterval(matcher)) { var diffBefore = differenceInCalendarDays(matcher.before, day); var diffAfter = differenceInCalendarDays(matcher.after, day); var isDayBefore = diffBefore > 0; var isDayAfter = diffAfter < 0; var isClosedInterval = isAfter2(matcher.before, matcher.after); if (isClosedInterval) { return isDayAfter && isDayBefore; } else { return isDayBefore || isDayAfter; } } if (isDateAfterType(matcher)) { return differenceInCalendarDays(day, matcher.after) > 0; } if (isDateBeforeType(matcher)) { return differenceInCalendarDays(matcher.before, day) > 0; } if (typeof matcher === "function") { return matcher(day); } return false; }); } function getActiveModifiers(day, modifiers, displayMonth) { var matchedModifiers = Object.keys(modifiers).reduce(function(result, key2) { var modifier = modifiers[key2]; if (isMatch(day, modifier)) { result.push(key2); } return result; }, []); var activeModifiers = {}; matchedModifiers.forEach(function(modifier) { return activeModifiers[modifier] = true; }); if (displayMonth && !isSameMonth(day, displayMonth)) { activeModifiers.outside = true; } return activeModifiers; } function getInitialFocusTarget(displayMonths, modifiers) { var firstDayInMonth = startOfMonth(displayMonths[0]); var lastDayInMonth = endOfMonth(displayMonths[displayMonths.length - 1]); var firstFocusableDay; var today; var date = firstDayInMonth; while (date <= lastDayInMonth) { var activeModifiers = getActiveModifiers(date, modifiers); var isFocusable = !activeModifiers.disabled && !activeModifiers.hidden; if (!isFocusable) { date = addDays(date, 1); continue; } if (activeModifiers.selected) { return date; } if (activeModifiers.today && !today) { today = date; } if (!firstFocusableDay) { firstFocusableDay = date; } date = addDays(date, 1); } if (today) { return today; } else { return firstFocusableDay; } } var MAX_RETRY = 365; function getNextFocus(focusedDay, options) { var moveBy = options.moveBy, direction = options.direction, context = options.context, modifiers = options.modifiers, _a2 = options.retry, retry = _a2 === void 0 ? { count: 0, lastFocused: focusedDay } : _a2; var weekStartsOn = context.weekStartsOn, fromDate = context.fromDate, toDate2 = context.toDate, locale2 = context.locale; var moveFns = { day: addDays, week: addWeeks, month: addMonths, year: addYears, startOfWeek: function(date) { return context.ISOWeek ? startOfISOWeek(date) : startOfWeek(date, { locale: locale2, weekStartsOn }); }, endOfWeek: function(date) { return context.ISOWeek ? endOfISOWeek(date) : endOfWeek(date, { locale: locale2, weekStartsOn }); } }; var newFocusedDay = moveFns[moveBy](focusedDay, direction === "after" ? 1 : -1); if (direction === "before" && fromDate) { newFocusedDay = max([fromDate, newFocusedDay]); } else if (direction === "after" && toDate2) { newFocusedDay = min([toDate2, newFocusedDay]); } var isFocusable = true; if (modifiers) { var activeModifiers = getActiveModifiers(newFocusedDay, modifiers); isFocusable = !activeModifiers.disabled && !activeModifiers.hidden; } if (isFocusable) { return newFocusedDay; } else { if (retry.count > MAX_RETRY) { return retry.lastFocused; } return getNextFocus(newFocusedDay, { moveBy, direction, context, modifiers, retry: __assign2(__assign2({}, retry), { count: retry.count + 1 }) }); } } var FocusContext = B(void 0); function FocusProvider(props2) { var navigation = useNavigation(); var modifiers = useModifiers(); var _a2 = p2(), focusedDay = _a2[0], setFocusedDay = _a2[1]; var _b2 = p2(), lastFocused = _b2[0], setLastFocused = _b2[1]; var initialFocusTarget = getInitialFocusTarget(navigation.displayMonths, modifiers); var focusTarget = (focusedDay !== null && focusedDay !== void 0 ? focusedDay : lastFocused && navigation.isDateDisplayed(lastFocused)) ? lastFocused : initialFocusTarget; var blur = function() { setLastFocused(focusedDay); setFocusedDay(void 0); }; var focus = function(date) { setFocusedDay(date); }; var context = useDayPicker(); var moveFocus = function(moveBy, direction) { if (!focusedDay) return; var nextFocused = getNextFocus(focusedDay, { moveBy, direction, context, modifiers }); if (isSameDay(focusedDay, nextFocused)) return void 0; navigation.goToDate(nextFocused, focusedDay); focus(nextFocused); }; var value = { focusedDay, focusTarget, blur, focus, focusDayAfter: function() { return moveFocus("day", "after"); }, focusDayBefore: function() { return moveFocus("day", "before"); }, focusWeekAfter: function() { return moveFocus("week", "after"); }, focusWeekBefore: function() { return moveFocus("week", "before"); }, focusMonthBefore: function() { return moveFocus("month", "before"); }, focusMonthAfter: function() { return moveFocus("month", "after"); }, focusYearBefore: function() { return moveFocus("year", "before"); }, focusYearAfter: function() { return moveFocus("year", "after"); }, focusStartOfWeek: function() { return moveFocus("startOfWeek", "before"); }, focusEndOfWeek: function() { return moveFocus("endOfWeek", "after"); } }; return bn.createElement(FocusContext.Provider, { value }, props2.children); } function useFocusContext() { var context = q2(FocusContext); if (!context) { throw new Error("useFocusContext must be used within a FocusProvider"); } return context; } function useActiveModifiers(day, displayMonth) { var modifiers = useModifiers(); var activeModifiers = getActiveModifiers(day, modifiers, displayMonth); return activeModifiers; } var SelectSingleContext = B(void 0); function SelectSingleProvider(props2) { if (!isDayPickerSingle(props2.initialProps)) { var emptyContextValue = { selected: void 0 }; return bn.createElement(SelectSingleContext.Provider, { value: emptyContextValue }, props2.children); } return bn.createElement(SelectSingleProviderInternal, { initialProps: props2.initialProps, children: props2.children }); } function SelectSingleProviderInternal(_a2) { var initialProps = _a2.initialProps, children = _a2.children; var onDayClick = function(day, activeModifiers, e4) { var _a3, _b2, _c2; (_a3 = initialProps.onDayClick) === null || _a3 === void 0 ? void 0 : _a3.call(initialProps, day, activeModifiers, e4); if (activeModifiers.selected && !initialProps.required) { (_b2 = initialProps.onSelect) === null || _b2 === void 0 ? void 0 : _b2.call(initialProps, void 0, day, activeModifiers, e4); return; } (_c2 = initialProps.onSelect) === null || _c2 === void 0 ? void 0 : _c2.call(initialProps, day, day, activeModifiers, e4); }; var contextValue = { selected: initialProps.selected, onDayClick }; return bn.createElement(SelectSingleContext.Provider, { value: contextValue }, children); } function useSelectSingle() { var context = q2(SelectSingleContext); if (!context) { throw new Error("useSelectSingle must be used within a SelectSingleProvider"); } return context; } function useDayEventHandlers(date, activeModifiers) { var dayPicker = useDayPicker(); var single = useSelectSingle(); var multiple = useSelectMultiple(); var range = useSelectRange(); var _a2 = useFocusContext(), focusDayAfter = _a2.focusDayAfter, focusDayBefore = _a2.focusDayBefore, focusWeekAfter = _a2.focusWeekAfter, focusWeekBefore = _a2.focusWeekBefore, blur = _a2.blur, focus = _a2.focus, focusMonthBefore = _a2.focusMonthBefore, focusMonthAfter = _a2.focusMonthAfter, focusYearBefore = _a2.focusYearBefore, focusYearAfter = _a2.focusYearAfter, focusStartOfWeek = _a2.focusStartOfWeek, focusEndOfWeek = _a2.focusEndOfWeek; var onClick = function(e4) { var _a3, _b2, _c2, _d2; if (isDayPickerSingle(dayPicker)) { (_a3 = single.onDayClick) === null || _a3 === void 0 ? void 0 : _a3.call(single, date, activeModifiers, e4); } else if (isDayPickerMultiple(dayPicker)) { (_b2 = multiple.onDayClick) === null || _b2 === void 0 ? void 0 : _b2.call(multiple, date, activeModifiers, e4); } else if (isDayPickerRange(dayPicker)) { (_c2 = range.onDayClick) === null || _c2 === void 0 ? void 0 : _c2.call(range, date, activeModifiers, e4); } else { (_d2 = dayPicker.onDayClick) === null || _d2 === void 0 ? void 0 : _d2.call(dayPicker, date, activeModifiers, e4); } }; var onFocus = function(e4) { var _a3; focus(date); (_a3 = dayPicker.onDayFocus) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); }; var onBlur = function(e4) { var _a3; blur(); (_a3 = dayPicker.onDayBlur) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); }; var onMouseEnter = function(e4) { var _a3; (_a3 = dayPicker.onDayMouseEnter) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); }; var onMouseLeave = function(e4) { var _a3; (_a3 = dayPicker.onDayMouseLeave) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); }; var onPointerEnter = function(e4) { var _a3; (_a3 = dayPicker.onDayPointerEnter) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); }; var onPointerLeave = function(e4) { var _a3; (_a3 = dayPicker.onDayPointerLeave) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); }; var onTouchCancel = function(e4) { var _a3; (_a3 = dayPicker.onDayTouchCancel) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); }; var onTouchEnd = function(e4) { var _a3; (_a3 = dayPicker.onDayTouchEnd) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); }; var onTouchMove = function(e4) { var _a3; (_a3 = dayPicker.onDayTouchMove) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); }; var onTouchStart = function(e4) { var _a3; (_a3 = dayPicker.onDayTouchStart) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); }; var onKeyUp = function(e4) { var _a3; (_a3 = dayPicker.onDayKeyUp) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); }; var onKeyDown = function(e4) { var _a3; switch (e4.key) { case "ArrowLeft": e4.preventDefault(); e4.stopPropagation(); dayPicker.dir === "rtl" ? focusDayAfter() : focusDayBefore(); break; case "ArrowRight": e4.preventDefault(); e4.stopPropagation(); dayPicker.dir === "rtl" ? focusDayBefore() : focusDayAfter(); break; case "ArrowDown": e4.preventDefault(); e4.stopPropagation(); focusWeekAfter(); break; case "ArrowUp": e4.preventDefault(); e4.stopPropagation(); focusWeekBefore(); break; case "PageUp": e4.preventDefault(); e4.stopPropagation(); e4.shiftKey ? focusYearBefore() : focusMonthBefore(); break; case "PageDown": e4.preventDefault(); e4.stopPropagation(); e4.shiftKey ? focusYearAfter() : focusMonthAfter(); break; case "Home": e4.preventDefault(); e4.stopPropagation(); focusStartOfWeek(); break; case "End": e4.preventDefault(); e4.stopPropagation(); focusEndOfWeek(); break; } (_a3 = dayPicker.onDayKeyDown) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); }; var eventHandlers = { onClick, onFocus, onBlur, onKeyDown, onKeyUp, onMouseEnter, onMouseLeave, onPointerEnter, onPointerLeave, onTouchCancel, onTouchEnd, onTouchMove, onTouchStart }; return eventHandlers; } function useSelectedDays() { var dayPicker = useDayPicker(); var single = useSelectSingle(); var multiple = useSelectMultiple(); var range = useSelectRange(); var selectedDays = isDayPickerSingle(dayPicker) ? single.selected : isDayPickerMultiple(dayPicker) ? multiple.selected : isDayPickerRange(dayPicker) ? range.selected : void 0; return selectedDays; } function isInternalModifier(modifier) { return Object.values(InternalModifier).includes(modifier); } function getDayClassNames(dayPicker, activeModifiers) { var classNames8 = [dayPicker.classNames.day]; Object.keys(activeModifiers).forEach(function(modifier) { var customClassName = dayPicker.modifiersClassNames[modifier]; if (customClassName) { classNames8.push(customClassName); } else if (isInternalModifier(modifier)) { var internalClassName = dayPicker.classNames["day_".concat(modifier)]; if (internalClassName) { classNames8.push(internalClassName); } } }); return classNames8; } function getDayStyle(dayPicker, activeModifiers) { var style = __assign2({}, dayPicker.styles.day); Object.keys(activeModifiers).forEach(function(modifier) { var _a2; style = __assign2(__assign2({}, style), (_a2 = dayPicker.modifiersStyles) === null || _a2 === void 0 ? void 0 : _a2[modifier]); }); return style; } function useDayRender(day, displayMonth, buttonRef) { var _a2; var _b2, _c2; var dayPicker = useDayPicker(); var focusContext = useFocusContext(); var activeModifiers = useActiveModifiers(day, displayMonth); var eventHandlers = useDayEventHandlers(day, activeModifiers); var selectedDays = useSelectedDays(); var isButton = Boolean(dayPicker.onDayClick || dayPicker.mode !== "default"); h2(function() { var _a3; if (activeModifiers.outside) return; if (!focusContext.focusedDay) return; if (!isButton) return; if (isSameDay(focusContext.focusedDay, day)) { (_a3 = buttonRef.current) === null || _a3 === void 0 ? void 0 : _a3.focus(); } }, [ focusContext.focusedDay, day, buttonRef, isButton, activeModifiers.outside ]); var className = getDayClassNames(dayPicker, activeModifiers).join(" "); var style = getDayStyle(dayPicker, activeModifiers); var ariaLabel = dayPicker.labels.labelDay(day, activeModifiers, { locale: dayPicker.locale }); var isHidden = Boolean(activeModifiers.outside && !dayPicker.showOutsideDays || activeModifiers.hidden); var DayContentComponent = (_c2 = (_b2 = dayPicker.components) === null || _b2 === void 0 ? void 0 : _b2.DayContent) !== null && _c2 !== void 0 ? _c2 : DayContent; var children = bn.createElement(DayContentComponent, { date: day, displayMonth, activeModifiers }); var divProps = { style, className, children, "aria-label": ariaLabel }; var isFocusTarget = focusContext.focusTarget && isSameDay(focusContext.focusTarget, day) && !activeModifiers.outside; var isFocused = focusContext.focusedDay && isSameDay(focusContext.focusedDay, day); var buttonProps = __assign2(__assign2(__assign2({}, divProps), (_a2 = { disabled: activeModifiers.disabled }, _a2["aria-pressed"] = activeModifiers.selected, _a2["aria-label"] = ariaLabel, _a2.tabIndex = isFocused || isFocusTarget ? 0 : -1, _a2)), eventHandlers); var dayRender = { isButton, isHidden, activeModifiers, selectedDays, buttonProps, divProps }; return dayRender; } function Day(props2) { var buttonRef = _2(null); var dayRender = useDayRender(props2.date, props2.displayMonth, buttonRef); if (dayRender.isHidden) { return bn.createElement(bn.Fragment, null); } if (!dayRender.isButton) { return bn.createElement("div", __assign2({}, dayRender.divProps)); } return bn.createElement(Button, __assign2({ name: "day", ref: buttonRef }, dayRender.buttonProps)); } function WeekNumber(props2) { var weekNumber = props2.number, dates = props2.dates; var _a2 = useDayPicker(), onWeekNumberClick = _a2.onWeekNumberClick, styles = _a2.styles, classNames8 = _a2.classNames, locale2 = _a2.locale, labelWeekNumber2 = _a2.labels.labelWeekNumber, formatWeekNumber2 = _a2.formatters.formatWeekNumber; var content = formatWeekNumber2(Number(weekNumber), { locale: locale2 }); if (!onWeekNumberClick) { return bn.createElement("span", { className: classNames8.weeknumber, style: styles.weeknumber }, content); } var label = labelWeekNumber2(Number(weekNumber), { locale: locale2 }); var handleClick = function(e4) { onWeekNumberClick(weekNumber, dates, e4); }; return bn.createElement(Button, { name: "week-number", "aria-label": label, className: classNames8.weeknumber, style: styles.weeknumber, onClick: handleClick }, content); } function Row(props2) { var _a2, _b2; var _c2 = useDayPicker(), styles = _c2.styles, classNames8 = _c2.classNames, showWeekNumber = _c2.showWeekNumber, components = _c2.components; var DayComponent = (_a2 = components === null || components === void 0 ? void 0 : components.Day) !== null && _a2 !== void 0 ? _a2 : Day; var WeeknumberComponent = (_b2 = components === null || components === void 0 ? void 0 : components.WeekNumber) !== null && _b2 !== void 0 ? _b2 : WeekNumber; var weekNumberCell; if (showWeekNumber) { weekNumberCell = bn.createElement( "td", { className: classNames8.cell, style: styles.cell }, bn.createElement(WeeknumberComponent, { number: props2.weekNumber, dates: props2.dates }) ); } return bn.createElement( "tr", { className: classNames8.row, style: styles.row }, weekNumberCell, props2.dates.map(function(date) { return bn.createElement( "td", { className: classNames8.cell, style: styles.cell, key: getUnixTime(date) }, bn.createElement(DayComponent, { displayMonth: props2.displayMonth, date }) ); }) ); } function daysToMonthWeeks(fromDate, toDate2, options) { var toWeek = (options === null || options === void 0 ? void 0 : options.ISOWeek) ? endOfISOWeek(toDate2) : endOfWeek(toDate2, options); var fromWeek = (options === null || options === void 0 ? void 0 : options.ISOWeek) ? startOfISOWeek(fromDate) : startOfWeek(fromDate, options); var nOfDays = differenceInCalendarDays(toWeek, fromWeek); var days = []; for (var i4 = 0; i4 <= nOfDays; i4++) { days.push(addDays(fromWeek, i4)); } var weeksInMonth = days.reduce(function(result, date) { var weekNumber = (options === null || options === void 0 ? void 0 : options.ISOWeek) ? getISOWeek(date) : getWeek(date, options); var existingWeek = result.find(function(value) { return value.weekNumber === weekNumber; }); if (existingWeek) { existingWeek.dates.push(date); return result; } result.push({ weekNumber, dates: [date] }); return result; }, []); return weeksInMonth; } function getMonthWeeks(month, options) { var weeksInMonth = daysToMonthWeeks(startOfMonth(month), endOfMonth(month), options); if (options === null || options === void 0 ? void 0 : options.useFixedWeeks) { var nrOfMonthWeeks = getWeeksInMonth(month, options); if (nrOfMonthWeeks < 6) { var lastWeek = weeksInMonth[weeksInMonth.length - 1]; var lastDate = lastWeek.dates[lastWeek.dates.length - 1]; var toDate2 = addWeeks(lastDate, 6 - nrOfMonthWeeks); var extraWeeks = daysToMonthWeeks(addWeeks(lastDate, 1), toDate2, options); weeksInMonth.push.apply(weeksInMonth, extraWeeks); } } return weeksInMonth; } function Table(props2) { var _a2, _b2, _c2; var _d2 = useDayPicker(), locale2 = _d2.locale, classNames8 = _d2.classNames, styles = _d2.styles, hideHead = _d2.hideHead, fixedWeeks = _d2.fixedWeeks, components = _d2.components, weekStartsOn = _d2.weekStartsOn, firstWeekContainsDate = _d2.firstWeekContainsDate, ISOWeek = _d2.ISOWeek; var weeks = getMonthWeeks(props2.displayMonth, { useFixedWeeks: Boolean(fixedWeeks), ISOWeek, locale: locale2, weekStartsOn, firstWeekContainsDate }); var HeadComponent = (_a2 = components === null || components === void 0 ? void 0 : components.Head) !== null && _a2 !== void 0 ? _a2 : Head; var RowComponent = (_b2 = components === null || components === void 0 ? void 0 : components.Row) !== null && _b2 !== void 0 ? _b2 : Row; var FooterComponent = (_c2 = components === null || components === void 0 ? void 0 : components.Footer) !== null && _c2 !== void 0 ? _c2 : Footer; return bn.createElement( "table", { className: classNames8.table, style: styles.table, role: "grid", "aria-labelledby": props2["aria-labelledby"] }, !hideHead && bn.createElement(HeadComponent, null), bn.createElement("tbody", { className: classNames8.tbody, style: styles.tbody }, weeks.map(function(week) { return bn.createElement(RowComponent, { displayMonth: props2.displayMonth, key: week.weekNumber, dates: week.dates, weekNumber: week.weekNumber }); })), bn.createElement(FooterComponent, null) ); } function canUseDOM2() { return !!(typeof window !== "undefined" && window.document && window.document.createElement); } var useIsomorphicLayoutEffect2 = canUseDOM2() ? s2 : h2; var serverHandoffComplete = false; var id = 0; function genId2() { return "react-day-picker-".concat(++id); } function useId(providedId) { var _a2; var initialId = providedId !== null && providedId !== void 0 ? providedId : serverHandoffComplete ? genId2() : null; var _b2 = p2(initialId), id2 = _b2[0], setId = _b2[1]; useIsomorphicLayoutEffect2(function() { if (id2 === null) { setId(genId2()); } }, []); h2(function() { if (serverHandoffComplete === false) { serverHandoffComplete = true; } }, []); return (_a2 = providedId !== null && providedId !== void 0 ? providedId : id2) !== null && _a2 !== void 0 ? _a2 : void 0; } function Month(props2) { var _a2; var _b2; var dayPicker = useDayPicker(); var dir = dayPicker.dir, classNames8 = dayPicker.classNames, styles = dayPicker.styles, components = dayPicker.components; var displayMonths = useNavigation().displayMonths; var captionId = useId(dayPicker.id ? "".concat(dayPicker.id, "-").concat(props2.displayIndex) : void 0); var className = [classNames8.month]; var style = styles.month; var isStart = props2.displayIndex === 0; var isEnd = props2.displayIndex === displayMonths.length - 1; var isCenter = !isStart && !isEnd; if (dir === "rtl") { _a2 = [isStart, isEnd], isEnd = _a2[0], isStart = _a2[1]; } if (isStart) { className.push(classNames8.caption_start); style = __assign2(__assign2({}, style), styles.caption_start); } if (isEnd) { className.push(classNames8.caption_end); style = __assign2(__assign2({}, style), styles.caption_end); } if (isCenter) { className.push(classNames8.caption_between); style = __assign2(__assign2({}, style), styles.caption_between); } var CaptionComponent = (_b2 = components === null || components === void 0 ? void 0 : components.Caption) !== null && _b2 !== void 0 ? _b2 : Caption; return bn.createElement( "div", { key: props2.displayIndex, className: className.join(" "), style }, bn.createElement(CaptionComponent, { id: captionId, displayMonth: props2.displayMonth }), bn.createElement(Table, { "aria-labelledby": captionId, displayMonth: props2.displayMonth }) ); } function Root() { var dayPicker = useDayPicker(); var focusContext = useFocusContext(); var navigation = useNavigation(); var _a2 = p2(false), hasInitialFocus = _a2[0], setHasInitialFocus = _a2[1]; h2(function() { if (!dayPicker.initialFocus) return; if (!focusContext.focusTarget) return; if (hasInitialFocus) return; focusContext.focus(focusContext.focusTarget); setHasInitialFocus(true); }, [ dayPicker.initialFocus, hasInitialFocus, focusContext.focus, focusContext.focusTarget, focusContext ]); var classNames8 = [dayPicker.classNames.root, dayPicker.className]; if (dayPicker.numberOfMonths > 1) { classNames8.push(dayPicker.classNames.multiple_months); } if (dayPicker.showWeekNumber) { classNames8.push(dayPicker.classNames.with_weeknumber); } var style = __assign2(__assign2({}, dayPicker.styles.root), dayPicker.style); return bn.createElement( "div", { className: classNames8.join(" "), style, dir: dayPicker.dir }, bn.createElement("div", { className: dayPicker.classNames.months, style: dayPicker.styles.months }, navigation.displayMonths.map(function(month, i4) { return bn.createElement(Month, { key: i4, displayIndex: i4, displayMonth: month }); })) ); } function RootProvider(props2) { var children = props2.children, initialProps = __rest2(props2, ["children"]); return bn.createElement( DayPickerProvider, { initialProps }, bn.createElement( NavigationProvider, null, bn.createElement( SelectSingleProvider, { initialProps }, bn.createElement( SelectMultipleProvider, { initialProps }, bn.createElement( SelectRangeProvider, { initialProps }, bn.createElement( ModifiersProvider, null, bn.createElement(FocusProvider, null, children) ) ) ) ) ) ); } function DayPicker(props2) { return bn.createElement( RootProvider, __assign2({}, props2), bn.createElement(Root, null) ); } // src/components/ui/menus/datePickerMenu.tsx var showDatePickerMenu = (point, value, setValue, format2) => { const menu = new import_obsidian8.Menu(); menu.dom.toggleClass("mk-menu", true); menu.setUseNativeMenu(false); const frag = document.createDocumentFragment(); const div = frag.createEl("div"); div.addEventListener("click", (e4) => { e4.stopImmediatePropagation(); }); div.addEventListener("mousedown", (e4) => { e4.stopImmediatePropagation(); }); div.addEventListener("mouseup", (e4) => { e4.stopImmediatePropagation(); }); div.addEventListener("keydown", (e4) => { }); const setDate = (date) => { setValue(date); menu.hide(); }; const root = createRoot(div); root.render( /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement(DayPicker, { defaultMonth: value, mode: "single", selected: value, labels: { labelMonthDropdown: () => void 0, labelYearDropdown: () => void 0, labelNext: () => void 0, labelPrevious: () => void 0, labelDay: () => void 0, labelWeekday: () => void 0, labelWeekNumber: () => void 0 }, onSelect: setDate })) ); menu.addItem((item) => { item.setTitle(frag); }); const keys = [...menu.scope.keys]; for (let i4 = 0; i4 < keys.length; i4++) { if (keys[i4].key != "Escape") { menu.scope.unregister(keys[i4]); } } menu.showAtPosition(point); return menu; }; // src/components/ContextView/DataTypeView/DateCell.tsx var DateCell = (props2) => { const [value, setValue] = p2(props2.initialValue); h2(() => { setValue(props2.initialValue); }, [props2.initialValue]); const date = F(() => { const dateTime = Date.parse(value); return dateTime > 0 ? new Date(dateTime + new Date().getTimezoneOffset() * 60 * 1e3) : null; }, [value]); const saveValue = (date2) => { const newValue = format(date2, "yyyy-MM-dd"); props2.saveValue(newValue); setValue(newValue); props2.setEditMode(null); }; const menuRef = _2(null); const ref = _2(null); h2(() => { if (props2.editMode == 2 /* EditModeActive */) { if (ref.current) { showPicker(); ref.current.focus(); } } }, [props2.editMode]); const showPicker = T2((e4) => { const offset = e4 ? e4.target.getBoundingClientRect() : ref.current.getBoundingClientRect(); menuRef.current = showDatePickerMenu( { x: offset.left - 4, y: offset.bottom - 4 }, date, saveValue ); }, [date]); const onKeyDown = (e4) => { e4.stopPropagation(); if (e4.key == "Enter" || e4.key == "Escape") { e4.target.blur(); saveValue(date); menuRef.current.hide(); } }; return /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-date", onClick: (e4) => !value && showPicker(e4) }, props2.editMode == 2 ? /* @__PURE__ */ bn.createElement("input", { onClick: (e4) => e4.stopPropagation(), className: "mk-cell-text", ref, type: "text", value, onChange: (e4) => setValue(e4.target.value), onMouseDown: () => showPicker(), onKeyDown }) : /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-date-value", onClick: (e4) => showPicker(e4) }, date ? format(date, "MMM dd yyyy") : value)); }; // src/components/StickerMenu/emojis/default.ts var emojis = { smileys_people: [ { n: ["grinning", "grinning face"], u: "1f600" }, { n: ["smiley", "smiling face with open mouth"], u: "1f603" }, { n: ["smile", "smiling face with open mouth and smiling eyes"], u: "1f604" }, { n: ["grin", "grinning face with smiling eyes"], u: "1f601" }, { n: [ "laughing", "satisfied", "smiling face with open mouth and tightly-closed eyes" ], u: "1f606" }, { n: ["sweat smile", "smiling face with open mouth and cold sweat"], u: "1f605" }, { n: ["rolling on the floor laughing"], u: "1f923" }, { n: ["joy", "face with tears of joy"], u: "1f602" }, { n: ["slightly smiling face"], u: "1f642" }, { n: ["upside-down face", "upside down face"], u: "1f643" }, { n: ["melting face"], u: "1fae0" }, { n: ["wink", "winking face"], u: "1f609" }, { n: ["blush", "smiling face with smiling eyes"], u: "1f60a" }, { n: ["innocent", "smiling face with halo"], u: "1f607" }, { n: [ "smiling face with 3 hearts", "smiling face with smiling eyes and three hearts" ], u: "1f970" }, { n: ["heart eyes", "smiling face with heart-shaped eyes"], u: "1f60d" }, { n: ["star-struck", "grinning face with star eyes"], u: "1f929" }, { n: ["kissing heart", "face throwing a kiss"], u: "1f618" }, { n: ["kissing", "kissing face"], u: "1f617" }, { n: ["relaxed", "white smiling face"], u: "263a-fe0f" }, { n: ["kissing closed eyes", "kissing face with closed eyes"], u: "1f61a" }, { n: ["kissing smiling eyes", "kissing face with smiling eyes"], u: "1f619" }, { n: ["smiling face with tear"], u: "1f972" }, { n: ["yum", "face savouring delicious food"], u: "1f60b" }, { n: ["stuck out tongue", "face with stuck-out tongue"], u: "1f61b" }, { n: [ "stuck out tongue winking eye", "face with stuck-out tongue and winking eye" ], u: "1f61c" }, { n: ["zany face", "grinning face with one large and one small eye"], u: "1f92a" }, { n: [ "stuck out tongue closed eyes", "face with stuck-out tongue and tightly-closed eyes" ], u: "1f61d" }, { n: ["money-mouth face", "money mouth face"], u: "1f911" }, { n: ["hugging face"], u: "1f917" }, { n: [ "face with hand over mouth", "smiling face with smiling eyes and hand covering mouth" ], u: "1f92d" }, { n: ["face with open eyes and hand over mouth"], u: "1fae2" }, { n: ["face with peeking eye"], u: "1fae3" }, { n: ["shushing face", "face with finger covering closed lips"], u: "1f92b" }, { n: ["thinking face"], u: "1f914" }, { n: ["saluting face"], u: "1fae1" }, { n: ["zipper-mouth face", "zipper mouth face"], u: "1f910" }, { n: ["face with raised eyebrow", "face with one eyebrow raised"], u: "1f928" }, { n: ["neutral face"], u: "1f610" }, { n: ["expressionless", "expressionless face"], u: "1f611" }, { n: ["no mouth", "face without mouth"], u: "1f636" }, { n: ["dotted line face"], u: "1fae5" }, { n: ["face in clouds"], u: "1f636-200d-1f32b-fe0f" }, { n: ["smirk", "smirking face"], u: "1f60f" }, { n: ["unamused", "unamused face"], u: "1f612" }, { n: ["face with rolling eyes"], u: "1f644" }, { n: ["grimacing", "grimacing face"], u: "1f62c" }, { n: ["face exhaling"], u: "1f62e-200d-1f4a8" }, { n: ["lying face"], u: "1f925" }, { n: ["relieved", "relieved face"], u: "1f60c" }, { n: ["pensive", "pensive face"], u: "1f614" }, { n: ["sleepy", "sleepy face"], u: "1f62a" }, { n: ["drooling face"], u: "1f924" }, { n: ["sleeping", "sleeping face"], u: "1f634" }, { n: ["mask", "face with medical mask"], u: "1f637" }, { n: ["face with thermometer"], u: "1f912" }, { n: ["face with head-bandage", "face with head bandage"], u: "1f915" }, { n: ["nauseated face"], u: "1f922" }, { n: ["face vomiting", "face with open mouth vomiting"], u: "1f92e" }, { n: ["sneezing face"], u: "1f927" }, { n: ["hot face", "overheated face"], u: "1f975" }, { n: ["cold face", "freezing face"], u: "1f976" }, { n: ["woozy face", "face with uneven eyes and wavy mouth"], u: "1f974" }, { n: ["dizzy face"], u: "1f635" }, { n: ["face with spiral eyes"], u: "1f635-200d-1f4ab" }, { n: ["exploding head", "shocked face with exploding head"], u: "1f92f" }, { n: ["face with cowboy hat"], u: "1f920" }, { n: ["partying face", "face with party horn and party hat"], u: "1f973" }, { n: ["disguised face"], u: "1f978" }, { n: ["sunglasses", "smiling face with sunglasses"], u: "1f60e" }, { n: ["nerd face"], u: "1f913" }, { n: ["face with monocle"], u: "1f9d0" }, { n: ["confused", "confused face"], u: "1f615" }, { n: ["face with diagonal mouth"], u: "1fae4" }, { n: ["worried", "worried face"], u: "1f61f" }, { n: ["slightly frowning face"], u: "1f641" }, { n: ["frowning face", "white frowning face"], u: "2639-fe0f" }, { n: ["open mouth", "face with open mouth"], u: "1f62e" }, { n: ["hushed", "hushed face"], u: "1f62f" }, { n: ["astonished", "astonished face"], u: "1f632" }, { n: ["flushed", "flushed face"], u: "1f633" }, { n: ["pleading face", "face with pleading eyes"], u: "1f97a" }, { n: ["face holding back tears"], u: "1f979" }, { n: ["frowning", "frowning face with open mouth"], u: "1f626" }, { n: ["anguished", "anguished face"], u: "1f627" }, { n: ["fearful", "fearful face"], u: "1f628" }, { n: ["cold sweat", "face with open mouth and cold sweat"], u: "1f630" }, { n: ["disappointed relieved", "disappointed but relieved face"], u: "1f625" }, { n: ["cry", "crying face"], u: "1f622" }, { n: ["sob", "loudly crying face"], u: "1f62d" }, { n: ["scream", "face screaming in fear"], u: "1f631" }, { n: ["confounded", "confounded face"], u: "1f616" }, { n: ["persevere", "persevering face"], u: "1f623" }, { n: ["disappointed", "disappointed face"], u: "1f61e" }, { n: ["sweat", "face with cold sweat"], u: "1f613" }, { n: ["weary", "weary face"], u: "1f629" }, { n: ["tired face"], u: "1f62b" }, { n: ["yawning face"], u: "1f971" }, { n: ["triumph", "face with look of triumph"], u: "1f624" }, { n: ["rage", "pouting face"], u: "1f621" }, { n: ["angry", "angry face"], u: "1f620" }, { n: [ "face with symbols on mouth", "serious face with symbols covering mouth" ], u: "1f92c" }, { n: ["smiling imp", "smiling face with horns"], u: "1f608" }, { n: ["imp"], u: "1f47f" }, { n: ["skull"], u: "1f480" }, { n: ["skull and crossbones"], u: "2620-fe0f" }, { n: ["poop", "shit", "hankey", "pile of poo"], u: "1f4a9" }, { n: ["clown face"], u: "1f921" }, { n: ["japanese ogre"], u: "1f479" }, { n: ["japanese goblin"], u: "1f47a" }, { n: ["ghost"], u: "1f47b" }, { n: ["alien", "extraterrestrial alien"], u: "1f47d" }, { n: ["alien monster", "space invader"], u: "1f47e" }, { n: ["robot face"], u: "1f916" }, { n: ["smiley cat", "smiling cat face with open mouth"], u: "1f63a" }, { n: ["smile cat", "grinning cat face with smiling eyes"], u: "1f638" }, { n: ["joy cat", "cat face with tears of joy"], u: "1f639" }, { n: ["heart eyes cat", "smiling cat face with heart-shaped eyes"], u: "1f63b" }, { n: ["smirk cat", "cat face with wry smile"], u: "1f63c" }, { n: ["kissing cat", "kissing cat face with closed eyes"], u: "1f63d" }, { n: ["scream cat", "weary cat face"], u: "1f640" }, { n: ["crying cat face"], u: "1f63f" }, { n: ["pouting cat", "pouting cat face"], u: "1f63e" }, { n: ["see no evil", "see-no-evil monkey"], u: "1f648" }, { n: ["hear no evil", "hear-no-evil monkey"], u: "1f649" }, { n: ["speak no evil", "speak-no-evil monkey"], u: "1f64a" }, { n: ["kiss", "kiss mark"], u: "1f48b" }, { n: ["love letter"], u: "1f48c" }, { n: ["cupid", "heart with arrow"], u: "1f498" }, { n: ["gift heart", "heart with ribbon"], u: "1f49d" }, { n: ["sparkling heart"], u: "1f496" }, { n: ["heartpulse", "growing heart"], u: "1f497" }, { n: ["heartbeat", "beating heart"], u: "1f493" }, { n: ["revolving hearts"], u: "1f49e" }, { n: ["two hearts"], u: "1f495" }, { n: ["heart decoration"], u: "1f49f" }, { n: ["heart exclamation", "heavy heart exclamation mark ornament"], u: "2763-fe0f" }, { n: ["broken heart"], u: "1f494" }, { n: ["heart on fire"], u: "2764-fe0f-200d-1f525" }, { n: ["mending heart"], u: "2764-fe0f-200d-1fa79" }, { n: ["heart", "heavy black heart"], u: "2764-fe0f" }, { n: ["orange heart"], u: "1f9e1" }, { n: ["yellow heart"], u: "1f49b" }, { n: ["green heart"], u: "1f49a" }, { n: ["blue heart"], u: "1f499" }, { n: ["purple heart"], u: "1f49c" }, { n: ["brown heart"], u: "1f90e" }, { n: ["black heart"], u: "1f5a4" }, { n: ["white heart"], u: "1f90d" }, { n: ["100", "hundred points symbol"], u: "1f4af" }, { n: ["anger", "anger symbol"], u: "1f4a2" }, { n: ["boom", "collision", "collision symbol"], u: "1f4a5" }, { n: ["dizzy", "dizzy symbol"], u: "1f4ab" }, { n: ["sweat drops", "splashing sweat symbol"], u: "1f4a6" }, { n: ["dash", "dash symbol"], u: "1f4a8" }, { n: ["hole"], u: "1f573-fe0f" }, { n: ["bomb"], u: "1f4a3" }, { n: ["speech balloon"], u: "1f4ac" }, { n: ["eye in speech bubble", "eye-in-speech-bubble"], u: "1f441-fe0f-200d-1f5e8-fe0f" }, { n: ["left speech bubble"], u: "1f5e8-fe0f" }, { n: ["right anger bubble"], u: "1f5ef-fe0f" }, { n: ["thought balloon"], u: "1f4ad" }, { n: ["zzz", "sleeping symbol"], u: "1f4a4" }, { n: ["wave", "waving hand sign"], u: "1f44b", v: [ "1f44b-1f3fb", "1f44b-1f3fc", "1f44b-1f3fd", "1f44b-1f3fe", "1f44b-1f3ff" ] }, { n: ["raised back of hand"], u: "1f91a", v: [ "1f91a-1f3fb", "1f91a-1f3fc", "1f91a-1f3fd", "1f91a-1f3fe", "1f91a-1f3ff" ] }, { n: ["hand with fingers splayed", "raised hand with fingers splayed"], u: "1f590-fe0f", v: [ "1f590-1f3fb", "1f590-1f3fc", "1f590-1f3fd", "1f590-1f3fe", "1f590-1f3ff" ] }, { n: ["hand", "raised hand"], u: "270b", v: ["270b-1f3fb", "270b-1f3fc", "270b-1f3fd", "270b-1f3fe", "270b-1f3ff"] }, { n: [ "spock-hand", "raised hand with part between middle and ring fingers" ], u: "1f596", v: [ "1f596-1f3fb", "1f596-1f3fc", "1f596-1f3fd", "1f596-1f3fe", "1f596-1f3ff" ] }, { n: ["rightwards hand"], u: "1faf1", v: [ "1faf1-1f3fb", "1faf1-1f3fc", "1faf1-1f3fd", "1faf1-1f3fe", "1faf1-1f3ff" ] }, { n: ["leftwards hand"], u: "1faf2", v: [ "1faf2-1f3fb", "1faf2-1f3fc", "1faf2-1f3fd", "1faf2-1f3fe", "1faf2-1f3ff" ] }, { n: ["palm down hand"], u: "1faf3", v: [ "1faf3-1f3fb", "1faf3-1f3fc", "1faf3-1f3fd", "1faf3-1f3fe", "1faf3-1f3ff" ] }, { n: ["palm up hand"], u: "1faf4", v: [ "1faf4-1f3fb", "1faf4-1f3fc", "1faf4-1f3fd", "1faf4-1f3fe", "1faf4-1f3ff" ] }, { n: ["ok hand", "ok hand sign"], u: "1f44c", v: [ "1f44c-1f3fb", "1f44c-1f3fc", "1f44c-1f3fd", "1f44c-1f3fe", "1f44c-1f3ff" ] }, { n: ["pinched fingers"], u: "1f90c", v: [ "1f90c-1f3fb", "1f90c-1f3fc", "1f90c-1f3fd", "1f90c-1f3fe", "1f90c-1f3ff" ] }, { n: ["pinching hand"], u: "1f90f", v: [ "1f90f-1f3fb", "1f90f-1f3fc", "1f90f-1f3fd", "1f90f-1f3fe", "1f90f-1f3ff" ] }, { n: ["v", "victory hand"], u: "270c-fe0f", v: ["270c-1f3fb", "270c-1f3fc", "270c-1f3fd", "270c-1f3fe", "270c-1f3ff"] }, { n: ["crossed fingers", "hand with index and middle fingers crossed"], u: "1f91e", v: [ "1f91e-1f3fb", "1f91e-1f3fc", "1f91e-1f3fd", "1f91e-1f3fe", "1f91e-1f3ff" ] }, { n: ["hand with index finger and thumb crossed"], u: "1faf0", v: [ "1faf0-1f3fb", "1faf0-1f3fc", "1faf0-1f3fd", "1faf0-1f3fe", "1faf0-1f3ff" ] }, { n: ["i love you hand sign"], u: "1f91f", v: [ "1f91f-1f3fb", "1f91f-1f3fc", "1f91f-1f3fd", "1f91f-1f3fe", "1f91f-1f3ff" ] }, { n: ["the horns", "sign of the horns"], u: "1f918", v: [ "1f918-1f3fb", "1f918-1f3fc", "1f918-1f3fd", "1f918-1f3fe", "1f918-1f3ff" ] }, { n: ["call me hand"], u: "1f919", v: [ "1f919-1f3fb", "1f919-1f3fc", "1f919-1f3fd", "1f919-1f3fe", "1f919-1f3ff" ] }, { n: ["point left", "white left pointing backhand index"], u: "1f448", v: [ "1f448-1f3fb", "1f448-1f3fc", "1f448-1f3fd", "1f448-1f3fe", "1f448-1f3ff" ] }, { n: ["point right", "white right pointing backhand index"], u: "1f449", v: [ "1f449-1f3fb", "1f449-1f3fc", "1f449-1f3fd", "1f449-1f3fe", "1f449-1f3ff" ] }, { n: ["point up 2", "white up pointing backhand index"], u: "1f446", v: [ "1f446-1f3fb", "1f446-1f3fc", "1f446-1f3fd", "1f446-1f3fe", "1f446-1f3ff" ] }, { n: ["middle finger", "reversed hand with middle finger extended"], u: "1f595", v: [ "1f595-1f3fb", "1f595-1f3fc", "1f595-1f3fd", "1f595-1f3fe", "1f595-1f3ff" ] }, { n: ["point down", "white down pointing backhand index"], u: "1f447", v: [ "1f447-1f3fb", "1f447-1f3fc", "1f447-1f3fd", "1f447-1f3fe", "1f447-1f3ff" ] }, { n: ["point up", "white up pointing index"], u: "261d-fe0f", v: ["261d-1f3fb", "261d-1f3fc", "261d-1f3fd", "261d-1f3fe", "261d-1f3ff"] }, { n: ["index pointing at the viewer"], u: "1faf5", v: [ "1faf5-1f3fb", "1faf5-1f3fc", "1faf5-1f3fd", "1faf5-1f3fe", "1faf5-1f3ff" ] }, { n: ["+1", "thumbsup", "thumbs up sign"], u: "1f44d", v: [ "1f44d-1f3fb", "1f44d-1f3fc", "1f44d-1f3fd", "1f44d-1f3fe", "1f44d-1f3ff" ] }, { n: ["-1", "thumbsdown", "thumbs down sign"], u: "1f44e", v: [ "1f44e-1f3fb", "1f44e-1f3fc", "1f44e-1f3fd", "1f44e-1f3fe", "1f44e-1f3ff" ] }, { n: ["fist", "raised fist"], u: "270a", v: ["270a-1f3fb", "270a-1f3fc", "270a-1f3fd", "270a-1f3fe", "270a-1f3ff"] }, { n: ["punch", "facepunch", "fisted hand sign"], u: "1f44a", v: [ "1f44a-1f3fb", "1f44a-1f3fc", "1f44a-1f3fd", "1f44a-1f3fe", "1f44a-1f3ff" ] }, { n: ["left-facing fist"], u: "1f91b", v: [ "1f91b-1f3fb", "1f91b-1f3fc", "1f91b-1f3fd", "1f91b-1f3fe", "1f91b-1f3ff" ] }, { n: ["right-facing fist"], u: "1f91c", v: [ "1f91c-1f3fb", "1f91c-1f3fc", "1f91c-1f3fd", "1f91c-1f3fe", "1f91c-1f3ff" ] }, { n: ["clap", "clapping hands sign"], u: "1f44f", v: [ "1f44f-1f3fb", "1f44f-1f3fc", "1f44f-1f3fd", "1f44f-1f3fe", "1f44f-1f3ff" ] }, { n: ["raised hands", "person raising both hands in celebration"], u: "1f64c", v: [ "1f64c-1f3fb", "1f64c-1f3fc", "1f64c-1f3fd", "1f64c-1f3fe", "1f64c-1f3ff" ] }, { n: ["heart hands"], u: "1faf6", v: [ "1faf6-1f3fb", "1faf6-1f3fc", "1faf6-1f3fd", "1faf6-1f3fe", "1faf6-1f3ff" ] }, { n: ["open hands", "open hands sign"], u: "1f450", v: [ "1f450-1f3fb", "1f450-1f3fc", "1f450-1f3fd", "1f450-1f3fe", "1f450-1f3ff" ] }, { n: ["palms up together"], u: "1f932", v: [ "1f932-1f3fb", "1f932-1f3fc", "1f932-1f3fd", "1f932-1f3fe", "1f932-1f3ff" ] }, { n: ["handshake"], u: "1f91d", v: [ "1f91d-1f3fb", "1f91d-1f3fc", "1f91d-1f3fd", "1f91d-1f3fe", "1f91d-1f3ff", "1faf1-1f3fb-200d-1faf2-1f3fc", "1faf1-1f3fb-200d-1faf2-1f3fd", "1faf1-1f3fb-200d-1faf2-1f3fe", "1faf1-1f3fb-200d-1faf2-1f3ff", "1faf1-1f3fc-200d-1faf2-1f3fb", "1faf1-1f3fc-200d-1faf2-1f3fd", "1faf1-1f3fc-200d-1faf2-1f3fe", "1faf1-1f3fc-200d-1faf2-1f3ff", "1faf1-1f3fd-200d-1faf2-1f3fb", "1faf1-1f3fd-200d-1faf2-1f3fc", "1faf1-1f3fd-200d-1faf2-1f3fe", "1faf1-1f3fd-200d-1faf2-1f3ff", "1faf1-1f3fe-200d-1faf2-1f3fb", "1faf1-1f3fe-200d-1faf2-1f3fc", "1faf1-1f3fe-200d-1faf2-1f3fd", "1faf1-1f3fe-200d-1faf2-1f3ff", "1faf1-1f3ff-200d-1faf2-1f3fb", "1faf1-1f3ff-200d-1faf2-1f3fc", "1faf1-1f3ff-200d-1faf2-1f3fd", "1faf1-1f3ff-200d-1faf2-1f3fe" ] }, { n: ["pray", "person with folded hands"], u: "1f64f", v: [ "1f64f-1f3fb", "1f64f-1f3fc", "1f64f-1f3fd", "1f64f-1f3fe", "1f64f-1f3ff" ] }, { n: ["writing hand"], u: "270d-fe0f", v: ["270d-1f3fb", "270d-1f3fc", "270d-1f3fd", "270d-1f3fe", "270d-1f3ff"] }, { n: ["nail care", "nail polish"], u: "1f485", v: [ "1f485-1f3fb", "1f485-1f3fc", "1f485-1f3fd", "1f485-1f3fe", "1f485-1f3ff" ] }, { n: ["selfie"], u: "1f933", v: [ "1f933-1f3fb", "1f933-1f3fc", "1f933-1f3fd", "1f933-1f3fe", "1f933-1f3ff" ] }, { n: ["muscle", "flexed biceps"], u: "1f4aa", v: [ "1f4aa-1f3fb", "1f4aa-1f3fc", "1f4aa-1f3fd", "1f4aa-1f3fe", "1f4aa-1f3ff" ] }, { n: ["mechanical arm"], u: "1f9be" }, { n: ["mechanical leg"], u: "1f9bf" }, { n: ["leg"], u: "1f9b5", v: [ "1f9b5-1f3fb", "1f9b5-1f3fc", "1f9b5-1f3fd", "1f9b5-1f3fe", "1f9b5-1f3ff" ] }, { n: ["foot"], u: "1f9b6", v: [ "1f9b6-1f3fb", "1f9b6-1f3fc", "1f9b6-1f3fd", "1f9b6-1f3fe", "1f9b6-1f3ff" ] }, { n: ["ear"], u: "1f442", v: [ "1f442-1f3fb", "1f442-1f3fc", "1f442-1f3fd", "1f442-1f3fe", "1f442-1f3ff" ] }, { n: ["ear with hearing aid"], u: "1f9bb", v: [ "1f9bb-1f3fb", "1f9bb-1f3fc", "1f9bb-1f3fd", "1f9bb-1f3fe", "1f9bb-1f3ff" ] }, { n: ["nose"], u: "1f443", v: [ "1f443-1f3fb", "1f443-1f3fc", "1f443-1f3fd", "1f443-1f3fe", "1f443-1f3ff" ] }, { n: ["brain"], u: "1f9e0" }, { n: ["anatomical heart"], u: "1fac0" }, { n: ["lungs"], u: "1fac1" }, { n: ["tooth"], u: "1f9b7" }, { n: ["bone"], u: "1f9b4" }, { n: ["eyes"], u: "1f440" }, { n: ["eye"], u: "1f441-fe0f" }, { n: ["tongue"], u: "1f445" }, { n: ["lips", "mouth"], u: "1f444" }, { n: ["biting lip"], u: "1fae6" }, { n: ["baby"], u: "1f476", v: [ "1f476-1f3fb", "1f476-1f3fc", "1f476-1f3fd", "1f476-1f3fe", "1f476-1f3ff" ] }, { n: ["child"], u: "1f9d2", v: [ "1f9d2-1f3fb", "1f9d2-1f3fc", "1f9d2-1f3fd", "1f9d2-1f3fe", "1f9d2-1f3ff" ] }, { n: ["boy"], u: "1f466", v: [ "1f466-1f3fb", "1f466-1f3fc", "1f466-1f3fd", "1f466-1f3fe", "1f466-1f3ff" ] }, { n: ["girl"], u: "1f467", v: [ "1f467-1f3fb", "1f467-1f3fc", "1f467-1f3fd", "1f467-1f3fe", "1f467-1f3ff" ] }, { n: ["adult"], u: "1f9d1", v: [ "1f9d1-1f3fb", "1f9d1-1f3fc", "1f9d1-1f3fd", "1f9d1-1f3fe", "1f9d1-1f3ff" ] }, { n: ["person with blond hair"], u: "1f471", v: [ "1f471-1f3fb", "1f471-1f3fc", "1f471-1f3fd", "1f471-1f3fe", "1f471-1f3ff" ] }, { n: ["man"], u: "1f468", v: [ "1f468-1f3fb", "1f468-1f3fc", "1f468-1f3fd", "1f468-1f3fe", "1f468-1f3ff" ] }, { n: ["bearded person"], u: "1f9d4", v: [ "1f9d4-1f3fb", "1f9d4-1f3fc", "1f9d4-1f3fd", "1f9d4-1f3fe", "1f9d4-1f3ff" ] }, { n: ["man: beard", "man with beard"], u: "1f9d4-200d-2642-fe0f", v: [ "1f9d4-1f3fb-200d-2642-fe0f", "1f9d4-1f3fc-200d-2642-fe0f", "1f9d4-1f3fd-200d-2642-fe0f", "1f9d4-1f3fe-200d-2642-fe0f", "1f9d4-1f3ff-200d-2642-fe0f" ] }, { n: ["woman: beard", "woman with beard"], u: "1f9d4-200d-2640-fe0f", v: [ "1f9d4-1f3fb-200d-2640-fe0f", "1f9d4-1f3fc-200d-2640-fe0f", "1f9d4-1f3fd-200d-2640-fe0f", "1f9d4-1f3fe-200d-2640-fe0f", "1f9d4-1f3ff-200d-2640-fe0f" ] }, { n: ["man: red hair", "red haired man"], u: "1f468-200d-1f9b0", v: [ "1f468-1f3fb-200d-1f9b0", "1f468-1f3fc-200d-1f9b0", "1f468-1f3fd-200d-1f9b0", "1f468-1f3fe-200d-1f9b0", "1f468-1f3ff-200d-1f9b0" ] }, { n: ["man: curly hair", "curly haired man"], u: "1f468-200d-1f9b1", v: [ "1f468-1f3fb-200d-1f9b1", "1f468-1f3fc-200d-1f9b1", "1f468-1f3fd-200d-1f9b1", "1f468-1f3fe-200d-1f9b1", "1f468-1f3ff-200d-1f9b1" ] }, { n: ["man: white hair", "white haired man"], u: "1f468-200d-1f9b3", v: [ "1f468-1f3fb-200d-1f9b3", "1f468-1f3fc-200d-1f9b3", "1f468-1f3fd-200d-1f9b3", "1f468-1f3fe-200d-1f9b3", "1f468-1f3ff-200d-1f9b3" ] }, { n: ["bald man", "man: bald"], u: "1f468-200d-1f9b2", v: [ "1f468-1f3fb-200d-1f9b2", "1f468-1f3fc-200d-1f9b2", "1f468-1f3fd-200d-1f9b2", "1f468-1f3fe-200d-1f9b2", "1f468-1f3ff-200d-1f9b2" ] }, { n: ["woman"], u: "1f469", v: [ "1f469-1f3fb", "1f469-1f3fc", "1f469-1f3fd", "1f469-1f3fe", "1f469-1f3ff" ] }, { n: ["woman: red hair", "red haired woman"], u: "1f469-200d-1f9b0", v: [ "1f469-1f3fb-200d-1f9b0", "1f469-1f3fc-200d-1f9b0", "1f469-1f3fd-200d-1f9b0", "1f469-1f3fe-200d-1f9b0", "1f469-1f3ff-200d-1f9b0" ] }, { n: ["person: red hair", "red haired person"], u: "1f9d1-200d-1f9b0", v: [ "1f9d1-1f3fb-200d-1f9b0", "1f9d1-1f3fc-200d-1f9b0", "1f9d1-1f3fd-200d-1f9b0", "1f9d1-1f3fe-200d-1f9b0", "1f9d1-1f3ff-200d-1f9b0" ] }, { n: ["woman: curly hair", "curly haired woman"], u: "1f469-200d-1f9b1", v: [ "1f469-1f3fb-200d-1f9b1", "1f469-1f3fc-200d-1f9b1", "1f469-1f3fd-200d-1f9b1", "1f469-1f3fe-200d-1f9b1", "1f469-1f3ff-200d-1f9b1" ] }, { n: ["person: curly hair", "curly haired person"], u: "1f9d1-200d-1f9b1", v: [ "1f9d1-1f3fb-200d-1f9b1", "1f9d1-1f3fc-200d-1f9b1", "1f9d1-1f3fd-200d-1f9b1", "1f9d1-1f3fe-200d-1f9b1", "1f9d1-1f3ff-200d-1f9b1" ] }, { n: ["woman: white hair", "white haired woman"], u: "1f469-200d-1f9b3", v: [ "1f469-1f3fb-200d-1f9b3", "1f469-1f3fc-200d-1f9b3", "1f469-1f3fd-200d-1f9b3", "1f469-1f3fe-200d-1f9b3", "1f469-1f3ff-200d-1f9b3" ] }, { n: ["person: white hair", "white haired person"], u: "1f9d1-200d-1f9b3", v: [ "1f9d1-1f3fb-200d-1f9b3", "1f9d1-1f3fc-200d-1f9b3", "1f9d1-1f3fd-200d-1f9b3", "1f9d1-1f3fe-200d-1f9b3", "1f9d1-1f3ff-200d-1f9b3" ] }, { n: ["bald woman", "woman: bald"], u: "1f469-200d-1f9b2", v: [ "1f469-1f3fb-200d-1f9b2", "1f469-1f3fc-200d-1f9b2", "1f469-1f3fd-200d-1f9b2", "1f469-1f3fe-200d-1f9b2", "1f469-1f3ff-200d-1f9b2" ] }, { n: ["bald person", "person: bald"], u: "1f9d1-200d-1f9b2", v: [ "1f9d1-1f3fb-200d-1f9b2", "1f9d1-1f3fc-200d-1f9b2", "1f9d1-1f3fd-200d-1f9b2", "1f9d1-1f3fe-200d-1f9b2", "1f9d1-1f3ff-200d-1f9b2" ] }, { n: ["woman: blond hair", "blond-haired-woman"], u: "1f471-200d-2640-fe0f", v: [ "1f471-1f3fb-200d-2640-fe0f", "1f471-1f3fc-200d-2640-fe0f", "1f471-1f3fd-200d-2640-fe0f", "1f471-1f3fe-200d-2640-fe0f", "1f471-1f3ff-200d-2640-fe0f" ] }, { n: ["man: blond hair", "blond-haired-man"], u: "1f471-200d-2642-fe0f", v: [ "1f471-1f3fb-200d-2642-fe0f", "1f471-1f3fc-200d-2642-fe0f", "1f471-1f3fd-200d-2642-fe0f", "1f471-1f3fe-200d-2642-fe0f", "1f471-1f3ff-200d-2642-fe0f" ] }, { n: ["older adult"], u: "1f9d3", v: [ "1f9d3-1f3fb", "1f9d3-1f3fc", "1f9d3-1f3fd", "1f9d3-1f3fe", "1f9d3-1f3ff" ] }, { n: ["older man"], u: "1f474", v: [ "1f474-1f3fb", "1f474-1f3fc", "1f474-1f3fd", "1f474-1f3fe", "1f474-1f3ff" ] }, { n: ["older woman"], u: "1f475", v: [ "1f475-1f3fb", "1f475-1f3fc", "1f475-1f3fd", "1f475-1f3fe", "1f475-1f3ff" ] }, { n: ["person frowning"], u: "1f64d", v: [ "1f64d-1f3fb", "1f64d-1f3fc", "1f64d-1f3fd", "1f64d-1f3fe", "1f64d-1f3ff" ] }, { n: ["man frowning", "man-frowning"], u: "1f64d-200d-2642-fe0f", v: [ "1f64d-1f3fb-200d-2642-fe0f", "1f64d-1f3fc-200d-2642-fe0f", "1f64d-1f3fd-200d-2642-fe0f", "1f64d-1f3fe-200d-2642-fe0f", "1f64d-1f3ff-200d-2642-fe0f" ] }, { n: ["woman frowning", "woman-frowning"], u: "1f64d-200d-2640-fe0f", v: [ "1f64d-1f3fb-200d-2640-fe0f", "1f64d-1f3fc-200d-2640-fe0f", "1f64d-1f3fd-200d-2640-fe0f", "1f64d-1f3fe-200d-2640-fe0f", "1f64d-1f3ff-200d-2640-fe0f" ] }, { n: ["person with pouting face"], u: "1f64e", v: [ "1f64e-1f3fb", "1f64e-1f3fc", "1f64e-1f3fd", "1f64e-1f3fe", "1f64e-1f3ff" ] }, { n: ["man pouting", "man-pouting"], u: "1f64e-200d-2642-fe0f", v: [ "1f64e-1f3fb-200d-2642-fe0f", "1f64e-1f3fc-200d-2642-fe0f", "1f64e-1f3fd-200d-2642-fe0f", "1f64e-1f3fe-200d-2642-fe0f", "1f64e-1f3ff-200d-2642-fe0f" ] }, { n: ["woman pouting", "woman-pouting"], u: "1f64e-200d-2640-fe0f", v: [ "1f64e-1f3fb-200d-2640-fe0f", "1f64e-1f3fc-200d-2640-fe0f", "1f64e-1f3fd-200d-2640-fe0f", "1f64e-1f3fe-200d-2640-fe0f", "1f64e-1f3ff-200d-2640-fe0f" ] }, { n: ["no good", "face with no good gesture"], u: "1f645", v: [ "1f645-1f3fb", "1f645-1f3fc", "1f645-1f3fd", "1f645-1f3fe", "1f645-1f3ff" ] }, { n: ["man gesturing no", "man-gesturing-no"], u: "1f645-200d-2642-fe0f", v: [ "1f645-1f3fb-200d-2642-fe0f", "1f645-1f3fc-200d-2642-fe0f", "1f645-1f3fd-200d-2642-fe0f", "1f645-1f3fe-200d-2642-fe0f", "1f645-1f3ff-200d-2642-fe0f" ] }, { n: ["woman gesturing no", "woman-gesturing-no"], u: "1f645-200d-2640-fe0f", v: [ "1f645-1f3fb-200d-2640-fe0f", "1f645-1f3fc-200d-2640-fe0f", "1f645-1f3fd-200d-2640-fe0f", "1f645-1f3fe-200d-2640-fe0f", "1f645-1f3ff-200d-2640-fe0f" ] }, { n: ["ok woman", "face with ok gesture"], u: "1f646", v: [ "1f646-1f3fb", "1f646-1f3fc", "1f646-1f3fd", "1f646-1f3fe", "1f646-1f3ff" ] }, { n: ["man gesturing ok", "man-gesturing-ok"], u: "1f646-200d-2642-fe0f", v: [ "1f646-1f3fb-200d-2642-fe0f", "1f646-1f3fc-200d-2642-fe0f", "1f646-1f3fd-200d-2642-fe0f", "1f646-1f3fe-200d-2642-fe0f", "1f646-1f3ff-200d-2642-fe0f" ] }, { n: ["woman gesturing ok", "woman-gesturing-ok"], u: "1f646-200d-2640-fe0f", v: [ "1f646-1f3fb-200d-2640-fe0f", "1f646-1f3fc-200d-2640-fe0f", "1f646-1f3fd-200d-2640-fe0f", "1f646-1f3fe-200d-2640-fe0f", "1f646-1f3ff-200d-2640-fe0f" ] }, { n: ["information desk person"], u: "1f481", v: [ "1f481-1f3fb", "1f481-1f3fc", "1f481-1f3fd", "1f481-1f3fe", "1f481-1f3ff" ] }, { n: ["man tipping hand", "man-tipping-hand"], u: "1f481-200d-2642-fe0f", v: [ "1f481-1f3fb-200d-2642-fe0f", "1f481-1f3fc-200d-2642-fe0f", "1f481-1f3fd-200d-2642-fe0f", "1f481-1f3fe-200d-2642-fe0f", "1f481-1f3ff-200d-2642-fe0f" ] }, { n: ["woman tipping hand", "woman-tipping-hand"], u: "1f481-200d-2640-fe0f", v: [ "1f481-1f3fb-200d-2640-fe0f", "1f481-1f3fc-200d-2640-fe0f", "1f481-1f3fd-200d-2640-fe0f", "1f481-1f3fe-200d-2640-fe0f", "1f481-1f3ff-200d-2640-fe0f" ] }, { n: ["raising hand", "happy person raising one hand"], u: "1f64b", v: [ "1f64b-1f3fb", "1f64b-1f3fc", "1f64b-1f3fd", "1f64b-1f3fe", "1f64b-1f3ff" ] }, { n: ["man raising hand", "man-raising-hand"], u: "1f64b-200d-2642-fe0f", v: [ "1f64b-1f3fb-200d-2642-fe0f", "1f64b-1f3fc-200d-2642-fe0f", "1f64b-1f3fd-200d-2642-fe0f", "1f64b-1f3fe-200d-2642-fe0f", "1f64b-1f3ff-200d-2642-fe0f" ] }, { n: ["woman raising hand", "woman-raising-hand"], u: "1f64b-200d-2640-fe0f", v: [ "1f64b-1f3fb-200d-2640-fe0f", "1f64b-1f3fc-200d-2640-fe0f", "1f64b-1f3fd-200d-2640-fe0f", "1f64b-1f3fe-200d-2640-fe0f", "1f64b-1f3ff-200d-2640-fe0f" ] }, { n: ["deaf person"], u: "1f9cf", v: [ "1f9cf-1f3fb", "1f9cf-1f3fc", "1f9cf-1f3fd", "1f9cf-1f3fe", "1f9cf-1f3ff" ] }, { n: ["deaf man"], u: "1f9cf-200d-2642-fe0f", v: [ "1f9cf-1f3fb-200d-2642-fe0f", "1f9cf-1f3fc-200d-2642-fe0f", "1f9cf-1f3fd-200d-2642-fe0f", "1f9cf-1f3fe-200d-2642-fe0f", "1f9cf-1f3ff-200d-2642-fe0f" ] }, { n: ["deaf woman"], u: "1f9cf-200d-2640-fe0f", v: [ "1f9cf-1f3fb-200d-2640-fe0f", "1f9cf-1f3fc-200d-2640-fe0f", "1f9cf-1f3fd-200d-2640-fe0f", "1f9cf-1f3fe-200d-2640-fe0f", "1f9cf-1f3ff-200d-2640-fe0f" ] }, { n: ["bow", "person bowing deeply"], u: "1f647", v: [ "1f647-1f3fb", "1f647-1f3fc", "1f647-1f3fd", "1f647-1f3fe", "1f647-1f3ff" ] }, { n: ["man bowing", "man-bowing"], u: "1f647-200d-2642-fe0f", v: [ "1f647-1f3fb-200d-2642-fe0f", "1f647-1f3fc-200d-2642-fe0f", "1f647-1f3fd-200d-2642-fe0f", "1f647-1f3fe-200d-2642-fe0f", "1f647-1f3ff-200d-2642-fe0f" ] }, { n: ["woman bowing", "woman-bowing"], u: "1f647-200d-2640-fe0f", v: [ "1f647-1f3fb-200d-2640-fe0f", "1f647-1f3fc-200d-2640-fe0f", "1f647-1f3fd-200d-2640-fe0f", "1f647-1f3fe-200d-2640-fe0f", "1f647-1f3ff-200d-2640-fe0f" ] }, { n: ["face palm"], u: "1f926", v: [ "1f926-1f3fb", "1f926-1f3fc", "1f926-1f3fd", "1f926-1f3fe", "1f926-1f3ff" ] }, { n: ["man facepalming", "man-facepalming"], u: "1f926-200d-2642-fe0f", v: [ "1f926-1f3fb-200d-2642-fe0f", "1f926-1f3fc-200d-2642-fe0f", "1f926-1f3fd-200d-2642-fe0f", "1f926-1f3fe-200d-2642-fe0f", "1f926-1f3ff-200d-2642-fe0f" ] }, { n: ["woman facepalming", "woman-facepalming"], u: "1f926-200d-2640-fe0f", v: [ "1f926-1f3fb-200d-2640-fe0f", "1f926-1f3fc-200d-2640-fe0f", "1f926-1f3fd-200d-2640-fe0f", "1f926-1f3fe-200d-2640-fe0f", "1f926-1f3ff-200d-2640-fe0f" ] }, { n: ["shrug"], u: "1f937", v: [ "1f937-1f3fb", "1f937-1f3fc", "1f937-1f3fd", "1f937-1f3fe", "1f937-1f3ff" ] }, { n: ["man shrugging", "man-shrugging"], u: "1f937-200d-2642-fe0f", v: [ "1f937-1f3fb-200d-2642-fe0f", "1f937-1f3fc-200d-2642-fe0f", "1f937-1f3fd-200d-2642-fe0f", "1f937-1f3fe-200d-2642-fe0f", "1f937-1f3ff-200d-2642-fe0f" ] }, { n: ["woman shrugging", "woman-shrugging"], u: "1f937-200d-2640-fe0f", v: [ "1f937-1f3fb-200d-2640-fe0f", "1f937-1f3fc-200d-2640-fe0f", "1f937-1f3fd-200d-2640-fe0f", "1f937-1f3fe-200d-2640-fe0f", "1f937-1f3ff-200d-2640-fe0f" ] }, { n: ["health worker"], u: "1f9d1-200d-2695-fe0f", v: [ "1f9d1-1f3fb-200d-2695-fe0f", "1f9d1-1f3fc-200d-2695-fe0f", "1f9d1-1f3fd-200d-2695-fe0f", "1f9d1-1f3fe-200d-2695-fe0f", "1f9d1-1f3ff-200d-2695-fe0f" ] }, { n: ["male-doctor", "man health worker"], u: "1f468-200d-2695-fe0f", v: [ "1f468-1f3fb-200d-2695-fe0f", "1f468-1f3fc-200d-2695-fe0f", "1f468-1f3fd-200d-2695-fe0f", "1f468-1f3fe-200d-2695-fe0f", "1f468-1f3ff-200d-2695-fe0f" ] }, { n: ["female-doctor", "woman health worker"], u: "1f469-200d-2695-fe0f", v: [ "1f469-1f3fb-200d-2695-fe0f", "1f469-1f3fc-200d-2695-fe0f", "1f469-1f3fd-200d-2695-fe0f", "1f469-1f3fe-200d-2695-fe0f", "1f469-1f3ff-200d-2695-fe0f" ] }, { n: ["student"], u: "1f9d1-200d-1f393", v: [ "1f9d1-1f3fb-200d-1f393", "1f9d1-1f3fc-200d-1f393", "1f9d1-1f3fd-200d-1f393", "1f9d1-1f3fe-200d-1f393", "1f9d1-1f3ff-200d-1f393" ] }, { n: ["man student", "male-student"], u: "1f468-200d-1f393", v: [ "1f468-1f3fb-200d-1f393", "1f468-1f3fc-200d-1f393", "1f468-1f3fd-200d-1f393", "1f468-1f3fe-200d-1f393", "1f468-1f3ff-200d-1f393" ] }, { n: ["woman student", "female-student"], u: "1f469-200d-1f393", v: [ "1f469-1f3fb-200d-1f393", "1f469-1f3fc-200d-1f393", "1f469-1f3fd-200d-1f393", "1f469-1f3fe-200d-1f393", "1f469-1f3ff-200d-1f393" ] }, { n: ["teacher"], u: "1f9d1-200d-1f3eb", v: [ "1f9d1-1f3fb-200d-1f3eb", "1f9d1-1f3fc-200d-1f3eb", "1f9d1-1f3fd-200d-1f3eb", "1f9d1-1f3fe-200d-1f3eb", "1f9d1-1f3ff-200d-1f3eb" ] }, { n: ["man teacher", "male-teacher"], u: "1f468-200d-1f3eb", v: [ "1f468-1f3fb-200d-1f3eb", "1f468-1f3fc-200d-1f3eb", "1f468-1f3fd-200d-1f3eb", "1f468-1f3fe-200d-1f3eb", "1f468-1f3ff-200d-1f3eb" ] }, { n: ["woman teacher", "female-teacher"], u: "1f469-200d-1f3eb", v: [ "1f469-1f3fb-200d-1f3eb", "1f469-1f3fc-200d-1f3eb", "1f469-1f3fd-200d-1f3eb", "1f469-1f3fe-200d-1f3eb", "1f469-1f3ff-200d-1f3eb" ] }, { n: ["judge"], u: "1f9d1-200d-2696-fe0f", v: [ "1f9d1-1f3fb-200d-2696-fe0f", "1f9d1-1f3fc-200d-2696-fe0f", "1f9d1-1f3fd-200d-2696-fe0f", "1f9d1-1f3fe-200d-2696-fe0f", "1f9d1-1f3ff-200d-2696-fe0f" ] }, { n: ["man judge", "male-judge"], u: "1f468-200d-2696-fe0f", v: [ "1f468-1f3fb-200d-2696-fe0f", "1f468-1f3fc-200d-2696-fe0f", "1f468-1f3fd-200d-2696-fe0f", "1f468-1f3fe-200d-2696-fe0f", "1f468-1f3ff-200d-2696-fe0f" ] }, { n: ["woman judge", "female-judge"], u: "1f469-200d-2696-fe0f", v: [ "1f469-1f3fb-200d-2696-fe0f", "1f469-1f3fc-200d-2696-fe0f", "1f469-1f3fd-200d-2696-fe0f", "1f469-1f3fe-200d-2696-fe0f", "1f469-1f3ff-200d-2696-fe0f" ] }, { n: ["farmer"], u: "1f9d1-200d-1f33e", v: [ "1f9d1-1f3fb-200d-1f33e", "1f9d1-1f3fc-200d-1f33e", "1f9d1-1f3fd-200d-1f33e", "1f9d1-1f3fe-200d-1f33e", "1f9d1-1f3ff-200d-1f33e" ] }, { n: ["man farmer", "male-farmer"], u: "1f468-200d-1f33e", v: [ "1f468-1f3fb-200d-1f33e", "1f468-1f3fc-200d-1f33e", "1f468-1f3fd-200d-1f33e", "1f468-1f3fe-200d-1f33e", "1f468-1f3ff-200d-1f33e" ] }, { n: ["woman farmer", "female-farmer"], u: "1f469-200d-1f33e", v: [ "1f469-1f3fb-200d-1f33e", "1f469-1f3fc-200d-1f33e", "1f469-1f3fd-200d-1f33e", "1f469-1f3fe-200d-1f33e", "1f469-1f3ff-200d-1f33e" ] }, { n: ["cook"], u: "1f9d1-200d-1f373", v: [ "1f9d1-1f3fb-200d-1f373", "1f9d1-1f3fc-200d-1f373", "1f9d1-1f3fd-200d-1f373", "1f9d1-1f3fe-200d-1f373", "1f9d1-1f3ff-200d-1f373" ] }, { n: ["man cook", "male-cook"], u: "1f468-200d-1f373", v: [ "1f468-1f3fb-200d-1f373", "1f468-1f3fc-200d-1f373", "1f468-1f3fd-200d-1f373", "1f468-1f3fe-200d-1f373", "1f468-1f3ff-200d-1f373" ] }, { n: ["woman cook", "female-cook"], u: "1f469-200d-1f373", v: [ "1f469-1f3fb-200d-1f373", "1f469-1f3fc-200d-1f373", "1f469-1f3fd-200d-1f373", "1f469-1f3fe-200d-1f373", "1f469-1f3ff-200d-1f373" ] }, { n: ["mechanic"], u: "1f9d1-200d-1f527", v: [ "1f9d1-1f3fb-200d-1f527", "1f9d1-1f3fc-200d-1f527", "1f9d1-1f3fd-200d-1f527", "1f9d1-1f3fe-200d-1f527", "1f9d1-1f3ff-200d-1f527" ] }, { n: ["man mechanic", "male-mechanic"], u: "1f468-200d-1f527", v: [ "1f468-1f3fb-200d-1f527", "1f468-1f3fc-200d-1f527", "1f468-1f3fd-200d-1f527", "1f468-1f3fe-200d-1f527", "1f468-1f3ff-200d-1f527" ] }, { n: ["woman mechanic", "female-mechanic"], u: "1f469-200d-1f527", v: [ "1f469-1f3fb-200d-1f527", "1f469-1f3fc-200d-1f527", "1f469-1f3fd-200d-1f527", "1f469-1f3fe-200d-1f527", "1f469-1f3ff-200d-1f527" ] }, { n: ["factory worker"], u: "1f9d1-200d-1f3ed", v: [ "1f9d1-1f3fb-200d-1f3ed", "1f9d1-1f3fc-200d-1f3ed", "1f9d1-1f3fd-200d-1f3ed", "1f9d1-1f3fe-200d-1f3ed", "1f9d1-1f3ff-200d-1f3ed" ] }, { n: ["man factory worker", "male-factory-worker"], u: "1f468-200d-1f3ed", v: [ "1f468-1f3fb-200d-1f3ed", "1f468-1f3fc-200d-1f3ed", "1f468-1f3fd-200d-1f3ed", "1f468-1f3fe-200d-1f3ed", "1f468-1f3ff-200d-1f3ed" ] }, { n: ["woman factory worker", "female-factory-worker"], u: "1f469-200d-1f3ed", v: [ "1f469-1f3fb-200d-1f3ed", "1f469-1f3fc-200d-1f3ed", "1f469-1f3fd-200d-1f3ed", "1f469-1f3fe-200d-1f3ed", "1f469-1f3ff-200d-1f3ed" ] }, { n: ["office worker"], u: "1f9d1-200d-1f4bc", v: [ "1f9d1-1f3fb-200d-1f4bc", "1f9d1-1f3fc-200d-1f4bc", "1f9d1-1f3fd-200d-1f4bc", "1f9d1-1f3fe-200d-1f4bc", "1f9d1-1f3ff-200d-1f4bc" ] }, { n: ["man office worker", "male-office-worker"], u: "1f468-200d-1f4bc", v: [ "1f468-1f3fb-200d-1f4bc", "1f468-1f3fc-200d-1f4bc", "1f468-1f3fd-200d-1f4bc", "1f468-1f3fe-200d-1f4bc", "1f468-1f3ff-200d-1f4bc" ] }, { n: ["woman office worker", "female-office-worker"], u: "1f469-200d-1f4bc", v: [ "1f469-1f3fb-200d-1f4bc", "1f469-1f3fc-200d-1f4bc", "1f469-1f3fd-200d-1f4bc", "1f469-1f3fe-200d-1f4bc", "1f469-1f3ff-200d-1f4bc" ] }, { n: ["scientist"], u: "1f9d1-200d-1f52c", v: [ "1f9d1-1f3fb-200d-1f52c", "1f9d1-1f3fc-200d-1f52c", "1f9d1-1f3fd-200d-1f52c", "1f9d1-1f3fe-200d-1f52c", "1f9d1-1f3ff-200d-1f52c" ] }, { n: ["man scientist", "male-scientist"], u: "1f468-200d-1f52c", v: [ "1f468-1f3fb-200d-1f52c", "1f468-1f3fc-200d-1f52c", "1f468-1f3fd-200d-1f52c", "1f468-1f3fe-200d-1f52c", "1f468-1f3ff-200d-1f52c" ] }, { n: ["woman scientist", "female-scientist"], u: "1f469-200d-1f52c", v: [ "1f469-1f3fb-200d-1f52c", "1f469-1f3fc-200d-1f52c", "1f469-1f3fd-200d-1f52c", "1f469-1f3fe-200d-1f52c", "1f469-1f3ff-200d-1f52c" ] }, { n: ["technologist"], u: "1f9d1-200d-1f4bb", v: [ "1f9d1-1f3fb-200d-1f4bb", "1f9d1-1f3fc-200d-1f4bb", "1f9d1-1f3fd-200d-1f4bb", "1f9d1-1f3fe-200d-1f4bb", "1f9d1-1f3ff-200d-1f4bb" ] }, { n: ["man technologist", "male-technologist"], u: "1f468-200d-1f4bb", v: [ "1f468-1f3fb-200d-1f4bb", "1f468-1f3fc-200d-1f4bb", "1f468-1f3fd-200d-1f4bb", "1f468-1f3fe-200d-1f4bb", "1f468-1f3ff-200d-1f4bb" ] }, { n: ["woman technologist", "female-technologist"], u: "1f469-200d-1f4bb", v: [ "1f469-1f3fb-200d-1f4bb", "1f469-1f3fc-200d-1f4bb", "1f469-1f3fd-200d-1f4bb", "1f469-1f3fe-200d-1f4bb", "1f469-1f3ff-200d-1f4bb" ] }, { n: ["singer"], u: "1f9d1-200d-1f3a4", v: [ "1f9d1-1f3fb-200d-1f3a4", "1f9d1-1f3fc-200d-1f3a4", "1f9d1-1f3fd-200d-1f3a4", "1f9d1-1f3fe-200d-1f3a4", "1f9d1-1f3ff-200d-1f3a4" ] }, { n: ["man singer", "male-singer"], u: "1f468-200d-1f3a4", v: [ "1f468-1f3fb-200d-1f3a4", "1f468-1f3fc-200d-1f3a4", "1f468-1f3fd-200d-1f3a4", "1f468-1f3fe-200d-1f3a4", "1f468-1f3ff-200d-1f3a4" ] }, { n: ["woman singer", "female-singer"], u: "1f469-200d-1f3a4", v: [ "1f469-1f3fb-200d-1f3a4", "1f469-1f3fc-200d-1f3a4", "1f469-1f3fd-200d-1f3a4", "1f469-1f3fe-200d-1f3a4", "1f469-1f3ff-200d-1f3a4" ] }, { n: ["artist"], u: "1f9d1-200d-1f3a8", v: [ "1f9d1-1f3fb-200d-1f3a8", "1f9d1-1f3fc-200d-1f3a8", "1f9d1-1f3fd-200d-1f3a8", "1f9d1-1f3fe-200d-1f3a8", "1f9d1-1f3ff-200d-1f3a8" ] }, { n: ["man artist", "male-artist"], u: "1f468-200d-1f3a8", v: [ "1f468-1f3fb-200d-1f3a8", "1f468-1f3fc-200d-1f3a8", "1f468-1f3fd-200d-1f3a8", "1f468-1f3fe-200d-1f3a8", "1f468-1f3ff-200d-1f3a8" ] }, { n: ["woman artist", "female-artist"], u: "1f469-200d-1f3a8", v: [ "1f469-1f3fb-200d-1f3a8", "1f469-1f3fc-200d-1f3a8", "1f469-1f3fd-200d-1f3a8", "1f469-1f3fe-200d-1f3a8", "1f469-1f3ff-200d-1f3a8" ] }, { n: ["pilot"], u: "1f9d1-200d-2708-fe0f", v: [ "1f9d1-1f3fb-200d-2708-fe0f", "1f9d1-1f3fc-200d-2708-fe0f", "1f9d1-1f3fd-200d-2708-fe0f", "1f9d1-1f3fe-200d-2708-fe0f", "1f9d1-1f3ff-200d-2708-fe0f" ] }, { n: ["man pilot", "male-pilot"], u: "1f468-200d-2708-fe0f", v: [ "1f468-1f3fb-200d-2708-fe0f", "1f468-1f3fc-200d-2708-fe0f", "1f468-1f3fd-200d-2708-fe0f", "1f468-1f3fe-200d-2708-fe0f", "1f468-1f3ff-200d-2708-fe0f" ] }, { n: ["woman pilot", "female-pilot"], u: "1f469-200d-2708-fe0f", v: [ "1f469-1f3fb-200d-2708-fe0f", "1f469-1f3fc-200d-2708-fe0f", "1f469-1f3fd-200d-2708-fe0f", "1f469-1f3fe-200d-2708-fe0f", "1f469-1f3ff-200d-2708-fe0f" ] }, { n: ["astronaut"], u: "1f9d1-200d-1f680", v: [ "1f9d1-1f3fb-200d-1f680", "1f9d1-1f3fc-200d-1f680", "1f9d1-1f3fd-200d-1f680", "1f9d1-1f3fe-200d-1f680", "1f9d1-1f3ff-200d-1f680" ] }, { n: ["man astronaut", "male-astronaut"], u: "1f468-200d-1f680", v: [ "1f468-1f3fb-200d-1f680", "1f468-1f3fc-200d-1f680", "1f468-1f3fd-200d-1f680", "1f468-1f3fe-200d-1f680", "1f468-1f3ff-200d-1f680" ] }, { n: ["woman astronaut", "female-astronaut"], u: "1f469-200d-1f680", v: [ "1f469-1f3fb-200d-1f680", "1f469-1f3fc-200d-1f680", "1f469-1f3fd-200d-1f680", "1f469-1f3fe-200d-1f680", "1f469-1f3ff-200d-1f680" ] }, { n: ["firefighter"], u: "1f9d1-200d-1f692", v: [ "1f9d1-1f3fb-200d-1f692", "1f9d1-1f3fc-200d-1f692", "1f9d1-1f3fd-200d-1f692", "1f9d1-1f3fe-200d-1f692", "1f9d1-1f3ff-200d-1f692" ] }, { n: ["man firefighter", "male-firefighter"], u: "1f468-200d-1f692", v: [ "1f468-1f3fb-200d-1f692", "1f468-1f3fc-200d-1f692", "1f468-1f3fd-200d-1f692", "1f468-1f3fe-200d-1f692", "1f468-1f3ff-200d-1f692" ] }, { n: ["woman firefighter", "female-firefighter"], u: "1f469-200d-1f692", v: [ "1f469-1f3fb-200d-1f692", "1f469-1f3fc-200d-1f692", "1f469-1f3fd-200d-1f692", "1f469-1f3fe-200d-1f692", "1f469-1f3ff-200d-1f692" ] }, { n: ["cop", "police officer"], u: "1f46e", v: [ "1f46e-1f3fb", "1f46e-1f3fc", "1f46e-1f3fd", "1f46e-1f3fe", "1f46e-1f3ff" ] }, { n: ["man police officer", "male-police-officer"], u: "1f46e-200d-2642-fe0f", v: [ "1f46e-1f3fb-200d-2642-fe0f", "1f46e-1f3fc-200d-2642-fe0f", "1f46e-1f3fd-200d-2642-fe0f", "1f46e-1f3fe-200d-2642-fe0f", "1f46e-1f3ff-200d-2642-fe0f" ] }, { n: ["woman police officer", "female-police-officer"], u: "1f46e-200d-2640-fe0f", v: [ "1f46e-1f3fb-200d-2640-fe0f", "1f46e-1f3fc-200d-2640-fe0f", "1f46e-1f3fd-200d-2640-fe0f", "1f46e-1f3fe-200d-2640-fe0f", "1f46e-1f3ff-200d-2640-fe0f" ] }, { n: ["detective", "sleuth or spy"], u: "1f575-fe0f", v: [ "1f575-1f3fb", "1f575-1f3fc", "1f575-1f3fd", "1f575-1f3fe", "1f575-1f3ff" ] }, { n: ["man detective", "male-detective"], u: "1f575-fe0f-200d-2642-fe0f", v: [ "1f575-1f3fb-200d-2642-fe0f", "1f575-1f3fc-200d-2642-fe0f", "1f575-1f3fd-200d-2642-fe0f", "1f575-1f3fe-200d-2642-fe0f", "1f575-1f3ff-200d-2642-fe0f" ] }, { n: ["woman detective", "female-detective"], u: "1f575-fe0f-200d-2640-fe0f", v: [ "1f575-1f3fb-200d-2640-fe0f", "1f575-1f3fc-200d-2640-fe0f", "1f575-1f3fd-200d-2640-fe0f", "1f575-1f3fe-200d-2640-fe0f", "1f575-1f3ff-200d-2640-fe0f" ] }, { n: ["guardsman"], u: "1f482", v: [ "1f482-1f3fb", "1f482-1f3fc", "1f482-1f3fd", "1f482-1f3fe", "1f482-1f3ff" ] }, { n: ["man guard", "male-guard"], u: "1f482-200d-2642-fe0f", v: [ "1f482-1f3fb-200d-2642-fe0f", "1f482-1f3fc-200d-2642-fe0f", "1f482-1f3fd-200d-2642-fe0f", "1f482-1f3fe-200d-2642-fe0f", "1f482-1f3ff-200d-2642-fe0f" ] }, { n: ["woman guard", "female-guard"], u: "1f482-200d-2640-fe0f", v: [ "1f482-1f3fb-200d-2640-fe0f", "1f482-1f3fc-200d-2640-fe0f", "1f482-1f3fd-200d-2640-fe0f", "1f482-1f3fe-200d-2640-fe0f", "1f482-1f3ff-200d-2640-fe0f" ] }, { n: ["ninja"], u: "1f977", v: [ "1f977-1f3fb", "1f977-1f3fc", "1f977-1f3fd", "1f977-1f3fe", "1f977-1f3ff" ] }, { n: ["construction worker"], u: "1f477", v: [ "1f477-1f3fb", "1f477-1f3fc", "1f477-1f3fd", "1f477-1f3fe", "1f477-1f3ff" ] }, { n: ["man construction worker", "male-construction-worker"], u: "1f477-200d-2642-fe0f", v: [ "1f477-1f3fb-200d-2642-fe0f", "1f477-1f3fc-200d-2642-fe0f", "1f477-1f3fd-200d-2642-fe0f", "1f477-1f3fe-200d-2642-fe0f", "1f477-1f3ff-200d-2642-fe0f" ] }, { n: ["woman construction worker", "female-construction-worker"], u: "1f477-200d-2640-fe0f", v: [ "1f477-1f3fb-200d-2640-fe0f", "1f477-1f3fc-200d-2640-fe0f", "1f477-1f3fd-200d-2640-fe0f", "1f477-1f3fe-200d-2640-fe0f", "1f477-1f3ff-200d-2640-fe0f" ] }, { n: ["person with crown"], u: "1fac5", v: [ "1fac5-1f3fb", "1fac5-1f3fc", "1fac5-1f3fd", "1fac5-1f3fe", "1fac5-1f3ff" ] }, { n: ["prince"], u: "1f934", v: [ "1f934-1f3fb", "1f934-1f3fc", "1f934-1f3fd", "1f934-1f3fe", "1f934-1f3ff" ] }, { n: ["princess"], u: "1f478", v: [ "1f478-1f3fb", "1f478-1f3fc", "1f478-1f3fd", "1f478-1f3fe", "1f478-1f3ff" ] }, { n: ["man with turban"], u: "1f473", v: [ "1f473-1f3fb", "1f473-1f3fc", "1f473-1f3fd", "1f473-1f3fe", "1f473-1f3ff" ] }, { n: ["man wearing turban", "man-wearing-turban"], u: "1f473-200d-2642-fe0f", v: [ "1f473-1f3fb-200d-2642-fe0f", "1f473-1f3fc-200d-2642-fe0f", "1f473-1f3fd-200d-2642-fe0f", "1f473-1f3fe-200d-2642-fe0f", "1f473-1f3ff-200d-2642-fe0f" ] }, { n: ["woman wearing turban", "woman-wearing-turban"], u: "1f473-200d-2640-fe0f", v: [ "1f473-1f3fb-200d-2640-fe0f", "1f473-1f3fc-200d-2640-fe0f", "1f473-1f3fd-200d-2640-fe0f", "1f473-1f3fe-200d-2640-fe0f", "1f473-1f3ff-200d-2640-fe0f" ] }, { n: ["man with gua pi mao"], u: "1f472", v: [ "1f472-1f3fb", "1f472-1f3fc", "1f472-1f3fd", "1f472-1f3fe", "1f472-1f3ff" ] }, { n: ["person with headscarf"], u: "1f9d5", v: [ "1f9d5-1f3fb", "1f9d5-1f3fc", "1f9d5-1f3fd", "1f9d5-1f3fe", "1f9d5-1f3ff" ] }, { n: ["man in tuxedo", "person in tuxedo"], u: "1f935", v: [ "1f935-1f3fb", "1f935-1f3fc", "1f935-1f3fd", "1f935-1f3fe", "1f935-1f3ff" ] }, { n: ["man in tuxedo"], u: "1f935-200d-2642-fe0f", v: [ "1f935-1f3fb-200d-2642-fe0f", "1f935-1f3fc-200d-2642-fe0f", "1f935-1f3fd-200d-2642-fe0f", "1f935-1f3fe-200d-2642-fe0f", "1f935-1f3ff-200d-2642-fe0f" ] }, { n: ["woman in tuxedo"], u: "1f935-200d-2640-fe0f", v: [ "1f935-1f3fb-200d-2640-fe0f", "1f935-1f3fc-200d-2640-fe0f", "1f935-1f3fd-200d-2640-fe0f", "1f935-1f3fe-200d-2640-fe0f", "1f935-1f3ff-200d-2640-fe0f" ] }, { n: ["bride with veil"], u: "1f470", v: [ "1f470-1f3fb", "1f470-1f3fc", "1f470-1f3fd", "1f470-1f3fe", "1f470-1f3ff" ] }, { n: ["man with veil"], u: "1f470-200d-2642-fe0f", v: [ "1f470-1f3fb-200d-2642-fe0f", "1f470-1f3fc-200d-2642-fe0f", "1f470-1f3fd-200d-2642-fe0f", "1f470-1f3fe-200d-2642-fe0f", "1f470-1f3ff-200d-2642-fe0f" ] }, { n: ["woman with veil"], u: "1f470-200d-2640-fe0f", v: [ "1f470-1f3fb-200d-2640-fe0f", "1f470-1f3fc-200d-2640-fe0f", "1f470-1f3fd-200d-2640-fe0f", "1f470-1f3fe-200d-2640-fe0f", "1f470-1f3ff-200d-2640-fe0f" ] }, { n: ["pregnant woman"], u: "1f930", v: [ "1f930-1f3fb", "1f930-1f3fc", "1f930-1f3fd", "1f930-1f3fe", "1f930-1f3ff" ] }, { n: ["pregnant man"], u: "1fac3", v: [ "1fac3-1f3fb", "1fac3-1f3fc", "1fac3-1f3fd", "1fac3-1f3fe", "1fac3-1f3ff" ] }, { n: ["pregnant person"], u: "1fac4", v: [ "1fac4-1f3fb", "1fac4-1f3fc", "1fac4-1f3fd", "1fac4-1f3fe", "1fac4-1f3ff" ] }, { n: ["breast-feeding"], u: "1f931", v: [ "1f931-1f3fb", "1f931-1f3fc", "1f931-1f3fd", "1f931-1f3fe", "1f931-1f3ff" ] }, { n: ["woman feeding baby"], u: "1f469-200d-1f37c", v: [ "1f469-1f3fb-200d-1f37c", "1f469-1f3fc-200d-1f37c", "1f469-1f3fd-200d-1f37c", "1f469-1f3fe-200d-1f37c", "1f469-1f3ff-200d-1f37c" ] }, { n: ["man feeding baby"], u: "1f468-200d-1f37c", v: [ "1f468-1f3fb-200d-1f37c", "1f468-1f3fc-200d-1f37c", "1f468-1f3fd-200d-1f37c", "1f468-1f3fe-200d-1f37c", "1f468-1f3ff-200d-1f37c" ] }, { n: ["person feeding baby"], u: "1f9d1-200d-1f37c", v: [ "1f9d1-1f3fb-200d-1f37c", "1f9d1-1f3fc-200d-1f37c", "1f9d1-1f3fd-200d-1f37c", "1f9d1-1f3fe-200d-1f37c", "1f9d1-1f3ff-200d-1f37c" ] }, { n: ["angel", "baby angel"], u: "1f47c", v: [ "1f47c-1f3fb", "1f47c-1f3fc", "1f47c-1f3fd", "1f47c-1f3fe", "1f47c-1f3ff" ] }, { n: ["santa", "father christmas"], u: "1f385", v: [ "1f385-1f3fb", "1f385-1f3fc", "1f385-1f3fd", "1f385-1f3fe", "1f385-1f3ff" ] }, { n: ["mrs claus", "mother christmas"], u: "1f936", v: [ "1f936-1f3fb", "1f936-1f3fc", "1f936-1f3fd", "1f936-1f3fe", "1f936-1f3ff" ] }, { n: ["mx claus"], u: "1f9d1-200d-1f384", v: [ "1f9d1-1f3fb-200d-1f384", "1f9d1-1f3fc-200d-1f384", "1f9d1-1f3fd-200d-1f384", "1f9d1-1f3fe-200d-1f384", "1f9d1-1f3ff-200d-1f384" ] }, { n: ["superhero"], u: "1f9b8", v: [ "1f9b8-1f3fb", "1f9b8-1f3fc", "1f9b8-1f3fd", "1f9b8-1f3fe", "1f9b8-1f3ff" ] }, { n: ["man superhero", "male superhero"], u: "1f9b8-200d-2642-fe0f", v: [ "1f9b8-1f3fb-200d-2642-fe0f", "1f9b8-1f3fc-200d-2642-fe0f", "1f9b8-1f3fd-200d-2642-fe0f", "1f9b8-1f3fe-200d-2642-fe0f", "1f9b8-1f3ff-200d-2642-fe0f" ] }, { n: ["woman superhero", "female superhero"], u: "1f9b8-200d-2640-fe0f", v: [ "1f9b8-1f3fb-200d-2640-fe0f", "1f9b8-1f3fc-200d-2640-fe0f", "1f9b8-1f3fd-200d-2640-fe0f", "1f9b8-1f3fe-200d-2640-fe0f", "1f9b8-1f3ff-200d-2640-fe0f" ] }, { n: ["supervillain"], u: "1f9b9", v: [ "1f9b9-1f3fb", "1f9b9-1f3fc", "1f9b9-1f3fd", "1f9b9-1f3fe", "1f9b9-1f3ff" ] }, { n: ["man supervillain", "male supervillain"], u: "1f9b9-200d-2642-fe0f", v: [ "1f9b9-1f3fb-200d-2642-fe0f", "1f9b9-1f3fc-200d-2642-fe0f", "1f9b9-1f3fd-200d-2642-fe0f", "1f9b9-1f3fe-200d-2642-fe0f", "1f9b9-1f3ff-200d-2642-fe0f" ] }, { n: ["woman supervillain", "female supervillain"], u: "1f9b9-200d-2640-fe0f", v: [ "1f9b9-1f3fb-200d-2640-fe0f", "1f9b9-1f3fc-200d-2640-fe0f", "1f9b9-1f3fd-200d-2640-fe0f", "1f9b9-1f3fe-200d-2640-fe0f", "1f9b9-1f3ff-200d-2640-fe0f" ] }, { n: ["mage"], u: "1f9d9", v: [ "1f9d9-1f3fb", "1f9d9-1f3fc", "1f9d9-1f3fd", "1f9d9-1f3fe", "1f9d9-1f3ff" ] }, { n: ["man mage", "male mage"], u: "1f9d9-200d-2642-fe0f", v: [ "1f9d9-1f3fb-200d-2642-fe0f", "1f9d9-1f3fc-200d-2642-fe0f", "1f9d9-1f3fd-200d-2642-fe0f", "1f9d9-1f3fe-200d-2642-fe0f", "1f9d9-1f3ff-200d-2642-fe0f" ] }, { n: ["woman mage", "female mage"], u: "1f9d9-200d-2640-fe0f", v: [ "1f9d9-1f3fb-200d-2640-fe0f", "1f9d9-1f3fc-200d-2640-fe0f", "1f9d9-1f3fd-200d-2640-fe0f", "1f9d9-1f3fe-200d-2640-fe0f", "1f9d9-1f3ff-200d-2640-fe0f" ] }, { n: ["fairy"], u: "1f9da", v: [ "1f9da-1f3fb", "1f9da-1f3fc", "1f9da-1f3fd", "1f9da-1f3fe", "1f9da-1f3ff" ] }, { n: ["man fairy", "male fairy"], u: "1f9da-200d-2642-fe0f", v: [ "1f9da-1f3fb-200d-2642-fe0f", "1f9da-1f3fc-200d-2642-fe0f", "1f9da-1f3fd-200d-2642-fe0f", "1f9da-1f3fe-200d-2642-fe0f", "1f9da-1f3ff-200d-2642-fe0f" ] }, { n: ["woman fairy", "female fairy"], u: "1f9da-200d-2640-fe0f", v: [ "1f9da-1f3fb-200d-2640-fe0f", "1f9da-1f3fc-200d-2640-fe0f", "1f9da-1f3fd-200d-2640-fe0f", "1f9da-1f3fe-200d-2640-fe0f", "1f9da-1f3ff-200d-2640-fe0f" ] }, { n: ["vampire"], u: "1f9db", v: [ "1f9db-1f3fb", "1f9db-1f3fc", "1f9db-1f3fd", "1f9db-1f3fe", "1f9db-1f3ff" ] }, { n: ["man vampire", "male vampire"], u: "1f9db-200d-2642-fe0f", v: [ "1f9db-1f3fb-200d-2642-fe0f", "1f9db-1f3fc-200d-2642-fe0f", "1f9db-1f3fd-200d-2642-fe0f", "1f9db-1f3fe-200d-2642-fe0f", "1f9db-1f3ff-200d-2642-fe0f" ] }, { n: ["woman vampire", "female vampire"], u: "1f9db-200d-2640-fe0f", v: [ "1f9db-1f3fb-200d-2640-fe0f", "1f9db-1f3fc-200d-2640-fe0f", "1f9db-1f3fd-200d-2640-fe0f", "1f9db-1f3fe-200d-2640-fe0f", "1f9db-1f3ff-200d-2640-fe0f" ] }, { n: ["merperson"], u: "1f9dc", v: [ "1f9dc-1f3fb", "1f9dc-1f3fc", "1f9dc-1f3fd", "1f9dc-1f3fe", "1f9dc-1f3ff" ] }, { n: ["merman"], u: "1f9dc-200d-2642-fe0f", v: [ "1f9dc-1f3fb-200d-2642-fe0f", "1f9dc-1f3fc-200d-2642-fe0f", "1f9dc-1f3fd-200d-2642-fe0f", "1f9dc-1f3fe-200d-2642-fe0f", "1f9dc-1f3ff-200d-2642-fe0f" ] }, { n: ["mermaid"], u: "1f9dc-200d-2640-fe0f", v: [ "1f9dc-1f3fb-200d-2640-fe0f", "1f9dc-1f3fc-200d-2640-fe0f", "1f9dc-1f3fd-200d-2640-fe0f", "1f9dc-1f3fe-200d-2640-fe0f", "1f9dc-1f3ff-200d-2640-fe0f" ] }, { n: ["elf"], u: "1f9dd", v: [ "1f9dd-1f3fb", "1f9dd-1f3fc", "1f9dd-1f3fd", "1f9dd-1f3fe", "1f9dd-1f3ff" ] }, { n: ["man elf", "male elf"], u: "1f9dd-200d-2642-fe0f", v: [ "1f9dd-1f3fb-200d-2642-fe0f", "1f9dd-1f3fc-200d-2642-fe0f", "1f9dd-1f3fd-200d-2642-fe0f", "1f9dd-1f3fe-200d-2642-fe0f", "1f9dd-1f3ff-200d-2642-fe0f" ] }, { n: ["woman elf", "female elf"], u: "1f9dd-200d-2640-fe0f", v: [ "1f9dd-1f3fb-200d-2640-fe0f", "1f9dd-1f3fc-200d-2640-fe0f", "1f9dd-1f3fd-200d-2640-fe0f", "1f9dd-1f3fe-200d-2640-fe0f", "1f9dd-1f3ff-200d-2640-fe0f" ] }, { n: ["genie"], u: "1f9de" }, { n: ["man genie", "male genie"], u: "1f9de-200d-2642-fe0f" }, { n: ["woman genie", "female genie"], u: "1f9de-200d-2640-fe0f" }, { n: ["zombie"], u: "1f9df" }, { n: ["man zombie", "male zombie"], u: "1f9df-200d-2642-fe0f" }, { n: ["woman zombie", "female zombie"], u: "1f9df-200d-2640-fe0f" }, { n: ["troll"], u: "1f9cc" }, { n: ["massage", "face massage"], u: "1f486", v: [ "1f486-1f3fb", "1f486-1f3fc", "1f486-1f3fd", "1f486-1f3fe", "1f486-1f3ff" ] }, { n: ["man getting massage", "man-getting-massage"], u: "1f486-200d-2642-fe0f", v: [ "1f486-1f3fb-200d-2642-fe0f", "1f486-1f3fc-200d-2642-fe0f", "1f486-1f3fd-200d-2642-fe0f", "1f486-1f3fe-200d-2642-fe0f", "1f486-1f3ff-200d-2642-fe0f" ] }, { n: ["woman getting massage", "woman-getting-massage"], u: "1f486-200d-2640-fe0f", v: [ "1f486-1f3fb-200d-2640-fe0f", "1f486-1f3fc-200d-2640-fe0f", "1f486-1f3fd-200d-2640-fe0f", "1f486-1f3fe-200d-2640-fe0f", "1f486-1f3ff-200d-2640-fe0f" ] }, { n: ["haircut"], u: "1f487", v: [ "1f487-1f3fb", "1f487-1f3fc", "1f487-1f3fd", "1f487-1f3fe", "1f487-1f3ff" ] }, { n: ["man getting haircut", "man-getting-haircut"], u: "1f487-200d-2642-fe0f", v: [ "1f487-1f3fb-200d-2642-fe0f", "1f487-1f3fc-200d-2642-fe0f", "1f487-1f3fd-200d-2642-fe0f", "1f487-1f3fe-200d-2642-fe0f", "1f487-1f3ff-200d-2642-fe0f" ] }, { n: ["woman getting haircut", "woman-getting-haircut"], u: "1f487-200d-2640-fe0f", v: [ "1f487-1f3fb-200d-2640-fe0f", "1f487-1f3fc-200d-2640-fe0f", "1f487-1f3fd-200d-2640-fe0f", "1f487-1f3fe-200d-2640-fe0f", "1f487-1f3ff-200d-2640-fe0f" ] }, { n: ["walking", "pedestrian"], u: "1f6b6", v: [ "1f6b6-1f3fb", "1f6b6-1f3fc", "1f6b6-1f3fd", "1f6b6-1f3fe", "1f6b6-1f3ff" ] }, { n: ["man walking", "man-walking"], u: "1f6b6-200d-2642-fe0f", v: [ "1f6b6-1f3fb-200d-2642-fe0f", "1f6b6-1f3fc-200d-2642-fe0f", "1f6b6-1f3fd-200d-2642-fe0f", "1f6b6-1f3fe-200d-2642-fe0f", "1f6b6-1f3ff-200d-2642-fe0f" ] }, { n: ["woman walking", "woman-walking"], u: "1f6b6-200d-2640-fe0f", v: [ "1f6b6-1f3fb-200d-2640-fe0f", "1f6b6-1f3fc-200d-2640-fe0f", "1f6b6-1f3fd-200d-2640-fe0f", "1f6b6-1f3fe-200d-2640-fe0f", "1f6b6-1f3ff-200d-2640-fe0f" ] }, { n: ["standing person"], u: "1f9cd", v: [ "1f9cd-1f3fb", "1f9cd-1f3fc", "1f9cd-1f3fd", "1f9cd-1f3fe", "1f9cd-1f3ff" ] }, { n: ["man standing"], u: "1f9cd-200d-2642-fe0f", v: [ "1f9cd-1f3fb-200d-2642-fe0f", "1f9cd-1f3fc-200d-2642-fe0f", "1f9cd-1f3fd-200d-2642-fe0f", "1f9cd-1f3fe-200d-2642-fe0f", "1f9cd-1f3ff-200d-2642-fe0f" ] }, { n: ["woman standing"], u: "1f9cd-200d-2640-fe0f", v: [ "1f9cd-1f3fb-200d-2640-fe0f", "1f9cd-1f3fc-200d-2640-fe0f", "1f9cd-1f3fd-200d-2640-fe0f", "1f9cd-1f3fe-200d-2640-fe0f", "1f9cd-1f3ff-200d-2640-fe0f" ] }, { n: ["kneeling person"], u: "1f9ce", v: [ "1f9ce-1f3fb", "1f9ce-1f3fc", "1f9ce-1f3fd", "1f9ce-1f3fe", "1f9ce-1f3ff" ] }, { n: ["man kneeling"], u: "1f9ce-200d-2642-fe0f", v: [ "1f9ce-1f3fb-200d-2642-fe0f", "1f9ce-1f3fc-200d-2642-fe0f", "1f9ce-1f3fd-200d-2642-fe0f", "1f9ce-1f3fe-200d-2642-fe0f", "1f9ce-1f3ff-200d-2642-fe0f" ] }, { n: ["woman kneeling"], u: "1f9ce-200d-2640-fe0f", v: [ "1f9ce-1f3fb-200d-2640-fe0f", "1f9ce-1f3fc-200d-2640-fe0f", "1f9ce-1f3fd-200d-2640-fe0f", "1f9ce-1f3fe-200d-2640-fe0f", "1f9ce-1f3ff-200d-2640-fe0f" ] }, { n: ["person with white cane", "person with probing cane"], u: "1f9d1-200d-1f9af", v: [ "1f9d1-1f3fb-200d-1f9af", "1f9d1-1f3fc-200d-1f9af", "1f9d1-1f3fd-200d-1f9af", "1f9d1-1f3fe-200d-1f9af", "1f9d1-1f3ff-200d-1f9af" ] }, { n: ["man with white cane", "man with probing cane"], u: "1f468-200d-1f9af", v: [ "1f468-1f3fb-200d-1f9af", "1f468-1f3fc-200d-1f9af", "1f468-1f3fd-200d-1f9af", "1f468-1f3fe-200d-1f9af", "1f468-1f3ff-200d-1f9af" ] }, { n: ["woman with white cane", "woman with probing cane"], u: "1f469-200d-1f9af", v: [ "1f469-1f3fb-200d-1f9af", "1f469-1f3fc-200d-1f9af", "1f469-1f3fd-200d-1f9af", "1f469-1f3fe-200d-1f9af", "1f469-1f3ff-200d-1f9af" ] }, { n: ["person in motorized wheelchair"], u: "1f9d1-200d-1f9bc", v: [ "1f9d1-1f3fb-200d-1f9bc", "1f9d1-1f3fc-200d-1f9bc", "1f9d1-1f3fd-200d-1f9bc", "1f9d1-1f3fe-200d-1f9bc", "1f9d1-1f3ff-200d-1f9bc" ] }, { n: ["man in motorized wheelchair"], u: "1f468-200d-1f9bc", v: [ "1f468-1f3fb-200d-1f9bc", "1f468-1f3fc-200d-1f9bc", "1f468-1f3fd-200d-1f9bc", "1f468-1f3fe-200d-1f9bc", "1f468-1f3ff-200d-1f9bc" ] }, { n: ["woman in motorized wheelchair"], u: "1f469-200d-1f9bc", v: [ "1f469-1f3fb-200d-1f9bc", "1f469-1f3fc-200d-1f9bc", "1f469-1f3fd-200d-1f9bc", "1f469-1f3fe-200d-1f9bc", "1f469-1f3ff-200d-1f9bc" ] }, { n: ["person in manual wheelchair"], u: "1f9d1-200d-1f9bd", v: [ "1f9d1-1f3fb-200d-1f9bd", "1f9d1-1f3fc-200d-1f9bd", "1f9d1-1f3fd-200d-1f9bd", "1f9d1-1f3fe-200d-1f9bd", "1f9d1-1f3ff-200d-1f9bd" ] }, { n: ["man in manual wheelchair"], u: "1f468-200d-1f9bd", v: [ "1f468-1f3fb-200d-1f9bd", "1f468-1f3fc-200d-1f9bd", "1f468-1f3fd-200d-1f9bd", "1f468-1f3fe-200d-1f9bd", "1f468-1f3ff-200d-1f9bd" ] }, { n: ["woman in manual wheelchair"], u: "1f469-200d-1f9bd", v: [ "1f469-1f3fb-200d-1f9bd", "1f469-1f3fc-200d-1f9bd", "1f469-1f3fd-200d-1f9bd", "1f469-1f3fe-200d-1f9bd", "1f469-1f3ff-200d-1f9bd" ] }, { n: ["runner", "running"], u: "1f3c3", v: [ "1f3c3-1f3fb", "1f3c3-1f3fc", "1f3c3-1f3fd", "1f3c3-1f3fe", "1f3c3-1f3ff" ] }, { n: ["man running", "man-running"], u: "1f3c3-200d-2642-fe0f", v: [ "1f3c3-1f3fb-200d-2642-fe0f", "1f3c3-1f3fc-200d-2642-fe0f", "1f3c3-1f3fd-200d-2642-fe0f", "1f3c3-1f3fe-200d-2642-fe0f", "1f3c3-1f3ff-200d-2642-fe0f" ] }, { n: ["woman running", "woman-running"], u: "1f3c3-200d-2640-fe0f", v: [ "1f3c3-1f3fb-200d-2640-fe0f", "1f3c3-1f3fc-200d-2640-fe0f", "1f3c3-1f3fd-200d-2640-fe0f", "1f3c3-1f3fe-200d-2640-fe0f", "1f3c3-1f3ff-200d-2640-fe0f" ] }, { n: ["dancer"], u: "1f483", v: [ "1f483-1f3fb", "1f483-1f3fc", "1f483-1f3fd", "1f483-1f3fe", "1f483-1f3ff" ] }, { n: ["man dancing"], u: "1f57a", v: [ "1f57a-1f3fb", "1f57a-1f3fc", "1f57a-1f3fd", "1f57a-1f3fe", "1f57a-1f3ff" ] }, { n: ["person in suit levitating", "man in business suit levitating"], u: "1f574-fe0f", v: [ "1f574-1f3fb", "1f574-1f3fc", "1f574-1f3fd", "1f574-1f3fe", "1f574-1f3ff" ] }, { n: ["dancers", "woman with bunny ears"], u: "1f46f" }, { n: [ "men with bunny ears", "men-with-bunny-ears-partying", "man-with-bunny-ears-partying" ], u: "1f46f-200d-2642-fe0f" }, { n: [ "women with bunny ears", "women-with-bunny-ears-partying", "woman-with-bunny-ears-partying" ], u: "1f46f-200d-2640-fe0f" }, { n: ["person in steamy room"], u: "1f9d6", v: [ "1f9d6-1f3fb", "1f9d6-1f3fc", "1f9d6-1f3fd", "1f9d6-1f3fe", "1f9d6-1f3ff" ] }, { n: ["man in steamy room"], u: "1f9d6-200d-2642-fe0f", v: [ "1f9d6-1f3fb-200d-2642-fe0f", "1f9d6-1f3fc-200d-2642-fe0f", "1f9d6-1f3fd-200d-2642-fe0f", "1f9d6-1f3fe-200d-2642-fe0f", "1f9d6-1f3ff-200d-2642-fe0f" ] }, { n: ["woman in steamy room"], u: "1f9d6-200d-2640-fe0f", v: [ "1f9d6-1f3fb-200d-2640-fe0f", "1f9d6-1f3fc-200d-2640-fe0f", "1f9d6-1f3fd-200d-2640-fe0f", "1f9d6-1f3fe-200d-2640-fe0f", "1f9d6-1f3ff-200d-2640-fe0f" ] }, { n: ["person climbing"], u: "1f9d7", v: [ "1f9d7-1f3fb", "1f9d7-1f3fc", "1f9d7-1f3fd", "1f9d7-1f3fe", "1f9d7-1f3ff" ] }, { n: ["man climbing"], u: "1f9d7-200d-2642-fe0f", v: [ "1f9d7-1f3fb-200d-2642-fe0f", "1f9d7-1f3fc-200d-2642-fe0f", "1f9d7-1f3fd-200d-2642-fe0f", "1f9d7-1f3fe-200d-2642-fe0f", "1f9d7-1f3ff-200d-2642-fe0f" ] }, { n: ["woman climbing"], u: "1f9d7-200d-2640-fe0f", v: [ "1f9d7-1f3fb-200d-2640-fe0f", "1f9d7-1f3fc-200d-2640-fe0f", "1f9d7-1f3fd-200d-2640-fe0f", "1f9d7-1f3fe-200d-2640-fe0f", "1f9d7-1f3ff-200d-2640-fe0f" ] }, { n: ["fencer"], u: "1f93a" }, { n: ["horse racing"], u: "1f3c7", v: [ "1f3c7-1f3fb", "1f3c7-1f3fc", "1f3c7-1f3fd", "1f3c7-1f3fe", "1f3c7-1f3ff" ] }, { n: ["skier"], u: "26f7-fe0f" }, { n: ["snowboarder"], u: "1f3c2", v: [ "1f3c2-1f3fb", "1f3c2-1f3fc", "1f3c2-1f3fd", "1f3c2-1f3fe", "1f3c2-1f3ff" ] }, { n: ["golfer", "person golfing"], u: "1f3cc-fe0f", v: [ "1f3cc-1f3fb", "1f3cc-1f3fc", "1f3cc-1f3fd", "1f3cc-1f3fe", "1f3cc-1f3ff" ] }, { n: ["man golfing", "man-golfing"], u: "1f3cc-fe0f-200d-2642-fe0f", v: [ "1f3cc-1f3fb-200d-2642-fe0f", "1f3cc-1f3fc-200d-2642-fe0f", "1f3cc-1f3fd-200d-2642-fe0f", "1f3cc-1f3fe-200d-2642-fe0f", "1f3cc-1f3ff-200d-2642-fe0f" ] }, { n: ["woman golfing", "woman-golfing"], u: "1f3cc-fe0f-200d-2640-fe0f", v: [ "1f3cc-1f3fb-200d-2640-fe0f", "1f3cc-1f3fc-200d-2640-fe0f", "1f3cc-1f3fd-200d-2640-fe0f", "1f3cc-1f3fe-200d-2640-fe0f", "1f3cc-1f3ff-200d-2640-fe0f" ] }, { n: ["surfer"], u: "1f3c4", v: [ "1f3c4-1f3fb", "1f3c4-1f3fc", "1f3c4-1f3fd", "1f3c4-1f3fe", "1f3c4-1f3ff" ] }, { n: ["man surfing", "man-surfing"], u: "1f3c4-200d-2642-fe0f", v: [ "1f3c4-1f3fb-200d-2642-fe0f", "1f3c4-1f3fc-200d-2642-fe0f", "1f3c4-1f3fd-200d-2642-fe0f", "1f3c4-1f3fe-200d-2642-fe0f", "1f3c4-1f3ff-200d-2642-fe0f" ] }, { n: ["woman surfing", "woman-surfing"], u: "1f3c4-200d-2640-fe0f", v: [ "1f3c4-1f3fb-200d-2640-fe0f", "1f3c4-1f3fc-200d-2640-fe0f", "1f3c4-1f3fd-200d-2640-fe0f", "1f3c4-1f3fe-200d-2640-fe0f", "1f3c4-1f3ff-200d-2640-fe0f" ] }, { n: ["rowboat"], u: "1f6a3", v: [ "1f6a3-1f3fb", "1f6a3-1f3fc", "1f6a3-1f3fd", "1f6a3-1f3fe", "1f6a3-1f3ff" ] }, { n: ["man rowing boat", "man-rowing-boat"], u: "1f6a3-200d-2642-fe0f", v: [ "1f6a3-1f3fb-200d-2642-fe0f", "1f6a3-1f3fc-200d-2642-fe0f", "1f6a3-1f3fd-200d-2642-fe0f", "1f6a3-1f3fe-200d-2642-fe0f", "1f6a3-1f3ff-200d-2642-fe0f" ] }, { n: ["woman rowing boat", "woman-rowing-boat"], u: "1f6a3-200d-2640-fe0f", v: [ "1f6a3-1f3fb-200d-2640-fe0f", "1f6a3-1f3fc-200d-2640-fe0f", "1f6a3-1f3fd-200d-2640-fe0f", "1f6a3-1f3fe-200d-2640-fe0f", "1f6a3-1f3ff-200d-2640-fe0f" ] }, { n: ["swimmer"], u: "1f3ca", v: [ "1f3ca-1f3fb", "1f3ca-1f3fc", "1f3ca-1f3fd", "1f3ca-1f3fe", "1f3ca-1f3ff" ] }, { n: ["man swimming", "man-swimming"], u: "1f3ca-200d-2642-fe0f", v: [ "1f3ca-1f3fb-200d-2642-fe0f", "1f3ca-1f3fc-200d-2642-fe0f", "1f3ca-1f3fd-200d-2642-fe0f", "1f3ca-1f3fe-200d-2642-fe0f", "1f3ca-1f3ff-200d-2642-fe0f" ] }, { n: ["woman swimming", "woman-swimming"], u: "1f3ca-200d-2640-fe0f", v: [ "1f3ca-1f3fb-200d-2640-fe0f", "1f3ca-1f3fc-200d-2640-fe0f", "1f3ca-1f3fd-200d-2640-fe0f", "1f3ca-1f3fe-200d-2640-fe0f", "1f3ca-1f3ff-200d-2640-fe0f" ] }, { n: ["person with ball", "person bouncing ball"], u: "26f9-fe0f", v: ["26f9-1f3fb", "26f9-1f3fc", "26f9-1f3fd", "26f9-1f3fe", "26f9-1f3ff"] }, { n: ["man bouncing ball", "man-bouncing-ball"], u: "26f9-fe0f-200d-2642-fe0f", v: [ "26f9-1f3fb-200d-2642-fe0f", "26f9-1f3fc-200d-2642-fe0f", "26f9-1f3fd-200d-2642-fe0f", "26f9-1f3fe-200d-2642-fe0f", "26f9-1f3ff-200d-2642-fe0f" ] }, { n: ["woman bouncing ball", "woman-bouncing-ball"], u: "26f9-fe0f-200d-2640-fe0f", v: [ "26f9-1f3fb-200d-2640-fe0f", "26f9-1f3fc-200d-2640-fe0f", "26f9-1f3fd-200d-2640-fe0f", "26f9-1f3fe-200d-2640-fe0f", "26f9-1f3ff-200d-2640-fe0f" ] }, { n: ["weight lifter", "person lifting weights"], u: "1f3cb-fe0f", v: [ "1f3cb-1f3fb", "1f3cb-1f3fc", "1f3cb-1f3fd", "1f3cb-1f3fe", "1f3cb-1f3ff" ] }, { n: ["man lifting weights", "man-lifting-weights"], u: "1f3cb-fe0f-200d-2642-fe0f", v: [ "1f3cb-1f3fb-200d-2642-fe0f", "1f3cb-1f3fc-200d-2642-fe0f", "1f3cb-1f3fd-200d-2642-fe0f", "1f3cb-1f3fe-200d-2642-fe0f", "1f3cb-1f3ff-200d-2642-fe0f" ] }, { n: ["woman lifting weights", "woman-lifting-weights"], u: "1f3cb-fe0f-200d-2640-fe0f", v: [ "1f3cb-1f3fb-200d-2640-fe0f", "1f3cb-1f3fc-200d-2640-fe0f", "1f3cb-1f3fd-200d-2640-fe0f", "1f3cb-1f3fe-200d-2640-fe0f", "1f3cb-1f3ff-200d-2640-fe0f" ] }, { n: ["bicyclist"], u: "1f6b4", v: [ "1f6b4-1f3fb", "1f6b4-1f3fc", "1f6b4-1f3fd", "1f6b4-1f3fe", "1f6b4-1f3ff" ] }, { n: ["man biking", "man-biking"], u: "1f6b4-200d-2642-fe0f", v: [ "1f6b4-1f3fb-200d-2642-fe0f", "1f6b4-1f3fc-200d-2642-fe0f", "1f6b4-1f3fd-200d-2642-fe0f", "1f6b4-1f3fe-200d-2642-fe0f", "1f6b4-1f3ff-200d-2642-fe0f" ] }, { n: ["woman biking", "woman-biking"], u: "1f6b4-200d-2640-fe0f", v: [ "1f6b4-1f3fb-200d-2640-fe0f", "1f6b4-1f3fc-200d-2640-fe0f", "1f6b4-1f3fd-200d-2640-fe0f", "1f6b4-1f3fe-200d-2640-fe0f", "1f6b4-1f3ff-200d-2640-fe0f" ] }, { n: ["mountain bicyclist"], u: "1f6b5", v: [ "1f6b5-1f3fb", "1f6b5-1f3fc", "1f6b5-1f3fd", "1f6b5-1f3fe", "1f6b5-1f3ff" ] }, { n: ["man mountain biking", "man-mountain-biking"], u: "1f6b5-200d-2642-fe0f", v: [ "1f6b5-1f3fb-200d-2642-fe0f", "1f6b5-1f3fc-200d-2642-fe0f", "1f6b5-1f3fd-200d-2642-fe0f", "1f6b5-1f3fe-200d-2642-fe0f", "1f6b5-1f3ff-200d-2642-fe0f" ] }, { n: ["woman mountain biking", "woman-mountain-biking"], u: "1f6b5-200d-2640-fe0f", v: [ "1f6b5-1f3fb-200d-2640-fe0f", "1f6b5-1f3fc-200d-2640-fe0f", "1f6b5-1f3fd-200d-2640-fe0f", "1f6b5-1f3fe-200d-2640-fe0f", "1f6b5-1f3ff-200d-2640-fe0f" ] }, { n: ["person doing cartwheel"], u: "1f938", v: [ "1f938-1f3fb", "1f938-1f3fc", "1f938-1f3fd", "1f938-1f3fe", "1f938-1f3ff" ] }, { n: ["man cartwheeling", "man-cartwheeling"], u: "1f938-200d-2642-fe0f", v: [ "1f938-1f3fb-200d-2642-fe0f", "1f938-1f3fc-200d-2642-fe0f", "1f938-1f3fd-200d-2642-fe0f", "1f938-1f3fe-200d-2642-fe0f", "1f938-1f3ff-200d-2642-fe0f" ] }, { n: ["woman cartwheeling", "woman-cartwheeling"], u: "1f938-200d-2640-fe0f", v: [ "1f938-1f3fb-200d-2640-fe0f", "1f938-1f3fc-200d-2640-fe0f", "1f938-1f3fd-200d-2640-fe0f", "1f938-1f3fe-200d-2640-fe0f", "1f938-1f3ff-200d-2640-fe0f" ] }, { n: ["wrestlers"], u: "1f93c" }, { n: ["men wrestling", "man-wrestling"], u: "1f93c-200d-2642-fe0f" }, { n: ["women wrestling", "woman-wrestling"], u: "1f93c-200d-2640-fe0f" }, { n: ["water polo"], u: "1f93d", v: [ "1f93d-1f3fb", "1f93d-1f3fc", "1f93d-1f3fd", "1f93d-1f3fe", "1f93d-1f3ff" ] }, { n: ["man playing water polo", "man-playing-water-polo"], u: "1f93d-200d-2642-fe0f", v: [ "1f93d-1f3fb-200d-2642-fe0f", "1f93d-1f3fc-200d-2642-fe0f", "1f93d-1f3fd-200d-2642-fe0f", "1f93d-1f3fe-200d-2642-fe0f", "1f93d-1f3ff-200d-2642-fe0f" ] }, { n: ["woman playing water polo", "woman-playing-water-polo"], u: "1f93d-200d-2640-fe0f", v: [ "1f93d-1f3fb-200d-2640-fe0f", "1f93d-1f3fc-200d-2640-fe0f", "1f93d-1f3fd-200d-2640-fe0f", "1f93d-1f3fe-200d-2640-fe0f", "1f93d-1f3ff-200d-2640-fe0f" ] }, { n: ["handball"], u: "1f93e", v: [ "1f93e-1f3fb", "1f93e-1f3fc", "1f93e-1f3fd", "1f93e-1f3fe", "1f93e-1f3ff" ] }, { n: ["man playing handball", "man-playing-handball"], u: "1f93e-200d-2642-fe0f", v: [ "1f93e-1f3fb-200d-2642-fe0f", "1f93e-1f3fc-200d-2642-fe0f", "1f93e-1f3fd-200d-2642-fe0f", "1f93e-1f3fe-200d-2642-fe0f", "1f93e-1f3ff-200d-2642-fe0f" ] }, { n: ["woman playing handball", "woman-playing-handball"], u: "1f93e-200d-2640-fe0f", v: [ "1f93e-1f3fb-200d-2640-fe0f", "1f93e-1f3fc-200d-2640-fe0f", "1f93e-1f3fd-200d-2640-fe0f", "1f93e-1f3fe-200d-2640-fe0f", "1f93e-1f3ff-200d-2640-fe0f" ] }, { n: ["juggling"], u: "1f939", v: [ "1f939-1f3fb", "1f939-1f3fc", "1f939-1f3fd", "1f939-1f3fe", "1f939-1f3ff" ] }, { n: ["man juggling", "man-juggling"], u: "1f939-200d-2642-fe0f", v: [ "1f939-1f3fb-200d-2642-fe0f", "1f939-1f3fc-200d-2642-fe0f", "1f939-1f3fd-200d-2642-fe0f", "1f939-1f3fe-200d-2642-fe0f", "1f939-1f3ff-200d-2642-fe0f" ] }, { n: ["woman juggling", "woman-juggling"], u: "1f939-200d-2640-fe0f", v: [ "1f939-1f3fb-200d-2640-fe0f", "1f939-1f3fc-200d-2640-fe0f", "1f939-1f3fd-200d-2640-fe0f", "1f939-1f3fe-200d-2640-fe0f", "1f939-1f3ff-200d-2640-fe0f" ] }, { n: ["person in lotus position"], u: "1f9d8", v: [ "1f9d8-1f3fb", "1f9d8-1f3fc", "1f9d8-1f3fd", "1f9d8-1f3fe", "1f9d8-1f3ff" ] }, { n: ["man in lotus position"], u: "1f9d8-200d-2642-fe0f", v: [ "1f9d8-1f3fb-200d-2642-fe0f", "1f9d8-1f3fc-200d-2642-fe0f", "1f9d8-1f3fd-200d-2642-fe0f", "1f9d8-1f3fe-200d-2642-fe0f", "1f9d8-1f3ff-200d-2642-fe0f" ] }, { n: ["woman in lotus position"], u: "1f9d8-200d-2640-fe0f", v: [ "1f9d8-1f3fb-200d-2640-fe0f", "1f9d8-1f3fc-200d-2640-fe0f", "1f9d8-1f3fd-200d-2640-fe0f", "1f9d8-1f3fe-200d-2640-fe0f", "1f9d8-1f3ff-200d-2640-fe0f" ] }, { n: ["bath"], u: "1f6c0", v: [ "1f6c0-1f3fb", "1f6c0-1f3fc", "1f6c0-1f3fd", "1f6c0-1f3fe", "1f6c0-1f3ff" ] }, { n: ["sleeping accommodation"], u: "1f6cc", v: [ "1f6cc-1f3fb", "1f6cc-1f3fc", "1f6cc-1f3fd", "1f6cc-1f3fe", "1f6cc-1f3ff" ] }, { n: ["people holding hands"], u: "1f9d1-200d-1f91d-200d-1f9d1", v: [ "1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb", "1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc", "1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd", "1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe", "1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff", "1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb", "1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc", "1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd", "1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe", "1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff", "1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb", "1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc", "1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd", "1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe", "1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff", "1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb", "1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc", "1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd", "1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe", "1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff", "1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb", "1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc", "1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd", "1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe", "1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff" ] }, { n: ["women holding hands", "two women holding hands"], u: "1f46d", v: [ "1f46d-1f3fb", "1f46d-1f3fc", "1f46d-1f3fd", "1f46d-1f3fe", "1f46d-1f3ff", "1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc", "1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd", "1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe", "1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff", "1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb", "1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd", "1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe", "1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff", "1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb", "1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc", "1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe", "1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff", "1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb", "1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc", "1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd", "1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff", "1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb", "1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc", "1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd", "1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe" ] }, { n: [ "couple", "man and woman holding hands", "woman and man holding hands" ], u: "1f46b", v: [ "1f46b-1f3fb", "1f46b-1f3fc", "1f46b-1f3fd", "1f46b-1f3fe", "1f46b-1f3ff", "1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc", "1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd", "1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe", "1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff", "1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb", "1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd", "1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe", "1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff", "1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb", "1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc", "1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe", "1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff", "1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb", "1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc", "1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd", "1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff", "1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb", "1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc", "1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd", "1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe" ] }, { n: ["men holding hands", "two men holding hands"], u: "1f46c", v: [ "1f46c-1f3fb", "1f46c-1f3fc", "1f46c-1f3fd", "1f46c-1f3fe", "1f46c-1f3ff", "1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc", "1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd", "1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe", "1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff", "1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb", "1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd", "1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe", "1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff", "1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb", "1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc", "1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe", "1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff", "1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb", "1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc", "1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd", "1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff", "1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb", "1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc", "1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd", "1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe" ] }, { n: ["kiss", "couplekiss"], u: "1f48f", v: [ "1f48f-1f3fb", "1f48f-1f3fc", "1f48f-1f3fd", "1f48f-1f3fe", "1f48f-1f3ff", "1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc", "1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd", "1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe", "1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff", "1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb", "1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd", "1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe", "1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff", "1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb", "1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc", "1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe", "1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff", "1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb", "1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc", "1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd", "1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff", "1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb", "1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc", "1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd", "1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe" ] }, { n: ["woman-kiss-man", "kiss: woman, man"], u: "1f469-200d-2764-fe0f-200d-1f48b-200d-1f468", v: [ "1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb", "1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc", "1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd", "1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe", "1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff", "1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb", "1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc", "1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd", "1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe", "1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff", "1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb", "1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc", "1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd", "1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe", "1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff", "1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb", "1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc", "1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd", "1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe", "1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff", "1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb", "1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc", "1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd", "1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe", "1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff" ] }, { n: ["man-kiss-man", "kiss: man, man"], u: "1f468-200d-2764-fe0f-200d-1f48b-200d-1f468", v: [ "1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb", "1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc", "1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd", "1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe", "1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff", "1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb", "1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc", "1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd", "1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe", "1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff", "1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb", "1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc", "1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd", "1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe", "1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff", "1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb", "1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc", "1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd", "1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe", "1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff", "1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb", "1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc", "1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd", "1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe", "1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff" ] }, { n: ["woman-kiss-woman", "kiss: woman, woman"], u: "1f469-200d-2764-fe0f-200d-1f48b-200d-1f469", v: [ "1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb", "1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc", "1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd", "1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe", "1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff", "1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb", "1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc", "1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd", "1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe", "1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff", "1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb", "1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc", "1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd", "1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe", "1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff", "1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb", "1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc", "1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd", "1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe", "1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff", "1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb", "1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc", "1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd", "1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe", "1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff" ] }, { n: ["couple with heart"], u: "1f491", v: [ "1f491-1f3fb", "1f491-1f3fc", "1f491-1f3fd", "1f491-1f3fe", "1f491-1f3ff", "1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fc", "1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fd", "1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fe", "1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3ff", "1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fb", "1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fd", "1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fe", "1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3ff", "1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fb", "1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fc", "1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fe", "1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3ff", "1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fb", "1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fc", "1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fd", "1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3ff", "1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fb", "1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fc", "1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fd", "1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fe" ] }, { n: ["woman-heart-man", "couple with heart: woman, man"], u: "1f469-200d-2764-fe0f-200d-1f468", v: [ "1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb", "1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc", "1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd", "1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe", "1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff", "1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb", "1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc", "1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd", "1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe", "1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff", "1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb", "1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc", "1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd", "1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe", "1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff", "1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb", "1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc", "1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd", "1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe", "1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff", "1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb", "1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc", "1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd", "1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe", "1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff" ] }, { n: ["man-heart-man", "couple with heart: man, man"], u: "1f468-200d-2764-fe0f-200d-1f468", v: [ "1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb", "1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc", "1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd", "1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe", "1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff", "1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb", "1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc", "1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd", "1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe", "1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff", "1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb", "1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc", "1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd", "1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe", "1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff", "1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb", "1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc", "1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd", "1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe", "1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff", "1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb", "1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc", "1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd", "1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe", "1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff" ] }, { n: ["woman-heart-woman", "couple with heart: woman, woman"], u: "1f469-200d-2764-fe0f-200d-1f469", v: [ "1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb", "1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc", "1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fd", "1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fe", "1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3ff", "1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fb", "1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fc", "1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fd", "1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fe", "1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3ff", "1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fb", "1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fc", "1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fd", "1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fe", "1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3ff", "1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fb", "1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fc", "1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fd", "1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fe", "1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3ff", "1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fb", "1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fc", "1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fd", "1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fe", "1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3ff" ] }, { n: ["family"], u: "1f46a" }, { n: ["man-woman-boy", "family: man, woman, boy"], u: "1f468-200d-1f469-200d-1f466" }, { n: ["man-woman-girl", "family: man, woman, girl"], u: "1f468-200d-1f469-200d-1f467" }, { n: ["man-woman-girl-boy", "family: man, woman, girl, boy"], u: "1f468-200d-1f469-200d-1f467-200d-1f466" }, { n: ["man-woman-boy-boy", "family: man, woman, boy, boy"], u: "1f468-200d-1f469-200d-1f466-200d-1f466" }, { n: ["man-woman-girl-girl", "family: man, woman, girl, girl"], u: "1f468-200d-1f469-200d-1f467-200d-1f467" }, { n: ["man-man-boy", "family: man, man, boy"], u: "1f468-200d-1f468-200d-1f466" }, { n: ["man-man-girl", "family: man, man, girl"], u: "1f468-200d-1f468-200d-1f467" }, { n: ["man-man-girl-boy", "family: man, man, girl, boy"], u: "1f468-200d-1f468-200d-1f467-200d-1f466" }, { n: ["man-man-boy-boy", "family: man, man, boy, boy"], u: "1f468-200d-1f468-200d-1f466-200d-1f466" }, { n: ["man-man-girl-girl", "family: man, man, girl, girl"], u: "1f468-200d-1f468-200d-1f467-200d-1f467" }, { n: ["woman-woman-boy", "family: woman, woman, boy"], u: "1f469-200d-1f469-200d-1f466" }, { n: ["woman-woman-girl", "family: woman, woman, girl"], u: "1f469-200d-1f469-200d-1f467" }, { n: ["woman-woman-girl-boy", "family: woman, woman, girl, boy"], u: "1f469-200d-1f469-200d-1f467-200d-1f466" }, { n: ["woman-woman-boy-boy", "family: woman, woman, boy, boy"], u: "1f469-200d-1f469-200d-1f466-200d-1f466" }, { n: ["woman-woman-girl-girl", "family: woman, woman, girl, girl"], u: "1f469-200d-1f469-200d-1f467-200d-1f467" }, { n: ["man-boy", "family: man, boy"], u: "1f468-200d-1f466" }, { n: ["man-boy-boy", "family: man, boy, boy"], u: "1f468-200d-1f466-200d-1f466" }, { n: ["man-girl", "family: man, girl"], u: "1f468-200d-1f467" }, { n: ["man-girl-boy", "family: man, girl, boy"], u: "1f468-200d-1f467-200d-1f466" }, { n: ["man-girl-girl", "family: man, girl, girl"], u: "1f468-200d-1f467-200d-1f467" }, { n: ["woman-boy", "family: woman, boy"], u: "1f469-200d-1f466" }, { n: ["woman-boy-boy", "family: woman, boy, boy"], u: "1f469-200d-1f466-200d-1f466" }, { n: ["woman-girl", "family: woman, girl"], u: "1f469-200d-1f467" }, { n: ["woman-girl-boy", "family: woman, girl, boy"], u: "1f469-200d-1f467-200d-1f466" }, { n: ["woman-girl-girl", "family: woman, girl, girl"], u: "1f469-200d-1f467-200d-1f467" }, { n: ["speaking head", "speaking head in silhouette"], u: "1f5e3-fe0f" }, { n: ["bust in silhouette"], u: "1f464" }, { n: ["busts in silhouette"], u: "1f465" }, { n: ["people hugging"], u: "1fac2" }, { n: ["footprints"], u: "1f463" } ], animals_nature: [ { n: ["monkey face"], u: "1f435" }, { n: ["monkey"], u: "1f412" }, { n: ["gorilla"], u: "1f98d" }, { n: ["orangutan"], u: "1f9a7" }, { n: ["dog", "dog face"], u: "1f436" }, { n: ["dog", "dog2"], u: "1f415" }, { n: ["guide dog"], u: "1f9ae" }, { n: ["service dog"], u: "1f415-200d-1f9ba" }, { n: ["poodle"], u: "1f429" }, { n: ["wolf", "wolf face"], u: "1f43a" }, { n: ["fox face"], u: "1f98a" }, { n: ["raccoon"], u: "1f99d" }, { n: ["cat", "cat face"], u: "1f431" }, { n: ["cat", "cat2"], u: "1f408" }, { n: ["black cat"], u: "1f408-200d-2b1b" }, { n: ["lion face"], u: "1f981" }, { n: ["tiger", "tiger face"], u: "1f42f" }, { n: ["tiger", "tiger2"], u: "1f405" }, { n: ["leopard"], u: "1f406" }, { n: ["horse", "horse face"], u: "1f434" }, { n: ["horse", "racehorse"], u: "1f40e" }, { n: ["unicorn face"], u: "1f984" }, { n: ["zebra face"], u: "1f993" }, { n: ["deer"], u: "1f98c" }, { n: ["bison"], u: "1f9ac" }, { n: ["cow", "cow face"], u: "1f42e" }, { n: ["ox"], u: "1f402" }, { n: ["water buffalo"], u: "1f403" }, { n: ["cow", "cow2"], u: "1f404" }, { n: ["pig", "pig face"], u: "1f437" }, { n: ["pig", "pig2"], u: "1f416" }, { n: ["boar"], u: "1f417" }, { n: ["pig nose"], u: "1f43d" }, { n: ["ram"], u: "1f40f" }, { n: ["sheep"], u: "1f411" }, { n: ["goat"], u: "1f410" }, { n: ["dromedary camel"], u: "1f42a" }, { n: ["camel", "bactrian camel"], u: "1f42b" }, { n: ["llama"], u: "1f999" }, { n: ["giraffe face"], u: "1f992" }, { n: ["elephant"], u: "1f418" }, { n: ["mammoth"], u: "1f9a3" }, { n: ["rhinoceros"], u: "1f98f" }, { n: ["hippopotamus"], u: "1f99b" }, { n: ["mouse", "mouse face"], u: "1f42d" }, { n: ["mouse", "mouse2"], u: "1f401" }, { n: ["rat"], u: "1f400" }, { n: ["hamster", "hamster face"], u: "1f439" }, { n: ["rabbit", "rabbit face"], u: "1f430" }, { n: ["rabbit", "rabbit2"], u: "1f407" }, { n: ["chipmunk"], u: "1f43f-fe0f" }, { n: ["beaver"], u: "1f9ab" }, { n: ["hedgehog"], u: "1f994" }, { n: ["bat"], u: "1f987" }, { n: ["bear", "bear face"], u: "1f43b" }, { n: ["polar bear"], u: "1f43b-200d-2744-fe0f" }, { n: ["koala"], u: "1f428" }, { n: ["panda face"], u: "1f43c" }, { n: ["sloth"], u: "1f9a5" }, { n: ["otter"], u: "1f9a6" }, { n: ["skunk"], u: "1f9a8" }, { n: ["kangaroo"], u: "1f998" }, { n: ["badger"], u: "1f9a1" }, { n: ["feet", "paw prints"], u: "1f43e" }, { n: ["turkey"], u: "1f983" }, { n: ["chicken"], u: "1f414" }, { n: ["rooster"], u: "1f413" }, { n: ["hatching chick"], u: "1f423" }, { n: ["baby chick"], u: "1f424" }, { n: ["hatched chick", "front-facing baby chick"], u: "1f425" }, { n: ["bird"], u: "1f426" }, { n: ["penguin"], u: "1f427" }, { n: ["dove", "dove of peace"], u: "1f54a-fe0f" }, { n: ["eagle"], u: "1f985" }, { n: ["duck"], u: "1f986" }, { n: ["swan"], u: "1f9a2" }, { n: ["owl"], u: "1f989" }, { n: ["dodo"], u: "1f9a4" }, { n: ["feather"], u: "1fab6" }, { n: ["flamingo"], u: "1f9a9" }, { n: ["peacock"], u: "1f99a" }, { n: ["parrot"], u: "1f99c" }, { n: ["frog", "frog face"], u: "1f438" }, { n: ["crocodile"], u: "1f40a" }, { n: ["turtle"], u: "1f422" }, { n: ["lizard"], u: "1f98e" }, { n: ["snake"], u: "1f40d" }, { n: ["dragon face"], u: "1f432" }, { n: ["dragon"], u: "1f409" }, { n: ["sauropod"], u: "1f995" }, { n: ["t-rex"], u: "1f996" }, { n: ["whale", "spouting whale"], u: "1f433" }, { n: ["whale", "whale2"], u: "1f40b" }, { n: ["dolphin", "flipper"], u: "1f42c" }, { n: ["seal"], u: "1f9ad" }, { n: ["fish"], u: "1f41f" }, { n: ["tropical fish"], u: "1f420" }, { n: ["blowfish"], u: "1f421" }, { n: ["shark"], u: "1f988" }, { n: ["octopus"], u: "1f419" }, { n: ["shell", "spiral shell"], u: "1f41a" }, { n: ["coral"], u: "1fab8" }, { n: ["snail"], u: "1f40c" }, { n: ["butterfly"], u: "1f98b" }, { n: ["bug"], u: "1f41b" }, { n: ["ant"], u: "1f41c" }, { n: ["bee", "honeybee"], u: "1f41d" }, { n: ["beetle"], u: "1fab2" }, { n: ["ladybug", "lady beetle"], u: "1f41e" }, { n: ["cricket"], u: "1f997" }, { n: ["cockroach"], u: "1fab3" }, { n: ["spider"], u: "1f577-fe0f" }, { n: ["spider web"], u: "1f578-fe0f" }, { n: ["scorpion"], u: "1f982" }, { n: ["mosquito"], u: "1f99f" }, { n: ["fly"], u: "1fab0" }, { n: ["worm"], u: "1fab1" }, { n: ["microbe"], u: "1f9a0" }, { n: ["bouquet"], u: "1f490" }, { n: ["cherry blossom"], u: "1f338" }, { n: ["white flower"], u: "1f4ae" }, { n: ["lotus"], u: "1fab7" }, { n: ["rosette"], u: "1f3f5-fe0f" }, { n: ["rose"], u: "1f339" }, { n: ["wilted flower"], u: "1f940" }, { n: ["hibiscus"], u: "1f33a" }, { n: ["sunflower"], u: "1f33b" }, { n: ["blossom"], u: "1f33c" }, { n: ["tulip"], u: "1f337" }, { n: ["seedling"], u: "1f331" }, { n: ["potted plant"], u: "1fab4" }, { n: ["evergreen tree"], u: "1f332" }, { n: ["deciduous tree"], u: "1f333" }, { n: ["palm tree"], u: "1f334" }, { n: ["cactus"], u: "1f335" }, { n: ["ear of rice"], u: "1f33e" }, { n: ["herb"], u: "1f33f" }, { n: ["shamrock"], u: "2618-fe0f" }, { n: ["four leaf clover"], u: "1f340" }, { n: ["maple leaf"], u: "1f341" }, { n: ["fallen leaf"], u: "1f342" }, { n: ["leaves", "leaf fluttering in wind"], u: "1f343" }, { n: ["empty nest"], u: "1fab9" }, { n: ["nest with eggs"], u: "1faba" } ], food_drink: [ { n: ["grapes"], u: "1f347" }, { n: ["melon"], u: "1f348" }, { n: ["watermelon"], u: "1f349" }, { n: ["tangerine"], u: "1f34a" }, { n: ["lemon"], u: "1f34b" }, { n: ["banana"], u: "1f34c" }, { n: ["pineapple"], u: "1f34d" }, { n: ["mango"], u: "1f96d" }, { n: ["apple", "red apple"], u: "1f34e" }, { n: ["green apple"], u: "1f34f" }, { n: ["pear"], u: "1f350" }, { n: ["peach"], u: "1f351" }, { n: ["cherries"], u: "1f352" }, { n: ["strawberry"], u: "1f353" }, { n: ["blueberries"], u: "1fad0" }, { n: ["kiwifruit"], u: "1f95d" }, { n: ["tomato"], u: "1f345" }, { n: ["olive"], u: "1fad2" }, { n: ["coconut"], u: "1f965" }, { n: ["avocado"], u: "1f951" }, { n: ["eggplant", "aubergine"], u: "1f346" }, { n: ["potato"], u: "1f954" }, { n: ["carrot"], u: "1f955" }, { n: ["corn", "ear of maize"], u: "1f33d" }, { n: ["hot pepper"], u: "1f336-fe0f" }, { n: ["bell pepper"], u: "1fad1" }, { n: ["cucumber"], u: "1f952" }, { n: ["leafy green"], u: "1f96c" }, { n: ["broccoli"], u: "1f966" }, { n: ["garlic"], u: "1f9c4" }, { n: ["onion"], u: "1f9c5" }, { n: ["mushroom"], u: "1f344" }, { n: ["peanuts"], u: "1f95c" }, { n: ["beans"], u: "1fad8" }, { n: ["chestnut"], u: "1f330" }, { n: ["bread"], u: "1f35e" }, { n: ["croissant"], u: "1f950" }, { n: ["baguette bread"], u: "1f956" }, { n: ["flatbread"], u: "1fad3" }, { n: ["pretzel"], u: "1f968" }, { n: ["bagel"], u: "1f96f" }, { n: ["pancakes"], u: "1f95e" }, { n: ["waffle"], u: "1f9c7" }, { n: ["cheese wedge"], u: "1f9c0" }, { n: ["meat on bone"], u: "1f356" }, { n: ["poultry leg"], u: "1f357" }, { n: ["cut of meat"], u: "1f969" }, { n: ["bacon"], u: "1f953" }, { n: ["hamburger"], u: "1f354" }, { n: ["fries", "french fries"], u: "1f35f" }, { n: ["pizza", "slice of pizza"], u: "1f355" }, { n: ["hotdog", "hot dog"], u: "1f32d" }, { n: ["sandwich"], u: "1f96a" }, { n: ["taco"], u: "1f32e" }, { n: ["burrito"], u: "1f32f" }, { n: ["tamale"], u: "1fad4" }, { n: ["stuffed flatbread"], u: "1f959" }, { n: ["falafel"], u: "1f9c6" }, { n: ["egg"], u: "1f95a" }, { n: ["cooking", "fried egg"], u: "1f373" }, { n: ["shallow pan of food"], u: "1f958" }, { n: ["stew", "pot of food"], u: "1f372" }, { n: ["fondue"], u: "1fad5" }, { n: ["bowl with spoon"], u: "1f963" }, { n: ["green salad"], u: "1f957" }, { n: ["popcorn"], u: "1f37f" }, { n: ["butter"], u: "1f9c8" }, { n: ["salt", "salt shaker"], u: "1f9c2" }, { n: ["canned food"], u: "1f96b" }, { n: ["bento", "bento box"], u: "1f371" }, { n: ["rice cracker"], u: "1f358" }, { n: ["rice ball"], u: "1f359" }, { n: ["rice", "cooked rice"], u: "1f35a" }, { n: ["curry", "curry and rice"], u: "1f35b" }, { n: ["ramen", "steaming bowl"], u: "1f35c" }, { n: ["spaghetti"], u: "1f35d" }, { n: ["sweet potato", "roasted sweet potato"], u: "1f360" }, { n: ["oden"], u: "1f362" }, { n: ["sushi"], u: "1f363" }, { n: ["fried shrimp"], u: "1f364" }, { n: ["fish cake", "fish cake with swirl design"], u: "1f365" }, { n: ["moon cake"], u: "1f96e" }, { n: ["dango"], u: "1f361" }, { n: ["dumpling"], u: "1f95f" }, { n: ["fortune cookie"], u: "1f960" }, { n: ["takeout box"], u: "1f961" }, { n: ["crab"], u: "1f980" }, { n: ["lobster"], u: "1f99e" }, { n: ["shrimp"], u: "1f990" }, { n: ["squid"], u: "1f991" }, { n: ["oyster"], u: "1f9aa" }, { n: ["icecream", "soft ice cream"], u: "1f366" }, { n: ["shaved ice"], u: "1f367" }, { n: ["ice cream"], u: "1f368" }, { n: ["doughnut"], u: "1f369" }, { n: ["cookie"], u: "1f36a" }, { n: ["birthday", "birthday cake"], u: "1f382" }, { n: ["cake", "shortcake"], u: "1f370" }, { n: ["cupcake"], u: "1f9c1" }, { n: ["pie"], u: "1f967" }, { n: ["chocolate bar"], u: "1f36b" }, { n: ["candy"], u: "1f36c" }, { n: ["lollipop"], u: "1f36d" }, { n: ["custard"], u: "1f36e" }, { n: ["honey pot"], u: "1f36f" }, { n: ["baby bottle"], u: "1f37c" }, { n: ["glass of milk"], u: "1f95b" }, { n: ["coffee", "hot beverage"], u: "2615" }, { n: ["teapot"], u: "1fad6" }, { n: ["tea", "teacup without handle"], u: "1f375" }, { n: ["sake", "sake bottle and cup"], u: "1f376" }, { n: ["champagne", "bottle with popping cork"], u: "1f37e" }, { n: ["wine glass"], u: "1f377" }, { n: ["cocktail", "cocktail glass"], u: "1f378" }, { n: ["tropical drink"], u: "1f379" }, { n: ["beer", "beer mug"], u: "1f37a" }, { n: ["beers", "clinking beer mugs"], u: "1f37b" }, { n: ["clinking glasses"], u: "1f942" }, { n: ["tumbler glass"], u: "1f943" }, { n: ["pouring liquid"], u: "1fad7" }, { n: ["cup with straw"], u: "1f964" }, { n: ["bubble tea"], u: "1f9cb" }, { n: ["beverage box"], u: "1f9c3" }, { n: ["mate drink"], u: "1f9c9" }, { n: ["ice cube"], u: "1f9ca" }, { n: ["chopsticks"], u: "1f962" }, { n: ["knife fork plate", "fork and knife with plate"], u: "1f37d-fe0f" }, { n: ["fork and knife"], u: "1f374" }, { n: ["spoon"], u: "1f944" }, { n: ["hocho", "knife"], u: "1f52a" }, { n: ["jar"], u: "1fad9" }, { n: ["amphora"], u: "1f3fa" } ], travel_places: [ { n: ["earth africa", "earth globe europe-africa"], u: "1f30d" }, { n: ["earth americas", "earth globe americas"], u: "1f30e" }, { n: ["earth asia", "earth globe asia-australia"], u: "1f30f" }, { n: ["globe with meridians"], u: "1f310" }, { n: ["world map"], u: "1f5fa-fe0f" }, { n: ["japan", "silhouette of japan"], u: "1f5fe" }, { n: ["compass"], u: "1f9ed" }, { n: ["snow-capped mountain", "snow capped mountain"], u: "1f3d4-fe0f" }, { n: ["mountain"], u: "26f0-fe0f" }, { n: ["volcano"], u: "1f30b" }, { n: ["mount fuji"], u: "1f5fb" }, { n: ["camping"], u: "1f3d5-fe0f" }, { n: ["beach with umbrella"], u: "1f3d6-fe0f" }, { n: ["desert"], u: "1f3dc-fe0f" }, { n: ["desert island"], u: "1f3dd-fe0f" }, { n: ["national park"], u: "1f3de-fe0f" }, { n: ["stadium"], u: "1f3df-fe0f" }, { n: ["classical building"], u: "1f3db-fe0f" }, { n: ["building construction"], u: "1f3d7-fe0f" }, { n: ["brick", "bricks"], u: "1f9f1" }, { n: ["rock"], u: "1faa8" }, { n: ["wood"], u: "1fab5" }, { n: ["hut"], u: "1f6d6" }, { n: ["houses", "house buildings"], u: "1f3d8-fe0f" }, { n: ["derelict house", "derelict house building"], u: "1f3da-fe0f" }, { n: ["house", "house building"], u: "1f3e0" }, { n: ["house with garden"], u: "1f3e1" }, { n: ["office", "office building"], u: "1f3e2" }, { n: ["post office", "japanese post office"], u: "1f3e3" }, { n: ["european post office"], u: "1f3e4" }, { n: ["hospital"], u: "1f3e5" }, { n: ["bank"], u: "1f3e6" }, { n: ["hotel"], u: "1f3e8" }, { n: ["love hotel"], u: "1f3e9" }, { n: ["convenience store"], u: "1f3ea" }, { n: ["school"], u: "1f3eb" }, { n: ["department store"], u: "1f3ec" }, { n: ["factory"], u: "1f3ed" }, { n: ["japanese castle"], u: "1f3ef" }, { n: ["european castle"], u: "1f3f0" }, { n: ["wedding"], u: "1f492" }, { n: ["tokyo tower"], u: "1f5fc" }, { n: ["statue of liberty"], u: "1f5fd" }, { n: ["church"], u: "26ea" }, { n: ["mosque"], u: "1f54c" }, { n: ["hindu temple"], u: "1f6d5" }, { n: ["synagogue"], u: "1f54d" }, { n: ["shinto shrine"], u: "26e9-fe0f" }, { n: ["kaaba"], u: "1f54b" }, { n: ["fountain"], u: "26f2" }, { n: ["tent"], u: "26fa" }, { n: ["foggy"], u: "1f301" }, { n: ["night with stars"], u: "1f303" }, { n: ["cityscape"], u: "1f3d9-fe0f" }, { n: ["sunrise over mountains"], u: "1f304" }, { n: ["sunrise"], u: "1f305" }, { n: ["city sunset", "cityscape at dusk"], u: "1f306" }, { n: ["city sunrise", "sunset over buildings"], u: "1f307" }, { n: ["bridge at night"], u: "1f309" }, { n: ["hotsprings", "hot springs"], u: "2668-fe0f" }, { n: ["carousel horse"], u: "1f3a0" }, { n: ["playground slide"], u: "1f6dd" }, { n: ["ferris wheel"], u: "1f3a1" }, { n: ["roller coaster"], u: "1f3a2" }, { n: ["barber", "barber pole"], u: "1f488" }, { n: ["circus tent"], u: "1f3aa" }, { n: ["steam locomotive"], u: "1f682" }, { n: ["railway car"], u: "1f683" }, { n: ["high-speed train", "bullettrain side"], u: "1f684" }, { n: ["bullettrain front", "high-speed train with bullet nose"], u: "1f685" }, { n: ["train", "train2"], u: "1f686" }, { n: ["metro"], u: "1f687" }, { n: ["light rail"], u: "1f688" }, { n: ["station"], u: "1f689" }, { n: ["tram"], u: "1f68a" }, { n: ["monorail"], u: "1f69d" }, { n: ["mountain railway"], u: "1f69e" }, { n: ["train", "tram car"], u: "1f68b" }, { n: ["bus"], u: "1f68c" }, { n: ["oncoming bus"], u: "1f68d" }, { n: ["trolleybus"], u: "1f68e" }, { n: ["minibus"], u: "1f690" }, { n: ["ambulance"], u: "1f691" }, { n: ["fire engine"], u: "1f692" }, { n: ["police car"], u: "1f693" }, { n: ["oncoming police car"], u: "1f694" }, { n: ["taxi"], u: "1f695" }, { n: ["oncoming taxi"], u: "1f696" }, { n: ["car", "red car", "automobile"], u: "1f697" }, { n: ["oncoming automobile"], u: "1f698" }, { n: ["blue car", "recreational vehicle"], u: "1f699" }, { n: ["pickup truck"], u: "1f6fb" }, { n: ["truck", "delivery truck"], u: "1f69a" }, { n: ["articulated lorry"], u: "1f69b" }, { n: ["tractor"], u: "1f69c" }, { n: ["racing car"], u: "1f3ce-fe0f" }, { n: ["motorcycle", "racing motorcycle"], u: "1f3cd-fe0f" }, { n: ["motor scooter"], u: "1f6f5" }, { n: ["manual wheelchair"], u: "1f9bd" }, { n: ["motorized wheelchair"], u: "1f9bc" }, { n: ["auto rickshaw"], u: "1f6fa" }, { n: ["bike", "bicycle"], u: "1f6b2" }, { n: ["scooter"], u: "1f6f4" }, { n: ["skateboard"], u: "1f6f9" }, { n: ["roller skate"], u: "1f6fc" }, { n: ["busstop", "bus stop"], u: "1f68f" }, { n: ["motorway"], u: "1f6e3-fe0f" }, { n: ["railway track"], u: "1f6e4-fe0f" }, { n: ["oil drum"], u: "1f6e2-fe0f" }, { n: ["fuelpump", "fuel pump"], u: "26fd" }, { n: ["wheel"], u: "1f6de" }, { n: ["rotating light", "police cars revolving light"], u: "1f6a8" }, { n: ["traffic light", "horizontal traffic light"], u: "1f6a5" }, { n: ["vertical traffic light"], u: "1f6a6" }, { n: ["octagonal sign"], u: "1f6d1" }, { n: ["construction", "construction sign"], u: "1f6a7" }, { n: ["anchor"], u: "2693" }, { n: ["ring buoy"], u: "1f6df" }, { n: ["boat", "sailboat"], u: "26f5" }, { n: ["canoe"], u: "1f6f6" }, { n: ["speedboat"], u: "1f6a4" }, { n: ["passenger ship"], u: "1f6f3-fe0f" }, { n: ["ferry"], u: "26f4-fe0f" }, { n: ["motor boat"], u: "1f6e5-fe0f" }, { n: ["ship"], u: "1f6a2" }, { n: ["airplane"], u: "2708-fe0f" }, { n: ["small airplane"], u: "1f6e9-fe0f" }, { n: ["airplane departure"], u: "1f6eb" }, { n: ["airplane arriving"], u: "1f6ec" }, { n: ["parachute"], u: "1fa82" }, { n: ["seat"], u: "1f4ba" }, { n: ["helicopter"], u: "1f681" }, { n: ["suspension railway"], u: "1f69f" }, { n: ["mountain cableway"], u: "1f6a0" }, { n: ["aerial tramway"], u: "1f6a1" }, { n: ["satellite"], u: "1f6f0-fe0f" }, { n: ["rocket"], u: "1f680" }, { n: ["flying saucer"], u: "1f6f8" }, { n: ["bellhop bell"], u: "1f6ce-fe0f" }, { n: ["luggage"], u: "1f9f3" }, { n: ["hourglass"], u: "231b" }, { n: ["hourglass flowing sand", "hourglass with flowing sand"], u: "23f3" }, { n: ["watch"], u: "231a" }, { n: ["alarm clock"], u: "23f0" }, { n: ["stopwatch"], u: "23f1-fe0f" }, { n: ["timer clock"], u: "23f2-fe0f" }, { n: ["mantelpiece clock"], u: "1f570-fe0f" }, { n: ["clock12", "clock face twelve oclock"], u: "1f55b" }, { n: ["clock1230", "clock face twelve-thirty"], u: "1f567" }, { n: ["clock1", "clock face one oclock"], u: "1f550" }, { n: ["clock130", "clock face one-thirty"], u: "1f55c" }, { n: ["clock2", "clock face two oclock"], u: "1f551" }, { n: ["clock230", "clock face two-thirty"], u: "1f55d" }, { n: ["clock3", "clock face three oclock"], u: "1f552" }, { n: ["clock330", "clock face three-thirty"], u: "1f55e" }, { n: ["clock4", "clock face four oclock"], u: "1f553" }, { n: ["clock430", "clock face four-thirty"], u: "1f55f" }, { n: ["clock5", "clock face five oclock"], u: "1f554" }, { n: ["clock530", "clock face five-thirty"], u: "1f560" }, { n: ["clock6", "clock face six oclock"], u: "1f555" }, { n: ["clock630", "clock face six-thirty"], u: "1f561" }, { n: ["clock7", "clock face seven oclock"], u: "1f556" }, { n: ["clock730", "clock face seven-thirty"], u: "1f562" }, { n: ["clock8", "clock face eight oclock"], u: "1f557" }, { n: ["clock830", "clock face eight-thirty"], u: "1f563" }, { n: ["clock9", "clock face nine oclock"], u: "1f558" }, { n: ["clock930", "clock face nine-thirty"], u: "1f564" }, { n: ["clock10", "clock face ten oclock"], u: "1f559" }, { n: ["clock1030", "clock face ten-thirty"], u: "1f565" }, { n: ["clock11", "clock face eleven oclock"], u: "1f55a" }, { n: ["clock1130", "clock face eleven-thirty"], u: "1f566" }, { n: ["new moon", "new moon symbol"], u: "1f311" }, { n: ["waxing crescent moon", "waxing crescent moon symbol"], u: "1f312" }, { n: ["first quarter moon", "first quarter moon symbol"], u: "1f313" }, { n: ["moon", "waxing gibbous moon", "waxing gibbous moon symbol"], u: "1f314" }, { n: ["full moon", "full moon symbol"], u: "1f315" }, { n: ["waning gibbous moon", "waning gibbous moon symbol"], u: "1f316" }, { n: ["last quarter moon", "last quarter moon symbol"], u: "1f317" }, { n: ["waning crescent moon", "waning crescent moon symbol"], u: "1f318" }, { n: ["crescent moon"], u: "1f319" }, { n: ["new moon with face"], u: "1f31a" }, { n: ["first quarter moon with face"], u: "1f31b" }, { n: ["last quarter moon with face"], u: "1f31c" }, { n: ["thermometer"], u: "1f321-fe0f" }, { n: ["sunny", "black sun with rays"], u: "2600-fe0f" }, { n: ["full moon with face"], u: "1f31d" }, { n: ["sun with face"], u: "1f31e" }, { n: ["ringed planet"], u: "1fa90" }, { n: ["star", "white medium star"], u: "2b50" }, { n: ["star2", "glowing star"], u: "1f31f" }, { n: ["stars", "shooting star"], u: "1f320" }, { n: ["milky way"], u: "1f30c" }, { n: ["cloud"], u: "2601-fe0f" }, { n: ["partly sunny", "sun behind cloud"], u: "26c5" }, { n: ["thunder cloud and rain", "cloud with lightning and rain"], u: "26c8-fe0f" }, { n: ["mostly sunny", "sun small cloud", "sun behind small cloud"], u: "1f324-fe0f" }, { n: ["barely sunny", "sun behind cloud", "sun behind large cloud"], u: "1f325-fe0f" }, { n: ["partly sunny rain", "sun behind rain cloud"], u: "1f326-fe0f" }, { n: ["rain cloud", "cloud with rain"], u: "1f327-fe0f" }, { n: ["snow cloud", "cloud with snow"], u: "1f328-fe0f" }, { n: ["lightning", "lightning cloud", "cloud with lightning"], u: "1f329-fe0f" }, { n: ["tornado", "tornado cloud"], u: "1f32a-fe0f" }, { n: ["fog"], u: "1f32b-fe0f" }, { n: ["wind face", "wind blowing face"], u: "1f32c-fe0f" }, { n: ["cyclone"], u: "1f300" }, { n: ["rainbow"], u: "1f308" }, { n: ["closed umbrella"], u: "1f302" }, { n: ["umbrella"], u: "2602-fe0f" }, { n: ["umbrella with rain drops"], u: "2614" }, { n: ["umbrella on ground"], u: "26f1-fe0f" }, { n: ["zap", "high voltage sign"], u: "26a1" }, { n: ["snowflake"], u: "2744-fe0f" }, { n: ["snowman"], u: "2603-fe0f" }, { n: ["snowman without snow"], u: "26c4" }, { n: ["comet"], u: "2604-fe0f" }, { n: ["fire"], u: "1f525" }, { n: ["droplet"], u: "1f4a7" }, { n: ["ocean", "water wave"], u: "1f30a" } ], activities: [ { n: ["jack-o-lantern", "jack o lantern"], u: "1f383" }, { n: ["christmas tree"], u: "1f384" }, { n: ["fireworks"], u: "1f386" }, { n: ["sparkler", "firework sparkler"], u: "1f387" }, { n: ["firecracker"], u: "1f9e8" }, { n: ["sparkles"], u: "2728" }, { n: ["balloon"], u: "1f388" }, { n: ["tada", "party popper"], u: "1f389" }, { n: ["confetti ball"], u: "1f38a" }, { n: ["tanabata tree"], u: "1f38b" }, { n: ["bamboo", "pine decoration"], u: "1f38d" }, { n: ["dolls", "japanese dolls"], u: "1f38e" }, { n: ["flags", "carp streamer"], u: "1f38f" }, { n: ["wind chime"], u: "1f390" }, { n: ["rice scene", "moon viewing ceremony"], u: "1f391" }, { n: ["red envelope", "red gift envelope"], u: "1f9e7" }, { n: ["ribbon"], u: "1f380" }, { n: ["gift", "wrapped present"], u: "1f381" }, { n: ["reminder ribbon"], u: "1f397-fe0f" }, { n: ["admission tickets"], u: "1f39f-fe0f" }, { n: ["ticket"], u: "1f3ab" }, { n: ["medal", "military medal"], u: "1f396-fe0f" }, { n: ["trophy"], u: "1f3c6" }, { n: ["sports medal"], u: "1f3c5" }, { n: ["first place medal"], u: "1f947" }, { n: ["second place medal"], u: "1f948" }, { n: ["third place medal"], u: "1f949" }, { n: ["soccer", "soccer ball"], u: "26bd" }, { n: ["baseball"], u: "26be" }, { n: ["softball"], u: "1f94e" }, { n: ["basketball", "basketball and hoop"], u: "1f3c0" }, { n: ["volleyball"], u: "1f3d0" }, { n: ["football", "american football"], u: "1f3c8" }, { n: ["rugby football"], u: "1f3c9" }, { n: ["tennis", "tennis racquet and ball"], u: "1f3be" }, { n: ["flying disc"], u: "1f94f" }, { n: ["bowling"], u: "1f3b3" }, { n: ["cricket bat and ball"], u: "1f3cf" }, { n: ["field hockey stick and ball"], u: "1f3d1" }, { n: ["ice hockey stick and puck"], u: "1f3d2" }, { n: ["lacrosse", "lacrosse stick and ball"], u: "1f94d" }, { n: ["table tennis paddle and ball"], u: "1f3d3" }, { n: ["badminton racquet and shuttlecock"], u: "1f3f8" }, { n: ["boxing glove"], u: "1f94a" }, { n: ["martial arts uniform"], u: "1f94b" }, { n: ["goal net"], u: "1f945" }, { n: ["golf", "flag in hole"], u: "26f3" }, { n: ["ice skate"], u: "26f8-fe0f" }, { n: ["fishing pole and fish"], u: "1f3a3" }, { n: ["diving mask"], u: "1f93f" }, { n: ["running shirt with sash"], u: "1f3bd" }, { n: ["ski", "ski and ski boot"], u: "1f3bf" }, { n: ["sled"], u: "1f6f7" }, { n: ["curling stone"], u: "1f94c" }, { n: ["dart", "direct hit"], u: "1f3af" }, { n: ["yo-yo"], u: "1fa80" }, { n: ["kite"], u: "1fa81" }, { n: ["8ball", "billiards"], u: "1f3b1" }, { n: ["crystal ball"], u: "1f52e" }, { n: ["magic wand"], u: "1fa84" }, { n: ["nazar amulet"], u: "1f9ff" }, { n: ["hamsa"], u: "1faac" }, { n: ["video game"], u: "1f3ae" }, { n: ["joystick"], u: "1f579-fe0f" }, { n: ["slot machine"], u: "1f3b0" }, { n: ["game die"], u: "1f3b2" }, { n: ["jigsaw", "jigsaw puzzle piece"], u: "1f9e9" }, { n: ["teddy bear"], u: "1f9f8" }, { n: ["pinata"], u: "1fa85" }, { n: ["mirror ball"], u: "1faa9" }, { n: ["nesting dolls"], u: "1fa86" }, { n: ["spades", "black spade suit"], u: "2660-fe0f" }, { n: ["hearts", "black heart suit"], u: "2665-fe0f" }, { n: ["diamonds", "black diamond suit"], u: "2666-fe0f" }, { n: ["clubs", "black club suit"], u: "2663-fe0f" }, { n: ["chess pawn"], u: "265f-fe0f" }, { n: ["black joker", "playing card black joker"], u: "1f0cf" }, { n: ["mahjong", "mahjong tile red dragon"], u: "1f004" }, { n: ["flower playing cards"], u: "1f3b4" }, { n: ["performing arts"], u: "1f3ad" }, { n: ["framed picture", "frame with picture"], u: "1f5bc-fe0f" }, { n: ["art", "artist palette"], u: "1f3a8" }, { n: ["thread", "spool of thread"], u: "1f9f5" }, { n: ["sewing needle"], u: "1faa1" }, { n: ["yarn", "ball of yarn"], u: "1f9f6" }, { n: ["knot"], u: "1faa2" } ], objects: [ { n: ["eyeglasses"], u: "1f453" }, { n: ["sunglasses", "dark sunglasses"], u: "1f576-fe0f" }, { n: ["goggles"], u: "1f97d" }, { n: ["lab coat"], u: "1f97c" }, { n: ["safety vest"], u: "1f9ba" }, { n: ["necktie"], u: "1f454" }, { n: ["shirt", "tshirt", "t-shirt"], u: "1f455" }, { n: ["jeans"], u: "1f456" }, { n: ["scarf"], u: "1f9e3" }, { n: ["gloves"], u: "1f9e4" }, { n: ["coat"], u: "1f9e5" }, { n: ["socks"], u: "1f9e6" }, { n: ["dress"], u: "1f457" }, { n: ["kimono"], u: "1f458" }, { n: ["sari"], u: "1f97b" }, { n: ["one-piece swimsuit"], u: "1fa71" }, { n: ["briefs"], u: "1fa72" }, { n: ["shorts"], u: "1fa73" }, { n: ["bikini"], u: "1f459" }, { n: ["womans clothes"], u: "1f45a" }, { n: ["purse"], u: "1f45b" }, { n: ["handbag"], u: "1f45c" }, { n: ["pouch"], u: "1f45d" }, { n: ["shopping bags"], u: "1f6cd-fe0f" }, { n: ["school satchel"], u: "1f392" }, { n: ["thong sandal"], u: "1fa74" }, { n: ["shoe", "mans shoe"], u: "1f45e" }, { n: ["athletic shoe"], u: "1f45f" }, { n: ["hiking boot"], u: "1f97e" }, { n: ["flat shoe", "womans flat shoe"], u: "1f97f" }, { n: ["high heel", "high-heeled shoe"], u: "1f460" }, { n: ["sandal", "womans sandal"], u: "1f461" }, { n: ["ballet shoes"], u: "1fa70" }, { n: ["boot", "womans boots"], u: "1f462" }, { n: ["crown"], u: "1f451" }, { n: ["womans hat"], u: "1f452" }, { n: ["tophat", "top hat"], u: "1f3a9" }, { n: ["mortar board", "graduation cap"], u: "1f393" }, { n: ["billed cap"], u: "1f9e2" }, { n: ["military helmet"], u: "1fa96" }, { n: ["rescue worker\u2019s helmet", "helmet with white cross"], u: "26d1-fe0f" }, { n: ["prayer beads"], u: "1f4ff" }, { n: ["lipstick"], u: "1f484" }, { n: ["ring"], u: "1f48d" }, { n: ["gem", "gem stone"], u: "1f48e" }, { n: ["mute", "speaker with cancellation stroke"], u: "1f507" }, { n: ["speaker"], u: "1f508" }, { n: ["sound", "speaker with one sound wave"], u: "1f509" }, { n: ["loud sound", "speaker with three sound waves"], u: "1f50a" }, { n: ["loudspeaker", "public address loudspeaker"], u: "1f4e2" }, { n: ["mega", "cheering megaphone"], u: "1f4e3" }, { n: ["postal horn"], u: "1f4ef" }, { n: ["bell"], u: "1f514" }, { n: ["no bell", "bell with cancellation stroke"], u: "1f515" }, { n: ["musical score"], u: "1f3bc" }, { n: ["musical note"], u: "1f3b5" }, { n: ["notes", "multiple musical notes"], u: "1f3b6" }, { n: ["studio microphone"], u: "1f399-fe0f" }, { n: ["level slider"], u: "1f39a-fe0f" }, { n: ["control knobs"], u: "1f39b-fe0f" }, { n: ["microphone"], u: "1f3a4" }, { n: ["headphone", "headphones"], u: "1f3a7" }, { n: ["radio"], u: "1f4fb" }, { n: ["saxophone"], u: "1f3b7" }, { n: ["accordion"], u: "1fa97" }, { n: ["guitar"], u: "1f3b8" }, { n: ["musical keyboard"], u: "1f3b9" }, { n: ["trumpet"], u: "1f3ba" }, { n: ["violin"], u: "1f3bb" }, { n: ["banjo"], u: "1fa95" }, { n: ["drum with drumsticks"], u: "1f941" }, { n: ["long drum"], u: "1fa98" }, { n: ["iphone", "mobile phone"], u: "1f4f1" }, { n: ["calling", "mobile phone with rightwards arrow at left"], u: "1f4f2" }, { n: ["phone", "telephone", "black telephone"], u: "260e-fe0f" }, { n: ["telephone receiver"], u: "1f4de" }, { n: ["pager"], u: "1f4df" }, { n: ["fax", "fax machine"], u: "1f4e0" }, { n: ["battery"], u: "1f50b" }, { n: ["low battery"], u: "1faab" }, { n: ["electric plug"], u: "1f50c" }, { n: ["computer", "personal computer"], u: "1f4bb" }, { n: ["desktop computer"], u: "1f5a5-fe0f" }, { n: ["printer"], u: "1f5a8-fe0f" }, { n: ["keyboard"], u: "2328-fe0f" }, { n: ["computer mouse", "three button mouse"], u: "1f5b1-fe0f" }, { n: ["trackball"], u: "1f5b2-fe0f" }, { n: ["minidisc"], u: "1f4bd" }, { n: ["floppy disk"], u: "1f4be" }, { n: ["cd", "optical disc"], u: "1f4bf" }, { n: ["dvd"], u: "1f4c0" }, { n: ["abacus"], u: "1f9ee" }, { n: ["movie camera"], u: "1f3a5" }, { n: ["film frames"], u: "1f39e-fe0f" }, { n: ["film projector"], u: "1f4fd-fe0f" }, { n: ["clapper", "clapper board"], u: "1f3ac" }, { n: ["tv", "television"], u: "1f4fa" }, { n: ["camera"], u: "1f4f7" }, { n: ["camera with flash"], u: "1f4f8" }, { n: ["video camera"], u: "1f4f9" }, { n: ["vhs", "videocassette"], u: "1f4fc" }, { n: ["mag", "left-pointing magnifying glass"], u: "1f50d" }, { n: ["mag right", "right-pointing magnifying glass"], u: "1f50e" }, { n: ["candle"], u: "1f56f-fe0f" }, { n: ["bulb", "electric light bulb"], u: "1f4a1" }, { n: ["flashlight", "electric torch"], u: "1f526" }, { n: ["lantern", "izakaya lantern"], u: "1f3ee" }, { n: ["diya lamp"], u: "1fa94" }, { n: ["notebook with decorative cover"], u: "1f4d4" }, { n: ["closed book"], u: "1f4d5" }, { n: ["book", "open book"], u: "1f4d6" }, { n: ["green book"], u: "1f4d7" }, { n: ["blue book"], u: "1f4d8" }, { n: ["orange book"], u: "1f4d9" }, { n: ["books"], u: "1f4da" }, { n: ["notebook"], u: "1f4d3" }, { n: ["ledger"], u: "1f4d2" }, { n: ["page with curl"], u: "1f4c3" }, { n: ["scroll"], u: "1f4dc" }, { n: ["page facing up"], u: "1f4c4" }, { n: ["newspaper"], u: "1f4f0" }, { n: ["rolled-up newspaper", "rolled up newspaper"], u: "1f5de-fe0f" }, { n: ["bookmark tabs"], u: "1f4d1" }, { n: ["bookmark"], u: "1f516" }, { n: ["label"], u: "1f3f7-fe0f" }, { n: ["moneybag", "money bag"], u: "1f4b0" }, { n: ["coin"], u: "1fa99" }, { n: ["yen", "banknote with yen sign"], u: "1f4b4" }, { n: ["dollar", "banknote with dollar sign"], u: "1f4b5" }, { n: ["euro", "banknote with euro sign"], u: "1f4b6" }, { n: ["pound", "banknote with pound sign"], u: "1f4b7" }, { n: ["money with wings"], u: "1f4b8" }, { n: ["credit card"], u: "1f4b3" }, { n: ["receipt"], u: "1f9fe" }, { n: ["chart", "chart with upwards trend and yen sign"], u: "1f4b9" }, { n: ["email", "envelope"], u: "2709-fe0f" }, { n: ["e-mail", "e-mail symbol"], u: "1f4e7" }, { n: ["incoming envelope"], u: "1f4e8" }, { n: ["envelope with arrow", "envelope with downwards arrow above"], u: "1f4e9" }, { n: ["outbox tray"], u: "1f4e4" }, { n: ["inbox tray"], u: "1f4e5" }, { n: ["package"], u: "1f4e6" }, { n: ["mailbox", "closed mailbox with raised flag"], u: "1f4eb" }, { n: ["mailbox closed", "closed mailbox with lowered flag"], u: "1f4ea" }, { n: ["mailbox with mail", "open mailbox with raised flag"], u: "1f4ec" }, { n: ["mailbox with no mail", "open mailbox with lowered flag"], u: "1f4ed" }, { n: ["postbox"], u: "1f4ee" }, { n: ["ballot box with ballot"], u: "1f5f3-fe0f" }, { n: ["pencil", "pencil2"], u: "270f-fe0f" }, { n: ["black nib"], u: "2712-fe0f" }, { n: ["fountain pen", "lower left fountain pen"], u: "1f58b-fe0f" }, { n: ["pen", "lower left ballpoint pen"], u: "1f58a-fe0f" }, { n: ["paintbrush", "lower left paintbrush"], u: "1f58c-fe0f" }, { n: ["crayon", "lower left crayon"], u: "1f58d-fe0f" }, { n: ["memo", "pencil"], u: "1f4dd" }, { n: ["briefcase"], u: "1f4bc" }, { n: ["file folder"], u: "1f4c1" }, { n: ["open file folder"], u: "1f4c2" }, { n: ["card index dividers"], u: "1f5c2-fe0f" }, { n: ["date", "calendar"], u: "1f4c5" }, { n: ["calendar", "tear-off calendar"], u: "1f4c6" }, { n: ["spiral notepad", "spiral note pad"], u: "1f5d2-fe0f" }, { n: ["spiral calendar", "spiral calendar pad"], u: "1f5d3-fe0f" }, { n: ["card index"], u: "1f4c7" }, { n: ["chart with upwards trend"], u: "1f4c8" }, { n: ["chart with downwards trend"], u: "1f4c9" }, { n: ["bar chart"], u: "1f4ca" }, { n: ["clipboard"], u: "1f4cb" }, { n: ["pushpin"], u: "1f4cc" }, { n: ["round pushpin"], u: "1f4cd" }, { n: ["paperclip"], u: "1f4ce" }, { n: ["linked paperclips"], u: "1f587-fe0f" }, { n: ["straight ruler"], u: "1f4cf" }, { n: ["triangular ruler"], u: "1f4d0" }, { n: ["scissors", "black scissors"], u: "2702-fe0f" }, { n: ["card file box"], u: "1f5c3-fe0f" }, { n: ["file cabinet"], u: "1f5c4-fe0f" }, { n: ["wastebasket"], u: "1f5d1-fe0f" }, { n: ["lock"], u: "1f512" }, { n: ["unlock", "open lock"], u: "1f513" }, { n: ["lock with ink pen"], u: "1f50f" }, { n: ["closed lock with key"], u: "1f510" }, { n: ["key"], u: "1f511" }, { n: ["old key"], u: "1f5dd-fe0f" }, { n: ["hammer"], u: "1f528" }, { n: ["axe"], u: "1fa93" }, { n: ["pick"], u: "26cf-fe0f" }, { n: ["hammer and pick"], u: "2692-fe0f" }, { n: ["hammer and wrench"], u: "1f6e0-fe0f" }, { n: ["dagger", "dagger knife"], u: "1f5e1-fe0f" }, { n: ["crossed swords"], u: "2694-fe0f" }, { n: ["gun", "pistol"], u: "1f52b" }, { n: ["boomerang"], u: "1fa83" }, { n: ["bow and arrow"], u: "1f3f9" }, { n: ["shield"], u: "1f6e1-fe0f" }, { n: ["carpentry saw"], u: "1fa9a" }, { n: ["wrench"], u: "1f527" }, { n: ["screwdriver"], u: "1fa9b" }, { n: ["nut and bolt"], u: "1f529" }, { n: ["gear"], u: "2699-fe0f" }, { n: ["clamp", "compression"], u: "1f5dc-fe0f" }, { n: ["scales", "balance scale"], u: "2696-fe0f" }, { n: ["probing cane"], u: "1f9af" }, { n: ["link", "link symbol"], u: "1f517" }, { n: ["chains"], u: "26d3-fe0f" }, { n: ["hook"], u: "1fa9d" }, { n: ["toolbox"], u: "1f9f0" }, { n: ["magnet"], u: "1f9f2" }, { n: ["ladder"], u: "1fa9c" }, { n: ["alembic"], u: "2697-fe0f" }, { n: ["test tube"], u: "1f9ea" }, { n: ["petri dish"], u: "1f9eb" }, { n: ["dna", "dna double helix"], u: "1f9ec" }, { n: ["microscope"], u: "1f52c" }, { n: ["telescope"], u: "1f52d" }, { n: ["satellite antenna"], u: "1f4e1" }, { n: ["syringe"], u: "1f489" }, { n: ["drop of blood"], u: "1fa78" }, { n: ["pill"], u: "1f48a" }, { n: ["adhesive bandage"], u: "1fa79" }, { n: ["crutch"], u: "1fa7c" }, { n: ["stethoscope"], u: "1fa7a" }, { n: ["x-ray"], u: "1fa7b" }, { n: ["door"], u: "1f6aa" }, { n: ["elevator"], u: "1f6d7" }, { n: ["mirror"], u: "1fa9e" }, { n: ["window"], u: "1fa9f" }, { n: ["bed"], u: "1f6cf-fe0f" }, { n: ["couch and lamp"], u: "1f6cb-fe0f" }, { n: ["chair"], u: "1fa91" }, { n: ["toilet"], u: "1f6bd" }, { n: ["plunger"], u: "1faa0" }, { n: ["shower"], u: "1f6bf" }, { n: ["bathtub"], u: "1f6c1" }, { n: ["mouse trap"], u: "1faa4" }, { n: ["razor"], u: "1fa92" }, { n: ["lotion bottle"], u: "1f9f4" }, { n: ["safety pin"], u: "1f9f7" }, { n: ["broom"], u: "1f9f9" }, { n: ["basket"], u: "1f9fa" }, { n: ["roll of paper"], u: "1f9fb" }, { n: ["bucket"], u: "1faa3" }, { n: ["soap", "bar of soap"], u: "1f9fc" }, { n: ["bubbles"], u: "1fae7" }, { n: ["toothbrush"], u: "1faa5" }, { n: ["sponge"], u: "1f9fd" }, { n: ["fire extinguisher"], u: "1f9ef" }, { n: ["shopping trolley"], u: "1f6d2" }, { n: ["smoking", "smoking symbol"], u: "1f6ac" }, { n: ["coffin"], u: "26b0-fe0f" }, { n: ["headstone"], u: "1faa6" }, { n: ["funeral urn"], u: "26b1-fe0f" }, { n: ["moyai"], u: "1f5ff" }, { n: ["placard"], u: "1faa7" }, { n: ["identification card"], u: "1faaa" } ], symbols: [ { n: ["atm", "automated teller machine"], u: "1f3e7" }, { n: ["put litter in its place", "put litter in its place symbol"], u: "1f6ae" }, { n: ["potable water", "potable water symbol"], u: "1f6b0" }, { n: ["wheelchair", "wheelchair symbol"], u: "267f" }, { n: ["mens", "mens symbol"], u: "1f6b9" }, { n: ["womens", "womens symbol"], u: "1f6ba" }, { n: ["restroom"], u: "1f6bb" }, { n: ["baby symbol"], u: "1f6bc" }, { n: ["wc", "water closet"], u: "1f6be" }, { n: ["passport control"], u: "1f6c2" }, { n: ["customs"], u: "1f6c3" }, { n: ["baggage claim"], u: "1f6c4" }, { n: ["left luggage"], u: "1f6c5" }, { n: ["warning", "warning sign"], u: "26a0-fe0f" }, { n: ["children crossing"], u: "1f6b8" }, { n: ["no entry"], u: "26d4" }, { n: ["no entry sign"], u: "1f6ab" }, { n: ["no bicycles"], u: "1f6b3" }, { n: ["no smoking", "no smoking symbol"], u: "1f6ad" }, { n: ["do not litter", "do not litter symbol"], u: "1f6af" }, { n: ["non-potable water", "non-potable water symbol"], u: "1f6b1" }, { n: ["no pedestrians"], u: "1f6b7" }, { n: ["no mobile phones"], u: "1f4f5" }, { n: ["underage", "no one under eighteen symbol"], u: "1f51e" }, { n: ["radioactive", "radioactive sign"], u: "2622-fe0f" }, { n: ["biohazard", "biohazard sign"], u: "2623-fe0f" }, { n: ["arrow up", "upwards black arrow"], u: "2b06-fe0f" }, { n: ["north east arrow", "arrow upper right"], u: "2197-fe0f" }, { n: ["arrow right", "black rightwards arrow"], u: "27a1-fe0f" }, { n: ["south east arrow", "arrow lower right"], u: "2198-fe0f" }, { n: ["arrow down", "downwards black arrow"], u: "2b07-fe0f" }, { n: ["south west arrow", "arrow lower left"], u: "2199-fe0f" }, { n: ["arrow left", "leftwards black arrow"], u: "2b05-fe0f" }, { n: ["north west arrow", "arrow upper left"], u: "2196-fe0f" }, { n: ["up down arrow", "arrow up down"], u: "2195-fe0f" }, { n: ["left right arrow"], u: "2194-fe0f" }, { n: ["leftwards arrow with hook"], u: "21a9-fe0f" }, { n: ["arrow right hook", "rightwards arrow with hook"], u: "21aa-fe0f" }, { n: ["arrow heading up", "arrow pointing rightwards then curving upwards"], u: "2934-fe0f" }, { n: [ "arrow heading down", "arrow pointing rightwards then curving downwards" ], u: "2935-fe0f" }, { n: [ "arrows clockwise", "clockwise downwards and upwards open circle arrows" ], u: "1f503" }, { n: [ "arrows counterclockwise", "anticlockwise downwards and upwards open circle arrows" ], u: "1f504" }, { n: ["back", "back with leftwards arrow above"], u: "1f519" }, { n: ["end", "end with leftwards arrow above"], u: "1f51a" }, { n: ["on", "on with exclamation mark with left right arrow above"], u: "1f51b" }, { n: ["soon", "soon with rightwards arrow above"], u: "1f51c" }, { n: ["top", "top with upwards arrow above"], u: "1f51d" }, { n: ["place of worship"], u: "1f6d0" }, { n: ["atom symbol"], u: "269b-fe0f" }, { n: ["om", "om symbol"], u: "1f549-fe0f" }, { n: ["star of david"], u: "2721-fe0f" }, { n: ["wheel of dharma"], u: "2638-fe0f" }, { n: ["yin yang"], u: "262f-fe0f" }, { n: ["latin cross"], u: "271d-fe0f" }, { n: ["orthodox cross"], u: "2626-fe0f" }, { n: ["star and crescent"], u: "262a-fe0f" }, { n: ["peace symbol"], u: "262e-fe0f" }, { n: ["menorah with nine branches"], u: "1f54e" }, { n: ["six pointed star", "six pointed star with middle dot"], u: "1f52f" }, { n: ["aries"], u: "2648" }, { n: ["taurus"], u: "2649" }, { n: ["gemini"], u: "264a" }, { n: ["cancer"], u: "264b" }, { n: ["leo"], u: "264c" }, { n: ["virgo"], u: "264d" }, { n: ["libra"], u: "264e" }, { n: ["scorpius"], u: "264f" }, { n: ["sagittarius"], u: "2650" }, { n: ["capricorn"], u: "2651" }, { n: ["aquarius"], u: "2652" }, { n: ["pisces"], u: "2653" }, { n: ["ophiuchus"], u: "26ce" }, { n: ["twisted rightwards arrows"], u: "1f500" }, { n: ["repeat", "clockwise rightwards and leftwards open circle arrows"], u: "1f501" }, { n: [ "repeat one", "clockwise rightwards and leftwards open circle arrows with circled one overlay" ], u: "1f502" }, { n: ["arrow forward", "black right-pointing triangle"], u: "25b6-fe0f" }, { n: ["fast forward", "black right-pointing double triangle"], u: "23e9" }, { n: [ "next track button", "black right pointing double triangle with vertical bar" ], u: "23ed-fe0f" }, { n: [ "play or pause button", "black right pointing triangle with double vertical bar" ], u: "23ef-fe0f" }, { n: ["arrow backward", "black left-pointing triangle"], u: "25c0-fe0f" }, { n: ["rewind", "black left-pointing double triangle"], u: "23ea" }, { n: [ "last track button", "black left pointing double triangle with vertical bar" ], u: "23ee-fe0f" }, { n: ["arrow up small", "up-pointing small red triangle"], u: "1f53c" }, { n: ["arrow double up", "black up-pointing double triangle"], u: "23eb" }, { n: ["arrow down small", "down-pointing small red triangle"], u: "1f53d" }, { n: ["arrow double down", "black down-pointing double triangle"], u: "23ec" }, { n: ["pause button", "double vertical bar"], u: "23f8-fe0f" }, { n: ["stop button", "black square for stop"], u: "23f9-fe0f" }, { n: ["record button", "black circle for record"], u: "23fa-fe0f" }, { n: ["eject", "eject button"], u: "23cf-fe0f" }, { n: ["cinema"], u: "1f3a6" }, { n: ["low brightness", "low brightness symbol"], u: "1f505" }, { n: ["high brightness", "high brightness symbol"], u: "1f506" }, { n: ["signal strength", "antenna with bars"], u: "1f4f6" }, { n: ["vibration mode"], u: "1f4f3" }, { n: ["mobile phone off"], u: "1f4f4" }, { n: ["female sign"], u: "2640-fe0f" }, { n: ["male sign"], u: "2642-fe0f" }, { n: ["transgender symbol"], u: "26a7-fe0f" }, { n: ["heavy multiplication x"], u: "2716-fe0f" }, { n: ["heavy plus sign"], u: "2795" }, { n: ["heavy minus sign"], u: "2796" }, { n: ["heavy division sign"], u: "2797" }, { n: ["heavy equals sign"], u: "1f7f0" }, { n: ["infinity"], u: "267e-fe0f" }, { n: ["bangbang", "double exclamation mark"], u: "203c-fe0f" }, { n: ["interrobang", "exclamation question mark"], u: "2049-fe0f" }, { n: ["question", "black question mark ornament"], u: "2753" }, { n: ["grey question", "white question mark ornament"], u: "2754" }, { n: ["grey exclamation", "white exclamation mark ornament"], u: "2755" }, { n: [ "exclamation", "heavy exclamation mark", "heavy exclamation mark symbol" ], u: "2757" }, { n: ["wavy dash"], u: "3030-fe0f" }, { n: ["currency exchange"], u: "1f4b1" }, { n: ["heavy dollar sign"], u: "1f4b2" }, { n: ["medical symbol", "staff of aesculapius"], u: "2695-fe0f" }, { n: ["recycle", "black universal recycling symbol"], u: "267b-fe0f" }, { n: ["fleur-de-lis", "fleur de lis"], u: "269c-fe0f" }, { n: ["trident", "trident emblem"], u: "1f531" }, { n: ["name badge"], u: "1f4db" }, { n: ["beginner", "japanese symbol for beginner"], u: "1f530" }, { n: ["o", "heavy large circle"], u: "2b55" }, { n: ["white check mark", "white heavy check mark"], u: "2705" }, { n: ["ballot box with check"], u: "2611-fe0f" }, { n: ["heavy check mark"], u: "2714-fe0f" }, { n: ["x", "cross mark"], u: "274c" }, { n: ["negative squared cross mark"], u: "274e" }, { n: ["curly loop"], u: "27b0" }, { n: ["loop", "double curly loop"], u: "27bf" }, { n: ["part alternation mark"], u: "303d-fe0f" }, { n: ["eight spoked asterisk"], u: "2733-fe0f" }, { n: ["eight pointed black star"], u: "2734-fe0f" }, { n: ["sparkle"], u: "2747-fe0f" }, { n: ["copyright", "copyright sign"], u: "00a9-fe0f" }, { n: ["registered", "registered sign"], u: "00ae-fe0f" }, { n: ["tm", "trade mark sign"], u: "2122-fe0f" }, { n: ["hash", "hash key"], u: "0023-fe0f-20e3" }, { n: ["keycap: *", "keycap star"], u: "002a-fe0f-20e3" }, { n: ["zero", "keycap 0"], u: "0030-fe0f-20e3" }, { n: ["one", "keycap 1"], u: "0031-fe0f-20e3" }, { n: ["two", "keycap 2"], u: "0032-fe0f-20e3" }, { n: ["three", "keycap 3"], u: "0033-fe0f-20e3" }, { n: ["four", "keycap 4"], u: "0034-fe0f-20e3" }, { n: ["five", "keycap 5"], u: "0035-fe0f-20e3" }, { n: ["six", "keycap 6"], u: "0036-fe0f-20e3" }, { n: ["seven", "keycap 7"], u: "0037-fe0f-20e3" }, { n: ["eight", "keycap 8"], u: "0038-fe0f-20e3" }, { n: ["nine", "keycap 9"], u: "0039-fe0f-20e3" }, { n: ["keycap ten"], u: "1f51f" }, { n: ["capital abcd", "input symbol for latin capital letters"], u: "1f520" }, { n: ["abcd", "input symbol for latin small letters"], u: "1f521" }, { n: ["1234", "input symbol for numbers"], u: "1f522" }, { n: ["symbols", "input symbol for symbols"], u: "1f523" }, { n: ["abc", "input symbol for latin letters"], u: "1f524" }, { n: ["a", "negative squared latin capital letter a"], u: "1f170-fe0f" }, { n: ["ab", "negative squared ab"], u: "1f18e" }, { n: ["b", "negative squared latin capital letter b"], u: "1f171-fe0f" }, { n: ["cl", "squared cl"], u: "1f191" }, { n: ["cool", "squared cool"], u: "1f192" }, { n: ["free", "squared free"], u: "1f193" }, { n: ["information source"], u: "2139-fe0f" }, { n: ["id", "squared id"], u: "1f194" }, { n: ["m", "circled latin capital letter m"], u: "24c2-fe0f" }, { n: ["new", "squared new"], u: "1f195" }, { n: ["ng", "squared ng"], u: "1f196" }, { n: ["o2", "negative squared latin capital letter o"], u: "1f17e-fe0f" }, { n: ["ok", "squared ok"], u: "1f197" }, { n: ["parking", "negative squared latin capital letter p"], u: "1f17f-fe0f" }, { n: ["sos", "squared sos"], u: "1f198" }, { n: ["up", "squared up with exclamation mark"], u: "1f199" }, { n: ["vs", "squared vs"], u: "1f19a" }, { n: ["koko", "squared katakana koko"], u: "1f201" }, { n: ["sa", "squared katakana sa"], u: "1f202-fe0f" }, { n: ["u6708", "squared cjk unified ideograph-6708"], u: "1f237-fe0f" }, { n: ["u6709", "squared cjk unified ideograph-6709"], u: "1f236" }, { n: ["u6307", "squared cjk unified ideograph-6307"], u: "1f22f" }, { n: ["ideograph advantage", "circled ideograph advantage"], u: "1f250" }, { n: ["u5272", "squared cjk unified ideograph-5272"], u: "1f239" }, { n: ["u7121", "squared cjk unified ideograph-7121"], u: "1f21a" }, { n: ["u7981", "squared cjk unified ideograph-7981"], u: "1f232" }, { n: ["accept", "circled ideograph accept"], u: "1f251" }, { n: ["u7533", "squared cjk unified ideograph-7533"], u: "1f238" }, { n: ["u5408", "squared cjk unified ideograph-5408"], u: "1f234" }, { n: ["u7a7a", "squared cjk unified ideograph-7a7a"], u: "1f233" }, { n: ["congratulations", "circled ideograph congratulation"], u: "3297-fe0f" }, { n: ["secret", "circled ideograph secret"], u: "3299-fe0f" }, { n: ["u55b6", "squared cjk unified ideograph-55b6"], u: "1f23a" }, { n: ["u6e80", "squared cjk unified ideograph-6e80"], u: "1f235" }, { n: ["red circle", "large red circle"], u: "1f534" }, { n: ["large orange circle"], u: "1f7e0" }, { n: ["large yellow circle"], u: "1f7e1" }, { n: ["large green circle"], u: "1f7e2" }, { n: ["large blue circle"], u: "1f535" }, { n: ["large purple circle"], u: "1f7e3" }, { n: ["large brown circle"], u: "1f7e4" }, { n: ["black circle", "medium black circle"], u: "26ab" }, { n: ["white circle", "medium white circle"], u: "26aa" }, { n: ["large red square"], u: "1f7e5" }, { n: ["large orange square"], u: "1f7e7" }, { n: ["large yellow square"], u: "1f7e8" }, { n: ["large green square"], u: "1f7e9" }, { n: ["large blue square"], u: "1f7e6" }, { n: ["large purple square"], u: "1f7ea" }, { n: ["large brown square"], u: "1f7eb" }, { n: ["black large square"], u: "2b1b" }, { n: ["white large square"], u: "2b1c" }, { n: ["black medium square"], u: "25fc-fe0f" }, { n: ["white medium square"], u: "25fb-fe0f" }, { n: ["black medium small square"], u: "25fe" }, { n: ["white medium small square"], u: "25fd" }, { n: ["black small square"], u: "25aa-fe0f" }, { n: ["white small square"], u: "25ab-fe0f" }, { n: ["large orange diamond"], u: "1f536" }, { n: ["large blue diamond"], u: "1f537" }, { n: ["small orange diamond"], u: "1f538" }, { n: ["small blue diamond"], u: "1f539" }, { n: ["small red triangle", "up-pointing red triangle"], u: "1f53a" }, { n: ["small red triangle down", "down-pointing red triangle"], u: "1f53b" }, { n: ["diamond shape with a dot inside"], u: "1f4a0" }, { n: ["radio button"], u: "1f518" }, { n: ["white square button"], u: "1f533" }, { n: ["black square button"], u: "1f532" } ], flags: [ { n: ["chequered flag", "checkered flag"], u: "1f3c1" }, { n: ["triangular flag on post"], u: "1f6a9" }, { n: ["crossed flags"], u: "1f38c" }, { n: ["waving black flag"], u: "1f3f4" }, { n: ["white flag", "waving white flag"], u: "1f3f3-fe0f" }, { n: ["rainbow flag", "rainbow-flag"], u: "1f3f3-fe0f-200d-1f308" }, { n: ["transgender flag"], u: "1f3f3-fe0f-200d-26a7-fe0f" }, { n: ["pirate flag"], u: "1f3f4-200d-2620-fe0f" }, { n: ["flag-ac", "ascension island flag"], u: "1f1e6-1f1e8" }, { n: ["flag-ad", "andorra flag"], u: "1f1e6-1f1e9" }, { n: ["flag-ae", "united arab emirates flag"], u: "1f1e6-1f1ea" }, { n: ["flag-af", "afghanistan flag"], u: "1f1e6-1f1eb" }, { n: ["flag-ag", "antigua & barbuda flag"], u: "1f1e6-1f1ec" }, { n: ["flag-ai", "anguilla flag"], u: "1f1e6-1f1ee" }, { n: ["flag-al", "albania flag"], u: "1f1e6-1f1f1" }, { n: ["flag-am", "armenia flag"], u: "1f1e6-1f1f2" }, { n: ["flag-ao", "angola flag"], u: "1f1e6-1f1f4" }, { n: ["flag-aq", "antarctica flag"], u: "1f1e6-1f1f6" }, { n: ["flag-ar", "argentina flag"], u: "1f1e6-1f1f7" }, { n: ["flag-as", "american samoa flag"], u: "1f1e6-1f1f8" }, { n: ["flag-at", "austria flag"], u: "1f1e6-1f1f9" }, { n: ["flag-au", "australia flag"], u: "1f1e6-1f1fa" }, { n: ["flag-aw", "aruba flag"], u: "1f1e6-1f1fc" }, { n: ["flag-ax", "\xE5land islands flag"], u: "1f1e6-1f1fd" }, { n: ["flag-az", "azerbaijan flag"], u: "1f1e6-1f1ff" }, { n: ["flag-ba", "bosnia & herzegovina flag"], u: "1f1e7-1f1e6" }, { n: ["flag-bb", "barbados flag"], u: "1f1e7-1f1e7" }, { n: ["flag-bd", "bangladesh flag"], u: "1f1e7-1f1e9" }, { n: ["flag-be", "belgium flag"], u: "1f1e7-1f1ea" }, { n: ["flag-bf", "burkina faso flag"], u: "1f1e7-1f1eb" }, { n: ["flag-bg", "bulgaria flag"], u: "1f1e7-1f1ec" }, { n: ["flag-bh", "bahrain flag"], u: "1f1e7-1f1ed" }, { n: ["flag-bi", "burundi flag"], u: "1f1e7-1f1ee" }, { n: ["flag-bj", "benin flag"], u: "1f1e7-1f1ef" }, { n: ["flag-bl", "st. barth\xE9lemy flag"], u: "1f1e7-1f1f1" }, { n: ["flag-bm", "bermuda flag"], u: "1f1e7-1f1f2" }, { n: ["flag-bn", "brunei flag"], u: "1f1e7-1f1f3" }, { n: ["flag-bo", "bolivia flag"], u: "1f1e7-1f1f4" }, { n: ["flag-bq", "caribbean netherlands flag"], u: "1f1e7-1f1f6" }, { n: ["flag-br", "brazil flag"], u: "1f1e7-1f1f7" }, { n: ["flag-bs", "bahamas flag"], u: "1f1e7-1f1f8" }, { n: ["flag-bt", "bhutan flag"], u: "1f1e7-1f1f9" }, { n: ["flag-bv", "bouvet island flag"], u: "1f1e7-1f1fb" }, { n: ["flag-bw", "botswana flag"], u: "1f1e7-1f1fc" }, { n: ["flag-by", "belarus flag"], u: "1f1e7-1f1fe" }, { n: ["flag-bz", "belize flag"], u: "1f1e7-1f1ff" }, { n: ["flag-ca", "canada flag"], u: "1f1e8-1f1e6" }, { n: ["flag-cc", "cocos (keeling) islands flag"], u: "1f1e8-1f1e8" }, { n: ["flag-cd", "congo - kinshasa flag"], u: "1f1e8-1f1e9" }, { n: ["flag-cf", "central african republic flag"], u: "1f1e8-1f1eb" }, { n: ["flag-cg", "congo - brazzaville flag"], u: "1f1e8-1f1ec" }, { n: ["flag-ch", "switzerland flag"], u: "1f1e8-1f1ed" }, { n: ["flag-ci", "c\xF4te d\u2019ivoire flag"], u: "1f1e8-1f1ee" }, { n: ["flag-ck", "cook islands flag"], u: "1f1e8-1f1f0" }, { n: ["flag-cl", "chile flag"], u: "1f1e8-1f1f1" }, { n: ["flag-cm", "cameroon flag"], u: "1f1e8-1f1f2" }, { n: ["cn", "flag-cn", "china flag"], u: "1f1e8-1f1f3" }, { n: ["flag-co", "colombia flag"], u: "1f1e8-1f1f4" }, { n: ["flag-cp", "clipperton island flag"], u: "1f1e8-1f1f5" }, { n: ["flag-cr", "costa rica flag"], u: "1f1e8-1f1f7" }, { n: ["flag-cu", "cuba flag"], u: "1f1e8-1f1fa" }, { n: ["flag-cv", "cape verde flag"], u: "1f1e8-1f1fb" }, { n: ["flag-cw", "cura\xE7ao flag"], u: "1f1e8-1f1fc" }, { n: ["flag-cx", "christmas island flag"], u: "1f1e8-1f1fd" }, { n: ["flag-cy", "cyprus flag"], u: "1f1e8-1f1fe" }, { n: ["flag-cz", "czechia flag"], u: "1f1e8-1f1ff" }, { n: ["de", "flag-de", "germany flag"], u: "1f1e9-1f1ea" }, { n: ["flag-dg", "diego garcia flag"], u: "1f1e9-1f1ec" }, { n: ["flag-dj", "djibouti flag"], u: "1f1e9-1f1ef" }, { n: ["flag-dk", "denmark flag"], u: "1f1e9-1f1f0" }, { n: ["flag-dm", "dominica flag"], u: "1f1e9-1f1f2" }, { n: ["flag-do", "dominican republic flag"], u: "1f1e9-1f1f4" }, { n: ["flag-dz", "algeria flag"], u: "1f1e9-1f1ff" }, { n: ["flag-ea", "ceuta & melilla flag"], u: "1f1ea-1f1e6" }, { n: ["flag-ec", "ecuador flag"], u: "1f1ea-1f1e8" }, { n: ["flag-ee", "estonia flag"], u: "1f1ea-1f1ea" }, { n: ["flag-eg", "egypt flag"], u: "1f1ea-1f1ec" }, { n: ["flag-eh", "western sahara flag"], u: "1f1ea-1f1ed" }, { n: ["flag-er", "eritrea flag"], u: "1f1ea-1f1f7" }, { n: ["es", "flag-es", "spain flag"], u: "1f1ea-1f1f8" }, { n: ["flag-et", "ethiopia flag"], u: "1f1ea-1f1f9" }, { n: ["flag-eu", "european union flag"], u: "1f1ea-1f1fa" }, { n: ["flag-fi", "finland flag"], u: "1f1eb-1f1ee" }, { n: ["flag-fj", "fiji flag"], u: "1f1eb-1f1ef" }, { n: ["flag-fk", "falkland islands flag"], u: "1f1eb-1f1f0" }, { n: ["flag-fm", "micronesia flag"], u: "1f1eb-1f1f2" }, { n: ["flag-fo", "faroe islands flag"], u: "1f1eb-1f1f4" }, { n: ["fr", "flag-fr", "france flag"], u: "1f1eb-1f1f7" }, { n: ["flag-ga", "gabon flag"], u: "1f1ec-1f1e6" }, { n: ["gb", "uk", "flag-gb", "united kingdom flag"], u: "1f1ec-1f1e7" }, { n: ["flag-gd", "grenada flag"], u: "1f1ec-1f1e9" }, { n: ["flag-ge", "georgia flag"], u: "1f1ec-1f1ea" }, { n: ["flag-gf", "french guiana flag"], u: "1f1ec-1f1eb" }, { n: ["flag-gg", "guernsey flag"], u: "1f1ec-1f1ec" }, { n: ["flag-gh", "ghana flag"], u: "1f1ec-1f1ed" }, { n: ["flag-gi", "gibraltar flag"], u: "1f1ec-1f1ee" }, { n: ["flag-gl", "greenland flag"], u: "1f1ec-1f1f1" }, { n: ["flag-gm", "gambia flag"], u: "1f1ec-1f1f2" }, { n: ["flag-gn", "guinea flag"], u: "1f1ec-1f1f3" }, { n: ["flag-gp", "guadeloupe flag"], u: "1f1ec-1f1f5" }, { n: ["flag-gq", "equatorial guinea flag"], u: "1f1ec-1f1f6" }, { n: ["flag-gr", "greece flag"], u: "1f1ec-1f1f7" }, { n: ["flag-gs", "south georgia & south sandwich islands flag"], u: "1f1ec-1f1f8" }, { n: ["flag-gt", "guatemala flag"], u: "1f1ec-1f1f9" }, { n: ["flag-gu", "guam flag"], u: "1f1ec-1f1fa" }, { n: ["flag-gw", "guinea-bissau flag"], u: "1f1ec-1f1fc" }, { n: ["flag-gy", "guyana flag"], u: "1f1ec-1f1fe" }, { n: ["flag-hk", "hong kong sar china flag"], u: "1f1ed-1f1f0" }, { n: ["flag-hm", "heard & mcdonald islands flag"], u: "1f1ed-1f1f2" }, { n: ["flag-hn", "honduras flag"], u: "1f1ed-1f1f3" }, { n: ["flag-hr", "croatia flag"], u: "1f1ed-1f1f7" }, { n: ["flag-ht", "haiti flag"], u: "1f1ed-1f1f9" }, { n: ["flag-hu", "hungary flag"], u: "1f1ed-1f1fa" }, { n: ["flag-ic", "canary islands flag"], u: "1f1ee-1f1e8" }, { n: ["flag-id", "indonesia flag"], u: "1f1ee-1f1e9" }, { n: ["flag-ie", "ireland flag"], u: "1f1ee-1f1ea" }, { n: ["flag-il", "israel flag"], u: "1f1ee-1f1f1" }, { n: ["flag-im", "isle of man flag"], u: "1f1ee-1f1f2" }, { n: ["flag-in", "india flag"], u: "1f1ee-1f1f3" }, { n: ["flag-io", "british indian ocean territory flag"], u: "1f1ee-1f1f4" }, { n: ["flag-iq", "iraq flag"], u: "1f1ee-1f1f6" }, { n: ["flag-ir", "iran flag"], u: "1f1ee-1f1f7" }, { n: ["flag-is", "iceland flag"], u: "1f1ee-1f1f8" }, { n: ["it", "flag-it", "italy flag"], u: "1f1ee-1f1f9" }, { n: ["flag-je", "jersey flag"], u: "1f1ef-1f1ea" }, { n: ["flag-jm", "jamaica flag"], u: "1f1ef-1f1f2" }, { n: ["flag-jo", "jordan flag"], u: "1f1ef-1f1f4" }, { n: ["jp", "flag-jp", "japan flag"], u: "1f1ef-1f1f5" }, { n: ["flag-ke", "kenya flag"], u: "1f1f0-1f1ea" }, { n: ["flag-kg", "kyrgyzstan flag"], u: "1f1f0-1f1ec" }, { n: ["flag-kh", "cambodia flag"], u: "1f1f0-1f1ed" }, { n: ["flag-ki", "kiribati flag"], u: "1f1f0-1f1ee" }, { n: ["flag-km", "comoros flag"], u: "1f1f0-1f1f2" }, { n: ["flag-kn", "st. kitts & nevis flag"], u: "1f1f0-1f1f3" }, { n: ["flag-kp", "north korea flag"], u: "1f1f0-1f1f5" }, { n: ["kr", "flag-kr", "south korea flag"], u: "1f1f0-1f1f7" }, { n: ["flag-kw", "kuwait flag"], u: "1f1f0-1f1fc" }, { n: ["flag-ky", "cayman islands flag"], u: "1f1f0-1f1fe" }, { n: ["flag-kz", "kazakhstan flag"], u: "1f1f0-1f1ff" }, { n: ["flag-la", "laos flag"], u: "1f1f1-1f1e6" }, { n: ["flag-lb", "lebanon flag"], u: "1f1f1-1f1e7" }, { n: ["flag-lc", "st. lucia flag"], u: "1f1f1-1f1e8" }, { n: ["flag-li", "liechtenstein flag"], u: "1f1f1-1f1ee" }, { n: ["flag-lk", "sri lanka flag"], u: "1f1f1-1f1f0" }, { n: ["flag-lr", "liberia flag"], u: "1f1f1-1f1f7" }, { n: ["flag-ls", "lesotho flag"], u: "1f1f1-1f1f8" }, { n: ["flag-lt", "lithuania flag"], u: "1f1f1-1f1f9" }, { n: ["flag-lu", "luxembourg flag"], u: "1f1f1-1f1fa" }, { n: ["flag-lv", "latvia flag"], u: "1f1f1-1f1fb" }, { n: ["flag-ly", "libya flag"], u: "1f1f1-1f1fe" }, { n: ["flag-ma", "morocco flag"], u: "1f1f2-1f1e6" }, { n: ["flag-mc", "monaco flag"], u: "1f1f2-1f1e8" }, { n: ["flag-md", "moldova flag"], u: "1f1f2-1f1e9" }, { n: ["flag-me", "montenegro flag"], u: "1f1f2-1f1ea" }, { n: ["flag-mf", "st. martin flag"], u: "1f1f2-1f1eb" }, { n: ["flag-mg", "madagascar flag"], u: "1f1f2-1f1ec" }, { n: ["flag-mh", "marshall islands flag"], u: "1f1f2-1f1ed" }, { n: ["flag-mk", "north macedonia flag"], u: "1f1f2-1f1f0" }, { n: ["flag-ml", "mali flag"], u: "1f1f2-1f1f1" }, { n: ["flag-mm", "myanmar (burma) flag"], u: "1f1f2-1f1f2" }, { n: ["flag-mn", "mongolia flag"], u: "1f1f2-1f1f3" }, { n: ["flag-mo", "macao sar china flag"], u: "1f1f2-1f1f4" }, { n: ["flag-mp", "northern mariana islands flag"], u: "1f1f2-1f1f5" }, { n: ["flag-mq", "martinique flag"], u: "1f1f2-1f1f6" }, { n: ["flag-mr", "mauritania flag"], u: "1f1f2-1f1f7" }, { n: ["flag-ms", "montserrat flag"], u: "1f1f2-1f1f8" }, { n: ["flag-mt", "malta flag"], u: "1f1f2-1f1f9" }, { n: ["flag-mu", "mauritius flag"], u: "1f1f2-1f1fa" }, { n: ["flag-mv", "maldives flag"], u: "1f1f2-1f1fb" }, { n: ["flag-mw", "malawi flag"], u: "1f1f2-1f1fc" }, { n: ["flag-mx", "mexico flag"], u: "1f1f2-1f1fd" }, { n: ["flag-my", "malaysia flag"], u: "1f1f2-1f1fe" }, { n: ["flag-mz", "mozambique flag"], u: "1f1f2-1f1ff" }, { n: ["flag-na", "namibia flag"], u: "1f1f3-1f1e6" }, { n: ["flag-nc", "new caledonia flag"], u: "1f1f3-1f1e8" }, { n: ["flag-ne", "niger flag"], u: "1f1f3-1f1ea" }, { n: ["flag-nf", "norfolk island flag"], u: "1f1f3-1f1eb" }, { n: ["flag-ng", "nigeria flag"], u: "1f1f3-1f1ec" }, { n: ["flag-ni", "nicaragua flag"], u: "1f1f3-1f1ee" }, { n: ["flag-nl", "netherlands flag"], u: "1f1f3-1f1f1" }, { n: ["flag-no", "norway flag"], u: "1f1f3-1f1f4" }, { n: ["flag-np", "nepal flag"], u: "1f1f3-1f1f5" }, { n: ["flag-nr", "nauru flag"], u: "1f1f3-1f1f7" }, { n: ["flag-nu", "niue flag"], u: "1f1f3-1f1fa" }, { n: ["flag-nz", "new zealand flag"], u: "1f1f3-1f1ff" }, { n: ["flag-om", "oman flag"], u: "1f1f4-1f1f2" }, { n: ["flag-pa", "panama flag"], u: "1f1f5-1f1e6" }, { n: ["flag-pe", "peru flag"], u: "1f1f5-1f1ea" }, { n: ["flag-pf", "french polynesia flag"], u: "1f1f5-1f1eb" }, { n: ["flag-pg", "papua new guinea flag"], u: "1f1f5-1f1ec" }, { n: ["flag-ph", "philippines flag"], u: "1f1f5-1f1ed" }, { n: ["flag-pk", "pakistan flag"], u: "1f1f5-1f1f0" }, { n: ["flag-pl", "poland flag"], u: "1f1f5-1f1f1" }, { n: ["flag-pm", "st. pierre & miquelon flag"], u: "1f1f5-1f1f2" }, { n: ["flag-pn", "pitcairn islands flag"], u: "1f1f5-1f1f3" }, { n: ["flag-pr", "puerto rico flag"], u: "1f1f5-1f1f7" }, { n: ["flag-ps", "palestinian territories flag"], u: "1f1f5-1f1f8" }, { n: ["flag-pt", "portugal flag"], u: "1f1f5-1f1f9" }, { n: ["flag-pw", "palau flag"], u: "1f1f5-1f1fc" }, { n: ["flag-py", "paraguay flag"], u: "1f1f5-1f1fe" }, { n: ["flag-qa", "qatar flag"], u: "1f1f6-1f1e6" }, { n: ["flag-re", "r\xE9union flag"], u: "1f1f7-1f1ea" }, { n: ["flag-ro", "romania flag"], u: "1f1f7-1f1f4" }, { n: ["flag-rs", "serbia flag"], u: "1f1f7-1f1f8" }, { n: ["ru", "flag-ru", "russia flag"], u: "1f1f7-1f1fa" }, { n: ["flag-rw", "rwanda flag"], u: "1f1f7-1f1fc" }, { n: ["flag-sa", "saudi arabia flag"], u: "1f1f8-1f1e6" }, { n: ["flag-sb", "solomon islands flag"], u: "1f1f8-1f1e7" }, { n: ["flag-sc", "seychelles flag"], u: "1f1f8-1f1e8" }, { n: ["flag-sd", "sudan flag"], u: "1f1f8-1f1e9" }, { n: ["flag-se", "sweden flag"], u: "1f1f8-1f1ea" }, { n: ["flag-sg", "singapore flag"], u: "1f1f8-1f1ec" }, { n: ["flag-sh", "st. helena flag"], u: "1f1f8-1f1ed" }, { n: ["flag-si", "slovenia flag"], u: "1f1f8-1f1ee" }, { n: ["flag-sj", "svalbard & jan mayen flag"], u: "1f1f8-1f1ef" }, { n: ["flag-sk", "slovakia flag"], u: "1f1f8-1f1f0" }, { n: ["flag-sl", "sierra leone flag"], u: "1f1f8-1f1f1" }, { n: ["flag-sm", "san marino flag"], u: "1f1f8-1f1f2" }, { n: ["flag-sn", "senegal flag"], u: "1f1f8-1f1f3" }, { n: ["flag-so", "somalia flag"], u: "1f1f8-1f1f4" }, { n: ["flag-sr", "suriname flag"], u: "1f1f8-1f1f7" }, { n: ["flag-ss", "south sudan flag"], u: "1f1f8-1f1f8" }, { n: ["flag-st", "s\xE3o tom\xE9 & pr\xEDncipe flag"], u: "1f1f8-1f1f9" }, { n: ["flag-sv", "el salvador flag"], u: "1f1f8-1f1fb" }, { n: ["flag-sx", "sint maarten flag"], u: "1f1f8-1f1fd" }, { n: ["flag-sy", "syria flag"], u: "1f1f8-1f1fe" }, { n: ["flag-sz", "eswatini flag"], u: "1f1f8-1f1ff" }, { n: ["flag-ta", "tristan da cunha flag"], u: "1f1f9-1f1e6" }, { n: ["flag-tc", "turks & caicos islands flag"], u: "1f1f9-1f1e8" }, { n: ["flag-td", "chad flag"], u: "1f1f9-1f1e9" }, { n: ["flag-tf", "french southern territories flag"], u: "1f1f9-1f1eb" }, { n: ["flag-tg", "togo flag"], u: "1f1f9-1f1ec" }, { n: ["flag-th", "thailand flag"], u: "1f1f9-1f1ed" }, { n: ["flag-tj", "tajikistan flag"], u: "1f1f9-1f1ef" }, { n: ["flag-tk", "tokelau flag"], u: "1f1f9-1f1f0" }, { n: ["flag-tl", "timor-leste flag"], u: "1f1f9-1f1f1" }, { n: ["flag-tm", "turkmenistan flag"], u: "1f1f9-1f1f2" }, { n: ["flag-tn", "tunisia flag"], u: "1f1f9-1f1f3" }, { n: ["flag-to", "tonga flag"], u: "1f1f9-1f1f4" }, { n: ["flag-tr", "turkey flag"], u: "1f1f9-1f1f7" }, { n: ["flag-tt", "trinidad & tobago flag"], u: "1f1f9-1f1f9" }, { n: ["flag-tv", "tuvalu flag"], u: "1f1f9-1f1fb" }, { n: ["flag-tw", "taiwan flag"], u: "1f1f9-1f1fc" }, { n: ["flag-tz", "tanzania flag"], u: "1f1f9-1f1ff" }, { n: ["flag-ua", "ukraine flag"], u: "1f1fa-1f1e6" }, { n: ["flag-ug", "uganda flag"], u: "1f1fa-1f1ec" }, { n: ["flag-um", "u.s. outlying islands flag"], u: "1f1fa-1f1f2" }, { n: ["flag-un", "united nations flag"], u: "1f1fa-1f1f3" }, { n: ["us", "flag-us", "united states flag"], u: "1f1fa-1f1f8" }, { n: ["flag-uy", "uruguay flag"], u: "1f1fa-1f1fe" }, { n: ["flag-uz", "uzbekistan flag"], u: "1f1fa-1f1ff" }, { n: ["flag-va", "vatican city flag"], u: "1f1fb-1f1e6" }, { n: ["flag-vc", "st. vincent & grenadines flag"], u: "1f1fb-1f1e8" }, { n: ["flag-ve", "venezuela flag"], u: "1f1fb-1f1ea" }, { n: ["flag-vg", "british virgin islands flag"], u: "1f1fb-1f1ec" }, { n: ["flag-vi", "u.s. virgin islands flag"], u: "1f1fb-1f1ee" }, { n: ["flag-vn", "vietnam flag"], u: "1f1fb-1f1f3" }, { n: ["flag-vu", "vanuatu flag"], u: "1f1fb-1f1fa" }, { n: ["flag-wf", "wallis & futuna flag"], u: "1f1fc-1f1eb" }, { n: ["flag-ws", "samoa flag"], u: "1f1fc-1f1f8" }, { n: ["flag-xk", "kosovo flag"], u: "1f1fd-1f1f0" }, { n: ["flag-ye", "yemen flag"], u: "1f1fe-1f1ea" }, { n: ["flag-yt", "mayotte flag"], u: "1f1fe-1f1f9" }, { n: ["flag-za", "south africa flag"], u: "1f1ff-1f1e6" }, { n: ["flag-zm", "zambia flag"], u: "1f1ff-1f1f2" }, { n: ["flag-zw", "zimbabwe flag"], u: "1f1ff-1f1fc" }, { n: ["england flag", "flag-england"], u: "1f3f4-e0067-e0062-e0065-e006e-e0067-e007f" }, { n: ["scotland flag", "flag-scotland"], u: "1f3f4-e0067-e0062-e0073-e0063-e0074-e007f" }, { n: ["wales flag", "flag-wales"], u: "1f3f4-e0067-e0062-e0077-e006c-e0073-e007f" } ] }; // src/components/Spaces/TreeView/FileStickerMenu/FileStickerMenu.tsx var import_obsidian10 = require("obsidian"); // src/schemas/spaces.ts var vaultSchema = { uniques: ["path"], cols: ["path", "parent", "created", "sticker", "color", "folder", "rank"], rows: [] }; var spaceSchema = { uniques: ["name"], cols: ["name", "sticker", "color", "pinned", "sort", "def", "rank"], rows: [] }; var spaceItemsSchema = { uniques: [], cols: ["space", "path", "rank"], rows: [] }; // src/dispatch/spaces.ts var dispatchSpaceDatabaseFileChanged = (type) => { let evt = new CustomEvent(eventTypes.spacesChange, { detail: { changeType: type } }); window.dispatchEvent(evt); }; var onFileCreated2 = async (plugin, newPath, folder) => { var _a2; const parent = (_a2 = getAbstractFileAtPath(app, newPath).parent) == null ? void 0 : _a2.path; const db = plugin.spaceDBInstance(); insertIntoDB(db, { vault: { ...vaultSchema, rows: [ { path: newPath, parent, created: Math.trunc(Date.now() / 1e3).toString(), folder: folder ? "true" : "false" } ] } }); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("vault"); }; var onFileDeleted2 = (plugin, oldPath) => { const db = plugin.spaceDBInstance(); deleteFromDB(db, "vault", `path = '${sanitizeSQLStatement(oldPath)}'`); deleteFromDB(db, "spaceItems", `path = '${sanitizeSQLStatement(oldPath)}'`); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("vault"); }; var onFileChanged2 = (plugin, oldPath, newPath) => { const newFolderPath = getFolderPathFromString(newPath); const db = plugin.spaceDBInstance(); updateDB( db, { vault: { uniques: [], cols: ["path", "parent"], rows: [{ path: newPath, oldPath, parent: newFolderPath }] } }, "path", "oldPath" ); updateDB( db, { spaceItems: { uniques: [], cols: ["path"], rows: [{ path: newPath, oldPath }] } }, "path", "oldPath" ); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("vault"); }; var onFolderChanged2 = (plugin, oldPath, newPath) => { const newFolderPath = getFolderFromPath(app, newPath).parent.path; const db = plugin.spaceDBInstance(); updateDB( db, { vault: { uniques: [], cols: ["path", "parent"], rows: [{ path: newPath, oldPath, parent: newFolderPath }] } }, "path", "oldPath" ); execQuery( db, `UPDATE vault SET parent=REPLACE(parent,'${sanitizeSQLStatement( oldPath )}','${sanitizeSQLStatement( newPath )}') WHERE parent LIKE '${sanitizeSQLStatement(oldPath)}%';` ); execQuery( db, `UPDATE vault SET path=REPLACE(path,'${sanitizeSQLStatement( oldPath )}','${sanitizeSQLStatement( newPath )}') WHERE path LIKE '${sanitizeSQLStatement(oldPath)}%/';` ); updateDB( db, { spaceItems: { uniques: [], cols: ["path"], rows: [{ path: newPath, oldPath }] } }, "path", "oldPath" ); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("vault"); }; var onFolderDeleted2 = (plugin, oldPath) => { const db = plugin.spaceDBInstance(); deleteFromDB( db, "vault", `path = '${sanitizeSQLStatement( oldPath )}' OR parent LIKE '${sanitizeSQLStatement(oldPath)}%'` ); deleteFromDB(db, "spaceItems", `path = '${sanitizeSQLStatement(oldPath)}'`); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("vault"); }; // src/utils/spaces/spaces.ts var import_obsidian9 = require("obsidian"); var rebuildIndex = async (plugin) => { console.time("Reindex Spaces Data"); const db = plugin.spaceDBInstance(); indexCurrentFileTree(db); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("vault"); console.timeEnd("Reindex Spaces Data"); }; var spaceItemToTreeNode = (space, collapsed, sortable) => { return { id: space.name, spaceItem: space, parentId: null, depth: 0, index: 0, space: space.name, item: null, collapsed, sortable }; }; var vaulItemToTreeNode = (item, space, path, depth, i4, collapsed, sortable) => ({ item, file: getAbstractFileAtPath(app, item.path), space, id: (space == "/" ? "" : space) + "//" + item.path, parentId: (space == "/" ? "" : space) + "//" + path, depth, index: i4, collapsed, sortable }); var folderSortFn = (sortStrategy, direction) => (a5, b4) => { if (sortStrategy == "rank") { return a5.rank.localeCompare(b4.rank, void 0, { numeric: true }); } const sortFns = [ compareByField("folder", false), compareByField(sortStrategy, direction) ]; return sortFns.reduce((p3, c4) => { return p3 == 0 ? c4(a5, b4) : p3; }, 0); }; var flattenedTreeFromVaultItems = (root, space, vaultItems, openNodes, depth, sortStrategy, direction) => { if (!vaultItems[root]) { return []; } const flattenTree = (path, vaultItems2, openNodes2, depth2, index) => { let items = []; let i4 = index; vaultItems2[path].sort(folderSortFn(sortStrategy, direction)).forEach((item) => { const collapsed = !openNodes2.includes(item.path); const node = vaulItemToTreeNode( item, space, path, depth2, i4, collapsed, sortStrategy == "rank" ); if (node.file) items.push(node); i4 = i4 + 1; if (vaultItems2[item.path] && !collapsed) { items.push( ...flattenTree(item.path, vaultItems2, openNodes2, depth2 + 1, i4) ); } }); return items; }; return flattenTree(root, vaultItems, openNodes, depth, 0); }; var vaultItemForPath = (plugin, path) => { var _a2; if (!path) return null; const db = plugin.spaceDBInstance(); const table = selectDB(db, "vault", `path='${sanitizeSQLStatement(path)}'`); return (_a2 = table == null ? void 0 : table.rows) == null ? void 0 : _a2[0]; }; var saveFileSticker = (plugin, path, sticker) => { const db = plugin.spaceDBInstance(); updateDB( db, { vault: { ...vaultSchema, cols: ["path", "sticker"], rows: [{ path, sticker }] } }, "path", "path" ); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("sticker"); }; var saveFileColor = (plugin, path, color) => { const db = plugin.spaceDBInstance(); updateDB( db, { vault: { ...vaultSchema, cols: ["path", "color"], rows: [{ path, color }] } }, "path", "path" ); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("sticker"); }; var saveSpaceSticker = (plugin, name, sticker) => { const db = plugin.spaceDBInstance(); updateDB( db, { spaces: { ...spaceSchema, cols: ["name", "sticker"], rows: [{ name, sticker }] } }, "name", "name" ); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("space"); }; var updateFileRank = (plugin, item, vaultTree, rank) => { const db = plugin.spaceDBInstance(); if (Object.keys(vaultTree).includes(item.parent)) { let fixedRank = rank; if (parseInt(item.rank) > rank) fixedRank = rank + 1; const newItems = insert( vaultTree[item.parent].filter((f4) => f4.path != item.path), fixedRank, item ).map((f4, index) => ({ path: f4.path, rank: index.toString() })); updateDB( db, { vault: { ...vaultSchema, cols: ["path", "rank"], rows: newItems } }, "path", "path" ); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("vault"); } }; var moveAFileToNewParentAtIndex = (plugin, item, newParent, vaultTree, index) => { var _a2; const currFile = getAbstractFileAtPath(app, item.path); const newPath = newParent == "/" ? currFile.name : newParent + "/" + currFile.name; const newItem = { ...item, path: newPath, parent: newParent, rank: index.toString() }; if (Object.keys(vaultTree).includes(newParent)) { vaultTree[newParent] = insert(vaultTree[newParent], index, newItem); const db = plugin.spaceDBInstance(); const table = selectDB( db, "vault", `parent='${sanitizeSQLStatement(newParent)}'` ); const rows = insert( (_a2 = table == null ? void 0 : table.rows.sort( (a5, b4) => a5.rank.localeCompare(b4.rank, void 0, { numeric: true }) )) != null ? _a2 : [], index, newItem ).map((f4, index2) => ({ ...f4, rank: index2.toString() })); insertIntoDB(db, { vault: { ...vaultSchema, rows: [newItem] } }); deleteFromDB(db, "vault", `path='${sanitizeSQLStatement(item.path)}'`); updateDB( db, { vault: { ...vaultSchema, cols: ["path", "rank"], rows } }, "path", "path" ); plugin.saveSpacesDB(); const afile = getAbstractFileAtPath(app, item.path); app.fileManager.renameFile(afile, newPath); } else { const afile = getAbstractFileAtPath(app, item.path); app.fileManager.renameFile(afile, newPath); } }; var insertSpaceAtIndex = (plugin, space, pinned, rank, def) => { const db = plugin.spaceDBInstance(); let newSpace = { name: space, pinned: pinned ? "true" : "false", def }; const spaces2 = retrieveSpaces(plugin); const spaceExists = spaces2.find((f4) => f4.name == space); let fixedRank = rank; if (spaceExists) { updateDB( db, { spaces: { ...spaceSchema, rows: [{ ...spaceExists, ...newSpace }] } }, "name", "name" ); if (parseInt(spaceExists.rank) < rank) fixedRank = rank - 1; } else { insertIntoDB(db, { spaces: { ...spaceSchema, rows: [newSpace] } }); } const newSpaces = insert( spaces2.filter((f4) => f4.name != space), fixedRank, newSpace ).map((f4, index) => ({ name: f4.name, rank: index.toString() })); updateDB( db, { spaces: { ...spaceSchema, cols: ["name", "rank"], rows: newSpaces } }, "name", "name" ); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("space"); }; var insertSpaceItemAtIndex = (plugin, spaceName, path, rank) => { var _a2; const db = plugin.spaceDBInstance(); const space = retrieveSpaces(plugin).find((f4) => f4.name == spaceName); if (!space) return; let newSpace = { space: space.name, path, rank: rank.toString() }; const spaceItems = retrieveSpaceItems(plugin, [space]); const spaceExists = (_a2 = spaceItems[space.name]) != null ? _a2 : []; const pathExists = spaceExists.find((f4) => f4.path == path); let fixedRank = rank; if (!pathExists) { insertIntoDB(db, { spaceItems: { ...spaceItemsSchema, rows: [newSpace] } }); fixedRank = rank + 1; } else { if (parseInt(pathExists.rank) > rank) fixedRank = rank + 1; } const newSpaceItems = insert( spaceExists.filter((f4) => f4.path != path), fixedRank, newSpace ).map((f4, index) => ({ space: f4.space, path: f4.path, rank: index.toString() })); updateDB( db, { spaceItems: { ...spaceItemsSchema, rows: newSpaceItems } }, `space='${space.name}' AND path`, "path" ); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("space"); }; var renameSpace = (plugin, space, newName) => { const db = plugin.spaceDBInstance(); updateDB( db, { spaces: { ...spaceSchema, cols: ["name"], rows: [{ oldName: space, name: newName }] } }, "name", "oldName" ); updateDB( db, { spaceItems: { ...spaceItemsSchema, cols: ["space"], rows: [{ oldSpace: space, space: newName }] } }, "space", "oldSpace" ); plugin.saveSpacesDB(); plugin.settings.expandedSpaces = plugin.settings.expandedSpaces.map( (f4) => f4 == space ? newName : f4 ); plugin.saveSettings(); dispatchSpaceDatabaseFileChanged("space"); }; var removeSpace = (plugin, space) => { const db = plugin.spaceDBInstance(); deleteFromDB(db, "spaces", `name='${sanitizeSQLStatement(space)}'`); deleteFromDB(db, "spaceItems", `space='${sanitizeSQLStatement(space)}'`); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("space"); }; var updateSpaceSort = (plugin, space, sort) => { const db = plugin.spaceDBInstance(); updateDB( db, { spaces: { ...spaceSchema, cols: ["name", "sort"], rows: [{ name: space, sort: JSON.stringify(sort) }] } }, "name", "name" ); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("space"); }; var toggleSpacePin = (plugin, space, state) => { const db = plugin.spaceDBInstance(); updateDB( db, { spaces: { ...spaceSchema, cols: ["name", "pinned"], rows: [{ name: space, pinned: state ? "true" : "false" }] } }, "name", "name" ); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("space"); }; var addPathsToSpace = (plugin, space, paths) => { const db = plugin.spaceDBInstance(); insertIntoDB(db, { spaceItems: { ...spaceItemsSchema, rows: [...paths.map((p3) => ({ space, path: p3 }))] } }); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("space"); }; var removePathsFromSpace = (plugin, space, paths) => { const db = plugin.spaceDBInstance(); paths.forEach( (path) => deleteFromDB( db, "spaceItems", `space='${sanitizeSQLStatement(space)}' AND path='${sanitizeSQLStatement( path )}'` ) ); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("space"); }; var retrieveSpaces = (plugin) => { const db = plugin.spaceDBInstance(); const table = selectDB(db, "spaces"); if (table) { return table.rows.sort( (a5, b4) => a5.rank.localeCompare(b4.rank, void 0, { numeric: true }) ); } return []; }; var retrieveSpaceItems = (plugin, spaces2) => { const db = plugin.spaceDBInstance(); let retrievedSpaces = {}; spaces2.forEach((space) => { var _a2, _b2, _c2, _d2; const table = selectDB( db, "spaceItems", `space='${sanitizeSQLStatement(space.name)}'` ); let rows = (_a2 = table == null ? void 0 : table.rows) != null ? _a2 : []; if (((_b2 = space.def) == null ? void 0 : _b2.length) > 0) { const spaceItems = ((_d2 = (_c2 = selectDB(db, "vault", `parent='${sanitizeSQLStatement(space.def)}'`)) == null ? void 0 : _c2.rows) != null ? _d2 : []).filter(excludeVaultItemPredicate(plugin)); const extraItems = rows.filter( (f4) => !spaceItems.some((g4) => g4.path == f4.path) ); rows = rows.filter((f4) => !extraItems.some((g4) => f4.path == g4.path)); extraItems.forEach( (row) => deleteFromDB( db, "spaceItems", `space='${sanitizeSQLStatement( space.name )}' AND path='${sanitizeSQLStatement(row.path)}'` ) ); spaceItems.forEach((row) => { if (!rows.some((f4) => f4.path == row.path)) { const newItem = { space: space.name, path: row.path, rank: "0" }; insertIntoDB(db, { spaceItems: { ...spaceItemsSchema, rows: [newItem] } }); rows.push(newItem); } }); } retrievedSpaces[space.name] = rows.sort( (a5, b4) => a5.rank.localeCompare(b4.rank, void 0, { numeric: true }) ); }); return retrievedSpaces; }; var retrieveFolders = async (plugin, paths) => { const db = plugin.spaceDBInstance(); let retrievedFolders = {}; paths.forEach((folder) => { const table = selectDB( db, "vault", `parent='${sanitizeSQLStatement(folder)}'` ); if (table) { retrievedFolders[folder] = table.rows.filter( excludeVaultItemPredicate(plugin) ); } }); return retrievedFolders; }; var migrateIndex = async (plugin) => { console.time("Migrate Spaces Data"); const db = plugin.spaceDBInstance(); initiateDB(db); indexCurrentFileTree(db); mergeCurrentRanks(db, plugin.settings.folderRank); mergeExistingFileIcons(db, plugin.settings.fileIcons); mergeSpaces(db, plugin.settings.spaces); plugin.saveSpacesDB(); dispatchSpaceDatabaseFileChanged("vault"); plugin.settings.folderRank = null; plugin.settings.fileIcons = null; plugin.settings.spaces = null; plugin.saveSettings(); console.timeEnd("Migrate Spaces Data"); }; var initiateDB = (db) => { replaceDB(db, { vault: vaultSchema, spaces: spaceSchema, spaceItems: spaceItemsSchema }); }; var indexCurrentFileTree = (db) => { var _a2, _b2; let treeItems = []; import_obsidian9.Vault.recurseChildren(app.vault.getRoot(), (file) => { var _a3; treeItems.push({ path: file.path, parent: (_a3 = file.parent) == null ? void 0 : _a3.path, created: file instanceof import_obsidian9.TFile ? file.stat.ctime.toString() : void 0, folder: file instanceof import_obsidian9.TFolder ? "true" : "false" }); }); const currentPaths = (_b2 = (_a2 = selectDB(db, "vault")) == null ? void 0 : _a2.rows) != null ? _b2 : []; const deleteRows = currentPaths.filter( (item) => !treeItems.some((i4) => i4.path == item.path) ); const fixRows = currentPaths.filter( (item) => treeItems.some((i4) => i4.path == item.path && i4.parent != item.parent) ).map((item) => ({ ...item, ...treeItems.find((i4) => i4.path == item.path) })); const newRows = treeItems.filter( (item) => !currentPaths.some((i4) => i4.path == item.path) ); fixRows.forEach((row) => { updateDB(db, { vault: { ...vaultSchema, rows: [row] } }, "path", "path"); }); deleteRows.forEach((path) => { deleteFromDB(db, "vault", `path='${sanitizeSQLStatement(path.path)}'`); }); deleteRows.forEach((path) => { deleteFromDB(db, "spaceItems", `path='${sanitizeSQLStatement(path.path)}'`); }); const chunkSize = 20; for (let i4 = 0; i4 < newRows.length; i4 += chunkSize) { const chunk = newRows.slice(i4, i4 + chunkSize); insertIntoDB(db, { vault: { ...vaultSchema, rows: chunk } }); } }; var mergeExistingFileIcons = (db, fileIcons) => { const dbRows = fileIcons.map(([path, sticker]) => ({ path, sticker })); updateDB( db, { vault: { uniques: [], cols: ["sticker"], rows: dbRows } }, "path", "path" ); }; var mergeCurrentRanks = (db, ranks) => { const flattenStringTreeChildren = (path, children) => { const dbRows2 = []; children.forEach((item, index) => { dbRows2.push({ path: path + item.node, rank: index.toString() }); if (item.children.length > 0) { dbRows2.push( ...flattenStringTreeChildren(path + item.node + "/", item.children) ); } }); return dbRows2; }; const dbRows = flattenStringTreeChildren("", ranks.children); updateDB( db, { vault: { uniques: [], cols: ["rank"], rows: dbRows } }, "path", "path" ); }; var mergeSpaces = (db, sectionTrees) => { let spaces2 = []; let spaceItems = []; sectionTrees.forEach((space, index) => { spaces2.push({ name: space.section, rank: index.toString() }); spaceItems.push( ...space.children.map((f4, index2) => ({ space: space.section, path: f4, rank: index2.toString() })) ); }); insertIntoDB(db, { spaces: { ...spaceSchema, rows: spaces2 }, spaceItems: { ...spaceItemsSchema, rows: spaceItems } }); }; // src/utils/emoji.ts var unifiedToNative = (unified) => { let unicodes = unified.split("-"); let codePoints = unicodes.map((u4) => `0x${u4}`); return String.fromCodePoint(...codePoints); }; var saveFileIcons = (plugin, files, icon) => { files.forEach((file) => { saveFileSticker(plugin, file, icon); }); }; var saveFileColors = (plugin, files, icon) => { files.forEach((file) => { saveFileColor(plugin, file, icon); }); }; var saveSpaceIcon = (plugin, space, icon) => { saveSpaceSticker(plugin, space, icon); }; var removeSpaceIcon = (plugin, space) => { saveSpaceSticker(plugin, space, ""); }; var saveFileIcon = (plugin, data, icon) => { saveFileSticker(plugin, data.path, icon); }; var removeFileIcons = (plugin, files) => { files.forEach((file) => { saveFileSticker(plugin, file, ""); }); }; var removeFileIcon = (plugin, data) => { saveFileSticker(plugin, data.path, ""); }; // src/components/Spaces/TreeView/FileStickerMenu/FileStickerMenu.tsx var StickerModal = class extends import_obsidian10.FuzzySuggestModal { constructor(app2, setIcon) { super(app2); this.setIcon = setIcon; this.resultContainerEl.toggleClass("mk-sticker-modal", true); this.inputEl.focus(); this.emptyStateText = i18n_default.labels.findStickers; this.limit = 0; } renderSuggestion(item, el) { el.innerHTML = unifiedToNative(item.item.unicode); el.setAttr("aria-label", item.item.label); } getItemText(item) { return item.label + item.desc; } getItems() { const allEmojis = Object.keys(emojis).reduce( (p3, c4) => [ ...p3, ...emojis[c4].map((e4) => ({ label: e4.n[0], desc: e4.n[1], variants: e4.v, unicode: e4.u })) ], [] ); return allEmojis; } onChooseItem(item, evt) { this.setIcon(item.unicode); } }; // src/components/FileSticker/FileSticker.tsx var FileSticker = (props2) => { const [vaultItem, setVaultItem] = p2( vaultItemForPath(props2.plugin, props2.filePath) ); const reloadIcon = (e4) => { if (e4.detail.changeType == "sticker") setVaultItem(vaultItemForPath(props2.plugin, props2.filePath)); }; h2(() => { if ((vaultItem == null ? void 0 : vaultItem.path) != props2.filePath) { setVaultItem(vaultItemForPath(props2.plugin, props2.filePath)); } window.addEventListener(eventTypes.spacesChange, reloadIcon); return () => { window.removeEventListener(eventTypes.spacesChange, reloadIcon); }; }, [props2.filePath]); const triggerStickerMenu = (e4) => { e4.stopPropagation(); let vaultChangeModal = new StickerModal( props2.plugin.app, (emoji) => saveFileSticker(props2.plugin, props2.filePath, emoji) ); vaultChangeModal.open(); }; const color = vaultItem == null ? void 0 : vaultItem.color; return /* @__PURE__ */ bn.createElement("div", { className: "mk-file-icon" }, /* @__PURE__ */ bn.createElement("button", { "aria-label": i18n_default.buttons.changeIcon, style: (color == null ? void 0 : color.length) > 0 ? { "--label-color": `${vaultItem.color}`, "--icon-color": `#ffffff` } : { "--icon-color": `var(--text-muted)` }, dangerouslySetInnerHTML: (vaultItem == null ? void 0 : vaultItem.sticker) ? { __html: unifiedToNative(vaultItem.sticker) } : (vaultItem == null ? void 0 : vaultItem.folder) == "true" ? { __html: color ? uiIconSet["mk-ui-folder-solid"] : uiIconSet["mk-ui-folder"] } : { __html: color ? uiIconSet["mk-ui-file-solid"] : uiIconSet["mk-ui-file"] }, onClick: (e4) => triggerStickerMenu(e4) })); }; // src/components/ui/modals/vaultChangeModals.ts var import_obsidian11 = require("obsidian"); var VaultChangeModal = class extends import_obsidian11.Modal { constructor(plugin, file, action, space) { super(plugin.app); this.file = file; this.action = action; this.plugin = plugin; this.space = space; } onOpen() { let { contentEl } = this; let myModal = this; let headerText; if (this.action === "rename") { headerText = i18n_default.labels.rename; } else if (this.action === "create folder") { headerText = i18n_default.labels.createFolder; } else if (this.action === "create note") { headerText = i18n_default.labels.createNote; } const headerEl = contentEl.createEl("div", { text: headerText }); headerEl.addClass("modal-title"); const inputEl = contentEl.createEl("input"); inputEl.style.cssText = "width: 100%; height: 2.5em; margin-bottom: 15px;"; if (this.action === "rename") { if (this.file.name.endsWith(".md")) { inputEl.value = this.file.name.substring( 0, this.file.name.lastIndexOf(".") ); } else { inputEl.value = this.file.name; } } inputEl.focus(); let changeButtonText; if (this.action === "rename") { changeButtonText = i18n_default.buttons.rename; } else if (this.action === "create folder") { changeButtonText = i18n_default.buttons.createFolder; } else if (this.action === "create note") { changeButtonText = i18n_default.buttons.createNote; } const changeButton = contentEl.createEl("button", { text: changeButtonText }); const cancelButton = contentEl.createEl("button", { text: i18n_default.buttons.cancel }); cancelButton.style.cssText = "float: right;"; cancelButton.addEventListener("click", () => { myModal.close(); }); const onClickAction = async () => { let newName = inputEl.value; if (this.action === "rename") { if (this.file.name.endsWith(".md")) newName = newName + ".md"; this.app.fileManager.renameFile( this.file, this.file.parent.path == "/" ? newName : this.file.parent.path + "/" + newName ); } else if (this.action === "create folder") { const path = !this.file || this.file.path == "/" ? newName : this.file.path + "/" + newName; if (getAbstractFileAtPath(app, path)) { new import_obsidian11.Notice(i18n_default.notice.folderExists); return; } this.app.vault.createFolder(path); if (this.space != "/") addPathsToSpace(this.plugin, this.space, [path]); } myModal.close(); }; changeButton.addEventListener("click", onClickAction); inputEl.addEventListener("keydown", (e4) => { if (e4.key === "Enter") onClickAction(); }); } onClose() { let { contentEl } = this; contentEl.empty(); } }; var MoveSuggestionModal = class extends import_obsidian11.FuzzySuggestModal { constructor(app2, files) { super(app2); this.files = files; } getItemText(item) { return item.path; } getItems() { return getAllFoldersInVault(this.app); } onChooseItem(item, evt) { this.files.forEach((f4) => { const file = getAbstractFileAtPath(app, f4); if (file) { this.app.vault.rename(file, item.path + "/" + file.name); } }); } }; function getAllFoldersInVault(app2) { let folders = []; let rootFolder = app2.vault.getRoot(); folders.push(rootFolder); function recursiveFx(folder) { for (let child of folder.children) { if (child instanceof import_obsidian11.TFolder) { let childFolder = child; folders.push(childFolder); if (childFolder.children) recursiveFx(childFolder); } } } recursiveFx(rootFolder); return folders; } // src/components/ui/modals/editSpaceModal.ts var import_obsidian12 = require("obsidian"); var EditSpaceModal = class extends import_obsidian12.Modal { constructor(plugin, space, action) { super(plugin.app); this.space = space; this.action = action; this.plugin = plugin; } onOpen() { let { contentEl } = this; let myModal = this; let headerText; if (this.action === "rename") { headerText = i18n_default.labels.renameSection; } else if (this.action === "create") { headerText = i18n_default.labels.createSection; } const headerEl = contentEl.createEl("div", { text: headerText }); headerEl.addClass("modal-title"); const inputEl = contentEl.createEl("input"); inputEl.style.cssText = "width: 100%; height: 2.5em; margin-bottom: 15px;"; if (this.action === "rename") { inputEl.value = this.space; } inputEl.focus(); let changeButtonText; if (this.action === "rename") { changeButtonText = i18n_default.buttons.rename; } else if (this.action === "create") { changeButtonText = i18n_default.buttons.createSection; } const changeButton = contentEl.createEl("button", { text: changeButtonText }); const cancelButton = contentEl.createEl("button", { text: i18n_default.buttons.cancel }); cancelButton.style.cssText = "float: right;"; cancelButton.addEventListener("click", () => { myModal.close(); }); const onClickAction = async () => { let newName = inputEl.value.replace(/\//g, ""); if (newName.length == 0) { new import_obsidian12.Notice(i18n_default.notice.newSpaceName); return; } if (retrieveSpaces(this.plugin).find((f4) => f4.name == newName)) { new import_obsidian12.Notice(i18n_default.notice.duplicateSpaceName); return; } if (this.action === "rename") { renameSpace(this.plugin, this.space, newName); } else if (this.action === "create") { insertSpaceAtIndex(this.plugin, newName, false, 0); } myModal.close(); }; changeButton.addEventListener("click", onClickAction); inputEl.addEventListener("keydown", (e4) => { if (e4.key === "Enter") onClickAction(); }); } onClose() { let { contentEl } = this; contentEl.empty(); } }; // src/hooks/useLongPress.tsx function isMouseEvent(e4) { return e4 && "screenX" in e4; } // src/components/ui/menus/fileMenu.tsx var import_obsidian13 = require("obsidian"); // src/utils/color.ts var colors = [ ["Red", "#eb3b5a"], ["Orange", "#fa8231"], ["Yellow", "#f7b731"], ["Green", "#20bf6b"], ["Turquoise", "#0fb9b1"], ["Teal", "#2d98da"], ["Blue", "#3867d6"], ["Purple", "#8854d0"], ["Charcoal", "#4b6584"] ]; // src/components/ui/menus/fileMenu.tsx var triggerSectionMenu = (plugin, spaceName, spaces2, e4) => { const fileMenu = new import_obsidian13.Menu(); const space = spaces2.find((f4) => f4.name == spaceName); fileMenu.addItem((menuItem) => { var _a2; const pinned = ((_a2 = spaces2.find((f4) => f4.name == spaceName)) == null ? void 0 : _a2.pinned) == "true"; if (pinned) { menuItem.setTitle(i18n_default.menu.unpinSpace); } else { menuItem.setTitle(i18n_default.menu.pinSpace); } menuItem.setIcon("pin"); menuItem.onClick((ev) => { toggleSpacePin(plugin, spaceName, !pinned); }); }); if (plugin.settings.spacesStickers) { fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.buttons.changeIcon); menuItem.setIcon("lucide-sticker"); menuItem.onClick((ev) => { let vaultChangeModal = new StickerModal( plugin.app, (emoji) => saveSpaceIcon(plugin, spaceName, emoji) ); vaultChangeModal.open(); }); }); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.buttons.removeIcon); menuItem.setIcon("lucide-file-minus"); menuItem.onClick((ev) => { removeSpaceIcon(plugin, spaceName); }); }); } fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.collapseAll); menuItem.setIcon("lucide-chevrons-down-up"); menuItem.onClick((ev) => { plugin.settings.expandedFolders = { ...plugin.settings.expandedFolders, [spaceName]: [] }; plugin.saveSettings(); }); }); fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { const sortOption = ["rank", true]; menuItem.setTitle(i18n_default.menu.customSort); menuItem.setChecked( space.sort == JSON.stringify(sortOption) || space.sort == "" ); menuItem.onClick((ev) => { updateSpaceSort(plugin, spaceName, sortOption); }); }); fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { const sortOption = ["path", true]; menuItem.setTitle(i18n_default.menu.fileNameSortAlphaAsc); menuItem.setChecked(space.sort == JSON.stringify(sortOption)); menuItem.onClick((ev) => { updateSpaceSort(plugin, spaceName, sortOption); }); }); fileMenu.addItem((menuItem) => { const sortOption = ["path", false]; menuItem.setTitle(i18n_default.menu.fileNameSortAlphaDesc); menuItem.setChecked(space.sort == JSON.stringify(sortOption)); menuItem.onClick((ev) => { updateSpaceSort(plugin, spaceName, sortOption); }); }); fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { const sortOption = ["created", false]; menuItem.setTitle(i18n_default.menu.createdTimeSortAsc); menuItem.setChecked(space.sort == JSON.stringify(sortOption)); menuItem.onClick((ev) => { updateSpaceSort(plugin, spaceName, sortOption); }); }); fileMenu.addItem((menuItem) => { const sortOption = ["created", true]; menuItem.setTitle(i18n_default.menu.createdTimeSortDesc); menuItem.setChecked(space.sort == JSON.stringify(sortOption)); menuItem.onClick((ev) => { updateSpaceSort(plugin, spaceName, sortOption); }); }); fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.edit); menuItem.setIcon("pencil"); menuItem.onClick((ev) => { let vaultChangeModal = new EditSpaceModal( plugin, space.name, "rename" ); vaultChangeModal.open(); }); }); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.deleteSpace); menuItem.setIcon("trash"); menuItem.onClick((ev) => { removeSpace(plugin, space.name); }); }); if (isMouseEvent(e4)) { fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); } else { fileMenu.showAtPosition({ x: e4.nativeEvent.locationX, y: e4.nativeEvent.locationY }); } return false; }; var triggerMultiFileMenu = (plugin, selectedFiles2, e4) => { const files = selectedFiles2.map((s5) => s5.item.path); const spaces2 = retrieveSpaces(plugin); const spaceItems = retrieveSpaceItems(plugin, spaces2); const fileMenu = new import_obsidian13.Menu(); fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.spaceTitle); menuItem.setDisabled(true); }); spaces2.map((f4) => { fileMenu.addItem((menuItem) => { const allIn = files.reduce( (p3, c4) => { var _a2; return p3 ? (_a2 = spaceItems[f4.name]) == null ? void 0 : _a2.some((g4) => g4.path == c4) : p3; }, true ); if (allIn) { menuItem.setIcon("checkmark"); menuItem.setTitle(f4.name); } else { menuItem.setTitle(f4.name); menuItem.setIcon("plus"); } menuItem.onClick((ev) => { if (allIn) { removePathsFromSpace(plugin, f4.name, files); } else { addPathsToSpace(plugin, f4.name, files); } }); }); }); if (plugin.settings.spacesStickers) { fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setIcon("palette"); disclosureMenuItem( menuItem, false, false, i18n_default.menu.changeColor, "", [ { name: "None", value: "" }, ...colors.map((f4) => ({ name: f4[0], value: f4[1] })) ], (_5, values) => { saveFileColors(plugin, files, values[0]); } ); }); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.buttons.changeIcon); menuItem.setIcon("lucide-sticker"); menuItem.onClick((ev) => { let vaultChangeModal = new StickerModal( plugin.app, (emoji) => saveFileIcons(plugin, files, emoji) ); vaultChangeModal.open(); }); }); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.buttons.removeIcon); menuItem.setIcon("lucide-file-minus"); menuItem.onClick((ev) => { removeFileIcons(plugin, files); }); }); } fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.deleteFiles); menuItem.setIcon("trash"); menuItem.onClick((ev) => { deleteFiles(plugin, files); }); }); fileMenu.addItem((menuItem) => { menuItem.setIcon("go-to-file"); menuItem.setTitle(i18n_default.menu.openFilePane); menuItem.onClick((ev) => { files.forEach( (file) => openAFile(getAbstractFileAtPath(app, file), plugin, true) ); }); }); if (!internalPluginLoaded("file-explorer", plugin.app)) { fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.moveFile); menuItem.setIcon("paper-plane"); menuItem.onClick((ev) => { let fileMoveSuggester = new MoveSuggestionModal(plugin.app, files); fileMoveSuggester.open(); }); }); } if (isMouseEvent(e4)) { fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); } else { fileMenu.showAtPosition({ x: e4.nativeEvent.locationX, y: e4.nativeEvent.locationY }); } return false; }; var triggerFileMenu = (plugin, file, isFolder, e4) => { const spaces2 = retrieveSpaces(plugin); const spaceItems = retrieveSpaceItems(plugin, spaces2); const fileMenu = new import_obsidian13.Menu(); if (isFolder) { fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setIcon("edit"); menuItem.setTitle(i18n_default.buttons.createNote); menuItem.onClick((ev) => { newFileInFolder(plugin, file); }); }); fileMenu.addItem((menuItem) => { menuItem.setIcon("folder-plus"); menuItem.setTitle(i18n_default.buttons.createFolder); menuItem.onClick((ev) => { let vaultChangeModal = new VaultChangeModal( plugin, file, "create folder", "/" ); vaultChangeModal.open(); }); }); } fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.spaceTitle); menuItem.setDisabled(true); }); spaces2.map((f4, i4) => { var _a2; const itemExists = (_a2 = spaceItems[f4.name]) == null ? void 0 : _a2.some((g4) => g4.path == file.path); fileMenu.addItem((menuItem) => { var _a3; menuItem.setTitle(f4.name); if (((_a3 = f4.def) == null ? void 0 : _a3.length) > 0) { menuItem.setDisabled(true); menuItem.setIcon("folder"); } else { if (itemExists) { menuItem.setIcon("checkmark"); } else { menuItem.setIcon("plus"); } menuItem.onClick((ev) => { if (!itemExists) { insertSpaceItemAtIndex(plugin, f4.name, file.path, 0); } else { removePathsFromSpace(plugin, f4.name, [file.path]); } }); } }); }); if (isFolder) { fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.createFolderSpace); menuItem.setIcon("plus-square"); menuItem.onClick((ev) => { insertSpaceAtIndex(plugin, file.name, false, 0, file.path); }); }); } if (plugin.settings.spacesStickers) { fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setIcon("palette"); disclosureMenuItem( menuItem, false, false, i18n_default.menu.changeColor, "", [ { name: "None", value: "" }, ...colors.map((f4) => ({ name: f4[0], value: f4[1] })) ], (_5, values) => { saveFileColor(plugin, file.path, values[0]); } ); }); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.buttons.changeIcon); menuItem.setIcon("lucide-sticker"); menuItem.onClick((ev) => { let vaultChangeModal = new StickerModal( plugin.app, (emoji) => saveFileIcon(plugin, file, emoji) ); vaultChangeModal.open(); }); }); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.buttons.removeIcon); menuItem.setIcon("lucide-file-minus"); menuItem.onClick((ev) => { removeFileIcon(plugin, file); }); }); } fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.rename); menuItem.setIcon("pencil"); menuItem.onClick((ev) => { let vaultChangeModal = new VaultChangeModal(plugin, file, "rename"); vaultChangeModal.open(); }); }); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.delete); menuItem.setIcon("trash"); menuItem.onClick((ev) => { let deleteOption = plugin.settings.deleteFileOption; if (deleteOption === "permanent") { plugin.app.vault.delete(file, true); } else if (deleteOption === "system-trash") { plugin.app.vault.trash(file, true); } else if (deleteOption === "trash") { plugin.app.vault.trash(file, false); } }); }); fileMenu.addItem((menuItem) => { menuItem.setIcon("go-to-file"); menuItem.setTitle(i18n_default.menu.openFilePane); menuItem.onClick((ev) => { openFileInNewPane(plugin, { ...file, isFolder }); }); }); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.duplicate); menuItem.setIcon("documents"); menuItem.onClick((ev) => { if (file.basename && file.extension) plugin.app.vault.copy( file, `${file.parent.path}/${file.basename} 1.${file.extension}` ); }); }); if (!internalPluginLoaded("file-explorer", plugin.app)) { fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.moveFile); menuItem.setIcon("paper-plane"); menuItem.onClick((ev) => { let fileMoveSuggester = new MoveSuggestionModal(plugin.app, [ file.path ]); fileMoveSuggester.open(); }); }); } plugin.app.workspace.trigger("file-menu", fileMenu, file, "file-explorer"); if (isMouseEvent(e4)) { fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); } else { fileMenu.showAtPosition({ x: e4.nativeEvent.locationX, y: e4.nativeEvent.locationY }); } return false; }; // src/components/ContextView/DataTypeView/FileCell.tsx var import_obsidian14 = require("obsidian"); var FileCell = (props2) => { var _a2; const fileOrCleanPath = (f4) => { if (!f4) return { path: "" }; const isInFolder = !props2.isFolder || f4.includes(props2.folder); const fileExists2 = getAbstractFileAtPath(app, f4); const cleanPath = (path) => path.replace(props2.folder + "/", "").replace(".md", ""); return isInFolder ? fileExists2 ? { path: f4, file: fileExists2 } : { path: cleanPath(f4) } : { path: f4 }; }; const initialValue = (props2.multi ? (_a2 = splitString(props2.initialValue)) != null ? _a2 : [] : [props2.initialValue]).map((f4) => fileOrCleanPath(f4)); const [value, setValue] = p2(initialValue); const ref = _2(null); const onKeyDown = (e4) => { e4.stopPropagation(); e4.key == "Enter" && e4.target.blur(); }; const fileExists = (name) => { if (!name) return false; return getAbstractFileAtPath(app, `${props2.folder}/${name}.md`) ? true : false; }; const onBlur = () => { var _a3; if (!ref.current) return; if (fileExists((_a3 = ref.current) == null ? void 0 : _a3.value)) { new import_obsidian14.Notice(i18n_default.notice.fileExists); } else { props2.saveValue(ref.current.value); props2.setEditMode(null); } }; const newFile = async (file) => { const filePath = file.path.replace(/\//g, "").replace(/\./g, ""); const path = `${props2.folder}/${filePath}.md`; if (filePath.length == 0) { return; } if (fileExists(path)) { new import_obsidian14.Notice(i18n_default.notice.fileExists); } else { await createNewMarkdownFile( props2.plugin, getAbstractFileAtPath(app, props2.folder), filePath ); } }; const deleteRow = () => { props2.deleteRow(); }; h2(() => { var _a3; if (props2.editMode == 2) { (_a3 = ref == null ? void 0 : ref.current) == null ? void 0 : _a3.focus(); } }, [props2.editMode]); return /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-file" }, value.map((v3, i4) => { var _a3; if (props2.editMode == 0) { if (v3.file) { return /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-file-title" }, v3 ? v3.file instanceof import_obsidian14.TFile ? fileNameToString(v3.file.name) : v3.file.name : "", (v3 == null ? void 0 : v3.file) instanceof import_obsidian14.TFile && v3.file.extension != "md" && /* @__PURE__ */ bn.createElement("span", { className: "nav-file-tag" }, (_a3 = v3.file) == null ? void 0 : _a3.extension), /* @__PURE__ */ bn.createElement("button", { "aria-label": i18n_default.buttons.toggleFlow, className: "mk-cell-file-flow mk-inline-button", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-flow-hover"] }, onClick: () => props2.openFlow && props2.openFlow() })); } else { return /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-file-title" }, v3.path); } } if (v3.file) { return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-file-item", onContextMenu: (e4) => triggerFileMenu( props2.plugin, v3.file, v3.file instanceof import_obsidian14.TFolder, e4 ) }, /* @__PURE__ */ bn.createElement(FileSticker, { plugin: props2.plugin, filePath: v3.file.path }), /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-file-name", onClick: (e4) => openFile( { ...v3.file, isFolder: v3.file instanceof import_obsidian14.TFolder }, props2.plugin, e4.ctrlKey || e4.metaKey ) }, v3 ? v3.file instanceof import_obsidian14.TFile ? fileNameToString(v3.file.name) : v3.file.name : ""))); } return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-file-item" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-file-icon" }, /* @__PURE__ */ bn.createElement("button", { onClick: (e4) => newFile(v3), dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-new-file"] } })), props2.editMode > 1 ? /* @__PURE__ */ bn.createElement("input", { className: "mk-cell-file-name", type: "text", placeholder: "Untitled", ref, value: v3.path, onKeyDown, onBlur }) : /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-file-name" }, v3.path))); })); }; // src/components/ContextView/DataTypeView/FilePropertyCell.tsx var FilePropertyCell = (props2) => { const { property } = props2; const [cache, setCache] = p2(null); const initialValue = props2.initialValue; if (property == "folder") { return /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-fileprop", onClick: () => { openTFolder( getAbstractFileAtPath(app, initialValue), props2.plugin, false ); } }, folderPathToString(initialValue)); } if (property == "extension") { return /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-fileprop" }, initialValue); } else if (property == "ctime" || property == "mtime") { const date = new Date(parseInt(initialValue)).getTime() ? new Date(parseInt(initialValue)) : null; return /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-fileprop" }, date && formatDistance3(new Date(date), new Date(), { addSuffix: true })); } else if (property == "size") { return /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-fileprop" }, initialValue); } return /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-fileprop" }, initialValue); }; // src/components/ContextView/DataTypeView/NumberCell.tsx var NumberCell = (props2) => { const { initialValue, saveValue } = props2; const [value, setValue] = bn.useState(initialValue); const ref = _2(null); const onBlur = () => { if (initialValue != value) saveValue(value); }; const onKeyDown = (e4) => { e4.stopPropagation(); if (e4.key == "Enter") { e4.target.blur(); props2.setEditMode(null); } if (e4.key == "Escape") { setValue(initialValue); e4.target.blur(); props2.setEditMode(null); } }; bn.useEffect(() => { setValue(initialValue); }, [initialValue]); h2(() => { var _a2; if (props2.editMode == 2) { (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.focus(); } }, [props2.editMode]); return props2.editMode > 1 ? /* @__PURE__ */ bn.createElement("input", { className: "mk-cell-text", type: "number", step: "any", ref, value, onChange: (e4) => setValue(e4.target.value), onKeyDown, onBlur }) : /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-number" }, value); }; // src/components/ContextView/DataTypeView/TextCell.tsx var TextCell = (props2) => { const { initialValue, saveValue } = props2; const [value, setValue] = bn.useState(initialValue); const ref = _2(null); const onBlur = () => { if (initialValue != value) saveValue(value); }; const onKeyDown = (e4) => { e4.stopPropagation(); if (e4.key == "Enter") { e4.target.blur(); props2.setEditMode(null); } if (e4.key == "Escape") { setValue(initialValue); e4.target.blur(); props2.setEditMode(null); } }; bn.useEffect(() => { setValue(initialValue); }, [initialValue]); h2(() => { var _a2; if (props2.editMode == 2) { (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.focus(); } }, [props2.editMode]); return props2.editMode > 1 ? /* @__PURE__ */ bn.createElement("input", { onClick: (e4) => e4.stopPropagation(), className: "mk-cell-text", ref, type: "text", value, onChange: (e4) => setValue(e4.target.value), onKeyDown, onBlur }) : /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-text" }, value); }; // src/components/ui/menus/propertyMenu.tsx var import_obsidian15 = require("obsidian"); var PropertyMenuComponent = (props2) => { var _a2; const [field, setField] = p2(props2.field); const selectedType = (_5, value) => { const newField = { ...field, type: value[0], value: getNewValueForType(field, value) }; setField(newField); props2.saveField(newField); }; const selectedValue = (_5, value) => { const newField = { ...field, value: value[0] }; setField(newField); props2.saveField(newField); }; const selectedContext = (_5, value) => { const newField = { ...field, value: value[0] }; setField(newField); props2.saveContext(newField, value); }; const toggleMulti = () => { const newField = { ...field, type: field.type == fieldType.multiType ? fieldType.type : fieldType.multiType }; setField(newField); props2.saveField(newField); }; const fieldType = (_a2 = fieldTypes.find( (f4) => f4.type == field.type || f4.multiType == field.type )) != null ? _a2 : fieldTypes[0]; const getNewValueForType = (f4, value) => { if (value[0].startsWith("option")) { return props2.options.join(","); } return value[0] == fieldType.type || value[0] == fieldType.multiType ? f4.value : null; }; const selectType = (e4) => { showSelectMenu( e4.target.getBoundingClientRect(), { multi: false, editable: false, searchable: false, saveOptions: selectedType, value: [], showAll: true, options: fieldTypes.filter((f4) => !f4.restricted).map((f4, i4) => ({ id: i4 + 1, name: f4.label, value: f4.type, icon: "" })) } ); }; const selectContext = (e4) => { var _a3; showSelectMenu( e4.target.getBoundingClientRect(), { multi: false, editable: true, searchable: true, saveOptions: selectedContext, placeholder: i18n_default.labels.propertyContext, value: [(_a3 = field.value) != null ? _a3 : ""], options: loadTags(props2.plugin).map((m5) => ({ name: m5, value: m5 })) } ); }; const selectFileProp = (e4) => { const properties2 = props2.fields.filter((f4) => f4.type == "file" || f4.type == "context").reduce((p3, c4) => { var _a3, _b2; return [...p3, ...c4.type == "file" ? filePropTypes.map((f4) => ({ name: c4.name + "." + f4.name, value: c4.name + "." + f4.value })) : (_b2 = (_a3 = props2.context[c4.value]) == null ? void 0 : _a3.cols.filter((f4) => f4.hidden != "true").map((f4) => ({ name: c4.name + "." + f4.name, value: c4.name + "." + f4.name }))) != null ? _b2 : []]; }, []); showSelectMenu( e4.target.getBoundingClientRect(), { multi: false, editable: true, searchable: false, saveOptions: selectedValue, value: [], options: properties2, showAll: true } ); }; return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { className: "menu-item", onClick: (e4) => selectType(e4) }, /* @__PURE__ */ bn.createElement("span", null, i18n_default.labels.propertyType), /* @__PURE__ */ bn.createElement("span", null, fieldType.label)), fieldType.type == "context" ? /* @__PURE__ */ bn.createElement("div", { className: "menu-item", onClick: (e4) => selectContext(e4) }, /* @__PURE__ */ bn.createElement("span", null, i18n_default.labels.propertyContext), /* @__PURE__ */ bn.createElement("span", null, field.value)) : fieldType.type == "fileprop" ? /* @__PURE__ */ bn.createElement("div", { className: "menu-item", onClick: (e4) => selectFileProp(e4) }, /* @__PURE__ */ bn.createElement("span", null, i18n_default.labels.propertyFileProp), /* @__PURE__ */ bn.createElement("span", null, field.value)) : /* @__PURE__ */ bn.createElement(bn.Fragment, null), fieldType.multi ? /* @__PURE__ */ bn.createElement("div", { className: "menu-item" }, /* @__PURE__ */ bn.createElement("span", null, i18n_default.labels.multiple), /* @__PURE__ */ bn.createElement("input", { type: "checkbox", checked: field.type == fieldType.multiType, onChange: () => toggleMulti() })) : /* @__PURE__ */ bn.createElement(bn.Fragment, null)); }; var showPropertyMenu = (plugin, position, editable, options, field, fields, contextTables, saveField, saveContext, hide, deleteColumn, sortColumn, hidden) => { const menu = new import_obsidian15.Menu(); menu.setUseNativeMenu(false); if (editable) { menu.addItem((menuItem) => { var _a2; inputMenuItem( menuItem, (_a2 = field == null ? void 0 : field.name) != null ? _a2 : "", (value) => saveField({ ...field, name: value }) ); menuItem.setIcon("type"); }); menu.addSeparator(); const frag = document.createDocumentFragment(); const div = frag.createDiv(); div.addEventListener("click", (e4) => { e4.stopImmediatePropagation(); }); div.addEventListener("keydown", (e4) => { }); const root = createRoot(div); root.render( /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement(PropertyMenuComponent, { plugin, field, fields, context: contextTables, options, saveField, saveContext })) ); menu.addItem((menuItem) => { menuItem.setTitle(frag); menuItem.dom.toggleClass("mk-properties", true); }); menu.addSeparator(); if (!hidden) { menu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.hideProperty); menuItem.onClick(() => { hide(field, true); }); menuItem.setIcon("eye-off"); }); } else { menu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.unhideProperty); menuItem.onClick(() => { hide(field, false); }); menuItem.setIcon("eye"); }); } menu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.deleteProperty); menuItem.onClick(() => { deleteColumn(field); }); menuItem.setIcon("trash-2"); }); menu.addSeparator(); } const sortableString = normalizedSortForType(field.type, false); if (sortableString) { menu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.sortAscending); menuItem.setIcon("sort-asc"); menuItem.onClick(() => { sortColumn( { field: field.name + field.table, type: normalizedSortForType(field.type, false) } ); }); }); menu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.sortDescending); menuItem.setIcon("sort-desc"); menuItem.onClick(() => { sortColumn({ field: field.name + field.table, type: normalizedSortForType(field.type, true) }); }); }); } menu.showAtPosition(position); return menu; }; // src/hooks/useCombinedRef.tsx function useCombinedRefs2(...refs) { return F( () => (node) => { refs.forEach((ref) => ref(node)); }, refs ); } // src/components/ContextView/TableView/ColumnHeader.tsx var import_obsidian16 = require("obsidian"); var filePropTypes = [ { name: i18n_default.properties.fileProperty.createdTime, value: "ctime" }, { name: i18n_default.properties.fileProperty.modifiedTime, value: "mtime" }, { name: i18n_default.properties.fileProperty.extension, value: "extension" }, { name: i18n_default.properties.fileProperty.size, value: "size" }, { name: i18n_default.properties.fileProperty.parentFolder, value: "folder" } ]; var ColumnHeader = (props2) => { const [field, setField] = p2(props2.column); const menuRef = _2(null); const { loadContextFields, predicate, tableData, contextTable, cols, newColumn, saveColumn, hideColumn, sortColumn, delColumn } = q2(MDBContext); h2(() => { setField(props2.column); }, [props2.column]); const { attributes, listeners, setNodeRef: setDraggableNodeRef, transform } = useDraggable({ id: field.name + field.table, data: { name: field.name } }); const { setNodeRef: setDroppableNodeRef } = useDroppable({ id: field.name + field.table, data: { name: field.name } }); const saveField = (field2) => { if (field2.name.length > 0) { if (field2.name != props2.column.name || field2.type != props2.column.type || field2.value != props2.column.value || field2.attrs != props2.column.attrs) { const saveResult = saveColumn(field2, props2.column); if (saveResult) { if (props2.isNew) { setField(props2.column); } } } } }; const saveContext = (field2, value) => { const newContext = tagFromString(value[0]); initiateContextIfNotExists(props2.plugin, newContext).then((f4) => { if (f4) { return insertContextItems( props2.plugin, optionValuesForColumn( field2.name, field2.table == "" ? tableData : contextTable[field2.table] ), newContext ); } }).then((f4) => loadContextFields(newContext)); const newField = { ...field2, value: newContext != null ? newContext : "" }; setField(newField); saveColumn(newField, props2.column); }; const showNewMenu = (e4) => { const offset = ref.current.getBoundingClientRect(); const files = tableData.rows.map((f4) => getAbstractFileAtPath(app, f4.File)).filter((f4) => f4 instanceof import_obsidian16.TFile); const types = guestimateTypes( files.map((f4) => f4.path), props2.plugin, false ); const fmFields = files.reduce((p3, c4) => { const fm = frontMatterForFile(c4); const fmKeys = uniqCaseInsensitive(frontMatterKeys(fm)); return uniq([...p3, ...fmKeys]); }, []).filter((f4) => !cols.some((g4) => g4.name == f4)); const allTypes = [ ...fmFields.map((f4) => ({ name: f4, description: i18n_default.labels.syncFrontmatterProperty, value: "fm." + f4 + "." + yamlTypeToMDBType(types[f4]) })), ...fieldTypes.filter((f4) => f4.restricted != true).map((f4) => ({ name: f4.label, description: i18n_default.labels.newProperty, value: "type." + f4.type + "." + f4.label })) ]; const saveOptions = (_5, values) => { const newValue = values[0]; const newType = newValue.split("."); if (newType[0] == "fm") { newColumn({ name: uniqueNameFromString( newType[1], tableData.cols.map((f4) => f4.name) ), schemaId: tableData.schema.id, table: "", type: newType[2] }); } else if (newType[0] == "type") { newColumn({ name: uniqueNameFromString( newType[2], tableData.cols.map((f4) => f4.name) ), schemaId: tableData.schema.id, table: "", type: newType[1] }); } }; showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: false, editable: false, value: [], saveOptions, placeholder: i18n_default.labels.propertyItemSelectPlaceholder, searchable: true, options: allTypes, showAll: true } ); }; const toggleMenu = (e4) => { if (props2.isNew) { showNewMenu(e4); } else { const offset = e4.target.getBoundingClientRect(); const options = optionValuesForColumn( field.name, field.table == "" ? tableData : contextTable[field.table] ); showPropertyMenu(props2.plugin, { x: offset.left, y: offset.top + 30 }, props2.editable, options, field, cols, contextTable, saveField, saveContext, hideColumn, delColumn, sortColumn, predicate.colsHidden.includes(field.name + field.table)); } }; const ref = _2(null); const setNodeRef = useCombinedRefs2(setDroppableNodeRef, setDraggableNodeRef); return /* @__PURE__ */ bn.createElement("div", { ref: setNodeRef, ...listeners, ...attributes, className: "mk-col-header", onClick: (e4) => { toggleMenu(e4); } }, /* @__PURE__ */ bn.createElement("div", { ref }, props2.column.name.length > 0 ? field.name : "+", /* @__PURE__ */ bn.createElement("span", { className: "mk-col-header-context", "aria-label": props2.column.table.length > 0 ? props2.column.table : "" }, props2.column.table.length > 0 ? "#" : ""))); }; // src/components/ContextView/TableView/TableView.tsx var import_lodash4 = __toESM(require_lodash()); var import_obsidian17 = require("obsidian"); // src/components/ContextView/DataTypeView/ImageCell.tsx var ImageCell = (props2) => { const { initialValue, saveValue } = props2; const [value, setValue] = bn.useState(initialValue); const ref = _2(null); h2(() => { if (props2.editMode == 2 /* EditModeActive */) { ref.current.focus(); } }, []); const file = F(() => getAbstractFileAtPath(app, value), [value]); const onBlur = (e4) => { const newValue = e4.target.value; if (initialValue != newValue) { setValue(newValue); saveValue(newValue); } }; const onKeyDown = (e4) => { e4.stopPropagation(); if (e4.key == "Enter" || e4.key == "Escape") { e4.target.blur(); props2.setEditMode(null); } }; bn.useEffect(() => { setValue(initialValue); }, [initialValue]); return /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-image" }, props2.editMode >= 2 && /* @__PURE__ */ bn.createElement("input", { className: "mk-cell-text", type: "text", ref, value, onKeyDown, onBlur }), props2.editMode > 0 && /* @__PURE__ */ bn.createElement("img", { src: file ? app.vault.getResourcePath(file) : value })); }; // src/utils/strings.ts var indexOfCharElseEOS = (char, str) => { if (str.indexOf("|") > 0) return str.indexOf("|"); return str.length; }; // src/components/ContextView/DataTypeView/LinkCell.tsx var LinkCell = (props2) => { var _a2; const initialValue = (props2.multi ? (_a2 = splitString(props2.initialValue)) != null ? _a2 : [] : [props2.initialValue]).filter((f4) => f4); const stringValueToLink = (strings) => strings.map((f4) => { const match2 = /\[\[(.*?)\]\]/g.exec(f4); const stringValue = (match2 == null ? void 0 : match2.length) > 1 ? match2[1].substring(0, indexOfCharElseEOS("|", match2[1])) : f4; return { label: filePathToString(stringValue), value: stringValue }; }); h2(() => { var _a3; setValue(resolveLinks(stringValueToLink(props2.multi ? (_a3 = splitString(props2.initialValue)) != null ? _a3 : [] : [props2.initialValue]))); }, [props2.initialValue]); const resolveLinks = (links) => links.map((f4) => ({ value: f4.value, label: filePathToString(f4.value), file: getFileFromString2(f4.value, getFolderPathFromString(props2.file)) })); const ref = _2(null); const [value, setValue] = p2( resolveLinks(stringValueToLink(initialValue)) ); const removeValue = (v3) => { const newValues = value.filter((f4) => f4.value != v3.value); setValue(newValues); props2.saveValue(newValues.map((f4) => f4.value).join(",")); }; const saveOptions = (_5, _value) => { if (!props2.multi) { setValue(resolveLinks(stringValueToLink(_value))); props2.saveValue(_value.map((f4) => `[[${f4}]]`).join(",")); } else { const newValue = _value[0]; if (newValue) { const newValues = uniq([...value.map((f4) => f4.value), `[[${newValue}]]`]); setValue(resolveLinks(stringValueToLink(newValues))); props2.saveValue(newValues.join(",")); } } }; const menuProps = () => { const options = getAllAbstractFilesInVault(props2.plugin, app).map((f4) => ({ name: fileNameToString(f4.name), value: f4.path })); const _options = !props2.multi ? [{ name: i18n_default.menu.none, value: "" }, ...options] : options; return { multi: false, editable: true, value: value.map((f4) => f4.value), options: _options, saveOptions, placeholder: i18n_default.labels.linkItemSelectPlaceholder, detail: true, searchable: true }; }; const openLink = async (o3) => { if (o3.file) { openTFile(o3.file, props2.plugin, false); } else { const file = await app.fileManager.createNewMarkdownFile( app.vault.getRoot(), o3.value ); openTFile(file, props2.plugin, false); setValue(resolveLinks(value)); } }; return /* @__PURE__ */ bn.createElement(OptionCellBase, { menuProps, getLabelString: (o3) => o3.label, valueClass: (o3) => o3.file ? "mk-cell-link-item" : "mk-cell-link-unresolved", openItem: openLink, value, multi: props2.multi, editMode: props2.editMode, removeValue }); }; // src/components/ContextView/DataTypeView/TagCell.tsx var TagCell = (props2) => { var _a2; const initialValue = ((_a2 = splitString(props2.initialValue)) != null ? _a2 : []).filter((f4) => (f4 == null ? void 0 : f4.length) > 0); const [value, setValue] = p2(initialValue); h2(() => { var _a3; setValue((_a3 = splitString(props2.initialValue)) != null ? _a3 : []); }, [props2.initialValue]); const removeValue = (v3) => { const newValues = value.filter((f4) => f4 != v3); setValue(newValues); props2.saveValue(newValues.join(",")); }; const saveOptions = (_options, _value) => { if (!props2.multi) { setValue(_value); props2.saveValue(_value.join(",")); } else { const newValue = _value[0]; if (newValue) { const newValues = uniq([...value, newValue]); setValue(newValues); props2.saveValue(newValues.join(",")); } } }; const menuProps = () => { const options = loadTags(props2.plugin).map((f4) => ({ name: f4, value: stringFromTag(f4) })); const _options = !props2.multi ? [{ name: i18n_default.menu.none, value: "" }, ...options] : options; return { multi: false, editable: true, value, options: _options, saveOptions, placeholder: i18n_default.labels.tagItemSelectPlaceholder, searchable: true, showAll: true, onHide: () => props2.setEditMode(null) }; }; return /* @__PURE__ */ bn.createElement(OptionCellBase, { menuProps, value, multi: props2.multi, editMode: props2.editMode, removeValue }); }; // src/components/ContextView/TableView/TableView.tsx var TableView = (props2) => { const { selectedRows, selectRows, tableData, sortedColumns: cols, filteredData: data, tagContexts, folderPath, saveSchema, searchString, dbSchema, contextTable, setContextTable, predicate, savePredicate, saveDB: saveDB2, saveContextDB, updateFieldValue, updateValue, saveColumn, delColumn, newColumn, isFolderContext } = q2(MDBContext); const [activeId, setActiveId] = p2(null); const [lastSelectedIndex, setLastSelectedIndex] = p2(null); const [selectedColumn, setSelectedColumn] = p2(null); const [currentEdit, setCurrentEdit] = p2(null); const [overId, setOverId] = p2(null); const [openFlows, setOpenFlows] = p2([]); const [selectNewOnRefresh, setSelectNewOnRefresh] = p2(false); const [colsSize, setColsSize] = p2({}); const ref = _2(null); h2(() => { setColsSize({ ...predicate.colsSize, "+": 30 }); }, [predicate]); h2(() => { setCurrentEdit(null); }, [selectedColumn, lastSelectedIndex]); h2(() => { if (currentEdit == null) { ref.current.focus(); } }, [currentEdit]); const saveColsSize = (colSize) => { const newColSize = colSize(colsSize); setColsSize(newColSize); debouncedSavePredicate(newColSize); }; const debouncedSavePredicate = T2( (0, import_lodash4.debounce)( (nextValue) => savePredicate({ ...predicate, colsSize: nextValue }), 1e3 ), [predicate] ); const newRow = (index, data2) => { saveDB2(createNewRow(tableData, { File: "", ...data2 != null ? data2 : {} }, index)); }; const deleteRow = (rowIndex) => { const row = tableData.rows.find((f4, i4) => i4 == rowIndex); if (row._source == "folder") { deleteFile(props2.plugin, getAbstractFileAtPath(app, row.File)); } if (row) { saveDB2({ ...tableData, rows: tableData.rows.filter((f4, i4) => i4 != rowIndex) }); } }; const toggleFlow = (path) => { setOpenFlows( (f4) => f4.find((p3) => p3 == path) ? f4.filter((p3) => p3 != path) : uniq([...f4, path]) ); }; const selectItem = (modifier, index) => { if (modifier == 3) { const file = getAbstractFileAtPath( app, tableData.rows[parseInt(index)].File ); if (file) openAFile(file, props2.plugin, false); return; } if (modifier == 2) { selectedRows.some((f4) => f4 == index) ? selectRows( null, selectedRows.filter((f4) => f4 != index) ) : selectRows(index, uniq([...selectedRows, index])); } else if (modifier == 1) { selectRows( index, uniq([ ...selectedRows, ...selectRange( lastSelectedIndex, index, data.map((f4) => f4._index) ) ]) ); } else { selectRows(index, [index]); } setLastSelectedIndex(index); }; const onKeyDown = (e4) => { const setCellValue = (value) => { var _a2; const columnTuple = selectedColumn.split("#"); updateValue(columnTuple[0], value, (_a2 = columnTuple[1]) != null ? _a2 : "", parseInt(lastSelectedIndex), ""); }; const clearCell = () => { setCellValue(""); }; const copyCell = () => { navigator.clipboard.writeText(tableData.rows[parseInt(lastSelectedIndex)][selectedColumn]); }; const nextRow = () => { const newIndex = selectNextIndex( lastSelectedIndex, data.map((f4) => f4._index) ); selectRows(newIndex, [newIndex]); setLastSelectedIndex(newIndex); }; const lastRow = () => { const newIndex = selectPrevIndex( lastSelectedIndex, data.map((f4) => f4._index) ); selectRows(newIndex, [newIndex]); setLastSelectedIndex(newIndex); }; if (e4.key == "c" && e4.metaKey) { copyCell(); } if (e4.key == "x" && e4.metaKey) { copyCell(); clearCell(); } if (e4.key == "v" && e4.metaKey) { navigator.clipboard.readText().then((f4) => setCellValue(f4)); } if (e4.key == "Escape") { selectRows(null, []); setLastSelectedIndex(null); } if (e4.key == "Backspace" || e4.key == "Delete") { clearCell(); } if (e4.key == "Enter") { if (selectedColumn && lastSelectedIndex) { if (e4.shiftKey) { newRow(parseInt(lastSelectedIndex) + 1); nextRow(); } else { setCurrentEdit([selectedColumn, lastSelectedIndex]); } } return; } if (e4.key == "ArrowDown") { nextRow(); e4.preventDefault(); } if (e4.key == "ArrowUp") { lastRow(); e4.preventDefault(); } if (e4.key == "ArrowLeft") { const newIndex = selectPrevIndex( selectedColumn, columns.map((f4) => f4.accessorKey).filter((f4) => f4 != "+") ); setSelectedColumn(newIndex); } if (e4.key == "ArrowRight") { const newIndex = selectNextIndex( selectedColumn, columns.map((f4) => f4.accessorKey).filter((f4) => f4 != "+") ); setSelectedColumn(newIndex); } }; const columns = F( () => { var _a2; return [ ...(_a2 = cols == null ? void 0 : cols.filter((f4) => f4.type != "preview").map((f4) => { return { header: f4.name, accessorKey: f4.name + f4.table, meta: { table: f4.table, editable: f4.primary != "true", schemaId: dbSchema == null ? void 0 : dbSchema.id }, cell: ({ getValue, row: { index }, column: { colId }, cell, table: table2 }) => { const initialValue = getValue(); const rowIndex = parseInt(data[index]["_index" + f4.table]); const saveValue = (value) => { var _a3; if (initialValue != value) (_a3 = table2.options.meta) == null ? void 0 : _a3.updateData( f4.name, value, f4.table, rowIndex ); }; const saveFieldValue = (fieldValue, value) => { var _a3; (_a3 = table2.options.meta) == null ? void 0 : _a3.updateFieldValue( f4.name, fieldValue, value, f4.table, rowIndex ); }; const editMode = !cell.getIsGrouped() ? platformIsMobile() ? 3 /* EditModeAlways */ : currentEdit && currentEdit[0] == f4.name + f4.table && currentEdit[1] == rowIndex.toString() ? 2 /* EditModeActive */ : 1 /* EditModeView */ : -1 /* EditModeReadOnly */; const cellProps = { initialValue, saveValue, plugin: props2.plugin, setEditMode: setCurrentEdit, editMode }; const fieldType = fieldTypes.find((t4) => f4.type == t4.type) || fieldTypes.find((t4) => f4.type == t4.multiType); if (!fieldType) { return /* @__PURE__ */ bn.createElement(bn.Fragment, null, initialValue); } if (fieldType.type == "file") { return /* @__PURE__ */ bn.createElement(FileCell, { ...cellProps, multi: fieldType.multiType == f4.type, folder: folderPath, isFolder: isFolderContext, openFlow: () => toggleFlow(initialValue), deleteRow: () => deleteRow(index) }); } else if (fieldType.type == "boolean") { return /* @__PURE__ */ bn.createElement(BooleanCell, { ...cellProps, column: f4 }); } else if (fieldType.type == "option") { return /* @__PURE__ */ bn.createElement(OptionCell, { ...cellProps, options: f4.value, multi: fieldType.multiType == f4.type, saveOptions: saveFieldValue }); } else if (fieldType.type == "date") { return /* @__PURE__ */ bn.createElement(DateCell, { ...cellProps }); } else if (fieldType.type == "context") { return /* @__PURE__ */ bn.createElement(ContextCell, { ...cellProps, multi: fieldType.multiType == f4.type, contextTable: contextTable[f4.value], contextTag: f4.value }); } else if (fieldType.type == "fileprop") { return /* @__PURE__ */ bn.createElement(FilePropertyCell, { ...cellProps, property: f4.value }); } else if (fieldType.type == "tag") { return /* @__PURE__ */ bn.createElement(TagCell, { ...cellProps, multi: fieldType.multiType == f4.type }); } else if (fieldType.type == "number") { return /* @__PURE__ */ bn.createElement(NumberCell, { ...cellProps }); } else if (fieldType.type == "link") { return /* @__PURE__ */ bn.createElement(LinkCell, { ...cellProps, multi: fieldType.multiType == f4.type, file: data[index]["File"] }); } else if (fieldType.type == "image") { return /* @__PURE__ */ bn.createElement(ImageCell, { ...cellProps }); } else { return /* @__PURE__ */ bn.createElement(TextCell, { ...cellProps }); } } }; })) != null ? _a2 : [], { header: "+", meta: { schemaId: dbSchema == null ? void 0 : dbSchema.id }, accessorKey: "+", size: 20, cell: () => /* @__PURE__ */ bn.createElement(bn.Fragment, null) } ]; }, [cols, currentEdit, predicate, contextTable, toggleFlow, openFlows] ); const groupBy2 = F( () => { var _a2; return ((_a2 = predicate.groupBy) == null ? void 0 : _a2.length) > 0 && cols.find((f4) => f4.name + f4.table == predicate.groupBy[0]) ? predicate.groupBy : []; }, [predicate, cols] ); const table = useReactTable({ data, columns, columnResizeMode: "onChange", state: { columnVisibility: predicate.colsHidden.reduce( (p3, c4) => ({ ...p3, [c4]: false }), {} ), columnOrder: predicate.colsOrder, columnSizing: { ...columns.reduce((p3, c4) => ({ ...p3, [c4.accessorKey]: 150 }), {}), ...colsSize }, grouping: groupBy2, expanded: true }, onColumnSizingChange: saveColsSize, getCoreRowModel: getCoreRowModel(), getExpandedRowModel: getExpandedRowModel(), getGroupedRowModel: getGroupedRowModel(), meta: { updateData: updateValue, updateFieldValue } }); const sensors = useSensors( useSensor(MouseSensor, { activationConstraint: { distance: 10 } }), useSensor(TouchSensor, { activationConstraint: { delay: 250, tolerance: 5 } }) ); const measuring = { droppable: { strategy: MeasuringStrategy.Always } }; function handleDragStart(event) { const { active: { id: activeId2 } } = event; setActiveId(activeId2); setOverId(overId); document.body.style.setProperty("cursor", "grabbing"); } function handleDragOver({ over }) { var _a2; const overId2 = over == null ? void 0 : over.id; if (overId2) { setOverId((_a2 = over == null ? void 0 : over.id) != null ? _a2 : null); } } const saveFilter = (filter) => { savePredicate({ ...predicate, filters: [ ...predicate.filters.filter((s5) => s5.field != filter.field), filter ] }); }; const selectCell = (e4, index, column) => { if (platformIsMobile() || column == "+") return; selectItem(0, data[index]["_index"]); setSelectedColumn(column); if (e4.detail === 1) { } else if (e4.detail === 2) { setCurrentEdit([column, data[index]["_index"]]); } }; const showContextMenu = (e4, index) => { e4.preventDefault(); const menu = new import_obsidian17.Menu(); menu.addItem((item) => { item.setIcon("trash"); item.setTitle(i18n_default.menu.deleteRow); item.onClick(() => { deleteRow(index); }); }); if (isMouseEvent(e4)) { menu.showAtPosition({ x: e4.pageX, y: e4.pageY }); } else { menu.showAtPosition({ x: e4.nativeEvent.locationX, y: e4.nativeEvent.locationY }); } }; function handleDragEnd({ active, over }) { resetState(); savePredicate({ ...predicate, colsOrder: arrayMove( predicate.colsOrder, predicate.colsOrder.findIndex((f4) => f4 == activeId), predicate.colsOrder.findIndex((f4) => f4 == overId) ) }); } function handleDragCancel() { resetState(); } function resetState() { setOverId(null); setActiveId(null); document.body.style.setProperty("cursor", ""); } return /* @__PURE__ */ bn.createElement(DndContext, { sensors, collisionDetection: closestCenter, measuring, onDragStart: handleDragStart, onDragOver: handleDragOver, onDragEnd: handleDragEnd, onDragCancel: handleDragCancel }, /* @__PURE__ */ bn.createElement("div", { className: "mk-table", ref, tabIndex: 1, onKeyDown }, /* @__PURE__ */ bn.createElement("table", { ...{} }, /* @__PURE__ */ bn.createElement("thead", null, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ bn.createElement("tr", { key: headerGroup.id }, /* @__PURE__ */ bn.createElement("th", null), headerGroup.headers.map((header) => { var _a2; return /* @__PURE__ */ bn.createElement("th", { className: "mk-th", key: header.id, style: { minWidth: header.column.getIsGrouped() ? "0px" : (_a2 = colsSize[header.column.columnDef.accessorKey]) != null ? _a2 : "150px" } }, header.isPlaceholder ? null : header.column.columnDef.header != "+" ? header.column.getIsGrouped() ? /* @__PURE__ */ bn.createElement(bn.Fragment, null) : /* @__PURE__ */ bn.createElement(ColumnHeader, { plugin: props2.plugin, editable: header.column.columnDef.meta.editable, column: cols.find( (f4) => f4.name == header.column.columnDef.header && f4.table == header.column.columnDef.meta.table ) }) : /* @__PURE__ */ bn.createElement(ColumnHeader, { plugin: props2.plugin, isNew: true, editable: true, column: { name: "", schemaId: header.column.columnDef.meta.schemaId, type: "text", table: "" } }), /* @__PURE__ */ bn.createElement("div", { ...{ onMouseDown: header.getResizeHandler(), onTouchStart: header.getResizeHandler(), className: `mk-resizer ${header.column.getIsResizing() ? "isResizing" : ""}` } })); })))), /* @__PURE__ */ bn.createElement("tbody", null, table.getRowModel().rows.map((row) => /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("tr", { className: (selectedRows == null ? void 0 : selectedRows.some( (f4) => f4 == data[row.index]["_index"] )) && "mk-is-active", onContextMenu: (e4) => { const rowIndex = parseInt( data[row.index]["_index"] ); showContextMenu(e4, rowIndex); }, key: row.id }, /* @__PURE__ */ bn.createElement("td", null), row.getVisibleCells().map( (cell) => { var _a2, _b2; return cell.getIsGrouped() ? /* @__PURE__ */ bn.createElement("td", { className: "mk-td-group", colSpan: cols.length + 1 }, /* @__PURE__ */ bn.createElement("div", { ...{ onClick: row.getToggleExpandedHandler(), style: { display: "flex", alignItems: "center", cursor: "normal" } } }, flexRender( cell.column.columnDef.cell, cell.getContext() ), " ", "(", row.subRows.length, ")")) : cell.getIsAggregated() ? flexRender( (_a2 = cell.column.columnDef.aggregatedCell) != null ? _a2 : cell.column.columnDef.cell, cell.getContext() ) : /* @__PURE__ */ bn.createElement("td", { onClick: (e4) => selectCell( e4, cell.row.index, cell.column.columnDef.accessorKey ), className: `${cell.column.columnDef.accessorKey == selectedColumn ? "mk-selected-cell " : ""} mk-td ${cell.getIsPlaceholder() ? "mk-td-empty" : ""}`, key: cell.id, style: { minWidth: cell.getIsPlaceholder() ? "0px" : (_b2 = colsSize[cell.column.columnDef.accessorKey]) != null ? _b2 : "50px" } }, cell.getIsPlaceholder() ? null : flexRender( cell.column.columnDef.cell, cell.getContext() )); } ))))), /* @__PURE__ */ bn.createElement("tfoot", null, isFolderContext ? /* @__PURE__ */ bn.createElement("tr", null, /* @__PURE__ */ bn.createElement("th", { className: "mk-row-new", colSpan: cols.length + 2, onClick: () => { newRow(); } }, "+ New")) : /* @__PURE__ */ bn.createElement(bn.Fragment, null))), j3( /* @__PURE__ */ bn.createElement(DragOverlay, { dropAnimation: null, zIndex: 1600 }, activeId ? /* @__PURE__ */ bn.createElement(ColumnHeader, { plugin: props2.plugin, editable: false, column: { name: activeId, schemaId: tableData.schema.id, type: "text", table: "" } }) : null), document.body ))); }; // src/components/ContextView/DataTypeView/BooleanCell.tsx var BooleanCell = (props2) => { const { initialValue, saveValue } = props2; const [value, setValue] = bn.useState(initialValue == "true"); const onChange = () => { if (props2.editMode == -1 /* EditModeReadOnly */) { return; } setValue(!value); saveValue(!value ? "true" : "false"); }; h2(() => { if (props2.editMode == 2 /* EditModeActive */) { setValue(!value); saveValue(!value ? "true" : "false"); props2.setEditMode(null); } }, [props2.editMode]); bn.useEffect(() => { setValue(initialValue == "true"); }, [initialValue]); if (props2.editMode < 1 /* EditModeView */) { return /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-option-item" }, /* @__PURE__ */ bn.createElement("input", { type: "checkbox", checked: value, onChange }), /* @__PURE__ */ bn.createElement("div", null, props2.column.name)); } return /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-text" }, /* @__PURE__ */ bn.createElement("input", { type: "checkbox", checked: value, onChange })); }; // src/components/ContextView/DataTypeView/PreviewCell.tsx var PreviewCell = (props2) => { const [vaultItem, setVaultItem] = p2(null); const previewImage = F(() => { if (!props2.row || !props2.columns) return null; const imageCol = props2.columns.find((f4) => f4.type == "image"); if (!imageCol) return null; return props2.row[imageCol.name + imageCol.table]; }, [props2.row, props2.columns]); const previewFile = F(() => { return getAbstractFileAtPath(app, previewImage); }, [previewImage]); const loadIcon = () => { setVaultItem(vaultItemForPath(props2.plugin, props2.file)); }; h2(() => { loadIcon(); window.addEventListener(eventTypes.spacesChange, loadIcon); return () => { window.removeEventListener(eventTypes.spacesChange, loadIcon); }; }, [props2.file]); return previewImage ? /* @__PURE__ */ bn.createElement("div", { className: "mk-file-preview", style: { backgroundSize: "cover", backgroundImage: `url(${previewFile ? app.vault.getResourcePath(previewFile) : previewImage})` } }) : /* @__PURE__ */ bn.createElement("div", { className: "mk-file-preview", style: (vaultItem == null ? void 0 : vaultItem.color.length) > 0 ? { "--label-color": `${vaultItem.color}`, "--icon-color": `#ffffff` } : { "--label-color": `var(--background-secondary-alt)`, "--icon-color": `var(--text-muted)` } }, /* @__PURE__ */ bn.createElement("div", { className: "mk-file-icon", dangerouslySetInnerHTML: (vaultItem == null ? void 0 : vaultItem.sticker) ? { __html: unifiedToNative(vaultItem.sticker) } : (vaultItem == null ? void 0 : vaultItem.folder) == "true" ? { __html: uiIconSet["mk-ui-folder"] } : { __html: uiIconSet["mk-ui-file"] } })); }; // src/components/ContextView/DataTypeView/DataTypeView.tsx var DataTypeView = (props2) => { const { initialValue, index, column, file } = props2; const saveValue = (value) => { props2.updateValue(value); }; const saveFieldValue = (fieldValue, value) => { props2.updateFieldValue(fieldValue, value); }; const viewProps = { initialValue, saveValue, editMode: props2.editable == true ? 3 : 0, setEditMode: () => { }, plugin: props2.plugin }; const fieldType = fieldTypes.find((t4) => column.type == t4.type) || fieldTypes.find((t4) => column.type == t4.multiType); if (!fieldType) { return /* @__PURE__ */ bn.createElement(bn.Fragment, null); } if (fieldType.type == "preview") { return /* @__PURE__ */ bn.createElement(PreviewCell, { ...viewProps, file, row: props2.row, columns: props2.cols }); } else if (fieldType.type == "file") { return /* @__PURE__ */ bn.createElement(FileCell, { isFolder: false, ...viewProps, multi: fieldType.multiType == column.type, openFlow: props2.openFlow }); } else if (fieldType.type == "boolean") { return /* @__PURE__ */ bn.createElement(BooleanCell, { ...viewProps, column }); } else if (fieldType.type == "option") { return /* @__PURE__ */ bn.createElement(OptionCell, { ...viewProps, options: column.value, multi: fieldType.multiType == column.type, saveOptions: saveFieldValue }); } else if (fieldType.type == "date") { return /* @__PURE__ */ bn.createElement(DateCell, { ...viewProps }); } else if (fieldType.type == "context") { return /* @__PURE__ */ bn.createElement(ContextCell, { ...viewProps, multi: fieldType.multiType == column.type, contextTable: props2.contextTable[column.value], contextTag: column.value }); } else if (fieldType.type == "fileprop") { return /* @__PURE__ */ bn.createElement(FilePropertyCell, { ...viewProps, property: column.value }); } else if (fieldType.type == "number") { return /* @__PURE__ */ bn.createElement(NumberCell, { ...viewProps }); } else if (fieldType.type == "link") { return /* @__PURE__ */ bn.createElement(LinkCell, { ...viewProps, multi: fieldType.multiType == column.type, file }); } else if (fieldType.type == "tag") { return /* @__PURE__ */ bn.createElement(TagCell, { ...viewProps, multi: fieldType.multiType == column.type }); } else if (fieldType.type == "image") { return /* @__PURE__ */ bn.createElement(ImageCell, { ...viewProps }); } return /* @__PURE__ */ bn.createElement(TextCell, { ...viewProps }); }; // src/components/ContextView/CardsView/CardView.tsx var CardView = bn.memo( bn.forwardRef( ({ color, dragOverlay, dragging, disabled, fadeIn, handle, height, index, listeners, selected, onSelect, onRemove, renderItem, plugin, id: id2, sorting, style, transition, transform, value, cols, wrapperStyle, ...props2 }, ref) => { const onClickHandler = (e4) => { if (!onSelect) { return; } if (e4.detail === 1) { onSelect(e4.shiftKey ? 1 : e4.metaKey ? 2 : 0, value["_index"]); } else if (e4.detail === 2) { onSelect(3, value["_index"]); } }; const { updateValue, updateFieldValue, contextTable } = q2(MDBContext); h2(() => { if (!dragOverlay) { return; } document.body.style.cursor = "grabbing"; return () => { document.body.style.cursor = ""; }; }, [dragOverlay]); const [openFlow, setOpenFlow] = p2(false); return renderItem ? renderItem({ dragOverlay: Boolean(dragOverlay), dragging: Boolean(dragging), sorting: Boolean(sorting), index, fadeIn: Boolean(fadeIn), listeners, ref, style, transform, transition, value }) : /* @__PURE__ */ bn.createElement("li", { className: (0, import_classnames.default)( "mk-list-item", fadeIn && "fadeIn", sorting && "sorting", dragOverlay && "dragOverlay", selected && "mk-is-active" ), onClick: onClickHandler, style: { ...wrapperStyle, transition, "--translate-x": transform ? `${Math.round(transform.x)}px` : void 0, "--translate-y": transform ? `${Math.round(transform.y)}px` : void 0, "--scale-x": (transform == null ? void 0 : transform.scaleX) ? `${transform.scaleX}` : void 0, "--scale-y": (transform == null ? void 0 : transform.scaleY) ? `${transform.scaleY}` : void 0, "--index": index, "--color": color }, ref }, value && cols.filter((f4) => f4.type == "preview" && f4.table == "").map((f4) => /* @__PURE__ */ bn.createElement(DataTypeView, { row: value, cols, plugin, initialValue: value[f4.name + f4.table], column: f4, index: parseInt(id2), file: value["File"], editable: false, updateValue: (v3) => updateValue(f4.name, v3, f4.table, parseInt(id2), value["File"]), updateFieldValue: (v3, fv) => updateFieldValue(f4.name, fv, v3, f4.table, parseInt(id2), value["File"]), contextTable })), /* @__PURE__ */ bn.createElement("div", { className: "mk-list-content" }, /* @__PURE__ */ bn.createElement("div", { className: (0, import_classnames.default)( "mk-list-fields", dragging && "dragging", handle && "withHandle", dragOverlay && "dragOverlay", disabled && "disabled", color && "color" ), style, "data-cypress": "draggable-item", ...listeners, ...props2, tabIndex: !handle ? 0 : void 0 }, value && cols.map((f4) => { var _a2; return ((_a2 = value[f4.name + f4.table]) == null ? void 0 : _a2.length) > 0 || f4.type == "fileprop" ? /* @__PURE__ */ bn.createElement(DataTypeView, { openFlow: () => setOpenFlow((o3) => !o3), plugin, initialValue: value[f4.name + f4.table], column: f4, index: parseInt(id2), file: value["File"], editable: false, updateValue: (v3) => updateValue(f4.name, v3, f4.table, parseInt(id2), value["File"]), updateFieldValue: (v3, fv) => updateFieldValue(f4.name, fv, v3, f4.table, parseInt(id2), value["File"]), contextTable }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null); })), /* @__PURE__ */ bn.createElement(FlowView, { plugin, path: value.File, load: openFlow }))); } ) ); // src/components/ContextView/CardsView/CardColumnView.tsx var import_classnames2 = __toESM(require_classnames()); var CardColumnView = k3( ({ id: id2, children, columns = 1, handleProps, horizontal, hover, onClick, onRemove, plugin, field, label, file, placeholder: placeholder2, style, scrollable, shadow, unstyled, ...props2 }, ref) => { const Component2 = "div"; const { updateValue, updateFieldValue, contextTable } = q2(MDBContext); return /* @__PURE__ */ bn.createElement(Component2, { ...props2, ref, style: { ...style, "--columns": columns }, className: (0, import_classnames2.default)( "mk-list-group", unstyled && "unstyled", horizontal && "horizontal", hover && "hover", placeholder2 && "placeholder", scrollable && "scrollable", shadow && "shadow" ), onClick, tabIndex: onClick ? 0 : void 0 }, label != null && field ? /* @__PURE__ */ bn.createElement("div", { className: "mk-list-group-header" }, /* @__PURE__ */ bn.createElement(DataTypeView, { initialValue: label, plugin, index: parseInt(id2) * -1, file, column: field, editable: false, updateValue: (value) => updateValue(field.name, value, field.table, parseInt(id2) * -1, file), updateFieldValue: (value, fieldValue) => updateFieldValue(field.name, fieldValue, value, field.table, parseInt(id2) * -1, file), contextTable }), /* @__PURE__ */ bn.createElement("div", { className: "Actions", ...handleProps })) : null, placeholder2 ? children : /* @__PURE__ */ bn.createElement("ul", null, children)); } ); // src/components/ContextView/CardsView/CardsView.tsx var animateLayoutChanges = (args) => args.isSorting || args.wasDragging ? defaultAnimateLayoutChanges(args) : true; function DroppableContainer({ children, columns = 1, disabled, id: id2, items, style, ...props2 }) { var _a2; const { active, attributes, isDragging, listeners, over, setNodeRef, transition, transform } = useSortable({ id: id2, data: { type: "container" }, animateLayoutChanges }); const isOverContainer = over ? id2 === over.id && ((_a2 = active == null ? void 0 : active.data.current) == null ? void 0 : _a2.type) !== "container" || items.includes(over.id) : false; return /* @__PURE__ */ bn.createElement(CardColumnView, { id: id2, ref: disabled ? void 0 : setNodeRef, style: { ...style, transition, transform: CSS.Translate.toString(transform), opacity: isDragging ? 0.5 : void 0 }, hover: isOverContainer, handleProps: { ...attributes, ...listeners }, columns, ...props2 }, children); } var PLACEHOLDER_ID = "placeholder"; var CardsView = ({ adjustScale: adjustScale2 = false, itemCount = 3, cancelDrop, columns, handle = false, items: initialItems, containerStyle, getItemStyles = () => ({}), wrapperStyle = () => ({}), minimal = false, modifiers, renderItem, strategy = verticalListSortingStrategy, vertical = false, scrollable, plugin }) => { var _a2, _b2; const { tableData, filteredData, selectedRows, selectRows, sortedColumns: cols, predicate, updateValue, contextTable, schema, saveDB: saveDB2, saveContextDB } = q2(MDBContext); const groupBy2 = ((_a2 = predicate.groupBy) == null ? void 0 : _a2.length) > 0 ? cols.find((f4) => f4.name + f4.table == predicate.groupBy[0]) : null; const displayCols = (_b2 = cols == null ? void 0 : cols.filter( (f4) => !(f4.name == (groupBy2 == null ? void 0 : groupBy2.name) && f4.table == groupBy2.table) )) != null ? _b2 : []; const viewType = schema.type; const items = F(() => { var _a3, _b3; if (groupBy2) { const options = uniq([ "", ...(_a3 = splitString(groupBy2.value)) != null ? _a3 : [], ...filteredData.reduce( (p3, c4) => { var _a4; return [...p3, (_a4 = c4[groupBy2.name + groupBy2.table]) != null ? _a4 : ""]; }, [] ) ]); return options.reduce( (p3, c4) => { return { ...p3, [c4]: filteredData.filter((r3) => r3[groupBy2.name + groupBy2.table] == c4).map((r3) => r3._index) }; }, { "": [] } ); } return { "": (_b3 = filteredData == null ? void 0 : filteredData.map((r3) => r3._index)) != null ? _b3 : [] }; }, [filteredData, predicate]); const containers = F( () => Object.keys(items).map((f4, i4) => "-" + i4.toString()), [items] ); const [activeId, setActiveId] = p2(null); const [overId, setOverId] = p2(null); const recentlyMovedToNewContainer = _2(false); const isSortingContainer = activeId ? containers.includes(activeId) : false; const [lastSelectedIndex, setLastSelectedIndex] = p2(null); const sensors = useSensors( useSensor(MouseSensor, { activationConstraint: { distance: 10 } }), useSensor(TouchSensor, { activationConstraint: { delay: 250, tolerance: 5 } }), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }) ); const findContainer = (id2) => { if (id2.charAt(0) == "-") { return id2; } return "-" + Object.keys(items).findIndex((key2) => items[key2].includes(id2)).toString(); }; const getIndex = (id2) => { const container = findContainer(id2); if (!container) { return -1; } const index = items[Object.keys(items)[parseInt(container) * -1]].indexOf(id2); return index; }; const resetState = () => { setActiveId(null); setOverId(null); }; const onDragCancel = () => { resetState(); }; h2(() => { requestAnimationFrame(() => { recentlyMovedToNewContainer.current = false; }); }, [items]); const selectItem = (modifier, index) => { if (platformIsMobile()) { const file = getAbstractFileAtPath( app, tableData.rows[parseInt(index)].File ); if (file) openAFile(file, plugin, false); return; } if (modifier == 3) { const file = getAbstractFileAtPath( app, tableData.rows[parseInt(index)].File ); if (file) openAFile(file, plugin, false); return; } if (modifier == 2) { selectedRows.some((f4) => f4 == index) ? selectRows( null, selectedRows.filter((f4) => f4 != index) ) : selectRows(index, uniq([...selectedRows, index])); } else if (modifier == 1) { selectRows( index, uniq([ ...selectedRows, ...selectRange( lastSelectedIndex, index, filteredData.map((f4) => f4._index) ) ]) ); } else { selectRows(index, [index]); } setLastSelectedIndex(index); }; const onKeyDown = (e4) => { if (e4.key == "Escape") { selectRows(null, []); setLastSelectedIndex(null); } if (e4.key == "Enter") { const file = getAbstractFileAtPath( app, tableData.rows[parseInt(lastSelectedIndex)].File ); if (file) openAFile(file, plugin, false); return; } if (e4.key == "ArrowDown") { const newIndex = selectNextIndex( lastSelectedIndex, filteredData.map((f4) => f4._index) ); selectRows(newIndex, [newIndex]); setLastSelectedIndex(newIndex); } if (e4.key == "ArrowUp") { const newIndex = selectPrevIndex( lastSelectedIndex, filteredData.map((f4) => f4._index) ); selectRows(newIndex, [newIndex]); setLastSelectedIndex(newIndex); } }; return /* @__PURE__ */ bn.createElement(DndContext, { sensors, collisionDetection: closestCenter, measuring: { droppable: { strategy: MeasuringStrategy.Always } }, onDragStart: ({ active }) => { setActiveId(active.id); }, onDragOver: ({ active, over }) => { const overId2 = over == null ? void 0 : over.id; if (overId2) setOverId(overId2); }, onDragEnd: ({ active, over }) => { if (active.id in items && (over == null ? void 0 : over.id)) { return; } const activeContainer = findContainer(active.id); if (!activeContainer) { resetState(); return; } const overId2 = over == null ? void 0 : over.id; if (!overId2) { resetState(); return; } if (overId2 === PLACEHOLDER_ID) { return; } const overContainer = findContainer(overId2); if (overContainer) { const activeIndex = items[Object.keys(items)[parseInt(activeContainer) * -1]].indexOf(active.id); const overIndex = items[Object.keys(items)[parseInt(overContainer) * -1]].indexOf(overId2); if (activeContainer != overContainer) { updateValue(groupBy2.name, Object.keys(items)[parseInt(overContainer) * -1], groupBy2.table, groupBy2.table == "" ? parseInt(activeId) : parseInt( filteredData.find((f4) => f4._index == activeId)["_index" + groupBy2.table] ), ""); } } resetState(); }, cancelDrop, onDragCancel, modifiers }, /* @__PURE__ */ bn.createElement("div", { className: (0, import_classnames3.default)( viewType == "card" ? "mk-cards-container" : "mk-list-container", viewType == "card" && containers.length == 1 && "mk-cards-grid" ), onKeyDown }, /* @__PURE__ */ bn.createElement("div", { className: "mk-list-view" }, /* @__PURE__ */ bn.createElement(SortableContext, { items: [...containers, PLACEHOLDER_ID], strategy: vertical ? verticalListSortingStrategy : horizontalListSortingStrategy }, containers.map((containerId) => /* @__PURE__ */ bn.createElement(DroppableContainer, { key: containerId, id: containerId, plugin, label: minimal ? void 0 : `${Object.keys(items)[parseInt(containerId) * -1]}`, field: groupBy2, columns, items: items[Object.keys(items)[parseInt(containerId) * -1]], scrollable, style: containerStyle, unstyled: minimal }, /* @__PURE__ */ bn.createElement(SortableContext, { items: items[Object.keys(items)[parseInt(containerId) * -1]], strategy }, items[Object.keys(items)[parseInt(containerId) * -1]].map( (value, index) => { return /* @__PURE__ */ bn.createElement(SortableItem, { disabled: isSortingContainer, key: value, id: value, plugin, value: filteredData.find((f4) => f4._index == value), cols: displayCols, index, handle, style: getItemStyles, wrapperStyle, renderItem, onSelect: selectItem, selected: selectedRows == null ? void 0 : selectedRows.some((f4) => f4 == value), containerId, getIndex }); } ))))))), j3( /* @__PURE__ */ bn.createElement(DragOverlay, { adjustScale: adjustScale2 }, activeId ? containers.includes(activeId) ? renderContainerDragOverlay(activeId) : renderSortableItemDragOverlay(activeId) : null), document.body )); function renderSortableItemDragOverlay(id2) { return /* @__PURE__ */ bn.createElement("div", { className: viewType == "card" ? "mk-cards-container" : "mk-list-container" }, /* @__PURE__ */ bn.createElement(CardView, { plugin, value: filteredData.find((f4) => f4._index == id2), handle, id: id2, cols: displayCols, style: getItemStyles({ containerId: findContainer(id2), overIndex: -1, index: getIndex(id2), value: id2, isSorting: true, isDragging: true, isDragOverlay: true }), color: getColor(id2), wrapperStyle: wrapperStyle({ index: 0 }), renderItem, dragOverlay: true })); } function renderContainerDragOverlay(containerId) { return /* @__PURE__ */ bn.createElement(CardColumnView, { id: containerId, plugin, label: `Column ${containerId}`, field: groupBy2, columns, style: { height: "100%" }, shadow: true, unstyled: false }, items[Object.keys(items)[parseInt(containerId) * -1]].map( (item, index) => /* @__PURE__ */ bn.createElement(CardView, { key: item, id: item, plugin, value: filteredData.find((f4) => f4._index == item), cols: displayCols, handle, style: getItemStyles({ containerId, overIndex: -1, index: getIndex(item), value: item, isDragging: false, isSorting: false, isDragOverlay: false }), color: getColor(item), selected: selectedRows.some((f4) => f4 == item), onSelect: selectItem, wrapperStyle: wrapperStyle({ index }), renderItem }) )); } function getNextContainerId() { const containeIds = Object.keys(items); const lastContaineId = containeIds[containeIds.length - 1]; return String.fromCharCode(lastContaineId.charCodeAt(0) + 1); } }; function getColor(id2) { switch (id2[0]) { case "A": return "#7193f1"; case "B": return "#ffda6c"; case "C": return "#00bcd4"; case "D": return "#ef769f"; } return void 0; } function SortableItem({ disabled, id: id2, plugin, index, handle, renderItem, style, containerId, onSelect, selected, getIndex, cols, value, wrapperStyle }) { const { setNodeRef, listeners, isDragging, isSorting, over, overIndex, transform, transition } = useSortable({ id: id2 }); const mounted = useMountStatus(); const mountedWhileDragging = isDragging && !mounted; return /* @__PURE__ */ bn.createElement(CardView, { ref: disabled ? void 0 : setNodeRef, value, plugin, id: id2, cols, dragging: isDragging, sorting: isSorting, handle, index, wrapperStyle: wrapperStyle({ index }), style: style({ index, value: id2, isDragging, isSorting, overIndex: over ? getIndex(over.id) : overIndex, containerId }), onSelect, selected, color: getColor(id2), transition, transform, fadeIn: mountedWhileDragging, listeners, renderItem }); } function useMountStatus() { const [isMounted, setIsMounted] = p2(false); h2(() => { const timeout = setTimeout(() => setIsMounted(true), 500); return () => clearTimeout(timeout); }, []); return isMounted; } // src/components/ContextView/FlowListView/FlowListView.tsx var import_obsidian18 = require("obsidian"); var FlowListView = (props2) => { const { filteredData: data } = q2(MDBContext); const flowItems = F(() => { return data.map((f4) => getAbstractFileAtPath(app, f4.File)).filter((f4) => f4 instanceof import_obsidian18.TFile && f4.extension == "md"); }, [data]); return /* @__PURE__ */ bn.createElement("div", { className: "mk-flow-container" }, flowItems.map((f4) => /* @__PURE__ */ bn.createElement("div", null, /* @__PURE__ */ bn.createElement("span", null, fileNameToString(f4.name)), /* @__PURE__ */ bn.createElement(FlowView, { plugin: props2.plugin, path: f4.path, load: true })))); }; // src/components/ContextView/ContextListView.tsx var ContextListView = (props2) => { const { schema } = q2(MDBContext); const [error, resetError] = P2(); if (error) console.log(error); return schema ? schema.type == "flow" ? /* @__PURE__ */ bn.createElement(FlowListView, { plugin: props2.plugin }) : schema.type == "table" ? /* @__PURE__ */ bn.createElement(TableView, { plugin: props2.plugin }) : /* @__PURE__ */ bn.createElement(CardsView, { plugin: props2.plugin }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null); }; // src/components/ContextView/InlineContextViewComponent.tsx var InlineContextViewComponent = (props2) => { const type = viewTypeByString(props2.path); const path = type == "tag" ? tagContextFromTag(props2.plugin, props2.path) : folderContextFromFolder(props2.plugin, props2.path); const folder = type == "tag" ? null : props2.path; const tag = type == "tag" ? props2.path : null; return /* @__PURE__ */ bn.createElement(MDBProvider, { plugin: props2.plugin, dbPath: path, folder, tag, schema: props2.schema }, path && /* @__PURE__ */ bn.createElement(ContextListView, { plugin: props2.plugin })); }; // src/components/ContextView/InlineContextView.tsx var INLINE_CONTEXT_VIEW_TYPE = "make-inline-context"; var InlineContextView = class extends import_obsidian19.ItemView { constructor(leaf, plugin) { super(leaf); this.navigation = true; this.plugin = plugin; } getViewType() { return INLINE_CONTEXT_VIEW_TYPE; } getDisplayText() { return this.file; } async onClose() { this.destroy(); } destroy() { if (this.root) this.root.unmount(); } async onOpen() { this.destroy(); } async setState(state, result) { var _a2, _b2; this.file = state.file; this.ref = state.ref ? state.ref.substring(1, state.ref.length) : null; this.constructInlineContext(this.file); await super.setState(state, result); const type = viewTypeByString(this.file); const title = type == "tag" ? this.file : (_b2 = (_a2 = getAbstractFileAtPath(app, this.file)) == null ? void 0 : _a2.name) != null ? _b2 : this.file; this.leaf.tabHeaderInnerTitleEl.innerText = title; this.leaf.view.titleEl = title; const headerEl = this.leaf.view.headerEl; if (headerEl) { headerEl.querySelector(".view-header-title").innerText = title; } return; } getState() { let state = super.getState(); state.file = this.file; return state; } constructInlineContext(file) { this.destroy(); this.root = createRoot(this.contentEl); this.root.render( /* @__PURE__ */ bn.createElement("div", null, /* @__PURE__ */ bn.createElement(InlineContextViewComponent, { plugin: this.plugin, path: this.file, schema: this.ref })) ); } }; // src/components/FlowEditor/FlowEditor.tsx var import_obsidian20 = require("obsidian"); var popovers = /* @__PURE__ */ new WeakMap(); var mouseCoords = { x: 0, y: 0 }; function nosuper(base) { const derived = function() { return Object.setPrototypeOf(new import_obsidian20.Component(), new.target.prototype); }; derived.prototype = base.prototype; return Object.setPrototypeOf(derived, base); } var _a, _b, _c, _d, _e; var FlowEditor = class extends nosuper(import_obsidian20.HoverPopover) { constructor(parent, targetEl, plugin, waitTime, onShowCallback) { super(); this.targetEl = targetEl; this.plugin = plugin; this.onShowCallback = onShowCallback; this.abortController = this.addChild(new import_obsidian20.Component()); this.detaching = false; this.opening = false; this.rootSplit = new import_obsidian20.WorkspaceSplit( window.app.workspace, "vertical" ); this.targetRect = (_a = this.targetEl) == null ? void 0 : _a.getBoundingClientRect(); this.oldPopover = (_b = this.parent) == null ? void 0 : _b.flowEditor; this.document = (_e = (_d = (_c = this.targetEl) == null ? void 0 : _c.ownerDocument) != null ? _d : window.activeDocument) != null ? _e : window.document; this.id = genId(); this.hoverEl = this.document.defaultView.createDiv({ cls: "mk-floweditor mk-hover-popover", attr: { id: "he" + this.id } }); if (waitTime === void 0) { waitTime = 300; } this.onTarget = true; this.parent = parent; this.waitTime = waitTime; this.state = import_obsidian20.PopoverState.Showing; const { hoverEl } = this; this.abortController.load(); this.timer = window.setTimeout(this.show.bind(this), waitTime); this.setActive = this._setActive.bind(this); if (hoverEl) { hoverEl.addEventListener("mousedown", this.setActive); } popovers.set(this.hoverEl, this); this.hoverEl.addClass("hover-editor"); this.containerEl = this.hoverEl.createDiv("popover-content"); this.setTitleBar(); this.hoverEl.style.height = "auto"; this.hoverEl.style.width = "100%"; this.hoverEl.addEventListener("keydown", (e4) => e4.stopPropagation()); } static activeWindows() { const windows = [window]; const { floatingSplit } = app.workspace; if (floatingSplit) { for (const split of floatingSplit.children) { if (split.win) windows.push(split.win); } } return windows; } static containerForDocument(doc) { if (doc !== document && app.workspace.floatingSplit) for (const container of app.workspace.floatingSplit.children) { if (container.doc === doc) return container; } return app.workspace.rootSplit; } static activePopovers() { return this.activeWindows().flatMap(this.popoversForWindow); } static popoversForWindow(win) { var _a2, _b2; return Array.prototype.slice.call( (_b2 = (_a2 = win == null ? void 0 : win.document) == null ? void 0 : _a2.body.querySelectorAll(".mk-hover-popover")) != null ? _b2 : [] ).map((el) => popovers.get(el)).filter((he) => he); } static forLeaf(leaf) { const el = leaf && document.body.matchParent.call(leaf.containerEl, ".mk-hover-popover"); return el ? popovers.get(el) : void 0; } _setActive() { this.plugin.app.workspace.setActiveLeaf(this.leaves()[0], { focus: true }); } getDefaultMode() { var _a2, _b2; return ((_b2 = (_a2 = this.parent) == null ? void 0 : _a2.view) == null ? void 0 : _b2.getMode) ? this.parent.view.getMode() : "preview"; } updateLeaves() { if (this.onTarget && this.targetEl && !this.document.contains(this.targetEl)) { this.onTarget = false; this.transition(); } let leafCount = 0; this.plugin.app.workspace.iterateLeaves((leaf) => { leafCount++; }, this.rootSplit); if (leafCount === 0) { this.hide(); } else if (leafCount > 1) { } this.hoverEl.setAttribute("data-leaf-count", leafCount.toString()); } setTitleBar() { this.titleEl = this.document.defaultView.createDiv("mk-flow-titlebar"); this.containerEl.prepend(this.titleEl); } attachLeaf() { this.rootSplit.getRoot = () => this.plugin.app.workspace[this.document === document ? "rootSplit" : "floatingSplit"]; this.rootSplit.getContainer = () => FlowEditor.containerForDocument(this.document); this.titleEl.insertAdjacentElement("afterend", this.rootSplit.containerEl); let leaf = this.plugin.app.workspace.createLeafInParent( this.rootSplit, 0 ); this.updateLeaves(); return leaf; } onload() { super.onload(); this.registerEvent( this.plugin.app.workspace.on("layout-change", this.updateLeaves, this) ); this.registerEvent( app.workspace.on("layout-change", () => { this.rootSplit.children.forEach((item, index) => { if (item instanceof import_obsidian20.WorkspaceTabs) { this.rootSplit.replaceChild(index, item.children[0]); } }); }) ); } leaves() { const leaves = []; this.plugin.app.workspace.iterateLeaves((leaf) => { leaves.push(leaf); }, this.rootSplit); return leaves; } onShow() { var _a2, _b2; const closeDelay = 600; setTimeout(() => this.waitTime = closeDelay, closeDelay); (_a2 = this.oldPopover) == null ? void 0 : _a2.hide(); this.oldPopover = null; this.hoverEl.toggleClass("is-new", true); this.document.body.addEventListener( "click", () => { this.hoverEl.toggleClass("is-new", false); }, { once: true, capture: true } ); if (this.parent) { this.parent.flowEditor = this; } const viewHeaderEl = this.hoverEl.querySelector(".view-header"); viewHeaderEl == null ? void 0 : viewHeaderEl.remove(); const sizer = this.hoverEl.querySelector(".workspace-leaf"); this.hoverEl.appendChild(sizer); const inlineTitle = this.hoverEl.querySelector(".inline-title"); inlineTitle == null ? void 0 : inlineTitle.remove(); (_b2 = this.onShowCallback) == null ? void 0 : _b2.call(this); this.onShowCallback = void 0; } transition() { if (this.shouldShow()) { if (this.state === import_obsidian20.PopoverState.Hiding) { this.state = import_obsidian20.PopoverState.Shown; clearTimeout(this.timer); } } else { if (this.state === import_obsidian20.PopoverState.Showing) { this.hide(); } else { if (this.state === import_obsidian20.PopoverState.Shown) { this.state = import_obsidian20.PopoverState.Hiding; this.timer = window.setTimeout(() => { if (this.shouldShow()) { this.transition(); } else { this.hide(); } }, this.waitTime); } } } } shouldShow() { return this.shouldShowSelf() || this.shouldShowChild(); } shouldShowChild() { return FlowEditor.activePopovers().some((popover) => { if (popover !== this && popover.targetEl && this.hoverEl.contains(popover.targetEl)) { return popover.shouldShow(); } return false; }); } shouldShowSelf() { return !this.detaching && !!(this.onTarget || this.state == import_obsidian20.PopoverState.Shown || this.document.querySelector( `body>.modal-container, body > #he${this.id} ~ .menu, body > #he${this.id} ~ .suggestion-container` )); } show() { if (!this.targetEl || this.document.body.contains(this.targetEl)) { this.state = import_obsidian20.PopoverState.Shown; this.timer = 0; this.shownPos = mouseCoords; this.targetEl.replaceChildren(this.hoverEl); this.onShow(); app.workspace.onLayoutChange(); this.load(); } else { this.hide(); } } onHide() { var _a2; this.oldPopover = null; if (((_a2 = this.parent) == null ? void 0 : _a2.flowEditor) === this) { this.parent.flowEditor = null; } } hide() { var _a2; this.onTarget = false; this.detaching = true; if (this.timer) { clearTimeout(this.timer); this.timer = 0; } this.hoverEl.hide(); if (this.opening) return; const leaves = this.leaves(); if (leaves.length) { leaves.forEach((leaf) => leaf.detach()); } else { this.parent = null; (_a2 = this.abortController) == null ? void 0 : _a2.unload(); this.abortController = void 0; return this.nativeHide(); } } nativeHide() { var _a2; const { hoverEl, targetEl } = this; this.state = import_obsidian20.PopoverState.Hidden; hoverEl.detach(); if (targetEl) { const parent = targetEl.matchParent(".mk-hover-popover"); if (parent) (_a2 = popovers.get(parent)) == null ? void 0 : _a2.transition(); } this.onHide(); this.unload(); } resolveLink(linkText, sourcePath) { const link = (0, import_obsidian20.parseLinktext)(linkText); const tFile = link ? this.plugin.app.metadataCache.getFirstLinkpathDest( link.path, sourcePath != null ? sourcePath : "" ) : null; return tFile; } async openFile(file, openState, useLeaf) { if (this.detaching) return; const leaf = useLeaf != null ? useLeaf : this.attachLeaf(); this.opening = true; try { await leaf.openFile(file, openState); } catch (e4) { console.error(e4); } finally { this.opening = false; if (this.detaching) this.hide(); } this.plugin.app.workspace.setActiveLeaf(leaf); return leaf; } buildState(parentMode, eState) { return { active: false, state: {}, eState }; } buildEphemeralState(file, link) { const cache = this.plugin.app.metadataCache.getFileCache(file); const subpath = cache ? (0, import_obsidian20.resolveSubpath)(cache, (link == null ? void 0 : link.subpath) || "") : void 0; const eState = { subpath: link == null ? void 0 : link.subpath }; if (subpath) { eState.line = subpath.start.line; eState.startLoc = subpath.start; eState.endLoc = subpath.end || void 0; } return eState; } }; // src/utils/flow/flowEditor.ts var import_obsidian21 = require("obsidian"); var parseOutReferences = (ostr) => { const str = ostr.split("|")[0]; const refIndex = str.lastIndexOf("#"); return refIndex != -1 ? [str.substring(0, refIndex), str.substring(refIndex + 1)] : [str, void 0]; }; var getFileFromString2 = (url, source) => { return app.metadataCache.getFirstLinkpathDest(url, source != null ? source : ""); }; var getLineRangeFromRef = (file, ref, plugin) => { var _a2; if (!ref) { return [void 0, void 0]; } const cache = app.metadataCache.getFileCache(file); const headings = cache.headings; const blocks = cache.blocks; const sections = cache.sections; if (blocks && ref.charAt(0) == "^" && blocks[ref.substring(1)]) { return [ blocks[ref.substring(1)].position.start.line + 1, blocks[ref.substring(1)].position.end.line + 1 ]; } const heading = headings == null ? void 0 : headings.find((f4) => f4.heading.replace("#", " ") == ref); if (heading) { const index = headings.findIndex((f4) => f4.heading == heading.heading); const level = (_a2 = headings[index]) == null ? void 0 : _a2.level; const nextIndex2 = headings.findIndex( (f4, i4) => i4 > index && f4.level <= level ); const start = plugin.settings.editorFlowStyle == "classic" ? heading.position.start.line + 1 : heading.position.start.line + 2; if (index < headings.length - 1 && nextIndex2 != -1) { return [start, headings[nextIndex2].position.end.line]; } return [start, sections[sections.length - 1].position.end.line + 1]; } return [void 0, void 0]; }; var loadFlowEditorByDOM2 = (make, el, view, id2) => { setTimeout(async () => { let counter = 0; while (!el.parentElement && counter++ <= 50) await sleep(50); if (!el.parentElement) return; let dom = el; while (!dom.hasClass("mk-floweditor") && !dom.hasClass("workspace") && dom.parentElement) { dom = dom.parentElement; } if (!dom.hasClass("mk-floweditor") && !dom.hasClass("workspace") && !(dom.nodeName == "HTML")) { return; } setTimeout(async () => { var _a2; let leafFound = false; if (app.workspace.activeEditor) { if (app.workspace.activeEditor.editMode.cm.dom == view.dom) { leafFound = true; loadFlowEditorsForLeafForID( app.workspace.activeEditor.editMode.cm, (_a2 = app.workspace.activeEditor.file) == null ? void 0 : _a2.path, make, id2 ); } } if (!leafFound) { app.workspace.iterateLeaves((leaf) => { var _a3, _b2; const cm = (_a3 = leaf.view.editor) == null ? void 0 : _a3.cm; if (cm && view.dom == cm.dom) { leafFound = true; loadFlowEditorsForLeafForID( cm, (_b2 = leaf.view.file) == null ? void 0 : _b2.path, make, id2 ); } }, app.workspace["rootSplit"]); } }); }); }; var loadFlowEditorsForLeafForID = (cm, source, make, id2) => { const stateField = cm.state.field(flowEditorInfo, false); if (!stateField) return; const flowInfo = stateField.find((f4) => f4.id == id2); if (flowInfo && flowInfo.expandedState == 2) { loadFlowEditor(cm, flowInfo, source, make); } }; var loadFlowEditor = (cm, flowEditorInfo2, source, make) => { const dom = cm.dom.querySelector( "#mk-flow-" + flowEditorInfo2.id ); const [link, ref] = parseOutReferences(flowEditorInfo2.link); if (dom) { if (link.charAt(0) == "#") { if (!dom.hasAttribute("ready")) { dom.setAttribute("ready", ""); createFlowEditorInElement( flowEditorInfo2.id, dom, ref ? "block" : "flow", link ); } return; } if (link.charAt(link.length - 1) == "/") { const folder = getAbstractFileAtPath( app, link.substring(0, link.length - 1) ); if (!dom.hasAttribute("ready") && folder) { dom.setAttribute("ready", ""); createFlowEditorInElement( flowEditorInfo2.id, dom, "context", folder.path, ref ); return; } } const file = getFileFromString2(link, source); const aFile = getAbstractFileAtPath(app, link); if (file) { const selectiveRange = getLineRangeFromRef(file, ref, make); if (!dom.hasAttribute("ready")) { dom.setAttribute("ready", ""); createFlowEditorInElement( flowEditorInfo2.id, dom, ref ? "block" : "flow", file.path, ref, selectiveRange[0], selectiveRange[1] ); } } else { if (aFile instanceof import_obsidian21.TFolder) { if (!dom.hasAttribute("ready")) { dom.setAttribute("ready", ""); createFlowEditorInElement( flowEditorInfo2.id, dom, ref ? "block" : "flow", link ); } return; } dom.empty(); const createDiv = dom.createDiv("file-embed"); createDiv.toggleClass("mod-empty", true); const createFile = async (e4) => { e4.stopPropagation(); e4.stopImmediatePropagation(); await app.fileManager.createNewMarkdownFile(app.vault.getRoot(), link); loadFlowEditor(cm, flowEditorInfo2, source, make); }; createDiv.setText(`"${link}" ` + i18n_default.labels.noFile); createDiv.addEventListener("click", createFile); } } }; var focusPortal = async (plugin, evt) => { const { id: id2, parent, top } = evt.detail; if (parent) { app.workspace.iterateLeaves((leaf) => { var _a2; const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; if (cm) { const stateField = cm.state.field(flowEditorInfo, false); if (stateField) { const foundInfo = stateField.find((f4) => f4.id == id2); if (foundInfo) { cm.focus(); if (top) { cm.dispatch({ selection: import_state4.EditorSelection.single(foundInfo.from - 4), annotations: arrowKeyAnnotation.of(1) }); } else { if (foundInfo.to + 2 == cm.state.doc.length) { cm.dispatch({ changes: [ { from: foundInfo.to + 2, to: foundInfo.to + 2, insert: cm.state.lineBreak } ], selection: import_state4.EditorSelection.single(foundInfo.to + 3), annotations: arrowKeyAnnotation.of(2) }); } else { cm.dispatch({ selection: import_state4.EditorSelection.single(foundInfo.to + 3), annotations: arrowKeyAnnotation.of(2) }); } } } } } }, app.workspace["rootSplit"]); } else { app.workspace.iterateLeaves((leaf) => { var _a2; const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; if (cm) { const stateField = cm.state.field(flowIDStateField, false); if (stateField && stateField == id2) { cm.focus(); const lineRange = cm.state.field(selectiveLinesFacet, false); const posRange = lineRange && lineRange[0] != void 0 ? lineRangeToPosRange(cm.state, lineRange) : { from: 0, to: cm.state.doc.length }; if (top) { cm.dispatch({ selection: import_state4.EditorSelection.single(posRange.from) }); } else { cm.dispatch({ selection: import_state4.EditorSelection.single(posRange.to) }); } } } }, app.workspace["rootSplit"]); } }; var openFileFromPortal = (plugin, evt) => { const { file: fullLink, source } = evt.detail; const [link, ref] = parseOutReferences(fullLink); const file = getFileFromString2(link, source); openAFile(file, plugin, false); }; var spawnLeafFromFile = async (plugin, file, el, type, ref, from, to) => { var _a2; if (type == "context") { const newLeaf2 = spawnPortal(plugin, el); newLeaf2.setViewState({ type: INLINE_CONTEXT_VIEW_TYPE, state: { file: removeTrailingSlashFromFolder(file), ref } }); return newLeaf2; } let portalFile = plugin.app.vault.getAbstractFileByPath(file); if (!portalFile || !Object.keys(app.embedRegistry.embedByExtension).some((f4) => f4 == portalFile.extension)) return; const newLeaf = spawnPortal(plugin, el, portalFile.name); await newLeaf.openFile(portalFile, { active: false }); if (newLeaf.view.setMode) newLeaf.view.setMode(newLeaf.view.editMode); if (from && to) { (_a2 = newLeaf.view.editor) == null ? void 0 : _a2.cm.dispatch({ annotations: [editableRange.of([from, to])] }); } return newLeaf; }; var spawnNewPortal = async (plugin, evt) => { var _a2, _b2, _c2; const { file, el, ref, from, to, type } = evt.detail; const newLeaf = await spawnLeafFromFile(plugin, file, el, type, ref); if (!((_a2 = newLeaf == null ? void 0 : newLeaf.view) == null ? void 0 : _a2.editor)) { return; } const view = (_b2 = newLeaf.view.editor) == null ? void 0 : _b2.cm; view.dispatch({ annotations: [ portalTypeAnnotation.of(evt.detail.type), flowIDAnnotation.of(evt.detail.id) ] }); view.dom.addEventListener("keydown", (e4) => { if (e4.key == "ArrowUp") { if (e4.metaKey == true) { view.dispatch({ annotations: arrowKeyAnnotation.of(3) }); } else { view.dispatch({ annotations: arrowKeyAnnotation.of(1) }); } } if (e4.key == "ArrowDown") { if (e4.metaKey == true) { view.dispatch({ annotations: arrowKeyAnnotation.of(4) }); } else { view.dispatch({ annotations: arrowKeyAnnotation.of(2) }); } } }); if (from && to) { (_c2 = newLeaf.view.editor) == null ? void 0 : _c2.cm.dispatch({ annotations: [editableRange.of([from, to])] }); } }; var spawnPortal = (plugin, initiatingEl, fileName, onShowCallback) => { const parent = plugin.app.workspace.activeLeaf; if (!initiatingEl) initiatingEl = parent.containerEl; const hoverPopover = new FlowEditor( parent, initiatingEl, plugin, void 0, onShowCallback ); if (fileName) hoverPopover.titleEl.textContent = fileName.substring( 0, fileName.lastIndexOf(".") ); return hoverPopover.attachLeaf(); }; // src/components/ui/modals/mergeColumnModal.ts var import_obsidian22 = require("obsidian"); var MergeColumnModal = class extends import_obsidian22.Modal { constructor(columns, mergeColumn) { super(app); this.columns = columns; this.mergeColumn = mergeColumn; } onOpen() { let { contentEl } = this; let myModal = this; let headerText = i18n_default.labels.mergeProperties; const headerEl = contentEl.createEl("div", { text: headerText }); headerEl.addClass("modal-title"); const containerEl = contentEl.createEl("div"); containerEl.style.cssText = "width: 100%; height: 2.5em; margin-bottom: 15px;"; const select = containerEl.createEl("select"); for (var i4 = 0; i4 < this.columns.length; i4++) { var opt = document.createElement("option"); opt.value = i4.toString(); opt.innerHTML = this.columns[i4].name + this.columns[i4].table; select.appendChild(opt); } const select2 = containerEl.createEl("select"); for (var i4 = 0; i4 < this.columns.length; i4++) { var opt = document.createElement("option"); opt.value = i4.toString(); opt.innerHTML = this.columns[i4].name + this.columns[i4].table; select2.appendChild(opt); } let changeButtonText = i18n_default.buttons.merge; const changeButton = contentEl.createEl("button", { text: changeButtonText }); const cancelButton = contentEl.createEl("button", { text: i18n_default.buttons.cancel }); cancelButton.style.cssText = "float: right;"; cancelButton.addEventListener("click", () => { myModal.close(); }); const onClickAction = async () => { this.mergeColumn( this.columns[parseInt(select.value)], this.columns[parseInt(select2.value)] ); myModal.close(); }; changeButton.addEventListener("click", onClickAction); } onClose() { let { contentEl } = this; contentEl.empty(); } }; // src/components/ui/modals/saveViewModal.ts var import_obsidian23 = require("obsidian"); var SaveViewModal = class extends import_obsidian23.Modal { constructor(schema, saveSchema, action) { super(app); this.schema = schema; this.saveSchema = saveSchema; this.action = action; } onOpen() { let { contentEl } = this; let myModal = this; let headerText; if (this.action == "new view") headerText = i18n_default.labels.saveView; if (this.action == "new table") headerText = i18n_default.labels.saveTable; if (this.action == "rename view") headerText = i18n_default.labels.renameView; if (this.action == "rename table") headerText = i18n_default.labels.renameTable; const headerEl = contentEl.createEl("div", { text: headerText }); headerEl.addClass("modal-title"); const inputEl = contentEl.createEl("input"); inputEl.style.cssText = "width: 100%; height: 2.5em; margin-bottom: 15px;"; inputEl.focus(); let changeButtonText; if (this.action == "new view") changeButtonText = i18n_default.buttons.saveView; if (this.action == "new table") changeButtonText = i18n_default.buttons.saveTable; if (this.action == "rename view") changeButtonText = i18n_default.buttons.renameView; if (this.action == "rename table") changeButtonText = i18n_default.buttons.renameTable; const changeButton = contentEl.createEl("button", { text: changeButtonText }); const cancelButton = contentEl.createEl("button", { text: i18n_default.buttons.cancel }); cancelButton.style.cssText = "float: right;"; cancelButton.addEventListener("click", () => { myModal.close(); }); const onClickAction = async () => { let newName = inputEl.value; if (this.action == "new view" || this.action == "new table") { this.saveSchema({ ...this.schema, id: newName, name: newName }); } else { this.saveSchema({ ...this.schema, name: newName }); } myModal.close(); }; changeButton.addEventListener("click", onClickAction); inputEl.addEventListener("keydown", (e4) => { if (e4.key === "Enter") { e4.preventDefault(); onClickAction(); } }); } onClose() { let { contentEl } = this; contentEl.empty(); } }; // src/components/ContextView/FilterBar/FilterBar.tsx var import_obsidian26 = require("obsidian"); // src/components/ContextView/FilterBar/SearchBar.tsx var SearchBar = (props2) => { const clearSearch = () => { props2.setSearchString(""); }; return /* @__PURE__ */ bn.createElement("div", { className: "mk-view-search" }, /* @__PURE__ */ bn.createElement("button", { dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-search"] } }), /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("input", { onChange: (e4) => props2.setSearchString(e4.target.value), placeholder: i18n_default.labels.searchPlaceholder, className: "mk-search-bar" }), /* @__PURE__ */ bn.createElement("button", { dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-clear"] }, onClick: () => clearSearch() }))); }; // src/components/ui/modals/syncMetadataModal.tsx var import_obsidian24 = require("obsidian"); var SyncMetadataModal = class extends import_obsidian24.Modal { constructor(plugin, files, syncColumns) { super(plugin.app); this.plugin = plugin; this.files = files; let closeButton = this.modalEl.querySelector( ".modal-close-button" ); closeButton.style.display = "none"; this.syncColumns = syncColumns; } onOpen() { let { contentEl } = this; let myModal = this; let headerText; const headerEl = contentEl.createEl("div", { text: headerText }); headerEl.addClass("modal-title"); headerEl.innerHTML = i18n_default.labels.syncMetadata; const root = createRoot(contentEl); root.render( /* @__PURE__ */ bn.createElement(SyncMetadataComponent, { plugin: this.plugin, files: this.files, syncColumns: this.syncColumns, close: () => this.close() }) ); } onClose() { let { contentEl } = this; contentEl.empty(); } }; var metadatTypeFilterPredicate = (value, index, self2) => { return self2.findIndex((v3) => value["type"] == v3["type"] && value["name"] == v3["name"]) === index; }; var SyncMetadataComponent = (props2) => { const { plugin } = props2; const cols = props2.files.reduce((p3, c4) => { const fm = frontMatterForFile(c4); const fmKeys = uniqCaseInsensitive(frontMatterKeys(fm)); if (props2.plugin.dataViewAPI()) { const dvValues = props2.plugin.dataViewAPI().page(c4.path); const dvKeys = uniqCaseInsensitive( Object.keys(dvValues != null ? dvValues : {}).filter( (f4, i4, self2) => !self2.find( (g4, j4) => g4.toLowerCase().replace(/\s/g, "-") == f4.toLowerCase().replace(/\s/g, "-") && i4 > j4 ) ? true : false ).filter((f4) => f4 != "file" && !fmKeys.some((g4) => f4 == g4)) ); return [...p3, ...fmKeys.map((f4) => ({ name: f4, type: "fm" })), ...dvKeys.map((f4) => ({ name: f4, type: "dv" }))].filter(metadatTypeFilterPredicate); } return [...p3, ...fmKeys.map((f4) => ({ name: f4, type: "fm" }))].filter(metadatTypeFilterPredicate); }, []); const [syncColumns, setSyncColumns] = p2(cols); const [table, setTable] = p2(""); const toggleColumn = (column) => { if (syncColumns.find((f4) => f4.name == column.name && f4.type == column.type)) { setSyncColumns((s5) => s5.filter((f4) => !(f4.name == column.name && f4.type == column.type))); } else { setSyncColumns((s5) => [...s5, column]); } }; const saveContexts = (_5, value) => { setTable(tagFromString(value[0])); }; const showContextMenu = (e4) => { const offset = e4.target.getBoundingClientRect(); const f4 = loadTags(props2.plugin); showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: false, editable: true, value: [], options: [ { name: "Folder", value: "" }, ...f4.map((m5) => ({ name: m5, value: m5 })) ], saveOptions: saveContexts, placeholder: i18n_default.labels.tagItemSelectPlaceholder, searchable: true, showAll: true } ); }; const sync = () => { props2.syncColumns(syncColumns, table); props2.close(); }; return /* @__PURE__ */ bn.createElement("div", { className: "modal-content" }, /* @__PURE__ */ bn.createElement("div", { className: "setting-item setting-item-heading" }, i18n_default.labels.syncProperties), /* @__PURE__ */ bn.createElement("div", { className: "setting-item" }, i18n_default.descriptions.syncProperties), /* @__PURE__ */ bn.createElement("div", { className: "setting-item" }, /* @__PURE__ */ bn.createElement("div", { className: "setting-item-info" }, /* @__PURE__ */ bn.createElement("div", { className: "setting-item-name" }, i18n_default.labels.selectContext), /* @__PURE__ */ bn.createElement("div", { className: "setting-item-description" }, i18n_default.descriptions.selectContext)), /* @__PURE__ */ bn.createElement("div", { className: "setting-item-control" }, /* @__PURE__ */ bn.createElement("button", { onClick: (e4) => showContextMenu(e4) }, table == "" ? i18n_default.buttons.currentFolder : table))), /* @__PURE__ */ bn.createElement("div", { className: "setting-item" }, /* @__PURE__ */ bn.createElement("div", { className: "setting-item-info" }, /* @__PURE__ */ bn.createElement("div", { className: "setting-item-name" }, i18n_default.labels.syncProperties), /* @__PURE__ */ bn.createElement("div", { className: "setting-item-description" }, i18n_default.descriptions.syncMetadata), cols.map((f4, index) => /* @__PURE__ */ bn.createElement("div", { className: "mobile-option-setting-item" }, /* @__PURE__ */ bn.createElement("input", { type: "checkbox", checked: syncColumns.some((g4) => g4.name == f4.name && g4.type == f4.type), onChange: () => toggleColumn(f4) }), /* @__PURE__ */ bn.createElement("span", { className: "mobile-option-setting-item-name" }, f4.name, /* @__PURE__ */ bn.createElement("span", { className: "nav-file-tag" }, f4.type)))))), /* @__PURE__ */ bn.createElement("button", { style: { marginRight: 8 }, onClick: () => sync() }, i18n_default.buttons.sync), /* @__PURE__ */ bn.createElement("button", { onClick: () => props2.close() }, i18n_default.buttons.cancel)); }; // src/components/ContextView/FilterBar/TagSelector.tsx var import_lodash5 = __toESM(require_lodash()); var import_obsidian25 = require("obsidian"); var TagSelector = (props2) => { const { data, tagContexts, dbFileExists, setContextTable, saveDB: saveDB2, tableData, contextTable, dbSchema, dbPath, saveContextDB, saveSchema, loadContextFields } = q2(MDBContext); const removeContext = (value) => { const removeTags = value.map((f4) => tagFromString(f4)); const tags = tagContexts.filter((f4) => !removeTags.some((t4) => t4 == f4)); removeTags.forEach((t4) => { removeSourceFromTag(props2.plugin, t4, dbPath); }); saveSchema({ ...dbSchema, def: tags.join("&") }); }; const saveContexts = async (_5, value) => { const tags = (0, import_lodash5.uniq)([...tagContexts, ...value.map((f4) => tagFromString(f4))]); tags.forEach((tag) => { initiateContextIfNotExists(props2.plugin, tag).then((f4) => { if (f4) { return consolidateRowsToTag( props2.plugin, tagContextFromTag(props2.plugin, tag), dbSchema.id, dbPath, tableData.rows ); } }).then((f4) => loadContextFields(tag)); }); saveSchema({ ...dbSchema, def: tags.join("&") }); }; const showContextMenu = (e4) => { const offset = e4.target.getBoundingClientRect(); const f4 = loadTags(props2.plugin); showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: false, editable: true, value: [], options: f4.map((m5) => ({ name: m5, value: m5 })), saveOptions: saveContexts, placeholder: i18n_default.labels.contextItemSelectPlaceholder, searchable: true, showAll: true } ); }; const showTagMenu = (e4, tag) => { const menu = new import_obsidian25.Menu(); menu.addItem((menuItem) => { menuItem.setIcon("hash"); menuItem.setTitle(i18n_default.menu.openTag); menuItem.onClick(() => { openTag(tag, props2.plugin, e4.metaKey); }); }); menu.addItem((menuItem) => { menuItem.setIcon("trash"); menuItem.setTitle(i18n_default.menu.removeTag); menuItem.onClick(() => { removeContext([tag]); }); }); const offset = e4.target.getBoundingClientRect(); menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); }; const saveMetadata = (keys, table) => { const files = data.map((f4) => f4.File); const importDV = (files2, dvKeys) => { return files2.reduce( (p3, c4) => { const dvValues = props2.plugin.dataViewAPI().page(c4); if (!dvValues) { return p3; } return { uniques: [], cols: uniqCaseInsensitive([...p3.cols, ...dvKeys]), rows: [ ...p3.rows, { File: c4, ...dvKeys.reduce( (p4, c5) => ({ ...p4, [c5]: parseFrontMatter(c5, dvValues[c5], true) }), {} ) } ] }; }, { uniques: [], cols: [], rows: [] } ); }; const importYAML = (files2, fmKeys) => { return files2.map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4).reduce( (p3, c4) => { const fm = frontMatterForFile(c4); if (!fm) { return p3; } return { uniques: [], cols: (0, import_lodash5.uniq)([...p3.cols, ...fmKeys]), rows: [ ...p3.rows, { File: c4.path, ...fmKeys.reduce( (p4, c5) => ({ ...p4, [c5]: parseFrontMatter(c5, fm[c5], false) }), {} ) } ] }; }, { uniques: [], cols: [], rows: [] } ); }; let yamlTableData = importYAML(files, keys.filter((f4) => f4.type == "fm").map((f4) => f4.name)); let yamlTypes = guestimateTypes(files, props2.plugin, false); if (props2.plugin.dataViewAPI()) { const dvTableData = importDV(files, keys.filter((f4) => f4.type == "dv").map((f4) => f4.name)); const dvTypes = guestimateTypes(files, props2.plugin, true); yamlTableData = { uniques: (0, import_lodash5.uniq)([...yamlTableData.uniques, ...dvTableData.uniques]), cols: (0, import_lodash5.uniq)([...yamlTableData.cols, ...dvTableData.cols]), rows: files.map((file) => { var _a2, _b2; return { ...(_a2 = yamlTableData.rows.find((r3) => r3.File == file)) != null ? _a2 : {}, ...(_b2 = dvTableData.rows.find((r3) => r3.File == file)) != null ? _b2 : {} }; }) }; yamlTypes = { ...yamlTypes, ...dvTypes }; } if (table == "") { const newTable = mergeTableData(tableData, yamlTableData, yamlTypes); saveDB2(newTable); } else { if (!dbFileExists) { saveDB2(tableData).then( () => saveContext(yamlTableData, yamlTypes, table) ); } else { saveContext(yamlTableData, yamlTypes, table); } } }; const saveContext = (yamlTableData, yamlTypes, table) => { if (contextTable[table]) { const newTable = mergeTableData( contextTable[table], yamlTableData, yamlTypes ); saveContextDB(newTable, table); saveSchema({ ...dbSchema, def: (0, import_lodash5.uniq)([...tagContexts, table]).join("&") }); } else { consolidateRowsToTag( props2.plugin, tagContextFromTag(props2.plugin, table), dbSchema.id, dbPath, tableData.rows ).then((f4) => { if (f4) { const newTable = mergeTableData(f4, yamlTableData, yamlTypes); return saveContextDB(newTable, table); } }).then(() => { saveSchema({ ...dbSchema, def: (0, import_lodash5.uniq)([...tagContexts, table]).join("&") }); }); } }; const syncMetadata = () => { let vaultChangeModal = new SyncMetadataModal( props2.plugin, data.map((f4) => getAbstractFileAtPath(app, f4.File)).filter((f4) => f4), saveMetadata ); vaultChangeModal.open(); }; return /* @__PURE__ */ bn.createElement("div", { className: "mk-tag-selector" }, tagContexts.map((f4) => /* @__PURE__ */ bn.createElement("button", { onContextMenu: (e4) => showTagMenu(e4, f4), onClick: (e4) => openTag(f4, props2.plugin, e4.metaKey) }, f4)), /* @__PURE__ */ bn.createElement("button", { "aria-label": i18n_default.buttons.addTag, onClick: (e4) => showContextMenu(e4) }, /* @__PURE__ */ bn.createElement("div", { className: "mk-icon-xsmall", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-plus"] } }), !dbFileExists ? i18n_default.buttons.tag : ""), /* @__PURE__ */ bn.createElement("button", { "aria-label": i18n_default.buttons.syncFields, onClick: (e4) => syncMetadata() }, /* @__PURE__ */ bn.createElement("div", { className: "mk-icon-xsmall", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-sync"] } }), !dbFileExists ? i18n_default.buttons.syncFields : "")); }; // src/components/ContextView/FilterBar/FilterBar.tsx var FilterBar = (props2) => { const { folderNoteOpen, viewFolderNote } = props2; const ctxRef = _2(null); const { tables, data, setDBSchema, loadContextFields, cols, isFolderContext, deleteSchema, saveSchema, saveDB: saveDB2, saveContextDB, setSchema, setSearchString, predicate, tagContexts, savePredicate, schema, dbSchema, dbPath, contextTable, tableData } = q2(MDBContext); const filteredCols = cols.filter((f4) => f4.hidden != "true"); const saveViewType = (type) => { saveSchema({ ...schema, type }); }; const selectView = (_dbschema, value) => { viewFolderNote && folderNoteOpen && viewFolderNote(false); setDBSchema(_dbschema); value && setSchema(tables.find((f4) => f4.id == value)); }; const openView = (e4, _dbschema) => { const views = tables.filter((f4) => f4.type != "db" && f4.def == _dbschema.id); if (views.length == 0) { selectView(_dbschema); return; } selectView(_dbschema, views[0].id); return; }; const showViewMenu = (e4, _dbschema) => { const views = tables.filter((f4) => f4.type != "db" && f4.def == _dbschema.id); const offset = e4.target.getBoundingClientRect(); showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: false, editable: false, value: tagContexts, options: views.map((m5) => ({ name: m5.name, value: m5.id })), saveOptions: (_5, value) => selectView(_dbschema, value[0]), placeholder: i18n_default.labels.viewItemSelectPlaceholder, searchable: false, showAll: true } ); }; const clearFilters = () => { savePredicate({ ...predicate, filters: [], sort: [] }); }; const clearHiddenCols = () => { savePredicate({ ...predicate, colsHidden: [] }); }; const removeFilter = (filter) => { const newFilters = [ ...predicate.filters.filter((f4) => f4.field != filter.field) ]; savePredicate({ ...predicate, filters: newFilters }); }; const showFilterMenu = (e4) => { const menu = new import_obsidian26.Menu(); menu.addItem((item) => { item.setTitle(i18n_default.menu.tableView); item.setIcon("table-2"); item.onClick(() => { saveViewType("table"); }); }); menu.addItem((item) => { item.setTitle(i18n_default.menu.cardView); item.setIcon("layout-grid"); item.onClick(() => { saveViewType("card"); }); }); menu.addItem((item) => { item.setTitle(i18n_default.menu.listView); item.setIcon("layout-list"); item.onClick(() => { saveViewType("list"); }); }); menu.addItem((item) => { item.setTitle(i18n_default.menu.flowView); item.setIcon("infinity"); item.onClick(() => { saveViewType("flow"); }); }); menu.addSeparator(); menu.addItem((item) => { item.setTitle(i18n_default.menu.groupBy); item.setIcon("columns"); item.onClick(() => { showGroupByMenu(e4); }); }); menu.addItem((item) => { item.setTitle(i18n_default.menu.sortBy); item.setIcon("sort-desc"); item.onClick(() => { showSortMenu(e4); }); }); menu.addSeparator(); menu.addItem((item) => { item.setTitle(i18n_default.menu.newFilter); item.setIcon("filter"); item.onClick(() => { showAddFilterMenu(e4); }); }); menu.addItem((item) => { item.setTitle(i18n_default.menu.clearFilters); item.setIcon("x-square"); item.onClick(() => { clearFilters(); }); }); menu.addSeparator(); menu.addItem((item) => { item.setTitle(i18n_default.menu.unhideFields); item.setIcon("eye"); item.onClick(() => { clearHiddenCols(); }); }); const offset = e4.target.getBoundingClientRect(); menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); }; const addSort = (_5, sort) => { var _a2; const field = sort[0]; const fieldType = (_a2 = filteredCols.find((f4) => f4.name + f4.table == field)) == null ? void 0 : _a2.type; if (fieldType) { const type = defaultPredicateFnForType(fieldType, sortFnTypes); const newSort = { field, type }; savePredicate({ ...predicate, sort: [ ...predicate.sort.filter((s5) => s5.field != newSort.field), newSort ] }); } }; const saveGroupBy = (_5, groupBy2) => { savePredicate({ ...predicate, groupBy: groupBy2 }); }; const removeSort = (sort) => { const newSort = [...predicate.sort.filter((f4) => f4.field != sort.field)]; savePredicate({ ...predicate, sort: newSort }); }; const addFilter = (_5, filter) => { var _a2; const field = filter[0]; const fieldType = (_a2 = filteredCols.find((f4) => f4.name + f4.table == field)) == null ? void 0 : _a2.type; if (fieldType) { const type = defaultPredicateFnForType(fieldType, filterFnTypes); const newFilter = fieldType == "boolean" ? { field, type, value: "true" } : { field, type, value: "" }; savePredicate({ ...predicate, filters: [ ...predicate.filters.filter((s5) => s5.field != newFilter.field), newFilter ] }); } }; const changeSortMenu = (e4, sort) => { var _a2; const offset = e4.target.getBoundingClientRect(); const saveSort = (_5, newType) => { const type = newType[0]; const newSort = { ...sort, type }; savePredicate({ ...predicate, sort: [ ...predicate.sort.filter((s5) => s5.field != newSort.field), newSort ] }); }; const fieldType = (_a2 = filteredCols.find( (f4) => f4.name + f4.table == sort.field )) == null ? void 0 : _a2.type; const sortsForType = predicateFnsForType(fieldType, sortFnTypes); showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: false, editable: false, value: [], options: sortsForType.map((f4) => ({ name: sortFnTypes[f4].label, value: f4 })), saveOptions: saveSort, placeholder: i18n_default.labels.sortItemSelectPlaceholder, searchable: false, showAll: true } ); }; const showColsMenu = (e4) => { const offset = e4.target.getBoundingClientRect(); showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: false, editable: false, value: [], options: filteredCols.map((f4) => ({ name: f4.name + f4.table, value: f4.name + f4.table })), saveOptions: addFilter, placeholder: i18n_default.labels.propertyItemSelectPlaceholder, searchable: false, showAll: true } ); }; const changeFilterMenu = (e4, filter) => { var _a2; const offset = e4.target.getBoundingClientRect(); const saveFilter = (_5, newType) => { const type = newType[0]; const newFilter = { ...filter, type }; savePredicate({ ...predicate, filters: [ ...predicate.filters.filter((s5) => s5.field != newFilter.field), newFilter ] }); }; const fieldType = (_a2 = filteredCols.find( (f4) => f4.name + f4.table == filter.field )) == null ? void 0 : _a2.type; const filtersForType = predicateFnsForType(fieldType, filterFnTypes); showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: false, editable: false, value: [], options: filtersForType.map((f4) => ({ name: filterFnTypes[f4].label, value: f4 })), saveOptions: saveFilter, placeholder: i18n_default.labels.filterItemSelectPlaceholder, searchable: false, showAll: true } ); }; const showAddFilterMenu = (e4) => { const offset = e4.target.getBoundingClientRect(); showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: false, editable: false, value: [], options: filteredCols.filter((f4) => predicateFnsForType(f4.type, filterFnTypes).length > 0).map((f4) => ({ name: f4.name + f4.table, value: f4.name + f4.table })), saveOptions: addFilter, placeholder: i18n_default.labels.propertyItemSelectPlaceholder, searchable: false, showAll: true } ); }; const showSortMenu = (e4) => { const offset = e4.target.getBoundingClientRect(); showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: false, editable: false, value: [], options: filteredCols.map((f4) => ({ name: f4.name + f4.table, value: f4.name + f4.table })), saveOptions: addSort, placeholder: i18n_default.labels.sortItemSelectPlaceholder, searchable: false, showAll: true } ); }; const showGroupByMenu = (e4) => { const offset = e4.target.getBoundingClientRect(); showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: false, editable: false, value: [], options: filteredCols.filter((f4) => f4.primary != "true").map((f4) => ({ name: f4.name + f4.table, value: f4.name + f4.table })), saveOptions: saveGroupBy, placeholder: i18n_default.labels.propertyItemSelectPlaceholder, searchable: false, showAll: true } ); }; const showFMMenu = (e4) => { const menu = new import_obsidian26.Menu(); menu.addItem((menuItem) => { menuItem.setIcon("log-in"); menuItem.setTitle(i18n_default.menu.mergeProperties); menuItem.onClick(() => { showMergeColumnModal(); }); }); const offset = e4.target.getBoundingClientRect(); menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); }; const mergeColumn = (fromCol, toCol) => { const fromTable = fromCol.table == "" ? tableData : contextTable[fromCol.table]; if (toCol.table == "") { saveDB2({ ...tableData, rows: tableData.rows.map((r3, i4) => { const foundRow = fromTable.rows.find((f4) => f4.File == r3.File); return foundRow ? { ...r3, [toCol.name]: foundRow[fromCol.name] } : r3; }) }); } else { saveContextDB( { ...contextTable[toCol.table], rows: contextTable[toCol.table].rows.map((r3, i4) => { const foundRow = fromTable.rows.find((f4) => f4.File == r3.File); return foundRow ? { ...r3, [toCol.name]: foundRow[fromCol.name] } : r3; }) }, toCol.table ); } }; const showMergeColumnModal = () => { var _a2; let vaultChangeModal = new MergeColumnModal( [ ...(_a2 = filteredCols == null ? void 0 : filteredCols.map((f4) => ({ ...f4, table: "" }))) != null ? _a2 : [], ...tagContexts.reduce( (p3, c4) => { var _a3, _b2; return [ ...p3, ...(_b2 = (_a3 = contextTable[c4]) == null ? void 0 : _a3.cols.filter( (f4) => f4.name != "File" && f4.hidden != "true" && f4.type != "fileprop" ).map((f4) => ({ ...f4, table: c4 }))) != null ? _b2 : [] ]; }, [] ) ], mergeColumn ); vaultChangeModal.open(); }; const showSaveViewModal = () => { let vaultChangeModal = new SaveViewModal(schema, saveSchema, "new view"); vaultChangeModal.open(); }; const selectFilterValue = (e4, filter) => { var _a2, _b2, _c2; switch (filterFnTypes[filter.type].valueType) { case "text": case "number": { const menu = new import_obsidian26.Menu(); menu.setUseNativeMenu(false); const saveFilterValue = (value) => { const newFilter = { ...filter, value }; savePredicate({ ...predicate, filters: [ ...predicate.filters.filter((s5) => s5.field != newFilter.field), newFilter ] }); }; menu.addItem((menuItem) => { inputMenuItem( menuItem, filter.value, (value) => saveFilterValue(value) ); menuItem.setIcon("type"); }); const offset = e4.target.getBoundingClientRect(); menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); } break; case "date": { const saveValue = (date2) => { const newFilter = { ...filter, value: date2.valueOf().toString() }; savePredicate({ ...predicate, filters: [ ...predicate.filters.filter((s5) => s5.field != newFilter.field), newFilter ] }); }; const offset = e4.target.getBoundingClientRect(); const date = new Date(filter.value); showDatePickerMenu( { x: offset.left, y: offset.top + 30 }, date.getTime() ? date : null, saveValue ); break; } case "list": { const col = cols.find((f4) => f4.name + f4.table == filter.field); const saveOptions = (options, values) => { const newFilter = { ...filter, value: values.join(",") }; savePredicate({ ...predicate, filters: [ ...predicate.filters.filter((s5) => s5.field != newFilter.field), newFilter ] }); }; if (col.type.startsWith("option")) { const offset = e4.target.getBoundingClientRect(); showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: true, editable: false, value: splitString(filter.value), options: splitString(col.value).map((f4) => ({ name: f4, value: f4 })), saveOptions, placeholder: i18n_default.labels.optionItemSelectPlaceholder, searchable: true, showAll: true } ); } else if (col.type.startsWith("context")) { const contextData = (_b2 = (_a2 = contextTable[col.table]) == null ? void 0 : _a2.rows) != null ? _b2 : []; const offset = e4.target.getBoundingClientRect(); showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: true, editable: false, value: splitString(filter.value), options: (_c2 = contextData.map((f4) => ({ name: filePathToString(f4["File"]), value: f4["File"] }))) != null ? _c2 : [], saveOptions, placeholder: i18n_default.labels.optionItemSelectPlaceholder, searchable: true, showAll: true } ); } } break; } }; const saveNewSchemas = (_schema) => { const newSchema = { ..._schema, id: uniqueNameFromString( sanitizeTableName(_schema.id), tables.map((f4) => f4.id) ) }; saveSchema(newSchema).then( (f4) => saveDB2({ schema: newSchema, cols: defaultTableFields.map((f5) => ({ ...f5, schemaId: newSchema.id })), rows: [] }) ); }; const newTable = (e4) => { let vaultChangeModal = new SaveViewModal( { id: "", name: "", type: "db" }, saveNewSchemas, "new table" ); vaultChangeModal.open(); }; const viewContextMenu = (e4, _schema) => { const fileMenu = new import_obsidian26.Menu(); fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setTitle("Rename Table"); menuItem.onClick(() => { let vaultChangeModal = new SaveViewModal( _schema, (s5) => saveSchema(s5), "rename table" ); vaultChangeModal.open(); }); }); fileMenu.addItem((menuItem) => { menuItem.setTitle("Delete Table"); menuItem.onClick(() => { deleteSchema(_schema); }); }); if (isMouseEvent(e4)) { fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); } else { fileMenu.showAtPosition({ x: e4.nativeEvent.locationX, y: e4.nativeEvent.locationY }); } }; return /* @__PURE__ */ bn.createElement(bn.Fragment, null, isFolderContext && /* @__PURE__ */ bn.createElement(TagSelector, { plugin: props2.plugin }), /* @__PURE__ */ bn.createElement("div", { className: "mk-view-selector" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-table-selector" }, viewFolderNote && /* @__PURE__ */ bn.createElement("button", { className: `mk-folder-note ${folderNoteOpen ? "mk-is-active" : ""}`, onClick: () => viewFolderNote(true) }, props2.folderNoteName), tables.filter((f4) => f4.type == "db").map((f4) => /* @__PURE__ */ bn.createElement("div", { className: `${!folderNoteOpen && (dbSchema == null ? void 0 : dbSchema.id) == f4.id ? "mk-is-active" : ""}`, onContextMenu: (e4) => !f4.primary && viewContextMenu(e4, f4) }, /* @__PURE__ */ bn.createElement("button", { onClick: (e4) => openView(e4, f4) }, f4.name), tables.filter((g4) => g4.type != "db" && g4.def == f4.id).length > 1 && /* @__PURE__ */ bn.createElement("button", { className: "mk-icon-xsmall mk-collapse", onClick: (e4) => showViewMenu(e4, f4), dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-collapse"] } }))), isFolderContext && /* @__PURE__ */ bn.createElement("button", { onClick: (e4) => newTable(e4) }, "+ Table")), /* @__PURE__ */ bn.createElement("span", null), !props2.folderNoteOpen && /* @__PURE__ */ bn.createElement("div", { className: "mk-view-options" }, /* @__PURE__ */ bn.createElement(SearchBar, { setSearchString }), /* @__PURE__ */ bn.createElement("button", { onClick: (e4) => showFilterMenu(e4), dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-view-options"] } }), /* @__PURE__ */ bn.createElement("button", { onClick: (e4) => showFMMenu(e4), dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-options"] } }))), (predicate.filters.length > 0 || predicate.sort.length > 0 || predicate.groupBy.length > 0) && !folderNoteOpen && /* @__PURE__ */ bn.createElement("div", { className: "mk-filter-bar" }, predicate.groupBy.length > 0 && /* @__PURE__ */ bn.createElement("div", { className: "mk-filter" }, /* @__PURE__ */ bn.createElement("span", null, "Group By"), /* @__PURE__ */ bn.createElement("span", { onClick: (e4) => showGroupByMenu(e4) }, predicate.groupBy[0]), /* @__PURE__ */ bn.createElement("div", { onClick: () => saveGroupBy(null, []), dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } })), predicate.sort.map((f4) => /* @__PURE__ */ bn.createElement("div", { className: "mk-filter" }, /* @__PURE__ */ bn.createElement("span", null, f4.field), /* @__PURE__ */ bn.createElement("span", { onClick: (e4) => changeSortMenu(e4, f4) }, sortFnTypes[f4.type].label), /* @__PURE__ */ bn.createElement("div", { onClick: () => removeSort(f4), dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } }))), predicate.filters.map((f4) => /* @__PURE__ */ bn.createElement("div", { className: "mk-filter" }, /* @__PURE__ */ bn.createElement("span", null, f4.field), /* @__PURE__ */ bn.createElement("span", { onClick: (e4) => changeFilterMenu(e4, f4) }, filterFnTypes[f4.type].label), /* @__PURE__ */ bn.createElement(FilterValueSpan, { col: cols.find((c4) => c4.name + c4.table == f4.field), filter: f4, selectFilterValue }), /* @__PURE__ */ bn.createElement("div", { onClick: () => removeFilter(f4), dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } }))), /* @__PURE__ */ bn.createElement("span", null), /* @__PURE__ */ bn.createElement("button", { className: "mk-filter-add mk-icon-small", onClick: () => showSaveViewModal() }, /* @__PURE__ */ bn.createElement("div", { dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-stack"] } }), "Save View"))); }; var FilterValueSpan = (props2) => { var _a2; const { filter, selectFilterValue } = props2; const fieldType = (_a2 = props2.col) == null ? void 0 : _a2.type; if (fieldType == "boolean" || !fieldType) { return /* @__PURE__ */ bn.createElement(bn.Fragment, null); } else if (filter.value.length == 0) { return /* @__PURE__ */ bn.createElement("span", { onClick: (e4) => selectFilterValue(e4, filter) }, "Select"); } else if (fieldType.startsWith("option") || fieldType.startsWith("context")) { const options = splitString(filter.value); return /* @__PURE__ */ bn.createElement("span", { onClick: (e4) => selectFilterValue(e4, filter) }, " ", options.map((f4) => /* @__PURE__ */ bn.createElement("span", null, f4))); } return /* @__PURE__ */ bn.createElement("span", { onClick: (e4) => selectFilterValue(e4, filter) }, filter.value); }; // src/components/ContextView/FolderContextViewComponent.tsx var FolderContextViewComponent = (props2) => { var _a2; const folder = (_a2 = props2.folder) == null ? void 0 : _a2.path; const path = folderContextFromFolder(props2.plugin, folder); const ref = _2(null); const [flowOpen, setFlowOpen] = p2(false); const folderNotePath = props2.plugin.settings.folderNoteInsideFolder ? `${props2.folder.path}/${props2.folder.name}.md` : props2.folder && props2.folder.parent.path == "/" ? `${props2.folder.name}.md` : `${props2.folder.parent.path}/${props2.folder.name}.md`; const loadFile = async () => { const folderNote = getAbstractFileAtPath(app, folderNotePath); if (folderNote) { const div = ref.current; const newLeaf = spawnPortal(props2.plugin, div); newLeaf.openFile(folderNote); } else { const div = ref.current; const newFile = await app.fileManager.createNewMarkdownFile( app.vault.getRoot(), folderNotePath ); const newLeaf = spawnPortal(props2.plugin, div); newLeaf.openFile(newFile); } }; h2(() => { if (flowOpen) { loadFile(); } else { if (ref.current) ref.current.empty(); } }, [flowOpen]); const viewFolderNote = (open) => { setFlowOpen(open); }; return /* @__PURE__ */ bn.createElement("div", { className: "mk-folder-scroller" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-folder-header" }, /* @__PURE__ */ bn.createElement("div", { className: "inline-title" }, props2.folder.name)), props2.plugin.settings.enableFolderNote ? /* @__PURE__ */ bn.createElement(MDBProvider, { plugin: props2.plugin, dbPath: path, folder }, /* @__PURE__ */ bn.createElement(FilterBar, { plugin: props2.plugin, folderNoteName: props2.folder.name, folderNoteOpen: flowOpen, viewFolderNote }), path && !flowOpen && /* @__PURE__ */ bn.createElement(ContextListView, { plugin: props2.plugin }), flowOpen && /* @__PURE__ */ bn.createElement("div", { className: "mk-flowspace-editor mk-foldernote", ref })) : /* @__PURE__ */ bn.createElement(MDBProvider, { plugin: props2.plugin, dbPath: path, folder }, /* @__PURE__ */ bn.createElement(FilterBar, { plugin: props2.plugin }), /* @__PURE__ */ bn.createElement(ContextListView, { plugin: props2.plugin }))); }; // src/components/ContextView/TagContextViewComponent.tsx var TagContextViewComponent = (props2) => { const path = tagContextFromTag(props2.plugin, props2.tag); return /* @__PURE__ */ bn.createElement("div", { className: "mk-folder-scroller" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-folder-header" }, /* @__PURE__ */ bn.createElement("div", { className: "inline-title" }, props2.tag)), /* @__PURE__ */ bn.createElement(MDBProvider, { plugin: props2.plugin, dbPath: path, tag: props2.tag }, /* @__PURE__ */ bn.createElement(FilterBar, { plugin: props2.plugin }), /* @__PURE__ */ bn.createElement(ContextListView, { plugin: props2.plugin }))); }; // src/components/ContextView/ContextView.tsx var CONTEXT_VIEW_TYPE = "make-folder-view"; var ContextView = class extends import_obsidian27.ItemView { constructor(leaf, plugin, viewType) { super(leaf); this.navigation = true; this.plugin = plugin; this.viewType = viewType; } getViewType() { return this.viewType; } getDisplayText() { var _a2; if (this.type == "tag") { return this.tag; } return (_a2 = this.folder) == null ? void 0 : _a2.name; } async onClose() { this.destroy(); } destroy() { if (this.root) this.root.unmount(); } async onOpen() { this.destroy(); } async setState(state, result) { this.type = state.type; if (state.type == "folder") { const folder = getAbstractFileAtPath( this.plugin.app, state.folder ); if (!folder) { return; } this.folder = folder; this.constructFolderContext(folder); await super.setState(state, result); this.leaf.tabHeaderInnerTitleEl.innerText = folder.name; this.leaf.view.titleEl = folder.name; const headerEl = this.leaf.view.headerEl; if (headerEl) { headerEl.querySelector(".view-header-title").innerText = folder.name; } } else if (state.type == "tag") { this.tag = state.tag; this.constructTagContext(this.tag); await super.setState(state, result); this.leaf.tabHeaderInnerTitleEl.innerText = this.tag; this.leaf.view.titleEl = this.tag; const headerEl = this.leaf.view.headerEl; if (headerEl) { headerEl.querySelector(".view-header-title").innerText = this.tag; } } result.history = true; return; } getState() { var _a2; let state = super.getState(); state.type = this.type; if (state.type == "folder") { state.folder = (_a2 = this.folder) == null ? void 0 : _a2.path; } else { state.tag = this.tag; } return state; } constructTagContext(tag) { this.destroy(); this.root = createRoot(this.contentEl); this.root.render( /* @__PURE__ */ bn.createElement("div", { className: "mk-folder-view" }, /* @__PURE__ */ bn.createElement(TagContextViewComponent, { type: "tag", tag: this.tag, plugin: this.plugin })) ); } constructFolderContext(folder) { this.destroy(); this.root = createRoot(this.contentEl); this.root.render( /* @__PURE__ */ bn.createElement("div", { className: "mk-folder-view" }, folder && /* @__PURE__ */ bn.createElement(FolderContextViewComponent, { type: "folder", folder, plugin: this.plugin })) ); } }; // src/utils/file.ts var import_obsidian28 = require("obsidian"); var defaultNoteFolder = (plugin, activeFile2) => { var _a2; return (_a2 = plugin.settings.newFileLocation == "folder" ? getFolderFromPath(app, plugin.settings.newFileFolderPath) : plugin.settings.newFileLocation == "current" && activeFile2 ? getFolderFromPath(app, activeFile2) : plugin.app.vault.getRoot()) != null ? _a2 : plugin.app.vault.getRoot(); }; var defaultConfigFile = async (app2) => { return await app2.vault.adapter.read( (0, import_obsidian28.normalizePath)(app2.vault.configDir + "/app.json") ); }; var fileExtensionForFile = (path) => path.split(".").pop(); var appendFilesMetaData = (propType, filesString) => { const files = splitString(filesString).map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4); return files.map((f4) => appendFileMetaData3(propType, f4)).join(","); }; var appendFileMetaData3 = (propType, file) => { let value = ""; if (file) { if (propType == "folder") { value = file.parent.path; } if (file instanceof import_obsidian28.TFile) { if (propType == "ctime") { value = file.stat.ctime.toString(); } else if (propType == "mtime") { value = file.stat.mtime.toString(); } else if (propType == "extension") { value = file.extension; } else if (propType == "size") { value = file.stat.size.toString(); } } else if (propType == "extension") { value = i18n_default.menu.folder; } } return value; }; var viewTypeByString = (file) => { if (file.charAt(0) == "#") { return "tag"; } if (file.charAt(file.length - 1) == "/") { return "folder"; } const portalFile = app.vault.getAbstractFileByPath(file); if (portalFile instanceof import_obsidian28.TFolder) { return "folder"; } if (portalFile instanceof import_obsidian28.TFile) { return "file"; } return null; }; function getAllAbstractFilesInVault(plugin, app2) { let files = []; let rootFolder = app2.vault.getRoot(); function recursiveFx(folder) { for (let child of folderChildren(plugin, folder)) { if (child instanceof import_obsidian28.TFolder) { let childFolder = child; if (childFolder.children) recursiveFx(childFolder); } files.push(child); } } recursiveFx(rootFolder); return files; } var removeTrailingSlashFromFolder = (path) => path.slice(-1) == "/" ? path.substring(0, path.length - 1) : path; var getFolderFromPath = (app2, path) => { if (!path) return null; const afile = getAbstractFileAtPath(app2, removeTrailingSlashFromFolder(path)); if (!afile) return null; return afile instanceof import_obsidian28.TFolder ? afile : afile.parent; }; var getFolderPathFromString = (file) => { var _a2; return (_a2 = getFolderFromPath(app, file)) == null ? void 0 : _a2.path; }; var deleteFiles = (plugin, files) => { files.forEach((f4) => { const file = getAbstractFileAtPath(app, f4); deleteFile(plugin, file); }); }; var deleteFile = (plugin, file) => { let deleteOption = plugin.settings.deleteFileOption; if (deleteOption === "permanent") { plugin.app.vault.delete(file, true); } else if (deleteOption === "system-trash") { plugin.app.vault.trash(file, true); } else if (deleteOption === "trash") { plugin.app.vault.trash(file, false); } }; var openFile = async (file, plugin, newLeaf) => { openAFile(getAbstractFileAtPath(plugin.app, file.path), plugin, newLeaf); }; var openAFile = async (file, plugin, newLeaf) => { if (file instanceof import_obsidian28.TFolder) { openTFolder(file, plugin, newLeaf); } else if (file instanceof import_obsidian28.TFile) { openTFile(file, plugin, newLeaf); } let evt = new CustomEvent(eventTypes.activeFileChange, { detail: { filePath: file.path } }); window.dispatchEvent(evt); }; var openTFile = async (file, plugin, newLeaf) => { let leaf = app.workspace.getLeaf(newLeaf); app.workspace.setActiveLeaf(leaf, { focus: true }); await leaf.openFile(file, { eState: { focus: true } }); }; var openTFolder = async (file, plugin, newLeaf) => { let leaf = app.workspace.getLeaf(newLeaf); const viewType = CONTEXT_VIEW_TYPE; app.workspace.setActiveLeaf(leaf, { focus: true }); await leaf.setViewState({ type: viewType, state: { type: "folder", folder: file.path } }); await app.workspace.requestSaveLayout(); if (platformIsMobile()) { app.workspace.leftSplit.collapse(); } }; var openTag = async (tag, plugin, newLeaf) => { let leaf = app.workspace.getLeaf(newLeaf); const viewType = CONTEXT_VIEW_TYPE; app.workspace.setActiveLeaf(leaf, { focus: true }); await leaf.setViewState({ type: viewType, state: { type: "tag", tag } }); await app.workspace.requestSaveLayout(); if (platformIsMobile()) { app.workspace.leftSplit.collapse(); } }; var getAbstractFileAtPath = (app2, path) => { return app2.vault.getAbstractFileByPath(path); }; var openFileInNewPane = (plugin, file) => { openFile(file, plugin, true); }; var createNewMarkdownFile = async (plugin, folder, newFileName, content) => { const newFile = await app.fileManager.createNewMarkdownFile( folder, newFileName ); if (content && content !== "") await app.vault.modify(newFile, content); await openFile(newFile, plugin, false); const titleEl = app.workspace.activeLeaf.view.containerEl.querySelector( ".inline-title" ); if (titleEl) { titleEl.focus(); selectElementContents(titleEl); } let evt = new CustomEvent(eventTypes.activeFileChange, { detail: { filePath: newFile.path } }); window.dispatchEvent(evt); return newFile; }; var platformIsMobile = () => { return import_obsidian28.Platform.isMobile; }; var newFileInFolder = async (plugin, data) => { await createNewMarkdownFile( plugin, data.parent.children.find((f4) => f4.name == data.name), "", "" ); }; // src/utils/tree.ts var uniq = (a5) => [...new Set(a5)]; var uniqCaseInsensitive = (a5) => [ ...new Map(a5.map((s5) => [s5.toLowerCase(), s5])).values() ]; var uniqueNameFromString = (name, cols) => { let newName = name; if (cols.includes(newName)) { let append = 1; while (cols.includes(newName)) { newName = name + append.toString(); append += 1; } } return newName; }; var onlyUniqueProp = (prop) => (value, index, self2) => { return self2.findIndex((v3) => value[prop] == v3[prop]) === index; }; var fileNameToString = (filename) => filename.substring(0, filename.lastIndexOf(".")) || filename; var removeLeadingSlash = (path) => path.charAt(0) == "/" ? path.substring(1) : path; var filePathToString = (filename) => removeLeadingSlash( filename.substring(filename.lastIndexOf("/"), filename.lastIndexOf(".")) ) || filename; var folderPathToString = (filename) => removeLeadingSlash(filename.substring(filename.lastIndexOf("/"))) || filename; var safelyParseJSON = (json) => { var parsed; try { parsed = JSON.parse(json); } catch (e4) { } return parsed; }; var nodeIsAncestorOfTarget = (node, target) => { var _a2, _b2, _c2; if (((_a2 = node.item) == null ? void 0 : _a2.folder) == "false") return false; return (_c2 = target.item) == null ? void 0 : _c2.path.contains(((_b2 = node.item) == null ? void 0 : _b2.path) + "/"); }; var excludeVaultItemPredicate = (plugin) => (f4, index, folder) => !(f4.folder != "true" && plugin.settings.hiddenExtensions.find( (e4) => fileExtensionForFile(f4.path) == e4 )) && !plugin.settings.hiddenFiles.find((e4) => e4 == f4.path) && (!plugin.settings.enableFolderNote || !plugin.settings.folderNoteInsideFolder && !folder.some((g4) => g4.path + ".md" == f4.path) || plugin.settings.folderNoteInsideFolder && !(f4.parent + "/" + folderPathToString(f4.parent) + ".md" == f4.path)); var excludeFilePredicate = (plugin) => (f4, index, folder) => !(f4 instanceof import_obsidian29.TFile && plugin.settings.hiddenExtensions.find((e4) => f4.extension == e4)) && !plugin.settings.hiddenFiles.find((e4) => e4 == f4.path) && (!plugin.settings.enableFolderNote || !plugin.settings.folderNoteInsideFolder && !folder.some((g4) => g4.path + ".md" == f4.path) || plugin.settings.folderNoteInsideFolder && !(f4.parent.path + "/" + f4.parent.name + ".md" == f4.path)); var folderChildren = (plugin, f4, exclusionList) => { var _a2, _b2; return (_b2 = (_a2 = f4 == null ? void 0 : f4.children) == null ? void 0 : _a2.filter(excludeFilePredicate(plugin))) != null ? _b2 : []; }; var compareByField = (field, dir) => (_a2, _b2) => { const a5 = dir ? _a2 : _b2; const b4 = dir ? _b2 : _a2; if (a5[field] < b4[field]) { return -1; } if (a5[field] > b4[field]) { return 1; } return 0; }; var internalPluginLoaded = (pluginName, app2) => { var _a2; return (_a2 = app2.internalPlugins.plugins[pluginName]) == null ? void 0 : _a2._loaded; }; function selectElementContents(el) { var range = document.createRange(); range.selectNodeContents(el); var sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(range); } // src/cm-extensions/flowEditor/flowEditor.tsx var toggleFlowEditor = import_state5.Annotation.define(); var cacheFlowEditorHeight = import_state5.Annotation.define(); var preloadFlowEditor = import_state5.EditorState.transactionFilter.of( (tr) => { let newTrans = []; const value = tr.state.field(flowEditorInfo, false); if (value && !tr.annotation(toggleFlowEditor)) { newTrans.push( ...value.filter((f4) => f4.expandedState == 1).map((f4) => { if (tr.state.field(flowTypeStateField) == "doc") { return { annotations: toggleFlowEditor.of([f4.id, 2]) }; } else { return { annotations: toggleFlowEditor.of([f4.id, 0]) }; } }) ); } return [tr, ...newTrans]; } ); var internalLinkToggle = import_view4.ViewPlugin.fromClass( class { constructor(view) { } }, { eventHandlers: { mousedown: (e4, view) => { if (!e4.shiftKey) { return; } let pos = view.posAtDOM(e4.target); let { from: lineFrom, to: lineTo, text: text2 } = view.state.doc.lineAt(pos); for (let match2 of text2.matchAll(/(?!\!)\[\[([^\]]+)\]\]/g)) { const stateField = view.state.field(flowEditorInfo, false); const info = stateField.find( (f4) => f4.to == lineFrom + match2.index + match2[1].length + 2 && pos >= f4.from && pos <= f4.to ); if (info) { e4.preventDefault(); view.dispatch({ annotations: toggleFlowEditor.of([info.id, 2]) }); } } } } } ); var internalLinkHover = hoverTooltip((view, pos, side) => { let { from: lineFrom, to: lineTo, text: text2 } = view.state.doc.lineAt(pos); let hovObject = null; iterateTreeInSelection({ from: lineFrom, to: lineTo }, view.state, { enter: ({ name, from, to }) => { if (name.contains("hmd-internal-link") && pos <= to && pos >= from) { const stateField = view.state.field(flowEditorInfo, false); const info = stateField.find((f4) => f4.to == to); if (info) { hovObject = { pos, end: to, above: true, create(view2) { let dom = document.createElement("div"); dom.toggleClass("mk-flow-hover", true); dom.toggleClass("menu", true); const openHoverDiv = dom.createDiv(); openHoverDiv.setAttribute( "aria-label", info.expandedState == 0 ? i18n_default.buttons.openFlow : i18n_default.buttons.hideFlow ); openHoverDiv.addEventListener("click", () => { view2.dispatch({ annotations: toggleFlowEditor.of([info.id, 2]) }); }); const icon = openHoverDiv.createDiv(); icon.innerHTML = uiIconSet["mk-ui-flow-hover"]; openHoverDiv.insertAdjacentText( "beforeend", info.expandedState == 0 ? i18n_default.buttons.openFlow : i18n_default.buttons.hideFlow ); return { dom }; } }; return false; } } } }); return hovObject; }); var flowEditorInfo = import_state5.StateField.define({ create() { return []; }, update(value, tr) { var _a2, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; let newValues = []; const previous = value; let usedContainers = []; let str = tr.newDoc.sliceString(0); const reverseExpandedState = (state) => { const news = state != 2 ? 2 : 0; return news; }; for (let match2 of str.matchAll(/(?:!\[!\[|!!\[\[)([^\]]+)\]\]/g)) { const link = match2[1]; const existingLinks = previous.filter((f4) => f4.link == link); const offset = usedContainers.filter((f4) => f4 == link).length; const existingInfo = existingLinks[offset]; const id2 = existingInfo ? existingInfo.id : genId(); usedContainers.push(link); const info = { id: id2, link: match2[1], startOfLineFix: false, from: match2.index + 4, to: match2.index + 4 + match2[1].length, embed: 1, height: existingInfo ? ((_a2 = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _a2[0]) == id2 && ((_b2 = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _b2[1]) != 0 ? (_c2 = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _c2[1] : existingInfo.height : -1, expandedState: existingInfo ? ((_d2 = tr.annotation(toggleFlowEditor)) == null ? void 0 : _d2[0]) == id2 ? reverseExpandedState(existingInfo.expandedState) : existingInfo.expandedState : 1 }; newValues.push(info); } for (let match2 of str.matchAll(/\[\[([^\]]+)\]\]/g)) { if (str.charAt(match2.index - 1) != "!") { const link = match2[1]; const existingLinks = previous.filter((f4) => f4.link == link); const offset = usedContainers.filter((f4) => f4 == link).length; const existingInfo = existingLinks[offset]; const id2 = existingInfo ? existingInfo.id : genId(); usedContainers.push(link); const info = { id: id2, link: match2[1], startOfLineFix: false, from: match2.index + 2, to: match2.index + 2 + match2[1].length, embed: 0, height: existingInfo ? ((_e2 = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _e2[0]) == id2 && ((_f = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _f[1]) != 0 ? (_g = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _g[1] : existingInfo.height : -1, expandedState: existingInfo ? ((_h = tr.annotation(toggleFlowEditor)) == null ? void 0 : _h[0]) == id2 ? reverseExpandedState(existingInfo.expandedState) : existingInfo.expandedState : 0 }; newValues.push(info); } else if (str.charAt(match2.index - 2) != "!") { const link = match2[1]; const existingLinks = previous.filter((f4) => f4.link == link); const offset = usedContainers.filter((f4) => f4 == link).length; const existingInfo = existingLinks[offset]; const id2 = existingInfo ? existingInfo.id : genId(); usedContainers.push(link); const info = { id: id2, link: match2[1], startOfLineFix: false, from: match2.index + 3, to: match2.index + 3 + match2[1].length, embed: 2, height: existingInfo ? ((_i = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _i[0]) == id2 && ((_j = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _j[1]) != 0 ? (_k = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _k[1] : existingInfo.height : -1, expandedState: existingInfo ? ((_l = tr.annotation(toggleFlowEditor)) == null ? void 0 : _l[0]) == id2 ? reverseExpandedState(existingInfo.expandedState) : existingInfo.expandedState : 1 }; newValues.push(info); } } newValues.sort(compareByField("from", true)); return newValues; } }); var flowEditorRangeset = (state) => { let builder = new import_state5.RangeSetBuilder(); const infoFields = state.field(flowEditorInfo); for (let info of infoFields) { const { from, to, embed: embedType, expandedState } = info; const lineFix = from - 3 == state.doc.lineAt(from).from && to + 2 == state.doc.lineAt(from).to; if (expandedState == 2) { if (embedType == 1) { if (!(state.selection.main.from == from - 4 && state.selection.main.to == to + 2 || state.selection.main.from >= from - 3 && state.selection.main.to <= to + 1)) { builder.add(from - 4, from - 3, flowEditorSelector(info)); if (lineFix) { builder.add(from - 3, to + 2, flowEditorWidgetDecoration(info)); } else { builder.add(from - 3, to + 2, flowEditorDecoration(info)); } } } else if (embedType == 0) { builder.add(to + 2, to + 2, flowEditorDecoration(info)); } } } const dec = builder.finish(); return dec; }; var flowEditorField = import_state5.StateField.define({ create(state) { return flowEditorRangeset(state); }, update(value, tr) { return flowEditorRangeset(tr.state); }, provide: (f4) => import_view4.EditorView.decorations.from(f4) }); var FlowEditorWidget = class extends import_view4.WidgetType { constructor(info) { super(); this.info = info; } eq(other) { return other.info.id === this.info.id; } toDOM(view) { const div = document.createElement("div"); div.toggleClass("mk-floweditor-container", true); div.toggleClass("mk-floweditor-fix", this.info.startOfLineFix); div.setAttribute("id", "mk-flow-" + this.info.id); const placeholder2 = div.createDiv("mk-floweditor-placeholder"); placeholder2.style.setProperty("height", this.info.height + "px"); loadFlowEditorByDOM(div, view, this.info.id); return div; } get estimatedHeight() { return this.info.height; } }; var FlowEditorSelector = class extends import_view4.WidgetType { constructor(info) { super(); this.info = info; this.flowInfo = info; } eq(other) { return false; } toDOM(view) { const div = document.createElement("div"); div.toggleClass("mk-floweditor-selector", true); const reactEl = createRoot(div); const type = this.info.link.contains("/#^") ? "table" : "file"; reactEl.render( /* @__PURE__ */ bn.createElement(FlowEditorHover, { toggle: true, type, toggleState: true, cutTable: () => { navigator.clipboard.writeText(`![![${this.info.link}]]`); view.dispatch({ changes: { from: this.info.from - 4, to: this.info.to + 2 } }); }, deleteTable: () => { view.dispatch({ changes: { from: this.info.from - 4, to: this.info.to + 2 } }); }, toggleFlow: () => { view.dispatch({ changes: { from: this.info.from - 4, to: this.info.from - 3 } }); }, openLink: () => { openFileFlowEditor(this.flowInfo.link, "/"); } }) ); return div; } }; var flowEditorSelector = (info) => import_view4.Decoration.replace({ widget: new FlowEditorSelector(info), inclusive: true, block: false }); var flowEditorDecoration = (info) => import_view4.Decoration.replace({ widget: new FlowEditorWidget(info), inclusive: true, block: false }); var flowEditorWidgetDecoration = (info) => import_view4.Decoration.widget({ widget: new FlowEditorWidget(info), block: true }); // src/cm-extensions/flowEditor/atomic.ts var arrowKeyAnnotation = import_state6.Annotation.define(); var atomicSelect = import_state6.EditorState.transactionFilter.of( (tr) => { if (tr.isUserEvent("delete") || tr.isUserEvent("input")) { return tr; } const flowID = tr.startState.field(flowIDStateField, false); if (tr.annotation(arrowKeyAnnotation) && flowID) { const oldSel = tr.startState.selection.main; const lineRange = tr.state.field(selectiveLinesFacet, false); const posRange = lineRange && lineRange[0] != void 0 ? lineRangeToPosRange(tr.startState, lineRange) : { from: 0, to: tr.startState.doc.length }; if (oldSel.from <= posRange.from && tr.annotation(arrowKeyAnnotation) == 3) { focusFlowEditorParent(flowID, true); } if (oldSel.to >= posRange.to && tr.annotation(arrowKeyAnnotation) == 4) { focusFlowEditorParent(flowID, false); } return tr; } const selection = tr.newSelection.main; if (selection.from == 0 && selection.to == 0 || selection.from != selection.to) return tr; const flowEditors = tr.state.field(flowEditorInfo, false); if (flowEditors) { for (let info of flowEditors) { if (info.embed == 1) { if (info.from - 3 <= selection.from && info.to + 2 >= selection.to && info.expandedState == 2) { const top = tr.annotation(arrowKeyAnnotation) == 1 || tr.startState.selection.main.from > selection.from ? false : true; focusFlowEditor(info.id, top); return { selection: import_state6.EditorSelection.single(info.from - 4) }; break; } } } } return tr; } ); // src/cm-extensions/inlineStylerView/marks.ts var import_state7 = require("@codemirror/state"); // src/cm-extensions/markSans/obsidianSyntax.ts var oMarks = [ { mark: "em", formatting: "formatting-em", altFormatting: "em_formatting_formatting-strong", formatChar: "*" }, { mark: "strong", formatting: "formatting-strong", formatChar: "**" }, { mark: "strikethrough", formatting: "formatting-strikethrough", formatChar: "~~" }, { mark: "inline-code", formatting: "formatting-code", formatChar: "`" } ]; // src/cm-extensions/inlineStylerView/marks.ts var toggleMark = import_state7.Annotation.define(); var trimSpace = (pos, moveDirLeft, state) => { if (moveDirLeft && state.sliceDoc(pos, pos + 1) == " ") return pos + 1; if (!moveDirLeft && state.sliceDoc(pos - 1, pos) == " ") return pos - 1; return pos; }; var newPosAfterFormatting = (pos, moveDirLeft, state) => { const line = state.doc.lineAt(pos); const start = moveDirLeft ? line.from : pos; const end = moveDirLeft ? pos : line.to; let newPos = start; let lastFormatPos = start; let exitFormatRange = false; iterateTreeInSelection({ from: start, to: end }, state, { enter: (node) => { if (exitFormatRange) return false; if (node.name.contains("formatting")) { if (!moveDirLeft && node.from > start) { return false; } if (moveDirLeft) { newPos = node.from; lastFormatPos = node.to; } else { newPos = node.to; } } } }); if (moveDirLeft && lastFormatPos < pos) { newPos = pos; } return newPos; }; var expandRange = (selection, state) => { const from = trimSpace( newPosAfterFormatting(selection.from, true, state), true, state ); const to = trimSpace( newPosAfterFormatting(selection.to, false, state), false, state ); return { from, to }; }; var addMarkAtPos = (pos, mark) => ({ changes: { from: pos, to: pos, insert: mark.formatChar } }); var rangeIsMark = (state, mark, selection) => posIsMark(selection.from, state, mark.mark) && posIsMark(selection.to, state, mark.mark); var posIsMark = (pos, state, markString) => { let isMark = false; iterateTreeAtPos(pos, state, { enter: ({ name, from, to }) => { if (nodeNameContainsMark(name, markString)) isMark = true; } }); return isMark; }; var nodeNameContainsMark = (name, markString) => { return name.contains(markString); }; var edgeIsMark = (pos, state, mark) => posIsMark(pos, state, mark.mark); var edgeIsMarkFormat = (pos, state, mark) => posIsMark(pos, state, mark.formatting) ? true : mark.altFormatting ? posIsMark(pos, state, mark.altFormatting) : false; var transactionChangesForMark = (range, mark, state) => { let newTrans = []; if (rangeIsMark(state, mark, range)) { if (edgeIsMarkFormat(range.from, state, mark) && !edgeIsMarkFormat(range.to, state, mark)) { newTrans.push(addMarkAtPos(range.to, mark)); } if (edgeIsMarkFormat(range.to, state, mark) && !edgeIsMarkFormat(range.from, state, mark)) { newTrans.push(addMarkAtPos(range.from, mark)); } } else if (edgeIsMark(range.from, state, mark)) { if (edgeIsMarkFormat(range.from, state, mark) && !edgeIsMark(range.from - 1, state, mark)) { newTrans.push(addMarkAtPos(range.from, mark)); } newTrans.push(addMarkAtPos(range.to, mark)); } else if (edgeIsMark(range.to, state, mark)) { if (edgeIsMarkFormat(range.to, state, mark) && !edgeIsMark(range.to + 1, state, mark)) { newTrans.push(addMarkAtPos(range.to, mark)); } newTrans.push(addMarkAtPos(range.from, mark)); } else { newTrans.push(addMarkAtPos(range.to, mark)); newTrans.push(addMarkAtPos(range.from, mark)); } return newTrans; }; var removeAllInternalMarks = (sel, state, mark) => { let returnTrans = []; iterateTreeInSelection({ from: sel.from, to: sel.to }, state, { enter: ({ name, from, to }) => { if (nodeNameContainsMark(name, mark.formatting) || (mark.altFormatting ? nodeNameContainsMark(name, mark.altFormatting) : false)) returnTrans.push({ from, to: from + mark.formatChar.length }); } }); return { changes: returnTrans }; }; var toggleMarkExtension = import_state7.EditorState.transactionFilter.of( (tr) => { if (!tr.annotation(toggleMark)) return tr; const markToggle = tr.annotation(toggleMark); const mark = oMarks.find((f4) => f4.mark == markToggle); if (!mark) { return tr; } const selection = tr.startState.selection.main; let newTrans = []; if (selection.head == selection.anchor) { if (tr.startState.sliceDoc( selection.head - mark.formatChar.length, selection.head ) == mark.formatChar && tr.startState.sliceDoc( selection.head, selection.head + mark.formatChar.length ) == mark.formatChar) { newTrans.push({ changes: { from: selection.head - mark.formatChar.length, to: selection.head + mark.formatChar.length } }); } else { newTrans.push({ changes: { from: selection.head, insert: mark.formatChar + mark.formatChar }, selection: { anchor: selection.head + mark.formatChar.length, head: selection.head + mark.formatChar.length } }); } return [tr, ...newTrans]; } const range = expandRange(selection, tr.startState); newTrans.push(removeAllInternalMarks(range, tr.startState, mark)); let newFrom = range.from; let newTo = range.to; newTrans.push(...transactionChangesForMark(range, mark, tr.startState)); return [tr, ...newTrans, { selection: { anchor: newFrom, head: newTo } }]; } ); // src/cm-extensions/inlineStylerView/inlineStyler.tsx var import_state8 = require("@codemirror/state"); // src/cm-extensions/inlineStylerView/InlineMenu.tsx var import_classnames4 = __toESM(require_classnames()); // src/cm-extensions/inlineStylerView/Mark.tsx var Mark = (props2) => { const { i: i4, style, active, toggleMarkAction } = props2; return /* @__PURE__ */ bn.createElement("div", { key: i4, "aria-label": !platformIsMobile() ? i18n_default.styles[style.label] : void 0, className: `mk-mark ${style.mark && active ? "mk-mark-active" : ""}`, dangerouslySetInnerHTML: { __html: markIconSet[style.icon] }, onMouseDown: (e4) => toggleMarkAction(e4, style) }); }; // src/cm-extensions/inlineStylerView/styles/default.ts var default_default = [ { label: "bold", value: `****`, insertOffset: 2, icon: "mk-mark-strong", mark: "strong" }, { label: "italics", value: "**", insertOffset: 1, icon: "mk-mark-em", mark: "em" }, { label: "strikethrough", value: "~~~~", insertOffset: 2, icon: "mk-mark-strikethrough", mark: "strikethrough" }, { label: "code", value: "``", insertOffset: 1, icon: "mk-mark-code", mark: "inline-code" }, { label: "link", value: "[]()", insertOffset: 1, cursorOffset: 2, icon: "mk-mark-link" }, { label: "blocklink", value: "[[]]", insertOffset: 2, icon: "mk-mark-blocklink" } ]; // src/cm-extensions/inlineStylerView/styles/index.ts function resolveStyles() { return default_default; } // src/cm-extensions/inlineStylerView/InlineMenu.tsx var loadStylerIntoContainer = (el, plugin) => { const root = createRoot(el); root.render( /* @__PURE__ */ bn.createElement(InlineMenuComponent, { mobile: true, activeMarks: [], plugin }) ); }; var InlineMenuComponent = (props2) => { const [mode, setMode] = p2(props2.mobile ? 0 : 1); const [colorMode, setColorMode] = p2(null); const makeMenu = (e4) => { var _a2; e4.preventDefault(); const cm = (_a2 = props2.cm) != null ? _a2 : getActiveCM(); if (!cm) return; const end = cm.state.selection.main.to; const insertChars = cm.state.sliceDoc(end - 1, end) == cm.state.lineBreak ? props2.plugin.settings.menuTriggerChar : cm.state.lineBreak + props2.plugin.settings.menuTriggerChar; cm.dispatch({ changes: { from: end, to: end, insert: insertChars }, selection: { head: end + insertChars.length, anchor: end + insertChars.length } }); }; const toggleMarkAction = (e4, s5) => { var _a2; e4.preventDefault(); const cm = (_a2 = props2.cm) != null ? _a2 : getActiveCM(); if (!cm) return; if (s5.mark) { cm.dispatch({ annotations: toggleMark.of(s5.mark) }); return; } const selection = cm.state.selection.main; const selectedText = cm.state.sliceDoc(selection.from, selection.to); cm.dispatch({ changes: { from: selection.from, to: selection.to, insert: s5.value.substring(0, s5.insertOffset) + selectedText + s5.value.substring(s5.insertOffset) }, selection: s5.cursorOffset ? { anchor: selection.from + s5.value.substring(0, s5.insertOffset).length + selectedText.length + s5.cursorOffset, head: selection.from + s5.value.substring(0, s5.insertOffset).length + selectedText.length + s5.cursorOffset } : { anchor: selection.from + s5.value.substring(0, s5.insertOffset).length, head: selection.from + s5.value.substring(0, s5.insertOffset).length + selectedText.length } }); }; const makeMode = () => /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { "aria-label": !platformIsMobile() ? i18n_default.commands.makeMenu : void 0, onMouseDown: (e4) => { makeMenu(e4); }, className: "mk-mark", dangerouslySetInnerHTML: { __html: markIconSet["mk-make-slash"] } }), /* @__PURE__ */ bn.createElement("div", { "aria-label": !platformIsMobile() ? i18n_default.commands.selectStyle : void 0, onMouseDown: () => { setMode(1); }, className: "mk-mark", dangerouslySetInnerHTML: { __html: markIconSet["mk-make-style"] } }), /* @__PURE__ */ bn.createElement("div", { "aria-label": !platformIsMobile() ? i18n_default.commands.image : void 0, onMouseDown: () => { const view = getActiveMarkdownView(); props2.plugin.app.commands.commands["editor:attach-file"].editorCallback(view.editor, view); }, className: "mk-mark", dangerouslySetInnerHTML: { __html: markIconSet["mk-make-attach"] } }), /* @__PURE__ */ bn.createElement("div", { "aria-label": !platformIsMobile() ? i18n_default.commands.toggleKeyboard : void 0, onMouseDown: () => { const view = getActiveMarkdownView(); props2.plugin.app.commands.commands["editor:toggle-keyboard"].editorCallback(view.editor, view); }, className: "mk-mark", dangerouslySetInnerHTML: { __html: markIconSet["mk-make-keyboard"] } })); const colorsMode = () => /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { className: "mk-mark", onMouseDown: () => { setColorMode(null); setMode(1); }, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } }), colors.map((c4, i4) => /* @__PURE__ */ bn.createElement("div", { key: i4, onMouseDown: () => { var _a2; setMode(1); setColorMode(null); const cm = (_a2 = props2.cm) != null ? _a2 : getActiveCM(); if (!cm) return; const selection = cm.state.selection.main; const selectedText = cm.state.sliceDoc( selection.from, selection.to ); cm.dispatch({ changes: { from: selection.from, to: selection.to, insert: colorMode.prefix + c4[1] + colorMode.suffix + selectedText + colorMode.closeTag } }); }, className: "mk-color", style: { background: c4[1] } }))); const marksMode = () => /* @__PURE__ */ bn.createElement(bn.Fragment, null, props2.mobile ? /* @__PURE__ */ bn.createElement("div", { className: "mk-mark", onMouseDown: () => { setMode(0); }, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null), resolveStyles().map((s5, i4) => { return /* @__PURE__ */ bn.createElement(Mark, { i: i4, style: s5, active: props2.activeMarks.find((f4) => f4 == s5.mark) ? true : false, toggleMarkAction }); }), props2.plugin.settings.inlineStylerColors ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { className: "mk-divider" }), /* @__PURE__ */ bn.createElement("div", { "aria-label": !platformIsMobile() ? i18n_default.styles.textColor : void 0, onMouseDown: () => { setMode(2); setColorMode({ prefix: ``, closeTag: "" }); }, className: "mk-mark", dangerouslySetInnerHTML: { __html: markIconSet["mk-mark-color"] } }), /* @__PURE__ */ bn.createElement("div", { "aria-label": !platformIsMobile() ? i18n_default.styles.highlight : void 0, onMouseDown: () => { setMode(2); setColorMode({ prefix: ``, closeTag: "" }); }, className: "mk-mark", dangerouslySetInnerHTML: { __html: markIconSet["mk-mark-highlight"] } })) : /* @__PURE__ */ bn.createElement(bn.Fragment, null)); return /* @__PURE__ */ bn.createElement("div", { className: (0, import_classnames4.default)("mk-style-menu", props2.mobile ? "" : "menu"), onMouseDown: (e4) => e4.preventDefault() }, mode == 0 && props2.mobile ? makeMode() : mode == 2 ? colorsMode() : marksMode()); }; // src/cm-extensions/inlineStylerView/inlineStyler.tsx var cursorTooltipField = (plugin) => import_state8.StateField.define({ create: getCursorTooltips(plugin), update(tooltips2, tr) { if (!tr.docChanged && !tr.selection) return tooltips2; return getCursorTooltips(plugin)(tr.state); }, provide: (f4) => showTooltip.computeN([f4], (state) => state.field(f4)) }); var getCursorTooltips = (plugin) => (state) => { return state.selection.ranges.filter((range) => !range.empty).map((range) => { const expandedRange = expandRange(range, state); let line = state.doc.lineAt(range.head); let activeMarks = oMarks.map((f4) => rangeIsMark(state, f4, expandedRange) ? f4.mark : "").filter((f4) => f4 != ""); return { pos: Math.min(range.head, range.anchor), above: true, strictSide: true, arrow: false, create: (view) => { let dom = document.createElement("div"); dom.className = "cm-tooltip-cursor"; const reactElement = createRoot(dom); reactElement.render( /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement(InlineMenuComponent, { plugin, cm: view, activeMarks, mobile: false })) ); return { dom }; } }; }); }; function cursorTooltip(plugin) { return cursorTooltipField(plugin); } // src/cm-extensions/flowEditor/flowViewUpdates.ts var import_view5 = require("@codemirror/view"); var flowViewUpdates = import_view5.EditorView.updateListener.of((v3) => { if (v3.heightChanged) { app.workspace.iterateRootLeaves((leaf) => { var _a2, _b2; const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; if (cm && v3.view.dom == cm.dom && cm.state.field(flowTypeStateField, false)) { if ((_b2 = leaf.containerEl.parentElement) == null ? void 0 : _b2.hasClass("workspace-tab-container")) { if (cm.state.field(flowTypeStateField, false) != "doc") { cm.dispatch({ annotations: portalTypeAnnotation.of("doc") }); } } } }); } if (v3.heightChanged) { const flowID = v3.state.field(flowIDStateField, false); if (flowID) { app.workspace.iterateLeaves((leaf) => { var _a2; const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; if (cm) { const stateField = cm.state.field(flowEditorInfo, false); if (stateField) { if (stateField.find((f4) => f4.id == flowID)) { cm.dispatch({ annotations: cacheFlowEditorHeight.of([ flowID, v3.view.contentHeight ]) }); } } } }, app.workspace["rootSplit"]); } } }); // src/cm-extensions/placeholder.ts var import_view6 = require("@codemirror/view"); var import_state9 = require("@codemirror/state"); var placeholderLine = import_view6.Decoration.line({ attributes: { "data-ph": i18n_default.labels.placeholder }, class: "cm-placeholder" }); var placeholder = import_state9.StateField.define({ create() { return import_view6.Decoration.none; }, update(value, tr) { let builder = new import_state9.RangeSetBuilder(); const currentLine = tr.state.doc.lineAt(tr.state.selection.main.head); if ((currentLine == null ? void 0 : currentLine.length) == 0) builder.add(currentLine.from, currentLine.from, placeholderLine); const dec = builder.finish(); return dec; }, provide: (f4) => import_view6.EditorView.decorations.from(f4) }); // src/cm-extensions/cmExtensions.ts var cmExtensions = (plugin, mobile) => { let extensions = []; extensions.push(...[toggleMarkExtension, tooltips({ parent: document.body })]); if (!mobile && plugin.settings.inlineStyler) { extensions.push(cursorTooltip(plugin)); } if (plugin.settings.makeMenuPlaceholder) extensions.push(placeholder); if (plugin.settings.editorFlow) { extensions.push( flowTypeStateField, atomicSelect, editBlockExtensions(), preloadFlowEditor, flowEditorField, flowEditorInfo, flowIDStateField, flowViewUpdates ); if (plugin.settings.internalLinkClickFlow) { extensions.push(internalLinkToggle); } else { extensions.push(internalLinkHover); } } return extensions; }; // src/components/MakeMenu/MakeMenu.tsx var import_obsidian30 = require("obsidian"); // src/components/MakeMenu/commands/default.ts var default_default2 = [ { label: "todo", value: "- [ ] ", icon: "mk-make-todo" }, { label: "list", value: `- `, icon: "mk-make-list" }, { label: "ordered-list", value: `1. `, icon: "mk-make-ordered" }, { label: "h1", value: "# ", icon: "mk-make-h1" }, { label: "h2", value: "## ", icon: "mk-make-h2" }, { label: "h3", value: "### ", icon: "mk-make-h3" }, { label: "quote", value: "> ", icon: "mk-make-quote" }, { label: "divider", value: ` --- `, icon: "mk-make-hr" }, { label: "link", value: "", offset: [-1, 1], icon: "mk-make-link" }, { label: "image", value: "![](Paste Link)", offset: [-1, 4], icon: "mk-make-image" }, { label: "codeblock", value: ` \`\`\` Type/Paste Your Code \`\`\``, offset: [-4, 5], icon: "mk-make-codeblock" }, { label: "callout", value: `> [!NOTE] > Content`, offset: [-7, 12], icon: "mk-make-callout" }, { label: "note", value: "[[Note Name]]", offset: [-2, 2], icon: "mk-make-note" }, { label: "table", value: "table", icon: "mk-make-table" }, { label: "flow", value: `!![[Note Name]]`, offset: [-2, 4], icon: "mk-make-flow" }, { label: "tag", value: "#tag", offset: [0, 1], icon: "mk-make-tag" } ]; // src/components/MakeMenu/commands/index.ts function resolveCommands(plugin) { return default_default2; } // src/components/MakeMenu/MakeMenu.tsx var MakeMenu = class extends import_obsidian30.EditorSuggest { constructor(app2, plugin) { super(app2); this.inCmd = false; this.cmdStartCh = 0; this.plugin = plugin; } resetInfos() { this.cmdStartCh = 0; this.inCmd = false; } onTrigger(cursor, editor, _file) { const currentLine = editor.getLine(cursor.line).slice(0, cursor.ch); const triggerCharLength = this.plugin.settings.menuTriggerChar.length; this.file = _file; if (!this.inCmd && currentLine.slice(0, triggerCharLength) !== this.plugin.settings.menuTriggerChar && currentLine.slice(-2 - triggerCharLength) !== "- " + this.plugin.settings.menuTriggerChar) { this.resetInfos(); return null; } if (!this.inCmd) { this.cmdStartCh = currentLine.length - triggerCharLength; this.inCmd = true; } const currentCmd = currentLine.slice(this.cmdStartCh, cursor.ch); if (currentCmd.includes(" ") || !currentCmd.includes(this.plugin.settings.menuTriggerChar)) { this.resetInfos(); return null; } return { start: cursor, end: cursor, query: currentCmd.slice(triggerCharLength) }; } getSuggestions(context) { const suggestions = resolveCommands(this.plugin).filter( ({ label }) => label.toLowerCase().includes(context.query.toLowerCase()) || i18n_default.commands[label] && i18n_default.commands[label].toLowerCase().includes(context.query.toLowerCase()) ); return suggestions.length > 0 ? suggestions : [{ label: i18n_default.commandsSuggest.noResult, value: "", icon: "" }]; } renderSuggestion(value, el) { if (value.value == "") { el.setText(i18n_default.commandsSuggest.noResult); return; } const div = el.createDiv("mk-slash-item"); const icon = div.createDiv("mk-slash-icon"); icon.innerHTML = makeIconSet[value.icon]; const title = div.createDiv(); title.setText(i18n_default.commands[value.label]); } selectSuggestion(cmd, _evt) { if (cmd.label === i18n_default.commandsSuggest.noResult) return; if (cmd.value == "table") { this.plugin.createTable(this.file.parent.path).then((f4) => { this.context.editor.replaceRange( `![![${this.file.parent.path}/#^${f4}]]`, { ...this.context.start, ch: this.cmdStartCh }, this.context.end ); this.context.editor.setSelection({ line: this.context.start.line, ch: 0 }); this.resetInfos(); this.close(); }); } else { this.context.editor.replaceRange( cmd.value, { ...this.context.start, ch: this.cmdStartCh }, this.context.end ); if (cmd.offset) { this.context.editor.setSelection( { ...this.context.start, ch: this.cmdStartCh + cmd.offset[1] }, { ...this.context.end, ch: this.cmdStartCh + cmd.value.length + cmd.offset[0] } ); } this.resetInfos(); this.close(); } } }; // src/components/StickerMenu/StickerMenu.tsx var import_obsidian31 = require("obsidian"); var StickerMenu = class extends import_obsidian31.EditorSuggest { constructor(app2, plugin) { super(app2); this.inCmd = false; this.cmdStartCh = 0; this.plugin = plugin; this.emojis = Object.keys(emojis).reduce( (p3, c4) => [ ...p3, ...emojis[c4].map((e4) => ({ label: e4.n[0], desc: e4.n[1], variants: e4.v, unicode: e4.u })) ], [] ); } resetInfos() { this.cmdStartCh = 0; this.inCmd = false; } onTrigger(cursor, editor, _file) { const currentLine = editor.getLine(cursor.line).slice(0, cursor.ch); if (!this.inCmd && !(currentLine.slice(-2) == " " + this.plugin.settings.emojiTriggerChar || currentLine[0] == this.plugin.settings.emojiTriggerChar)) { this.resetInfos(); return null; } if (!this.inCmd) { this.cmdStartCh = currentLine.length - 1; this.inCmd = true; } const currentCmd = currentLine.slice(this.cmdStartCh, cursor.ch); if (currentCmd.includes(" ") || !currentCmd.includes(this.plugin.settings.emojiTriggerChar)) { this.resetInfos(); return null; } this.suggestEl.classList.toggle("mk-emoji-menu", true); return { start: cursor, end: cursor, query: currentCmd.slice(1) }; } getSuggestions(context) { const suggestions = this.emojis.filter( ({ label, desc }) => label.includes(context.query) || (desc == null ? void 0 : desc.includes(context.query)) ); return suggestions.length > 0 ? suggestions : [{ label: i18n_default.commandsSuggest.noResult, unicode: "", desc: "" }]; } renderSuggestion(value, el) { const div = document.createElement("div"); div.setAttribute("aria-label", value.label); const reactElement = createRoot(div); reactElement.render( /* @__PURE__ */ bn.createElement(bn.Fragment, null, value.unicode.length > 0 ? unifiedToNative(value.unicode) : i18n_default.commandsSuggest.noResult) ); el.appendChild(div); } selectSuggestion(cmd, _evt) { if (cmd.label === i18n_default.commandsSuggest.noResult) return; this.context.editor.replaceRange( unifiedToNative(cmd.unicode), { ...this.context.start, ch: this.cmdStartCh }, this.context.end ); this.resetInfos(); this.close(); } }; // src/main.ts var import_obsidian46 = require("obsidian"); // src/utils/flow/markdownPost.tsx var getCMFromElement = (el) => { let dom = el; while (!dom.hasClass("cm-editor") && dom.parentElement) { dom = dom.parentElement; } if (!dom.hasClass("cm-editor")) { return; } let rcm; app.workspace.iterateLeaves((leaf) => { var _a2; const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; if (cm && dom == cm.dom) { rcm = cm; return true; } }, app.workspace["rootSplit"]); return rcm; }; var replaceAllTables = (plugin, el, ctx) => { el.querySelectorAll("p").forEach((element) => { for (let match2 of element.textContent.matchAll(/(?:!\[!\[|!!\[\[)([^\]]+)\]\]/g)) { const link = match2[1]; const reactEl = createRoot(element.parentElement); reactEl.render( /* @__PURE__ */ bn.createElement(FlowView, { plugin, path: link, load: true }) ); } }); }; var replaceAllEmbed = (el, ctx) => { let dom = el; setTimeout(async () => { let counter = 0; while (!el.parentElement && counter++ <= 50) await sleep(50); if (!el.parentElement) return; while (!dom.hasClass("markdown-embed") && dom.parentElement) { dom = dom.parentElement; } if (dom) { var nodes2 = dom.querySelectorAll(".markdown-embed-link"); for (var i4 = 0; i4 < nodes2.length; i4++) { if (nodes2[i4].parentNode === dom) { dom.removeChild(nodes2[i4]); const div = dom.createDiv("mk-floweditor-selector"); const reactEl = createRoot(div); reactEl.render( /* @__PURE__ */ bn.createElement(FlowEditorHover, { toggle: true, type: "file", toggleState: false, toggleFlow: (e4) => { const cm = getCMFromElement(dom); const pos = cm == null ? void 0 : cm.posAtDOM(dom); if (!cm) return; iterateTreeInSelection( { from: pos - 3, to: pos + 4 }, cm.state, { enter: (node) => { if (node.name.contains("hmd-internal-link")) { if (cm.state.sliceDoc(node.from - 4, node.from - 3) != "!") { if (cm.state.sliceDoc(node.to + 2, node.to + 3) != cm.state.lineBreak) { cm.dispatch({ changes: [ { from: node.from - 3, to: node.from - 3, insert: "!" }, { from: node.to + 2, to: node.to + 2, insert: cm.state.lineBreak } ] }); } else { cm.dispatch({ changes: { from: node.from - 3, to: node.from - 3, insert: "!" } }); } } } } } ); e4.stopPropagation(); }, openLink: (e4) => { e4.stopPropagation(); openFileFlowEditor(ctx.sourcePath, "/"); } }) ); } } } }); }; // src/components/Spaces/FileTreeView.tsx var import_obsidian38 = require("obsidian"); // node_modules/recoil/es/recoil.js function isPromise(p3) { return !!p3 && typeof p3.then === "function"; } var Recoil_isPromise = isPromise; function nullthrows(x5, message) { if (x5 != null) { return x5; } throw new Error(message !== null && message !== void 0 ? message : "Got unexpected null or undefined"); } var Recoil_nullthrows = nullthrows; var Canceled = class { }; var CANCELED = new Canceled(); var loadableAccessors = { valueMaybe() { return void 0; }, valueOrThrow() { const error = new Error( `Loadable expected value, but in "${this.state}" state` ); throw error; }, errorMaybe() { return void 0; }, errorOrThrow() { const error = new Error( `Loadable expected error, but in "${this.state}" state` ); throw error; }, promiseMaybe() { return void 0; }, promiseOrThrow() { const error = new Error( `Loadable expected promise, but in "${this.state}" state` ); throw error; }, is(other) { return other.state === this.state && other.contents === this.contents; }, map(map) { if (this.state === "hasError") { return this; } if (this.state === "hasValue") { try { const next = map(this.contents); return Recoil_isPromise(next) ? loadableWithPromise(next.then((value) => ({ __value: value }))) : loadableWithValue(next); } catch (e4) { return Recoil_isPromise(e4) ? loadableWithPromise(e4.next(() => map(this.contents))) : loadableWithError(e4); } } if (this.state === "loading") { return loadableWithPromise( this.contents.then((value) => ({ __value: map(value.__value) })).catch((e4) => { if (Recoil_isPromise(e4)) { return e4.then(() => map(this.contents)); } throw e4; }) ); } const error = new Error("Invalid Loadable state"); throw error; } }; function loadableWithValue(value) { return Object.freeze({ state: "hasValue", contents: value, ...loadableAccessors, getValue() { return this.contents; }, toPromise() { return Promise.resolve(this.contents); }, valueMaybe() { return this.contents; }, valueOrThrow() { return this.contents; } }); } function loadableWithError(error) { return Object.freeze({ state: "hasError", contents: error, ...loadableAccessors, getValue() { throw this.contents; }, toPromise() { return Promise.reject(this.contents); }, errorMaybe() { return this.contents; }, errorOrThrow() { return this.contents; } }); } function loadableWithPromise(promise) { return Object.freeze({ state: "loading", contents: promise, ...loadableAccessors, getValue() { throw this.contents.then(({ __value }) => __value); }, toPromise() { return this.contents.then(({ __value }) => __value); }, promiseMaybe() { return this.contents.then(({ __value }) => __value); }, promiseOrThrow() { return this.contents.then(({ __value }) => __value); } }); } function loadableLoading() { return loadableWithPromise(new Promise(() => { })); } function loadableAll(inputs) { return inputs.every((i4) => i4.state === "hasValue") ? loadableWithValue(inputs.map((i4) => i4.contents)) : inputs.some((i4) => i4.state === "hasError") ? loadableWithError(Recoil_nullthrows(inputs.find((i4) => i4.state === "hasError"), "Invalid loadable passed to loadableAll").contents) : loadableWithPromise(Promise.all(inputs.map((i4) => i4.contents)).then((value) => ({ __value: value }))); } var Recoil_Loadable = { loadableWithValue, loadableWithError, loadableWithPromise, loadableLoading, loadableAll, Canceled, CANCELED }; var _useMutableSource; var useMutableSource = (_useMutableSource = bn.useMutableSource) !== null && _useMutableSource !== void 0 ? _useMutableSource : bn.unstable_useMutableSource; function mutableSourceExists() { return useMutableSource && !(typeof window !== "undefined" && window.$disableRecoilValueMutableSource_TEMP_HACK_DO_NOT_USE); } var Recoil_mutableSource = { mutableSourceExists, useMutableSource }; var { mutableSourceExists: mutableSourceExists$1 } = Recoil_mutableSource; var gks = (/* @__PURE__ */ new Map()).set("recoil_hamt_2020", true).set("recoil_memory_managament_2020", true).set("recoil_suppress_rerender_in_callback", true); function Recoil_gkx(gk) { var _gks$get; if (gk === "recoil_early_rendering_2021" && !mutableSourceExists$1()) { return false; } return (_gks$get = gks.get(gk)) !== null && _gks$get !== void 0 ? _gks$get : false; } Recoil_gkx.setPass = (gk) => { gks.set(gk, true); }; Recoil_gkx.setFail = (gk) => { gks.set(gk, false); }; var Recoil_gkx_1 = Recoil_gkx; function recoverableViolation(message, projectName, { error } = {}) { if (true) { console.error(message, error); } return null; } var recoverableViolation_1 = recoverableViolation; var Recoil_recoverableViolation = recoverableViolation_1; function setByAddingToSet(set, v3) { const next = new Set(set); next.add(v3); return next; } function setByDeletingFromSet(set, v3) { const next = new Set(set); next.delete(v3); return next; } function mapBySettingInMap(map, k5, v3) { const next = new Map(map); next.set(k5, v3); return next; } function mapByUpdatingInMap(map, k5, updater) { const next = new Map(map); next.set(k5, updater(next.get(k5))); return next; } function mapByDeletingFromMap(map, k5) { const next = new Map(map); next.delete(k5); return next; } function mapByDeletingMultipleFromMap(map, ks) { const next = new Map(map); ks.forEach((k5) => next.delete(k5)); return next; } var Recoil_CopyOnWrite = { setByAddingToSet, setByDeletingFromSet, mapBySettingInMap, mapByUpdatingInMap, mapByDeletingFromMap, mapByDeletingMultipleFromMap }; function* filterIterable(iterable, predicate) { let index = 0; for (const value of iterable) { if (predicate(value, index++)) { yield value; } } } var Recoil_filterIterable = filterIterable; function mapIterable(iterable, callback) { return function* () { let index = 0; for (const value of iterable) { yield callback(value, index++); } }(); } var Recoil_mapIterable = mapIterable; function sprintf(format2, ...args) { let index = 0; return format2.replace(/%s/g, () => String(args[index++])); } var sprintf_1 = sprintf; function expectationViolation(format2, ...args) { if (true) { const message = sprintf_1.call(null, format2, ...args); const error = new Error(message); error.name = "Expectation Violation"; console.error(error); } } var expectationViolation_1 = expectationViolation; var Recoil_expectationViolation = expectationViolation_1; function _defineProperty(obj, key2, value) { if (key2 in obj) { Object.defineProperty(obj, key2, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key2] = value; } return obj; } var AbstractRecoilValue = class { constructor(newKey) { _defineProperty(this, "key", void 0); this.key = newKey; } }; var RecoilState = class extends AbstractRecoilValue { }; var RecoilValueReadOnly = class extends AbstractRecoilValue { }; function isRecoilValue(x5) { return x5 instanceof RecoilState || x5 instanceof RecoilValueReadOnly; } var Recoil_RecoilValue = { AbstractRecoilValue, RecoilState, RecoilValueReadOnly, isRecoilValue }; var Recoil_RecoilValue_1 = Recoil_RecoilValue.AbstractRecoilValue; var Recoil_RecoilValue_2 = Recoil_RecoilValue.RecoilState; var Recoil_RecoilValue_3 = Recoil_RecoilValue.RecoilValueReadOnly; var Recoil_RecoilValue_4 = Recoil_RecoilValue.isRecoilValue; var Recoil_RecoilValue$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, AbstractRecoilValue: Recoil_RecoilValue_1, RecoilState: Recoil_RecoilValue_2, RecoilValueReadOnly: Recoil_RecoilValue_3, isRecoilValue: Recoil_RecoilValue_4 }); var DefaultValue = class { }; var DEFAULT_VALUE = new DefaultValue(); var RecoilValueNotReady = class extends Error { constructor(key2) { super(`Tried to set the value of Recoil selector ${key2} using an updater function, but it is an async selector in a pending or error state; this is not supported.`); } }; var nodes = /* @__PURE__ */ new Map(); var recoilValues = /* @__PURE__ */ new Map(); function recoilValuesForKeys(keys) { return Recoil_mapIterable(keys, (key2) => Recoil_nullthrows(recoilValues.get(key2))); } function registerNode(node) { if (nodes.has(node.key)) { const message = `Duplicate atom key "${node.key}". This is a FATAL ERROR in production. But it is safe to ignore this warning if it occurred because of hot module replacement.`; console.warn(message); } nodes.set(node.key, node); const recoilValue = node.set == null ? new Recoil_RecoilValue$1.RecoilValueReadOnly(node.key) : new Recoil_RecoilValue$1.RecoilState(node.key); recoilValues.set(node.key, recoilValue); return recoilValue; } var NodeMissingError = class extends Error { }; function getNode(key2) { const node = nodes.get(key2); if (node == null) { throw new NodeMissingError(`Missing definition for RecoilValue: "${key2}""`); } return node; } function getNodeMaybe(key2) { return nodes.get(key2); } var configDeletionHandlers = /* @__PURE__ */ new Map(); function deleteNodeConfigIfPossible(key2) { var _node$shouldDeleteCon; if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return; } const node = nodes.get(key2); if (node === null || node === void 0 ? void 0 : (_node$shouldDeleteCon = node.shouldDeleteConfigOnRelease) === null || _node$shouldDeleteCon === void 0 ? void 0 : _node$shouldDeleteCon.call(node)) { var _getConfigDeletionHan; nodes.delete(key2); (_getConfigDeletionHan = getConfigDeletionHandler(key2)) === null || _getConfigDeletionHan === void 0 ? void 0 : _getConfigDeletionHan(); configDeletionHandlers.delete(key2); } } function setConfigDeletionHandler(key2, fn2) { if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return; } if (fn2 === void 0) { configDeletionHandlers.delete(key2); } else { configDeletionHandlers.set(key2, fn2); } } function getConfigDeletionHandler(key2) { return configDeletionHandlers.get(key2); } var Recoil_Node = { nodes, recoilValues, registerNode, getNode, getNodeMaybe, deleteNodeConfigIfPossible, setConfigDeletionHandler, getConfigDeletionHandler, recoilValuesForKeys, NodeMissingError, DefaultValue, DEFAULT_VALUE, RecoilValueNotReady }; var RetentionZone = class { }; function retentionZone() { return new RetentionZone(); } var Recoil_RetentionZone = { RetentionZone, retentionZone }; var { setByAddingToSet: setByAddingToSet$1 } = Recoil_CopyOnWrite; var { getNode: getNode$1, getNodeMaybe: getNodeMaybe$1, recoilValuesForKeys: recoilValuesForKeys$1 } = Recoil_Node; var { RetentionZone: RetentionZone$1 } = Recoil_RetentionZone; var emptySet = Object.freeze(/* @__PURE__ */ new Set()); var ReadOnlyRecoilValueError = class extends Error { }; function initializeRetentionForNode(store, nodeKey, retainedBy) { if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return () => void 0; } const { nodesRetainedByZone: nodesRetainedByZone2 } = store.getState().retention; function addToZone(zone) { let set = nodesRetainedByZone2.get(zone); if (!set) { nodesRetainedByZone2.set(zone, set = /* @__PURE__ */ new Set()); } set.add(nodeKey); } if (retainedBy instanceof RetentionZone$1) { addToZone(retainedBy); } else if (Array.isArray(retainedBy)) { for (const zone of retainedBy) { addToZone(zone); } } return () => { if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return; } const nodesRetainedByZone3 = store.getState().retention.nodesRetainedByZone; function deleteFromZone(zone) { const set = nodesRetainedByZone3.get(zone); if (set) { set.delete(nodeKey); } if (set && set.size === 0) { nodesRetainedByZone3.delete(zone); } } if (retainedBy instanceof RetentionZone$1) { deleteFromZone(retainedBy); } else if (Array.isArray(retainedBy)) { for (const zone of retainedBy) { deleteFromZone(zone); } } }; } function initializeNodeIfNewToStore(store, treeState, key2, trigger) { const storeState = store.getState(); if (storeState.nodeCleanupFunctions.has(key2)) { return; } const config = getNode$1(key2); const retentionCleanup = initializeRetentionForNode(store, key2, config.retainedBy); const nodeCleanup = config.init(store, treeState, trigger); storeState.nodeCleanupFunctions.set(key2, () => { nodeCleanup(); retentionCleanup(); }); } function cleanUpNode(store, key2) { var _state$nodeCleanupFun; const state = store.getState(); (_state$nodeCleanupFun = state.nodeCleanupFunctions.get(key2)) === null || _state$nodeCleanupFun === void 0 ? void 0 : _state$nodeCleanupFun(); state.nodeCleanupFunctions.delete(key2); } function getNodeLoadable(store, state, key2) { initializeNodeIfNewToStore(store, state, key2, "get"); return getNode$1(key2).get(store, state); } function peekNodeLoadable(store, state, key2) { return getNode$1(key2).peek(store, state); } function setUnvalidatedAtomValue_DEPRECATED(state, key2, newValue) { var _node$invalidate; const node = getNodeMaybe$1(key2); node === null || node === void 0 ? void 0 : (_node$invalidate = node.invalidate) === null || _node$invalidate === void 0 ? void 0 : _node$invalidate.call(node, state); return { ...state, atomValues: state.atomValues.clone().delete(key2), nonvalidatedAtoms: state.nonvalidatedAtoms.clone().set(key2, newValue), dirtyAtoms: setByAddingToSet$1(state.dirtyAtoms, key2) }; } function setNodeValue(store, state, key2, newValue) { const node = getNode$1(key2); if (node.set == null) { throw new ReadOnlyRecoilValueError(`Attempt to set read-only RecoilValue: ${key2}`); } const set = node.set; initializeNodeIfNewToStore(store, state, key2, "set"); return set(store, state, newValue); } function peekNodeInfo(store, state, key2) { var _graph$nodeDeps$get, _storeState$nodeToCom, _storeState$nodeToCom2; const storeState = store.getState(); const graph2 = store.getGraph(state.version); const type = storeState.knownAtoms.has(key2) ? "atom" : storeState.knownSelectors.has(key2) ? "selector" : void 0; const downstreamNodes = Recoil_filterIterable(getDownstreamNodes(store, state, /* @__PURE__ */ new Set([key2])), (nodeKey) => nodeKey !== key2); return { loadable: peekNodeLoadable(store, state, key2), isActive: storeState.knownAtoms.has(key2) || storeState.knownSelectors.has(key2), isSet: type === "selector" ? false : state.atomValues.has(key2), isModified: state.dirtyAtoms.has(key2), type, deps: recoilValuesForKeys$1((_graph$nodeDeps$get = graph2.nodeDeps.get(key2)) !== null && _graph$nodeDeps$get !== void 0 ? _graph$nodeDeps$get : []), subscribers: { nodes: recoilValuesForKeys$1(downstreamNodes), components: Recoil_mapIterable((_storeState$nodeToCom = (_storeState$nodeToCom2 = storeState.nodeToComponentSubscriptions.get(key2)) === null || _storeState$nodeToCom2 === void 0 ? void 0 : _storeState$nodeToCom2.values()) !== null && _storeState$nodeToCom !== void 0 ? _storeState$nodeToCom : [], ([name]) => ({ name })) } }; } function getDownstreamNodes(store, state, keys) { const visitedNodes = /* @__PURE__ */ new Set(); const visitingNodes = Array.from(keys); const graph2 = store.getGraph(state.version); for (let key2 = visitingNodes.pop(); key2; key2 = visitingNodes.pop()) { var _graph$nodeToNodeSubs; visitedNodes.add(key2); const subscribedNodes = (_graph$nodeToNodeSubs = graph2.nodeToNodeSubscriptions.get(key2)) !== null && _graph$nodeToNodeSubs !== void 0 ? _graph$nodeToNodeSubs : emptySet; for (const downstreamNode of subscribedNodes) { if (!visitedNodes.has(downstreamNode)) { visitingNodes.push(downstreamNode); } } } return visitedNodes; } var Recoil_FunctionalCore = { getNodeLoadable, peekNodeLoadable, setNodeValue, cleanUpNode, setUnvalidatedAtomValue_DEPRECATED, peekNodeInfo, getDownstreamNodes, initializeNodeIfNewToStore }; var { CANCELED: CANCELED$1 } = Recoil_Loadable; var { getDownstreamNodes: getDownstreamNodes$1, getNodeLoadable: getNodeLoadable$1, setNodeValue: setNodeValue$1 } = Recoil_FunctionalCore; var { getNodeMaybe: getNodeMaybe$2 } = Recoil_Node; var { DefaultValue: DefaultValue$1, RecoilValueNotReady: RecoilValueNotReady$1 } = Recoil_Node; var { AbstractRecoilValue: AbstractRecoilValue$1, RecoilState: RecoilState$1, RecoilValueReadOnly: RecoilValueReadOnly$1, isRecoilValue: isRecoilValue$1 } = Recoil_RecoilValue$1; function getRecoilValueAsLoadable(store, { key: key2 }, treeState = store.getState().currentTree) { var _storeState$nextTree, _storeState$previousT; const storeState = store.getState(); if (!(treeState.version === storeState.currentTree.version || treeState.version === ((_storeState$nextTree = storeState.nextTree) === null || _storeState$nextTree === void 0 ? void 0 : _storeState$nextTree.version) || treeState.version === ((_storeState$previousT = storeState.previousTree) === null || _storeState$previousT === void 0 ? void 0 : _storeState$previousT.version))) { Recoil_recoverableViolation("Tried to read from a discarded tree"); } const loadable = getNodeLoadable$1(store, treeState, key2); if (loadable.state === "loading") { loadable.contents.catch(() => { return CANCELED$1; }); } return loadable; } function applyAtomValueWrites(atomValues, writes) { const result = atomValues.clone(); writes.forEach((v3, k5) => { if (v3.state === "hasValue" && v3.contents instanceof DefaultValue$1) { result.delete(k5); } else { result.set(k5, v3); } }); return result; } function valueFromValueOrUpdater(store, state, { key: key2 }, valueOrUpdater) { if (typeof valueOrUpdater === "function") { const current = getNodeLoadable$1(store, state, key2); if (current.state === "loading") { throw new RecoilValueNotReady$1(key2); } else if (current.state === "hasError") { throw current.contents; } return valueOrUpdater(current.contents); } else { return valueOrUpdater; } } function applyAction(store, state, action) { if (action.type === "set") { const { recoilValue, valueOrUpdater } = action; const newValue = valueFromValueOrUpdater(store, state, recoilValue, valueOrUpdater); const writes = setNodeValue$1(store, state, recoilValue.key, newValue); for (const [key2, loadable] of writes.entries()) { writeLoadableToTreeState(state, key2, loadable); } } else if (action.type === "setLoadable") { const { recoilValue: { key: key2 }, loadable } = action; writeLoadableToTreeState(state, key2, loadable); } else if (action.type === "markModified") { const { recoilValue: { key: key2 } } = action; state.dirtyAtoms.add(key2); } else if (action.type === "setUnvalidated") { var _node$invalidate; const { recoilValue: { key: key2 }, unvalidatedValue } = action; const node = getNodeMaybe$2(key2); node === null || node === void 0 ? void 0 : (_node$invalidate = node.invalidate) === null || _node$invalidate === void 0 ? void 0 : _node$invalidate.call(node, state); state.atomValues.delete(key2); state.nonvalidatedAtoms.set(key2, unvalidatedValue); state.dirtyAtoms.add(key2); } else { Recoil_recoverableViolation(`Unknown action ${action.type}`); } } function writeLoadableToTreeState(state, key2, loadable) { if (loadable.state === "hasValue" && loadable.contents instanceof DefaultValue$1) { state.atomValues.delete(key2); } else { state.atomValues.set(key2, loadable); } state.dirtyAtoms.add(key2); state.nonvalidatedAtoms.delete(key2); } function applyActionsToStore(store, actions) { store.replaceState((state) => { const newState = copyTreeState(state); for (const action of actions) { applyAction(store, newState, action); } invalidateDownstreams(store, newState); return newState; }); } function queueOrPerformStateUpdate(store, action) { if (batchStack.length) { const actionsByStore = batchStack[batchStack.length - 1]; let actions = actionsByStore.get(store); if (!actions) { actionsByStore.set(store, actions = []); } actions.push(action); } else { applyActionsToStore(store, [action]); } } var batchStack = []; function batchStart() { const actionsByStore = /* @__PURE__ */ new Map(); batchStack.push(actionsByStore); return () => { for (const [store, actions] of actionsByStore) { applyActionsToStore(store, actions); } const popped = batchStack.pop(); if (popped !== actionsByStore) { Recoil_recoverableViolation("Incorrect order of batch popping"); } }; } function copyTreeState(state) { return { ...state, atomValues: state.atomValues.clone(), nonvalidatedAtoms: state.nonvalidatedAtoms.clone(), dirtyAtoms: new Set(state.dirtyAtoms) }; } function invalidateDownstreams(store, state) { const downstreams = getDownstreamNodes$1(store, state, state.dirtyAtoms); for (const key2 of downstreams) { var _getNodeMaybe, _getNodeMaybe$invalid; (_getNodeMaybe = getNodeMaybe$2(key2)) === null || _getNodeMaybe === void 0 ? void 0 : (_getNodeMaybe$invalid = _getNodeMaybe.invalidate) === null || _getNodeMaybe$invalid === void 0 ? void 0 : _getNodeMaybe$invalid.call(_getNodeMaybe, state); } } function setRecoilValue(store, recoilValue, valueOrUpdater) { queueOrPerformStateUpdate(store, { type: "set", recoilValue, valueOrUpdater }); } function setRecoilValueLoadable(store, recoilValue, loadable) { if (loadable instanceof DefaultValue$1) { return setRecoilValue(store, recoilValue, loadable); } queueOrPerformStateUpdate(store, { type: "setLoadable", recoilValue, loadable }); } function markRecoilValueModified(store, recoilValue) { queueOrPerformStateUpdate(store, { type: "markModified", recoilValue }); } function setUnvalidatedRecoilValue(store, recoilValue, unvalidatedValue) { queueOrPerformStateUpdate(store, { type: "setUnvalidated", recoilValue, unvalidatedValue }); } var subscriptionID = 0; function subscribeToRecoilValue(store, { key: key2 }, callback, componentDebugName = null) { const subID = subscriptionID++; const storeState = store.getState(); if (!storeState.nodeToComponentSubscriptions.has(key2)) { storeState.nodeToComponentSubscriptions.set(key2, /* @__PURE__ */ new Map()); } Recoil_nullthrows(storeState.nodeToComponentSubscriptions.get(key2)).set(subID, [componentDebugName !== null && componentDebugName !== void 0 ? componentDebugName : "", callback]); if (Recoil_gkx_1("recoil_early_rendering_2021")) { const nextTree = store.getState().nextTree; if (nextTree && nextTree.dirtyAtoms.has(key2)) { callback(nextTree); } } return { release: () => { const storeState2 = store.getState(); const subs = storeState2.nodeToComponentSubscriptions.get(key2); if (subs === void 0 || !subs.has(subID)) { Recoil_recoverableViolation(`Subscription missing at release time for atom ${key2}. This is a bug in Recoil.`); return; } subs.delete(subID); if (subs.size === 0) { storeState2.nodeToComponentSubscriptions.delete(key2); } } }; } var Recoil_RecoilValueInterface = { RecoilValueReadOnly: RecoilValueReadOnly$1, AbstractRecoilValue: AbstractRecoilValue$1, RecoilState: RecoilState$1, getRecoilValueAsLoadable, setRecoilValue, setRecoilValueLoadable, markRecoilValueModified, setUnvalidatedRecoilValue, subscribeToRecoilValue, isRecoilValue: isRecoilValue$1, applyAtomValueWrites, batchStart, writeLoadableToTreeState, invalidateDownstreams, copyTreeState, invalidateDownstreams_FOR_TESTING: invalidateDownstreams }; var { unstable_batchedUpdates } = bn; var ReactBatchedUpdates = { unstable_batchedUpdates }; var { unstable_batchedUpdates: unstable_batchedUpdates$1 } = ReactBatchedUpdates; var Recoil_ReactBatchedUpdates = { unstable_batchedUpdates: unstable_batchedUpdates$1 }; var { batchStart: batchStart$1 } = Recoil_RecoilValueInterface; var { unstable_batchedUpdates: unstable_batchedUpdates$2 } = Recoil_ReactBatchedUpdates; var batcher = unstable_batchedUpdates$2; var setBatcher = (newBatcher) => { batcher = newBatcher; }; var getBatcher = () => batcher; var batchUpdates = (callback) => { batcher(() => { let batchEnd = () => void 0; try { batchEnd = batchStart$1(); callback(); } finally { batchEnd(); } }); }; var Recoil_Batching = { getBatcher, setBatcher, batchUpdates }; function enqueueExecution(s5, f4) { f4(); } var Recoil_Queue = { enqueueExecution }; function differenceSets(set, ...setsWithValuesToRemove) { const ret = /* @__PURE__ */ new Set(); FIRST: for (const value of set) { for (const otherSet of setsWithValuesToRemove) { if (otherSet.has(value)) { continue FIRST; } } ret.add(value); } return ret; } var Recoil_differenceSets = differenceSets; function mapMap(map, callback) { const result = /* @__PURE__ */ new Map(); map.forEach((value, key2) => { result.set(key2, callback(value, key2)); }); return result; } var Recoil_mapMap = mapMap; function graph() { return { nodeDeps: /* @__PURE__ */ new Map(), nodeToNodeSubscriptions: /* @__PURE__ */ new Map() }; } function cloneGraph(graph2) { return { nodeDeps: Recoil_mapMap(graph2.nodeDeps, (s5) => new Set(s5)), nodeToNodeSubscriptions: Recoil_mapMap(graph2.nodeToNodeSubscriptions, (s5) => new Set(s5)) }; } function mergeDependencyMapIntoGraph(deps, graph2, olderGraph) { const { nodeDeps, nodeToNodeSubscriptions } = graph2; deps.forEach((upstreams, downstream) => { const existingUpstreams = nodeDeps.get(downstream); if (existingUpstreams && olderGraph && existingUpstreams !== olderGraph.nodeDeps.get(downstream)) { return; } nodeDeps.set(downstream, new Set(upstreams)); const addedUpstreams = existingUpstreams == null ? upstreams : Recoil_differenceSets(upstreams, existingUpstreams); addedUpstreams.forEach((upstream) => { if (!nodeToNodeSubscriptions.has(upstream)) { nodeToNodeSubscriptions.set(upstream, /* @__PURE__ */ new Set()); } const existing = Recoil_nullthrows(nodeToNodeSubscriptions.get(upstream)); existing.add(downstream); }); if (existingUpstreams) { const removedUpstreams = Recoil_differenceSets(existingUpstreams, upstreams); removedUpstreams.forEach((upstream) => { if (!nodeToNodeSubscriptions.has(upstream)) { return; } const existing = Recoil_nullthrows(nodeToNodeSubscriptions.get(upstream)); existing.delete(downstream); if (existing.size === 0) { nodeToNodeSubscriptions.delete(upstream); } }); } }); } function saveDependencyMapToStore(dependencyMap, store, version) { var _storeState$nextTree, _storeState$previousT, _storeState$previousT2, _storeState$previousT3; const storeState = store.getState(); if (!(version === storeState.currentTree.version || version === ((_storeState$nextTree = storeState.nextTree) === null || _storeState$nextTree === void 0 ? void 0 : _storeState$nextTree.version) || version === ((_storeState$previousT = storeState.previousTree) === null || _storeState$previousT === void 0 ? void 0 : _storeState$previousT.version))) { Recoil_recoverableViolation("Tried to save dependencies to a discarded tree"); } const graph2 = store.getGraph(version); mergeDependencyMapIntoGraph(dependencyMap, graph2); if (version === ((_storeState$previousT2 = storeState.previousTree) === null || _storeState$previousT2 === void 0 ? void 0 : _storeState$previousT2.version)) { const currentGraph = store.getGraph(storeState.currentTree.version); mergeDependencyMapIntoGraph(dependencyMap, currentGraph, graph2); } if (version === ((_storeState$previousT3 = storeState.previousTree) === null || _storeState$previousT3 === void 0 ? void 0 : _storeState$previousT3.version) || version === storeState.currentTree.version) { var _storeState$nextTree2; const nextVersion = (_storeState$nextTree2 = storeState.nextTree) === null || _storeState$nextTree2 === void 0 ? void 0 : _storeState$nextTree2.version; if (nextVersion !== void 0) { const nextGraph = store.getGraph(nextVersion); mergeDependencyMapIntoGraph(dependencyMap, nextGraph, graph2); } } } function mergeDepsIntoDependencyMap(from, into) { from.forEach((upstreamDeps, downstreamNode) => { if (!into.has(downstreamNode)) { into.set(downstreamNode, /* @__PURE__ */ new Set()); } const deps = Recoil_nullthrows(into.get(downstreamNode)); upstreamDeps.forEach((dep) => deps.add(dep)); }); } function addToDependencyMap(downstream, upstream, dependencyMap) { if (!dependencyMap.has(downstream)) { dependencyMap.set(downstream, /* @__PURE__ */ new Set()); } Recoil_nullthrows(dependencyMap.get(downstream)).add(upstream); } var Recoil_Graph = { addToDependencyMap, cloneGraph, graph, mergeDepsIntoDependencyMap, saveDependencyMapToStore }; function createCommonjsModule(fn2, module2) { return module2 = { exports: {} }, fn2(module2, module2.exports), module2.exports; } var hamt_1 = createCommonjsModule(function(module2) { var _typeof5 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { return typeof obj; } : function(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var hamt = {}; var SIZE = 5; var BUCKET_SIZE = Math.pow(2, SIZE); var MASK = BUCKET_SIZE - 1; var MAX_INDEX_NODE = BUCKET_SIZE / 2; var MIN_ARRAY_NODE = BUCKET_SIZE / 4; var nothing = {}; var constant = function constant2(x5) { return function() { return x5; }; }; var hash = hamt.hash = function(str) { var type = typeof str === "undefined" ? "undefined" : _typeof5(str); if (type === "number") return str; if (type !== "string") str += ""; var hash2 = 0; for (var i4 = 0, len = str.length; i4 < len; ++i4) { var c4 = str.charCodeAt(i4); hash2 = (hash2 << 5) - hash2 + c4 | 0; } return hash2; }; var popcount = function popcount2(x5) { x5 -= x5 >> 1 & 1431655765; x5 = (x5 & 858993459) + (x5 >> 2 & 858993459); x5 = x5 + (x5 >> 4) & 252645135; x5 += x5 >> 8; x5 += x5 >> 16; return x5 & 127; }; var hashFragment = function hashFragment2(shift, h5) { return h5 >>> shift & MASK; }; var toBitmap = function toBitmap2(x5) { return 1 << x5; }; var fromBitmap = function fromBitmap2(bitmap, bit) { return popcount(bitmap & bit - 1); }; var arrayUpdate = function arrayUpdate2(mutate2, at, v3, arr) { var out = arr; if (!mutate2) { var len = arr.length; out = new Array(len); for (var i4 = 0; i4 < len; ++i4) { out[i4] = arr[i4]; } } out[at] = v3; return out; }; var arraySpliceOut = function arraySpliceOut2(mutate2, at, arr) { var newLen = arr.length - 1; var i4 = 0; var g4 = 0; var out = arr; if (mutate2) { i4 = g4 = at; } else { out = new Array(newLen); while (i4 < at) { out[g4++] = arr[i4++]; } } ++i4; while (i4 <= newLen) { out[g4++] = arr[i4++]; } if (mutate2) { out.length = newLen; } return out; }; var arraySpliceIn = function arraySpliceIn2(mutate2, at, v3, arr) { var len = arr.length; if (mutate2) { var _i = len; while (_i >= at) { arr[_i--] = arr[_i]; } arr[at] = v3; return arr; } var i4 = 0, g4 = 0; var out = new Array(len + 1); while (i4 < at) { out[g4++] = arr[i4++]; } out[at] = v3; while (i4 < len) { out[++g4] = arr[i4++]; } return out; }; var LEAF = 1; var COLLISION = 2; var INDEX = 3; var ARRAY = 4; var empty = { __hamt_isEmpty: true }; var isEmptyNode = function isEmptyNode2(x5) { return x5 === empty || x5 && x5.__hamt_isEmpty; }; var Leaf = function Leaf2(edit, hash2, key2, value) { return { type: LEAF, edit, hash: hash2, key: key2, value, _modify: Leaf__modify }; }; var Collision = function Collision2(edit, hash2, children) { return { type: COLLISION, edit, hash: hash2, children, _modify: Collision__modify }; }; var IndexedNode = function IndexedNode2(edit, mask, children) { return { type: INDEX, edit, mask, children, _modify: IndexedNode__modify }; }; var ArrayNode = function ArrayNode2(edit, size, children) { return { type: ARRAY, edit, size, children, _modify: ArrayNode__modify }; }; var isLeaf = function isLeaf2(node) { return node === empty || node.type === LEAF || node.type === COLLISION; }; var expand = function expand2(edit, frag, child, bitmap, subNodes) { var arr = []; var bit = bitmap; var count3 = 0; for (var i4 = 0; bit; ++i4) { if (bit & 1) arr[i4] = subNodes[count3++]; bit >>>= 1; } arr[frag] = child; return ArrayNode(edit, count3 + 1, arr); }; var pack = function pack2(edit, count3, removed, elements) { var children = new Array(count3 - 1); var g4 = 0; var bitmap = 0; for (var i4 = 0, len = elements.length; i4 < len; ++i4) { if (i4 !== removed) { var elem = elements[i4]; if (elem && !isEmptyNode(elem)) { children[g4++] = elem; bitmap |= 1 << i4; } } } return IndexedNode(edit, bitmap, children); }; var mergeLeaves = function mergeLeaves2(edit, shift, h1, n1, h22, n2) { if (h1 === h22) return Collision(edit, h1, [n2, n1]); var subH1 = hashFragment(shift, h1); var subH2 = hashFragment(shift, h22); return IndexedNode(edit, toBitmap(subH1) | toBitmap(subH2), subH1 === subH2 ? [mergeLeaves2(edit, shift + SIZE, h1, n1, h22, n2)] : subH1 < subH2 ? [n1, n2] : [n2, n1]); }; var updateCollisionList = function updateCollisionList2(mutate2, edit, keyEq, h5, list, f4, k5, size) { var len = list.length; for (var i4 = 0; i4 < len; ++i4) { var child = list[i4]; if (keyEq(k5, child.key)) { var value = child.value; var _newValue = f4(value); if (_newValue === value) return list; if (_newValue === nothing) { --size.value; return arraySpliceOut(mutate2, i4, list); } return arrayUpdate(mutate2, i4, Leaf(edit, h5, k5, _newValue), list); } } var newValue = f4(); if (newValue === nothing) return list; ++size.value; return arrayUpdate(mutate2, len, Leaf(edit, h5, k5, newValue), list); }; var canEditNode = function canEditNode2(edit, node) { return edit === node.edit; }; var Leaf__modify = function Leaf__modify2(edit, keyEq, shift, f4, h5, k5, size) { if (keyEq(k5, this.key)) { var _v = f4(this.value); if (_v === this.value) return this; else if (_v === nothing) { --size.value; return empty; } if (canEditNode(edit, this)) { this.value = _v; return this; } return Leaf(edit, h5, k5, _v); } var v3 = f4(); if (v3 === nothing) return this; ++size.value; return mergeLeaves(edit, shift, this.hash, this, h5, Leaf(edit, h5, k5, v3)); }; var Collision__modify = function Collision__modify2(edit, keyEq, shift, f4, h5, k5, size) { if (h5 === this.hash) { var canEdit = canEditNode(edit, this); var list = updateCollisionList(canEdit, edit, keyEq, this.hash, this.children, f4, k5, size); if (list === this.children) return this; return list.length > 1 ? Collision(edit, this.hash, list) : list[0]; } var v3 = f4(); if (v3 === nothing) return this; ++size.value; return mergeLeaves(edit, shift, this.hash, this, h5, Leaf(edit, h5, k5, v3)); }; var IndexedNode__modify = function IndexedNode__modify2(edit, keyEq, shift, f4, h5, k5, size) { var mask = this.mask; var children = this.children; var frag = hashFragment(shift, h5); var bit = toBitmap(frag); var indx = fromBitmap(mask, bit); var exists = mask & bit; var current = exists ? children[indx] : empty; var child = current._modify(edit, keyEq, shift + SIZE, f4, h5, k5, size); if (current === child) return this; var canEdit = canEditNode(edit, this); var bitmap = mask; var newChildren = void 0; if (exists && isEmptyNode(child)) { bitmap &= ~bit; if (!bitmap) return empty; if (children.length <= 2 && isLeaf(children[indx ^ 1])) return children[indx ^ 1]; newChildren = arraySpliceOut(canEdit, indx, children); } else if (!exists && !isEmptyNode(child)) { if (children.length >= MAX_INDEX_NODE) return expand(edit, frag, child, mask, children); bitmap |= bit; newChildren = arraySpliceIn(canEdit, indx, child, children); } else { newChildren = arrayUpdate(canEdit, indx, child, children); } if (canEdit) { this.mask = bitmap; this.children = newChildren; return this; } return IndexedNode(edit, bitmap, newChildren); }; var ArrayNode__modify = function ArrayNode__modify2(edit, keyEq, shift, f4, h5, k5, size) { var count3 = this.size; var children = this.children; var frag = hashFragment(shift, h5); var child = children[frag]; var newChild = (child || empty)._modify(edit, keyEq, shift + SIZE, f4, h5, k5, size); if (child === newChild) return this; var canEdit = canEditNode(edit, this); var newChildren = void 0; if (isEmptyNode(child) && !isEmptyNode(newChild)) { ++count3; newChildren = arrayUpdate(canEdit, frag, newChild, children); } else if (!isEmptyNode(child) && isEmptyNode(newChild)) { --count3; if (count3 <= MIN_ARRAY_NODE) return pack(edit, count3, frag, children); newChildren = arrayUpdate(canEdit, frag, empty, children); } else { newChildren = arrayUpdate(canEdit, frag, newChild, children); } if (canEdit) { this.size = count3; this.children = newChildren; return this; } return ArrayNode(edit, count3, newChildren); }; empty._modify = function(edit, keyEq, shift, f4, h5, k5, size) { var v3 = f4(); if (v3 === nothing) return empty; ++size.value; return Leaf(edit, h5, k5, v3); }; function Map2(editable, edit, config, root, size) { this._editable = editable; this._edit = edit; this._config = config; this._root = root; this._size = size; } Map2.prototype.setTree = function(newRoot, newSize) { if (this._editable) { this._root = newRoot; this._size = newSize; return this; } return newRoot === this._root ? this : new Map2(this._editable, this._edit, this._config, newRoot, newSize); }; var tryGetHash = hamt.tryGetHash = function(alt, hash2, key2, map) { var node = map._root; var shift = 0; var keyEq = map._config.keyEq; while (true) { switch (node.type) { case LEAF: { return keyEq(key2, node.key) ? node.value : alt; } case COLLISION: { if (hash2 === node.hash) { var children = node.children; for (var i4 = 0, len = children.length; i4 < len; ++i4) { var child = children[i4]; if (keyEq(key2, child.key)) return child.value; } } return alt; } case INDEX: { var frag = hashFragment(shift, hash2); var bit = toBitmap(frag); if (node.mask & bit) { node = node.children[fromBitmap(node.mask, bit)]; shift += SIZE; break; } return alt; } case ARRAY: { node = node.children[hashFragment(shift, hash2)]; if (node) { shift += SIZE; break; } return alt; } default: return alt; } } }; Map2.prototype.tryGetHash = function(alt, hash2, key2) { return tryGetHash(alt, hash2, key2, this); }; var tryGet = hamt.tryGet = function(alt, key2, map) { return tryGetHash(alt, map._config.hash(key2), key2, map); }; Map2.prototype.tryGet = function(alt, key2) { return tryGet(alt, key2, this); }; var getHash = hamt.getHash = function(hash2, key2, map) { return tryGetHash(void 0, hash2, key2, map); }; Map2.prototype.getHash = function(hash2, key2) { return getHash(hash2, key2, this); }; var get = hamt.get = function(key2, map) { return tryGetHash(void 0, map._config.hash(key2), key2, map); }; Map2.prototype.get = function(key2, alt) { return tryGet(alt, key2, this); }; var hasHash = hamt.has = function(hash2, key2, map) { return tryGetHash(nothing, hash2, key2, map) !== nothing; }; Map2.prototype.hasHash = function(hash2, key2) { return hasHash(hash2, key2, this); }; var has = hamt.has = function(key2, map) { return hasHash(map._config.hash(key2), key2, map); }; Map2.prototype.has = function(key2) { return has(key2, this); }; var defKeyCompare = function defKeyCompare2(x5, y5) { return x5 === y5; }; hamt.make = function(config) { return new Map2(0, 0, { keyEq: config && config.keyEq || defKeyCompare, hash: config && config.hash || hash }, empty, 0); }; hamt.empty = hamt.make(); var isEmpty = hamt.isEmpty = function(map) { return map && !!isEmptyNode(map._root); }; Map2.prototype.isEmpty = function() { return isEmpty(this); }; var modifyHash = hamt.modifyHash = function(f4, hash2, key2, map) { var size = { value: map._size }; var newRoot = map._root._modify(map._editable ? map._edit : NaN, map._config.keyEq, 0, f4, hash2, key2, size); return map.setTree(newRoot, size.value); }; Map2.prototype.modifyHash = function(hash2, key2, f4) { return modifyHash(f4, hash2, key2, this); }; var modify = hamt.modify = function(f4, key2, map) { return modifyHash(f4, map._config.hash(key2), key2, map); }; Map2.prototype.modify = function(key2, f4) { return modify(f4, key2, this); }; var setHash = hamt.setHash = function(hash2, key2, value, map) { return modifyHash(constant(value), hash2, key2, map); }; Map2.prototype.setHash = function(hash2, key2, value) { return setHash(hash2, key2, value, this); }; var set = hamt.set = function(key2, value, map) { return setHash(map._config.hash(key2), key2, value, map); }; Map2.prototype.set = function(key2, value) { return set(key2, value, this); }; var del = constant(nothing); var removeHash = hamt.removeHash = function(hash2, key2, map) { return modifyHash(del, hash2, key2, map); }; Map2.prototype.removeHash = Map2.prototype.deleteHash = function(hash2, key2) { return removeHash(hash2, key2, this); }; var remove = hamt.remove = function(key2, map) { return removeHash(map._config.hash(key2), key2, map); }; Map2.prototype.remove = Map2.prototype.delete = function(key2) { return remove(key2, this); }; var beginMutation = hamt.beginMutation = function(map) { return new Map2(map._editable + 1, map._edit + 1, map._config, map._root, map._size); }; Map2.prototype.beginMutation = function() { return beginMutation(this); }; var endMutation = hamt.endMutation = function(map) { map._editable = map._editable && map._editable - 1; return map; }; Map2.prototype.endMutation = function() { return endMutation(this); }; var mutate = hamt.mutate = function(f4, map) { var transient = beginMutation(map); f4(transient); return endMutation(transient); }; Map2.prototype.mutate = function(f4) { return mutate(f4, this); }; var appk = function appk2(k5) { return k5 && lazyVisitChildren(k5[0], k5[1], k5[2], k5[3], k5[4]); }; var lazyVisitChildren = function lazyVisitChildren2(len, children, i4, f4, k5) { while (i4 < len) { var child = children[i4++]; if (child && !isEmptyNode(child)) return lazyVisit(child, f4, [len, children, i4, f4, k5]); } return appk(k5); }; var lazyVisit = function lazyVisit2(node, f4, k5) { switch (node.type) { case LEAF: return { value: f4(node), rest: k5 }; case COLLISION: case ARRAY: case INDEX: var children = node.children; return lazyVisitChildren(children.length, children, 0, f4, k5); default: return appk(k5); } }; var DONE = { done: true }; function MapIterator(v3) { this.v = v3; } MapIterator.prototype.next = function() { if (!this.v) return DONE; var v0 = this.v; this.v = appk(v0.rest); return v0; }; MapIterator.prototype[Symbol.iterator] = function() { return this; }; var visit = function visit2(map, f4) { return new MapIterator(lazyVisit(map._root, f4)); }; var buildPairs = function buildPairs2(x5) { return [x5.key, x5.value]; }; var entries = hamt.entries = function(map) { return visit(map, buildPairs); }; Map2.prototype.entries = Map2.prototype[Symbol.iterator] = function() { return entries(this); }; var buildKeys = function buildKeys2(x5) { return x5.key; }; var keys = hamt.keys = function(map) { return visit(map, buildKeys); }; Map2.prototype.keys = function() { return keys(this); }; var buildValues = function buildValues2(x5) { return x5.value; }; var values = hamt.values = Map2.prototype.values = function(map) { return visit(map, buildValues); }; Map2.prototype.values = function() { return values(this); }; var fold = hamt.fold = function(f4, z5, m5) { var root = m5._root; if (root.type === LEAF) return f4(z5, root.value, root.key); var toVisit = [root.children]; var children = void 0; while (children = toVisit.pop()) { for (var i4 = 0, len = children.length; i4 < len; ) { var child = children[i4++]; if (child && child.type) { if (child.type === LEAF) z5 = f4(z5, child.value, child.key); else toVisit.push(child.children); } } } return z5; }; Map2.prototype.fold = function(f4, z5) { return fold(f4, z5, this); }; var forEach = hamt.forEach = function(f4, map) { return fold(function(_5, value, key2) { return f4(value, key2, map); }, null, map); }; Map2.prototype.forEach = function(f4) { return forEach(f4, this); }; var count2 = hamt.count = function(map) { return map._size; }; Map2.prototype.count = function() { return count2(this); }; Object.defineProperty(Map2.prototype, "size", { get: Map2.prototype.count }); if (module2.exports) { module2.exports = hamt; } else { (void 0).hamt = hamt; } }); var BuiltInMap = class { constructor(existing) { _defineProperty(this, "_map", void 0); this._map = new Map(existing === null || existing === void 0 ? void 0 : existing.entries()); } keys() { return this._map.keys(); } entries() { return this._map.entries(); } get(k5) { return this._map.get(k5); } has(k5) { return this._map.has(k5); } set(k5, v3) { this._map.set(k5, v3); return this; } delete(k5) { this._map.delete(k5); return this; } clone() { return persistentMap(this); } toMap() { return new Map(this._map); } }; var HashArrayMappedTrieMap = class { constructor(existing) { _defineProperty(this, "_hamt", hamt_1.empty.beginMutation()); if (existing instanceof HashArrayMappedTrieMap) { const h5 = existing._hamt.endMutation(); existing._hamt = h5.beginMutation(); this._hamt = h5.beginMutation(); } else if (existing) { for (const [k5, v3] of existing.entries()) { this._hamt.set(k5, v3); } } } keys() { return this._hamt.keys(); } entries() { return this._hamt.entries(); } get(k5) { return this._hamt.get(k5); } has(k5) { return this._hamt.has(k5); } set(k5, v3) { this._hamt.set(k5, v3); return this; } delete(k5) { this._hamt.delete(k5); return this; } clone() { return persistentMap(this); } toMap() { return new Map(this._hamt); } }; function persistentMap(existing) { if (Recoil_gkx_1("recoil_hamt_2020")) { return new HashArrayMappedTrieMap(existing); } else { return new BuiltInMap(existing); } } var Recoil_PersistentMap = { persistentMap }; var Recoil_PersistentMap_1 = Recoil_PersistentMap.persistentMap; var Recoil_PersistentMap$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, persistentMap: Recoil_PersistentMap_1 }); var { graph: graph$1 } = Recoil_Graph; var { persistentMap: persistentMap$1 } = Recoil_PersistentMap$1; var nextTreeStateVersion = 0; var getNextTreeStateVersion = () => nextTreeStateVersion++; function makeEmptyTreeState() { const version = getNextTreeStateVersion(); return { version, stateID: version, transactionMetadata: {}, dirtyAtoms: /* @__PURE__ */ new Set(), atomValues: persistentMap$1(), nonvalidatedAtoms: persistentMap$1() }; } function makeEmptyStoreState() { const currentTree = makeEmptyTreeState(); return { currentTree, nextTree: null, previousTree: null, commitDepth: 0, knownAtoms: /* @__PURE__ */ new Set(), knownSelectors: /* @__PURE__ */ new Set(), transactionSubscriptions: /* @__PURE__ */ new Map(), nodeTransactionSubscriptions: /* @__PURE__ */ new Map(), nodeToComponentSubscriptions: /* @__PURE__ */ new Map(), queuedComponentCallbacks_DEPRECATED: [], suspendedComponentResolvers: /* @__PURE__ */ new Set(), graphsByVersion: (/* @__PURE__ */ new Map()).set(currentTree.version, graph$1()), versionsUsedByComponent: /* @__PURE__ */ new Map(), retention: { referenceCounts: /* @__PURE__ */ new Map(), nodesRetainedByZone: /* @__PURE__ */ new Map(), retainablesToCheckForRelease: /* @__PURE__ */ new Set() }, nodeCleanupFunctions: /* @__PURE__ */ new Map() }; } var Recoil_State = { makeEmptyTreeState, makeEmptyStoreState, getNextTreeStateVersion }; function unionSets(...sets) { const result = /* @__PURE__ */ new Set(); for (const set of sets) { for (const value of set) { result.add(value); } } return result; } var Recoil_unionSets = unionSets; function someSet(set, callback, context) { const iterator = set.entries(); let current = iterator.next(); while (!current.done) { const entry = current.value; if (callback.call(context, entry[1], entry[0], set)) { return true; } current = iterator.next(); } return false; } var Recoil_someSet = someSet; var { cleanUpNode: cleanUpNode$1 } = Recoil_FunctionalCore; var { deleteNodeConfigIfPossible: deleteNodeConfigIfPossible$1, getNode: getNode$2 } = Recoil_Node; var { RetentionZone: RetentionZone$2 } = Recoil_RetentionZone; var emptySet$1 = /* @__PURE__ */ new Set(); function releaseRetainablesNowOnCurrentTree(store, retainables) { const storeState = store.getState(); const treeState = storeState.currentTree; if (storeState.nextTree) { Recoil_recoverableViolation("releaseNodesNowOnCurrentTree should only be called at the end of a batch"); return; } const nodes2 = /* @__PURE__ */ new Set(); for (const r3 of retainables) { if (r3 instanceof RetentionZone$2) { for (const n2 of nodesRetainedByZone(storeState, r3)) { nodes2.add(n2); } } else { nodes2.add(r3); } } const releasableNodes = findReleasableNodes(store, nodes2); for (const node of releasableNodes) { releaseNode(store, treeState, node); } } function findReleasableNodes(store, searchFromNodes) { const storeState = store.getState(); const treeState = storeState.currentTree; const graph2 = store.getGraph(treeState.version); const releasableNodes = /* @__PURE__ */ new Set(); const nonReleasableNodes = /* @__PURE__ */ new Set(); findReleasableNodesInner(searchFromNodes); return releasableNodes; function findReleasableNodesInner(searchFromNodes2) { const releasableNodesFoundThisIteration = /* @__PURE__ */ new Set(); const downstreams = getDownstreamNodesInTopologicalOrder( store, treeState, searchFromNodes2, releasableNodes, nonReleasableNodes ); for (const node of downstreams) { var _storeState$retention; if (getNode$2(node).retainedBy === "recoilRoot") { nonReleasableNodes.add(node); continue; } if (((_storeState$retention = storeState.retention.referenceCounts.get(node)) !== null && _storeState$retention !== void 0 ? _storeState$retention : 0) > 0) { nonReleasableNodes.add(node); continue; } if (zonesThatCouldRetainNode(node).some((z5) => storeState.retention.referenceCounts.get(z5))) { nonReleasableNodes.add(node); continue; } const nodeChildren = graph2.nodeToNodeSubscriptions.get(node); if (nodeChildren && Recoil_someSet(nodeChildren, (child) => nonReleasableNodes.has(child))) { nonReleasableNodes.add(node); continue; } releasableNodes.add(node); releasableNodesFoundThisIteration.add(node); } const parents = /* @__PURE__ */ new Set(); for (const node of releasableNodesFoundThisIteration) { for (const parent of (_graph$nodeDeps$get = graph2.nodeDeps.get(node)) !== null && _graph$nodeDeps$get !== void 0 ? _graph$nodeDeps$get : emptySet$1) { var _graph$nodeDeps$get; if (!releasableNodes.has(parent)) { parents.add(parent); } } } if (parents.size) { findReleasableNodesInner(parents); } } } function getDownstreamNodesInTopologicalOrder(store, treeState, nodes2, doNotDescendInto1, doNotDescendInto2) { const graph2 = store.getGraph(treeState.version); const answer = []; const visited = /* @__PURE__ */ new Set(); while (nodes2.size > 0) { visit(Recoil_nullthrows(nodes2.values().next().value)); } return answer; function visit(node) { if (doNotDescendInto1.has(node) || doNotDescendInto2.has(node)) { nodes2.delete(node); return; } if (visited.has(node)) { return; } const children = graph2.nodeToNodeSubscriptions.get(node); if (children) { for (const child of children) { visit(child); } } visited.add(node); nodes2.delete(node); answer.push(node); } } function releaseNode(store, treeState, node) { if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return; } cleanUpNode$1(store, node); const storeState = store.getState(); storeState.knownAtoms.delete(node); storeState.knownSelectors.delete(node); storeState.nodeTransactionSubscriptions.delete(node); storeState.retention.referenceCounts.delete(node); const zones = zonesThatCouldRetainNode(node); for (const zone of zones) { var _storeState$retention2; (_storeState$retention2 = storeState.retention.nodesRetainedByZone.get(zone)) === null || _storeState$retention2 === void 0 ? void 0 : _storeState$retention2.delete(node); } treeState.atomValues.delete(node); treeState.dirtyAtoms.delete(node); treeState.nonvalidatedAtoms.delete(node); const graph2 = storeState.graphsByVersion.get(treeState.version); if (graph2) { const deps = graph2.nodeDeps.get(node); if (deps !== void 0) { graph2.nodeDeps.delete(node); for (const dep of deps) { var _graph$nodeToNodeSubs; (_graph$nodeToNodeSubs = graph2.nodeToNodeSubscriptions.get(dep)) === null || _graph$nodeToNodeSubs === void 0 ? void 0 : _graph$nodeToNodeSubs.delete(node); } } graph2.nodeToNodeSubscriptions.delete(node); } deleteNodeConfigIfPossible$1(node); } function nodesRetainedByZone(storeState, zone) { var _storeState$retention3; return (_storeState$retention3 = storeState.retention.nodesRetainedByZone.get(zone)) !== null && _storeState$retention3 !== void 0 ? _storeState$retention3 : emptySet$1; } function zonesThatCouldRetainNode(node) { const retainedBy = getNode$2(node).retainedBy; if (retainedBy === void 0 || retainedBy === "components" || retainedBy === "recoilRoot") { return []; } else if (retainedBy instanceof RetentionZone$2) { return [retainedBy]; } else { return retainedBy; } } function scheduleOrPerformPossibleReleaseOfRetainable(store, retainable) { const state = store.getState(); if (state.nextTree) { state.retention.retainablesToCheckForRelease.add(retainable); } else { releaseRetainablesNowOnCurrentTree(store, /* @__PURE__ */ new Set([retainable])); } } function updateRetainCount(store, retainable, delta) { var _map$get; if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return; } const map = store.getState().retention.referenceCounts; const newCount = ((_map$get = map.get(retainable)) !== null && _map$get !== void 0 ? _map$get : 0) + delta; if (newCount === 0) { updateRetainCountToZero(store, retainable); } else { map.set(retainable, newCount); } } function updateRetainCountToZero(store, retainable) { if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return; } const map = store.getState().retention.referenceCounts; map.delete(retainable); scheduleOrPerformPossibleReleaseOfRetainable(store, retainable); } function releaseScheduledRetainablesNow(store) { if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return; } const state = store.getState(); releaseRetainablesNowOnCurrentTree(store, state.retention.retainablesToCheckForRelease); state.retention.retainablesToCheckForRelease.clear(); } function retainedByOptionWithDefault(r3) { return r3 === void 0 ? "recoilRoot" : r3; } var Recoil_Retention = { updateRetainCount, updateRetainCountToZero, releaseScheduledRetainablesNow, retainedByOptionWithDefault }; function* concatIterables(iters) { for (const iter of iters) { for (const val of iter) { yield val; } } } var Recoil_concatIterables = concatIterables; var isSSR = typeof window === "undefined"; var isReactNative = typeof navigator !== "undefined" && navigator.product === "ReactNative"; var Recoil_Environment = { isSSR, isReactNative }; var { isSSR: isSSR$1 } = Recoil_Environment; var { batchUpdates: batchUpdates$1 } = Recoil_Batching; var { initializeNodeIfNewToStore: initializeNodeIfNewToStore$1, peekNodeInfo: peekNodeInfo$1 } = Recoil_FunctionalCore; var { graph: graph$2 } = Recoil_Graph; var { DEFAULT_VALUE: DEFAULT_VALUE$1, recoilValues: recoilValues$1, recoilValuesForKeys: recoilValuesForKeys$2 } = Recoil_Node; var { AbstractRecoilValue: AbstractRecoilValue$2, getRecoilValueAsLoadable: getRecoilValueAsLoadable$1, setRecoilValue: setRecoilValue$1, setUnvalidatedRecoilValue: setUnvalidatedRecoilValue$1 } = Recoil_RecoilValueInterface; var { updateRetainCount: updateRetainCount$1 } = Recoil_Retention; var { getNextTreeStateVersion: getNextTreeStateVersion$1, makeEmptyStoreState: makeEmptyStoreState$1 } = Recoil_State; var retainWarning = ` Recoil Snapshots only last for the duration of the callback they are provided to. To keep a Snapshot longer, do this: const release = snapshot.retain(); try { await useTheSnapshotAsynchronously(snapshot); } finally { release(); } This is currently a DEV-only warning but will become a thrown exception in the next release of Recoil. `; var Snapshot = class { constructor(storeState) { _defineProperty(this, "_store", void 0); _defineProperty(this, "_refCount", 0); _defineProperty(this, "getLoadable", (recoilValue) => { this.checkRefCount_INTERNAL(); return getRecoilValueAsLoadable$1(this._store, recoilValue); }); _defineProperty(this, "getPromise", (recoilValue) => { this.checkRefCount_INTERNAL(); return this.getLoadable(recoilValue).toPromise(); }); _defineProperty(this, "getNodes_UNSTABLE", (opt) => { this.checkRefCount_INTERNAL(); if ((opt === null || opt === void 0 ? void 0 : opt.isModified) === true) { if ((opt === null || opt === void 0 ? void 0 : opt.isInitialized) === false) { return []; } const state = this._store.getState().currentTree; return recoilValuesForKeys$2(state.dirtyAtoms); } const knownAtoms = this._store.getState().knownAtoms; const knownSelectors = this._store.getState().knownSelectors; return (opt === null || opt === void 0 ? void 0 : opt.isInitialized) == null ? recoilValues$1.values() : opt.isInitialized === true ? recoilValuesForKeys$2(Recoil_concatIterables([this._store.getState().knownAtoms, this._store.getState().knownSelectors])) : Recoil_filterIterable(recoilValues$1.values(), ({ key: key2 }) => !knownAtoms.has(key2) && !knownSelectors.has(key2)); }); _defineProperty(this, "getInfo_UNSTABLE", ({ key: key2 }) => { this.checkRefCount_INTERNAL(); return peekNodeInfo$1(this._store, this._store.getState().currentTree, key2); }); _defineProperty(this, "map", (mapper) => { this.checkRefCount_INTERNAL(); const mutableSnapshot = new MutableSnapshot(this, batchUpdates$1); mapper(mutableSnapshot); return cloneSnapshot(mutableSnapshot.getStore_INTERNAL()); }); _defineProperty(this, "asyncMap", async (mapper) => { this.checkRefCount_INTERNAL(); const mutableSnapshot = new MutableSnapshot(this, batchUpdates$1); await mapper(mutableSnapshot); return cloneSnapshot(mutableSnapshot.getStore_INTERNAL()); }); this._store = { getState: () => storeState, replaceState: (replacer) => { storeState.currentTree = replacer(storeState.currentTree); }, getGraph: (version) => { const graphs = storeState.graphsByVersion; if (graphs.has(version)) { return Recoil_nullthrows(graphs.get(version)); } const newGraph = graph$2(); graphs.set(version, newGraph); return newGraph; }, subscribeToTransactions: () => ({ release: () => { } }), addTransactionMetadata: () => { throw new Error("Cannot subscribe to Snapshots"); } }; for (const nodeKey of this._store.getState().nodeCleanupFunctions.keys()) { initializeNodeIfNewToStore$1(this._store, storeState.currentTree, nodeKey, "get"); updateRetainCount$1(this._store, nodeKey, 1); } this.retain(); this.autorelease_INTERNAL(); } retain() { if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return () => void 0; } this._refCount++; let released = false; return () => { if (!released) { released = true; this.release_INTERNAL(); } }; } autorelease_INTERNAL() { if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return; } if (!isSSR$1) { window.setTimeout(() => this.release_INTERNAL(), 0); } } release_INTERNAL() { if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return; } this._refCount--; if (this._refCount === 0) ; } checkRefCount_INTERNAL() { if (Recoil_gkx_1("recoil_memory_managament_2020") && this._refCount <= 0) { if (true) { Recoil_recoverableViolation(retainWarning); } } } getStore_INTERNAL() { this.checkRefCount_INTERNAL(); return this._store; } getID() { this.checkRefCount_INTERNAL(); return this.getID_INTERNAL(); } getID_INTERNAL() { this.checkRefCount_INTERNAL(); return this._store.getState().currentTree.stateID; } }; function cloneStoreState(store, treeState, bumpVersion = false) { const storeState = store.getState(); const version = bumpVersion ? getNextTreeStateVersion$1() : treeState.version; return { currentTree: bumpVersion ? { version, stateID: version, transactionMetadata: { ...treeState.transactionMetadata }, dirtyAtoms: new Set(treeState.dirtyAtoms), atomValues: treeState.atomValues.clone(), nonvalidatedAtoms: treeState.nonvalidatedAtoms.clone() } : treeState, commitDepth: 0, nextTree: null, previousTree: null, knownAtoms: new Set(storeState.knownAtoms), knownSelectors: new Set(storeState.knownSelectors), transactionSubscriptions: /* @__PURE__ */ new Map(), nodeTransactionSubscriptions: /* @__PURE__ */ new Map(), nodeToComponentSubscriptions: /* @__PURE__ */ new Map(), queuedComponentCallbacks_DEPRECATED: [], suspendedComponentResolvers: /* @__PURE__ */ new Set(), graphsByVersion: (/* @__PURE__ */ new Map()).set(version, store.getGraph(treeState.version)), versionsUsedByComponent: /* @__PURE__ */ new Map(), retention: { referenceCounts: /* @__PURE__ */ new Map(), nodesRetainedByZone: /* @__PURE__ */ new Map(), retainablesToCheckForRelease: /* @__PURE__ */ new Set() }, nodeCleanupFunctions: /* @__PURE__ */ new Map() }; } function freshSnapshot(initializeState) { const snapshot = new Snapshot(makeEmptyStoreState$1()); return initializeState != null ? snapshot.map(initializeState) : snapshot; } function cloneSnapshot(store, version = "current") { const storeState = store.getState(); const treeState = version === "current" ? storeState.currentTree : Recoil_nullthrows(storeState.previousTree); return new Snapshot(cloneStoreState(store, treeState)); } var MutableSnapshot = class extends Snapshot { constructor(snapshot, batch) { super(cloneStoreState(snapshot.getStore_INTERNAL(), snapshot.getStore_INTERNAL().getState().currentTree, true)); _defineProperty(this, "_batch", void 0); _defineProperty(this, "set", (recoilState, newValueOrUpdater) => { this.checkRefCount_INTERNAL(); const store = this.getStore_INTERNAL(); this._batch(() => { updateRetainCount$1(store, recoilState.key, 1); setRecoilValue$1(this.getStore_INTERNAL(), recoilState, newValueOrUpdater); }); }); _defineProperty(this, "reset", (recoilState) => { this.checkRefCount_INTERNAL(); const store = this.getStore_INTERNAL(); this._batch(() => { updateRetainCount$1(store, recoilState.key, 1); setRecoilValue$1(this.getStore_INTERNAL(), recoilState, DEFAULT_VALUE$1); }); }); _defineProperty(this, "setUnvalidatedAtomValues_DEPRECATED", (values) => { this.checkRefCount_INTERNAL(); const store = this.getStore_INTERNAL(); batchUpdates$1(() => { for (const [k5, v3] of values.entries()) { updateRetainCount$1(store, k5, 1); setUnvalidatedRecoilValue$1(store, new AbstractRecoilValue$2(k5), v3); } }); }); this._batch = batch; } }; var Recoil_Snapshot = { Snapshot, MutableSnapshot, freshSnapshot, cloneSnapshot }; var Recoil_Snapshot_1 = Recoil_Snapshot.Snapshot; var Recoil_Snapshot_2 = Recoil_Snapshot.MutableSnapshot; var Recoil_Snapshot_3 = Recoil_Snapshot.freshSnapshot; var Recoil_Snapshot_4 = Recoil_Snapshot.cloneSnapshot; var Recoil_Snapshot$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, Snapshot: Recoil_Snapshot_1, MutableSnapshot: Recoil_Snapshot_2, freshSnapshot: Recoil_Snapshot_3, cloneSnapshot: Recoil_Snapshot_4 }); var { getNextTreeStateVersion: getNextTreeStateVersion$2, makeEmptyStoreState: makeEmptyStoreState$2 } = Recoil_State; var { cleanUpNode: cleanUpNode$2, getDownstreamNodes: getDownstreamNodes$2, setNodeValue: setNodeValue$2, setUnvalidatedAtomValue_DEPRECATED: setUnvalidatedAtomValue_DEPRECATED$1 } = Recoil_FunctionalCore; var { graph: graph$3 } = Recoil_Graph; var { cloneGraph: cloneGraph$1 } = Recoil_Graph; var { applyAtomValueWrites: applyAtomValueWrites$1 } = Recoil_RecoilValueInterface; var { releaseScheduledRetainablesNow: releaseScheduledRetainablesNow$1 } = Recoil_Retention; var { freshSnapshot: freshSnapshot$1 } = Recoil_Snapshot$1; var { useCallback, useContext: useContext2, useEffect, useMemo, useRef: useRef3, useState } = bn; function notInAContext() { throw new Error("This component must be used inside a component."); } var defaultStore = Object.freeze({ getState: notInAContext, replaceState: notInAContext, getGraph: notInAContext, subscribeToTransactions: notInAContext, addTransactionMetadata: notInAContext }); var stateReplacerIsBeingExecuted = false; function startNextTreeIfNeeded(store) { if (stateReplacerIsBeingExecuted) { throw new Error("An atom update was triggered within the execution of a state updater function. State updater functions provided to Recoil must be pure functions."); } const storeState = store.getState(); if (storeState.nextTree === null) { if (Recoil_gkx_1("recoil_memory_managament_2020") && Recoil_gkx_1("recoil_release_on_cascading_update_killswitch_2021")) { if (storeState.commitDepth > 0) { releaseScheduledRetainablesNow$1(store); } } const version = storeState.currentTree.version; const nextVersion = getNextTreeStateVersion$2(); storeState.nextTree = { ...storeState.currentTree, version: nextVersion, stateID: nextVersion, dirtyAtoms: /* @__PURE__ */ new Set(), transactionMetadata: {} }; storeState.graphsByVersion.set(nextVersion, cloneGraph$1(Recoil_nullthrows(storeState.graphsByVersion.get(version)))); } } var AppContext = bn.createContext({ current: defaultStore }); var useStoreRef = () => useContext2(AppContext); var MutableSourceContext = bn.createContext(null); function useRecoilMutableSource() { const mutableSource = useContext2(MutableSourceContext); if (mutableSource == null) { Recoil_expectationViolation("Attempted to use a Recoil hook outside of a . must be an ancestor of any component that uses Recoil hooks."); } return mutableSource; } function notifyComponents(store, storeState, treeState) { const dependentNodes = getDownstreamNodes$2(store, treeState, treeState.dirtyAtoms); for (const key2 of dependentNodes) { const comps = storeState.nodeToComponentSubscriptions.get(key2); if (comps) { for (const [_subID, [_debugName, callback]] of comps) { callback(treeState); } } } } function sendEndOfBatchNotifications(store) { const storeState = store.getState(); const treeState = storeState.currentTree; const dirtyAtoms = treeState.dirtyAtoms; if (dirtyAtoms.size) { for (const [key2, subscriptions] of storeState.nodeTransactionSubscriptions) { if (dirtyAtoms.has(key2)) { for (const [_5, subscription] of subscriptions) { subscription(store); } } } for (const [_5, subscription] of storeState.transactionSubscriptions) { subscription(store); } if (!Recoil_gkx_1("recoil_early_rendering_2021") || storeState.suspendedComponentResolvers.size) { notifyComponents(store, storeState, treeState); storeState.suspendedComponentResolvers.forEach((cb) => cb()); storeState.suspendedComponentResolvers.clear(); } } storeState.queuedComponentCallbacks_DEPRECATED.forEach((cb) => cb(treeState)); storeState.queuedComponentCallbacks_DEPRECATED.splice(0, storeState.queuedComponentCallbacks_DEPRECATED.length); } function endBatch(storeRef) { const storeState = storeRef.current.getState(); storeState.commitDepth++; try { const { nextTree } = storeState; if (nextTree === null) { return; } storeState.previousTree = storeState.currentTree; storeState.currentTree = nextTree; storeState.nextTree = null; sendEndOfBatchNotifications(storeRef.current); if (storeState.previousTree != null) { storeState.graphsByVersion.delete(storeState.previousTree.version); } else { Recoil_recoverableViolation("Ended batch with no previous state, which is unexpected", "recoil"); } storeState.previousTree = null; if (Recoil_gkx_1("recoil_memory_managament_2020")) { releaseScheduledRetainablesNow$1(storeRef.current); } } finally { storeState.commitDepth--; } } function Batcher({ setNotifyBatcherOfChange }) { const storeRef = useStoreRef(); const [_5, setState] = useState([]); setNotifyBatcherOfChange(() => setState({})); useEffect(() => { Recoil_Queue.enqueueExecution("Batcher", () => { endBatch(storeRef); }); }); useEffect(() => { return () => { setNotifyBatcherOfChange(() => { }); }; }, [setNotifyBatcherOfChange]); return null; } if (true) { if (typeof window !== "undefined" && !window.$recoilDebugStates) { window.$recoilDebugStates = []; } } function initialStoreState_DEPRECATED(store, initializeState) { const initial = makeEmptyStoreState$2(); initializeState({ set: (atom2, value) => { const state = initial.currentTree; const writes = setNodeValue$2(store, state, atom2.key, value); const writtenNodes = new Set(writes.keys()); const nonvalidatedAtoms = state.nonvalidatedAtoms.clone(); for (const n2 of writtenNodes) { nonvalidatedAtoms.delete(n2); } initial.currentTree = { ...state, dirtyAtoms: Recoil_unionSets(state.dirtyAtoms, writtenNodes), atomValues: applyAtomValueWrites$1(state.atomValues, writes), nonvalidatedAtoms }; }, setUnvalidatedAtomValues: (atomValues) => { atomValues.forEach((v3, k5) => { initial.currentTree = setUnvalidatedAtomValue_DEPRECATED$1(initial.currentTree, k5, v3); }); } }); return initial; } function initialStoreState(initializeState) { const snapshot = freshSnapshot$1().map(initializeState); return snapshot.getStore_INTERNAL().getState(); } var nextID = 0; function RecoilRoot_INTERNAL({ initializeState_DEPRECATED, initializeState, store_INTERNAL: storeProp, children }) { var _createMutableSource; let storeState; const getGraph = (version) => { const graphs = storeState.current.graphsByVersion; if (graphs.has(version)) { return Recoil_nullthrows(graphs.get(version)); } const newGraph = graph$3(); graphs.set(version, newGraph); return newGraph; }; const subscribeToTransactions = (callback, key2) => { if (key2 == null) { const { transactionSubscriptions } = storeRef.current.getState(); const id2 = nextID++; transactionSubscriptions.set(id2, callback); return { release: () => { transactionSubscriptions.delete(id2); } }; } else { const { nodeTransactionSubscriptions } = storeRef.current.getState(); if (!nodeTransactionSubscriptions.has(key2)) { nodeTransactionSubscriptions.set(key2, /* @__PURE__ */ new Map()); } const id2 = nextID++; Recoil_nullthrows(nodeTransactionSubscriptions.get(key2)).set(id2, callback); return { release: () => { const subs = nodeTransactionSubscriptions.get(key2); if (subs) { subs.delete(id2); if (subs.size === 0) { nodeTransactionSubscriptions.delete(key2); } } } }; } }; const addTransactionMetadata = (metadata) => { startNextTreeIfNeeded(storeRef.current); for (const k5 of Object.keys(metadata)) { Recoil_nullthrows(storeRef.current.getState().nextTree).transactionMetadata[k5] = metadata[k5]; } }; const replaceState = (replacer) => { const storeState2 = storeRef.current.getState(); startNextTreeIfNeeded(storeRef.current); const nextTree = Recoil_nullthrows(storeState2.nextTree); let replaced; try { stateReplacerIsBeingExecuted = true; replaced = replacer(nextTree); } finally { stateReplacerIsBeingExecuted = false; } if (replaced === nextTree) { return; } if (true) { if (typeof window !== "undefined") { window.$recoilDebugStates.push(replaced); } } storeState2.nextTree = replaced; if (Recoil_gkx_1("recoil_early_rendering_2021")) { notifyComponents(store, storeState2, replaced); } Recoil_nullthrows(notifyBatcherOfChange.current)(); }; const notifyBatcherOfChange = useRef3(null); const setNotifyBatcherOfChange = useCallback((x5) => { notifyBatcherOfChange.current = x5; }, [notifyBatcherOfChange]); const createMutableSource = (_createMutableSource = bn.createMutableSource) !== null && _createMutableSource !== void 0 ? _createMutableSource : bn.unstable_createMutableSource; const store = storeProp !== null && storeProp !== void 0 ? storeProp : { getState: () => storeState.current, replaceState, getGraph, subscribeToTransactions, addTransactionMetadata }; const storeRef = useRef3(store); storeState = useRef3(initializeState_DEPRECATED != null ? initialStoreState_DEPRECATED(store, initializeState_DEPRECATED) : initializeState != null ? initialStoreState(initializeState) : makeEmptyStoreState$2()); const mutableSource = useMemo(() => createMutableSource ? createMutableSource(storeState, () => storeState.current.currentTree.version) : null, [createMutableSource, storeState]); useEffect(() => () => { for (const atomKey of storeRef.current.getState().knownAtoms) { cleanUpNode$2(storeRef.current, atomKey); } }, []); return /* @__PURE__ */ bn.createElement(AppContext.Provider, { value: storeRef }, /* @__PURE__ */ bn.createElement(MutableSourceContext.Provider, { value: mutableSource }, /* @__PURE__ */ bn.createElement(Batcher, { setNotifyBatcherOfChange }), children)); } function RecoilRoot(props2) { const { override, ...propsExceptOverride } = props2; const ancestorStoreRef = useStoreRef(); if (override === false && ancestorStoreRef.current !== defaultStore) { return props2.children; } return /* @__PURE__ */ bn.createElement(RecoilRoot_INTERNAL, propsExceptOverride); } var Recoil_RecoilRoot_react = { useStoreRef, useRecoilMutableSource, RecoilRoot, notifyComponents_FOR_TESTING: notifyComponents, sendEndOfBatchNotifications_FOR_TESTING: sendEndOfBatchNotifications }; var { loadableWithValue: loadableWithValue$1 } = Recoil_Loadable; var { DEFAULT_VALUE: DEFAULT_VALUE$2, getNode: getNode$3 } = Recoil_Node; var { copyTreeState: copyTreeState$1, getRecoilValueAsLoadable: getRecoilValueAsLoadable$2, invalidateDownstreams: invalidateDownstreams$1, writeLoadableToTreeState: writeLoadableToTreeState$1 } = Recoil_RecoilValueInterface; function isAtom(recoilValue) { return getNode$3(recoilValue.key).nodeType === "atom"; } var TransactionInterfaceImpl = class { constructor(store, treeState) { _defineProperty(this, "_store", void 0); _defineProperty(this, "_treeState", void 0); _defineProperty(this, "_changes", void 0); _defineProperty(this, "get", (recoilValue) => { if (this._changes.has(recoilValue.key)) { return this._changes.get(recoilValue.key); } if (!isAtom(recoilValue)) { throw new Error("Reading selectors within atomicUpdate is not supported"); } const loadable = getRecoilValueAsLoadable$2(this._store, recoilValue, this._treeState); if (loadable.state === "hasValue") { return loadable.contents; } else if (loadable.state === "hasError") { throw loadable.contents; } else { throw new Error(`Expected Recoil atom ${recoilValue.key} to have a value, but it is in a loading state.`); } }); _defineProperty(this, "set", (recoilState, valueOrUpdater) => { if (!isAtom(recoilState)) { throw new Error("Setting selectors within atomicUpdate is not supported"); } if (typeof valueOrUpdater === "function") { const current = this.get(recoilState); this._changes.set(recoilState.key, valueOrUpdater(current)); } else { this._changes.set(recoilState.key, valueOrUpdater); } }); _defineProperty(this, "reset", (recoilState) => { this.set(recoilState, DEFAULT_VALUE$2); }); this._store = store; this._treeState = treeState; this._changes = /* @__PURE__ */ new Map(); } newTreeState_INTERNAL() { if (this._changes.size === 0) { return this._treeState; } const newState = copyTreeState$1(this._treeState); for (const [k5, v3] of this._changes) { writeLoadableToTreeState$1(newState, k5, loadableWithValue$1(v3)); } invalidateDownstreams$1(this._store, newState); return newState; } }; function atomicUpdater(store) { return (fn2) => { store.replaceState((treeState) => { const changeset = new TransactionInterfaceImpl(store, treeState); fn2(changeset); return changeset.newTreeState_INTERNAL(); }); }; } var Recoil_AtomicUpdates = { atomicUpdater }; var Recoil_AtomicUpdates_1 = Recoil_AtomicUpdates.atomicUpdater; var Recoil_AtomicUpdates$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, atomicUpdater: Recoil_AtomicUpdates_1 }); function filterMap(map, callback) { const result = /* @__PURE__ */ new Map(); for (const [key2, value] of map) { if (callback(value, key2)) { result.set(key2, value); } } return result; } var Recoil_filterMap = filterMap; function filterSet(set, callback) { const result = /* @__PURE__ */ new Set(); for (const value of set) { if (callback(value)) { result.add(value); } } return result; } var Recoil_filterSet = filterSet; function invariant(condition, message) { if (!condition) { throw new Error(message); } } var invariant_1 = invariant; var Recoil_invariant = invariant_1; function mergeMaps(...maps) { const result = /* @__PURE__ */ new Map(); for (let i4 = 0; i4 < maps.length; i4++) { const iterator = maps[i4].keys(); let nextKey; while (!(nextKey = iterator.next()).done) { result.set(nextKey.value, maps[i4].get(nextKey.value)); } } return result; } var Recoil_mergeMaps = mergeMaps; function shallowArrayEqual(a5, b4) { if (a5 === b4) { return true; } if (a5.length !== b4.length) { return false; } for (let i4 = 0, l3 = a5.length; i4 < l3; i4++) { if (a5[i4] !== b4[i4]) { return false; } } return true; } var Recoil_shallowArrayEqual = shallowArrayEqual; var UNKNOWN_FUNCTION = ""; function stackTraceParser(stackString) { const lines = stackString.split("\n"); return lines.reduce((stack, line) => { const parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line); if (parseResult) { stack.push(parseResult); } return stack; }, []); } var chromeRe = /^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i; var chromeEvalRe = /\((\S*)(?::(\d+))(?::(\d+))\)/; function parseChrome(line) { const parts = chromeRe.exec(line); if (!parts) { return null; } const isNative = parts[2] && parts[2].indexOf("native") === 0; const isEval = parts[2] && parts[2].indexOf("eval") === 0; const submatch = chromeEvalRe.exec(parts[2]); if (isEval && submatch != null) { parts[2] = submatch[1]; parts[3] = submatch[2]; parts[4] = submatch[3]; } return { file: !isNative ? parts[2] : null, methodName: parts[1] || UNKNOWN_FUNCTION, arguments: isNative ? [parts[2]] : [], lineNumber: parts[3] ? +parts[3] : null, column: parts[4] ? +parts[4] : null }; } var winjsRe = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i; function parseWinjs(line) { const parts = winjsRe.exec(line); if (!parts) { return null; } return { file: parts[2], methodName: parts[1] || UNKNOWN_FUNCTION, arguments: [], lineNumber: +parts[3], column: parts[4] ? +parts[4] : null }; } var geckoRe = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i; var geckoEvalRe = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i; function parseGecko(line) { const parts = geckoRe.exec(line); if (!parts) { return null; } const isEval = parts[3] && parts[3].indexOf(" > eval") > -1; const submatch = geckoEvalRe.exec(parts[3]); if (isEval && submatch != null) { parts[3] = submatch[1]; parts[4] = submatch[2]; parts[5] = null; } return { file: parts[3], methodName: parts[1] || UNKNOWN_FUNCTION, arguments: parts[2] ? parts[2].split(",") : [], lineNumber: parts[4] ? +parts[4] : null, column: parts[5] ? +parts[5] : null }; } var javaScriptCoreRe = /^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i; function parseJSC(line) { const parts = javaScriptCoreRe.exec(line); if (!parts) { return null; } return { file: parts[3], methodName: parts[1] || UNKNOWN_FUNCTION, arguments: [], lineNumber: +parts[4], column: parts[5] ? +parts[5] : null }; } var nodeRe = /^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i; function parseNode(line) { const parts = nodeRe.exec(line); if (!parts) { return null; } return { file: parts[2], methodName: parts[1] || UNKNOWN_FUNCTION, arguments: [], lineNumber: +parts[3], column: parts[4] ? +parts[4] : null }; } var Recoil_stackTraceParser = stackTraceParser; var { useRef: useRef$1 } = bn; function useComponentName() { const nameRef = useRef$1(); if (true) { if (Recoil_gkx_1("recoil_infer_component_names")) { var _nameRef$current; if (nameRef.current === void 0) { const frames = Recoil_stackTraceParser(new Error().stack); for (const { methodName } of frames) { if (!methodName.match(/\buse[^\b]+$/)) { return nameRef.current = methodName; } } nameRef.current = null; } return (_nameRef$current = nameRef.current) !== null && _nameRef$current !== void 0 ? _nameRef$current : ""; } } return ""; } var Recoil_useComponentName = useComponentName; var { atomicUpdater: atomicUpdater$1 } = Recoil_AtomicUpdates$1; var { batchUpdates: batchUpdates$2 } = Recoil_Batching; var { DEFAULT_VALUE: DEFAULT_VALUE$3, getNode: getNode$4, nodes: nodes$1 } = Recoil_Node; var { useRecoilMutableSource: useRecoilMutableSource$1, useStoreRef: useStoreRef$1 } = Recoil_RecoilRoot_react; var { isRecoilValue: isRecoilValue$2 } = Recoil_RecoilValue$1; var { AbstractRecoilValue: AbstractRecoilValue$3, getRecoilValueAsLoadable: getRecoilValueAsLoadable$3, setRecoilValue: setRecoilValue$2, setRecoilValueLoadable: setRecoilValueLoadable$1, setUnvalidatedRecoilValue: setUnvalidatedRecoilValue$2, subscribeToRecoilValue: subscribeToRecoilValue$1 } = Recoil_RecoilValueInterface; var { updateRetainCount: updateRetainCount$2 } = Recoil_Retention; var { RetentionZone: RetentionZone$3 } = Recoil_RetentionZone; var { Snapshot: Snapshot$1, cloneSnapshot: cloneSnapshot$1 } = Recoil_Snapshot$1; var { setByAddingToSet: setByAddingToSet$2 } = Recoil_CopyOnWrite; var { isSSR: isSSR$2 } = Recoil_Environment; var { mutableSourceExists: mutableSourceExists$2, useMutableSource: useMutableSource$1 } = Recoil_mutableSource; var { useCallback: useCallback$1, useEffect: useEffect$1, useMemo: useMemo$1, useRef: useRef$2, useState: useState$1 } = bn; var SUSPENSE_TIMEOUT_MS = 12e4; function handleLoadable(loadable, recoilValue, storeRef) { if (loadable.state === "hasValue") { return loadable.contents; } else if (loadable.state === "loading") { const promise = new Promise((resolve) => { storeRef.current.getState().suspendedComponentResolvers.add(resolve); }); throw promise; } else if (loadable.state === "hasError") { throw loadable.contents; } else { const err = new Error(`Invalid value of loadable atom "${recoilValue.key}"`); throw err; } } function validateRecoilValue(recoilValue, hookName) { if (!isRecoilValue$2(recoilValue)) { throw new Error(`Invalid argument to ${hookName}: expected an atom or selector but got ${String(recoilValue)}`); } } function useRecoilInterface_DEPRECATED() { const storeRef = useStoreRef$1(); const [_5, forceUpdate] = useState$1([]); const recoilValuesUsed = useRef$2(/* @__PURE__ */ new Set()); recoilValuesUsed.current = /* @__PURE__ */ new Set(); const previousSubscriptions = useRef$2(/* @__PURE__ */ new Set()); const subscriptions = useRef$2(/* @__PURE__ */ new Map()); const unsubscribeFrom = useCallback$1((key2) => { const sub = subscriptions.current.get(key2); if (sub) { sub.release(); subscriptions.current.delete(key2); } }, [subscriptions]); const componentName = Recoil_useComponentName(); useEffect$1(() => { const store = storeRef.current; function updateState(_state, key2) { if (!subscriptions.current.has(key2)) { return; } forceUpdate([]); } Recoil_differenceSets(recoilValuesUsed.current, previousSubscriptions.current).forEach((key2) => { if (subscriptions.current.has(key2)) { Recoil_expectationViolation(`Double subscription to RecoilValue "${key2}"`); return; } const sub = subscribeToRecoilValue$1(store, new AbstractRecoilValue$3(key2), (state2) => { updateState(state2, key2); }, componentName); subscriptions.current.set(key2, sub); const state = store.getState(); if (state.nextTree) { store.getState().queuedComponentCallbacks_DEPRECATED.push(() => { updateState(store.getState(), key2); }); } else { updateState(store.getState(), key2); } }); Recoil_differenceSets(previousSubscriptions.current, recoilValuesUsed.current).forEach((key2) => { unsubscribeFrom(key2); }); previousSubscriptions.current = recoilValuesUsed.current; }); useEffect$1(() => { const subs = subscriptions.current; return () => subs.forEach((_6, key2) => unsubscribeFrom(key2)); }, [unsubscribeFrom]); return useMemo$1(() => { function useSetRecoilState2(recoilState) { if (true) { validateRecoilValue(recoilState, "useSetRecoilState"); } return (newValueOrUpdater) => { setRecoilValue$2(storeRef.current, recoilState, newValueOrUpdater); }; } function useResetRecoilState2(recoilState) { if (true) { validateRecoilValue(recoilState, "useResetRecoilState"); } return () => setRecoilValue$2(storeRef.current, recoilState, DEFAULT_VALUE$3); } function useRecoilValueLoadable2(recoilValue) { var _storeState$nextTree; if (true) { validateRecoilValue(recoilValue, "useRecoilValueLoadable"); } if (!recoilValuesUsed.current.has(recoilValue.key)) { recoilValuesUsed.current = setByAddingToSet$2(recoilValuesUsed.current, recoilValue.key); } const storeState = storeRef.current.getState(); return getRecoilValueAsLoadable$3(storeRef.current, recoilValue, Recoil_gkx_1("recoil_early_rendering_2021") ? (_storeState$nextTree = storeState.nextTree) !== null && _storeState$nextTree !== void 0 ? _storeState$nextTree : storeState.currentTree : storeState.currentTree); } function useRecoilValue2(recoilValue) { if (true) { validateRecoilValue(recoilValue, "useRecoilValue"); } const loadable = useRecoilValueLoadable2(recoilValue); return handleLoadable(loadable, recoilValue, storeRef); } function useRecoilState2(recoilState) { if (true) { validateRecoilValue(recoilState, "useRecoilState"); } return [useRecoilValue2(recoilState), useSetRecoilState2(recoilState)]; } function useRecoilStateLoadable2(recoilState) { if (true) { validateRecoilValue(recoilState, "useRecoilStateLoadable"); } return [useRecoilValueLoadable2(recoilState), useSetRecoilState2(recoilState)]; } return { getRecoilValue: useRecoilValue2, getRecoilValueLoadable: useRecoilValueLoadable2, getRecoilState: useRecoilState2, getRecoilStateLoadable: useRecoilStateLoadable2, getSetRecoilState: useSetRecoilState2, getResetRecoilState: useResetRecoilState2 }; }, [recoilValuesUsed, storeRef]); } var recoilComponentGetRecoilValueCount_FOR_TESTING = { current: 0 }; function useRecoilValueLoadable_MUTABLESOURCE(recoilValue) { if (true) { validateRecoilValue(recoilValue, "useRecoilValueLoadable"); } const storeRef = useStoreRef$1(); const getLoadable = useCallback$1(() => { var _storeState$nextTree2; const store = storeRef.current; const storeState = store.getState(); const treeState = Recoil_gkx_1("recoil_early_rendering_2021") ? (_storeState$nextTree2 = storeState.nextTree) !== null && _storeState$nextTree2 !== void 0 ? _storeState$nextTree2 : storeState.currentTree : storeState.currentTree; return getRecoilValueAsLoadable$3(store, recoilValue, treeState); }, [storeRef, recoilValue]); const getLoadableWithTesting = useCallback$1(() => { if (true) { recoilComponentGetRecoilValueCount_FOR_TESTING.current++; } return getLoadable(); }, [getLoadable]); const componentName = Recoil_useComponentName(); const subscribe = useCallback$1((_storeState, callback) => { const store = storeRef.current; const subscription = subscribeToRecoilValue$1(store, recoilValue, () => { if (!Recoil_gkx_1("recoil_suppress_rerender_in_callback")) { return callback(); } const newLoadable = getLoadable(); if (!prevLoadableRef.current.is(newLoadable)) { callback(); } prevLoadableRef.current = newLoadable; }, componentName); return subscription.release; }, [storeRef, recoilValue, componentName, getLoadable]); const source = useRecoilMutableSource$1(); const loadable = useMutableSource$1(source, getLoadableWithTesting, subscribe); const prevLoadableRef = useRef$2(loadable); useEffect$1(() => { prevLoadableRef.current = loadable; }); return loadable; } function useRecoilValueLoadable_LEGACY(recoilValue) { if (true) { validateRecoilValue(recoilValue, "useRecoilValueLoadable"); } const storeRef = useStoreRef$1(); const [_5, forceUpdate] = useState$1([]); const componentName = Recoil_useComponentName(); useEffect$1(() => { const store = storeRef.current; const storeState = store.getState(); const subscription = subscribeToRecoilValue$1(store, recoilValue, (_state) => { var _prevLoadableRef$curr; if (!Recoil_gkx_1("recoil_suppress_rerender_in_callback")) { return forceUpdate([]); } const newLoadable = getRecoilValueAsLoadable$3(store, recoilValue, store.getState().currentTree); if (!((_prevLoadableRef$curr = prevLoadableRef.current) === null || _prevLoadableRef$curr === void 0 ? void 0 : _prevLoadableRef$curr.is(newLoadable))) { forceUpdate(newLoadable); } prevLoadableRef.current = newLoadable; }, componentName); if (storeState.nextTree) { store.getState().queuedComponentCallbacks_DEPRECATED.push(() => { prevLoadableRef.current = null; forceUpdate([]); }); } else { var _prevLoadableRef$curr2; if (!Recoil_gkx_1("recoil_suppress_rerender_in_callback")) { return forceUpdate([]); } const newLoadable = getRecoilValueAsLoadable$3(store, recoilValue, store.getState().currentTree); if (!((_prevLoadableRef$curr2 = prevLoadableRef.current) === null || _prevLoadableRef$curr2 === void 0 ? void 0 : _prevLoadableRef$curr2.is(newLoadable))) { forceUpdate(newLoadable); } prevLoadableRef.current = newLoadable; } return subscription.release; }, [componentName, recoilValue, storeRef]); const loadable = getRecoilValueAsLoadable$3(storeRef.current, recoilValue); const prevLoadableRef = useRef$2(loadable); useEffect$1(() => { prevLoadableRef.current = loadable; }); return loadable; } function useRecoilValueLoadable(recoilValue) { if (Recoil_gkx_1("recoil_memory_managament_2020")) { useRetain(recoilValue); } if (mutableSourceExists$2()) { return useRecoilValueLoadable_MUTABLESOURCE(recoilValue); } else { return useRecoilValueLoadable_LEGACY(recoilValue); } } function useRecoilValue(recoilValue) { if (true) { validateRecoilValue(recoilValue, "useRecoilValue"); } const storeRef = useStoreRef$1(); const loadable = useRecoilValueLoadable(recoilValue); return handleLoadable(loadable, recoilValue, storeRef); } function useSetRecoilState(recoilState) { if (true) { validateRecoilValue(recoilState, "useSetRecoilState"); } const storeRef = useStoreRef$1(); return useCallback$1((newValueOrUpdater) => { setRecoilValue$2(storeRef.current, recoilState, newValueOrUpdater); }, [storeRef, recoilState]); } function useResetRecoilState(recoilState) { if (true) { validateRecoilValue(recoilState, "useResetRecoilState"); } const storeRef = useStoreRef$1(); return useCallback$1(() => { setRecoilValue$2(storeRef.current, recoilState, DEFAULT_VALUE$3); }, [storeRef, recoilState]); } function useRecoilState(recoilState) { if (true) { validateRecoilValue(recoilState, "useRecoilState"); } return [useRecoilValue(recoilState), useSetRecoilState(recoilState)]; } function useRecoilStateLoadable(recoilState) { if (true) { validateRecoilValue(recoilState, "useRecoilStateLoadable"); } return [useRecoilValueLoadable(recoilState), useSetRecoilState(recoilState)]; } function useTransactionSubscription(callback) { const storeRef = useStoreRef$1(); useEffect$1(() => { const sub = storeRef.current.subscribeToTransactions(callback); return sub.release; }, [callback, storeRef]); } function externallyVisibleAtomValuesInState(state) { const atomValues = state.atomValues.toMap(); const persistedAtomContentsValues = Recoil_mapMap(Recoil_filterMap(atomValues, (v3, k5) => { const node = getNode$4(k5); const persistence = node.persistence_UNSTABLE; return persistence != null && persistence.type !== "none" && v3.state === "hasValue"; }), (v3) => v3.contents); return Recoil_mergeMaps(state.nonvalidatedAtoms.toMap(), persistedAtomContentsValues); } function useTransactionObservation_DEPRECATED(callback) { useTransactionSubscription(useCallback$1((store) => { let previousTree = store.getState().previousTree; const currentTree = store.getState().currentTree; if (!previousTree) { Recoil_recoverableViolation("Transaction subscribers notified without a previous tree being present -- this is a bug in Recoil"); previousTree = store.getState().currentTree; } const atomValues = externallyVisibleAtomValuesInState(currentTree); const previousAtomValues = externallyVisibleAtomValuesInState(previousTree); const atomInfo = Recoil_mapMap(nodes$1, (node) => { var _node$persistence_UNS, _node$persistence_UNS2, _node$persistence_UNS3, _node$persistence_UNS4; return { persistence_UNSTABLE: { type: (_node$persistence_UNS = (_node$persistence_UNS2 = node.persistence_UNSTABLE) === null || _node$persistence_UNS2 === void 0 ? void 0 : _node$persistence_UNS2.type) !== null && _node$persistence_UNS !== void 0 ? _node$persistence_UNS : "none", backButton: (_node$persistence_UNS3 = (_node$persistence_UNS4 = node.persistence_UNSTABLE) === null || _node$persistence_UNS4 === void 0 ? void 0 : _node$persistence_UNS4.backButton) !== null && _node$persistence_UNS3 !== void 0 ? _node$persistence_UNS3 : false } }; }); const modifiedAtoms = Recoil_filterSet(currentTree.dirtyAtoms, (k5) => atomValues.has(k5) || previousAtomValues.has(k5)); callback({ atomValues, previousAtomValues, atomInfo, modifiedAtoms, transactionMetadata: { ...currentTree.transactionMetadata } }); }, [callback])); } function useRecoilTransactionObserver(callback) { useTransactionSubscription(useCallback$1((store) => { const snapshot = cloneSnapshot$1(store, "current"); const previousSnapshot = cloneSnapshot$1(store, "previous"); callback({ snapshot, previousSnapshot }); }, [callback])); } function usePrevious2(value) { const ref = useRef$2(); useEffect$1(() => { ref.current = value; }); return ref.current; } function useRecoilSnapshot() { const storeRef = useStoreRef$1(); const [snapshot, setSnapshot] = useState$1(() => cloneSnapshot$1(storeRef.current)); const previousSnapshot = usePrevious2(snapshot); const timeoutID = useRef$2(); useEffect$1(() => { if (timeoutID.current && !isSSR$2) { window.clearTimeout(timeoutID.current); } return snapshot.retain(); }, [snapshot]); useTransactionSubscription(useCallback$1((store) => setSnapshot(cloneSnapshot$1(store)), [])); if (previousSnapshot !== snapshot && !isSSR$2) { if (timeoutID.current) { previousSnapshot === null || previousSnapshot === void 0 ? void 0 : previousSnapshot.release_INTERNAL(); window.clearTimeout(timeoutID.current); } snapshot.retain(); timeoutID.current = window.setTimeout(() => { snapshot.release_INTERNAL(); timeoutID.current = null; }, SUSPENSE_TIMEOUT_MS); } return snapshot; } function useGotoRecoilSnapshot() { const storeRef = useStoreRef$1(); return useCallback$1((snapshot) => { var _storeState$nextTree3; const storeState = storeRef.current.getState(); const prev = (_storeState$nextTree3 = storeState.nextTree) !== null && _storeState$nextTree3 !== void 0 ? _storeState$nextTree3 : storeState.currentTree; const next = snapshot.getStore_INTERNAL().getState().currentTree; batchUpdates$2(() => { const keysToUpdate = /* @__PURE__ */ new Set(); for (const keys of [prev.atomValues.keys(), next.atomValues.keys()]) { for (const key2 of keys) { var _prev$atomValues$get, _next$atomValues$get; if (((_prev$atomValues$get = prev.atomValues.get(key2)) === null || _prev$atomValues$get === void 0 ? void 0 : _prev$atomValues$get.contents) !== ((_next$atomValues$get = next.atomValues.get(key2)) === null || _next$atomValues$get === void 0 ? void 0 : _next$atomValues$get.contents) && getNode$4(key2).shouldRestoreFromSnapshots) { keysToUpdate.add(key2); } } } keysToUpdate.forEach((key2) => { setRecoilValueLoadable$1(storeRef.current, new AbstractRecoilValue$3(key2), next.atomValues.has(key2) ? Recoil_nullthrows(next.atomValues.get(key2)) : DEFAULT_VALUE$3); }); storeRef.current.replaceState((state) => { return { ...state, stateID: snapshot.getID_INTERNAL() }; }); }); }, [storeRef]); } function useSetUnvalidatedAtomValues() { const storeRef = useStoreRef$1(); return (values, transactionMetadata = {}) => { batchUpdates$2(() => { storeRef.current.addTransactionMetadata(transactionMetadata); values.forEach((value, key2) => setUnvalidatedRecoilValue$2(storeRef.current, new AbstractRecoilValue$3(key2), value)); }); }; } var Sentinel = class { }; var SENTINEL = new Sentinel(); function useRecoilCallback(fn2, deps) { const storeRef = useStoreRef$1(); const gotoSnapshot = useGotoRecoilSnapshot(); return useCallback$1( (...args) => { function set(recoilState, newValueOrUpdater) { setRecoilValue$2(storeRef.current, recoilState, newValueOrUpdater); } function reset(recoilState) { setRecoilValue$2(storeRef.current, recoilState, DEFAULT_VALUE$3); } const snapshot = cloneSnapshot$1(storeRef.current); const atomicUpdate = atomicUpdater$1(storeRef.current); let ret = SENTINEL; batchUpdates$2(() => { const errMsg = "useRecoilCallback expects a function that returns a function: it accepts a function of the type (RecoilInterface) => T = R and returns a callback function T => R, where RecoilInterface is an object {snapshot, set, ...} and T and R are the argument and return types of the callback you want to create. Please see the docs at recoiljs.org for details."; if (typeof fn2 !== "function") { throw new Error(errMsg); } const cb = fn2({ set, reset, snapshot, gotoSnapshot, transact_UNSTABLE: atomicUpdate }); if (typeof cb !== "function") { throw new Error(errMsg); } ret = cb(...args); }); !!(ret instanceof Sentinel) ? true ? Recoil_invariant(false, "batchUpdates should return immediately") : Recoil_invariant(false) : void 0; return ret; }, deps != null ? [...deps, storeRef] : void 0 ); } function useRetain(toRetain) { if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return; } return useRetain_ACTUAL(toRetain); } function useRetain_ACTUAL(toRetain) { const array = Array.isArray(toRetain) ? toRetain : [toRetain]; const retainables = array.map((a5) => a5 instanceof RetentionZone$3 ? a5 : a5.key); const storeRef = useStoreRef$1(); useEffect$1(() => { if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return; } const store = storeRef.current; if (timeoutID.current && !isSSR$2) { window.clearTimeout(timeoutID.current); timeoutID.current = null; } else { for (const r3 of retainables) { updateRetainCount$2(store, r3, 1); } } return () => { for (const r3 of retainables) { updateRetainCount$2(store, r3, -1); } }; }, [storeRef, ...retainables]); const timeoutID = useRef$2(); const previousRetainables = usePrevious2(retainables); if (!isSSR$2 && (previousRetainables === void 0 || !Recoil_shallowArrayEqual(previousRetainables, retainables))) { const store = storeRef.current; for (const r3 of retainables) { updateRetainCount$2(store, r3, 1); } if (previousRetainables) { for (const r3 of previousRetainables) { updateRetainCount$2(store, r3, -1); } } if (timeoutID.current) { window.clearTimeout(timeoutID.current); } timeoutID.current = window.setTimeout(() => { timeoutID.current = null; for (const r3 of retainables) { updateRetainCount$2(store, r3, -1); } }, SUSPENSE_TIMEOUT_MS); } } function useRecoilTransaction(fn2, deps) { const storeRef = useStoreRef$1(); return useMemo$1( () => (...args) => { const atomicUpdate = atomicUpdater$1(storeRef.current); atomicUpdate((transactionInterface) => { fn2(transactionInterface)(...args); }); }, deps != null ? [...deps, storeRef] : void 0 ); } var Recoil_Hooks = { recoilComponentGetRecoilValueCount_FOR_TESTING, useGotoRecoilSnapshot, useRecoilCallback, useRecoilInterface: useRecoilInterface_DEPRECATED, useRecoilSnapshot, useRecoilState, useRecoilStateLoadable, useRecoilTransaction, useRecoilTransactionObserver, useRecoilValue, useRecoilValueLoadable, useRetain, useResetRecoilState, useSetRecoilState, useSetUnvalidatedAtomValues, useTransactionObservation_DEPRECATED, useTransactionSubscription_DEPRECATED: useTransactionSubscription }; var { peekNodeInfo: peekNodeInfo$2 } = Recoil_FunctionalCore; var { useStoreRef: useStoreRef$2 } = Recoil_RecoilRoot_react; function useGetRecoilValueInfo() { const storeRef = useStoreRef$2(); return ({ key: key2 }) => peekNodeInfo$2(storeRef.current, storeRef.current.getState().currentTree, key2); } var Recoil_useGetRecoilValueInfo = useGetRecoilValueInfo; var { RecoilRoot: RecoilRoot$1, useStoreRef: useStoreRef$3 } = Recoil_RecoilRoot_react; var { useMemo: useMemo$2 } = bn; function useRecoilBridgeAcrossReactRoots() { const store = useStoreRef$3().current; return useMemo$2(() => { function RecoilBridge({ children }) { return /* @__PURE__ */ bn.createElement(RecoilRoot$1, { store_INTERNAL: store }, children); } return RecoilBridge; }, [store]); } var Recoil_useRecoilBridgeAcrossReactRoots = useRecoilBridgeAcrossReactRoots; function isNode2(object) { var _ownerDocument, _doc$defaultView; if (typeof window === "undefined") { return false; } const doc = object != null ? (_ownerDocument = object.ownerDocument) !== null && _ownerDocument !== void 0 ? _ownerDocument : object : document; const defaultView = (_doc$defaultView = doc.defaultView) !== null && _doc$defaultView !== void 0 ? _doc$defaultView : window; return !!(object != null && (typeof defaultView.Node === "function" ? object instanceof defaultView.Node : typeof object === "object" && typeof object.nodeType === "number" && typeof object.nodeName === "string")); } var Recoil_isNode = isNode2; var { isReactNative: isReactNative$1, isSSR: isSSR$3 } = Recoil_Environment; function shouldNotBeFrozen(value) { if (value === null || typeof value !== "object") { return true; } switch (typeof value.$$typeof) { case "symbol": return true; case "number": return true; } if (value["@@__IMMUTABLE_ITERABLE__@@"] != null || value["@@__IMMUTABLE_KEYED__@@"] != null || value["@@__IMMUTABLE_INDEXED__@@"] != null || value["@@__IMMUTABLE_ORDERED__@@"] != null || value["@@__IMMUTABLE_RECORD__@@"] != null) { return true; } if (Recoil_isNode(value)) { return true; } if (Recoil_isPromise(value)) { return true; } if (value instanceof Error) { return true; } if (ArrayBuffer.isView(value)) { return true; } if (!isSSR$3 && !isReactNative$1 && (value === window || value instanceof Window)) { return true; } return false; } function deepFreezeValue(value) { if (typeof value !== "object" || shouldNotBeFrozen(value)) { return; } Object.freeze(value); for (const key2 in value) { if (Object.prototype.hasOwnProperty.call(value, key2)) { const prop = value[key2]; if (typeof prop === "object" && prop != null && !Object.isFrozen(prop)) { deepFreezeValue(prop); } } } Object.seal(value); } var Recoil_deepFreezeValue = deepFreezeValue; var TIME_WARNING_THRESHOLD_MS = 15; function stringify(x5, opt, key2) { if (typeof x5 === "string" && !x5.includes('"') && !x5.includes("\\")) { return `"${x5}"`; } switch (typeof x5) { case "undefined": return ""; case "boolean": return x5 ? "true" : "false"; case "number": case "symbol": return String(x5); case "string": return JSON.stringify(x5); case "function": if ((opt === null || opt === void 0 ? void 0 : opt.allowFunctions) !== true) { throw new Error("Attempt to serialize function in a Recoil cache key"); } return `__FUNCTION(${x5.name})__`; } if (x5 === null) { return "null"; } if (typeof x5 !== "object") { var _JSON$stringify; return (_JSON$stringify = JSON.stringify(x5)) !== null && _JSON$stringify !== void 0 ? _JSON$stringify : ""; } if (Recoil_isPromise(x5)) { return "__PROMISE__"; } if (Array.isArray(x5)) { return `[${x5.map((v3, i4) => stringify(v3, opt, i4.toString()))}]`; } if (typeof x5.toJSON === "function") { return stringify(x5.toJSON(key2), opt, key2); } if (x5 instanceof Map) { const obj = {}; for (const [k5, v3] of x5) { obj[typeof k5 === "string" ? k5 : stringify(k5, opt)] = v3; } return stringify(obj, opt, key2); } if (x5 instanceof Set) { return stringify(Array.from(x5).sort((a5, b4) => stringify(a5, opt).localeCompare(stringify(b4, opt))), opt, key2); } if (Symbol !== void 0 && x5[Symbol.iterator] != null && typeof x5[Symbol.iterator] === "function") { return stringify(Array.from(x5), opt, key2); } return `{${Object.keys(x5).filter((key3) => x5[key3] !== void 0).sort().map((key3) => `${stringify(key3, opt)}:${stringify(x5[key3], opt, key3)}`).join(",")}}`; } function stableStringify(x5, opt = { allowFunctions: false }) { if (true) { if (typeof window !== "undefined") { const startTime = window.performance ? window.performance.now() : 0; const str = stringify(x5, opt); const endTime = window.performance ? window.performance.now() : 0; if (endTime - startTime > TIME_WARNING_THRESHOLD_MS) { console.groupCollapsed(`Recoil: Spent ${endTime - startTime}ms computing a cache key`); console.warn(x5, str); console.groupEnd(); } return str; } } return stringify(x5, opt); } var Recoil_stableStringify = stableStringify; var TreeCache = class { constructor(options) { var _options$onHit, _options$onSet, _options$mapNodeValue; _defineProperty(this, "_numLeafs", void 0); _defineProperty(this, "_root", void 0); _defineProperty(this, "_onHit", void 0); _defineProperty(this, "_onSet", void 0); _defineProperty(this, "_mapNodeValue", void 0); this._numLeafs = 0; this._root = null; this._onHit = (_options$onHit = options === null || options === void 0 ? void 0 : options.onHit) !== null && _options$onHit !== void 0 ? _options$onHit : () => { }; this._onSet = (_options$onSet = options === null || options === void 0 ? void 0 : options.onSet) !== null && _options$onSet !== void 0 ? _options$onSet : () => { }; this._mapNodeValue = (_options$mapNodeValue = options === null || options === void 0 ? void 0 : options.mapNodeValue) !== null && _options$mapNodeValue !== void 0 ? _options$mapNodeValue : (val) => val; } size() { return this._numLeafs; } root() { return this._root; } get(getNodeValue, handlers) { var _this$getLeafNode; return (_this$getLeafNode = this.getLeafNode(getNodeValue, handlers)) === null || _this$getLeafNode === void 0 ? void 0 : _this$getLeafNode.value; } getLeafNode(getNodeValue, handlers) { return findLeaf(this.root(), (nodeKey) => this._mapNodeValue(getNodeValue(nodeKey)), { onNodeVisit: (node) => { handlers === null || handlers === void 0 ? void 0 : handlers.onNodeVisit(node); if (node.type === "leaf") { this._onHit(node); } } }); } set(route, value, handlers) { let leafNode; const newRoot = addLeaf(this.root(), route.map(([nodeKey, nodeValue]) => [nodeKey, this._mapNodeValue(nodeValue)]), null, value, null, { onNodeVisit: (node) => { handlers === null || handlers === void 0 ? void 0 : handlers.onNodeVisit(node); if (node.type === "leaf") { leafNode = node; } } }); if (!this.root()) { this._root = newRoot; } this._numLeafs++; this._onSet(Recoil_nullthrows(leafNode)); } delete(node) { if (!this.root()) { return false; } const root = Recoil_nullthrows(this.root()); const existsInTree = pruneNodeFromTree(root, node, node.parent); if (!existsInTree) { return false; } if (node === root || root.type === "branch" && !root.branches.size) { this._root = null; this._numLeafs = 0; return true; } this._numLeafs -= countDownstreamLeaves(node); return true; } clear() { this._numLeafs = 0; this._root = null; } }; var findLeaf = (root, getNodeValue, handlers) => { var _handlers$onNodeVisit; if (root == null) { return void 0; } handlers === null || handlers === void 0 ? void 0 : (_handlers$onNodeVisit = handlers.onNodeVisit) === null || _handlers$onNodeVisit === void 0 ? void 0 : _handlers$onNodeVisit.call(handlers, root); if (root.type === "leaf") { return root; } const nodeValue = getNodeValue(root.nodeKey); return findLeaf(root.branches.get(nodeValue), getNodeValue, handlers); }; var addLeaf = (root, route, parent, value, branchKey, handlers) => { var _handlers$onNodeVisit2; let node; if (root == null) { if (route.length === 0) { node = { type: "leaf", value, parent, branchKey }; } else { const [path, ...rest] = route; const [nodeKey, nodeValue] = path; node = { type: "branch", nodeKey, parent, branches: /* @__PURE__ */ new Map(), branchKey }; node.branches.set(nodeValue, addLeaf(null, rest, node, value, nodeValue, handlers)); } } else { node = root; if (route.length) { const [path, ...rest] = route; const [nodeKey, nodeValue] = path; !(root.type === "branch" && root.nodeKey === nodeKey) ? true ? Recoil_invariant(false, "Existing cache must have a branch midway through the route with matching node key") : Recoil_invariant(false) : void 0; root.branches.set(nodeValue, addLeaf(root.branches.get(nodeValue), rest, root, value, nodeValue, handlers)); } } handlers === null || handlers === void 0 ? void 0 : (_handlers$onNodeVisit2 = handlers.onNodeVisit) === null || _handlers$onNodeVisit2 === void 0 ? void 0 : _handlers$onNodeVisit2.call(handlers, node); return node; }; var pruneNodeFromTree = (root, node, parent) => { if (!parent) { return root === node; } parent.branches.delete(node.branchKey); return pruneUpstreamBranches(root, parent, parent.parent); }; var pruneUpstreamBranches = (root, branchNode, parent) => { if (!parent) { return root === branchNode; } if (branchNode.branches.size === 0) { parent.branches.delete(branchNode.branchKey); } return pruneUpstreamBranches(root, parent, parent.parent); }; var countDownstreamLeaves = (node) => node.type === "leaf" ? 1 : Array.from(node.branches.values()).reduce((sum2, currNode) => sum2 + countDownstreamLeaves(currNode), 0); var Recoil_TreeCache = { TreeCache }; var Recoil_TreeCache_1 = Recoil_TreeCache.TreeCache; var Recoil_TreeCache$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, TreeCache: Recoil_TreeCache_1 }); var LRUCache = class { constructor(options) { var _options$mapKey; _defineProperty(this, "_maxSize", void 0); _defineProperty(this, "_size", void 0); _defineProperty(this, "_head", void 0); _defineProperty(this, "_tail", void 0); _defineProperty(this, "_map", void 0); _defineProperty(this, "_keyMapper", void 0); this._maxSize = options.maxSize; this._size = 0; this._head = null; this._tail = null; this._map = /* @__PURE__ */ new Map(); this._keyMapper = (_options$mapKey = options.mapKey) !== null && _options$mapKey !== void 0 ? _options$mapKey : (v3) => v3; } head() { return this._head; } tail() { return this._tail; } size() { return this._size; } maxSize() { return this._maxSize; } has(key2) { return this._map.has(this._keyMapper(key2)); } get(key2) { const mappedKey = this._keyMapper(key2); const node = this._map.get(mappedKey); if (!node) { return void 0; } this.set(key2, node.value); return node.value; } set(key2, val) { const mappedKey = this._keyMapper(key2); const existingNode = this._map.get(mappedKey); if (existingNode) { this.delete(key2); } const head = this.head(); const node = { key: key2, right: head, left: null, value: val }; if (head) { head.left = node; } else { this._tail = node; } this._map.set(mappedKey, node); this._head = node; this._size++; this._maybeDeleteLRU(); } _maybeDeleteLRU() { if (this.size() > this.maxSize()) { this.deleteLru(); } } deleteLru() { const tail = this.tail(); if (tail) { this.delete(tail.key); } } delete(key2) { const mappedKey = this._keyMapper(key2); if (!this._size || !this._map.has(mappedKey)) { return; } const node = Recoil_nullthrows(this._map.get(mappedKey)); const right = node.right; const left = node.left; if (right) { right.left = node.left; } if (left) { left.right = node.right; } if (node === this.head()) { this._head = right; } if (node === this.tail()) { this._tail = left; } this._map.delete(mappedKey); this._size--; } clear() { this._size = 0; this._head = null; this._tail = null; this._map = /* @__PURE__ */ new Map(); } }; var Recoil_LRUCache = { LRUCache }; var Recoil_LRUCache_1 = Recoil_LRUCache.LRUCache; var Recoil_LRUCache$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, LRUCache: Recoil_LRUCache_1 }); var { LRUCache: LRUCache$1 } = Recoil_LRUCache$1; var { TreeCache: TreeCache$1 } = Recoil_TreeCache$1; function treeCacheLRU(maxSize, mapNodeValue = (v3) => v3) { const lruCache = new LRUCache$1({ maxSize }); const cache = new TreeCache$1({ mapNodeValue, onHit: (node) => { lruCache.set(node, true); }, onSet: (node) => { const lruNode = lruCache.tail(); lruCache.set(node, true); if (lruNode && cache.size() > maxSize) { cache.delete(lruNode.key); } } }); return cache; } var Recoil_treeCacheLRU = treeCacheLRU; var { TreeCache: TreeCache$2 } = Recoil_TreeCache$1; var defaultPolicy = { equality: "reference", eviction: "keep-all", maxSize: Infinity }; function treeCacheFromPolicy({ equality = defaultPolicy.equality, eviction = defaultPolicy.eviction, maxSize = defaultPolicy.maxSize } = defaultPolicy) { const valueMapper = getValueMapper(equality); const treeCache = getTreeCache(eviction, maxSize, valueMapper); return treeCache; } function getValueMapper(equality) { switch (equality) { case "reference": return (val) => val; case "value": return (val) => Recoil_stableStringify(val); } throw new Error(`Unrecognized equality policy ${equality}`); } function getTreeCache(eviction, maxSize, mapNodeValue) { switch (eviction) { case "keep-all": return new TreeCache$2({ mapNodeValue }); case "lru": return Recoil_treeCacheLRU(Recoil_nullthrows(maxSize), mapNodeValue); case "most-recent": return Recoil_treeCacheLRU(1, mapNodeValue); } throw new Error(`Unrecognized eviction policy ${eviction}`); } var Recoil_treeCacheFromPolicy = treeCacheFromPolicy; function startPerfBlock(_id) { return () => null; } var Recoil_PerformanceTimings = { startPerfBlock }; var { CANCELED: CANCELED$2, Canceled: Canceled$1, loadableWithError: loadableWithError$1, loadableWithPromise: loadableWithPromise$1, loadableWithValue: loadableWithValue$2 } = Recoil_Loadable; var { getNodeLoadable: getNodeLoadable$2, peekNodeLoadable: peekNodeLoadable$1, setNodeValue: setNodeValue$3 } = Recoil_FunctionalCore; var { saveDependencyMapToStore: saveDependencyMapToStore$1 } = Recoil_Graph; var { DEFAULT_VALUE: DEFAULT_VALUE$4, RecoilValueNotReady: RecoilValueNotReady$2, getConfigDeletionHandler: getConfigDeletionHandler$1, registerNode: registerNode$1 } = Recoil_Node; var { isRecoilValue: isRecoilValue$3 } = Recoil_RecoilValue$1; var { AbstractRecoilValue: AbstractRecoilValue$4 } = Recoil_RecoilValue$1; var { setRecoilValueLoadable: setRecoilValueLoadable$2 } = Recoil_RecoilValueInterface; var { retainedByOptionWithDefault: retainedByOptionWithDefault$1 } = Recoil_Retention; var { cloneSnapshot: cloneSnapshot$2 } = Recoil_Snapshot$1; var { startPerfBlock: startPerfBlock$1 } = Recoil_PerformanceTimings; var dependencyStack = []; var waitingStores = /* @__PURE__ */ new Map(); var getNewExecutionId = (() => { let executionId = 0; return () => executionId++; })(); function getInitialExecutionInfo() { return { depValuesDiscoveredSoFarDuringAsyncWork: null, latestLoadable: null, latestExecutionId: null, stateVersion: null }; } function selector(options) { const { key: key2, get, cachePolicy_UNSTABLE: cachePolicy } = options; const set = options.set != null ? options.set : void 0; const cache = Recoil_treeCacheFromPolicy(cachePolicy !== null && cachePolicy !== void 0 ? cachePolicy : { equality: "reference", eviction: "keep-all" }); const retainedBy = retainedByOptionWithDefault$1(options.retainedBy_UNSTABLE); const executionInfoMap = /* @__PURE__ */ new Map(); let liveStoresCount = 0; function selectorIsLive() { return !Recoil_gkx_1("recoil_memory_managament_2020") || liveStoresCount > 0; } function getExecutionInfo(store) { if (!executionInfoMap.has(store)) { executionInfoMap.set(store, getInitialExecutionInfo()); } return Recoil_nullthrows(executionInfoMap.get(store)); } function selectorInit(store) { liveStoresCount++; store.getState().knownSelectors.add(key2); return () => { liveStoresCount--; store.getState().knownSelectors.delete(key2); executionInfoMap.delete(store); }; } function selectorShouldDeleteConfigOnRelease() { return getConfigDeletionHandler$1(key2) !== void 0 && !selectorIsLive(); } function notifyStoreWhenAsyncSettles(store, loadable, executionId) { if (loadable.state === "loading") { let stores = waitingStores.get(executionId); if (stores == null) { waitingStores.set(executionId, stores = /* @__PURE__ */ new Set()); } stores.add(store); } } function notifyStoresOfSettledAsync(newLoadable, executionId) { const stores = waitingStores.get(executionId); if (stores !== void 0) { for (const store of stores) { setRecoilValueLoadable$2(store, new AbstractRecoilValue$4(key2), newLoadable); } waitingStores.delete(executionId); } } function getCachedNodeLoadable(store, state, key3) { const isKeyPointingToSelector = store.getState().knownSelectors.has(key3); if (isKeyPointingToSelector && state.atomValues.has(key3)) { return Recoil_nullthrows(state.atomValues.get(key3)); } const loadable = getNodeLoadable$2(store, state, key3); if (loadable.state !== "loading" && isKeyPointingToSelector) { state.atomValues.set(key3, loadable); } return loadable; } function wrapPendingPromise(store, promise, state, depValues, executionId) { return promise.then((value) => { if (!selectorIsLive()) { clearExecutionInfo(store, executionId); return CANCELED$2; } const loadable = loadableWithValue$2(value); maybeFreezeValue(value); setCache(state, depValuesToDepRoute(depValues), loadable); setDepsInStore(store, state, new Set(depValues.keys()), executionId); setLoadableInStoreToNotifyDeps(store, loadable, executionId); return { __value: value, __key: key2 }; }).catch((errorOrPromise) => { if (!selectorIsLive()) { clearExecutionInfo(store, executionId); return CANCELED$2; } if (isLatestExecution(store, executionId)) { updateExecutionInfoDepValues(depValues, store, executionId); } if (Recoil_isPromise(errorOrPromise)) { return wrapPendingDependencyPromise(store, errorOrPromise, state, depValues, executionId); } const loadable = loadableWithError$1(errorOrPromise); maybeFreezeValue(errorOrPromise); setCache(state, depValuesToDepRoute(depValues), loadable); setDepsInStore(store, state, new Set(depValues.keys()), executionId); setLoadableInStoreToNotifyDeps(store, loadable, executionId); throw errorOrPromise; }); } function wrapPendingDependencyPromise(store, promise, state, existingDeps, executionId) { return promise.then((resolvedDep) => { if (!selectorIsLive()) { clearExecutionInfo(store, executionId); return CANCELED$2; } if (resolvedDep instanceof Canceled$1) { Recoil_recoverableViolation("Selector was released while it had dependencies"); return CANCELED$2; } const { __key: resolvedDepKey, __value: depValue } = resolvedDep !== null && resolvedDep !== void 0 ? resolvedDep : {}; let bypassSelectorDepCacheOnReevaluation = true; if (resolvedDepKey != null) { state.atomValues.set(resolvedDepKey, loadableWithValue$2(depValue)); bypassSelectorDepCacheOnReevaluation = false; } const cachedLoadable = getValFromCacheAndUpdatedDownstreamDeps(store, state); if (cachedLoadable && cachedLoadable.state === "hasValue") { setExecutionInfo(cachedLoadable, store); return { __value: cachedLoadable.contents, __key: key2 }; } if (!isLatestExecution(store, executionId)) { var _executionInfo$latest; const executionInfo = getExecutionInfoOfInProgressExecution(state); if ((executionInfo === null || executionInfo === void 0 ? void 0 : (_executionInfo$latest = executionInfo.latestLoadable) === null || _executionInfo$latest === void 0 ? void 0 : _executionInfo$latest.state) === "loading") { return executionInfo.latestLoadable.contents; } } const [loadable, depValues] = evaluateSelectorGetter(store, state, executionId, bypassSelectorDepCacheOnReevaluation); if (isLatestExecution(store, executionId)) { updateExecutionInfoDepValues(depValues, store, executionId); } maybeFreezeLoadableContents(loadable); if (loadable.state !== "loading") { setCache(state, depValuesToDepRoute(depValues), loadable); setDepsInStore(store, state, new Set(depValues.keys()), executionId); setLoadableInStoreToNotifyDeps(store, loadable, executionId); } if (loadable.state === "hasError") { throw loadable.contents; } if (loadable.state === "hasValue") { return { __value: loadable.contents, __key: key2 }; } return loadable.contents; }).catch((error) => { if (!selectorIsLive()) { clearExecutionInfo(store, executionId); return CANCELED$2; } const loadable = loadableWithError$1(error); maybeFreezeValue(error); setCache(state, depValuesToDepRoute(existingDeps), loadableWithError$1(error)); setDepsInStore(store, state, new Set(existingDeps.keys()), executionId); setLoadableInStoreToNotifyDeps(store, loadable, executionId); throw error; }); } function setLoadableInStoreToNotifyDeps(store, loadable, executionId) { if (isLatestExecution(store, executionId)) { setExecutionInfo(loadable, store); notifyStoresOfSettledAsync(loadable, executionId); } } function setDepsInStore(store, state, deps, executionId) { var _store$getState, _store$getState$curre, _store$getState2, _store$getState2$next; if (isLatestExecution(store, executionId) || state.version === ((_store$getState = store.getState()) === null || _store$getState === void 0 ? void 0 : (_store$getState$curre = _store$getState.currentTree) === null || _store$getState$curre === void 0 ? void 0 : _store$getState$curre.version) || state.version === ((_store$getState2 = store.getState()) === null || _store$getState2 === void 0 ? void 0 : (_store$getState2$next = _store$getState2.nextTree) === null || _store$getState2$next === void 0 ? void 0 : _store$getState2$next.version)) { var _store$getState$nextT, _store$getState3, _store$getState3$next; saveDependencyMapToStore$1(/* @__PURE__ */ new Map([[key2, deps]]), store, (_store$getState$nextT = (_store$getState3 = store.getState()) === null || _store$getState3 === void 0 ? void 0 : (_store$getState3$next = _store$getState3.nextTree) === null || _store$getState3$next === void 0 ? void 0 : _store$getState3$next.version) !== null && _store$getState$nextT !== void 0 ? _store$getState$nextT : store.getState().currentTree.version); } } function setNewDepInStore(store, state, deps, newDepKey, executionId) { deps.add(newDepKey); setDepsInStore(store, state, deps, executionId); } function evaluateSelectorGetter(store, state, executionId, bypassSelectorDepCache = false) { const endPerfBlock = startPerfBlock$1(key2); let result; let resultIsError = false; let loadable; const depValues = /* @__PURE__ */ new Map(); const deps = /* @__PURE__ */ new Set(); setDepsInStore(store, state, deps, executionId); function getRecoilValue(recoilValue) { const { key: depKey } = recoilValue; setNewDepInStore(store, state, deps, depKey, executionId); const depLoadable = bypassSelectorDepCache ? getNodeLoadable$2(store, state, depKey) : getCachedNodeLoadable(store, state, depKey); maybeFreezeLoadableContents(depLoadable); depValues.set(depKey, depLoadable); if (depLoadable.state === "hasValue") { return depLoadable.contents; } throw depLoadable.contents; } let gateCallback = false; const getCallback = (fn2) => { return (...args) => { if (!gateCallback) { throw new Error("getCallback() should only be called asynchronously after the selector is evalutated. It can be used for selectors to return objects with callbacks that can obtain the current Recoil state without a subscription."); } const snapshot = cloneSnapshot$2(store); const cb = fn2({ snapshot }); if (typeof cb !== "function") { throw new Error("getCallback() expects a function that returns a function."); } return cb(...args); }; }; try { result = get({ get: getRecoilValue, getCallback }); result = isRecoilValue$3(result) ? getRecoilValue(result) : result; gateCallback = true; if (Recoil_isPromise(result)) { result = wrapPendingPromise(store, result, state, depValues, executionId).finally(endPerfBlock); } else { endPerfBlock(); } } catch (errorOrDepPromise) { result = errorOrDepPromise; if (Recoil_isPromise(result)) { result = wrapPendingDependencyPromise(store, result, state, depValues, executionId).finally(endPerfBlock); } else { resultIsError = true; endPerfBlock(); } } if (resultIsError) { loadable = loadableWithError$1(result); } else if (Recoil_isPromise(result)) { loadable = loadableWithPromise$1(result); } else { loadable = loadableWithValue$2(result); } maybeFreezeLoadableContents(loadable); return [loadable, depValues]; } function getValFromCacheAndUpdatedDownstreamDeps(store, state) { const depsAfterCacheDone = /* @__PURE__ */ new Set(); const executionInfo = getExecutionInfo(store); const cachedVal = cache.get((nodeKey) => { !(typeof nodeKey === "string") ? true ? Recoil_invariant(false, "Cache nodeKey is type string") : Recoil_invariant(false) : void 0; const loadable = getCachedNodeLoadable(store, state, nodeKey); return loadable.contents; }, { onNodeVisit: (node) => { if (node.type === "branch" && node.nodeKey !== key2 && typeof node.nodeKey === "string") { depsAfterCacheDone.add(node.nodeKey); } } }); if (cachedVal) { setDepsInStore(store, state, depsAfterCacheDone, executionInfo.latestExecutionId); } return cachedVal; } function depValuesToDepRoute(depValues) { return Array.from(depValues.entries()).map(([key3, valLoadable]) => [key3, valLoadable.contents]); } function getValFromRunningNewExecutionAndUpdatedDeps(store, state) { const newExecutionId = getNewExecutionId(); const [loadable, newDepValues] = evaluateSelectorGetter(store, state, newExecutionId); setExecutionInfo(loadable, store, newDepValues, newExecutionId, state); maybeSetCacheWithLoadable(state, depValuesToDepRoute(newDepValues), loadable); notifyStoreWhenAsyncSettles(store, loadable, newExecutionId); return loadable; } function getSelectorValAndUpdatedDeps(store, state) { const cachedVal = getValFromCacheAndUpdatedDownstreamDeps(store, state); if (cachedVal != null) { setExecutionInfo(cachedVal, store); return cachedVal; } const inProgressExecutionInfo = getExecutionInfoOfInProgressExecution(state); if (inProgressExecutionInfo) { const executionInfo = inProgressExecutionInfo; notifyStoreWhenAsyncSettles(store, Recoil_nullthrows(executionInfo.latestLoadable), Recoil_nullthrows(executionInfo.latestExecutionId)); return Recoil_nullthrows(executionInfo.latestLoadable); } return getValFromRunningNewExecutionAndUpdatedDeps(store, state); } function getExecutionInfoOfInProgressExecution(state) { var _Array$from$find; const [, executionInfo] = (_Array$from$find = Array.from(executionInfoMap.entries()).find(([store, executionInfo2]) => { return executionInfo2.latestLoadable != null && executionInfo2.latestExecutionId != null && !haveAsyncDepsChanged(store, state); })) !== null && _Array$from$find !== void 0 ? _Array$from$find : []; return executionInfo; } const mapOfCheckedVersions = /* @__PURE__ */ new Map(); function haveAsyncDepsChanged(store, state) { var _executionInfo$depVal, _mapOfCheckedVersions; const executionInfo = getExecutionInfo(store); const oldDepValues = (_executionInfo$depVal = executionInfo.depValuesDiscoveredSoFarDuringAsyncWork) !== null && _executionInfo$depVal !== void 0 ? _executionInfo$depVal : /* @__PURE__ */ new Map(); const cachedDepValuesCheckedForThisVersion = Array(((_mapOfCheckedVersions = mapOfCheckedVersions.get(state.version)) !== null && _mapOfCheckedVersions !== void 0 ? _mapOfCheckedVersions : /* @__PURE__ */ new Map()).entries()); const isCachedVersionSame = mapOfCheckedVersions.has(state.version) && cachedDepValuesCheckedForThisVersion.length === oldDepValues.size && cachedDepValuesCheckedForThisVersion.every(([nodeKey, nodeVal]) => { return oldDepValues.get(nodeKey) === nodeVal; }); if (oldDepValues == null || state.version === executionInfo.stateVersion || isCachedVersionSame) { return false; } mapOfCheckedVersions.set(state.version, new Map(oldDepValues)); return Array.from(oldDepValues).some(([nodeKey, oldVal]) => { const loadable = getCachedNodeLoadable(store, state, nodeKey); return loadable.contents !== oldVal.contents; }); } function setExecutionInfo(loadable, store, depValues, newExecutionId, state) { const executionInfo = getExecutionInfo(store); if (loadable.state === "loading") { executionInfo.depValuesDiscoveredSoFarDuringAsyncWork = depValues; executionInfo.latestExecutionId = newExecutionId; executionInfo.latestLoadable = loadable; executionInfo.stateVersion = state === null || state === void 0 ? void 0 : state.version; } else { executionInfo.depValuesDiscoveredSoFarDuringAsyncWork = null; executionInfo.latestExecutionId = null; executionInfo.latestLoadable = null; executionInfo.stateVersion = null; } } function maybeSetCacheWithLoadable(state, depRoute, loadable) { if (loadable.state !== "loading") { setCache(state, depRoute, loadable); } } function updateExecutionInfoDepValues(depValues, store, executionId) { const executionInfo = getExecutionInfo(store); if (isLatestExecution(store, executionId)) { executionInfo.depValuesDiscoveredSoFarDuringAsyncWork = depValues; } } function clearExecutionInfo(store, executionId) { if (isLatestExecution(store, executionId)) { executionInfoMap.delete(store); } } function isLatestExecution(store, executionId) { const executionInfo = getExecutionInfo(store); return executionId === executionInfo.latestExecutionId; } function maybeFreezeLoadableContents(loadable) { if (loadable.state !== "loading") { maybeFreezeValue(loadable.contents); } } function maybeFreezeValue(val) { if (true) { if (Boolean(options.dangerouslyAllowMutability) === false) { Recoil_deepFreezeValue(val); } } } function setCache(state, cacheRoute, loadable) { state.atomValues.set(key2, loadable); cache.set(cacheRoute, loadable); } function detectCircularDependencies(fn2) { if (dependencyStack.includes(key2)) { const message = `Recoil selector has circular dependencies: ${dependencyStack.slice(dependencyStack.indexOf(key2)).join(" \u2192 ")}`; return loadableWithError$1(new Error(message)); } dependencyStack.push(key2); try { return fn2(); } finally { dependencyStack.pop(); } } function selectorPeek(store, state) { const cacheVal = cache.get((nodeKey) => { !(typeof nodeKey === "string") ? true ? Recoil_invariant(false, "Cache nodeKey is type string") : Recoil_invariant(false) : void 0; const peek = peekNodeLoadable$1(store, state, nodeKey); return peek === null || peek === void 0 ? void 0 : peek.contents; }); return cacheVal; } function selectorGet(store, state) { return detectCircularDependencies(() => getSelectorValAndUpdatedDeps(store, state)); } function invalidateSelector(state) { state.atomValues.delete(key2); } if (set != null) { const selectorSet = (store, state, newValue) => { let syncSelectorSetFinished = false; const writes = /* @__PURE__ */ new Map(); function getRecoilValue({ key: key3 }) { if (syncSelectorSetFinished) { throw new Error("Recoil: Async selector sets are not currently supported."); } const loadable = getCachedNodeLoadable(store, state, key3); maybeFreezeLoadableContents(loadable); if (loadable.state === "hasValue") { return loadable.contents; } else if (loadable.state === "loading") { throw new RecoilValueNotReady$2(key3); } else { throw loadable.contents; } } function setRecoilState(recoilState, valueOrUpdater) { if (syncSelectorSetFinished) { throw new Error("Recoil: Async selector sets are not currently supported."); } const newValue2 = typeof valueOrUpdater === "function" ? valueOrUpdater(getRecoilValue(recoilState)) : valueOrUpdater; const upstreamWrites = setNodeValue$3(store, state, recoilState.key, newValue2); upstreamWrites.forEach((v3, k5) => writes.set(k5, v3)); } function resetRecoilState(recoilState) { setRecoilState(recoilState, DEFAULT_VALUE$4); } const ret = set({ set: setRecoilState, get: getRecoilValue, reset: resetRecoilState }, newValue); if (ret !== void 0) { throw Recoil_isPromise(ret) ? new Error("Recoil: Async selector sets are not currently supported.") : new Error("Recoil: selector set should be a void function."); } syncSelectorSetFinished = true; return writes; }; return registerNode$1({ key: key2, nodeType: "selector", peek: selectorPeek, get: selectorGet, set: selectorSet, init: selectorInit, invalidate: invalidateSelector, shouldDeleteConfigOnRelease: selectorShouldDeleteConfigOnRelease, dangerouslyAllowMutability: options.dangerouslyAllowMutability, shouldRestoreFromSnapshots: false, retainedBy }); } else { return registerNode$1({ key: key2, nodeType: "selector", peek: selectorPeek, get: selectorGet, init: selectorInit, invalidate: invalidateSelector, shouldDeleteConfigOnRelease: selectorShouldDeleteConfigOnRelease, dangerouslyAllowMutability: options.dangerouslyAllowMutability, shouldRestoreFromSnapshots: false, retainedBy }); } } var Recoil_selector = selector; var { loadableWithError: loadableWithError$2, loadableWithPromise: loadableWithPromise$2, loadableWithValue: loadableWithValue$3 } = Recoil_Loadable; var { DEFAULT_VALUE: DEFAULT_VALUE$5, DefaultValue: DefaultValue$2, getConfigDeletionHandler: getConfigDeletionHandler$2, registerNode: registerNode$2, setConfigDeletionHandler: setConfigDeletionHandler$1 } = Recoil_Node; var { isRecoilValue: isRecoilValue$4 } = Recoil_RecoilValue$1; var { markRecoilValueModified: markRecoilValueModified$1, setRecoilValue: setRecoilValue$3, setRecoilValueLoadable: setRecoilValueLoadable$3 } = Recoil_RecoilValueInterface; var { retainedByOptionWithDefault: retainedByOptionWithDefault$2 } = Recoil_Retention; function baseAtom(options) { const { key: key2, persistence_UNSTABLE: persistence } = options; const retainedBy = retainedByOptionWithDefault$2(options.retainedBy_UNSTABLE); let liveStoresCount = 0; let defaultLoadable = Recoil_isPromise(options.default) ? loadableWithPromise$2(options.default.then((value) => { defaultLoadable = loadableWithValue$3(value); const promiseInfo = { __key: key2, __value: value }; return promiseInfo; }).catch((error) => { defaultLoadable = loadableWithError$2(error); throw error; })) : loadableWithValue$3(options.default); let cachedAnswerForUnvalidatedValue = void 0; const cleanupEffectsByStore = /* @__PURE__ */ new Map(); function wrapPendingPromise(store, promise) { const wrappedPromise = promise.then((value) => { var _store$getState$nextT, _state$atomValues$get; const state = (_store$getState$nextT = store.getState().nextTree) !== null && _store$getState$nextT !== void 0 ? _store$getState$nextT : store.getState().currentTree; if (((_state$atomValues$get = state.atomValues.get(key2)) === null || _state$atomValues$get === void 0 ? void 0 : _state$atomValues$get.contents) === wrappedPromise) { setRecoilValue$3(store, node, value); } return { __key: key2, __value: value }; }).catch((error) => { var _store$getState$nextT2, _state$atomValues$get2; const state = (_store$getState$nextT2 = store.getState().nextTree) !== null && _store$getState$nextT2 !== void 0 ? _store$getState$nextT2 : store.getState().currentTree; if (((_state$atomValues$get2 = state.atomValues.get(key2)) === null || _state$atomValues$get2 === void 0 ? void 0 : _state$atomValues$get2.contents) === wrappedPromise) { setRecoilValueLoadable$3(store, node, loadableWithError$2(error)); } throw error; }); return wrappedPromise; } function initAtom(store, initState, trigger) { liveStoresCount++; const alreadyKnown = store.getState().knownAtoms.has(key2); store.getState().knownAtoms.add(key2); if (defaultLoadable.state === "loading") { const notifyDefaultSubscribers = () => { var _store$getState$nextT3; const state = (_store$getState$nextT3 = store.getState().nextTree) !== null && _store$getState$nextT3 !== void 0 ? _store$getState$nextT3 : store.getState().currentTree; if (!state.atomValues.has(key2)) { markRecoilValueModified$1(store, node); } }; defaultLoadable.contents.then(notifyDefaultSubscribers).catch(notifyDefaultSubscribers); } let initValue = DEFAULT_VALUE$5; let pendingSetSelf = null; if (options.effects_UNSTABLE != null && !alreadyKnown) { let duringInit = true; const setSelf = (effect) => (valueOrUpdater) => { if (duringInit) { const currentValue = initValue instanceof DefaultValue$2 || Recoil_isPromise(initValue) ? defaultLoadable.state === "hasValue" ? defaultLoadable.contents : DEFAULT_VALUE$5 : initValue; initValue = typeof valueOrUpdater === "function" ? valueOrUpdater(currentValue) : valueOrUpdater; if (Recoil_isPromise(initValue)) { initValue = initValue.then((value) => { pendingSetSelf = { effect, value }; return value; }); } } else { if (Recoil_isPromise(valueOrUpdater)) { throw new Error("Setting atoms to async values is not implemented."); } if (typeof valueOrUpdater !== "function") { pendingSetSelf = { effect, value: valueOrUpdater }; } setRecoilValue$3(store, node, typeof valueOrUpdater === "function" ? (currentValue) => { const newValue = valueOrUpdater(currentValue); pendingSetSelf = { effect, value: newValue }; return newValue; } : valueOrUpdater); } }; const resetSelf = (effect) => () => setSelf(effect)(DEFAULT_VALUE$5); const onSet = (effect) => (handler) => { store.subscribeToTransactions((currentStore) => { var _currentTree$atomValu; let { currentTree, previousTree } = currentStore.getState(); if (!previousTree) { Recoil_recoverableViolation("Transaction subscribers notified without a next tree being present -- this is a bug in Recoil"); previousTree = currentTree; } const newLoadable = (_currentTree$atomValu = currentTree.atomValues.get(key2)) !== null && _currentTree$atomValu !== void 0 ? _currentTree$atomValu : defaultLoadable; if (newLoadable.state === "hasValue") { var _previousTree$atomVal, _pendingSetSelf, _pendingSetSelf2, _pendingSetSelf3; const newValue = newLoadable.contents; const oldLoadable = (_previousTree$atomVal = previousTree.atomValues.get(key2)) !== null && _previousTree$atomVal !== void 0 ? _previousTree$atomVal : defaultLoadable; const oldValue = oldLoadable.state === "hasValue" ? oldLoadable.contents : DEFAULT_VALUE$5; if (((_pendingSetSelf = pendingSetSelf) === null || _pendingSetSelf === void 0 ? void 0 : _pendingSetSelf.effect) !== effect || ((_pendingSetSelf2 = pendingSetSelf) === null || _pendingSetSelf2 === void 0 ? void 0 : _pendingSetSelf2.value) !== newValue) { handler(newValue, oldValue); } else if (((_pendingSetSelf3 = pendingSetSelf) === null || _pendingSetSelf3 === void 0 ? void 0 : _pendingSetSelf3.effect) === effect) { pendingSetSelf = null; } } }, key2); }; for (const effect of (_options$effects_UNST = options.effects_UNSTABLE) !== null && _options$effects_UNST !== void 0 ? _options$effects_UNST : []) { var _options$effects_UNST; const cleanup = effect({ node, trigger, setSelf: setSelf(effect), resetSelf: resetSelf(effect), onSet: onSet(effect) }); if (cleanup != null) { var _cleanupEffectsByStor; cleanupEffectsByStore.set(store, [...(_cleanupEffectsByStor = cleanupEffectsByStore.get(store)) !== null && _cleanupEffectsByStor !== void 0 ? _cleanupEffectsByStor : [], cleanup]); } } duringInit = false; } if (!(initValue instanceof DefaultValue$2)) { var _store$getState$nextT4; const initLoadable = Recoil_isPromise(initValue) ? loadableWithPromise$2(wrapPendingPromise(store, initValue)) : loadableWithValue$3(initValue); initState.atomValues.set(key2, initLoadable); (_store$getState$nextT4 = store.getState().nextTree) === null || _store$getState$nextT4 === void 0 ? void 0 : _store$getState$nextT4.atomValues.set(key2, initLoadable); } return () => { var _cleanupEffectsByStor2; liveStoresCount--; (_cleanupEffectsByStor2 = cleanupEffectsByStore.get(store)) === null || _cleanupEffectsByStor2 === void 0 ? void 0 : _cleanupEffectsByStor2.forEach((cleanup) => cleanup()); cleanupEffectsByStore.delete(store); store.getState().knownAtoms.delete(key2); }; } function peekAtom(_store, state) { var _ref, _state$atomValues$get3, _cachedAnswerForUnval; return (_ref = (_state$atomValues$get3 = state.atomValues.get(key2)) !== null && _state$atomValues$get3 !== void 0 ? _state$atomValues$get3 : (_cachedAnswerForUnval = cachedAnswerForUnvalidatedValue) === null || _cachedAnswerForUnval === void 0 ? void 0 : _cachedAnswerForUnval[1]) !== null && _ref !== void 0 ? _ref : defaultLoadable; } function getAtom(_store, state) { if (state.atomValues.has(key2)) { return Recoil_nullthrows(state.atomValues.get(key2)); } else if (state.nonvalidatedAtoms.has(key2)) { if (cachedAnswerForUnvalidatedValue != null) { return cachedAnswerForUnvalidatedValue; } if (persistence == null) { Recoil_expectationViolation(`Tried to restore a persisted value for atom ${key2} but it has no persistence settings.`); return defaultLoadable; } const nonvalidatedValue = state.nonvalidatedAtoms.get(key2); const validatorResult = persistence.validator(nonvalidatedValue, DEFAULT_VALUE$5); const validatedValueLoadable = validatorResult instanceof DefaultValue$2 ? defaultLoadable : loadableWithValue$3(validatorResult); cachedAnswerForUnvalidatedValue = validatedValueLoadable; return cachedAnswerForUnvalidatedValue; } else { return defaultLoadable; } } function invalidateAtom() { cachedAnswerForUnvalidatedValue = void 0; } function setAtom(_store, state, newValue) { if (state.atomValues.has(key2)) { const existing = Recoil_nullthrows(state.atomValues.get(key2)); if (existing.state === "hasValue" && newValue === existing.contents) { return /* @__PURE__ */ new Map(); } } else if (!state.nonvalidatedAtoms.has(key2) && newValue instanceof DefaultValue$2) { return /* @__PURE__ */ new Map(); } if (true) { if (options.dangerouslyAllowMutability !== true) { Recoil_deepFreezeValue(newValue); } } cachedAnswerForUnvalidatedValue = void 0; return (/* @__PURE__ */ new Map()).set(key2, loadableWithValue$3(newValue)); } function shouldDeleteConfigOnReleaseAtom() { return getConfigDeletionHandler$2(key2) !== void 0 && liveStoresCount <= 0; } const node = registerNode$2({ key: key2, nodeType: "atom", peek: peekAtom, get: getAtom, set: setAtom, init: initAtom, invalidate: invalidateAtom, shouldDeleteConfigOnRelease: shouldDeleteConfigOnReleaseAtom, dangerouslyAllowMutability: options.dangerouslyAllowMutability, persistence_UNSTABLE: options.persistence_UNSTABLE ? { type: options.persistence_UNSTABLE.type, backButton: options.persistence_UNSTABLE.backButton } : void 0, shouldRestoreFromSnapshots: true, retainedBy }); return node; } function atom(options) { const { default: optionsDefault, ...restOptions } = options; if (isRecoilValue$4(optionsDefault)) { return atomWithFallback({ ...restOptions, default: optionsDefault }); } else { return baseAtom({ ...restOptions, default: optionsDefault }); } } function atomWithFallback(options) { const base = atom({ ...options, default: DEFAULT_VALUE$5, persistence_UNSTABLE: options.persistence_UNSTABLE === void 0 ? void 0 : { ...options.persistence_UNSTABLE, validator: (storedValue) => storedValue instanceof DefaultValue$2 ? storedValue : Recoil_nullthrows(options.persistence_UNSTABLE).validator(storedValue, DEFAULT_VALUE$5) }, effects_UNSTABLE: options.effects_UNSTABLE }); const sel = Recoil_selector({ key: `${options.key}__withFallback`, get: ({ get }) => { const baseValue = get(base); return baseValue instanceof DefaultValue$2 ? options.default : baseValue; }, set: ({ set }, newValue) => set(base, newValue), dangerouslyAllowMutability: options.dangerouslyAllowMutability }); setConfigDeletionHandler$1(sel.key, getConfigDeletionHandler$2(options.key)); return sel; } var Recoil_atom = atom; var MapCache = class { constructor(options) { var _options$mapKey; _defineProperty(this, "_map", void 0); _defineProperty(this, "_keyMapper", void 0); this._map = /* @__PURE__ */ new Map(); this._keyMapper = (_options$mapKey = options === null || options === void 0 ? void 0 : options.mapKey) !== null && _options$mapKey !== void 0 ? _options$mapKey : (v3) => v3; } size() { return this._map.size; } has(key2) { return this._map.has(this._keyMapper(key2)); } get(key2) { return this._map.get(this._keyMapper(key2)); } set(key2, val) { this._map.set(this._keyMapper(key2), val); } delete(key2) { this._map.delete(this._keyMapper(key2)); } clear() { this._map.clear(); } }; var Recoil_MapCache = { MapCache }; var Recoil_MapCache_1 = Recoil_MapCache.MapCache; var Recoil_MapCache$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, MapCache: Recoil_MapCache_1 }); var { LRUCache: LRUCache$2 } = Recoil_LRUCache$1; var { MapCache: MapCache$1 } = Recoil_MapCache$1; var defaultPolicy$1 = { equality: "reference", eviction: "none", maxSize: Infinity }; function cacheFromPolicy({ equality = defaultPolicy$1.equality, eviction = defaultPolicy$1.eviction, maxSize = defaultPolicy$1.maxSize } = defaultPolicy$1) { const valueMapper = getValueMapper$1(equality); const cache = getCache(eviction, maxSize, valueMapper); return cache; } function getValueMapper$1(equality) { switch (equality) { case "reference": return (val) => val; case "value": return (val) => Recoil_stableStringify(val); } throw new Error(`Unrecognized equality policy ${equality}`); } function getCache(eviction, maxSize, mapKey) { switch (eviction) { case "keep-all": return new MapCache$1({ mapKey }); case "lru": return new LRUCache$2({ mapKey, maxSize: Recoil_nullthrows(maxSize) }); case "most-recent": return new LRUCache$2({ mapKey, maxSize: 1 }); } throw new Error(`Unrecognized eviction policy ${eviction}`); } var Recoil_cacheFromPolicy = cacheFromPolicy; var { setConfigDeletionHandler: setConfigDeletionHandler$2 } = Recoil_Node; function atomFamily(options) { var _options$cachePolicyF, _options$cachePolicyF2; const atomCache = Recoil_cacheFromPolicy({ equality: (_options$cachePolicyF = (_options$cachePolicyF2 = options.cachePolicyForParams_UNSTABLE) === null || _options$cachePolicyF2 === void 0 ? void 0 : _options$cachePolicyF2.equality) !== null && _options$cachePolicyF !== void 0 ? _options$cachePolicyF : "value", eviction: "keep-all" }); return (params) => { var _stableStringify; const cachedAtom = atomCache.get(params); if (cachedAtom != null) { return cachedAtom; } const { cachePolicyForParams_UNSTABLE, ...atomOptions } = options; const newAtom = Recoil_atom({ ...atomOptions, key: `${options.key}__${(_stableStringify = Recoil_stableStringify(params)) !== null && _stableStringify !== void 0 ? _stableStringify : "void"}`, default: typeof options.default === "function" ? options.default(params) : options.default, retainedBy_UNSTABLE: typeof options.retainedBy_UNSTABLE === "function" ? options.retainedBy_UNSTABLE(params) : options.retainedBy_UNSTABLE, effects_UNSTABLE: typeof options.effects_UNSTABLE === "function" ? options.effects_UNSTABLE(params) : options.effects_UNSTABLE }); atomCache.set(params, newAtom); setConfigDeletionHandler$2(newAtom.key, () => { atomCache.delete(params); }); return newAtom; }; } var Recoil_atomFamily = atomFamily; var { setConfigDeletionHandler: setConfigDeletionHandler$3 } = Recoil_Node; var nextIndex = 0; function selectorFamily(options) { var _options$cachePolicyF, _options$cachePolicyF2; const selectorCache = Recoil_cacheFromPolicy({ equality: (_options$cachePolicyF = (_options$cachePolicyF2 = options.cachePolicyForParams_UNSTABLE) === null || _options$cachePolicyF2 === void 0 ? void 0 : _options$cachePolicyF2.equality) !== null && _options$cachePolicyF !== void 0 ? _options$cachePolicyF : "value", eviction: "keep-all" }); return (params) => { var _stableStringify; const cachedSelector = selectorCache.get(params); if (cachedSelector != null) { return cachedSelector; } const myKey = `${options.key}__selectorFamily/${(_stableStringify = Recoil_stableStringify(params, { allowFunctions: true })) !== null && _stableStringify !== void 0 ? _stableStringify : "void"}/${nextIndex++}`; const myGet = (callbacks) => options.get(params)(callbacks); const myCachePolicy = options.cachePolicy_UNSTABLE; const retainedBy = typeof options.retainedBy_UNSTABLE === "function" ? options.retainedBy_UNSTABLE(params) : options.retainedBy_UNSTABLE; let newSelector; if (options.set != null) { const set = options.set; const mySet = (callbacks, newValue) => set(params)(callbacks, newValue); newSelector = Recoil_selector({ key: myKey, get: myGet, set: mySet, cachePolicy_UNSTABLE: myCachePolicy, dangerouslyAllowMutability: options.dangerouslyAllowMutability, retainedBy_UNSTABLE: retainedBy }); } else { newSelector = Recoil_selector({ key: myKey, get: myGet, cachePolicy_UNSTABLE: myCachePolicy, dangerouslyAllowMutability: options.dangerouslyAllowMutability, retainedBy_UNSTABLE: retainedBy }); } selectorCache.set(params, newSelector); setConfigDeletionHandler$3(newSelector.key, () => { selectorCache.delete(params); }); return newSelector; }; } var Recoil_selectorFamily = selectorFamily; var constantSelector = Recoil_selectorFamily({ key: "__constant", get: (constant) => () => constant, cachePolicyForParams_UNSTABLE: { equality: "reference" } }); function constSelector(constant) { return constantSelector(constant); } var Recoil_constSelector = constSelector; var throwingSelector = Recoil_selectorFamily({ key: "__error", get: (message) => () => { throw new Error(message); }, cachePolicyForParams_UNSTABLE: { equality: "reference" } }); function errorSelector(message) { return throwingSelector(message); } var Recoil_errorSelector = errorSelector; function readOnlySelector(atom2) { return atom2; } var Recoil_readOnlySelector = readOnlySelector; var { loadableWithError: loadableWithError$3, loadableWithPromise: loadableWithPromise$3, loadableWithValue: loadableWithValue$4 } = Recoil_Loadable; function concurrentRequests(getRecoilValue, deps) { const results = Array(deps.length).fill(void 0); const exceptions = Array(deps.length).fill(void 0); for (const [i4, dep] of deps.entries()) { try { results[i4] = getRecoilValue(dep); } catch (e4) { exceptions[i4] = e4; } } return [results, exceptions]; } function isError(exp) { return exp != null && !Recoil_isPromise(exp); } function unwrapDependencies(dependencies) { return Array.isArray(dependencies) ? dependencies : Object.getOwnPropertyNames(dependencies).map((key2) => dependencies[key2]); } function getValueFromLoadablePromiseResult(result) { if (result != null && typeof result === "object" && result.hasOwnProperty("__value")) { return result.__value; } return result; } function wrapResults(dependencies, results) { return Array.isArray(dependencies) ? results : Object.getOwnPropertyNames(dependencies).reduce((out, key2, idx) => ({ ...out, [key2]: results[idx] }), {}); } function wrapLoadables(dependencies, results, exceptions) { const output = exceptions.map((exception, idx) => exception == null ? loadableWithValue$4(results[idx]) : Recoil_isPromise(exception) ? loadableWithPromise$3(exception) : loadableWithError$3(exception)); return wrapResults(dependencies, output); } function combineAsyncResultsWithSyncResults(syncResults, asyncResults) { return asyncResults.map((result, idx) => result === void 0 ? syncResults[idx] : result); } var waitForNone = Recoil_selectorFamily({ key: "__waitForNone", get: (dependencies) => ({ get }) => { const deps = unwrapDependencies(dependencies); const [results, exceptions] = concurrentRequests(get, deps); return wrapLoadables(dependencies, results, exceptions); }, dangerouslyAllowMutability: true }); var waitForAny = Recoil_selectorFamily({ key: "__waitForAny", get: (dependencies) => ({ get }) => { const deps = unwrapDependencies(dependencies); const [results, exceptions] = concurrentRequests(get, deps); if (exceptions.some((exp) => !Recoil_isPromise(exp))) { return wrapLoadables(dependencies, results, exceptions); } return new Promise((resolve) => { for (const [i4, exp] of exceptions.entries()) { if (Recoil_isPromise(exp)) { exp.then((result) => { results[i4] = getValueFromLoadablePromiseResult(result); exceptions[i4] = void 0; resolve(wrapLoadables(dependencies, results, exceptions)); }).catch((error) => { exceptions[i4] = error; resolve(wrapLoadables(dependencies, results, exceptions)); }); } } }); }, dangerouslyAllowMutability: true }); var waitForAll = Recoil_selectorFamily({ key: "__waitForAll", get: (dependencies) => ({ get }) => { const deps = unwrapDependencies(dependencies); const [results, exceptions] = concurrentRequests(get, deps); if (exceptions.every((exp) => exp == null)) { return wrapResults(dependencies, results); } const error = exceptions.find(isError); if (error != null) { throw error; } return Promise.all(exceptions).then((exceptionResults) => wrapResults(dependencies, combineAsyncResultsWithSyncResults(results, exceptionResults).map(getValueFromLoadablePromiseResult))); }, dangerouslyAllowMutability: true }); var waitForAllSettled = Recoil_selectorFamily({ key: "__waitForAllSettled", get: (dependencies) => ({ get }) => { const deps = unwrapDependencies(dependencies); const [results, exceptions] = concurrentRequests(get, deps); if (exceptions.every((exp) => !Recoil_isPromise(exp))) { return wrapLoadables(dependencies, results, exceptions); } return Promise.all(exceptions.map((exp, i4) => Recoil_isPromise(exp) ? exp.then((result) => { results[i4] = getValueFromLoadablePromiseResult(result); exceptions[i4] = void 0; }).catch((error) => { results[i4] = void 0; exceptions[i4] = error; }) : null)).then(() => wrapLoadables(dependencies, results, exceptions)); }, dangerouslyAllowMutability: true }); var noWait = Recoil_selectorFamily({ key: "__noWait", get: (dependency) => ({ get }) => { try { return loadableWithValue$4(get(dependency)); } catch (exception) { return Recoil_isPromise(exception) ? loadableWithPromise$3(exception) : loadableWithError$3(exception); } }, dangerouslyAllowMutability: true }); var Recoil_WaitFor = { waitForNone, waitForAny, waitForAll, waitForAllSettled, noWait }; var { batchUpdates: batchUpdates$3, setBatcher: setBatcher$1 } = Recoil_Batching; var { DefaultValue: DefaultValue$3 } = Recoil_Node; var { RecoilRoot: RecoilRoot$2 } = Recoil_RecoilRoot_react; var { isRecoilValue: isRecoilValue$5 } = Recoil_RecoilValue$1; var { retentionZone: retentionZone$1 } = Recoil_RetentionZone; var { freshSnapshot: freshSnapshot$2 } = Recoil_Snapshot$1; var { useGotoRecoilSnapshot: useGotoRecoilSnapshot$1, useRecoilCallback: useRecoilCallback$1, useRecoilSnapshot: useRecoilSnapshot$1, useRecoilState: useRecoilState$1, useRecoilStateLoadable: useRecoilStateLoadable$1, useRecoilTransaction: useRecoilTransaction$1, useRecoilTransactionObserver: useRecoilTransactionObserver$1, useRecoilValue: useRecoilValue$1, useRecoilValueLoadable: useRecoilValueLoadable$1, useResetRecoilState: useResetRecoilState$1, useRetain: useRetain$1, useSetRecoilState: useSetRecoilState$1, useSetUnvalidatedAtomValues: useSetUnvalidatedAtomValues$1, useTransactionObservation_DEPRECATED: useTransactionObservation_DEPRECATED$1 } = Recoil_Hooks; var { noWait: noWait$1, waitForAll: waitForAll$1, waitForAllSettled: waitForAllSettled$1, waitForAny: waitForAny$1, waitForNone: waitForNone$1 } = Recoil_WaitFor; var Recoil_index = { DefaultValue: DefaultValue$3, RecoilRoot: RecoilRoot$2, useRecoilBridgeAcrossReactRoots_UNSTABLE: Recoil_useRecoilBridgeAcrossReactRoots, atom: Recoil_atom, selector: Recoil_selector, retentionZone: retentionZone$1, atomFamily: Recoil_atomFamily, selectorFamily: Recoil_selectorFamily, constSelector: Recoil_constSelector, errorSelector: Recoil_errorSelector, readOnlySelector: Recoil_readOnlySelector, useRecoilValue: useRecoilValue$1, useRecoilValueLoadable: useRecoilValueLoadable$1, useRecoilState: useRecoilState$1, useRecoilStateLoadable: useRecoilStateLoadable$1, useSetRecoilState: useSetRecoilState$1, useResetRecoilState: useResetRecoilState$1, useGetRecoilValueInfo_UNSTABLE: Recoil_useGetRecoilValueInfo, useRetain: useRetain$1, useRecoilCallback: useRecoilCallback$1, useRecoilTransaction_UNSTABLE: useRecoilTransaction$1, useGotoRecoilSnapshot: useGotoRecoilSnapshot$1, useRecoilSnapshot: useRecoilSnapshot$1, useRecoilTransactionObserver_UNSTABLE: useRecoilTransactionObserver$1, useTransactionObservation_UNSTABLE: useTransactionObservation_DEPRECATED$1, useSetUnvalidatedAtomValues_UNSTABLE: useSetUnvalidatedAtomValues$1, noWait: noWait$1, waitForNone: waitForNone$1, waitForAny: waitForAny$1, waitForAll: waitForAll$1, waitForAllSettled: waitForAllSettled$1, isRecoilValue: isRecoilValue$5, batchUpdates: batchUpdates$3, setBatcher: setBatcher$1, snapshot_UNSTABLE: freshSnapshot$2 }; var Recoil_index_1 = Recoil_index.DefaultValue; var Recoil_index_2 = Recoil_index.RecoilRoot; var Recoil_index_3 = Recoil_index.useRecoilBridgeAcrossReactRoots_UNSTABLE; var Recoil_index_4 = Recoil_index.atom; var Recoil_index_5 = Recoil_index.selector; var Recoil_index_6 = Recoil_index.retentionZone; var Recoil_index_7 = Recoil_index.atomFamily; var Recoil_index_8 = Recoil_index.selectorFamily; var Recoil_index_9 = Recoil_index.constSelector; var Recoil_index_10 = Recoil_index.errorSelector; var Recoil_index_11 = Recoil_index.readOnlySelector; var Recoil_index_12 = Recoil_index.useRecoilValue; var Recoil_index_13 = Recoil_index.useRecoilValueLoadable; var Recoil_index_14 = Recoil_index.useRecoilState; var Recoil_index_15 = Recoil_index.useRecoilStateLoadable; var Recoil_index_16 = Recoil_index.useSetRecoilState; var Recoil_index_17 = Recoil_index.useResetRecoilState; var Recoil_index_18 = Recoil_index.useGetRecoilValueInfo_UNSTABLE; var Recoil_index_19 = Recoil_index.useRetain; var Recoil_index_20 = Recoil_index.useRecoilCallback; var Recoil_index_21 = Recoil_index.useRecoilTransaction_UNSTABLE; var Recoil_index_22 = Recoil_index.useGotoRecoilSnapshot; var Recoil_index_23 = Recoil_index.useRecoilSnapshot; var Recoil_index_24 = Recoil_index.useRecoilTransactionObserver_UNSTABLE; var Recoil_index_25 = Recoil_index.useTransactionObservation_UNSTABLE; var Recoil_index_26 = Recoil_index.useSetUnvalidatedAtomValues_UNSTABLE; var Recoil_index_27 = Recoil_index.noWait; var Recoil_index_28 = Recoil_index.waitForNone; var Recoil_index_29 = Recoil_index.waitForAny; var Recoil_index_30 = Recoil_index.waitForAll; var Recoil_index_31 = Recoil_index.waitForAllSettled; var Recoil_index_32 = Recoil_index.isRecoilValue; var Recoil_index_33 = Recoil_index.batchUpdates; var Recoil_index_34 = Recoil_index.setBatcher; var Recoil_index_35 = Recoil_index.snapshot_UNSTABLE; // src/components/ui/modals/hiddenFilesModal.tsx var import_obsidian32 = require("obsidian"); var HiddenItemsModal = class extends import_obsidian32.Modal { constructor(plugin) { super(plugin.app); this.plugin = plugin; } onOpen() { let { contentEl } = this; let myModal = this; let headerText; const headerEl = contentEl.createEl("div", { text: headerText }); headerEl.addClass("modal-title"); headerEl.innerHTML = i18n_default.labels.hiddenFiles; const listEl = contentEl.createEl("div"); const root = createRoot(listEl); root.render(/* @__PURE__ */ bn.createElement(HiddenFiles, { plugin: this.plugin })); const cancelButton = contentEl.createEl("button", { text: i18n_default.buttons.cancel }); cancelButton.style.cssText = "float: right;"; cancelButton.addEventListener("click", () => { myModal.close(); }); const onClickAction = async () => { myModal.close(); }; } onClose() { let { contentEl } = this; let event = new CustomEvent(eventTypes.vaultChange); window.dispatchEvent(event); contentEl.empty(); } }; var HiddenFiles = (props2) => { const { plugin } = props2; const ref = _2(null); const [hiddenFiles, setHiddenFiles] = p2(plugin.settings.hiddenFiles); const [hiddenExtensions, setHiddenExtensions] = p2( plugin.settings.hiddenExtensions ); const saveExtension = (value) => { plugin.settings.hiddenExtensions = [ ...plugin.settings.hiddenExtensions, value ]; plugin.saveSettings(); }; const saveFile = (_5, value) => { plugin.settings.hiddenFiles = [...plugin.settings.hiddenFiles, ...value]; plugin.saveSettings(); }; const removeExtension = (index) => { plugin.settings.hiddenExtensions = plugin.settings.hiddenExtensions.filter( (f4, i4) => i4 != index ); plugin.saveSettings(); }; const removeItem = (index) => { plugin.settings.hiddenFiles = plugin.settings.hiddenFiles.filter( (f4, i4) => i4 != index ); plugin.saveSettings(); }; const addExtension = () => { if ((ref == null ? void 0 : ref.current.value.length) > 0) { saveExtension(ref.current.value); ref.current.empty(); } }; const settingsChanged = () => { setHiddenFiles(plugin.settings.hiddenFiles); setHiddenExtensions(plugin.settings.hiddenExtensions); }; h2(() => { window.addEventListener(eventTypes.settingsChanged, settingsChanged); return () => { window.removeEventListener(eventTypes.settingsChanged, settingsChanged); }; }, []); const addMenu = (e4) => { const offset = e4.target.getBoundingClientRect(); const options = getAllAbstractFilesInVault(props2.plugin, app).map((f4) => ({ name: fileNameToString(f4.name), value: f4.path })); showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: false, editable: false, value: [], options, saveOptions: saveFile, placeholder: i18n_default.labels.linkItemSelectPlaceholder, detail: true, searchable: true } ); }; return /* @__PURE__ */ bn.createElement("div", { className: "modal-content" }, /* @__PURE__ */ bn.createElement("div", { className: "setting-item setting-item-heading" }, "Extensions"), /* @__PURE__ */ bn.createElement("div", null, hiddenExtensions.map((f4, index) => /* @__PURE__ */ bn.createElement("div", { className: "mobile-option-setting-item" }, /* @__PURE__ */ bn.createElement("span", { className: "mobile-option-setting-item-name" }, f4), /* @__PURE__ */ bn.createElement("div", { className: "clickable-icon mobile-option-setting-item-option-icon", "aria-label": i18n_default.buttons.delete, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] }, onClick: () => removeExtension(index) })))), /* @__PURE__ */ bn.createElement("div", { className: "setting-item" }, /* @__PURE__ */ bn.createElement("input", { placeholder: i18n_default.labels.addExtension, type: "text", ref }), /* @__PURE__ */ bn.createElement("button", { onClick: (e4) => addExtension() }, "+ Add")), /* @__PURE__ */ bn.createElement("div", { className: "setting-item setting-item-heading" }, "Files"), /* @__PURE__ */ bn.createElement("div", null, hiddenFiles.map((f4, index) => /* @__PURE__ */ bn.createElement("div", { className: "mobile-option-setting-item" }, /* @__PURE__ */ bn.createElement("span", { className: "mobile-option-setting-item-name" }, f4), /* @__PURE__ */ bn.createElement("div", { className: "clickable-icon mobile-option-setting-item-option-icon", "aria-label": i18n_default.buttons.delete, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] }, onClick: () => removeItem(index) })))), /* @__PURE__ */ bn.createElement("div", { className: "setting-item" }, /* @__PURE__ */ bn.createElement("button", { onClick: (e4) => addMenu(e4) }, "+ ", i18n_default.buttons.addFile))); }; // src/components/Spaces/MainMenu.tsx var import_obsidian33 = require("obsidian"); // src/recoil/pluginState.ts var activeFile = Recoil_index_4({ key: "spacesActiveFile", default: null, dangerouslyAllowMutability: true }); var selectedFiles = Recoil_index_4({ key: "spacesSelectedFiles", default: [], dangerouslyAllowMutability: true }); var activeView = Recoil_index_4({ key: "spacesActiveView", default: "root", dangerouslyAllowMutability: true }); var activeViewSpace = Recoil_index_4({ key: "spacesActiveSpace", default: "", dangerouslyAllowMutability: true }); var spaces = Recoil_index_4({ key: "spaces", default: [], dangerouslyAllowMutability: true }); var expandedFolders = Recoil_index_4({ key: "expandedFolders", default: {} }); // src/components/Spaces/MainMenu.tsx var replaceMobileMainMenu = (plugin) => { if (platformIsMobile()) { const header = app.workspace.containerEl.querySelector( ".workspace-drawer.mod-left .workspace-drawer-header-left" ); header.empty(); if (!plugin.settings.spacesCompactMode) { const reactEl = createRoot(header); reactEl.render( /* @__PURE__ */ bn.createElement(Recoil_index_2, null, /* @__PURE__ */ bn.createElement(MainMenu, { plugin })) ); } } }; var MainMenu = (props2) => { var _a2; const { plugin } = props2; const [activeView2, setActiveView] = Recoil_index_14(activeView); const [spaces2, setSpaces] = Recoil_index_14(spaces); const [activeViewSpace2, setActiveViewSpace] = Recoil_index_14( activeViewSpace ); const activeSpace = spaces2.find((f4) => f4.name == activeViewSpace2); const ref = _2(); const toggleSections = (collapse) => { const newSections = collapse ? [] : ["/", ...spaces2.map((f4) => f4.name)]; plugin.settings.expandedSpaces = newSections; plugin.saveSettings(); }; const newSection = () => { let vaultChangeModal = new EditSpaceModal(plugin, "", "create"); vaultChangeModal.open(); }; h2(() => { refreshLeafs(); }, []); const refreshLeafs = () => { let leafs = []; let spaceActive = true; if (plugin.app.workspace.leftSplit && platformIsMobile()) { const mobileDrawer = plugin.app.workspace.leftSplit; const leaves = mobileDrawer.children; const index = leaves.reduce((p3, c4, i4) => { return c4.getViewState().type == FILE_TREE_VIEW_TYPE ? i4 : p3; }, -1); spaceActive = index == mobileDrawer.currentTab; leafs.push(...leaves.filter((l3, i4) => i4 != index)); } return { leafs, spaceActive }; }; const showMenu = (e4) => { const { spaceActive, leafs } = refreshLeafs(); const menu = new import_obsidian33.Menu(); !spaceActive && menu.addItem((menuItem) => { menuItem.setIcon("lucide-arrow-left"); menuItem.setTitle(i18n_default.menu.backToSpace); menuItem.onClick((ev) => { const leaves = plugin.app.workspace.getLeavesOfType(FILE_TREE_VIEW_TYPE); if (leaves.length > 0) { plugin.app.workspace.revealLeaf(leaves[0]); } }); }); if (plugin.settings.spacesCompactMode) { menu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.spaces); menuItem.onClick((ev) => { setActiveView("root"); }); }); menu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.tags); menuItem.onClick((ev) => { setActiveView("tags"); }); }); menu.addSeparator(); spaces2.filter((f4) => f4.pinned == "true").forEach((space) => { menu.addItem((menuItem) => { menuItem.setTitle(space.name); menuItem.onClick((ev) => { setActiveView("space"); setActiveViewSpace(space.name); }); }); }); menu.addSeparator(); } menu.addItem((menuItem) => { menuItem.setIcon("plus"); menuItem.setTitle(i18n_default.menu.newSpace); menuItem.onClick((ev) => { newSection(); }); }); menu.addItem((menuItem) => { menuItem.setIcon("lucide-chevrons-down-up"); menuItem.setTitle(i18n_default.menu.collapseAllSections); menuItem.onClick((ev) => { toggleSections(true); }); }); menu.addItem((menuItem) => { menuItem.setIcon("lucide-chevrons-up-down"); menuItem.setTitle(i18n_default.menu.expandAllSections); menuItem.onClick((ev) => { toggleSections(false); }); }); menu.addSeparator(); menu.addItem((menuItem) => { menuItem.setIcon("eye-off"); menuItem.setTitle(i18n_default.menu.manageHiddenFiles); menuItem.onClick((ev) => { let vaultChangeModal = new HiddenItemsModal(plugin); vaultChangeModal.open(); }); }); menu.addSeparator(); leafs.map( (l3) => menu.addItem((menuItem) => { menuItem.setIcon(l3.view.icon); menuItem.setTitle(l3.getDisplayText()); menuItem.onClick((ev) => { plugin.app.workspace.revealLeaf(l3); }); }) ); menu.addItem((menuItem) => { menuItem.setIcon("lucide-settings"); menuItem.setTitle(i18n_default.menu.obSettings); menuItem.onClick((ev) => { plugin.app.commands.commands["app:open-settings"].callback(); }); }); menu.addItem((menuItem) => { menuItem.setIcon("vault"); menuItem.setTitle(i18n_default.menu.openVault); menuItem.onClick((ev) => { plugin.app.commands.commands["app:open-vault"].callback(); }); }); menu.addSeparator(); menu.addItem((menuItem) => { menuItem.setIcon("mk-logo"); menuItem.setTitle(i18n_default.menu.getHelp); menuItem.onClick((ev) => { window.open("https://make.md/community"); }); }); const offset = ref.current.getBoundingClientRect(); menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); }; const currentViewName = activeView2 == "root" ? "Spaces" : activeView2 == "tags" ? "Tags" : activeViewSpace2; const currentViewIcon = activeView2 == "root" ? uiIconSet["mk-ui-spaces"] : activeView2 == "tags" ? uiIconSet["mk-ui-tags"] : ((_a2 = activeSpace == null ? void 0 : activeSpace.sticker) == null ? void 0 : _a2.length) > 0 ? unifiedToNative(activeSpace.sticker) : activeSpace == null ? void 0 : activeSpace.name.charAt(0); return /* @__PURE__ */ bn.createElement("div", { className: "mk-main-menu-container" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-main-menu-button", ref, onClick: (e4) => showMenu(e4) }, plugin.settings.spacesCompactMode ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { className: "mk-main-menu-icon", dangerouslySetInnerHTML: { __html: currentViewIcon } }), currentViewName) : plugin.app.vault.getName(), /* @__PURE__ */ bn.createElement("div", { dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-expand"] } }))); }; // node_modules/@tanstack/react-virtual/build/esm/index.js function _extends() { _extends = Object.assign || function(target) { for (var i4 = 1; i4 < arguments.length; i4++) { var source = arguments[i4]; for (var key2 in source) { if (Object.prototype.hasOwnProperty.call(source, key2)) { target[key2] = source[key2]; } } } return target; }; return _extends.apply(this, arguments); } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key2, i4; for (i4 = 0; i4 < sourceKeys.length; i4++) { key2 = sourceKeys[i4]; if (excluded.indexOf(key2) >= 0) continue; target[key2] = source[key2]; } return target; } var props = ["bottom", "height", "left", "right", "top", "width"]; var rectChanged = function rectChanged2(a5, b4) { if (a5 === void 0) { a5 = {}; } if (b4 === void 0) { b4 = {}; } return props.some(function(prop) { return a5[prop] !== b4[prop]; }); }; var observedNodes = /* @__PURE__ */ new Map(); var rafId; var run = function run2() { var changedStates = []; observedNodes.forEach(function(state, node) { var newRect = node.getBoundingClientRect(); if (rectChanged(newRect, state.rect)) { state.rect = newRect; changedStates.push(state); } }); changedStates.forEach(function(state) { state.callbacks.forEach(function(cb) { return cb(state.rect); }); }); rafId = window.requestAnimationFrame(run2); }; function observeRect(node, cb) { return { observe: function observe() { var wasEmpty = observedNodes.size === 0; if (observedNodes.has(node)) { observedNodes.get(node).callbacks.push(cb); } else { observedNodes.set(node, { rect: void 0, hasRectChanged: false, callbacks: [cb] }); } if (wasEmpty) run(); }, unobserve: function unobserve() { var state = observedNodes.get(node); if (state) { var index = state.callbacks.indexOf(cb); if (index >= 0) state.callbacks.splice(index, 1); if (!state.callbacks.length) observedNodes["delete"](node); if (!observedNodes.size) cancelAnimationFrame(rafId); } } }; } var useIsomorphicLayoutEffect3 = typeof window !== "undefined" ? s2 : h2; function rectReducer(state, action) { var rect = action.rect; if (state.height !== rect.height || state.width !== rect.width) { return rect; } return state; } var useRect2 = function useRect3(nodeRef, initialRect) { if (initialRect === void 0) { initialRect = { width: 0, height: 0 }; } var _React$useState = bn.useState(nodeRef.current), element = _React$useState[0], setElement = _React$useState[1]; var _React$useReducer = bn.useReducer(rectReducer, initialRect), rect = _React$useReducer[0], dispatch = _React$useReducer[1]; var initialRectSet = bn.useRef(false); useIsomorphicLayoutEffect3(function() { if (nodeRef.current !== element) { setElement(nodeRef.current); } }); useIsomorphicLayoutEffect3(function() { if (element && !initialRectSet.current) { initialRectSet.current = true; var _rect = element.getBoundingClientRect(); dispatch({ rect: _rect }); } }, [element]); bn.useEffect(function() { if (!element) { return; } var observer = observeRect(element, function(rect2) { dispatch({ rect: rect2 }); }); observer.observe(); return function() { observer.unobserve(); }; }, [element]); return rect; }; var _excluded = ["align"]; var defaultEstimateSize = function defaultEstimateSize2() { return 50; }; var defaultKeyExtractor = function defaultKeyExtractor2(index) { return index; }; var defaultMeasureSize = function defaultMeasureSize2(el, horizontal) { var key2 = horizontal ? "offsetWidth" : "offsetHeight"; return el[key2]; }; var defaultRangeExtractor = function defaultRangeExtractor2(range) { var start = Math.max(range.start - range.overscan, 0); var end = Math.min(range.end + range.overscan, range.size - 1); var arr = []; for (var _i = start; _i <= end; _i++) { arr.push(_i); } return arr; }; var useVirtual = function useVirtual2(_ref) { var _measurements; var _ref$size = _ref.size, size = _ref$size === void 0 ? 0 : _ref$size, _ref$estimateSize = _ref.estimateSize, estimateSize = _ref$estimateSize === void 0 ? defaultEstimateSize : _ref$estimateSize, _ref$overscan = _ref.overscan, overscan = _ref$overscan === void 0 ? 1 : _ref$overscan, _ref$paddingStart = _ref.paddingStart, paddingStart = _ref$paddingStart === void 0 ? 0 : _ref$paddingStart, _ref$paddingEnd = _ref.paddingEnd, paddingEnd = _ref$paddingEnd === void 0 ? 0 : _ref$paddingEnd, parentRef = _ref.parentRef, _ref$horizontal = _ref.horizontal, horizontal = _ref$horizontal === void 0 ? false : _ref$horizontal, scrollToFn = _ref.scrollToFn, useObserver = _ref.useObserver, initialRect = _ref.initialRect, onScrollElement = _ref.onScrollElement, scrollOffsetFn = _ref.scrollOffsetFn, _ref$keyExtractor = _ref.keyExtractor, keyExtractor = _ref$keyExtractor === void 0 ? defaultKeyExtractor : _ref$keyExtractor, _ref$measureSize = _ref.measureSize, measureSize = _ref$measureSize === void 0 ? defaultMeasureSize : _ref$measureSize, _ref$rangeExtractor = _ref.rangeExtractor, rangeExtractor = _ref$rangeExtractor === void 0 ? defaultRangeExtractor : _ref$rangeExtractor; var sizeKey = horizontal ? "width" : "height"; var scrollKey = horizontal ? "scrollLeft" : "scrollTop"; var latestRef = _2({ outerSize: 0, scrollOffset: 0, measurements: [], totalSize: 0 }); var _React$useState = p2(0), scrollOffset = _React$useState[0], setScrollOffset = _React$useState[1]; latestRef.current.scrollOffset = scrollOffset; var useMeasureParent = useObserver || useRect2; var _useMeasureParent = useMeasureParent(parentRef, initialRect), outerSize = _useMeasureParent[sizeKey]; latestRef.current.outerSize = outerSize; var defaultScrollToFn = T2(function(offset) { if (parentRef.current) { parentRef.current[scrollKey] = offset; } }, [parentRef, scrollKey]); var resolvedScrollToFn = scrollToFn || defaultScrollToFn; var scrollTo = T2(function(offset) { resolvedScrollToFn(offset, defaultScrollToFn); }, [defaultScrollToFn, resolvedScrollToFn]); var _React$useState2 = p2({}), measuredCache = _React$useState2[0], setMeasuredCache = _React$useState2[1]; var measure = T2(function() { return setMeasuredCache({}); }, []); var pendingMeasuredCacheIndexesRef = _2([]); var measurements = F(function() { var min3 = pendingMeasuredCacheIndexesRef.current.length > 0 ? Math.min.apply(Math, pendingMeasuredCacheIndexesRef.current) : 0; pendingMeasuredCacheIndexesRef.current = []; var measurements2 = latestRef.current.measurements.slice(0, min3); for (var _i2 = min3; _i2 < size; _i2++) { var key2 = keyExtractor(_i2); var measuredSize = measuredCache[key2]; var _start = measurements2[_i2 - 1] ? measurements2[_i2 - 1].end : paddingStart; var _size = typeof measuredSize === "number" ? measuredSize : estimateSize(_i2); var _end = _start + _size; measurements2[_i2] = { index: _i2, start: _start, size: _size, end: _end, key: key2 }; } return measurements2; }, [estimateSize, measuredCache, paddingStart, size, keyExtractor]); var totalSize = (((_measurements = measurements[size - 1]) == null ? void 0 : _measurements.end) || paddingStart) + paddingEnd; latestRef.current.measurements = measurements; latestRef.current.totalSize = totalSize; var element = onScrollElement ? onScrollElement.current : parentRef.current; var scrollOffsetFnRef = _2(scrollOffsetFn); scrollOffsetFnRef.current = scrollOffsetFn; useIsomorphicLayoutEffect3(function() { if (!element) { setScrollOffset(0); return; } var onScroll = function onScroll2(event) { var offset = scrollOffsetFnRef.current ? scrollOffsetFnRef.current(event) : element[scrollKey]; setScrollOffset(offset); }; onScroll(); element.addEventListener("scroll", onScroll, { capture: false, passive: true }); return function() { element.removeEventListener("scroll", onScroll); }; }, [element, scrollKey]); var _calculateRange = calculateRange(latestRef.current), start = _calculateRange.start, end = _calculateRange.end; var indexes = F(function() { return rangeExtractor({ start, end, overscan, size: measurements.length }); }, [start, end, overscan, measurements.length, rangeExtractor]); var measureSizeRef = _2(measureSize); measureSizeRef.current = measureSize; var virtualItems = F(function() { var virtualItems2 = []; var _loop = function _loop2(k6, len2) { var i4 = indexes[k6]; var measurement = measurements[i4]; var item = _extends({}, measurement, { measureRef: function measureRef(el) { if (el) { var measuredSize = measureSizeRef.current(el, horizontal); if (measuredSize !== item.size) { var _scrollOffset = latestRef.current.scrollOffset; if (item.start < _scrollOffset) { defaultScrollToFn(_scrollOffset + (measuredSize - item.size)); } pendingMeasuredCacheIndexesRef.current.push(i4); setMeasuredCache(function(old) { var _extends2; return _extends({}, old, (_extends2 = {}, _extends2[item.key] = measuredSize, _extends2)); }); } } } }); virtualItems2.push(item); }; for (var k5 = 0, len = indexes.length; k5 < len; k5++) { _loop(k5); } return virtualItems2; }, [indexes, defaultScrollToFn, horizontal, measurements]); var mountedRef = _2(false); useIsomorphicLayoutEffect3(function() { if (mountedRef.current) { setMeasuredCache({}); } mountedRef.current = true; }, [estimateSize]); var scrollToOffset = T2(function(toOffset, _temp) { var _ref2 = _temp === void 0 ? { align: "start" } : _temp, align = _ref2.align; var _latestRef$current = latestRef.current, scrollOffset2 = _latestRef$current.scrollOffset, outerSize2 = _latestRef$current.outerSize; if (align === "auto") { if (toOffset <= scrollOffset2) { align = "start"; } else if (toOffset >= scrollOffset2 + outerSize2) { align = "end"; } else { align = "start"; } } if (align === "start") { scrollTo(toOffset); } else if (align === "end") { scrollTo(toOffset - outerSize2); } else if (align === "center") { scrollTo(toOffset - outerSize2 / 2); } }, [scrollTo]); var tryScrollToIndex = T2(function(index, _temp2) { var _ref3 = _temp2 === void 0 ? { align: "auto" } : _temp2, align = _ref3.align, rest = _objectWithoutPropertiesLoose(_ref3, _excluded); var _latestRef$current2 = latestRef.current, measurements2 = _latestRef$current2.measurements, scrollOffset2 = _latestRef$current2.scrollOffset, outerSize2 = _latestRef$current2.outerSize; var measurement = measurements2[Math.max(0, Math.min(index, size - 1))]; if (!measurement) { return; } if (align === "auto") { if (measurement.end >= scrollOffset2 + outerSize2) { align = "end"; } else if (measurement.start <= scrollOffset2) { align = "start"; } else { return; } } var toOffset = align === "center" ? measurement.start + measurement.size / 2 : align === "end" ? measurement.end : measurement.start; scrollToOffset(toOffset, _extends({ align }, rest)); }, [scrollToOffset, size]); var scrollToIndex = T2(function(index, options) { tryScrollToIndex(index, options); requestAnimationFrame(function() { tryScrollToIndex(index, options); }); }, [tryScrollToIndex]); return { virtualItems, totalSize, scrollToOffset, scrollToIndex, measure }; }; var findNearestBinarySearch = function findNearestBinarySearch2(low, high, getCurrentValue, value) { while (low <= high) { var middle = (low + high) / 2 | 0; var currentValue = getCurrentValue(middle); if (currentValue < value) { low = middle + 1; } else if (currentValue > value) { high = middle - 1; } else { return middle; } } if (low > 0) { return low - 1; } else { return 0; } }; function calculateRange(_ref4) { var measurements = _ref4.measurements, outerSize = _ref4.outerSize, scrollOffset = _ref4.scrollOffset; var size = measurements.length - 1; var getOffset = function getOffset2(index) { return measurements[index].start; }; var start = findNearestBinarySearch(0, size, getOffset, scrollOffset); var end = start; while (end < size && measurements[end].end < scrollOffset + outerSize) { end++; } return { start, end }; } // src/components/Spaces/TreeView/FolderTreeView.tsx var import_obsidian35 = require("obsidian"); var import_classnames6 = __toESM(require_classnames()); // src/components/Spaces/TreeView/SectionView.tsx var import_classnames5 = __toESM(require_classnames()); var import_obsidian34 = require("obsidian"); var SectionItem = k3( ({ childCount, clone, data, depth, disableSelection, disableInteraction, ghost, handleProps, indentationWidth, indicator, collapsed, style, onCollapse, wrapperRef, plugin, disabled }, ref) => { var _a2, _b2; const [activeFile2, setActiveFile] = Recoil_index_14(activeFile); const [spaces2, setSpaces] = Recoil_index_14(spaces); const space = spaces2.find((f4) => f4.name == data.space); const newFolderInSection = () => { var _a3; let vaultChangeModal = new VaultChangeModal( plugin, ((_a3 = space == null ? void 0 : space.def) == null ? void 0 : _a3.length) > 0 ? getFolderFromPath(app, space.def) : defaultNoteFolder(plugin, activeFile2), "create folder", data.space ); vaultChangeModal.open(); }; const newFileInSection = async () => { var _a3; const newFile = await createNewMarkdownFile( plugin, ((_a3 = space == null ? void 0 : space.def) == null ? void 0 : _a3.length) > 0 ? getFolderFromPath(app, space.def) : defaultNoteFolder(plugin, activeFile2), "" ); if (data.space != "/") addPathsToSpace(plugin, data.space, [newFile.path]); }; const triggerMenu = (e4) => { data.space == "/" ? triggerVaultMenu(e4) : triggerSectionMenu(plugin, data.space, spaces2, e4); }; const triggerVaultMenu = (e4) => { const refreshFileList = () => { let event = new CustomEvent(eventTypes.vaultChange); window.dispatchEvent(event); }; const fileMenu = new import_obsidian34.Menu(); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.collapseAll); menuItem.setIcon("lucide-chevrons-down-up"); menuItem.onClick((ev) => { plugin.settings.expandedFolders = { ...plugin.settings.expandedFolders, "/": [] }; plugin.saveSettings(); }); }); fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.customSort); menuItem.setChecked(plugin.settings.vaultSort[0] == "rank"); menuItem.onClick((ev) => { plugin.settings.vaultSort = ["rank", true]; plugin.saveSettings(); refreshFileList(); }); }); fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.fileNameSortAlphaAsc); menuItem.setChecked( plugin.settings.vaultSort[0] == "path" && plugin.settings.vaultSort[1] == true ); menuItem.onClick((ev) => { plugin.settings.vaultSort = ["path", true]; plugin.saveSettings(); refreshFileList(); }); }); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.fileNameSortAlphaDesc); menuItem.setChecked( plugin.settings.vaultSort[0] == "path" && plugin.settings.vaultSort[1] == false ); menuItem.onClick((ev) => { plugin.settings.vaultSort = ["path", false]; plugin.saveSettings(); refreshFileList(); }); }); fileMenu.addSeparator(); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.createdTimeSortAsc); menuItem.setChecked( plugin.settings.vaultSort[0] == "created" && plugin.settings.vaultSort[1] == false ); menuItem.onClick((ev) => { plugin.settings.vaultSort = ["created", false]; plugin.saveSettings(); refreshFileList(); }); }); fileMenu.addItem((menuItem) => { menuItem.setTitle(i18n_default.menu.createdTimeSortDesc); menuItem.setChecked( plugin.settings.vaultSort[0] == "created" && plugin.settings.vaultSort[1] == true ); menuItem.onClick((ev) => { plugin.settings.vaultSort = ["created", true]; plugin.saveSettings(); refreshFileList(); }); }); if (isMouseEvent(e4)) { fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); } else { fileMenu.showAtPosition({ x: e4.nativeEvent.locationX, y: e4.nativeEvent.locationY }); } return false; }; return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { className: (0, import_classnames5.default)( "mk-tree-wrapper", "mk-section-wrapper", clone && "mk-clone", ghost && "mk-ghost", disableSelection && "mk-disable-selection", disableInteraction && "mk-disable-interaction" ), ref: wrapperRef, style: { ...style, ...indicator ? { "--spacing": `${indentationWidth * depth}px` } : {} } }, /* @__PURE__ */ bn.createElement("div", { onContextMenu: (e4) => triggerMenu(e4), className: (0, import_classnames5.default)( "mk-section", indicator ? indicator.state == 2 /* Bottom */ ? "mk-indicator-bottom" : indicator.state == 1 /* Top */ ? "mk-indicator-top" : indicator.state == 3 /* Row */ ? "mk-indicator-row" : "" : "" ) }, /* @__PURE__ */ bn.createElement("div", { className: "mk-section-title", onClick: (e4) => onCollapse(data), ref, ...handleProps }, ((_a2 = data.spaceItem) == null ? void 0 : _a2.sticker) ? /* @__PURE__ */ bn.createElement("div", { dangerouslySetInnerHTML: { __html: unifiedToNative((_b2 = data.spaceItem) == null ? void 0 : _b2.sticker) } }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null), /* @__PURE__ */ bn.createElement("div", { className: "mk-tree-text" }, data.id == "/" ? plugin.app.vault.getName() : data.space), /* @__PURE__ */ bn.createElement("div", { className: `mk-collapse ${collapsed ? "mk-collapsed" : ""}`, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-collapse-sm"] } })), /* @__PURE__ */ bn.createElement("div", { className: "mk-folder-buttons" }, /* @__PURE__ */ bn.createElement("button", { "aria-label": i18n_default.buttons.createFolder, onClick: () => { newFolderInSection(); }, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-new-folder"] } }), /* @__PURE__ */ bn.createElement("button", { "aria-label": i18n_default.buttons.newNote, onClick: () => { newFileInSection(); }, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-new-note"] } }))))); } ); SectionItem.displayName = "SectionItem"; // src/components/Spaces/TreeView/FolderTreeView.tsx var animateLayoutChanges2 = ({ isSorting, wasDragging }) => isSorting || wasDragging ? false : true; var SortableTreeItem = ({ id: id2, data, depth, disabled, style, ...props2 }) => { const { attributes, isDragging, isSorting, listeners, setDraggableNodeRef, setDroppableNodeRef, transform, transition } = useSortable({ id: id2, animateLayoutChanges: animateLayoutChanges2, disabled, data }); const memoListeners = F(() => { return { ...attributes, ...listeners }; }, [isSorting]); if (data.parentId == null) { return /* @__PURE__ */ bn.createElement(SectionItem, { ref: setDraggableNodeRef, wrapperRef: setDroppableNodeRef, data, depth, ghost: isDragging, disableInteraction: isSorting, disabled, style, handleProps: memoListeners, ...props2 }); } else { return /* @__PURE__ */ bn.createElement(TreeItem, { ref: setDraggableNodeRef, wrapperRef: setDroppableNodeRef, data, depth, ghost: isDragging, disableInteraction: isSorting, disabled, style, handleProps: memoListeners, ...props2 }); } }; var TreeItem = k3( ({ childCount, clone, data, depth, disableSelection, disableInteraction, ghost, handleProps, active, indentationWidth, indicator, collapsed, selected, onCollapse, onSelectRange, wrapperRef, style, plugin, disabled }, ref) => { var _a2; const [activeFile2, setActiveFile] = Recoil_index_14(activeFile); const [selectedFiles2, setSelectedFiles] = Recoil_index_14( selectedFiles ); const openFileAtTarget = (file, e4) => { if (e4.shiftKey) { onSelectRange(file.id); return; } openAFile( getAbstractFileAtPath(app, file.item.path), plugin, e4.ctrlKey || e4.metaKey ); setActiveFile(file.item.path); setSelectedFiles([file]); }; const dragStarted = (e4) => { if (selectedFiles2.length > 1) { const files = selectedFiles2.map((f4) => f4.file).filter((f4) => f4); app.dragManager.onDragStart(e4, { icon: "lucide-files", source: void 0, title: i18n_default.labels.filesCount.replace("{$1}", files.length.toString()), type: "files", files }); app.dragManager.dragFiles(e4, files, true); return; } const file = getAbstractFileAtPath(app, data.item.path); if (file instanceof import_obsidian35.TFolder) { app.dragManager.onDragStart(e4, { icon: "lucide-folder", source: void 0, title: file.name, type: "folder", file }); app.dragManager.dragFolder(e4, file, true); return; } app.dragManager.onDragStart(e4, { icon: "lucide-file", source: void 0, title: file.name, type: "file", file }); app.dragManager.dragFile(e4, file, true); }; const innerProps = !platformIsMobile() ? { draggable: true, onDragStart: dragStarted } : handleProps; return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { className: (0, import_classnames6.default)( "mk-tree-wrapper", clone && "mk-clone", ghost && "mk-ghost", disableSelection && "mk-disable-selection", disableInteraction && "mk-disable-interaction" ), ref: wrapperRef, style }, /* @__PURE__ */ bn.createElement("div", { className: indicator && (0, import_classnames6.default)( "nav-file", indicator.state == 2 /* Bottom */ ? "mk-indicator-bottom" : indicator.state == 1 /* Top */ ? "mk-indicator-top" : indicator.state == 3 /* Row */ ? "mk-indicator-row" : "" ), style: indicator ? { "--spacing": `${indentationWidth * indicator.depth}px` } : {} }, !platformIsMobile() && /* @__PURE__ */ bn.createElement("div", { className: "mk-drag-handle", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-handle"] }, ...handleProps }), /* @__PURE__ */ bn.createElement("div", { className: (0, import_classnames6.default)( `mk-tree-item ${data.item.folder == "true" ? "nav-folder-title" : "nav-file-title"} ${active && "is-active"} ${selected && "is-selected"}` ), ref, style: { "--spacing": `${indentationWidth * depth - 28}px` }, onClick: (e4) => openFileAtTarget(data, e4), "data-path": data.item.path, onContextMenu: (e4) => selectedFiles2.length > 1 && selectedFiles2.some((f4) => f4.id == data.id) ? triggerMultiFileMenu(plugin, selectedFiles2, e4) : triggerFileMenu( plugin, data.file, data.item.folder == "true", e4 ), ...innerProps }, data.item.folder == "true" && /* @__PURE__ */ bn.createElement("button", { "aria-label": `${collapsed ? i18n_default.labels.expand : i18n_default.labels.collapse}`, className: `mk-collapse ${collapsed ? "mk-collapsed" : ""}`, onClick: (e4) => { onCollapse(data); e4.stopPropagation(); }, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-collapse"] } }), plugin.settings.spacesStickers && /* @__PURE__ */ bn.createElement(FileSticker, { plugin, filePath: data.item.path }), /* @__PURE__ */ bn.createElement("div", { className: `mk-tree-text ${data.item.folder == "true" ? "nav-folder-title-content" : "nav-file-title-content"}` }, data.file ? data.item.folder == "true" ? data.file.name : fileNameToString(data.file.name) : "", data.item.folder == "false" && data.file && data.file.extension != "md" && /* @__PURE__ */ bn.createElement("span", { className: "nav-file-tag" }, (_a2 = data.file) == null ? void 0 : _a2.extension)), !clone ? /* @__PURE__ */ bn.createElement("div", { className: "mk-folder-buttons" }, /* @__PURE__ */ bn.createElement("button", { "aria-label": i18n_default.buttons.moreOptions, onClick: (e4) => { triggerFileMenu( plugin, data.file, data.item.folder == "true", e4 ); e4.stopPropagation(); }, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-options"] } }), data.item.folder == "true" && /* @__PURE__ */ bn.createElement("button", { "aria-label": i18n_default.buttons.newNote, onClick: (e4) => { newFileInFolder(plugin, data.file); e4.stopPropagation(); }, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-plus"] } })) : /* @__PURE__ */ bn.createElement(bn.Fragment, null))))); } ); TreeItem.displayName = "TreeItem"; // src/hooks/ForceUpdate.tsx function useForceUpdate() { const [value, setValue] = p2(0); return () => setValue((value2) => value2 + 1); } // src/components/Spaces/TreeView/FileExplorerVirtualized.tsx var import_obsidian36 = require("obsidian"); // src/utils/ui/dnd.ts function getMaxDepth({ previousItem }) { var _a2; if (previousItem) { if (((_a2 = previousItem.item) == null ? void 0 : _a2.folder) == "true") return previousItem.depth + 1; return previousItem.depth; } return 0; } function getMinDepth({ nextItem }) { if (nextItem) { return nextItem.depth; } return 0; } function getDragDepth(offset, indentationWidth) { return Math.round(offset / indentationWidth) + 1; } function getProjection(items, activeItem, overItemIndex, previousItem, nextItem, dragDepth) { const activeIsSection = activeItem.parentId == null; const overIsSection = previousItem.parentId == null; if (activeIsSection) { if (overIsSection) { return { depth: 0, maxDepth: 0, minDepth: 0, overId: previousItem.id, parentId: null }; } return null; } if (nodeIsAncestorOfTarget(activeItem, previousItem)) { return null; } if (activeItem.space != previousItem.space) { if (previousItem.space == "/") { return null; } } const projectedDepth = dragDepth; const maxDepth = getMaxDepth({ previousItem }); const minDepth = getMinDepth({ nextItem }); let depth = projectedDepth; if (projectedDepth >= maxDepth) { depth = maxDepth; } else if (projectedDepth < minDepth) { depth = minDepth; } if (previousItem.space != "/" && depth > 1) { return null; } if (depth <= activeItem.depth && activeItem.space == previousItem.space) { if (!activeItem.sortable || !previousItem.sortable) { return null; } } return { depth, maxDepth, minDepth, overId: previousItem.id, parentId: getParentId() }; function getParentId() { var _a2, _b2; if (depth === 0) { return previousItem.space == "/" ? "/" : previousItem.space + "//"; } if (!previousItem) { return "/"; } if (depth === previousItem.depth || depth > previousItem.depth && ((_a2 = previousItem.item) == null ? void 0 : _a2.folder) != "true") { return previousItem.parentId; } if (depth > previousItem.depth) { return previousItem.id; } const newParent = (_b2 = items.slice(0, overItemIndex).reverse().find((item) => item.depth === depth)) == null ? void 0 : _b2.parentId; return newParent != null ? newParent : null; } } // src/components/Spaces/TreeView/FileExplorerVirtualized.tsx var VirtualizedList = bn.memo( (props2) => { const { flattenedTree, projected, vRef, selectedFiles: selectedFiles2, activeFile: activeFile2, selectRange: selectRange2, handleCollapse, plugin, indentationWidth } = props2; const parentRef = bn.useRef(null); const rowHeight = (index) => platformIsMobile() ? flattenedTree[index].parentId == null ? 52 : 40 : flattenedTree[index].parentId == null ? 40 : 29; const rowVirtualizer = useVirtual({ size: flattenedTree.length, paddingEnd: 24, parentRef, estimateSize: bn.useCallback( (index) => rowHeight(index), [flattenedTree] ), overscan: plugin.settings.spacesPerformance ? 0 : 20 }); vRef.current = rowVirtualizer; rowVirtualizer.scrollToIndex; return /* @__PURE__ */ bn.createElement("div", { ref: parentRef, style: { width: `100%`, height: `100%`, overflow: "auto" } }, /* @__PURE__ */ bn.createElement("div", { style: { height: `${rowVirtualizer.totalSize}px`, width: "100%", position: "relative" } }, rowVirtualizer.virtualItems.map((virtualRow) => { var _a2; return /* @__PURE__ */ bn.createElement("div", { key: virtualRow.index, ref: virtualRow.measureRef, style: { position: "absolute", top: 0, left: 0, width: "100%", height: `${rowHeight(virtualRow.index)}px`, transform: `translateY(${virtualRow.start}px)` } }, /* @__PURE__ */ bn.createElement(SortableTreeItem, { key: flattenedTree[virtualRow.index].id, id: flattenedTree[virtualRow.index].id, data: flattenedTree[virtualRow.index], disabled: false, depth: flattenedTree[virtualRow.index].depth, childCount: 0, indentationWidth, indicator: (projected == null ? void 0 : projected.overId) == flattenedTree[virtualRow.index].id ? flattenedTree[virtualRow.index].parentId == null && projected.parentId == null ? { state: 1 /* Top */, depth: projected.depth } : { state: 2 /* Bottom */, depth: projected.depth } : null, plugin, style: {}, onSelectRange: selectRange2, active: activeFile2 == ((_a2 = flattenedTree[virtualRow.index].item) == null ? void 0 : _a2.path), selected: selectedFiles2.some( (g4) => g4.id == flattenedTree[virtualRow.index].id ), collapsed: flattenedTree[virtualRow.index].collapsed, onCollapse: handleCollapse })); }))); } ); var FileExplorerComponent = (props2) => { const { plugin } = props2; const indentationWidth = 24; const isMobile = platformIsMobile(); const [vaultItems, setVaultItems] = p2({}); const [expandedFolders2, setExpandedFolders] = p2(plugin.settings.expandedFolders); const [expandedSpaces, setExpandedSpaces] = p2( plugin.settings.expandedSpaces ); const [activeFile2, setActiveFile] = Recoil_index_14(activeFile); const [spaces2, setSpaces] = Recoil_index_14(spaces); const [vaultSort, setVaultSort] = p2( plugin.settings.vaultSort.length == 2 ? plugin.settings.vaultSort : ["rank", true] ); const [selectedFiles2, setSelectedFiles] = Recoil_index_14( selectedFiles ); const nextTreeScrollPath = _2(null); const activeSpaces = F( () => props2.activeSpace ? spaces2.filter((f4) => f4.name == props2.activeSpace) : spaces2.filter((f4) => f4.pinned != "true"), [spaces2, props2.activeSpace] ); const [offsetLeft, setOffsetLeft] = p2(0); const listRef = _2(null); const forceUpdate = useForceUpdate(); const treeForSpace = (space) => { var _a2, _b2; let tree = []; const spaceCollapsed = !expandedSpaces.includes(space.name); const spaceSort = (_a2 = safelyParseJSON(space.sort)) != null ? _a2 : ["rank", true]; tree.push(spaceItemToTreeNode(space, spaceCollapsed, spaceSort)); if (!spaceCollapsed) ((_b2 = vaultItems[space.name + "/"]) != null ? _b2 : []).sort(folderSortFn(spaceSort[0], spaceSort[1])).forEach((item) => { var _a3, _b3; const itemCollapsed = !((_a3 = expandedFolders2[space.name]) == null ? void 0 : _a3.includes( item.path )); tree.push( vaulItemToTreeNode( item, space.name, "", 1, 0, itemCollapsed, spaceSort[0] == "rank" || spaceSort[0] == "" ) ); if (!itemCollapsed) tree.push( ...flattenedTreeFromVaultItems( item.path, space.name, vaultItems, (_b3 = expandedFolders2[space.name]) != null ? _b3 : [], 2, spaceSort[0], spaceSort[1] ) ); }); return tree; }; const flattenedTree = F(() => { var _a2; let tree = []; activeSpaces.forEach((space) => { tree.push(...treeForSpace(space)); }); if (!props2.activeSpace) { const vaultCollapsed = !expandedSpaces.includes("/"); tree.push({ id: "/", parentId: null, depth: 0, index: 0, space: "/", item: null, collapsed: vaultCollapsed, sortable: vaultSort[0] == "rank" }); if (!vaultCollapsed) tree.push( ...flattenedTreeFromVaultItems( "/", "/", vaultItems, (_a2 = expandedFolders2["/"]) != null ? _a2 : [], 1, vaultSort[0], vaultSort[1] ) ); } if (nextTreeScrollPath.current) { const index = tree.findIndex( (f4) => { var _a3; return ((_a3 = f4.item) == null ? void 0 : _a3.path) == nextTreeScrollPath.current; } ); if (index != -1) { listRef.current.scrollToIndex(index); nextTreeScrollPath.current = null; } } return tree; }, [ vaultItems, activeSpaces, expandedSpaces, expandedFolders2, vaultSort, props2.activeSpace ]); h2(() => { if (selectedFiles2.length <= 1) { if (!selectedFiles2[0] || selectedFiles2[0].item.path != activeFile2) setSelectedFiles([]); if (plugin.settings.revealActiveFile) revealFile(getAbstractFileAtPath(app, activeFile2)); } window.addEventListener(eventTypes.activeFileChange, changeActiveFile); return () => { window.removeEventListener(eventTypes.activeFileChange, changeActiveFile); }; }, [activeFile2]); h2(() => { window.addEventListener(eventTypes.refreshView, forceUpdate); window.addEventListener(eventTypes.settingsChanged, settingsChanged); window.addEventListener(eventTypes.revealFile, handleRevealFileEvent); return () => { window.removeEventListener(eventTypes.refreshView, forceUpdate); window.removeEventListener(eventTypes.settingsChanged, settingsChanged); window.removeEventListener(eventTypes.revealFile, handleRevealFileEvent); }; }, []); const revealFile = (file) => { var _a2, _b2; if (!file) return; const folders = file.path.split("/"); const openPaths = folders.reduce( (p3, c4, index) => [...p3, index == 0 ? c4 : `${p3[index]}/${c4}`], ["/"] ).slice(0, -1); const newOpenFolders = [ ...(_b2 = (_a2 = expandedFolders2["/"]) == null ? void 0 : _a2.filter((f4) => !openPaths.find((g4) => g4 == f4))) != null ? _b2 : [], ...openPaths ]; plugin.settings.expandedFolders = { ...expandedFolders2, "/": newOpenFolders }; nextTreeScrollPath.current = file.path; plugin.saveSettings(); }; const handleRevealFileEvent = (evt) => { if (evt.detail) revealFile(evt.detail.file); }; h2(() => { const spaceItems = retrieveSpaceItems(plugin, spaces2); setVaultItems((g4) => ({ ...g4, ...Object.keys(spaceItems).reduce( (p3, c4) => ({ ...p3, [c4 + "/"]: spaceItems[c4].map((f4) => { var _a2; return { ...(_a2 = vaultItemForPath(plugin, f4.path)) != null ? _a2 : {}, ...f4 }; }) }), {} ) })); }, [spaces2]); const retrieveData = async (folders) => { setSpaces(retrieveSpaces(plugin)); retrieveFolders(plugin, folders).then( (f4) => setVaultItems((g4) => ({ ...g4, ...f4 })) ); }; const flatFolders = F(() => { let allFolders = []; if (expandedSpaces.includes("/")) allFolders.push("/"); expandedSpaces.forEach((space) => { var _a2; allFolders.push(...(_a2 = expandedFolders2[space]) != null ? _a2 : []); }); return allFolders; }, [expandedSpaces, expandedFolders2]); h2(() => { const newFolders = flatFolders; retrieveData(newFolders); window.addEventListener(eventTypes.spacesChange, spaceChangeEvent); return () => { window.removeEventListener(eventTypes.spacesChange, spaceChangeEvent); }; }, [flatFolders]); const spaceChangeEvent = (evt) => { if (evt.detail.changeType == "vault" || evt.detail.changeType == "space") { retrieveData(flatFolders); } }; const changeActiveFile = (evt) => { let filePath = evt.detail.filePath; setActiveFile(filePath); }; const settingsChanged = () => { setVaultSort(plugin.settings.vaultSort); setExpandedFolders(plugin.settings.expandedFolders); setExpandedSpaces(plugin.settings.expandedSpaces); }; h2(() => { settingsChanged(); }, []); const [activeId, setActiveId] = p2(null); const [overId, setOverId] = p2(null); const [currentPosition, setCurrentPosition] = p2(null); h2(() => { if (!expandedSpaces.includes(props2.activeSpace)) { plugin.settings.expandedSpaces = uniq([ ...plugin.settings.expandedSpaces, props2.activeSpace ]); plugin.saveSettings(); } }, [props2.activeSpace]); const sortedIds = F( () => flattenedTree.map(({ id: id2 }) => id2), [flattenedTree] ); const selectRange2 = (fromId) => { const startIndex = sortedIds.findIndex((f4) => f4 == fromId); const selectedFilesStartIndex = sortedIds.findIndex( (f4) => { var _a2; return f4 == ((_a2 = selectedFiles2[0]) == null ? void 0 : _a2.id); } ); const selectedFilesEndIndex = sortedIds.findIndex( (f4) => { var _a2; return f4 == ((_a2 = selectedFiles2[selectedFiles2.length - 1]) == null ? void 0 : _a2.id); } ); if (startIndex < selectedFilesStartIndex) { setSelectedFiles( flattenedTree.slice(startIndex, selectedFilesEndIndex + 1).filter((f4) => f4.item) ); } else { setSelectedFiles( flattenedTree.slice(selectedFilesStartIndex, startIndex + 1).filter((f4) => f4.item) ); } }; const activeItem = activeId ? flattenedTree.find(({ id: id2 }) => id2 === activeId) : null; const overIndex = overId ? flattenedTree.findIndex(({ id: id2 }) => id2 === overId) : null; const overItem = flattenedTree[overIndex]; const nextItem = flattenedTree[overIndex + 1]; const dragDepth = F(() => { return getDragDepth(offsetLeft, indentationWidth); }, [offsetLeft]); const projected = F(() => { return activeId && overId ? getProjection( flattenedTree, activeItem, overIndex, overItem, nextItem, dragDepth ) : null; }, [flattenedTree, activeItem, overItem, nextItem, overIndex, dragDepth]); function handleDragStart(event) { const { active: { id: activeId2 } } = event; const activeItem2 = flattenedTree.find(({ id: id2 }) => id2 === activeId2); if (activeItem2.parentId == null && activeItem2.space == "/") return; setActiveId(activeId2); setOverId(activeId2); if (activeItem2) { setCurrentPosition({ parentId: activeItem2.parentId, overId: activeId2 }); } document.body.style.setProperty("cursor", "grabbing"); } function handleDragMove({ delta }) { setOffsetLeft(Math.max(1, delta.x)); } function handleDragOver({ over }) { var _a2; const overId2 = over == null ? void 0 : over.id; if (overId2) { setOverId((_a2 = over == null ? void 0 : over.id) != null ? _a2 : null); } } function handleDragEnd({ active, over }) { resetState(); moveFile(active, over); } const moveFile = async (active, over) => { var _a2, _b2; if (projected) { const clonedItems = flattenedTree; const overIndex2 = clonedItems.findIndex(({ id: id2 }) => id2 === over.id); const overItem2 = clonedItems[overIndex2]; const activeIndex = clonedItems.findIndex(({ id: id2 }) => id2 === active.id); const activeTreeItem = clonedItems[activeIndex]; const activeIsSection = activeTreeItem.parentId == null; const overIsSection = overItem2.parentId == null; const overSpace = activeSpaces.find( (f4) => f4.name == overItem2.space ); if (activeIsSection) { if (overIsSection) { insertSpaceAtIndex( plugin, activeTreeItem.space, false, overSpace ? parseInt(overSpace.rank) : spaces2.length ); return; } } const { depth, overId: overId2, parentId } = projected; const parentItem = clonedItems.find(({ id: id2 }) => id2 === parentId); if (overItem2.space != activeItem.space || overItem2.space != "/") { if (overItem2.space == "/") { return; } if (parentId != overItem2.space + "//" && parentId != null) { return; } if (activeItem.space != overItem2.space && ((_a2 = overSpace == null ? void 0 : overSpace.def) == null ? void 0 : _a2.length) > 0) { moveAFileToNewParentAtIndex( plugin, activeTreeItem.item, overSpace.def, vaultItems, parseInt(overItem2.item.rank) ); } else { insertSpaceItemAtIndex( plugin, overItem2.space, activeItem.item.path, parseInt((_b2 = overItem2.item) == null ? void 0 : _b2.rank) ); } return; } if (parentId != activeTreeItem.parentId) { if (overIsSection) { updateFileRank( plugin, activeTreeItem.item, vaultItems, -1 ); return; } const newParent = parentItem ? parentItem.item.folder == "true" ? parentItem.item.path : parentItem.item.parent : "/"; const newPath = newParent == "/" ? activeItem.file.name : `${newParent}/${activeItem.file.name}`; if (plugin.app.vault.getAbstractFileByPath(newPath)) { new import_obsidian36.Notice(i18n_default.notice.duplicateFile); return; } moveAFileToNewParentAtIndex( plugin, activeTreeItem.item, newParent, vaultItems, parseInt(overItem2.item.rank) ); } else { updateFileRank( plugin, activeTreeItem.item, vaultItems, parseInt(overItem2.item.rank) ); } } }; const adjustTranslate = ({ transform }) => { return { ...transform, x: transform.x, y: transform.y - 10 }; }; function handleDragCancel() { resetState(); } const handleCollapse = T2( (folder) => { var _a2; if (folder.parentId == null) { if (plugin.settings.expandedSpaces.includes(folder.space)) plugin.settings.expandedSpaces = plugin.settings.expandedSpaces.filter((f4) => f4 != folder.space); else plugin.settings.expandedSpaces = [ ...plugin.settings.expandedSpaces, folder.space ]; plugin.saveSettings(); } else { const openFolders = (_a2 = expandedFolders2[folder.space]) != null ? _a2 : []; const folderOpen = openFolders == null ? void 0 : openFolders.includes(folder.item.path); const newOpenFolders = !folderOpen ? [...openFolders, folder.item.path] : openFolders.filter( (openFolder) => folder.item.path !== openFolder ); plugin.settings.expandedFolders = { ...expandedFolders2, [folder.space]: newOpenFolders }; plugin.saveSettings(); } }, [plugin, expandedFolders2, expandedSpaces] ); function resetState() { setOverId(null); setActiveId(null); setOffsetLeft(0); document.body.style.setProperty("cursor", ""); } useDndMonitor({ onDragStart: handleDragStart, onDragMove: handleDragMove, onDragOver: handleDragOver, onDragEnd: handleDragEnd, onDragCancel: handleDragCancel }); return /* @__PURE__ */ bn.createElement("div", { className: "mk-file-tree" }, /* @__PURE__ */ bn.createElement(SortableContext, { items: sortedIds, strategy: verticalListSortingStrategy }, /* @__PURE__ */ bn.createElement(VirtualizedList, { vRef: listRef, flattenedTree, projected, handleCollapse, activeFile: activeFile2, plugin, selectedFiles: selectedFiles2, selectRange: selectRange2, indentationWidth }), j3( /* @__PURE__ */ bn.createElement(DragOverlay, { dropAnimation: null, modifiers: [adjustTranslate], zIndex: 1600 }, activeId ? /* @__PURE__ */ bn.createElement(SortableTreeItem, { id: activeId, data: flattenedTree.find((f4) => f4.id == activeId), indicator: null, depth: 0, disabled: false, plugin, selected: false, active: false, clone: true, childCount: 0, style: {}, indentationWidth }) : null), document.body ))); }; // src/components/Spaces/SpaceSwitcher/SpaceSwitcher.tsx var import_classnames7 = __toESM(require_classnames()); var SpaceSwitcher = (props2) => { const [activeView2, setActiveView] = Recoil_index_14(activeView); const [spaces2, setSpaces] = Recoil_index_14(spaces); const [activeFile2, setActiveFile] = Recoil_index_14(activeFile); const folder = defaultNoteFolder(props2.plugin, activeFile2); const { plugin } = props2; const newFile = async () => { await createNewMarkdownFile(props2.plugin, folder, "", ""); }; const pinnedSpaces = F( () => spaces2.filter((f4) => f4.pinned == "true"), [spaces2] ); const [activeViewSpace2, setActiveViewSpace] = Recoil_index_14( activeViewSpace ); const newSection = () => { let vaultChangeModal = new EditSpaceModal(props2.plugin, "", "create"); vaultChangeModal.open(); }; return props2.plugin.settings.spacesCompactMode ? /* @__PURE__ */ bn.createElement("div", { className: "mk-flow-bar-compact" }, /* @__PURE__ */ bn.createElement(MainMenu, { plugin: props2.plugin }), /* @__PURE__ */ bn.createElement("button", { "aria-label": i18n_default.buttons.newNote, className: "mk-inline-button", onClick: () => newFile() }, /* @__PURE__ */ bn.createElement("div", { className: "mk-icon-small", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-new-note"] } })), /* @__PURE__ */ bn.createElement("button", { "aria-label": "Blink", className: "mk-inline-button", onClick: () => props2.plugin.quickOpen() }, /* @__PURE__ */ bn.createElement("div", { className: "mk-icon-small", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-blink"] } }))) : /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { className: "mk-flow-bar" }, /* @__PURE__ */ bn.createElement("button", { "aria-label": i18n_default.buttons.newNote, className: "mk-new-note", onClick: () => newFile() }, /* @__PURE__ */ bn.createElement("div", { dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-new-note"] } }), /* @__PURE__ */ bn.createElement("p", null, i18n_default.buttons.newNote)), /* @__PURE__ */ bn.createElement("button", { "aria-label": i18n_default.buttons.blink, className: "mk-button-blink", onClick: () => props2.plugin.quickOpen() }, /* @__PURE__ */ bn.createElement("div", { dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-blink"] } }))), /* @__PURE__ */ bn.createElement("div", { className: "mk-sidebar-switcher" }, /* @__PURE__ */ bn.createElement("div", { className: (0, import_classnames7.default)( "mk-sidebar-item", pinnedSpaces.length == 0 && "mk-sidebar-expanded", activeView2 == "root" && "mk-sidebar-item-active" ), onClick: () => setActiveView("root") }, /* @__PURE__ */ bn.createElement("div", { className: "mk-icon-small", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-spaces"] } }, " "), pinnedSpaces.length == 0 && /* @__PURE__ */ bn.createElement("div", null, "Spaces")), /* @__PURE__ */ bn.createElement("div", { className: (0, import_classnames7.default)( "mk-sidebar-item", pinnedSpaces.length == 0 && "mk-sidebar-expanded", activeView2 == "tags" && "mk-sidebar-item-active" ), onClick: () => setActiveView("tags") }, /* @__PURE__ */ bn.createElement("div", { className: "mk-icon-small", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-tags"] } }, " "), " ", pinnedSpaces.length == 0 && /* @__PURE__ */ bn.createElement("div", null, "Contexts")), /* @__PURE__ */ bn.createElement("div", { className: "mk-sidebar-spaces" }, pinnedSpaces.map((pin) => { var _a2; return /* @__PURE__ */ bn.createElement("div", { onContextMenu: (e4) => triggerSectionMenu(props2.plugin, pin.name, spaces2, e4), className: (0, import_classnames7.default)( "mk-sidebar-item mk-sidebar-space", activeView2 == "space" && activeViewSpace2 == pin.name && "mk-sidebar-item-active" ), onClick: () => (setActiveView("space"), setActiveViewSpace(pin.name)), dangerouslySetInnerHTML: ((_a2 = pin.sticker) == null ? void 0 : _a2.length) > 0 ? { __html: unifiedToNative(pin.sticker) } : null }, pin.name.substring(0, 1)); })), /* @__PURE__ */ bn.createElement("div", { className: (0, import_classnames7.default)("mk-sidebar-item"), onClick: () => newSection() }, /* @__PURE__ */ bn.createElement("div", { className: "mk-icon-small", dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-new-space"] } }, " ")))); }; // src/components/Spaces/TagContextList/TagContextList.tsx var import_lodash6 = __toESM(require_lodash()); var import_obsidian37 = require("obsidian"); var TagContextList = (props2) => { const [tags, setTags] = p2([]); const openContext = async (tag) => { openTag(tag, props2.plugin, false); }; h2(() => { window.addEventListener(eventTypes.tagsChange, refreshTags); return () => { window.removeEventListener(eventTypes.tagsChange, refreshTags); }; }, []); const refreshTags = () => { var _a2; const folder = props2.plugin.settings.tagContextFolder == "" ? app.vault.getRoot() : getAbstractFileAtPath( app, getFolderPathFromString(props2.plugin.settings.tagContextFolder) ); const f4 = (_a2 = folder == null ? void 0 : folder.children.filter( (f5) => f5 instanceof import_obsidian37.TFile && f5.extension == "mdb" && f5.name.charAt(0) == "#" ).map((f5) => fileNameToString(f5.name))) != null ? _a2 : []; Promise.all(f4.map((t4) => contextShouldExist(props2.plugin, t4).then((g4) => g4 ? t4 : null))).then((f5) => setTags((0, import_lodash6.uniq)([...f5.filter((g4) => g4), ...Object.keys(app.metadataCache.getTags())]))); }; h2(() => { refreshTags(); }, []); return /* @__PURE__ */ bn.createElement("div", { className: "tag-container" }, /* @__PURE__ */ bn.createElement("div", { className: "tree-item" }, tags.map((f4) => /* @__PURE__ */ bn.createElement("div", { className: "tree-item-self is-clickable", onClick: () => openContext(f4) }, f4)))); }; // src/components/Spaces/MainList.tsx var MainList = (props2) => { const [activeView2, setActiveView] = Recoil_index_14(activeView); const [spaces2, setSpaces] = Recoil_index_14(spaces); const [activeViewSpace2, setActiveViewSpace] = Recoil_index_14( activeViewSpace ); const [error, resetError] = P2(); if (error) console.log(error); h2(() => { if (activeView2 == "space" && !spaces2.some((f4) => f4.name == activeViewSpace2 && f4.pinned == "true")) { setActiveView("root"); } }, [spaces2]); const sensors = useSensors( useSensor(MouseSensor, { activationConstraint: { distance: 10 } }), useSensor(TouchSensor, { activationConstraint: { delay: 250, tolerance: 5 } }) ); const measuring = { droppable: { strategy: MeasuringStrategy.Always } }; const viewForState = (viewType, space) => { if (viewType == "root") { return /* @__PURE__ */ bn.createElement(FileExplorerComponent, { plugin: props2.plugin }); } else if (viewType == "tags") { return /* @__PURE__ */ bn.createElement(TagContextList, { plugin: props2.plugin }); } else if (viewType == "space") { return /* @__PURE__ */ bn.createElement(FileExplorerComponent, { plugin: props2.plugin, activeSpace: space }); } return /* @__PURE__ */ bn.createElement(FileExplorerComponent, { plugin: props2.plugin }); }; return /* @__PURE__ */ bn.createElement(DndContext, { sensors, collisionDetection: closestCenter, measuring }, /* @__PURE__ */ bn.createElement(SpaceSwitcher, { plugin: props2.plugin }), viewForState(activeView2, activeViewSpace2)); }; // src/components/Spaces/FileTreeView.tsx var FILE_TREE_VIEW_TYPE = "mk-file-view"; var VIEW_DISPLAY_TEXT = "Spaces"; var ICON = "layout-grid"; var FileTreeView = class extends import_obsidian38.ItemView { constructor(leaf, plugin) { super(leaf); this.navigation = false; this.plugin = plugin; } revealInFolder(file) { if (file instanceof import_obsidian38.TFolder) { this.plugin.app.workspace.activeLeaf.setViewState({ type: CONTEXT_VIEW_TYPE, state: { type: "folder", folder: file.path } }); this.plugin.app.workspace.requestSaveLayout(); } else { let evt = new CustomEvent(eventTypes.revealFile, { detail: { file } }); window.dispatchEvent(evt); } } getViewType() { return FILE_TREE_VIEW_TYPE; } getDisplayText() { return VIEW_DISPLAY_TEXT; } getIcon() { return ICON; } async onClose() { let leafs = this.app.workspace.getLeavesOfType(FILE_TREE_VIEW_TYPE); if (leafs.length == 0) { let leaf = this.app.workspace.getLeftLeaf(false); await leaf.setViewState({ type: FILE_TREE_VIEW_TYPE }); } this.destroy(); } destroy() { if (this.root) this.root.unmount(); } async onOpen() { this.destroy(); this.constructFileTree(this.app.vault.getRoot().path, ""); } constructFileTree(folderPath, vaultChange) { this.destroy(); this.root = createRoot(this.contentEl); this.root.render( /* @__PURE__ */ bn.createElement("div", { className: "mk-sidebar" }, /* @__PURE__ */ bn.createElement(Recoil_index_2, null, !platformIsMobile() && !this.plugin.settings.spacesCompactMode ? /* @__PURE__ */ bn.createElement(MainMenu, { plugin: this.plugin }) : null, /* @__PURE__ */ bn.createElement(MainList, { plugin: this.plugin }))) ); } }; // src/settings.ts var import_obsidian39 = require("obsidian"); var DEFAULT_SETTINGS = { filePreviewOnHover: false, markSans: false, makeMenuPlaceholder: true, mobileMakeBar: true, inlineStyler: true, makerMode: true, inlineStylerColors: false, editorFlow: true, internalLinkClickFlow: true, saveAllContextToFrontmatter: false, editorFlowStyle: "seamless", autoOpenFileContext: false, spacesCompactMode: false, spacesEnabled: true, spacesPerformance: false, enableFolderNote: true, revealActiveFile: false, spacesStickers: true, spacesDisablePatch: false, folderNoteInsideFolder: true, sidebarTabs: true, showRibbon: true, deleteFileOption: "trash", expandedFolders: {}, expandedSpaces: ["/"], folderRank: { node: "root", children: [], isFolder: true }, openFolders: [], fileIcons: [], spaces: [], pinnedSpaces: [], menuTriggerChar: "/", emojiTriggerChar: ":", folderContextFile: "context", tagContextFolder: "Context", hiddenFiles: ["Context"], hiddenExtensions: ["mdb"], vaultSort: ["rank", true], newFileLocation: "root", newFileFolderPath: "" }; var MakeMDPluginSettingsTab = class extends import_obsidian39.PluginSettingTab { constructor(app2, plugin) { super(app2, plugin); this.plugin = plugin; } refreshView() { let evt = new CustomEvent(eventTypes.refreshView, {}); window.dispatchEvent(evt); } display() { let { containerEl } = this; containerEl.empty(); containerEl.createEl("h2", { text: i18n_default.settings.sectionAppearance }); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.sidebarTabs.name).setDesc(i18n_default.settings.sidebarTabs.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.sidebarTabs).onChange((value) => { this.plugin.settings.sidebarTabs = value; this.plugin.saveSettings(); document.body.classList.toggle("mk-hide-tabs", !value); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.hideRibbon.name).setDesc(i18n_default.settings.hideRibbon.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.showRibbon).onChange((value) => { this.plugin.settings.showRibbon = value; this.plugin.saveSettings(); document.body.classList.toggle("mk-hide-ribbon", !value); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.compactMode.name).setDesc(i18n_default.settings.compactMode.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.spacesCompactMode).onChange((value) => { this.plugin.settings.spacesCompactMode = value; this.plugin.detachFileTreeLeafs(); this.plugin.saveSettings(); }) ); containerEl.createEl("h2", { text: i18n_default.settings.sectionSidebar }); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.spaces.name).setDesc(i18n_default.settings.spaces.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.spacesEnabled).onChange((value) => { this.plugin.settings.spacesEnabled = value; this.plugin.saveSettings(); if (value) { this.plugin.openFileTreeLeaf(true); } else { this.plugin.detachFileTreeLeafs(); } this.refreshView(); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.spacesStickers.name).setDesc(i18n_default.settings.spacesStickers.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.spacesStickers).onChange((value) => { this.plugin.settings.spacesStickers = value; this.plugin.saveSettings(); this.refreshView(); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.folderNote.name).setDesc(i18n_default.settings.folderNote.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.enableFolderNote).onChange((value) => { this.plugin.settings.enableFolderNote = value; this.plugin.saveSettings(); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.activeFile.name).setDesc(i18n_default.settings.activeFile.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.revealActiveFile).onChange((value) => { this.plugin.settings.revealActiveFile = value; this.plugin.saveSettings(); }) ); containerEl.createEl("h2", { text: "Context" }); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.openFileContext.name).setDesc(i18n_default.settings.openFileContext.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.autoOpenFileContext).onChange((value) => { this.plugin.settings.autoOpenFileContext = value; this.plugin.saveSettings(); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.syncContextToFrontmatter.name).setDesc(i18n_default.settings.syncContextToFrontmatter.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.saveAllContextToFrontmatter).onChange((value) => { this.plugin.settings.saveAllContextToFrontmatter = value; this.plugin.saveSettings(); }) ); containerEl.createEl("h2", { text: i18n_default.settings.sectionFlow }); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.internalLinkFlowEditor.name).setDesc(i18n_default.settings.internalLinkFlowEditor.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.internalLinkClickFlow).onChange((value) => { this.plugin.settings.internalLinkClickFlow = value; this.plugin.saveSettings(); this.refreshView(); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.editorFlowReplace.name).setDesc(i18n_default.settings.editorFlowReplace.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.editorFlow).onChange((value) => { this.plugin.settings.editorFlow = value; this.plugin.saveSettings(); this.refreshView(); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.editorFlowStyle.name).setDesc(i18n_default.settings.editorFlowStyle.desc).addDropdown((dropdown) => { dropdown.addOption("classic", i18n_default.settings.editorFlowStyle.classic); dropdown.addOption("seamless", i18n_default.settings.editorFlowStyle.seamless); dropdown.addOption("minimal", i18n_default.settings.editorFlowStyle.minimal); dropdown.setValue(this.plugin.settings.editorFlowStyle).onChange(async (value) => { this.plugin.settings.editorFlowStyle = value; document.body.classList.toggle("mk-flow-classic", false); document.body.classList.toggle("mk-flow-seamless", false); document.body.classList.toggle("mk-flow-minimal", false); if (value == "seamless") document.body.classList.toggle("mk-flow-seamless", true); if (value == "classic") document.body.classList.toggle("mk-flow-classic", true); if (value == "minimal") document.body.classList.toggle("mk-flow-minimal", true); }); }); containerEl.createEl("h2", { text: i18n_default.settings.sectionEditor }); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.editorMakerMode.name).setDesc(i18n_default.settings.editorMakerMode.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.makerMode).onChange((value) => { this.plugin.settings.makerMode = value; this.plugin.saveSettings(); this.refreshView(); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.makeChar.name).setDesc(i18n_default.settings.makeChar.desc).addText((text2) => { text2.setValue(this.plugin.settings.menuTriggerChar).onChange(async (value) => { if (value.trim().length < 1) { text2.setValue(this.plugin.settings.menuTriggerChar); return; } let char = value[0]; if (value.trim().length === 2) { char = value.replace(this.plugin.settings.menuTriggerChar, ""); } text2.setValue(char); this.plugin.settings.menuTriggerChar = char; await this.plugin.saveSettings(); }); }); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.editorMakePlacholder.name).setDesc(i18n_default.settings.editorMakePlacholder.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.makeMenuPlaceholder).onChange((value) => { this.plugin.settings.makeMenuPlaceholder = value; this.plugin.saveSettings(); this.refreshView(); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.mobileMakeBar.name).setDesc(i18n_default.settings.mobileMakeBar.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.mobileMakeBar).onChange((value) => { this.plugin.settings.mobileMakeBar = value; this.plugin.saveSettings(); this.refreshView(); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.inlineStyler.name).setDesc(i18n_default.settings.inlineStyler.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.inlineStyler).onChange((value) => { this.plugin.settings.inlineStyler = value; this.plugin.saveSettings(); this.refreshView(); }) ); containerEl.createEl("h2", { text: i18n_default.settings.sectionAdvanced }); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.spacesFileExplorerDual.name).setDesc(i18n_default.settings.spacesFileExplorerDual.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.spacesDisablePatch).onChange((value) => { this.plugin.settings.spacesDisablePatch = value; this.plugin.saveSettings(); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.folderNoteLocation.name).setDesc(i18n_default.settings.folderNoteLocation.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.folderNoteInsideFolder).onChange((value) => { this.plugin.settings.folderNoteInsideFolder = value; this.plugin.saveSettings(); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.spacesPerformance.name).setDesc(i18n_default.settings.spacesPerformance.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.spacesPerformance).onChange((value) => { this.plugin.settings.spacesPerformance = value; this.plugin.saveSettings(); }) ); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.spacesDeleteOption.name).setDesc(i18n_default.settings.spacesDeleteOption.desc).addDropdown((dropdown) => { dropdown.addOption( "permanent", i18n_default.settings.spacesDeleteOptions.permanant ); dropdown.addOption("trash", i18n_default.settings.spacesDeleteOptions.trash); dropdown.addOption( "system-trash", i18n_default.settings.spacesDeleteOptions["system-trash"] ); dropdown.setValue(this.plugin.settings.deleteFileOption); dropdown.onChange((option) => { this.plugin.settings.deleteFileOption = option; this.plugin.saveSettings(); }); }); new import_obsidian39.Setting(containerEl).setName(i18n_default.settings.inlineStylerColor.name).setDesc(i18n_default.settings.inlineStylerColor.desc).addToggle( (toggle) => toggle.setValue(this.plugin.settings.inlineStylerColors).onChange((value) => { this.plugin.settings.inlineStylerColors = value; this.plugin.saveSettings(); this.refreshView(); }) ); } }; // src/components/Blink/Blink.tsx var import_obsidian40 = require("obsidian"); // src/components/Blink/BlinkComponent.tsx var BlinkComponent = bn.forwardRef( (props2, ref) => { const [previewPath, setPreviewPath] = p2(null); const [allItems, setAllItems] = p2([]); const defaultOptions3 = F( () => app.workspace.getLastOpenFiles().filter((f4) => getAbstractFileAtPath(app, f4)).map((f4) => ({ description: f4, value: f4, name: filePathToString(f4) })), [] ); h2(() => { const allTags = loadTags(props2.plugin).map((f4) => ({ value: f4, name: f4 })); const allNotes = getAllAbstractFilesInVault( props2.plugin, app ).map((f4) => ({ name: fileNameToString(f4.name), description: f4.path, value: f4.path })); setAllItems([...allNotes, ...allTags]); }, []); const loadPreview = (path) => { if (previewPath != path && getAbstractFileAtPath(app, path)) { setPreviewPath(path); } }; const hoverItem = (item) => { loadPreview(item); }; const selectItem = (item) => { if (!item) return; const type = viewTypeByString(item); if (type == "file" || type == "folder") { openAFile(getAbstractFileAtPath(app, item), props2.plugin, false); return; } if (type == "tag") { openTag(item, props2.plugin, false); return; } createNewMarkdownFile( props2.plugin, defaultNoteFolder(props2.plugin, null), item ); }; const optionProps = { multi: false, editable: true, onHover: hoverItem, value: [], options: allItems, defaultOptions: defaultOptions3, saveOptions: (_5, items) => selectItem(items[0]), placeholder: i18n_default.labels.blinkPlaceholder, searchable: true, showAll: true }; return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement(SelectMenu, { ref, ...optionProps, hide: props2.hide, previewComponent: previewPath && /* @__PURE__ */ bn.createElement("div", { className: "mk-blink-preview" }, /* @__PURE__ */ bn.createElement(FlowView, { plugin: props2.plugin, path: previewPath, load: true })) })); } ); // src/components/Blink/Blink.tsx var Blink = class extends import_obsidian40.Modal { constructor(app2, plugin) { super(app2); this.ref = bn.createRef(); this.plugin = plugin; this.modalEl.toggleClass("mk-blink-modal", true); this.modalEl.toggleClass("modal", false); this.modalEl.toggleClass("prompt", true); const keys = [...this.scope.keys]; for (let i4 = 0; i4 < keys.length; i4++) { if (keys[i4].key == "Escape") { this.scope.unregister(keys[i4]); this.scope.register([], "Escape", () => { var _a2; const blurred = (_a2 = this.ref) == null ? void 0 : _a2.current(); if (blurred) { this.close(); } }); } } this.root = createRoot(this.modalEl); this.root.render( /* @__PURE__ */ bn.createElement(BlinkComponent, { ref: this.ref, plugin, hide: () => this.close() }) ); } }; // src/components/ContextView/MDBFileViewer.tsx var import_obsidian41 = require("obsidian"); var MDB_FILE_VIEWER_TYPE = "make-mdb-viewer"; var MDBFileViewer = class extends import_obsidian41.FileView { constructor(leaf, plugin) { super(leaf); this.navigation = true; this.plugin = plugin; } getViewType() { return MDB_FILE_VIEWER_TYPE; } getDisplayText() { var _a2; return (_a2 = this.file) == null ? void 0 : _a2.name; } async onClose() { this.destroy(); } destroy() { if (this.root) this.root.unmount(); } async onOpen() { this.destroy(); } async setState(state, result) { this.file = getAbstractFileAtPath(app, state.file); this.constructInlineContext(); await super.setState(state, result); this.leaf.tabHeaderInnerTitleEl.innerText = this.file.name; this.leaf.view.titleEl = this.file.name; const headerEl = this.leaf.view.headerEl; if (headerEl) { headerEl.querySelector(".view-header-title").innerText = this.file.name; } return; } getState() { let state = super.getState(); state.file = this.file.path; return state; } constructInlineContext() { const mdbTypeByDBPath = (dbpath) => { var _a2; return dbpath.endsWith(((_a2 = this.plugin) == null ? void 0 : _a2.settings.folderContextFile) + ".mdb") ? "folder" : "tag"; }; const type = mdbTypeByDBPath(this.file.path); const folder = type == "tag" ? null : getFolderFromPath(app, this.file.path); const tag = type == "tag" ? filePathToString(this.file.path).replace(".mdb", "") : null; this.destroy(); this.root = createRoot(this.contentEl); this.root.render( /* @__PURE__ */ bn.createElement("div", { className: "mk-folder-view" }, tag ? /* @__PURE__ */ bn.createElement(TagContextViewComponent, { type: "tag", tag, plugin: this.plugin }) : /* @__PURE__ */ bn.createElement(FolderContextViewComponent, { type: "folder", folder, plugin: this.plugin })) ); } }; // src/components/FileContextView/FileContextView.tsx var import_obsidian43 = require("obsidian"); // src/components/FileContextView/FileContextList.tsx var import_lodash7 = __toESM(require_lodash()); var import_obsidian42 = require("obsidian"); var FileContextList = (props2) => { const { path } = props2; const { tableData, newColumn, cols, tagContexts, contextTable, folderPath, isFolderContext, saveColumn, hideColumn, delColumn, sortColumn, updateFieldValue, updateValue, loadContextFields, predicate } = q2(MDBContext); const [collapsed, setCollapsed] = p2(true); const fileContext = F(() => { const td = tableData ? { folder: { cols: tableData.cols.filter( (f4) => f4.name != "File" && f4.type != "fileprop" && f4.hidden != "true" && f4.type != "preview" ), data: tableData.rows.find((r3) => r3.File == path), dataIndex: tableData.rows.findIndex((r3) => r3.File == path) } } : {}; const tags = tagContexts.reduce( (p3, c4) => contextTable[c4] ? { ...p3, [c4]: { cols: contextTable[c4].cols.filter( (f4) => f4.name != "File" && f4.type != "fileprop" && f4.hidden != "true" && f4.type != "preview" ), data: contextTable[c4].rows.find( (r3, index) => index == parseInt(props2.path) ), dataIndex: contextTable[c4].rows.findIndex( (r3) => r3.File == path ) } } : p3, {} ); return { ...tags, ...td }; }, [tableData, contextTable, tagContexts, path]); const showNewMenu = (e4) => { const offset = e4.target.getBoundingClientRect(); const files = [path].map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4 instanceof import_obsidian42.TFile); const types = guestimateTypes( files.map((f4) => f4.path), props2.plugin, false ); const fmFields = files.reduce((p3, c4) => { const fm = frontMatterForFile(c4); const fmKeys = uniqCaseInsensitive(frontMatterKeys(fm)); return (0, import_lodash7.uniq)([...p3, ...fmKeys]); }, []).filter((f4) => !tableData.cols.some((g4) => g4.name == f4)); const allTypes = [ ...fmFields.map((f4) => ({ name: f4, description: i18n_default.labels.syncFrontmatterProperty, value: "fm." + f4 + "." + yamlTypeToMDBType(types[f4]) })), ...fieldTypes.filter((f4) => f4.restricted != true).map((f4) => ({ name: f4.label, description: i18n_default.labels.newProperty, value: "type." + f4.type })) ]; const uniqueNameFromString2 = (name, cols2) => { let newName = name; if (cols2.includes(newName)) { let append = 1; while (cols2.includes(newName)) { newName = name + append.toString(); append += 1; } } return newName; }; const saveOptions = (_5, values) => { const newValue = values[0]; const newType = newValue.split("."); if (newType[0] == "fm") { newColumn({ name: uniqueNameFromString2( newType[1], tableData.cols.map((f4) => f4.name) ), schemaId: tableData.schema.id, table: "", type: newType[2] }); } else if (newType[0] == "type") { newColumn({ name: uniqueNameFromString2( newType[1], tableData.cols.map((f4) => f4.name) ), schemaId: tableData.schema.id, table: "", type: newType[1] }); } }; showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: false, editable: false, value: [], saveOptions, placeholder: i18n_default.labels.propertyItemSelectPlaceholder, searchable: true, options: allTypes, showAll: true } ); }; const saveField = (field, oldField) => { if (field.name.length > 0) { if (field.name != oldField.name || field.type != oldField.type || field.value != oldField.value || field.attrs != oldField.attrs) { const saveResult = saveColumn(field, oldField); } } }; const saveContext = (field, oldField, value) => { const newContext = tagFromString(value[0]); initiateContextIfNotExists(props2.plugin, newContext).then((f4) => { if (f4) { return insertContextItems( props2.plugin, optionValuesForColumn( field.name, field.table == "" ? tableData : contextTable[field.table] ), newContext ); } }).then((f4) => loadContextFields(newContext)); const newField = { ...field, value: newContext != null ? newContext : "" }; saveColumn(newField, oldField); }; const showMenu = (e4, field) => { const offset = e4.target.getBoundingClientRect(); const options = optionValuesForColumn( field.name, field.table == "" ? tableData : contextTable[field.table] ); showPropertyMenu(props2.plugin, { x: offset.left, y: offset.top + 30 }, true, options, field, cols, contextTable, (newField) => saveField(newField, field), (newField, val) => saveContext(newField, field, val), hideColumn, delColumn, sortColumn, predicate.colsHidden.includes(field.name + field.table)); }; return /* @__PURE__ */ bn.createElement(bn.Fragment, null, fileContext.folder && fileContext.folder.data && /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-section" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-title", onClick: (e4) => { setCollapsed(!collapsed); e4.stopPropagation(); } }, /* @__PURE__ */ bn.createElement("button", { className: `mk-collapse mk-inline-button mk-icon-xsmall ${collapsed ? "mk-collapsed" : ""}`, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-collapse"] } }), isFolderContext ? folderPathToString(folderPath) : folderPath), !collapsed ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, fileContext.folder.cols.map((f4, i4) => /* @__PURE__ */ bn.createElement("div", { key: i4, className: "mk-file-context-row" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-bullet" }), /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-field", onClick: (e4) => showMenu(e4, { ...f4, table: "" }) }, f4.name), /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-value" }, /* @__PURE__ */ bn.createElement(DataTypeView, { plugin: props2.plugin, initialValue: fileContext.folder.data[f4.name], index: fileContext.folder.dataIndex, file: fileContext.folder.data["File"], column: { ...f4, table: "" }, editable: true, updateValue: (v3) => updateValue(f4.name, v3, "", fileContext.folder.dataIndex, fileContext.folder.data["File"]), updateFieldValue: (fv, v3) => updateFieldValue(f4.name, fv, v3, "", fileContext.folder.dataIndex, fileContext.folder.data["File"]), contextTable })))), /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-field-new", onClick: (e4) => showNewMenu(e4) }, /* @__PURE__ */ bn.createElement("span", null, "+"), i18n_default.labels.newProperty)) : /* @__PURE__ */ bn.createElement(bn.Fragment, null))); }; // src/components/FileContextView/FileContextView.tsx var import_obsidian44 = require("obsidian"); // src/components/FileContextView/Backlinks.tsx var BacklinkItem = (props2) => { const file = F(() => getAbstractFileAtPath(app, props2.path), [props2.path]); const [block, setBlock] = p2([null, null]); h2(() => { var _a2, _b2; const fCache = app.metadataCache.getCache(props2.path); const link = [...(_a2 = fCache.links) != null ? _a2 : [], ...(_b2 = fCache.embeds) != null ? _b2 : []].find((f4) => props2.source.includes(f4.displayText)); if (link) { const block2 = fCache.sections.find((f4) => f4.position.start.offset <= link.position.start.offset && f4.position.end.offset >= link.position.end.offset); setBlock([Math.max(1, block2.position.start.line), Math.max(block2.position.start.line + 1, block2.position.end.line + 1)]); } }, [props2.path]); const [collapsed, setCollapsed] = p2(false); return /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-section" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-title", onClick: (e4) => { setCollapsed(!collapsed); e4.stopPropagation(); } }, /* @__PURE__ */ bn.createElement("button", { className: `mk-collapse mk-inline-button mk-icon-xsmall ${collapsed ? "mk-collapsed" : ""}`, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-collapse"] } }), file.name), !collapsed ? /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-backlink" }, /* @__PURE__ */ bn.createElement(FlowView, { plugin: props2.plugin, load: true, path: props2.path, from: block[0], to: block[1] })) : /* @__PURE__ */ bn.createElement(bn.Fragment, null)); }; var Backlinks = (props2) => { const [backlinks, setBacklinks] = p2([]); h2(() => { if (!props2.path) return; setBacklinks( Object.keys(app.metadataCache.resolvedLinks).filter( (f4) => props2.path in app.metadataCache.resolvedLinks[f4] ) ); }, [props2.path]); return /* @__PURE__ */ bn.createElement("div", null, backlinks.map((f4) => /* @__PURE__ */ bn.createElement(BacklinkItem, { path: f4, plugin: props2.plugin, source: props2.path }))); }; // src/components/FileContextView/FrontmatterView.tsx var FrontmatterView = (props2) => { const { path } = props2; const [values, setValues] = p2({}); const [cols, setCols] = p2([]); const { cols: columns, dbPath } = q2(MDBContext); const refreshData = () => { let newCols = []; let newValues = {}; const types = guestimateTypes([path], props2.plugin, false); const fm = frontMatterForFile(getAbstractFileAtPath(app, path)); const fmKeys = uniqCaseInsensitive(frontMatterKeys(fm)).filter((f4) => !columns.some((g4) => g4.name == f4)); const cols2 = fmKeys.map((f4) => ({ table: "", name: f4, schemaId: "", type: yamlTypeToMDBType(types[f4]) })); if (fm) { newCols.push(...cols2); Object.keys(fm).forEach((c4) => { newValues[c4] = parseFrontMatter(c4, fm[c4], false); }); } if (props2.plugin.dataViewAPI()) { const types2 = guestimateTypes([path], props2.plugin, true); const fm2 = frontMatterForFile(getAbstractFileAtPath(app, path)); const fmKeys2 = uniqCaseInsensitive(frontMatterKeys(fm2)); const dvValues = props2.plugin.dataViewAPI().page(path); const dvKeys = uniqCaseInsensitive( Object.keys(dvValues != null ? dvValues : {}).filter( (f4, i4, self2) => !self2.find( (g4, j4) => g4.toLowerCase().replace(/\s/g, "-") == f4.toLowerCase().replace(/\s/g, "-") && i4 > j4 ) ? true : false ).filter((f4) => f4 != "file").filter((f4) => !fmKeys2.includes(f4)).filter((f4) => !columns.some((g4) => g4.name == f4)) ); const dvCols = dvKeys.map((f4) => ({ table: "", name: f4, schemaId: "", type: yamlTypeToMDBType(types2[f4]) })); const dv = dvKeys.reduce( (p3, c4) => ({ ...p3, [c4]: parseFrontMatter(c4, dvValues[c4], true) }), {} ); newCols.push(...dvCols); Object.keys(dv).forEach((c4) => { newValues[c4] = parseFrontMatter(c4, dvValues[c4], true); }); } setCols(newCols); setValues(newValues); }; h2(() => { refreshData(); }, [path, columns]); const refreshDV = (evt) => { if (evt.detail.file.path == path) { refreshData(); } }; const [collapsed, setCollapsed] = p2(true); h2(() => { window.addEventListener(eventTypes.tagsChange, refreshDV); return () => { window.removeEventListener(eventTypes.tagsChange, refreshDV); }; }, [path, columns]); const saveFMValue = (value, f4) => { saveFrontmatterValue(props2.plugin, path, f4.name, value, f4.type); }; return cols.length > 0 ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-section" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-title", onClick: (e4) => { setCollapsed(!collapsed); e4.stopPropagation(); } }, /* @__PURE__ */ bn.createElement("button", { className: `mk-collapse mk-inline-button mk-icon-xsmall ${collapsed ? "mk-collapsed" : ""}`, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-collapse"] } }), i18n_default.labels.metadata), !collapsed ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, cols.map((f4, i4) => /* @__PURE__ */ bn.createElement("div", { key: i4, className: "mk-file-context-row" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-bullet" }), /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-field", "aria-label": f4.type }, f4.name), /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-value" }, /* @__PURE__ */ bn.createElement(DataTypeView, { plugin: props2.plugin, initialValue: values[f4.name], index: 0, file: path, column: { ...f4, table: "" }, editable: true, updateValue: (value) => saveFMValue(value, f4), updateFieldValue: (fieldValue, value) => saveFMValue(value, f4), contextTable: {} }))))) : /* @__PURE__ */ bn.createElement(bn.Fragment, null))) : /* @__PURE__ */ bn.createElement(bn.Fragment, null); }; // src/components/FileContextView/FileContextView.tsx var FILE_CONTEXT_VIEW_TYPE = "make-context-view"; var ICON2 = "component"; var VIEW_DISPLAY_TEXT2 = "Context Explorer"; var FileContextLeafView = class extends import_obsidian44.ItemView { constructor(leaf, plugin) { super(leaf); this.navigation = false; this.plugin = plugin; } getViewType() { return FILE_CONTEXT_VIEW_TYPE; } getDisplayText() { return VIEW_DISPLAY_TEXT2; } getIcon() { return ICON2; } async onClose() { this.destroy(); } destroy() { if (this.root) this.root.unmount(); } async onOpen() { this.destroy(); this.constructFileContext(); } async setState(state, result) { this.constructFileContext(); await super.setState(state, result); return; } getState() { let state = super.getState(); return state; } constructFileContext() { this.destroy(); this.root = createRoot(this.contentEl); this.root.render(/* @__PURE__ */ bn.createElement(FileContextView, { plugin: this.plugin })); } }; var allTagsForFile = async (plugin, file) => { var _a2, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j; let rt = []; const dbPath = folderContextFromFolder(plugin, file == null ? void 0 : file.parent.path); const dbFileExists = getAbstractFileAtPath(app, dbPath); if (dbFileExists) { const folderDB = await getMDBTable(plugin, "files", dbPath, false); if (folderDB) { rt.push(...folderDB.schema.def.split("&").filter((f4) => f4.length > 0)); } } if (file instanceof import_obsidian43.TFile) { const fCache = app.metadataCache.getCache(file.path); if (fCache && fCache.tags) rt.push(...(_b2 = (_a2 = fCache.tags) == null ? void 0 : _a2.map((f4) => f4.tag)) != null ? _b2 : []); if (fCache && ((_c2 = fCache.frontmatter) == null ? void 0 : _c2.tags)) rt.push( ...(typeof ((_d2 = fCache.frontmatter) == null ? void 0 : _d2.tags) === "string" ? splitString(fCache.frontmatter.tags.replace(/ /g, "")) : Array.isArray((_e2 = fCache.frontmatter) == null ? void 0 : _e2.tags) ? (_f = fCache.frontmatter) == null ? void 0 : _f.tags : []).filter((f4) => typeof f4 === "string").map((f4) => "#" + f4) ); if (fCache && ((_g = fCache.frontmatter) == null ? void 0 : _g.tag)) rt.push( ...(typeof ((_h = fCache.frontmatter) == null ? void 0 : _h.tag) === "string" ? splitString(fCache.frontmatter.tag.replace(/ /g, "")) : Array.isArray((_i = fCache.frontmatter) == null ? void 0 : _i.tag) ? (_j = fCache.frontmatter) == null ? void 0 : _j.tag : []).filter((f4) => typeof f4 === "string").map((f4) => "#" + f4) ); } return uniq(rt); }; var FileContextView = (props2) => { const [activeFilePath, setActiveFilePath] = p2(null); const [selectedFilePath, setSelectedFilePath] = p2(null); const path = F( () => selectedFilePath != null ? selectedFilePath : activeFilePath, [selectedFilePath, activeFilePath] ); const file = F(() => { const afile = getAbstractFileAtPath(app, path); return afile; }, [path]); const folderNoteFile = F(() => { if (file instanceof import_obsidian44.TFolder) { const afile2 = getAbstractFileAtPath(app, path + ".md"); return afile2; } return file; }, [file]); const folderPath = file == null ? void 0 : file.parent.path; const dbPath = folderContextFromFolder(props2.plugin, folderPath); const [tags, setTags] = p2([]); const [expandedSections, setExpandedSections] = p2({ context: true, backlinks: true }); h2(() => { refreshTags(); }, [file]); const contextExists = getAbstractFileAtPath(app, dbPath); const changeActiveFile = (evt) => { setActiveFilePath(evt.detail.filePath); setSelectedFilePath(null); }; const changeSelectedFile = (evt) => { setSelectedFilePath(evt.detail.filePath); }; const refreshTags = () => { allTagsForFile(props2.plugin, file).then((t4) => setTags(t4)); }; h2(() => { props2.plugin.activeFileChange(); }, []); h2(() => { window.addEventListener(eventTypes.activeFileChange, changeActiveFile); window.addEventListener(eventTypes.selectedFileChange, changeSelectedFile); window.addEventListener(eventTypes.tagsChange, refreshTags); return () => { window.removeEventListener(eventTypes.activeFileChange, changeActiveFile); window.removeEventListener( eventTypes.selectedFileChange, changeSelectedFile ); window.removeEventListener(eventTypes.tagsChange, refreshTags); }; }, [file]); const saveTag = (_5, values) => { }; const showContextMenu = (e4) => { const offset = e4.target.getBoundingClientRect(); const f4 = loadTags(props2.plugin); showSelectMenu( { x: offset.left, y: offset.top + 30 }, { multi: false, editable: true, value: [], options: f4.map((m5) => ({ name: m5, value: m5 })), saveOptions: saveTag, placeholder: i18n_default.labels.contextItemSelectPlaceholder, searchable: true, showAll: true } ); }; return file ? /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-component" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-file" }, /* @__PURE__ */ bn.createElement(FileSticker, { plugin: props2.plugin, filePath: file.path }), /* @__PURE__ */ bn.createElement("div", null, fileNameToString(file.name)))), /* @__PURE__ */ bn.createElement("div", { onClick: (e4) => { setExpandedSections((f4) => ({ ...f4, context: !f4["context"] })); e4.stopPropagation(); }, className: "mk-section-title" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-tree-text" }, i18n_default.labels.context), /* @__PURE__ */ bn.createElement("button", { className: `mk-collapse mk-inline-button ${!expandedSections["context"] ? "mk-collapsed" : ""}`, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-collapse-sm"] } })), expandedSections["context"] && /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-component" }, tags.map((tag) => /* @__PURE__ */ bn.createElement(MDBProvider, { plugin: props2.plugin, dbPath: tagContextFromTag(props2.plugin, tag), tag }, /* @__PURE__ */ bn.createElement(FileContextList, { plugin: props2.plugin, path: file.path }))), file && folderPath != "/" && /* @__PURE__ */ bn.createElement(MDBProvider, { plugin: props2.plugin, dbPath, folder: folderPath }, /* @__PURE__ */ bn.createElement(FileContextList, { plugin: props2.plugin, path: file.path }), /* @__PURE__ */ bn.createElement(FrontmatterView, { plugin: props2.plugin, path: file.path }))), folderNoteFile && /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { onClick: (e4) => { setExpandedSections((f4) => ({ ...f4, backlinks: !f4["backlinks"] })); e4.stopPropagation(); }, className: "mk-section-title" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-tree-text" }, i18n_default.labels.backlinks), /* @__PURE__ */ bn.createElement("button", { className: `mk-collapse mk-inline-button ${!expandedSections["backlinks"] ? "mk-collapsed" : ""}`, dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-collapse-sm"] } })), expandedSections["backlinks"] && /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-component" }, /* @__PURE__ */ bn.createElement(Backlinks, { plugin: props2.plugin, path: folderNoteFile.path })))) : /* @__PURE__ */ bn.createElement(bn.Fragment, null); }; // wasm-binary:/Users/cen/Documents/GitHub/make-md/src/utils/db/sqljs/sql-wasm.wasm var sql_wasm_exports = {}; __export(sql_wasm_exports, { default: () => sql_wasm_default }); var sql_wasm_default = __toBinary("AGFzbQEAAAABrQRHYAJ/fwF/YAF/AX9gA39/fwBgAX8AYAN/f38Bf2ACf38AYAR/f39/AX9gBX9/f39/AX9gBH9/f38AYAZ/f39/f38Bf2AFf39/f38AYAJ/fgF/YAR/f39+AX9gBn9/f39/fwBgB39/f39/f38Bf2AAAX9gAXwBfGABfgF/YAJ/fgBgA39/fgF/YAJ/fwF+YAAAYAF/AX5gBH9+f38Bf2AHf39/f39/fwBgCX9/f39/f39/fwF/YAh/f39/f39/fwF/YAN/fn8Bf2ACf3wAYAV/fn5+fgBgCX9/f39/f39/fwBgBX9/f39+AGAFf39+f38Bf2ADf39+AGADf35/AGADf35+AX9gAAF8YAF/AXxgBH9+fn8AYAh/f39/f39/fwBgBH5+fn4Bf2ALf39/f39/f39/f38AYAN8fH8BfGACfHwBfGAEf39+fwBgBn9/f35/fwF/YAF+AX5gBX9+f39/AX9gAn9+AX5gBn9/f39/fgF/YAR/f39/AX5gAn5+AXxgCH9+fn9/f39/AX9gAn58AX9gC39/f39/f39/f39/AX9gAnx/AXxgAXwBf2ACfH8Bf2AHf39/f35/fwF+YAl/fn9+fn5+f38Bf2AEf39/fgBgAnx+AX9gCn9/f39/f39/f38Bf2ADf398AX9gB39/f39/fHwAYAF8AX5gBX9+fn5/AX9gCH9/fn5+f39/AX9gBH9+f38AYA1/f39/f39/f39/f39/AGACf38BfALNASIBYQFhAAgBYQFiAAQBYQFjAAEBYQFkACQBYQFlACQBYQFmAAEBYQFnAAQBYQFoAAABYQFpAAABYQFqAAUBYQFrAAcBYQFsAAQBYQFtAAABYQFuAAIBYQFvAAYBYQFwAAQBYQFxAA8BYQFyAAYBYQFzAAEBYQF0AAYBYQF1AAYBYQF2AAYBYQF3AAkBYQF4AAkBYQF5AAQBYQF6AAABYQFBAAABYQFCAAABYQFDAAEBYQFEAAYBYQFFAAABYQFGAAABYQFHAAABYQFIAAYDkw+RDwYDBwQCBQQBBQEEAQUBAAEBDgUGBAkFBQEEBAECCAULAQECBQEABAMAEQMAAAMlBAYABgALARMDAAAcAQUWAQcDEgIABQMGAQAGAgILCAQEAQAABBEBCAYMAAQAAgEFBQwFAQQAAAIKAwQCCwEAEgUBAgMABAAB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CEUgAXINACAFKAKQAiAFIAUoAhAgA2ooAgAgBCAIEQYAIQELIAJBAWohAgwBCwsgACABNgIkQQFB5QAgARshAgwBCyABIQIgACwAlAFBAE4NACAAEOMGIQILIAUgAjYCQCAAKAIAIAAoAiQQogFBB0cNACAAQQc2AiQgAkEHIAAsAJQBQQBOGyECCyAFKAJIIAJxCyIBQRFHDQEgFUEyRgRAQREPCyAAKAIgIQUjAEEQayIDJAAgABDnCSEBAkAgACgCACICIAFBfyAALQCUASAAIANBDGpBABDJBCIIBEAgCEEHRw0BIAIQTwwBCyADKAIMIQQjAEHwAWsiASQAIAEgBEHwARAlIQkgBCAAQfABECUhAiAAIAlB8AEQJSEBIAIoAgghByACIAEoAgg2AgggASAHNgIIIAIoAgQhByACIAEoAgQ2AgQgASAHNgIEIAIoAsQBIQcgAiABKALEATYCxAEgASAHNgLEASACKALIASEHIAIgASgCyAE2AsgBIAEgBzYCyAEgASACKALgATYC4AEgASACLQCUAToAlAEgAUGgAWogAkGgAWpBJBAlGiABIAEoArQBQQFqNgK0ASAJQfABaiQAQQAhAQNAIAQuARAgAUoEQCABQShsIgIgACgCZGogBCgCZCACahDdCSABQQFqIQEMAQsLIARBADYCJCAEEJgCGgsgA0EQaiQAAkAgCARAIAwoAqACECshASAMIAAoAnwQJyAMLQBXDQEgACAMIAEQWjYCfCAAIAwgCBCiASIANgIkIAAPCyAVQQFqIRUgABA6GiAFQQBIDQEgAEH+AToAkwEMAQsLQQchASAAQQc2AiQgAEEANgJ8CyABC2MBAn8gACgCECIDIAJqIgQgACgCCE8EQCAAIAIQtwYiAkEASgRAIAAoAgQgACgCEGogASACECUaIAAgACgCECACajYCEAsPCyACBEAgACAENgIQIAAoAgQgA2ogASACECUaCwspACAAIAFBCHRBgID8B3EgAUEYdHIgAUEIdkGA/gNxIAFBGHZycjYAAAs9AQF/IAAtABMiAUUEQCAAIAAoAixBAWoiADYCLCAADwsgACABQQFrIgE6ABMgACABQf8BcUECdGooApgBC3EBAX8gACgCCCICLgEQQQBOBEACfyAAKAIIIQIgAUEATARAIAIQYiACQQA2AghBAAwBCyAC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ACgCWCABKAIIQShsaiIALQARQZABcQRAIAAQYiAAQQQ7ARAgAA8LIABBBDsBECAAC3ABA38jAEEQayIEJABB7PUDKAIABEAgBCACNgIMIwBB8AFrIgMkACADQdgBaiIFQQAgA0HSAUEAEJoBIAUgASACELsDQez1AygCACEBQfD1AygCACAAIAUQxQEgARECACADQfABaiQACyAEQRBqJAALCgAgACgCACgCFAsNACAAKAIAIAGsEJABC80BAQN/IAEEQCABQQhqIQIDQCABKAIAIARKBEAgAigCBCIDBEAgACADEF4LIAAgAigCCBAnIAIoAgwiAwRAIAAgAxBeCyACLwAlIgNBAnEEfyAAIAIoAjgQJyACLwAlBSADC0EEcQRAIAAgAigCOBA5CyAAIAIoAhAQ0wEgAigCFCIDBEAgACADEGYLIAIoAiwhAwJAIAItACZBBHEEQCAAIAMQ7QEMAQsgA0UNACAAIAMQLgsgAkFAayECIARBAWohBAwBCwsgACABEF4LCxUAIAAgASACIAMgACgCACgCCBEMAAs/AQF+AkAgACkDECICIAApAwhaBEAgAEEBEMoDDQEgACkDECECCyAAIAJCAXw3AxAgACgCBCACp2ogAToAAAsL4gEBAX8DQAJAIAAoAgRBgMAQcQRAIABBDGohAAwBCwJ/IAAtAAAiAUGwAUYEQCAALQACIQELAkACQAJAAkACQAJAIAFBsQFrDgICAQALIAFBigFHBEACQCABQacBaw4DAAUABAsgACgCLCIBRQ0EIAEgAC4BIBC8BAwGCyAAKAIUKAIcQQhqIQAMBgsgACgCDCgCFCgCHCAALgEgQQR0akEIaiEADAULIAAoAhRBCGohAAwECyABQSRGDQELIAAtAAEMAQsgACgCCEEAENEEC0EYdEEYdQ8LIAAoAgAhAAwACwALZQEBfyABEJ4BIQMCQCAALQAXRSADRXINACADLQAAQbABRg0AIAMQygVFDQAgAkEANgIAIAAgA0F/EMkFDwsgAiAAEEYiASAAIAMgARDvASIDRwR/IAAgARBAQQAFIAELNgIAIAMLNwEBfyABQQBIBEAgACgCbEEBayEBC0HwpwQhAiAAKAIALQBXBH9B8KcEBSAAKAJoIAFBFGxqCwt7AQN/AkAgAUEASA0AIAAoAhxBIHFFDQAgACgCBCEEA0Ag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KAIkIAIQNjYCJCADIAAgASgCKCACEHA2AiggAyAAIAEoAiwgAhA2NgIsIAMgACABKAIwIAIQcDYCMCABLQAAIQUgAyAENgI4IAMgBToAACADQQA2AjQgACABKAI8IAIQNiEEIANCADcCCCADIAQ2AjwgASgCBCEEIANCfzcCFCADIARBX3E2AgQgAyABLwECOwECIAAgASgCQBDnCyEEIANBADYCRCADIAQ2AkAgASgCSCEHIwBBEGsiBSQAIAVBADYCDCAFQQxqIQQDQAJAIAdFDQAgBCAAQQAgBxDlCyIENgIAIARFDQAgBEEkaiEEIAcoAiQhBwwBCwsgBSgCDCEEIAVBEGokACADIAQ2AkgCQCABKAJEBEAgAC0AVwRAIAMgASgCEDYCEAwCCyMAQSBrIgQkACAEQQA2AgwgBEHAADYCCCAEQcEANgIEIAQgAzYCGCAEQQA2AgAgBCADEGoaIARBIGokAAsgAC0AVyEEIAMgASgCEDYCECAERQ0CCyADQQA2AjggACADEGYLIAYoAgwhACAGQRBqJAAgAA8LIAggAzYCACABKAI0IQEgA0E0aiEIIAMhBAwACwALeQEBfyABBH8gAkUEQCABDwsgACgCACEDAkAgASgCBEGBgICAAnFBgICAgAJHBEAgAigCBEGBgICAAnFBgICAgAJHDQELIAAtANABQQFLDQAgACABENcHIAAgAhDXByADQZsBQeK7ARBxDwsgAEEsIAEgAhA1BSACCwu7AwEDfwJAIAFFDQACQCAABEAgACgCkAQNAQsgASABKAIYQQFrIgI2AhggAg0BCyAAIQIgASgCCCEAA0AgAARAIAAoAhQhAwJAIAIEQCACKAKQBA0BCyABLQArQQFGDQAgACgCGEEYaiAAKAIAQQAQqAEaCyACIAAQ2gQgAyEADAELCwJAAkACQAJAIAEtACsOAgABAgsgASgCMCEAA0AgAARAAkAgAgRAIAIoApAEDQELIAAoAgwhAwJAIAAoAhAiBARAIAQgAzYCDAwBCyABKAI8QThqIAMgACADGygCCCADEKgBGgsgACgCDCIDRQ0AIAMgACgCEDYCEAsgAiAAKAIcEPEDIAIgACgCIBDxAyAAKAIEIQMgAiAAECcgAyEADAELCwwCC0EAIQACQCACBEAgAigCkAQNAQtBACABEK8IGgsgASgCMARA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KAKgAiABQQEQxgULIARBEGokAAs7AQF/IAAoAgAiAi0AV0UEQCACIAAoAmggAUEUbGoiACwAASAAKAIQEIwEIABBADYCECAAQbgBOwEACwvCAQEBfwJAIAAoAgAtAFcNACABLQAEQYABcQ0AIwBBIGsiAyQAIANBxwA2AgQgAyAANgIAIAAtABYEQCADQQA2AgwgA0HIADYCCCADIAEQahoLIANBADsBFCADQT82AgwgA0HJADYCCCADIAEQahogA0EgaiQAIAAoAiQNACAAIAEgAhDaCyAAKAIkDQAjAEEgayICJAAgAkHKADYCDCACQTI2AgggAkHHADYCBCACIAA2AgAgAiABEGoaIAJBIGokAAsLRQEBfyAAKAIAQgwQjQEiAwRAIAMgACgCgAE2AgAgACADNgKAASADIAE2AgggAyACNgIEIAIPCyAAKAIAIAIgAREFAEEACw8AQQ4gAEGN6AAQiAVBDgsUAQF/EOwBBH9BAAUgACABEMgBCwtIAQF/IABBASABdCICIAAoApgBcjYCmAECQCABQQFGDQAgACgCACgCECABQQR0aigCBC0ACUUNACAAIAAoApwBIAJyNgKcAQsLHQEBfxDsAQR/QQAFIAAgAUEAIAFBAEobrRDIAQsLZQEDfyACRQRAQQAPCwJAIAAtAAAiA0UNAANAAkAgAS0AACIFRQ0AIAJBAWsiAkUgAyAFR3INACABQQFqIQEgAC0AASEDIABBAWohACADDQEMAgsLIAMhBAsgBEH/AXEgAS0AAGsLcgECfwJAIAAoAgAgACgCDGoiAkEATARAQQEhAiAALQAQQRBxRQ0BC0EHIQEgACACQQEQvwMNAEEAIQEgACgCCCAAKAIMakEAIAAoAgAQKBogACAAKAIMIAAoAgBqNgIMIAAgAC8BEEH/8wNxOwEQCyABC8kKAgV/D34jAEHgAGsiBSQAIARC////////P4MhDCACIASFQoCAgICAgICAgH+DIQogAkL///////8/gyINQiCIIQ4gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyILQoCAgICAgMD//wBUIAtCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCgwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEKIAMhAQwCCyABIAtCgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACEKQgAhAQwDCyAKQoCAgICAgMD//wCEIQpCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASALhCECQgAhASACUARAQoCAgICAgOD//wAhCgwDCyAKQoCAgICAgMD//wCEIQoMAgsgASALhFAEQEIAIQEMAgsgAiADhFAEQEIAIQEMAgsgC0L///////8/WARAIAVB0ABqIAEgDSABIA0gDVAiBht5IAZBBnStfKciBkEPaxCpAUEQIAZrIQYgBSkDWCINQiCIIQ4gBSkDUCEBCyACQv///////z9WDQAgBUFAayADIAwgAyAMIAxQIggbeSAIQQZ0rXynIghBD2sQqQEgBiAIa0EQaiEGIAUpA0ghDCAFKQNAIQMLIANCD4YiC0KAgP7/D4MiAiABQiCIIgR+IhAgC0IgiCITIAFC/////w+DIgF+fCIPQiCGIhEgASACfnwiCyARVK0gAiANQv////8PgyINfiIVIAQgE358IhEgDEIPhiISIANCMYiEQv////8PgyIDIAF+fCIUIA8gEFStQiCGIA9CIIiEfCIPIAIgDkKAgASEIgx+IhYgDSATfnwiDiASQiCIQoCAgIAIhCICIAF+fCIQIAMgBH58IhJCIIZ8Ihd8IQEgByAJaiAGakH//wBrIQYCQCACIAR+IhggDCATfnwiBCAYVK0gBCAEIAMgDX58IgRWrXwgAiAMfnwgBCAEIBEgFVStIBEgFFatfHwiBFatfCADIAx+IgMgAiANfnwiAiADVK1CIIYgAkIgiIR8IAQgAkIghnwiAiAEVK18IAIgAiAQIBJWrSAOIBZUrSAOIBBWrXx8QiCGIBJCIIiEfCICVq18IAIgAiAPIBRUrSAPIBdWrXx8IgJWrXwiBEKAgICAgIDAAINQRQRAIAZBAWohBgwBCyALQj+IIQMgBEIBhiACQj+IhCEEIAJCAYYgAUI/iIQhAiALQgGGIQsgAyABQgGGhCEBCyAGQf//AU4EQCAKQoCAgICAgMD//wCEIQpCACEBDAELAn4gBkEATARAQQEgBmsiB0GAAU8EQEIAIQEM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IAhBFGxqIgEuARIgAhAkGiABLgEQIgFBAEgNISAAKAIEIAFB//8DcUEMbGotAAVBxQBHDSEgBkHXACACECwaDCELIAEtAARBIHEEQCAAIAEoAgwgAhDvASEDAn8gASgCLCIABEAgACABLgEgELwEDAELIAEtAAELIgBBGHRBGHVBwgBIDSIgBkHgACADQQFBACAAQf8BcUEBdEHc+AJqQX8QMxoMIgsgASgCHCIFQQBIBEAgACgCNCIDQQBIBEAgAS8BICIEQRB0QRB1IghBAEgEQCADQX9zIQMMJAsgASgCLCIFIAgQhwEgA2shAyAFKAIEIARBDGxqIgEvAQoiBEHgAHEEQCAEQYACcQRAIAcgASgCADYCACAAQeDcASAHECZBACEDDCULIAEgBEGAAnIiAjsBCiABIARBgAFxBH8gACAFIAEgAxDQByABLwEKBSACC0H//ANxOwEKDCQLIAEtAAVBxQBHDSMgBkHRACADIAIQIhogBkHXACACECwaDCILIANBAWshBQsgAS0AAiEDIAAoAgggASgCLCAFIAEuASAgAhCJAQJAIANFDQAgACgCCEF/EIYBIgAtAABB3gBHDQAgACADOwECCyACIQMgASgCLA0hIAEtAAFBxQBHDSEgBkHXACADECwaDCELIAAgAUEAIAIQ+QsMHwsgBkHHACABELsEIAIQIhoMHgsgBiABKAIIQQAgAhDPBwwdCyAGIAIgASgCCBCwARoMHAsgBkHNACABKAIIQQJqIgAQMUEBayIBQQJtIAJBACAGKAIAIAAgARCTCEF6EDMaDBsLIAZBzgAgAS4BICACECIaIAEoAggtAAFFDRogACgC4AEiACABLgEgEOAJIQEgAEEANgIAIAYgAUF/EIgBDBoLIAEoAhwhAwwaCyACIAAgASgCDCACEO8BIgBHBEAgBkHRACAAIAIQIhoLIAZB2AAgAiABKAIIQQAQ0QQQIhoMGAtBNUE0IAVBLUYbIQVBASEIQYABDAELQQALIQsgASgCDCIDEP4BBEAjAEEQayIDJAAgASgCECEGIAAoAgghBCABKAIMIg0QkgEhCiAAEDIhCAJAIAAoAiQNACABKAIEIQEgBhCSASAKRwRAIABB6vMAQQAQJgwBCyABQQp2QQFxIREgACANEPULIRIgACAGEPULIRMgBEHHAEEBIAIQIhpBNUE2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IQQDQAJAIAAgBEsEQCAELQAAQTBGDQELQQAhAgNAAkAgAiAEaiIIIABPIgkNACAILQAAIghBMGtB/wFxQQlLDQAgAiAFaiECIApCCn4gCK1C/wGDfEIwfSEKDAELCyABQv///////////wBCgICAgICAgICAfyAHGyAKQgAgCn0gBxsgCkIAUxs3AwACfyACRQRAQX8gAyAERg0BGgsgBiAGDQAaIAYgCQ0AGiACIQMDQEEBIAMgBGotAABBwOoBai0AAEEBcUUNARogBCADIAVqIgNqIABJDQALQQALIQMCQCACIAVBE2wiBkkNAEEBIQAgAiAGTQRAQQAhAEEAIQIDQCACIABBEUtyRQRAIAQgACAFbGosAAAgAEHXuAFqLAAAa0EKbCECIABBAWohAAwBCwsgAgR/IAIFIAQgBUESbGosAABBOGsLIgBBAEgNAQsgAUL///////////8AQoCAgICAgICAgH8gBxs3AwBBAkEDIAMgBxsgABshAwsgAw8LIAQgBWohBAwACwALpwECA38BfgJAIAAtAABBMEcNACAALQABQSByQfgARw0AQQIhAgNAIAIiA0EBaiECIAAgA2otAAAiBEEwRg0ACyADIQIDQCAEQcDqAWotAABBCHEEQCAEQRh0QRh1EIcCrSAFQgSGfCEFIAAgAkEBaiICai0AACEEDAELCyABIAU3AwBBAiACIANrQRBKQQF0IAAgAmotAAAbDwsgACABIAAQMUEBEPUCC40DAQR/AkACQCAABEAgAUEBayECAkADQCAAKAIAQaEfTwRAIAAoAggiAUUNAiACIAIgAW4iAyABbGshAiAAIANBAnRqIgNBDGooAgAiAA0BIAMgARCBBCIANgIMIAANAQwFCwsgACACQQN2aiIAQQxqIAAtAAxBASACQQdxdHI6AABBAA8LIAJBAWohBAJAIABBDGoiAyACQf0AcCIBQQJ0aigCACICBEADQCACIARGBEBBAA8LIANBACABQQFqIgEgAUH8AEsbIgFBAnRqKAIAIgINAAsgACgCBCICQT5JDQEMAwsgACgCBCICQfwATw0CCyAAIAJBAWo2AgQgAyABQQJ0aiAENgIAC0EADwtBACEBQQBC9AMQjQEiAkUNACACIANB9AMQJSEFIANBAEH0AxAoGiAAIAAoAgBB/ABqQf0AbjYCCCAAIAQQ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IAAoAiAQXgsgACAAKAIUIAGsEI0BIgE2AiALIAFFBEAgABBiIABBADYCGCAAQQA2AghBBw8LIAAgACgCFCABEKsCNgIYAkAgAkUNACAAKAIIIgFFDQAgACgCICABIAAoAgwQJRoLIAAgAC8BECIBQYAgcQR/IAAoAgggACgCJBEDACAALwEQBSABC0H/nwJxOwEQIAAgACgCIDYCCEEAC9MDAgJ+An8jAEEgayIEJAACQCABQv///////////wCDIgNCgICAgICAwIA8fSADQoCAgICAgMD/wwB9VARAIAFCBIYgAEI8iIQhAyAAQv//////////D4MiAEKBgICAgICAgAhaBEAgA0KBgICAgICAgMAAfCECDAILIANCgICAgICAgIBAfSECIABCgICAgICAgIAIUg0BIAIgA0IBg3whAgwBCyAAUCADQoCAgICAgMD//wBUIANCgICAgICAwP//AFEbRQRAIAFCBIYgAEI8iIRC/////////wODQoCAgICAgID8/wCEIQIMAQtCgICAgICAgPj/ACECIANC////////v//DAFYNAEIAIQIgA0IwiKciBUGR9wBJDQAgBEEQaiAAIAFC////////P4NCgICAgICAwACEIgIgBUGB9wBrEKkBIAQgACACQYH4ACAFaxD/AiAEKQMIQgSGIAQpAwAiAEI8iIQhAiAEKQMQIAQpAxiEQgBSrSAAQv//////////D4OEIgBCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyAAQoCAgICAgICACFINACACQgGDIAJ8IQILIARBIGokACACIAFCgICAgICAgICAf4OEvwvTAQIBfwJ+QX8hBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEAgACACVCABIANTIAEgA1EbDQEgACAChSABIAOFhEIAUg8LIAAgAlYgASADVSABIANRGw0AIAAgAoUgASADhYRCAFIhBAsgBAvMAQEGfxC7ASAAEPcBIAAtABhBAXEEQCAALQCxAUUhBAsgBEUhBgNAIAMgACgCFE5FBEAgACgCECAD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AkAgASgCECICBH8gAgUgASgCDCEDIAFBACABMwE0QgF8EI0BIgI2AhAgAkUNAUEAIQIDQCACIAEvATRPRQRAAn8gASgCBCACQQF0ai8BACIAQRB0QRB1IgRBAE4EQCADKAIEIABBDGxqLQAFDAELQcQAIARBf0YNABogASgCKCACQQR0aigCCBCEAQshACABKAIQIAJqIABBGHRBGHUiAEHBACAAQcEAShsiAEHDACAAQcMASRs6AAAgAkEBaiECDAELCyABKAIQIAJqQQA6AAAgASgCEAsPCyAAEE9BAAsOACAAIAEQhgEgAjYCDAvJAQECfwJAAkAgACgCAC0AIUHAAHFFDQAgAS0AKw0AAkAgAkUEQEEBIQQgARCPAw0DIAEoAjBBAEchBQwBCyABQTBqIQBBASEEA0AgACgCACIABEAgASAAIAIgAxCTCwRAQQEhBSAEQQIgASgCACAAKAIIEFMbIQQLIABBBGohAAwBCwsgARCPAyEAA0AgAEUNAQJAIAEgACACIAMQpgdFDQBBASEFIAAtABpFDQBBAg8LIAAoAgwhAAwACwALIAUNAQtBACEECyAEC6UDAQl/An8CQAJAIAEoAjhFBEAgACgCACgCECgCHCIHBH8gBygCMEEARwVBAAtFDQELIAAtAJcBRQ0BC0EAIARFDQEaIARBADYCAEEADwsgAyEJIwBBEGsiCCQAAkACQCAAIgMgASIHEM8LIgFFDQACQCADKAIALQAiQQRxDQAgBygCOCIGRQ0AIAEgBkYNASABIQADQCAAIgUoAiAiAEEAIAAgBkcbDQALIAVBADYCIAtB35gBQeaYASACQYABRhshCkEAIQUgAkH/AEYhCyACQYEBRyEMIAEhAANAAkACQCAALQAIIgYgAkcNACAAKAIQIAkQpQdFDQAgBSAALQAJciEFDAELIAZBlgFGBEAgACACOgAIQQJBASAHLQArQQFHIg0bIQYgCyANckUEQCAIIAo2AgAgA0GZKSAIECZBASEGCyAAIAY6AAkgBSAGciEFDAELIAAtAApFIAxyIAZB/wBHcg0AIAMoAnQNACAFIAAtAAlyIQULIAAoAiAiAA0ACwwBC0EAIQELIAQEQCAEIAU2AgALIAhBEGokACABQQAgBRsLCyoBAX9BqpYBIQEgAEGHAWsiAEECTQR/IABBAnRB1K4DaigC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AiABQQZqNgIMAn8gF0EXRgRAQaYBIAJBDGoQ0ARBFkYNARoLQTsLIQUgAkEQaiQAIAUMAgsgESAaNgIsIBEgATYCKCARIBFBKGo2AiAgAEHx3wEgEUEgahAmDAMLIwBBEGsiAiQAIAIgAUEGajYCDEE7IQUgAkEMahDQBEE7RgRAQaQBQTsgAkEMahDQBEEYRhshBQsgAkEQaiQAIAULIhc2AuwJCyAAIBo2AsgBIAAgATYCxAEgESAAKQLEATcDGCMAQSBrIhQkACARQTBqIhIoAgQhBCASKAIALwEAIQICQANAIBdB//8DcSEFIAJB//8DcSIGQb8ETQR/IAZBAXRBkJwCai8BACEHAn8CQANAIAcgBSICaiIFQQF0QZClAmovAQAgAkYNASACQQF0QfCVAmovAQAiBQ0ACyACQf//A3FFIAdB5QBqIgJBAXRBkKUCai8BAEHlAEdyRQRAIAJBAXRB8MgCagwCCyAGQQF0QeDpAmoMAQsgBUEBdEHwyAJqCy8BAAUgBgtB//8DcSIFQdsJTwRAAkAgBUGVjwJqLQAADQAgEigCACASKAK4CUkNACASEJIIDAMLIBQgESkCGDcDAEEAIQJBACEGQQAhCkEAIQhBACEHQQAhCyMAQbABayINJAAgEigCACEDAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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AjYCACACIANBCGsoAgAgAygCBBDwBQybAQsgA0EUayICIARBACACKAIAEDsiAjYCACACIANBCGsoAgAgAygCBBDwBQyaAQsgA0EANgIEDJkBCyADQQE2AgQMmAELIANBfzYCEAyXAQsgA0EIa0EANgIADJYBCyADQQhrQQE2AgAMlQELIANBADYCEAyUAQsgA0EIayADKAIENgIADJMBCyADQQhrIARBlAEgAygCBEEAEDU2AgAMkgELIANBIGsgBEGUASADQRRrKAIAIAMoAgQQNTYCAAyRAQsgA0EgayAEQZQBIAMoAgQgA0EUaygCABA1NgIADJABCyAEIANBFGsiAigCACADQQhrEPIFIAQgAigCACADKAIEEO8FDI8BCyAEIAMoAgQQzQQgA0EIa0EANgIADI4BCyAEIAMoAgQQzQQgA0EgayADQRRrKAIANgIADI0BCyAEIANBOGsiAigCACADQSxrEPIFIAQgA0EUayIGKAIAQaMREIUIAkAgA0EIaygCACIFRQRAIAIoAgAhBQwBCyAFKAIAQQJOBEAgBEEAIAVBAEEAQQBBAEGAEEEAELYBIQUgDUIANwOQASAEQQBBAEEAIA1BkAFqIAVBABCCAiEFCyACIAQgAigCACAFEIQIIgU2AgALIAQgBSAGKAIAIAMoAgQgA0HEAGsoAgBBABDuBQyMAQsgA0EsayICIAQgAigCACADKAIEEDsiAjYCACAEIAIgA0EUa0EBEOYCDIsBCyADQcQAayICIAQgAigCACADQSBrKAIAIAMoAgQQgwg2AgAMigELIAQgBEEAIAMoAgQQOyICIANBFGsiBUEBEOYCIAUgAjYCAAyJAQsgA0EsayAEQQAgA0EgaygCACADKAIEEIMINgIADIgBCyAEIANBIGsoAgAgA0EIaygCACADQRRrKAIAIANBOGsoAgAgAygCBBDtBQyHAQsgBCADQSxrKAIAQQAgA0EgaygCACADQcQAaygCAEEAEO0FDIYBCyADQQA2AhAMhQELIANBCGtBADYCACAEIAMoAgQQzQQMhAELIANBgAFrIAQoAgAgA0HcAGsoAgAgA0HEAGsoAgAgA0EUaygCACADQQhrKAIAIAMoAgQQ6wM2AgAMgwELIANB3ABrIAQoAgAgA0E4aygCACADQSBrKAIAQQBBACADKAIEEOsDNgIADIIBCyADQSxrIAQoAgBBAEEAQQBBAEEAEOsDNgIADIEBCyADQdAAayAEKAIAQQBBACADQRRrKAIAIANBCGsoAgBBABDrAzYCAAyAAQsgBCADKAIEEM0EDH8LIANBADYCEAx+CyADQRRrIANBCGsoAgA2AgAMfQsgA0EUayICIAQgAigCACADQQRqEOwFNgIADHwLIAMgBEEAIANBBGoQ7AU2AgQMewsgA0EUayADQQhrKAIANgIADHoLIA0gAykCBDcDQCADIARBOyANQUBrEIMCNgIEDHkLIA0gA0EUayICKQIANwNQIARBOyANQdAAahCDAiEFIA0gAykCBDcDSCACIARBjQEgBSAEQTsgDUHIAGoQgwIQNTYCAAx4CyANIANBLGsiBSkCADcDaCAEQTsgDUHoAGoQgwIhAiANIANBFGspAgA3A2AgBEE7IA1B4ABqEIMCIQYgDSADKQIENwNYIARBjQEgBiAEQTsgDUHYAGoQgwIQNSEGIAQtANABQQJPBEAgBEEAIAIQowELIAUgBEGNASACIAYQNTYCAAx3CyADLwECIQIgDSADKQIENwNwIAMgBCACIA1B8ABqEIMCNgIEDHYLIAQoAgBBmwEgA0EEakEBEHkiAgRAIAIgAygCBCAEKALoAWs2AiQLIAMgAjYCBAx1CwJAIAMoAgQiAi0AAEEjRgRAIAItAAFBOmtBdUsNAQsgAygCCCEHIA0gAykCBDcDeCADIARBnAEgDUH4AGoQgwIiCTYCBCMAQRBrIgokAAJAIAlFDQAgBCgCACELAkACQCAJKAIIIgIwAAEiJFAEQCAEIAQvAcwBQQFqIgU7AcwBDAELAkACQCACLQAAQT9GBEAgB0ECRgR+ICRCMH0FIAJBAWogCkEIaiAHQQFrQQEQ9QJBAEchBiAKKQMICyIkQgBXIAZyICQgCygCnAEiBaxVcg0EICSnQRB0QRB1IgUgBC4BzAFMDQEgBCAFOwHMASAEKALgASEGDAILIAQoAuABIgYgAiAHEN4JIgVB//8DcQ0CIAQgBC8BzAFBAWoiBTsBzAEMAQsgBCgC4AEiBiAFEOAJDQELIAQCfyACIQggBUEQdEEQdSEQAkAgBiICIAsgAiAHQQRtQQNqIgysIAIEfiACKAIEIg4gDGoiDyACKAIAIgZMBEAgAiEGDAILIAasQgGGBUIKC3wiJEIChhC5ASIGRQ0BGgJ/IAIEQCAGKAIEDAELIAZBAjYCBEECCyEOIAYgJD4CACAMIA5qIQ8LIAYgDkECdGoiAiAQNgIAIAIgDDYCBCAGIA82AgQgAkEIaiAIIAcQJSAHakEAOgAAIAYLNgLgAQsgCSAFOwEgIAsoApwBIAVBEHRBEHVODQEgBEHTKkEAECYgBCgCACAJEPgCDAELIAogBTYCACAEQbf7ACAKECYgBCgCACAJEPgCCyAKQRBqJAAMdQsgDSADKQIEIiQ3A5ABIAQtABJFBEAgDSANQZABajYCgAEgBEGawgAgDUGAAWoQJiADQQA2AgQMdQsgAyAEQbABQQBBABA1IgI2AgQgAkUNdCAkp0EBaiACQRxqENACGgx0CyADQRRrIgIgBCACKAIAIANBBGpBARCCCDYCAAxzCyADQThrIAQoAgBBJCADQQhrQQEQeSICNgIAIAQoAgAgAiADQSBrKAIAQQAQgQgMcgsgA0EsayICIAQgA0EIaygCACACIANBFGsoAgAQngI2AgAMcQsgA0EgayICIARBACACQQAQngI2AgAMcAsgBCAEIANBFGsoAgAgA0E4ayICIANBIGsoAgAQngIiBSADKAIEEIAIIAIgBTYCAAxvCyAEIARBACADQSxrIgJBABCeAiIFIAMoAgQQgAggAiAFNgIADG4LIAMgBEEAIANBBGpBABCeAjYCBAxtCyAEIANBIGsoAgAgA0EIaygCABA7IQIgA0EsayIGIARBsQFBAEEAEDUiBTYCACAFBEAgBSACNgIUIAIoAgBFDW0gBigCACIFIAUoAgQgAigCCCgCBEGIhIACcXI2AgQMbQsgBCgCACACEDkMbAsgA0EUayICIAQgAigCACADKAIEENIBNgIADGsLIANBFGsiAiAEIANBCmsvAQAgAigCACADKAIEEDU2AgAMagsgA0EMayICIAMpAgQiJDcCBCACICRCIIinQYCAgIB4cjYCCAxpCyADQQRrIgIgAigCACIGQf////8HcTYCACADQRRrIgIgBCAEIARBACADKAIEEDsgAigCABA7IANBCGtBABCeAiIFNgIAIAZBAEgEQCACIARBEyAFQQAQNSIFNgIACyAFRQ1oIAUgBSgCBEGAAnI2AgQMaAsgA0EcayICIAIoAgAiBkH/////B3E2AgAgA0EsayICIAQgBCAE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AyAFENQGCyAGQfABaiQAC0gBAn8CfyABQR9NBEAgACgCBCECIAAMAQsgAUEgayEBIABBBGoLKAIAIQMgACACIAF2NgIEIAAgAkEgIAFrdCADIAF2cjYCAAtCAQJ/AkAgAEUNAAJAIAAvARAiA0GCBHFBggRHDQAgAC0AEiABRw0AIAAoAggPCyADQQFxDQAgACABEO4JIQILIAILzAkCBH4EfyMAQfAAayIKJAAgBEL///////////8AgyEFAkACQCABUCIJIAJC////////////AIMiBkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAGUBtFBEAgA0IAUiAFQoCAgICAgMD//wB9IghCgICAgICAwICAf1YgCEKAgICAgIDAgIB/URsNAQsgCSAGQoCAgICAgMD//wBUIAZCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgBUKAgICAgIDA//8AVCAFQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAGQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiCRshBEIAIAEgCRshAwwCCyADIAVCgICAgICAwP//AIWEUA0BIAEgBoRQBEAgAyAFhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAFhFBFDQAgASEDIAIhBAwBCyADIAEgASADVCAFIAZWIAUgBlEbIgwbIQUgBCACIAwbIghC////////P4MhBiACIAQgDBsiB0IwiKdB//8BcSELIAhCMIinQf//AXEiCUUEQCAKQeAAaiAFIAYgBSAGIAZQIgkbeSAJQQZ0rXynIglBD2sQqQEgCikDaCEGIAopA2AhBUEQIAlrIQkLIAEgAyAMGyEDIAdC////////P4MhBCALRQRAIApB0ABqIAMgBCADIAQgBFAiCxt5IAtBBnStfKciC0EPaxCpAUEQIAtrIQsgCikDWCEEIAopA1AhAwsgBEIDhiADQj2IhEKAgICAgICABIQhAiAGQgOGIAVCPYiEIQQgA0IDhiEBIAcgCIUhAwJAIAkgC0YNACAJIAtrIgtB/wBLBEBCACECQgEhAQwBCyAKQUBrIAEgAkGAASALaxCpASAKQTBqIAEgAiALEP8CIAopAzAgCikD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KAIAIgE2AgwgASADNgIIIAIgAzYCCCADIgIoAgghAwsgAkEANgIICyAEQQFqIQQMAAsACwNAIAMEQCADKAIIIQEgAxAjIAEhAwwBCwsgCCECCyAJECMMAwUgBCgCDCEEDAELAAsACyAKQQJHDQIgBiACKAIMIgg2AgggBiACKAIQIgM2AgQgAkIANwIMIAhBADYCCCADQQA2AggCQCAGQQhqIAFBAWsiARCbBSIFBH8gAwUgBkEEaiABEJsFIgVFDQEgBigCBAsQjgIgBigCCBCOAgwBCyACIAYoAggiATYCDCABIAI2AgggAiAGKAIEIgE2AhAgASACNgIIQQAhBQsgBQ0AQQAhBQwBCyACEI4CQQAhAgsgACACNgIAIAZBEGokACAFC+ABAQN/IwBBEGsiAyQAAkACQANAIAENASAAKAKAAiACSgRAQQAgACAAKAKYAiACQX8Q9QYiASABQeUARhshASACQQFqIQIMAQsLIAAQpARBACEBIAAtAO0BRQ0BIAAoAjBB/wFHDQEgACgCNEUNAUEAIQIgA0EANgIMIABBFiADQQxqQQAQUiIBDQEgAygCDCIBQQFBAhB1GgJAAkACQCABEENB5ABrDgIAAQILQQggAUEAEL8BIgIgAkEBRhshAgsgACACNgIwCyABEDohAQwBCyAAEKQECyADQRBqJAAgAQuYAQEDfyABLQAHRQRAQQAPCwJAAkAgARDCCiICDQAgASgCACIDIAMoAjhBAWo2AjggASgCDEEBIAEpAyAQWBogAUEAOgAHIAEoAgwQQyECIAMgAygCOEEBazYCOCACQeQARg0BIAEoAgwQOiICDQAgASgCACgCKA0BIAFBAToABkGLAiECCyAABEAgACACENgBCyACIQQLIAQLGQAgACABIAIQ1AoiAEUEQEEADwsgACgCCAuEBAICfwR+IwBBEGsiByQAIAcgAygCACIINgIMAkAgCEUEQEIBIQlCf0IBIAAbIQsgASACaiECQQAhAANAIAEgAkkEQCAHIAEgBxClASABaiIANgIIIAcpAwAhDEEAIAdBCGoQ6gEgCSAMfiAKfCEKIAcoAgghAQNAAkAgASACTw0AIAEtAAANACABQQFqIQEMAQsLIAcgATYCCCALIQkMAQsLIAUgAiAAazYCACADIAA2AgAgBCAKNwMADAELIwBBEGsiCCQAIAcoAgxBAmshAgNAAkAgASACSw0AIAIsAABBAE4NACACQQFrIQIMAQsLIAcgAkEBaiICNgIMIAIgCEEIahClARogByAIKQMINwMAIAhBEGokACAEIAQpAwAgBykDACIJQgAgCX0gABt8NwMAAkAgASAHKAIMIgRGBEAgBkEBOgAADAELIAcoAgwiBkECayEAA0ACQCAAIAFNBEBBACECDAELIAAtAAAhAiAAQQFrIQAgAkUNAQsLAkACQANAIAAgAUsEQCACQRh0IQggAC0AACICQYABcSAIQRh1ckUNAiAAQQFrIQAMAQsLIAIgBiAAQQJqTXINAQsgAEECaiEACwNAIAAsAAAhASAAQQFqIQAgAUEASA0ACyAHIAA2AgwgBSAEIAcoAgwiAWs2AgALIAMgATYCAAsgB0EQaiQAC/0CAgV/AX4jAEEQayIFJAAgBSABKAJQIgQ2AgwCQAJAIAAtAO8BRQ0AIAEoAjhFDQAgBUEAOgALIAIEQCACIAQ2AgAgAyABKAJUQQFrNgIAC0EAIAEoAkggASgCTCAFQQxqIAFB2ABqIAFB1ABqIAVBC2oQnwUgAUEAIAUoAgwgBS0ACxs2AlAMAQsgASgCSCABKAJMaiEIA0AgByAELQAAIgZyBEAgBkGAAXEhByAEQQFqIQQMAQsCQCABKAI0RQ0AIAQgASgCKCABKAIwakkNACABENEKIgZFDQEMAgsLIAUgBEEBaiIENgIMIAIEQCACIAEoAlA2AgAgAyABKAJQQX9zIARqNgIACwJAA0AgBCAISQRAIAQtAAANAiAEQQFqIQQMAQsLQQAhBiABQQA2AlAMAQsgASAEQQoQoQUiBg0AIAEgBCAFEIQDIARqNgJQIAEgASkDWEIAIAUpAwAiCX0gCSAALQDvARt8NwNYQQAhBgsgBUEQaiQAIAYLPwAgASACaiEBQQAhAgNAAkAgACgCNEUgAnIEfyACBSAAKAIwIAEgACgCKGtIDQFBAAsPCyAAENEKIQIMAAsAC1kBA38gACgCCCEBIABBADYCCCAAKAIQECMgAEIANwIMA0AgAQRAIAEoAgAhAgJAIAAtAAFFDQAgASgCDCIDRQ0AIAMQIwsgARAjIAIhAQwBCwsgAEEANgIECzgBAX8gACgCHCIBIAAoAhg2AhggACgCGCABNgIcIABBADYCGCAAKAIUIgEgASgCLEEBazYCLCAACzwBAX8CQBDsAQ0AQcijBCEBA0AgAEUgASgCACIBRXINASAAIAEoAhAQlQFFDQEgAUEMaiEBDAALAAsgAQvsCgEJfyAAKAIMIQUDQCABIgRBAWohASAEIAVqIggtAAAiAkGgiwNqLQAADQALAkACQAJAIAJBIkYEQEEAIQIgBCEBA0BBfyEGIAUgASIDQQFqIgFqLQAAIgdBIEkNAiAHQdwARwRAIAdBIkcNASAAQQUgA0ECaiIGIARrIAgQrQEaIAAtABQNAyAAKAIIIAAoAgBBDGxqQQtrIAI6AAAgBg8LQQIhAgJAAkAgBSADQQJqIgFqIgctAAAiA0HuAGsOCAIEBAQCBAIBAAsCQCADQeIAaw4FAgQEBAIACyADQSJGIANBL0ZyIANB3ABGcg0BDAMLIAdBAWohCUEAIQNBASEHAkADQCADQQRGDQEgAyAJaiEKIANBAWohAyAKLQAAQcDqAWotAABBCHENAAtBACEHCyAHDQALDAELAkACQAJAAkACQCACQdsARwRAIAJB5gBGDQMgAkHuAEYNASACQfQARg0CIAJB+wBHDQQgAEEHQQBBABCtASIDQQBIDQUDQCAFIAQiAkEBaiIEai0AAEGgiwNqLQAADQAgACAALwEWQQFqIgE7ARZBfyEGIAFB//8DcUHQD0sNByAAIAQQpQUiAUEASARAIAAgAC8BFkEBazsBFiABQX5HDQgMCQsgAC0AFA0HIAAoAgggACgCAEEBa0EMbGoiBC0AAEEFRw0HIAQgBC0AAUHAAHI6AAEDQCABIAVqIQQgAUEBaiEBIAQtAAAiBEGgiwNqLQAADQALIARBOkcNByAAIAEQpQUhASAAIAAvARZBAWs7ARYgAUEASA0HA0AgASIEQQFqIQEgBCAFai0AACICQaCLA2otAAANAAsgAkEsRg0ACyACQf0ARw0GDAgLIABBBkEAQQAQrQEiA0EASA0EIAAoAgggA0EMbGpBADYCCANAIAUgBCICQQFqIgRqLQAAQaCLA2otAAANACAAIAAvARZBAWoiATsBFkF/IQYgAUH//wNxQdAPSw0GIAAgBBClBSEBIAAgAC8BFkEBazsBFiABQQBIBEAgAUF9Rw0HDAgLA0AgASIEQQFqIQEgBCAFai0AACICQaCLA2otAAANAAsgAkEsRg0ACyACQd0ARw0FDAcLIAhBjdYAQQQQ5gENAiAFIARBBGoiAWotAABBwOoBai0AAEEGcQ0CIABBAEEAQQAQrQEaIAEPCyAIQdTfAEEEEOYBDQEgBSAEQQRqIgFqLQAAQcDqAWotAABBBnENASAAQQFBAEEAEK0BGiABDwsgCEHp4wBBBRDmAQ0AIAUgBEEFaiIBai0AAEHA6gFqLQAAQQZxDQAgAEECQQBBABCtARogAQ8LIAJBLUcgAkEwa0H/AXFBCUtxRQRAAkAgAkEwSw0AIAUgBCACQS1GamoiAS0AAEEwRw0AQX8hBiABLQABQTBrQf8BcUEKSQ0DC0EAIQIgBCEBQQEhBwNAIAUgASIDQQFqIgFqLQAAIgZBMGtB/wFxQQpJDQAgBkEuRgRAQX8hBiADIAVqLQAAQS1GDQQgAiEDQQEhAiADRQ0BDAQLIAMgBWoiCiwAACEJIAZB3wFxQcUARgRAQX8hBiAHQX9zIAlBMEhyQQFxDQQCQAJAIAUgA0ECaiICai0AACIDQStrDgMAAQABCyAKLQADIQMgAiEBC0EBIQJBACEHIANBOmtB/wFxQfYBTw0BDAQLC0F/IQYgCUEwSA0CIABBBEEDIAIbIAEgBGsgCBCtARogAQ8LIAIEQCACQf0ARgRAQX4PCyACQd0ARw0BQX0PC0EADwtBfyEGCyAGDwsgAkECakF/IAAoAgAgA0EBakYbDwsgACgCCCADQQxsaiAAKAIAIANBf3NqNgIEIAELlgQCBX4EfwJAIAFFDQAgACkDCCACrSIFIAApAxAiBHxCAnxYBEAgACACQQJqEMoDDQEgACkDECEECyAAIARCAXw3AxAgACgCBCAEp2pBIjoAACACQQdqIQogBUIHfCEGIAJBA2ohCyAFQgN8IQdCACEEA0ACQAJAIAQgBVIEQCABIASnIglqLQAAIgJB3ABHIAJBIkdxRQRAIAIhCAwCCyACQR9LBEAgAiEIDAMLIAJBoI0Dai0AACIIDQEgACkDCCAAKQMQIgMgBCAGfHxUBEAgACAKIAlrEMoDDQUgACkDECEDCyAAIANCAXw3AxAgACgCBCADp2pB3AA6AAAgACAAKQMQIgNCAXw3AxAgACgCBCADp2pB9QA6AAAgACAAKQMQIgNCAXw3AxAgACgCBCADp2pBMDoAACAAIAApAxAiA0IBfDcDECAAKAIEIAOnakEwOgAAIAAgACkDECIDQgF8NwMQIAAoAgQgA6dqIAJBBHZBMHI6AAAgAkEPcUHq3QBqLQAAIQgMAgsgACAAKQMQIgRCAXw3AxAgACgCBCAEp2pBIjoAAAwDCyAAKQMIIAApAxAiAyAHIAR9fFQEQCAAIAsgCWsQygMNAyAAKQMQIQMLIAAgA0IBfDcDECAAKAIEIAOnakHcADoAAAsgACAAKQMQIgNCAXw3AxAgACgCBCADp2ogCDoAACAEQgF8IQQMAAsACwuEBAEIfyABKAIAECshCSABKAIAEGAhBiAJBH9BfyEKQQAhAQNAAkACQCABQQRHBEAgACABQfKeGmsQ5QkiAw0BIAEhBQsgBEUNASAEQQA6ABUgBCAHQQFqNgIcIAQPCwJAAkAgBA0AIAMoAhggBkcNACADKAIMIAkgBhBRDQAgA0EAOgAVIAMoAhwhCCADIQQMAQsgAygCHCIIIAogCCAKSSIDGyEKIAEgBSADGyEFCyAIIAcgByAISRshByABQQFqIQEMAQsLIAZBIWqtEEsiAUUEQCAAEGdBAA8LIAFCADcCCCABQgA3AgAgAUIANwIYIAFCADcCECABIAFBIGoiAzYCDCABIAIgAyAJIAZBAWoQJRCKAwRAIAEQI0EADwsgASAGNgIYIAEgB0EBajYCHCAFQfKeGmsiBEEASCEFIAAoAgwiA0HoAWohAgJAAkACQAJAA0AgAigCACICBEAgBCACKAIERgRAIAUNAyACKAIAIAAoAhBGDQMLIAJBEGohAgwBCwsgAygCAEIUEEEiAkUNAiAAKAIQIQUgAiAENgIEIAIgBTYCACACIAMoAugBNgIQIAMgAjYC6AEgACgCFA0BIABBfzYCFAwBCyACKAIMIgNFDQAgAigCCCADEQMACyACQd0ANgIMIAIgATYCCAwBCyABEO4KCyAAIAQQ5QkFQQALC8ACAgh/AX4gACgCFCIFKAJoIgNBACADQQBKGyEGIAAoAhghBANAAkAgASAGRg0AAkAgBSgCZCIHIAFBMGxqIggoAhQgBEkNACAIKAIQIAQQ8QQNAANAQQEhAiABQQFqIgEgA04NAiAHIAFBMGxqQQA2AhwMAAsACyABQQFqIQEMAQsLIAJFBEBBAA8LAkAgACgCFCIBLQAFQQJHBEAgASgCSCICKAIABH9BAAUgASgCAEEAIAJBnsAAAn8CQCABLQAFQQRGDQAgAS0AFg0AQZz0AygCAAwBC0F/CxCwBgsiAg0BIAAoAgQhAyABKAJIIAE1AjggASkDqAFCBHx+IgkgACgCGBCyAyICDQEgASgCSCADIAEoAqgBIAlCBHwQeiICDQELIAEgASgCOEEBajYCOCABIAAoAhgQsQYhAgsgAgvkAQEIfyMAQRBrIgYgAjYCDANAIAEtAAFBMGshCCAAIAEtAABBMGsiAkH/AXFqIQcgASwAAkEBdEHqiANqLwEAIQkgAS0AAyEFQQAhAwJAA0AgAkH/AXEEQCAALQAAIgpBOmtBdkkNAiACQQFrIQIgAEEBaiEAIANBCmwgCkEYdEEYdWpBMGshAwwBCwsgAyAIQRh0QRh1SCADIAlKcg0AIAUEQCAFIActAABHDQELIAYgBigCDCIAQQRqNgIMIAAoAgAgAzYCACABQQRqIQEgBEEBaiEEIAdBAWohACAFDQELCyAECxAAIABBADoALCAAQQA7ASoLfQEDfyMAQRBrIgIkAEEBIQEgACgCDCgCaCAAKAIQQRRsaiIDLQAAQcEARgRAIAMvAQIhASACIAAoAgQoAiA2AgAgAkGmE0GE0gBB5gsgAUEIcRsgAUEEcRs2AgQgAEHVMCACEEoiAEF/EGQgABAjQQAhAQsgAkEQaiQAIAELMwEBfyAAKAKYAyIBBEAgAEEANgKYAyAAQQAQzAIDQCABKAIYIQAgARDtAiAAIgENAAsLCx8BAX8DQCABBEAgASgCDCECIAAgARAnIAIhAQwBCwsL8QQBCH8jAEEgayICJAAgACgCACEFIAAoAvQBIQMgAkEANgIcIAJCADcCFCACQgA3AgwgAkIANwIEIAIgADYCACAAIAUgAygCBCAFKAIQIAUgAygCGBBOQQR0aigCABB8IgE2AnggACADLQAIOgCUAQJAIAEEQCAAIAEQuwIiAQ0BC0EAIQEgAygCDCIERQ0AIAIgBBCgASEBCyADQRxqIQQDQAJAIAENACAEKAIAIgNFDQACQAJAIAMoAggiAUUNACAAIAEgAhDgASAAKAIkRQ0AIAAoAgwiAQ0BCyADKAIMRQRAQQAhAQwBCyAAIAMQsAUiBkUEQEEHIQEMAQsCfyAAIAMoAhggBkEAQQBBAEEAQQBBABC2ASIBRQRAQQAhBiADQQA2AhhBBwwBCyAAIAFBABDgASAAKAIkIQQgAygCGARAIAFBADYCHAsgAUEANgIgIAUgARBmIARBAEcLIQcCQCADKAIQIgRFDQBBACEBIAcNAANAIAEgBCgCAE4NASAEIAFBBnRqKAIcIggEQCAAIAhBABDgASADKAIQIQQLIAFBAWohAQwACwALIAUtAFchASACIAY2AgQCQEEHIAcgARsiAQ0AIAMoAhQiAQRAIAIgARCgASIBDQELIAIgAygCGBCAAiEBCyADKAIgIgRFIAFyRQRAIAQgBjYCICACQYAENgIYIAIgBDYCCAJAIAIgBCgCABCAAiIBDQAgAiAEKAIIEIACIgENACACIAQoAgwQoAEiAQ0AIAIgBCgCBBCgASEBCyACQQA2AhgLIAJBADYCBCAFIAYQgQELIANBKGohBAwBCwsgAkEgaiQAIAELHgAgAEHLAEEAQQAQNSIABEAgACABQQFqOwEgCyAAC+gBAQV/IwBBEGsiBCQAIAAoAgAiBSABKAIMEFohBgJAAn8CQCAAQQBBAEEAEMABIgMEQCABKAIEKAIUIQIgAyAGNgIQIAUoAhAoAhwgAkcEQCADIAI2AggLIAEoAhAiAkUEQCADIQIMBAtBACAFIAJBABDYAyICRQ0CGiACKAIAQQJIDQEgAC0A0AFBAUsNASAAQQAgAkEAQQBBAEEAQYAQQQAQtgEhASAEQgA3AwggAEEAQQBBACAEQQhqIAFBABCCAgwCCyAFIAYQJwwCCyACCyEBIAAgAyABEIQIIQILIARBEGokACACC4gEAQt/AkAgAC0ACEECRw0AIAAoAgQhByAAEEwgBy0AEQRAAn8gACgCBCIDKAIAIQogAxCfBgJAIAMtABINAAJAIAMgAygCMCIEEMMBIARHBEAgBEGQ+QMoAgAgAygCJCILbkEBakcNAQtBhKoEECkMAgsgAygCDCgCOEEkahAtIgYhBQJAIAAoAgAiCCgChAIiDEUNACAIKAIUIgVBACAFQQBKGyEFIAgoAhAhCQNAAkAgAiAFRwRAIAkgAkEEdGooAgQgAEcNASACIQULIAgoAvwBIAkgBUEEdGooAgAgBCAGIAsgDBEHACIAIAYgACAGSRsiBQ0CQQAMBAsgAkEBaiECDAALAAsgBCADIAQgBRDwCCIASQRAQZ+qBBApDAILQQAhAiAAIARJBEAgA0EAQQAQ2QIhAgsgBSAGRiEIA0AgACAETyACckUEQCADIAAgBCAIEO8IIQIgBEEBayEEDAELC0EAIQQgBkUgAkHlAEcgAkEAR3FyRQRAIAMoAgwoAkgQXSECIAUgBkYEQCADKAIMKAI4QSBqQQAQRSADKAIMKAI4QSRqQQAQRQsgAygCDCgCOEEcaiAAEEUgAyAANgIwIANBAToAEwsgAkUNACAKEIAHIAIhBAsgBAsiAg0BCyAHLQATBEAgBygCACAHKAIwEKYLCyAHKAIAIAFBABCxByECCyACCyMBAX8gAEELTgR/IACtQv//A4MQ1AFBIWsFQQALQRB0QRB1CxIAQQAgABCeASABEJ4BIAIQawuXAgIBfgF/IAEoAgQiA0EgcSABLQAAQacBR3JFBEAgACABKAIcEP0BDwsgA0GAgIQEcQR+QgAFIAEtAABBswFGBEAgACABKAIcEP0BIQILIAEoAgwiAwRAIAAgAxC0BSAChCECCwJAIAEoAhAiAwRAIAAgAxC0BSAChCECDAELIAEoAgQiA0GAIHEEQCADQcAAcQRAIABBATYCAAsgACABKAIUEK0HIAKEIQIMAQsgASgCFCIDRQ0AIAAgAxCXAiAChCECCwJAAkAgAS0AAEGoAWsOBQABAQEAAQsgAS0AB0EBcUUNACAAIAEoAiwoAggQlwIgACABKAIsKAIMEJcChCAAIAEoAiwoAigQlgKEIAKEIQILIAILC7oKARJ/IwBBEGsiDCQAIAAoAgghDgJAAkACQAJAAkACQAJAIAEoAgAiCi0AACIGQTJrDgQCAwMBAAsgBkEtRw0CCyAAIAooAhAgBRDvASEFDAILIA5BywBBACAFECIaDAELAkAgAigCUCILLQApQQRxDQAgCygCICIGRQ0AIAYoAhwgA2otAABFDQAgBEUhBAsgA0EAIANBAEobIQYDQAJAIAYgEkYEQCADIAsvASwiBiADIAZKGyEIQQAhByADIQYDQCAGIAhGDQIgByALKAI0IAZBAnRqKAIAKAIAIApGaiEHIAZBAWohBgwACwALIAsoAjQgEkECdGooAgAiBwRAIAcoAgAgCkYNBAsgEkEBaiESDAELCyAMQQA2AgwCQAJAIAooAgQiBkGAIHEEQCAKKAIUKAIcKAIAQQFHDQELIAAgCkEEQQBBACAMQQxqEMUFIQYMAQsgCigCHEEAIAZBgICAEHEbRQRAIAAoAgAhEyADIQYgACgCACINIApBABA2IQgCQCANLQBXDQAgCCgCDCgCFCEUIAgoAhQoAhwhFQNAIAsvASwgBkoEQAJAIAsoAjQgBkECdGooAgAiESgCACAKRw0AIBUgESgCHEEBa0EEdCIRaiIWKAIIIhdFDQAgACAPIBcQOyEPIBZBADYCCCAAIAkgESAUaiIRKAIIEDshCSARQQA2AggLIAZBAWohBgwBCwsgDSAVEDkgDSAUEDkgCCgCDCAJNgIUIAgoAhQgDzYCHAJAIAlFDQAgCSgCAEEBRw0AIAkoAgghBiAJQQA2AgggDSAIKAIMEC4gCCAGNgIMCyAIKAIUKAIwIglFDQAgCSgCACENQQAhBgNAIAYgDU4NASAJIAZBBHRqQQA7ARQgBkEBaiEGDAALAAsCQCATLQBXBEBBBSEGDAELIAAgCEEEQQAgACgCACAHQQJ0rRBBIhAgDEEMahDFBSEGIAogDCgCDDYCHAsgEyAIEC4MAQsgACAKQQRBACAAKAIAIAcgCigCDBCSASIGIAYgB0gbQQJ0rRBBIhAgDEEMahDFBSEGCyAOQR9BIyAERSAEIAZBBEYbIggbIAwoAgxBABAiGiALIAsoAihBgBByNgIoIAIoAkhFBEAgAiAAEDI2AhALAkAgA0EATA0AIAsoAigiBEGAgMAAcQ0AIAsgBEGAgBByNgIoCyACIAcgAigCSCIJaiIHNgJIIAIoAkwiBEUgASgCBCgCACAHQRRsrRC4ByIHRXJFBEAgByAEIARBCGsoAgAQJRoLIAIgByIENgJMAkAgBARAQSVBJiAIGyETIAUgA2shDSAEIAlBFGxqIQcgBkEBRyEUIAMhBkEAIQgDQCALLwEsIAZKBEAgCiALKAI0IAZBAnRqKAIAKAIARgRAIAYgDWohCSAHAn8gFEUEQCAOQYcBIAwoAgwiDyAJECIMAQsCQCAQRQRAQQAhBAwBCyAQIAhBAnRqKAIAIQQgCEEBaiEICyAOQd4AIAwoAgwiDyAEIAkQJAs2AgQgDkEyIAkQLBoCQCADIAZGBEAgByATOgAQIAcgDzYCACADQQBKBEAgByADNgIMIAcgDTYCCAwCCyAHQQA2AgwMAQsgB0G4AToAEAsgB0EUaiEHCyAGQQFqIQYMAQsLIANBAEwNASALKAIoQYCIwABxDQEgDkH9ACACKAIIQQAgAxAkGgwBCyACQQA2AkgLIAAoAgAgEBAnIAMgEkoNAgsgAigCUC0AKkEgcUUNACABLQANQQhxDQELIAIgARCMAwsgDEEQaiQAIAUL1AwCF38LfgJAIAQEQCAAKAIAKAIALQBQQcAAcQ0BCyABLwEAIhRBP0sNAEGDA0GCAyADQYMQcRshFSAAQfgDaiEYIANBwABxIRkgA0HAAXEhGiAAQdgAaiEbIANBgAFxIRYgA0GAEHEhHEJ/IBStIiCGQn+FISQgBK0hJkEBIQoDQAJAAkACQAJAAkACQCAKQf8BcUUgHyAkWnIgISAmVnJFBEAgIVBFBEAgCSkDCCAjhCEjCyAFIQkgISAmVARAIAIoAhggIadBAnRqKAIAIQkgHA0HCyAJLQApQQRxRQ0BIB8gJCAfIAktAB0bIANBgAVxQYABRhshHwsgHyAkUg0BIBQhBwwHCyAWBEAgCUEAOwEeCyAjQn+FISIgACgCBCAJLQAQQQZ0aigCMCESQgAhHgNAIB4gIFFFBEACQEIBIB6GIiUgH4NCAFINACABIB6nQQR0aiILQQhqKAIAEJ4BIgdFDQACQCAHLQAAQacBaw4DAAEAAQsgBygCHCASRw0AIBsgEiAHLgEgICIgFUEAELIHIghFDQAgCC8BDCIMQQFGBEAgCS8BLCEPQQAhBANAIAQgD0YNAiAEQQJ0IRAgBEEBaiEEIAggECAJKAI0aigCAEcNAAsLAkAgDEGCAXFFDQAgBy4BIEEASA0AIAAoAgAiBCALKAIIELMCIQcgBCAIKAIAEIYEIgRFDQEgBygCACAEKAIAEDANAQsgHyAlhCEfCyAeQgF8IR4MAQsLIAkoAigiBEGAIHENA0EAIQgCfyAEQYACcQRAQQAhC0EAIRdBAQwBC0EAIQcgCSgCICILRQ0HIAstADdBBHENByAEQYCAAnFFIAstADZBAEdxIQogCy8BMiEXIAsvATQLIQRCASAhhiEiIARB//8DcSEdQQAhD0EAIRBBACETA0AgCCAdRg0DQQEhBAJAAkAgCCAJLwEYIg1PDQAgCCAJLwEuSQ0AIBUgCSgCNCIMIAhBAnRqKAIAIgcvAQwiBHEEQEEAIAogBEGAA3EbIQoMAgsCQCAEQQFxRQ0AIA1BAWshESAHKAIAIQ4gCCEHA0AgByARRg0BQQAhBCAMIAdBAWoiB0ECdGooAgAoAgAgDkcNAAsMAQtBASEECwJAAkACfwJAIAsEQEF/IAsoAgQgCEEBdGovAQAiByAHIAsoAgwiDi8BIEYbQRB0QRB1IQwgCygCHCAIai0AAEEBcSERIApB/wFxDQFBACEKDAQLIApB/wFxIQ1BfyEMQQAhEUEAIQpBASANDQEaDAMLIAxBAEgNAUEBIAggDUkNABogDigCBCAMQQxsai0ABEEPcUEARwshCgwBCyAMQX5HIQoLQgAhHgNAIARB/wFxRSAeICBacg0EAkAgHyAeiKdBAXENACABIB6nQQR0aiINQQhqKAIAIg4QngEiB0UNACAEQQAgGhshBAJAAkAgDEF/TgRAAkAgBy0AAEGnAWsOAwAEAAQLIAcoAhwgEkcNAyAMIAcuASBHDQMgDEF/Rw0BDAILIAcgCygCKCAIQQR0aigCCCASELMFDQIgDSgCCCEOCyAAKAIAIA4QswIoAgAgCygCICAIQQJ0aigCABAwDQELIBYEQCAJIAhBAWo7AR4LAkAgGQRAIA0tABAhBAwBCyATBEBBASETIBAgEXNB/wFxIA0tABAiBEEBcUYNAQwHC0EBIRMgDS0AECIEQQFxIBFzIhBFBEBBACEQDAELIAYgBikDACAihDcDAAsgBEECcQRAIAggCS8BGEcNBiAJIAkoAihBgIAgcjYCKAtBASAPIAxBf0YbIQ9CASAehiAfhCEfDAILIB5CAXwhHgwACwALIAhBAWohCAwACwALQf8BIQcgCkH/AXENBQNAICBCAlMEQEEAIQcMBwsgH0J/ICBCAX0iIIZCf4UiHoMgHlINAAsgIKchBwwFC0EAIAogCCAXSRtBACAIGyEKCyAKIA9yIQRBACEKIARB/wFxRQ0BCyAJKQMIICeEIidCf4UhIkIAIR4DfyAeICBRBH9BAQUCQEIBIB6GIiUgH4NCAFINACAYIAEgHqdBBHRqKAIIIgQQlgIiKFAEQCAEEPEBRQ0BCyAlQgAgIiAog1AbIB+EIR8LIB5CAXwhHgwBCwshCgsgIUIBfCEhDAALAAsgB0EYdEEYdQuHAgEBfyAAQQA6ABggACABNgIEIAAgATYCACAAIAQ2AhQgAEIANwIIIAAgAjYCHCAAQQA2AhAgAEGBAjsAGQJAAkAgBQRAQX8hASAFKAIEIANBAXRqLwEAIgIgBSgCDCIELwEgRg0BIAJBEHRBEHUiAUEATgRAIAAgBCgCBCABQQxsai0ABToAGCAAIAUoAiAgA0ECdGooAgA2AggMAgsgAUF+Rw0BIAAgBSgCKCADQQR0aigCCDYCDCAFKAIgIANBAnRqKAIAIQEgAEH+/wM7AUggACABNgIIIAAgACgCDBCEAToAGCAAENIDDwsgAyIBQX5GDQELIAAgATsBSCAAENIDIQYLIAYLMwEBfwJAIABFDQADQCACIAAoAgBODQEgACACQQR0aigCCCABELkFIAJBAWohAgwACwALCyAAAkAgAEUNACAAKAIYIgAgASgCAEwNACABIAA2AgALC0gBAX8DQCABEJ4BIQMgACACOgAIAkAgAwRAIAMtAAAgAkYNASAAIAFBABDdARoLDwsgACADKAIMIAIQugUgAygCECEBDAALAAshACAAQQM7ATAgAEEAOwEsIABBADYCKCAAIABBPGo2AjQLRQEBfwJAIAEoAjQiAwRAIAAgAyACELwFIgMNAQtBACEDIAEoAhwiASgCACACTA0AIAAgASACQQR0aigCCBDBASEDCyADC98CAQd/IwBBIGsiAyQAAkAgAS0AACIEQYoBRwRAIARBpwFHDQEgAS4BICEEA0BBACECAkADQCAARSACcg0BQQAhAiAAKAIEIgcoAgAiBkEAIAZBAEobIQgCQANAIAIgCEYNASAHIAJBBnRqIgYoAjAgASgCHEcEQCACQQFqIQIMAQsLIAYoAhwhBSAGKAIYIQIMAQsLIAAoAgwhAAwBCwsgAkUEQEEAIQIMAgsgBQRAQQAhAiAEQQBIDQIgBSgCHCIBKAIAIARMDQIgASAEQQR0aigCCCEBIAMgBSgCIDYCBCADIAA2AgwgAyAAKAIANgIAIAMgARC9BSECDAILIARBAEgEQEGGkwEhAgwCCyACKAIEIARBDGxqQQAQ+AQhAgwBCyABKAIUIgEoAhwoAgghAiADIAEoAiA2AgQgAyAANgIMIAMgACgCADYCACADIAIQvQUhAgsgA0EgaiQAIAILcwEEfwJAIAFFDQAgAUEIaiECIAEoAgAhBQNAIAMgBU4NAQJAIAIoAihBAE4NACAAIAAoAigiBEEBajYCKCACIAQ2AiggAigCFCIERQ0AIAAgBCgCIBC+BSABKAIAIQULIAJBQGshAiADQQFqIQMMAAsACwtqAQF/IwBBEGsiBSQAIAUCf0HaJCABKAIYIgFBIHENABpB5RsgAUEEcQ0AGkHpJUHpJyABQQhxGws2AgQgBSACNgIAIABBozAgBRAmIAMEQCADQfkAOgAACyAAKAIAIAQQ+AIgBUEQaiQAC/QFAQt/IwBBMGsiBSQAIAAoAgAhByAFQRhqEKoCAn8gAUUEQEEAIQBBAAwBCyABKAIAIgZB//8BIAZB//8BSBshACAHIAZBDGytEEELIQogAiAAOwEAIAMgCjYCACAAQQAgAEEAShshCyAKIQYDQAJ/AkACQAJAAkACQCAJIAtHBEAgBy0AV0UNASAJIQsLIAVBGGoQrgIgBy0AV0UNAkEAIQADQCAAIAtGDQIgByAKIABBDGxqKAIAECcgAEEBaiEADAALAAsgASAJQQR0aiIMQQhqIQ0gDCgCDCIIBEAgDC0AEUEDcUUNAwsgDSgCABCeASEAA0AgAC0AACIEQY0BRwRAAkACfyAEQTtHBEAgBEGnAUcNAiAALQAHQQNxDQIgACgCLCIERQ0CAkAgAC4BICIAQQBODQAgBC4BICIAQQBODQBB3u8AIQgMCAsgBCgCBCAAQf//A3FBDGxqDAELIABBCGoLKAIAIQgLIAhFDQUMBAUgACgCECEADAELAAsACyAHIAoQJyADQQA2AgAgAkEAOwEACyAFQTBqJAAPCyAIEPIHDQAgByAIEFoMAQsgBSAJQQFqNgIQIAdBl/sAIAVBEGoQPAshBCAFQQA2AiwDQAJAIARFDQAgBUEYaiAEEI8BIgBFDQAgAC0ACUGAAXEEQCAGIAYvAQpBgAhyOwEKCyAEEDEiDiEAIAUgDkEATAR/QQAFA0ACQCAAQQFMBEAgBC0AACEIQQAhAAwBCyAEIABBAWsiAGotAAAiCEE6a0F1Sw0BCwsgACAOIAhB/wFxQTpGGws2AgAgBSAENgIEIAUgBSgCLEEBaiIANgIsIAUgADYCCCAHQa0OIAUQPCEEIAUoAixBBEkNAUEEIAVBLGoQ8wEMAQsLIAYgBDYCACAGIAQQ5AI6AAcgDC0AEkEBcQRAIAYgBi8BCkGACHI7AQoLAkAgBEUNACAFQRhqIAQgDRCoASANRw0AIAcQTwsgBkEMaiEGIAlBAWohCQwACwALQgEBfwJAAkAgAC0AI0EQcUUNACAAKAKQAw0AIAAoAsQBDQBBASEBIAAoAvwCQQBMDQEgACgClAMNAQtBACEBCyABC5YCAQJ/A0AgACABIAIgAxBrRQRAIAItAABB+QBHDwtBACEGAkACQAJAAkACQAJAAkACQCABLQAAIgVB5gBrDg0CAQEBAQECAgIBBQcGAAsCQAJAAkAgBUEwaw4KAgEHBwMDAwMDAwALIAVBrQFrDgkICAQGBgYGBggFCyAERQ0GQQEhBCABLQAFQRBxDQUMBwsgBA0EQQEhBiAAIAEoAhQiBSgCCCACIANBARDCBQ0EQQEhBCAAIAUoAhggAiADQQEQwgVFDQYMBAtBASEECyAAIAEoAhAgAiADIAQQwgVFDQRBAQ8LIAQNAUEBIQQgAS0AAkEtRg0DDAELIAVBE0YNAQsgBg8LQQEhBAsgASgCDCEBDAALAAtJACAAQQRqQQBBlAEQKBogAEHEAWpBAEHMABAoGiAAIAEoAogCNgK4ASABIAA2AogCIAAgATYCACABLQBXBEAgAEH1CEEAECYLC5oBAQV/AkAgAC0AACICQStrQf8BcUEBSw0AIAAoAhAQxAUhAQJAIAAoAgwQxAUiAygCBCIEQYGAgIABcUGAgICAAUcEQCABKAIEIgVBgYCAgAJxQYCAgIACRw0BCyABIAMgAkEsRhsPCyAFQYGAgIABcUGAgICAAUcgBEGBgICAAnFBgICAgAJHcQ0AIAMgASACQSxGGyEACyAAC40KAg5/A34jAEEgayINJAAgABBCIQogACAAKAIoIgtBAWo2AigCQCADRQRAQQAhAwwBCyABLQAFQRBxRQ0AIAEoAhQoAhwiCSgCACIHQQAgB0EAShshCANAAkBBACADIAYgCEcEfyAJIAZBBHRqKAIIELUCRQ0BIAYFIAgLIAdGGyEDDAILIAZBAWohBgwACwALIAJBBHEhEAJAAkAgACgCJA0AAn8CQCABKAIEQcAgcUGAIEcNACABKAIUIgYoAjQNACAGLQAEQQlxDQAgBigCPA0AIAYoAiQNACAGKAIgIgcoAgBBAUcNACAHKAIcDQAgBygCGC0AK0EBRg0AQQAhByAGKAIcIggoAgAiCUEAIAlBAEobIQkDQCAGIAcgCUYNAhogB0EEdCEOIAdBAWohByAIIA5qKAIILQAAQacBRg0ACwtBAAsiBkUNACAGKAIcIg4oAgAhCSAAIAAoAgAgBigCICgCGCIHKAI8EE4iDxC0AUEAIQYgACAPIAcoAhRBACAHKAIAELIBAkAgCUEBRw0AIA4oAgguASBBAE4NACAKQQ4QVSECIAAgCyAPIAdB8AAQ0AEgDSAHKAIANgIAIABBAEG0kgEgDRBvIAogAhAqQQEhBwwCC0EBIQgDQCAIRSAGIAlOckUEQCABKAIMIAYQ4QIhCCAHIA4gBkEEdGooAgguASAQvAQiDEHCAEogCCAMEOACQcEAa0ECSXIhCCAGQQFqIQYMAQsLIAhFDQAgCUEAIAlBAEobIREgB0EIaiEGQn8gCa2GQn+FIRVBACEHA0AgBigCACIIRSAHckUEQEEAIQcCQCAJIAgvATQiBkoNACAIKAIkIAZBPktyDQACQCAQRQ0AIAkgCC8BMkgNASAGIAlMDQAgCC0ANkUNAQtCACEUA0ACQCAHIBFGDQBBACEGIAAgASgCDCAHEOECIA4gB0EEdGooAggiEhDLAiEMA0AgBiAJRiITDQECQCAIKAIEIAZBAXRqLwEAIBIvASBGBEAgDEUNASAMKAIAIAgoAiAgBkECdGooAgAQMEUNAQsgBkEBaiEGDAELCyATDQBCASAGrYYiFiAUg0IAUg0AIAQEQCAEIAdBAnRqIAY2AgALIBQgFoQhFCAHQQFqIQcMAQsLQQAhByAUIBVSDQAgCkEOEFUhDCANIAgoAgA2AhAgAEEAQZWSASANQRBqEG8gCkHwACALIAgoAiwgDxAkGiAAIAgQvQEgCCgCHC0AACEHAkAgA0UNACAAIAAoAixBAWoiBjYCLCADIAY2AgAgCUEBRw0AIAogCyAGEOoLCyAHQQNqIQcgCiAMECoLIAhBFGohBgwBCwsgBw0BCwJAIAJBAXFFDQAgAS0ABUEQcQ0AIAEoAgwhAiABQQA2AgwgARDxASEGIAEgAjYCDCAGBEAgASgCFCgCAEECSg0BC0F/IQsgACAAKAIoQQFrNgIoQQUhBwwBCyAAKAKIASECAkAgEARAQQAhBiAAQQA2AogBDAELIANFBEBBACEGDAELIAAgACgCLEEBaiIGNgIsIAMgBjYCAAsgACABIAsQ6QsgBgRAIAogCyAGEOoLCyAAIAI2AogBQQIhBwsCQCAERSAHQQNGciAHQQRGcg0AQQAhBiABKAIMEJIBIgBBACAAQQBKGyEAA0AgACAGRg0BIAQgBkECdGogBjYCACAGQQFqIQYMAAsACyAFIAs2AgAgDUEgaiQAIAcLFQAgAARAIAAgAUJ/QQEgAhDZARoLC2sBAn9BASEEAkAgACABIAIgAxBrRQ0AIAItAAAiBUErRgR/IAAgASACKAIMIAMQxwUNASAAIAEgAigCECADEMcFDQEgAi0AAAUgBQtBM0YEQCAAIAEgAigCDCADQQAQwgUNAQtBACEECyAEC5kIAQ9/IwBBEGsiCSQAIAlBADYCDCAJQQA2AgQgASgCDCEMIAAtABchBiAAIAEQ8wtFBEAgACABEPILIQ0gACgCACABKAIMEJIBIgdBBWxBAWqtEEEhDgJAIAAoAgAtAFcNACAAKAIIIQUgACABQQNBACAJQQxqIAIgA0YiDxsgDiAJQQRqEMUFIRAgAEEAOgAXIAAgDCAJQQhqEMwHIREgACAGOgAXIAdBACAHQQBKGyEKA0ACQCAEIApGBEAgCiEEDAELIA4gBEECdGooAgAgBEcNACAEQQFqIQQMAQsLIBEhBgJAIAQgB0YNACAAIAcQeyEGQQAhBANAIAQgCkYNASAFQdAAIAQgEWogDiAEQQJ0aigCACAGakEAECQaIARBAWohBAwACwALAkAgEEEFRgRAIAAQMiEHIAEoAhQhCEEAIQQgACABKAIMEMEBIQtBACEBIA9FBEAgBUHmACAGIAYgABBGIgEQJBoLA0AgBCAIKAIATkUEQCAAIAggBEEEdGoiDEEIaigCACAJEIUBIQoCQCABRQ0AIAwoAggQtQJFDQAgBUHmACABIAogARAkGgsgACAJKAIAEEAgBQJ/AkAgAiADRgRAIAQgCCgCAEEBa04NAQsgBUEzQTUgBiAKRhsgBiAHIAogC0F+EDMaIA0sAAAMAQsgBUEyQTQgBiAKRhsgBiACIAogC0F+EDMaIA0tAABBEHILQRh0QRh1Qf//A3EQOCAEQQFqIQQMAQsLIAEEQCAFQTIgASADECIaIAUgAhBbGgsgBSAHEDQgACABEEAMAQtBACEEIAIhCCAPRQRAIAAQMiILIQgLA0AgBCAKRwRAIAAoAiQNAyABKAIMIAQQ4QIQtQIEQCAFQTIgBCAGaiAIECIaCyAEQQFqIQQMAQsLAn8gEEEBRgRAIAVBHSAJKAIEIgggAiAGECQaIAVBCBBVDAELIAVB4AAgBiAHQQAgDSAHEDMaIAkoAgQhCCACIANGBEAgBUEbIAggAiAGIAcQNxoMAgsgBUEcIAhBACAGIAcQNwshDyAJKAIMIgFFIAdBAUdyRQRAIAVBMyABIAIQIhoLIAIgA0YEQCAFIAIQWxoLIAsEQCAFIAsQNAsgBUEjIAggAhAiIRAgAiEBIAdBAk4EQCAAEDIhAQtBACEEA0AgBCAKRkUEQCAAEEYhCyAAIAwgBBDhAhDBASESIAVB3gAgCCAEIAsQJBogBUE0IAQgBmogASALIBJBfhAzGiAAIAsQQCAEQQFqIQQMAQsLIAVBCEEAIAMQIhogB0ECTgRAIAUgARA0IAVBJiAIIBBBAWoQIhogBUEIQQAgAhAiGgsgBSAPECoLIAYgEUYNACAAIAYQQAsgACgCACAOECcgACgCACANECcLIAlBEGokAAu8AgEDfwJAIAAoAkQiBUUgAkEATnINACAFQQhqIQQgBSgCACEDA0AgA0EATA0BAkAgBC0ACUEIcUUNAEEAIAQoAgAgAUF/EGsNACAEKAIMDwsgA0EBayEDIARBEGohBAwACwALAkAgACgCACABQQAQNiIBRQ0AIAEtAARBCHFFDQAgACgCCCIEQQ4QVSEFIABBADoAFyAAKAIAIgMtAFdFBEAgAkEASARAIAAgACgCLEEBaiICNgIsCyAAIAEgAhBtIAAoAgAhAwsgAEEBOgAXIAMgARAuIAQgBRAqIAIPCyAAIAUgARA7IgEEQCABIAEoAgBBAWtBBHRqIgNBEWogAy8AEUH3/wNxIAJBHHZBCHFyOwAAIAJBAEgEQCAAIAAoAixBAWoiAjYCLAsgAyACNgIUCyAAIAE2AkQgAgsLACAAQQJBABDSBQtZACAAKAIkRQRAAn8gCARAIAAgAiABEMsCDAELIAAgASACEMsCCyEIIAEgAhCEARDgAiAHckH/AXEhASAAKAIIIAMgBSAGIAQgCEF+EDMaIAAoAgggARA4CwszAQF/IwBBEGsiBCQAIAQgAjYCCCAEIAE2AgQgBCADNgIAIABBk9sBIAQQbCAEQRBqJAALNwACQCAAKAIIRQ0AIAAgARC9AiAAKAIIIAFBACACEJYDIAFBAUYNACAAKAIIQQFBACACEJYDCwtpAQN/IwBBEGsiAiQAAkACQCABKAIAIgNBm4kBQQcQSEUNACABKAIcIgRBgIACcQ0AQQAhASAEQYAgcUUNASAAKAIAEMEFRQ0BCyACIAM2AgAgAEH89AAgAhAmQQEhAQsgAkEQaiQAIAELoQMBA38gACgCCCEJIAUEQCABKAIkBH8gBSAAEDI2AgAgACACQQFqNgI0IAAgASgCJCAFKAIAENALQQAhBiAAQTRqBSAFC0EANgIACyAAAn8CQCAERQ0AIAEtADdBCHFFDQAgAUEyagwBCyABQTRqCy8BACIKEHshCEEAIQQCQCAGRQ0AIAcgCEYEQCAGIgQoAiRFDQELQQAhBAtBACEFA0AgBSAKRwRAAkACQCAERQ0AIAVBAXQiBiAEKAIEai8BACIHQf7/A0YNACAHIAEoAgQgBmovAQBGDQELIAUgCGohBgJAIAEoAgQgBUEBdGouAQAiB0F+RgRAIAAgAkEBajYCNCAAIAEoAiggBUEEdGooAgggBhC4BCAAQQA2AjQMAQsgACgCCCABKAIMIAIgByAGEIkBCyABKAIEIAVBAXRqLgEAQQBIDQACQCAJKAJsIgZBAEwNACAJKAJoIAZBAWsiBkEUbGotAABB1wBHDQAgCSAGEN8BCwsgBUEBaiEFDAELCyADBEAgCUHhACAIIAogAxAkGgsgACAIIAoQoQEgCAs/AQF/IABFBEBBAA8LIAAQTCAAKAIEIgIvARghACABQQBOBEAgAiAAQXNxIAFBAnRyIgA7ARgLIABBAnZBA3ELHQAgAQRAIABBASABELABGiAAQdQAQQFBARAiGgsLQAEBfyMAQSBrIgMkACADIAI2AhggA0E7NgIIIANBPDYCBCADIAE7ARQgAyAAEE0aIAMvARQhACADQSBqJAAgAAu7AwEFfwJAIAAtAGFBpwFHDQAgABCoCg0AIABBABDCAyAAEJcFA0AgACgCECECIAEgACgCFE5FBEACQCACIAFBBHRqIgMoAgQiAkUNACACENYCIANBADYCBCABQQFGDQAgA0EANgIMCyABQQFqIQEMAQsLIAIoAhwiAgRAIAIQqwQLIAAQrAUgABCVByAAQaQDaiEDA0AgAygCACIDBEAgAygCCCEBA0AgACABEJEKIAEoAgwhAiAAIAEQJyACIgENAAsMAQsLIABBnANqEK4CIABBtANqIQQDQCAEKAIAIgQEQCAEKAIIIQVBACEBA0AgAUEDRwRAIAUgAUEUbGoiAygCECICBEAgAygCCCACEQMACyABQQFqIQEMAQsLIAAgBRAnDAELCyAAQawDahCuAiAAQYgDaiEBA0AgASgCACIBBEAgACABKAIIIgIQ6gYgACACEOkGDAELCyAAQYADahCuAiAAQQAQkQEgACgCoAIQnQEgAEHVAToAYSAAIAAoAhAoAhwQJyAAKAKAAiICBEAgACgC/AEgAhEDAAsgAEHOAToAYSAALQC4AgRAIAAoAuACECMLIAAQIwsLkAgBDn8jAEEQayIJJAACQCAAKAIAIgwtACFBwABxRQ0AIAEtACsNACACQQFqIRIgAUEwaiEHIAwoAhAgDCABKAI8EE4iDkEEdGooAgAhECAALQCXASERA0AgBygCACIGBEAgCUEANgIMIAlBADYCCAJAAkAgBEUNACABKAIAIAYoAggQU0UNACABIAYgBCAFEJMLRQ0BCyAGKAIIIQgCQAJAAn8gAC0AlwEEQCAMIAggEBB8DAELIABBACAIIBAQrAILIgsEQCAAIAsgBiAJQQxqIAlBCGoQ2QNFDQELIBFFDQUgDC0AVw0FIAsNAiAAEEIiCCgCbCAGKAIUIgdqQQFqIQtBACEKA0AgByAKTA0CIAhBMiAGKAIAIAYgCkEDdGouASQQhwEgEmogCxAiGiAKQQFqIQogBigCFCEHDAALAAsgCSgCCCINRQRAIAkgBigCJDYCBCAJQQRqIQ0LIAtBIGohCEEAIQcgCSgCDCEPQQAhCgNAIAYoAhQgCkoEQCANIApBAnRqIhMoAgAgAS4BIEYEQCATQX82AgALIAwoAugCBEAgCygCBCEHIAAgCygCACAHIA8EfyAPKAIEIApBAXRqBSAICy4BAEEMbGooAgAgDhDWC0ECRiEHCyAKQQFqIQoMAQsLIAAgDiALKAIUQQAgCygCABCyASAAIAAoAihBAWo2AiggAgRAIAAgDiALIA8gBiANIAJBfyAHEJALCwJAIANFDQACf0EAIAAoAnQiCCAAIAgbKAJ8IghFDQAaIAgoAgAiCCAGKAIcRgRAQQEgBi0AGUEIRg0BGgsgBigCICAIRgRAQQEgBi0AGkEIRg0BGgtBAAsNACAAIA4gCyAPIAYgDSADQQEgBxCQCwsgDCAJKAIIECcMAQsgCEGeASAGLQAYQX8QIhoLIAZBBGohBwwBCwsgBEEARyEKIAEQjwMhBwNAIAdFDQEgCUEANgIMIAlBADYCCAJAIAQEQCABIAcgBCAFEKYHRQ0BCwJAIActABgNACAMLQAiQQhxDQAgACgCdA0AIAAtABRFDQELIAAgASAHIAlBDGogCUEIahDZAwRAIBFFDQMgDC0AV0UNAQwDCyAAQQBBAEEAEMABIgYEQCAGIAcoAgAiCDYCGCAGIAgoAgA2AhAgCCAIKAIYQQFqNgIYIAAgACgCKCIIQQFqNgIoIAYgCDYCMCADBEAgACAGIAEgCSgCDCAHIAkoAgggA0F/EI8LCwJAIAJFDQAgByAKai0AGSEIIAAgBiABIAkoAgwgByAJKAIIIAJBARCPCyAHLQAYDQACQCAIQQhrDgMBAAEACyAAEIoBCyAGQQA2AhAgDCAGEIEBCyAMIAkoAggQJwsgBygCDCEHDAALAAsgCUEQaiQAC1QBAX8jAEEgayIDJAAgA0IANwMQIANCADcDCCADQgA3AwAgAyABNgIYIANBOTYCBCADIAAQTRogAy8BFCEAIANBIGokACAAIABB/f8DcSACG0EARwvRAQEHfyAAKAJwBEAgAEHwAGohAiAAKAIAIQcgACgCCCEFA0ACQCACKAIAIgJFDQAgAigCDCEDIAcoAhAhASACKAIIIQQgABBGIQYgBUE3IANBAmogBSgCbEEHaiADECQaIABBACACKAIIIAEgBEEEdGooAgwoAkhB8QAQ0AEgBUEFQbD+AhDPAiIBRQ0AIAEgA0EBaiIENgJIIAEgBjYCRCABIAY2AjQgASADQQFrNgIsIAEgBDYCHCABIAQ2AgQgAUEIOwE+IAAgBhBADAELCwsL0wMBCH8gACgCCCELIAAQMiENQRtBHiABLQAcQYABcRshEiAJRQRAIAsgEiADIA0gBSAGEDcaC0EBIAIgACABQQBBABDeAxsEQCAAIAJBAEEAQQMgASAIENsHIQ8gACABEJIMIRAgACAAKAIsIhFBAWoiDiABLgEiajYCLCALQdAAIAUgDhAiGiARQQJqIREgDyAQciIPQX9GIRADQCABLgEiIAxKBEAgEEUgDyAMdkEBcUUgDEEfS3JxRQRAIAsgASADIAwgASAMQRB0QRB1EIcBIBFqEIkBCyAMQQFqIQwMAQsLIAsoAmwhDCAAIAJBgAFBAEEBIAEgDiAIIA0Q2wMgDCALKAJsSARAIAsgEiADIA0gBSAGEDcaQX8hCgsgACABIA5BAEEAQQAQ1AULIAEtACtBAkcEQCAAIAEgAyAEQQAgChDaByALQYIBIAMgB0EARxAiGgJAIAAtABIEQCABKAIAQe2yARBTDQELIAsgAUF7EIgBCyAJBEAgC0EEEDgLIAMgCkYgCkEASHJFBEAgC0GCASAKECwaCyALIAlBAkZBAXQQOAsgACABQQAgDkEAQQAQkAwgACACQYABQQBBAiABIA4gCCANENsDIAsgDRA0CyUBAX8gASAAKAJsIgJBAWtGBEAgACABNgJsDwsgACABIAIQ1wMLCgAgAC0ANEEBcQsRACABIAApAxg3AgAgAC0AMgsRACAAIAAtAJYBQRByOgCWAQuoAQEGfyMAQRBrIgMkAEGB+QAhBAJAAn8gAS0AK0EBRgRAIAAoAgAgARC3ASgCBCgCACgCNEUMAQsCQCABKAIcIgdBgSBxRQ0AIAAoAgAhBiAHQQFxBEAgBhCjAg0BIAAtABJFDAILIAYQwQUhBQsgBQtFBEAgAg0BQb4NIQQgAS0AK0ECRw0BCyADIAEoAgA2AgAgACAEIAMQJkEBIQgLIANBEGokACAIC5oCAgN/AX4jAEEQayIFJAACQCABKAIAIgQgAmoiBiABKAIESwRAAkACQCAGQcgBTgRAIAVByAE2AgAgAEGDgwEgBRAmDAELIAAoAgAgASACrCAErEIBhnwiB0LIASAHQsgBUxsiB0IGhkIIhBC5ASIBDQELQQAhAQwCCyABIAc+AgQgASgCACEECyABQQhqIQADQCADIARORQRAIAAgBEEBayIEIAJqQQZ0aiAAIARBBnRqQcAAECUaDAELCyABIAEoAgAgAmo2AgAgASADQQZ0akEIakEAIAJBBnQQKBogAyACIANqIgAgACADSBshAANAIAAgA0YNASABIANBBnRqQX82AjAgA0EBaiEDDAALAAsgBUEQaiQAIAELJgEBfyMAQRBrIgIkACACIAE2AgAgAEEAQdI1IAIQbyACQRBqJAALZAEBfwJAIAAoAiQgAUEBa0EBS3INACAAKAIIIgAgAxDfASAAIANBAWoiBBCGAS0AAEG5AUYEQCAAIAQQ3wELIAFBAkcNACAAIAMQhgEiACACNgIIIABBATYCBCAAQcsAOgAACwtFAQF/IwBBIGsiAiQAIAIgADYCGCACQQA2AhAgAkEsNgIMIAJBKzYCCCACQTU2AgQgAkEANgIAIAIgARBNGiACQSBqJAALOwECfwJAIAFFDQAgAUEIaiECA0AgAyABKAIATg0BIAAgAigCABDgBSACQRBqIQIgA0EBaiEDDAALAAsLjwEBAn8jAEEgayICJAACf0EAIAAQngEiAEUNABoCQCAALQAAIgNBM0cEQANAIANBLEcNAkEBIAAoAgwgARDiBQ0DGiAAKAIQIgAtAAAhAwwACwALIAAoAgwhAAsgAiABNgIYIAJBADsBFCACQgA3AwggAkEvNgIEIAIgABBNGiACLwEUCyEAIAJBIGokACAAC5kEAQp/IwBBEGsiCiQAIAEoAgwhBCAAIAAoAigiCEECajYCKAJAIABBGyABKAIAQQAgACgCACIFKAIQIAUgASgCGBBOIglBBHRqKAIAEGENACAAIAkgBCgCFEEBIAQoAgAQsgEgABBCIgNFDQAgAiIFQQBOIgtFBEAgASgCLCEFCyAAIAEQwgQhBiAAIAAoAigiB0EBajYCKCADQfcAIAdBACABLwEyIAYQwQQiDEF4EDMaIAAgCCAJIARB8AAQ0AEgA0EjIAhBABAiIQYgABBGIQQgABC2AiAAIAEgCCAEQQAgCkEMakEAQQAQzwUaIANBiwEgByAEECIaIAAgCigCDBDUByADQSYgCCAGQQFqECIaIAMgBhAqIAtFBEAgA0GRASAFIAkQIhoLIANB8QAgCEEBaiIGIAUgCSAMQXgQMxogAyACQRt2QRBxQRFzEDggA0EhIAdBABAiIQkCQCABLQA2BEAgA0EBEFshAiADKAJsIQUgA0GEASAHIAIgBCABLwEyEDcaIABBAiABEL4HIAMgAhAqDAELIAAQigEgAygCbCEFCyADQYUBIAcgBCAGECQaIAEtADhBAnFFBEAgA0GJASAGECwaCyADQYoBIAYgBBAiGiADQRAQOCAAIAQQQCADQSQgByAFECIaIAMgCRAqIANB+gAgCBAsGiADQfoAIAYQLBogA0H6ACAHECwaCyAKQRBqJAALOwECfyMAQdAAayICJAAgAQR/IAJBAEHMABAoIgMgATYCICAAQQRqIAMQagVBAAshASACQdAAaiQAIAELJAAgASABLwEKIgFBAXI7AQogAUHgAHEEQCAAQdKKAUEAECYLC1YBAn8jAEEgayICJAAgAC0A0AEhAyACQgA3AhQgAkIANwIMIAJBJTYCCCACQSY2AgQgAiAANgIAIABBAzoA0AEgAiABEE0aIAAgAzoA0AEgAkEgaiQAC1oBAX8DQCABIgNBAWohASADLQAAQcDqAWotAABBAXENAAsgAiADayEBA0AgASICQQBKBEAgAyACQQFrIgFqLQAAQcDqAWotAABBAXENAQsLIAAgAyACrBDXAQumAQICfwF+IAAoAgAiAyADKQMgIgVCu3+DQsAAhDcDICAAIAFBABDgASADIAU3AyACQCAAKAIkDQADQCABIgQoAjQiAQ0ACyADQsAAEEEiAUUNACABQcgBOwEmIAFBADYCACABQQE2AhggACAEKAIcIAFBImogAUEEahDABSAAIAEgBCACEMYHIAFB//8DOwEgIAMtAFdFBEAgAQ8LIAMgARDTAQtBAAt2AQJ/AkAgAi8BCCIFRSABKAI0IgRFckUEQCAEKAIAIAVODQELIAIgBAR/IAQvAQBBAWoFQQELOwEIIAEgACAEIAMQOzYCNA8LIAAoAgAgBEEIaiIAIAVBBHRqQRBrKAIAEC4gAi8BCEEEdCAAakEQayADNgIAC70BAQF/AkACQCACQdUARiAEQdgARnENAAJAIAJB1gBHDQAgBEHVAGsOBAEAAAEACyAAKAIAQuQAEEEiB0UNASAHIAQ6ABIgByACOgARIAcgAUHZACABGzoAECAGRQRAIAAoAgAoAlBBHnRBH3VBwgBxIQYLIAcgAUU6ABMgByAGOgAUIAcgACAFEPoLNgIcIAcgACADEPoLNgIYIAcPCyAAQbXPAEEAECYLIAAoAgAgBRAuIAAoAgAgAxAuQQALQQEBfwJAIAFFDQAgAgRAIABBJCABEOEBIgFFDQELIAAoAiRFBEAgASAAKAKIAjYCCCAAIAE2AogCCyABIQMLIAMLhQEBAn8gACgCACEEAkACQCABRQRAIARCEBBBIgMNAQwCCyAEIAEgASgCAEEDdEEQaq0QuQEiAw0AIAQgARDtAQwBCyADIAMoAgAiAUEBajYCACADIAFBA3RqIAQgAhB0IgE2AgggAUUgAC0A0AFBAklyRQRAIAAgASACEPIBGgsgAw8LQQALlCwCIX8BfiMAQaABayINJAAgDUEANgKcASANQQA2ApgBIAAoAgAhGQJAIAAoAiQEQCACIRQMAQsgDUEANgJ8An9BACACRQ0AGgJAIAItAAVBAnFFDQAgAigCNA0AIAIoAhwhHCACQQA2AhwgGSACEGZBAAwBCyACCyEUIAAgARCVAyIHRQ0AIABBEiAHKAIAQQAgGSgCECAZIAcoAjwQTiIKQQR0aigCABBhDQAgBygCHCEkIAAgB0H/AEEAIA1B9ABqEN8DIR8gBy0AKyEjIAAgBxC7Ag0AIAAgByANKAJ0ENwFDQAgABBCIgtFDQAgAC0AEkUEQCALENsFCyAAIBQgH3JBAEcgChC1AQJAIB8gAyAURXJyRQRAAn8gBCEPAkACQCAAKAKIAg0AIBQoAkANACAHLQArQQFGDQACQCAPQQtHDQAgBy4BIEEATgRAIActACoiD0ELRw0BC0ECIQ8LIBQoAiAiAigCAEEBRw0AIAIoAhwNACAUKAIkDQAgFCgCMA0AIBQoAigNACAUKAI8DQAgFCgCNA0AIBQtAARBAXENACAUKAIcIgYoAgBBAUcNACAGKAIILQAAQbQBRw0AIAAoAgAhECAAQQAgAkEIahCdAiIRRQ0AIBEoAhQgBygCFEYEQCARKAI8IAcoAjxGDQELIBEoAhwiAiAHKAIcIgZzQYABcQ0AIBEtACsNACAHLwEiIhMgES8BIkcNACAHLwEgIBEvASBHQQAgBkGAgARxIAJBgIAEcRtyDQADQCATQRB0QRB1IAxKBEAgDEEMbCIGIAcoAgRqIgIvAQpB4ABxIgggESgCBCAGaiIGLwEKQeAAcUcNAyAIBEBBACARIAYQlwEgByACEJcBQX8Qaw0DCyACLQAFIAYtAAVHDQMgAhCoAiAGEKgCEFMNAyACLQAEQQ9xBEAgBi0ABEEPcUUNAwsCQCAMRSACLQAKQeAAcXINACAHIAIQlwEiAkEARyARIAYQlwEiBkVGDQMgAkUNACACKAIIIAYoAggQlQENAwsgDEEBaiEMIAcvASIhEwwBCwsgEUEIaiEGQQAhEyAHQQhqIhYhAgNAIAIoAgAiCARAQQEgEyAILQA2GyETIAYhAgNAIAIoAgAiAkUNAyAIIAIQiwtFBEAgAkEUaiECDAELCwJAIAIoAiwgCCgCLEcNACARKAI8IAcoAjxHDQBBmwMQlAJFDQMLIAhBFGohAgwBCwsgBygCECICBEAgESgCECACQX8QuQINAQsCQCAQKQMgIidCgIABg1BFBEAgBygCMA0CICdCgICAgBCDUA0BDAILICdCgICAgBCDQgBSDQELIBAgESgCPBBOIRogABBCIQggACAaELQBIAAgACgCKCISQQJqNgIoIAAgCiAHEI8MIQIgCEHLAEEAIAAQRiIYECIaIAAQRiEXIAAgEkEBaiIJIAogB0HxABDQAQJAIBAtABhBBHENAAJAIAcuASBBAEgEQCAHKAIIDQELIBMNACAPQQNrQX1LDQELIAhBIyAJQQAQIiEMIAhBCBBVIR0gCCAMECoLAkAgES0AHEGAAXFFBEAgACASIBogEUHwABDQASAIQSMgEkEAECIhEwJAIAcuASBBAE4EQCAIQYcBIBIgFxAiIQwgEC0AGEEEcUUEQCAIQR4gCUEAIBcQJCEeIAAgDyAHEKEHIAggHhAqCyAAIAIgFxCODAwBCwJAIAcoAggNACAQLQAYQQhxDQAgCEH/ACAJIBcQIiEMDAELIAhBhwEgEiAXECIhDAtBqQEhAiAQLQAYQQRxBEAgCEGJASAJECwaQZgBIQILIAhBgQEgCSASIBcQJBogCEGAASAJIBggFxAkGiAQLQAYQQRxRQRAIAhBfyAHQXsQ1gELIAggAhA4IAhBJiASIAwQIhogCEH6ACASQQAQIhogCEH6ACAJQQAQIhoMAQsgACAKIAcoAhRBASAHKAIAELIBQQAhEyAAIBogESgCFEEAIBEoAgAQsgELA0AgBiECAkACQCAWKAIAIgwEQANAAkAgAigCACIPRQ0AIAwgDxCLCw0AIA9BFGohAgwBCwsgCEHwACASIA8oAiwgGhAkGiAAIA8QvQEgCEHxACAJIAwoAiwgChAkGiAAIAwQvQEgCEEBEDggCEEjIBJBABAiIRYCQAJAIBAtABhBBHEEQCAPLwE0IR5BACECA0AgAiAeRiIgDQVB8PoBIA8oAiAgAkECdGooAgAQUw0CIAJBAWohAgwACwALQQghAiARLQAcQYABcUUNAUEJQQggDC8AN0EDcUECRhshAgwBC0EIIQIgIA0CCyAIQYYBIBIgGEEBECQaDAILIBMEQCAIIBMQKgsgACAXEEAgACAYEEBBASAdRQ0FGiAAENYFIAhBxgBBAEEAECIaIAggHRAqIAhB+gAgCUEAECIaDAMLIAhBiQEgCRAsGiAIQYEBIAkgEhAiGkGYASECCyAIQYoBIAkgGBAiGiAIIAIQOCAIQSYgEiAWQQFqECIaIAggFhAqIAhB+gAgEkEAECIaIAhB+gAgCUEAECIaIAxBFGohFgwACwALQQAMAQtBAAsNAQsgACAKIAcQjwwhGiAAIAAoAiwiAkEBaiIRIAcuASJqIgY2AiwgESEPIActACtBAUYEQCAAIAZBAWo2AiwgAkECaiEPCyAHLwEcQcAIcUUhEAJAAkACQAJAIANFBEBBfyECDAELIANBAToABCADKAIAIgJBACACQQBKGyEIA0AgCCAORgRAQX8hAgNAIAggFUYNA0EAIQ4gBy4BIiIGQQAgBkEAShshEiADIBVBA3RqIgkoAgghBgJAAkADQCAOIBJGDQECQCAGIA5BDGwiDCAHKAIEaigCABAwRQRAIAkgDjYCDCAHKAIEIhIgDGotAApB4ABxRQ0BIA0gEiAOQQxsaigCADYCQCAAQf7cASANQUBrECYMCQsgDkEBaiEODAELCyAOIAcuASJODQAgEEEAIA4gFUYbIRAgFSACIA4gBy4BIEYbIQIMAQsgBhD5BARAQQAhECAVIQIgJEEYdEEYdUEATg0BCyANIAY2AjQgDSABQQhqNgIwIABBuDQgDUEwahAmIABBAToAEQwFCyAVQQFqIRUMAAsABSADIA5BA3RqQX82AgwgDkEBaiEODAELAAsACyAPQQFqIRICfwJAIBQEQCAAIAAoAixBAWoiBjYCLEEAIQ4gC0EKIAZBACALKAJsIghBAWoQJBogDUH4AGoiFUENIAYQvgEgDSASQQAgEEH/AXEbNgKEASANIAcuASI2AogBIAAgFCAVEIsBDQcgACgCJA0HIA0oAoQBISEgCyAGEOYDIAsgCBAqIBQoAhwoAgAhGyAfDQECf0EAIQggABBCIgwoAmwhBiAHLQArQQFGBEAgACgCACAHELcBIQgLIAZBASAGQQFKGyETIAdBCGohDkEBIRUDQEEAIBMgFUYNARoCQAJAIAwgFRCGASIJLQAAIgZBrQFHBEAgBkHwAEcNAiAJKAIMIApHDQIgDiEGIAkoAggiECAHKAIURg0BA0AgBigCACIJRQ0DIAlBFGohBiAQIAkoAixHDQALDAELIAkoAhAgCEcNAQtBAQwCCyAVQQFqIRUMAAsACw0BQQAhE0EBDAILIA1BADYCbCANQgA3AmQgDUIANwJcIA1CADcCVCANIAA2AlACQCAcBEAgHCgCACEbIA1B0ABqIBwQgAINAQtBfyETQQEMAgtBACEOQQAhFAwGCyAAIAAoAigiE0EBajYCKCAAEEYhBiAAEEYhCiALQfYAIBMgGxAiGiALQQsgDSgCfBAsIQ4gC0HhACAhIBsgBhAkGiALQf8AIBMgChAiGiALQYABIBMgBiAKECQaIAsgDhBbGiALIA4QKiAAIAYQQCAAIAoQQEEACyEXAkAgAyAbQQBMcg0AQQAhBgJAIAcoAhwiCEHgAHFFIAcuASAiAkEASHINACACIQ4DQCAOQQBMDQEgAiAHKAIEIA5BAWsiDkEMbGotAApB4ABxQQBHayECDAALAAsgBy4BIiEKAkAgCEHiAHFFDQAgCkEAIApBAEobIQhBACEOA0AgCCAORg0BIAYgBygCBCAOQQxsai0ACkHiAHFBAEdqIQYgDkEBaiEODAALAAsgGyAKIAZrIgZGDQAgDSAbNgIoIA0gBjYCJCANIAFBCGo2AiAgAEGk+AAgDUEgahAmDAELAkAgA0UNACAbIAMoAgAiBkYNACANIAY2AhQgDSAbNgIQIABBiCYgDUEQahAmDAELQQAhDkEAIRUCQCAZLQAkQQFxRQ0AIAAtABINACAAKAJ4DQAgAC0AlQENACAAIAAoAixBAWoiFTYCLCALQccAQQAgFRAiGgsgI0ECRg0CIBkgACAHQfEAQQBBf0EAIA1BnAFqIA1BmAFqEMAEIgpBAnRBCGqtEFYiDg0BC0EAIQ4MAwtBACEGIApBACAKQQBKGyEKIAdBCGohDANAIAYgCkcEQCAMKAIAIQggACAAKAIsQQFqIgk2AiwgDiAGQQJ0aiAJNgIAIAAgACgCLCAILwE0ajYCLCAGQQFqIQYgCEEUaiEMDAELCyAAIAAoAixBAWoiBjYCLCAOIApBAnRqIAY2AgALIAUEQAJAAkACQCAHLQArQQFrDgIAAQILIA0gBygCADYCACAAQfXdASANECYMBAsgAEGCDkEAECYMAwsgACAFKAIAEMYEDQIgASANKAKcATYCMCAFIQYDQCAGIBI2AiQgBiABNgIgIAYgDSgCnAE2AiggBiANKAKYATYCLCAGKAIABEAgBiEKQQAhGCMAQcABayIJJAAgCUIANwOwASAJQgA3A7gBIAlCADcDqAEgCSABNgKkASAJIAA2AqABIAlB5ABqISUCQANAAkAgCkUNACAKKAIAIghFDQAgCUGgAWogCBCAAiIeDQJBASEeIAlBoAFqIAooAgQQoAENAiABKAIwISAgCigCACEdAkACQCABKAIYIggtABxBgAFxDQAgHSgCAEEBRw0AIB0oAggiDC0AAEGnAUcNACAMLwEgQf//A0YNAQsgCUEwakEAQegAECgaIAkgIDYCgAEgCUGnAToAZCAJICU2AjwgCUHxADoAMCAIQQhqIQwCQANAIAwoAgAiCARAAkAgCC0ANkUNACAILwEyIiIgHSgCAEcNACAIKAIkIgwEQCAKKAIEIhBFDQEgACAQIAwgIBBrDQEgCC8BMiEiC0EAIRADQCAQICJHBEAgCSAIKAIgIBBBAnRqKAIANgI4AkAgCCgCBCAQQQF0ai8BACIMQf7/A0YEQCAIKAIoIBBBBHRqKAIIIhYtAABB8QBGDQEgCSAWNgI8IAlBMGohFgwBCyAJIAw7AYQBIAkgJTYCPCAJQTBqIRYLQQAhDANAIAwgIkYNAyAMQQR0ISYgDEEBaiEMIAAgHSAmaigCCCAWICAQa0EBSg0ACyAQQQFqIRAMAQsLIAogCDYCHAwDCyAIQRRqIQwMAQsLIAooAhwhCAsgCA0AAkACQCAYDQAgCigCEA0AIAlBADoAIAwBCyAJIBhBAWo2AhBBECAJQSBqQeXgASAJQRBqEMQBGgsgCSAJQSBqNgIAIABBuRMgCRAmDAMLIBhBAWohGCAKKAIQIQoMAQsLQQAhHgsgCUHAAWokACAeDQQLIAYoAhAiBg0ACwsCQCAXRQRAIAtBIyATECwhCCALKAJsIQkMAQsgFEUEQEEAIQlBACEIDAELIAtBCyANKAJ8ECwhCSACQQBOBEAgC0HQACACICFqIA8QIhoLIAkhCAtBACEQIBIhCkEAIQwDQCAHLgEiIAxKBEACQCAHLgEgIAxGBEAgC0HMACAKECwaDAELAkACQAJAIAcoAgQgDEEMbGoiFi8BCiIGQeIAcQRAIBBBAWohECAGQSBxBEAgCkEBayEKDAULIAZBwABxBEAgDS0AdEEBcUUNBSALQcwAIAoQLBoMBQsgAw0BIAAgByAWEJcBIAoQvgQMBAsgA0UNAQtBACEGIAMoAgAiGEEAIBhBAEobIRgDQCAGIBhHBEAgAyAGQQN0aigCDCAMRg0DIAZBAWohBgwBCwsgACAHIBYQlwEgChC+BAwCCyAbRQRAIAAgByAWEJcBIAoQvgQMAgsgDCAQayEGCyAXRQRAIAtB3gAgEyAGIAoQJBoMAQsgFARAIBIgIUYNASALQdEAIAYgIWogChAiGgwBCyAAIBwgBkEEdGooAgggChBtCyAKQQFqIQogDEEBaiEMDAELCyAAEDIhDCANLQB0QQFxBEAgACAHLgEiQQFqEHshBgJAIAJBAEgEQCALQccAQX8gBhAiGgwBCwJAIBdFBEAgC0HeACATIAIgBhAkGgwBCyAAIBwgAkEEdGooAgggBhBtCyALQTMgBhAsIQogC0HHAEF/IAYQIhogCyAKECogC0EMIAYQLBoLIAtB0AAgEiAGQQFqIgogBy4BJEEBaxAkGiAHLQAcQeAAcQRAIAAgCiAHEL8ECyAjQQJHBEAgCyAHIAoQ5QILIAAgH0H/AEEAQQEgByAGIAcuASJBf3NqIAQgDBDbAyAAIAYgBy4BIkEBahChAQsCQCAjQQJGDQAgBy0AK0EBRgRAIAtBywBBACARECIaCwJAAkAgAkEATgRAAkAgF0UEQCALQd4AIBMgAiAPECQaDAELIBQNACAcIAJBBHRqKAIIIgYtAABB+QBGBEBBASEKIActACtBAUcNAwsgACAGIA8QbQsCQCAHLQArQQFHBEAgC0EzIA8QLCEGIAtB/wAgDSgCnAEgDyAaECQaIAsgBhAqDAELIAtBMiAPIAsoAmxBAmoQIhoLIAtBDCAPECwaQQAhCgwCCyAHLQArQQFHICRBGHRBGHVBAE5xRQRAQQAhCiALQcsAQQAgDxAiGgwCCyALQf8AIA0oApwBIA8gGhAkGkEBIQoMAQsgC0H/ACANKAKcASAPIBoQJBoLIAAgGiAPEI4MIActABxB4ABxBEAgACASIAcQvwQLIActACtBAUYEQCAZIAcQtwEhAiAAIAcQ3QcgC0EHQQEgBy4BIkECaiARIAJBdRAzGiALQQIgBCAEQQtGG0H//wNxEDggABCKAQwBCyANQQA2AlAgACAHIA4gDSgCnAEgDSgCmAEgEUEAIAJBf3NBH3YgBEH/AXEgDCANQdAAakEAIAUQkQwgACAHQQAgEUEAQQAQ1AUgACAHIA0oApwBIA0oApgBIBEgDkEAIAogDSgCUAR/IAsoAuQBBUEAC0UQ2QcLIBUEQCALQdYAIBVBARAiGgsgHwRAIAAgH0H/AEEAQQIgByAPIAcuASJBf3NqIAQgDBDbAwsgCyAMEDQgF0UEQCALQSYgEyAJECIaIAsgCBAqIAtB+gAgExAsGgwBCyAURQ0AIAsgCRBbGiALIAgQKgsCQCAALQASDQAgACgCeA0AIAAQ1gULIBVFDQAgCyAVQd3yABDcBwsgGSABEIEBIBkgHBA5IBkgBRDSBCAZIBQQZiAZIAMQ7QEgGSAOECcgDUGgAWokAAvYJwEqfyMAQdAAayIOJAAgDkIANwNIIAAoAgAhHgJAIAAoAiQNACAAIAEQlQMiCUUNACAAKAIAIAkoAjwQTiESIAAgCUGBASACIA5BJGoQ3wMhHyABKAIAQQJOBEAgAigCACEZCyAJLQArISAgACAJELsCDQAgACAJIA4oAiQQ3AUNACAAIAAoAigiF0EBaiIcNgIoIAktABxBgAFxBEAgCRByIRQLIBwhBiAXIQwgCUEIaiIaIQcDQCAHKAIAIgcEQCAAIAZBAWoiETYCKCAGIAwgByAURhshDCAhQQFqISEgB0EUaiEHIBEhBgwBCwsgBQRAIAUoAiwhHCAFKAIoIQwgACAXNgIoCyABIAw2AjAgHiAhICEgCS4BImpBAnRqQQZqrRBWIhFFBEBBACERDAELQQAhBiARIAkuASJBAnRqIiQgIUECdGpBBGpBASAhQQFqIhUQKCIlIBVqQQA6AAAgCS4BIiIHQQAgB0EAShshBwNAIAYgB0cEQCARIAZBAnRqQX82AgAgBkEBaiEGDAELCyAOQgA3AjwgDkEANgJEIA5CADcCNCAOIAU2AjAgDiABNgIsIA4gADYCKCAOQYAENgJAIAAQQiIKRQ0AQX8hFgNAAkACQCACKAIAIAhKBEAgAiAIQQR0aiIHKAIMEOQCIQ8gGUUEQCAOQShqIAcoAggQoAENBQtBACEGIAkuASIiC0EAIAtBAEobIRMDQCAGIBNHBEACQCAJKAIEIAZBDGxqIg0tAAcgD0cNACANKAIAIgsgBygCDBAwDQAgCS4BICAGRgRAIAcoAgghHUEBIRAgCCEWDAULIBRFIA0vAQoiB0EBcUVyRQRAQQEhKwwFCyAHQeAAcUUNBCAOIAs2AhAgAEHG3QEgDkEQahAmDAcLIAZBAWohBgwBCwsgBygCDCEGAkAgFA0AIAYQ+QRFDQAgBygCCCEdQdeZASELQQEhEEF/IQYgCCEWDAMLIA4gBjYCACAAQcI5IA4QJiAAQQE6ABEMBAsgECAraiEmAkAgCS0AHEHgAHFFDQBBACEHQQAhBgNAIAchCAJ/AkAgCS4BIiAGSgRAIBEgBkECdGoiBygCAEEATg0BIAkoAgQgBkEMbGoiCy0ACkHgAHFFDQEgCCAJIAsQlwEgESAQENUFRQ0CGiAHQZ+NBjYCAEEBDAILQQAhB0EAIQYgCA0CDAMLIAgLIQcgBkEBaiEGDAALAAsgAUJ/QgAgCS0AK0EBRhs3AzhBACENICZB/wFxIihBAEcgACAJIBEgKBDeAyIiQQFKciEPIARBBUYhCCAEQQtHIRMDQAJAAkACQAJAAn8CQAJAAkAgGigCACILBEAgDyALIBRGcg0BIAsoAiQiBwR/IAcgESAQENUFBUEACw0BQQAhBgNAIAYgCy8BMk8NCAJ/IAsoAgQgBkEBdGouAQAiB0EATgRAIBEgB0H//wNxQQJ0aigCAEF/c0EfdgwBCyALKAIoIAZBBHRqKAIIIBEgEBDVBQshByAGQQFqIQYgB0UNAAsgACAAKAIsQQFqIgYgCy8BNGo2AiwgEw0GQQEgCCALLQA2QQVGGyEIDAYLIA4gCDYCGCAAIAAoAixBAWoiBzYCLCAkIA1BAnRqIi0gBzYCACAIBEAgJUEBIBUQKBoLIAAtABJFBEAgChDbBQtBACENIAAgHyAiciIuQQBHIBIQtQFBACELQQAhBiAJLQArQQFHBEAgACgCLCIHQQFqIQ0CfyAiIB8gK3JyRQRAIAkuASIhCyANDAELIAdBAmohLyANIAkuASIiC2oLIQcgLSgCACEGIAAgCyAHQQFqIgsgByAmQf8BcSAfciAiciIHGyISajYCLCALIA0gBxshIyASQQFqIQsLAkACQCAgQQJHBEBBACEaIBlFDQEMAgsgACAOQcgAaiAJKAIAEOMHQQAhGiAZDQEgACAJIAMgDBDhBwsgDkEoaiADEKABDQ1BASEaCyAJLQArQQFGBEAgHSEFIwBBEGsiDyQAIAAoAgghByAAKAIAIhAgCRC3ASEdIAEoAjAhCyAJLgEiIQggACAAKAIoIgZBAWo2AiggB0H2ACAGIAhBAmoiEhAiIRYgACAAKAIsIg0gEmoiHDYCLCANQQFqIRUCQAJ/AkACQAJAIAEoAgBBAk4EQCAAQQACfyAJLQAcQYABcUUEQCAFBEBBACELIBAgBUEAEDYMAgtBACELIABBywBBAEEAEDUMAQsgESAJEHIiCygCBC4BACIFQQJ0aigCACIIQQBOBEAgECACIAhBBHRqKAIIQQAQNgwBCyAAIAUQrwULEDshBUEAIQgDQCAIIAkuASJODQICfyARIAhBAnRqKAIAIhZBAE4EQCAQIAIgFkEEdGooAghBABA2DAELIAAgCBCvBQshFiAIQQFqIQggACAFIBYQOyEFDAALAAsgACAcQQJqIhc2AiwgACABIANBAEEAQQBBBEEAEJoCIhBFDQQgDUEDaiEMQQAhCANAIAkuASIgCEoEQAJAIBEgCEECdGooAgAiCkEATgRAIAAgAiAKQQR0aigCCCAIIAxqEG0MAQsgB0GvASALIAggCCAMahAkGiAHQQEQOAsgCEEBaiEIDAELCwJAIAktABxBgAFxRQRAIAdBhwEgCyAVECIaIA1BAmohCCAFBEAgACAFIAgQbQwCCyAHQYcBIAsgCBAiGgwBCyAHQa8BIAsgCRByKAIELgEAIgUgFRAkGiAHQdEAIAUgDGogDUECahAiGgsgECAPQQhqENoFDQIgABC2AiAHQeEAIBUgEiAcQQFqIgUQJBogB0H/ACAGIBcQIhogB0GAASAGIAUgFxAkGgwBCyAAIAYgCyAFIAEgAxCTDCAQIAUQOUEAIRALIAEoAgBBAUYEQCAQELMBC0EAIQggEkEAIBJBAEobIQUgB0EjIAYQLCEWA0AgBSAIRgRAQQEMAwUgB0HeACAGIAggCCAVahAkGiAIQQFqIQgMAQsACwALIAcgFhDfASAHQfoAIAsQLBpBAAshBSAAIAkQ3QcgB0EHQQAgEiAVIB1BdRAzGiAHQQIgBCAEQQtGG0H//wNxEDggABCKASAFBEAgB0EmIAYgFkEBahAiGiAHIBYQKiAHQfoAIAZBABAiGgwBCyAQELMBCyAPQRBqJAAMDQsgABAyIRUCQCAeLQAkQQFxRQ0AIAAoAngNACAALQASIAVyDQAgAC0AlQENACAAIAAoAixBAWoiJzYCLCAKQccAQQAgJxAiGgsCQAJAAkACQAJAAkACQAJAIBpFDQAgCS0AHEGAAXENAEEAIQcgCkHLAEEAIAYgDRAkGiAAIAAoAigiGEEBajYCKCAKQfYAIBhBACAGECQhG0EAIRIMAQsgACAZIAAoAiwiByAUBH8gFC4BMgVBAAsiKUEQdEEQdSITaiIPakEBaiISNgIsIAdBAWohByAFDQEgEyAZaiEbQQAhEyAgQQJGBEAgCS4BIiETCyAAIAAoAigiGEEBajYCKCAUBEAgCkHLAEEAIAcgDxAkGgsgCkH2ACAYIBMgG2oiExAiIRsCQCAURQ0AIAAgFBDCBCIPRQ0AIA8gEzsBCCAKIA9BeBCIAQsgGg0AIAAgGCAUIAIgASADEJMMIBggDCAgQQJGGyEMCyAZRQ0CIClBEHRBEHUhEwwBCyAZRQ0CCyAAELYCQQAhD0EBIRlBASEsIAchEgwICyAFRQ0BCyAAIAMgFUEQEHhBASEPDAELIAAgASADQQBBAEEAQQRBBEEEQQRBDCAIGyAmQf8BcRsgLhsgAC0AEhsgHBCaAiIqRQ0NQQEhDyAqIA5BHGoQ2gUhCCAqENkFISwgCEEBRg0AIAAQtgJBAiEPIAhBAkcEQCAIIQ8MAQsgDigCICIIQQBIIAggDEZyDQAgJSAIIBdrai0AAEVBAXQhDwsCQAJAIAktABxBgAFxBEBBACEGIClBEHRBEHUiE0EAIBNBAEobIQgDQCAGIAhGDQIgCiAJIAwgFCgCBCAGQQF0ai4BACAGIAdqEIkBIAZBAWohBgwACwALIApBhwEgDCANECIaIA9FBEAgACAAKAIsQQFqIgg2AiwgLSAINgIAIApBgAEgGCAGIA0QJBoMAgsgG0UNBCAKIBsQ3wEMBAsgDwRAQQAhGSAbRQ0DIAogGxDfAQwDCyAKQeEAIAcgEyASIB4gFBDcAyATEDMaIApBigEgGCASIAcgExA3GgtBACEPQQAMAwsgACAAKAIsQQFqIgYgCy8BNGo2AiwMBAsgByESDAILQQALIRlBACETC0EAIRsCQCAFBEAgFSEIDAELIA9BAkcgGnEEQCAqELMBCwJAICBBAkYNAAJ/QQAgD0UNABogDigCHCIIQQBOBEAgJSAIIBdrakEAOgAACyAOKAIgIghBAE4EQCAlIAggF2tqQQA6AAALQQAgD0ECRyAhIAhBH3VBf3NqQQBMcg0AGiAKQQ4QVQshCCAAIAlB8QBBACAXICVBAEEAEMAEGiAIRQ0AIAogCBDYBQsgDwRAAkAgDigCHCAMRg0AIA4oAiAgDEYNACAKQRsgDCAVIBIgExA3GgsgFSEIIA9BAUcEQCAAEDIhCAsgCkEyIBIgDSAUGyAVECIaDAELIBRFIBlBAXNxRQRAIAAQMiEIIApBIyAYIBUQIhogCigCbCEbIBkEQCAgQQJGDQIgFARAQQAhBiApQRB0QRB1IhdBACAXQQBKGyEhA0AgBiAhRwRAIApB3gAgGCAGIAYgB2oQJBogBkEBaiEGDAELCyAKQRsgDCAIIAcgFxA3GgwDCyAKQYcBIBggDRAiGiAKQR4gDCAIIA0QJBoMAgsgCkGGASAYIBIQIhogCkEbIAwgCCASQQAQNxoMAQsgCkEjIBggFRAiGiAAEDIhCCAKQYcBIBggDRAiIRsgCkEeIAwgCCANECQaCyAQBEACQCAaBEAgACAdICMQbQwBCyAKQd4AIBggFiAjECQaCyAKQQwgIxAsGgsCQEEBICIgK3IgHxtFDQBBACEGICIEQCAAIAkQkgwhBgsgACAfIAJBAEEDIAkgBBDbByAGciIXQX9GIR1BACEGA0ACQAJAIAkuASIgBkoEQCAJKAIEIAZBDGxqLwEKIQcgCSAGQRB0QRB1EIcBIC9qIRYCQCAdDQAgBkEfTQRAIBcgBnZBAXEgB0EBcXINAQwDCyAHQQFxRQ0CCyAKIAkgDCAGIBYQiQEMAgsgECAUcg0DIApB0AAgDSAjECIaDAMLIApBywBBACAWECIaCyAGQQFqIQYMAAsACyApQRB0QRB1IRYgACAfIAJBAUEBIAkgBBDbByEXICBBAkYhHSALIQdBACEGA0AgCS4BIiIaIAZKBEACQCAJLgEgIAZGBEAgCkHLAEEAIAcQIhoMAQsgCSgCBCAGQQxsai8BCiIQQeAAcQRAIBBBGnRBH3UgB2ohBwwBCyARIAZBAnRqKAIAIhBBAE4EQCAZBEAgCkHeACAYIBAgGiAWIB0baiAHECQaDAILIAAgAiAQQQR0aigCCCAHEG0MAQsgFyAGdkEBcSAOLQAkQQFxRSAGQR9LcnIEQCAKIAkgDCAGIAcQiQFBACEsDAELIApBywBBACAHECIaCyAHQQFqIQcgBkEBaiEGDAELCyAJLQAcQeAAcQRAIAAgCyAJEL8ECwJAAkAgDi0AJEEBcUUNACAKIAkgCxDlAiAAIB9BgQEgAkEBIAkgDSAEIAgQ2wMgIEECRg0BAkAgFARAIApBGyAMIAggEiATEDcaDAELIApBHiAMIAggDRAkGgtBACEGIAshBwNAIAkuASIgBkoEQAJAIAkoAgQgBkEMbGovAQoiEEHgAHEEQCAQQRp0QR91IAdqIQcMAQsgESAGQQJ0aigCAEEATg0AIAYgCS4BIEYNACAKIAkgDCAGIAcQiQELIAdBAWohByAGQQFqIQYMAQsLIAktABxB4ABxRQ0AIAAgCyAJEL8ECyAgQQJGDQAgACAJICQgDCAcICMgDSAmQf8BcSIHIARB/wFxIAggDkEYaiARQQAQkQwCQEEBIA4oAhggBxtFDQAgFARAIApBGyAMIAggEiATEDcaDAELIApBHiAMIAggDRAkGgsgIgRAIAAgCSANQQAgESAoENQFCyAAIAkgDCAcICRBfxDaByAsBEAgCkGPASAMECwaC0EAICJBAUwgJkH/AXEbRQRAIApBggEgDEEAECIaCyAiBEAgACAJQQAgIyARICgQ1AUgACAJIAwgHCAjICRBBkEEIA9BAkYbQQBBABDZByAAIAkgAiANIBEgKBCQDAwBCyAAIAkgDCAcICMgJEEGQQQgD0ECRhtBAEEAENkHCyAnBEAgCkHWACAnQQEQIhoLIAAgH0GBASACQQIgCSANIAQgCBDbAwJAAkACQCAPQQFrDgICAAELIAogCBA0ICoQswEMAQsgCiAIEDQgCkEmIBggGxAiGgsgCiAVEDQCQCAALQASDQAgBSAAKAJ4cg0AIAAQ1gULICdFDQcgCiAnQdXzABDcBwwHCyAGRQ0AIA1BAWohBwwBC0EAIQYgJSANQQFqIgdqQQA6AAALICQgDUECdGogBjYCACALQRRqIRogByENDAALAAsgESAGQQJ0aiAINgIACwJAAkAgAEEXIAkoAgAgCyAeKAIQIBJBBHRqKAIAEGFBAWsOAgMAAQsgESAGQQJ0akF/NgIACyAIQQFqIQgMAAsACyAOQcgAahCUDCAeIBEQJyAeIAEQgQEgHiACEDkgHiADEC4gDkHQAGokAAvuDQEVfyMAQUBqIgYkACAGQQA2AjwgBkEANgI4IAZCADcDMCAAKAIAIRECQCAAKAIkDQAgACABEJUDIgRFDQAgACAEQYABQQBBABDfAyEXIAQtACshFUEBIQ0gF0UEQCAAIARBAEEAEN4DQQBHIQ0LIAAgBBC7Ag0AIAAgBCAXQQBHENwFDQAgAEEJIAQoAgBBACARKAIQIBEgBCgCPBBOIghBBHRqKAIAEGEiC0EBRg0AIAAgACgCKCIPQQFqIgk2AiggASAPNgIwIAkhByAEQQhqIgohBQNAIAUoAgAiBQRAIAAgB0EBaiIHNgIoIBBBAWohECAFQRRqIQUMAQsLIBVBAkYEQCAAIAZBMGogBCgCABDjBwtBACEFIAAQQiIDRQ0AIAAtABJFBEAgAxDbBQsgACANIAgQtQEgFUECRgRAIAAgBCACIA8Q4QcgBiAPNgI8IAYgDzYCOAsgBkIANwMoIAZCADcDICAGQgA3AxggBiABNgIUIAYgADYCECAGQRBqIAIQoAENAAJAIBEtACRBAXFFDQAgAC0AEg0AIAAoAngNACAALQCVAQ0AIAAgACgCLEEBaiIONgIsIANBxwBBACAOECIaCwJAAkAgAiALciANcg0AIAQtACtBAUYNACAAIAggBCgCFEEBIAQoAgAQsgEgBC0AHEGAAXFFBEAgA0GRASAEKAIUIAggDkF/IA4bIAQoAgBBfxAzGgsgDkF/IA4bIQUDQCAKKAIAIgcEQCADQZEBIAcoAiwgCBAiGgJAIAcvADdBA3FBAkcNACAELQAcQYABcUUNACADQX8gBRDdAwsgB0EUaiEKDAEFQQAhBwwDCwALAAtBFEEUQRwgDRsgBi0AKEHAAHEbIQcCfyAELQAcQYABcUUEQEEBIQggACAAKAIsQQFqIhY2AixBACENIANBywBBACAWECIaQQAMAQsgACAAKAIsIgUgBBByIg0uATIiCGo2AiwgACAAKAIoIhJBAWo2AiggA0H2ACASIAgQIiEMIAAgDRC9ASAFQQFqCyEKQQAhBSAAIAEgAkEAQQBBACAHIAkQmgIiE0UNASATIAZBCGoQ2gUiFEEBRwRAIAAQtgILIBMQ2QUEQCADQY8BIA8QLBoLIA4EQCADQdYAIA5BARAiGgsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCANBEBBACEHIAhBACAIQQBKGyEJA0AgByAJRkUEQCADIAQgDyANKAIEIAdBAXRqLgEAIAcgCmoQiQEgB0EBaiEHDAELCyAURQ0CIAohCwwBC0EBIQkgACAAKAIsQQFqIgs2AiwgAyAEIA9BfyALEIkBIBRFDQMLIBEgEEECaq0QViIHRQRAIBMQswEMDgsgB0EBIBBBAWoiCRAoIgUgCWpBADoAACAGKAIIIglBAE4EQCAFIAkgD2tqQQA6AAALIAYoAgwiCUEATgRAIAUgCSAPa2pBADoAAAsgDARAIAMgDBDfAQsgABAyIQUgFUECRw0BIAghCQwFCyAAIAAoAixBAWoiCzYCLCADQeEAIAogCCALIAAoAgAgDRDcAyAIEDMaIANBigEgEiALIAogCBA3GkEAIQkMAgtBACEQIBRBAkcEQEEAIQogCCEJQQAhDAwDC0EAIQpBASEQIANBDhBVIQwgCCEJDAILIANBnAEgFiALECIaCyATELMBQQEhCkEAIRBBACEHQQAhDEEAIQggFUECRg0CCyAAIARB8QBBCCAPIAcgBkE8aiAGQThqEMAEGiAQBEAgAyAMENgFCyAHIRAgBSEIIAoNAQtBACEMIAQtACtBAUYEQEEAIQoMAwsgByAGKAI8IgggD2tqLQAABEAgA0EbIAggBSALIAkQNxoLQQAhCgwBCwJAIA0EQCADQSMgEhAsIQxBASEKIAQtACtBAUYEQCADQd4AIBJBACALECQaDAILIANBhgEgEiALECIaDAELQQEhCiADQS0gFkEAIAsQJCEMCyAQIQcgCCEFCyAELQArQQFHDQELIBEgBBC3ASEIIAAgBBDdByAAEIoBAkAgFEEBRw0AIANB+gAgDxAsGiAAKAJ0DQAgAEEAOgAUCyADQQdBAEEBIAsgCEF1EDMaIANBAhA4IAoNAQwCCyAAIAQgFyAGKAI8IAYoAjggCyAJIAAtABJFQQsgFEH/AXEgBigCDBDXBSAKRQ0BCwJAIA0EQCADQSYgEiAMQQFqECIaDAELIAMgDBBbGgsgAyAMECoMAQsgAyAFEDQgExCzAQsCQCAALQASDQAgACgCeA0AIAAQ1gULIA4EQCADIA5BvvMAENwHCyAHIQULIAZBMGoQlAwgESABEIEBIBEgAhAuIBEgBRAnIAZBQGskAAtRAAJAIABFDQAgACAAKAIAQQFrQQR0aiIAQRBqQQAgASABQX9GGyIBOgAAIAJBf0YNACAAIAAvABFBIHI7ABEgASACRg0AIAAgAUECcjoAEAsLnwIBB38jAEEgayIEJAAgBCADNgIcIAQgAjYCGCAEIAE2AhQCQANAIAZBA0YNASAEQRRqIAZBAnRqKAIAIghFDQEgCCgCBCEJQQAhBwJAA0AgB0EHRg0BAkAgB0EDbCIKQYH+AmotAAAgCUYEQCAIKAIAIApBgP4Cai0AAEHQ/QJqIAkQSEUNAQsgB0EBaiEHDAELCyAGQQFqIQYgBSAKQYL+AmotAAByIQUMAQsLIAVBgAFyIQULIAVBgAFxIAVBIXFBIUZyRSAFQThxQSBHcUUEQCAEIAM2AhAgBCABNgIAIARBlOUBQZXlASADGzYCDCAEIAI2AgggBEGU5QFBleUBIAIbNgIEIABBsI4BIAQQJkEBIQULIARBIGokACAFC2oBA38CQCABRQ0AIAIoAgQiBUUNACABKAIAQQFrIQNBASEEAkAgBUEBRgRAIAIoAgBFDQELIAEgA0EGdGpBQGsgACgCACACEHQ2AgBBAiEECyABIANBBnRqIgBBLWogAC8ALSAEcjsAAAsLrhgBEX8jAEGgAWsiCiQAAkAgAiAEckUNACAAKALsASIGRQ0AIAAoAgAhDAJAAkACQCAERQRAIAwgBigCABD3BwRAIAYgBigCHEGAIHI2AhwLIAxBsQFqIg0tAABFDQMgDCgCrAEhBSAGLQArRQ0CIAUNASAGQQA2AhQMAwsgDEGxAWoiDS0AAEUNAgsgAEGt5QFBABAmDAILIAYgBTYCFCAFQQFHDQAgBiAGKAIcQQFyNgIcCwJAIANBgIAEcUUNACAGIAYoAhxBgIAEcjYCHEEAIQUDQCAFIAYuASJODQEgBigCBCIJIAVBDGxqIgctAAQiCEEPTQRAIAkgBUEMbGoiASgCACECIAYoAgAhAyABLQAKQQRxBEAgCiABQa3lARD4BDYCeCAKIAI2AnQgCiADNgJwIABBit8BIApB8ABqECYMBAsgCiACNgJkIAogAzYCYCAAQdItIApB4ABqECYMAwsgCEHwAXEiCUEQRgRAIAdBwQA6AAULAkAgBy0ACkEBcUUNACAIQQ9xIAUgBi4BIEZyDQAgByAJQQJyOgAEIAYgBigCHEGAEHI2AhwLIAVBAWohBQwACwALIANBgAFxBEAgBigCHCIFQQhxBEAgAEGJKkEAECYMAgsgBUEEcUUEQCAKIAYoAgA2AlAgAEH5MiAKQdAAahAmDAILIAYgBUGABXI2AhxBACEFIwBBEGsiDyQAIAAoAgghCSAAKAIAIg4tALIBQQJxRQRAA0AgBi4BIiAFSgRAAkAgBigCBCAFQQxsaiIHLQAKQQFxRQ0AIActAAQiCEEPcQ0AIAcgCEHwAXFBAnI6AAQLIAVBAWohBQwBCwsgBiAGKAIcQYAQcjYCHAsgACgChAEiBQRAIAkgBUECEN0DCwJAAkAgBi4BICIFQQBOBEAgD0EIaiIHIAYoAgQgBUH//wNxQQxsaigCABCUAwJAIABBACAOQTsgB0EAEHkQOyIFBEAgAC0A0AFBAk8EQCAAIAUoAgggBkEgahCjAQsgBSAALQDOAToAECAGQf//AzsBICAAQQBBAEEAIAUgBi0AKkEAQQBBAEEAQQIQ7AMgACgCJEUNAQsgBiAGKAIcQf9+cTYCHAwDCyAGEHIhBwwBCyAGEHIhB0EBIQVBASEIA0AgBy8BMiAFSwRAAkAgByAIIAcgBRDEBARAIAcgBy8BNEEBazsBNAwBCyAHKAIgIgsgCEECdGogCyAFQQJ0aigCADYCACAHKAIcIgsgCGogBSALai0AADoAACAHKAIEIgsgCEEBdGogCyAFQQF0ai8BADsBACAIQQFqIQgLIAVBAWohBQwBCwsgByAIOwEyCyAHIAcvADciBUEgcjsANyAOLQCyAUECcUUEQCAHIAVBKHI7ADcLIAcgBy8BMiILOwE0AkAgCUUNACAHKAIsIgVFDQAgCSAFQQgQ5wcLIAcgBigCFDYCLCAGQQhqIQUDQAJAAkAgBSgCACIFRQRAQQAhBSAGLgEiIghBACAIQQBKGyEIQQAhCQNAIAUgCEYNAiAHKAIEIAsgBRDfC0UEQCAJIAYoAgQgBUEMbGovAQpBf3NBBXZBAXFqIQkLIAVBAWohBQwACwALIAUvADdBA3FBAkYNAUEAIQhBACEJA0AgCCALRwRAIAkgBSAFLwEyIAcgCBDEBEVqIQkgCEEBaiEIDAELCyAFLwEyIQggCUUEQCAFIAg7ATQMAgsgDiAFIAggCWoQ3gsNAyAFLwEyIQlBACEIA0AgCCALRg0CIAUgBS8BMiAHIAgQxARFBEAgBSgCBCAJQQF0aiAHKAIEIAhBAXRqLwEAOwEAIAUoAiAgCUECdGogBygCICAIQQJ0aigCADYCACAHKAIcIAhqLQAABEAgBSAFLwA3QYAEcjsANwsgCUEBaiEJCyAIQQFqIQgMAAsACyAOIAcgCSALahDeCw0CQQAhBQNAIAYuASIgBUoEQAJAIAcoAgQiCCALIAUQ3wsNACAGKAIEIAVBDGxqLQAKQSBxDQAgCCALQQF0aiAFOwEAIAcoAiAgC0ECdGpB8PoBNgIAIAtBAWohCwsgBUEBaiEFDAELCyAHEO8HDAILIAVBFGohBQwACwALIA9BEGokAAsgDCAGKAI8EE4hDgJAIAYoAhAiBUUNACAAIAZBBEEAIAUQ5wMaIAAoAiRFDQAgDCAGKAIQEDkgBkEANgIQCwJAIAYtABxB4ABxRQ0AQQAhB0EAIQUDQCAGLgEiIAVKBEACQCAFQQxsIgggBigCBGoiCS0ACkHgAHEEQCAAIAZBCCAGIAkQlwFBABDnA0UNASAAIAYgBigCBCAIaiAMQfkAQQBBABB5EOkFDAELIAdBAWohBwsgBUEBaiEFDAELCyAHDQAgAEHC0QBBABAmDAELQQAhBSAGKAIEIQcgBi4BIiEIA0AgCEEASgRAIAhBAWshCCAFIActAAZqIQUgB0EMaiEHDAELCyAGIAUgBi8BIEEPdmpBAnStENQBOwEoIAZBCGohBQNAIAUoAgAiBQRAIAUQ9gcgBUEUaiEFDAELCwJAIA0tAABFBEAgABBCIgdFDQIgB0H6AEEAECwaIAYtACshEAJ/IAQEQCAALQDQAQRAIABBATYCDCAAIAAoAiRBAWo2AiQMBQsgACAAKAIsIgVBA2oiCDYCLCAAEIoBIAdB8QBBASAAKAJcIA4QJBogB0EQEDggAEECNgIoIAdBCiAFQQFqIglBACAHKAJsIgtBAWoQJBogACgCJA0EIAAgBEHBABDoBSIDRQ0EIAYgAy8BIiINOwEiIAYgDTsBJCAGIAMoAgQ2AgQgA0EANgIEIANBADsBIiAMIAMQ0wEgCkGAAWoiA0ENIAkQvgEgACAEIAMQiwEaIAAoAiQNBCAHIAkQ5gMgByALECogB0ELIAooAoQBECwhAyAHQeEAIAooAowBIAooApABIAVBAmoiBRAkGiAHIAZBABDlAiAHQf8AQQEgCBAiGiAHQYABQQEgBSAIECQaIAcgAxBbGiAHIAMQKiAHQfoAQQEQLBpBACEJQQAhAyMAQRBrIggkACAGLgEiIgVBACAFQQBKGyENIAYoAgQhCwNAIAkgDUcEQCAJQQFqIQkgCygCABDdCyADakEFaiEDIAtBDGohCwwBCwsCQEEAIAYoAgAQ3QsgA2oiAyAFQQZsakEjaiIRrBCNASISRQRAIAwQTwwBC0GU0AFBk9ABIANBMkgiAxshFUGAvAFBkeUBIAMbIQUgCCARIBJBhOQBQQAQxAEiDRAxNgIMIA0gCEEMaiAGKAIAENwLIA0gCCgCDCIJakEoOgAAQa3lAUGS5QEgAxshAyAJQQFqIQkgBigCBCELQQAhDwNAIAkgDWohEyARIAlrIRQgBi4BIiAPSgRAIAggFCATIANBABDEARAxIAlqNgIMIA0gCEEMaiALKAIAENwLIA0gCCgCDCIDaiALLAAFQQJ0Qez5AmooAgAiCSAJEDEiCRAlGiAIIAMgCWoiCTYCDCALQQxqIQsgD0EBaiEPIAUhAwwBCwsgCCAVNgIAIBQgE0H2wAAgCBDEARoLIAhBEGokACASDAELIABBxAFqIAIgAxsiBSgCACIIIAAoArwBIglrIQMgCC0AAEE7RwRAIAUoAgQgA2ohAwsgCiAJNgJIIAogAzYCRCAKQeeMAUGZmQEgEBs2AkAgDEGGLCAKQUBrEDwLIQMgDCgCECAOQQR0aigCACEIIAYoAgAhBSAAKAJcIQkgCiAAKAJYNgI4IAogAzYCNCAKIAk2AjAgCiAFNgIsIAogBTYCKCAKQZIOQZDqACAQGzYCJCAKIAg2AiAgAEGL/QAgCkEgahBsIAwgAxAnIAAgDhC9AgJAIAYtABxBCHFFDQAgAC0A0AENACAMKAIQIA5BBHRqIgMoAgwoAkgNACAKIAMoAgA2AhAgAEGuvgEgCkEQahBsCyAKIAYoAgA2AgAgByAOIAxBk9QBIAoQPEEAEJYDIAwtALEBRQ0BCyAGKAI8QQhqIAYoAgAgBhCoAQRAIAwQTwwCCyAAQQA2AuwBIAwgDCgCGEEBcjYCGCAGKAIAQfzsABCVAQ0AIAYoAjwgBjYCSAsgBA0AIAYtACsNACAGIAEgAiABKAIAGygCACAAKAK8AWtBDWo2AiwLIApBoAFqJAAL+QYBBH8jAEEgayIJJAACQAJAAkAgACgCACIHLQCxAUUNACAHKAKsAUEBRw0AIAdBv8MAQdLDACAHLQCwASIIQQFGGxBaIQIgCSABNgIcDAELIAAgASACIAlBHGoQvgIiAUEASA0BAkAgA0UEQCABIQgMAQtBASEIIAIoAgRFIAFBAUZyDQAgAEHY+ABBABAmDAILIAcgCSgCHCIBEHQhAiAALQDQAUECSQ0AIAAgAiABEPIBIQILIAAgASkCADcCvAEgAkUNAAJAIAAgAkGSDkGQ6gAgBBsgAhDKBA0AIABBEkG/wwBB0sMAQQEgAyAHLQCwAUEBRhsiA0EBRhtBACAHKAIQIAhBBHRqKAIAIgoQYQ0AIAVFBEAgACADIARBAXRqQZD6AmotAAAgAkEAIAoQYQ0BCwJAAkAgAC0A0AENACAHKAIQIAhBBHRqKAIAIQMgABCKAg0CIAcgAiADEHwiCgRAIAYNAiAKLQArIQMgCSABNgIUIAlBkg5BkOoAIANBAkYbNgIQIABBkxsgCUEQahAmDAMLIAcgAiADEJ8CRQ0AIAkgAjYCACAAQZU0IAkQJgwCCyAHQsAAEEEiAUUEQCAAQQc2AgwgACAAKAIkQQFqNgIkDAILIAFB//8DOwEgIAEgAjYCACAHKAIQIAhBBHRqKAIMIQIgAUHIATsBJiABQQE2AhggASACNgI8IAAgATYC7AEgBy0AsQENAiAAEEIiAUUNAiAAQQEgCBC1ASAFBEAgAUGqARBVGgsgACAAKAIsIgJBAmoiAzYCXCAAIAJBAWoiBjYCWCAAIAJBA2oiAjYCLCABQeMAIAggAkECECQaIAEgCBDkASABQQ8gAhAsIQogAUHkACAIQQJBBEEBIAcpAyBCAoNQGxAkGiABQeQAIAhBBSAHLQBUECQaIAEgChAqAkAgBCAFcgRAIAFBxwBBACADECIaDAELIAAgAUGTASAIIANBARAkNgKEAQsgABBCIQMgACAIQQFBAUHSwwAQsgEgA0HxAEEAQQEgCEEFEDcaIAAoAihFBEAgAEEBNgIoCyABQf8AQQAgBhAiGiABQc0AQQYgAkEAQZT6AkF/EDMaIAFBgAFBACACIAYQJBogAUEIEDggAUH6ABBVGgwCCyAAIAgQtAEgABDIBAsgAEEBOgARIAcgAhAnCyAJQSBqJAALUwEBfyAAKAIAIAIQdCICBEACQCAAEEIiAwRAIABBICABQQJ0QYT6AmooAgAgAkEAEGFFDQELIAAoAgAgAhAnDwsgA0EAIAFBAEEAIAJBehAzGgsL0QIBBX8jAEEQayIHJAAgACgCACEEAkACQCACRQRAIAQgASADQQAQqQIiAkUNAQsgAigCDA0BCyABIQICQCAEIgEoApQCBEAgASADEFoiBEUNASABKAKcAiABIAIgBCABKAKUAhEIACABIAQQJwsgASgCmAJFDQAgARDjAiIEIANBABDGBSAEQQIQjgUiBQRAIAEoApwCIAEgAS0AVCAFIAEoApgCEQgACyAEEJ0BCyABIAIgA0EAEKkCIgIEQCACKAIMDQFBACEEIAIoAgAhCEEBIQUCQANAIARBA0YNASAEQeSVAmohBiAEQQFqIQQgASAGLQAAIAhBABCpAiIGKAIMRQ0ACyACIAYpAgA3AgAgAiAGKQIINwIIQQAhBSACQQA2AhALIAVFDQELIAcgAzYCACAAQZQ+IAcQJiAAQYECNgIMQQAhAgsgB0EQaiQAIAILfQECfwJAIAEoAgQiAkUNAANAIAMgAS4BIk5FBEAgACACKAIAECcgAkEMaiECIANBAWohAwwBCwsgACABKAIEECcgAS0AK0UEQCAAIAEoAjQQOQsgAARAIAAoApAEDQELIAFBADsBIiABQQA2AgQgAS0AKw0AIAFBADYCNAsLQgECfyAAKAIEEJgBGiAAQQA2AgQDQCABQQJGRQRAIAAgAUECdGoiAkEQaigCABAjIAJBADYCECABQQFqIQEMAQsLC2kBAn8gACgCACICRQRAQQAPCyABQQJOBEAgACABQQFrIgMQ+QUhAiAAKAIAIgFFBEAgAg8LIAEgAjYCDCAAIAEoAgg2AgAgASAAIAMQ+QU2AgggAQ8LIAAgAigCCDYCACACQgA3AwggAgtnAQR/IAAgACgCAEEBaiICNgIAIAAgAkECdGogATYCAANAAkAgAkECSQ0AIAAgAkEBdiIBQQJ0aiIDKAIAIgQgACACQQJ0aiICKAIAIgVNDQAgAyAFNgIAIAIgBDYCACABIQIMAQsLC3kBAX8jAEEgayICJAACfyAAKAIMIAFBAWtNBEAgAiABNgIQIABB7P8AIAJBEGoQjAFBAQwBCyAAIAEQjQYEQCACIAE2AgAgAEGZgAEgAhCMAUEBDAELQQEgACgCRCgCqAINABogACABELgIQQALIQAgAkEgaiQAIAALMgECfwNAIAAtAAAiAgRAIABBAWohACABIAJBwOcBai0AAGpBsfPd8XlsIQEMAQsLIAELkQMCBH8DfiMAQRBrIgYkACAAKQMAIQcCQAJAIAAoAiwiAwRAIAIgAyAHp2o2AgAgACAHIAGsfDcDAAwBCyABIAcgACgCKCIDrCIIgaciBAR/IAMFIAAoAhggACgCJCADIAApAwggB30iCacgCCAJUxsgBxCCASIDDQIgACgCKAsgBGsiBUwEQCACIAAoAiQgBGo2AgAgACAAKQMAIAGsfDcDAAwBCwJAIAEgACgCECIDTARAIAAoAhwhAwwBC0KAASADrEIBhiADQcAASBshCCABrCEJA0AgCCIHQgGGIQggByAJUw0ACyAAKAIcIAcQyAEiA0UEQEEHIQMMAwsgACADNgIcIAAgBz4CEAsgAyAAKAIkIARqIAUQJRogACAAKQMAIAWsfDcDACABIAVrIQQDQCAEQQBKBEAgACAEIAAoAigiAyADIARKGyIFIAZBDGoQ/QUiAw0DIAAoAhwgASAEa2ogBigCDCAFECUaIAQgBWshBAwBCwsgAiAAKAIcNgIAC0EAIQMLIAZBEGokACADC4EDAgh/An4jAEEQayIEJAAgBEIANwMIAkAgACkDACAAKQMIWQRAAkACQCAAKAIwIgFFDQAjAEEwayIDJAAgASgCBCEGIAEoAjAgA0EIaiABKAIAKAIIKAIMIAEpAwgiCRCeCANAAkAgBQ0AIAYoAgwgBigCCCgCBEE4bGoiBygCGEUNACADNAIYIAcoAhQiCKwiCiADKQMgfHwgChCbA6x8IAkgATQCEHxVDQAgA0EIaiICIAoQgQYgAiAHKAIgIAgQgAYgASgCBCADQQRqEL0IIQUMAQsLIANBCGogAUE4ahCdCCECIANBMGokACAFIAIgBRshAiABIAEpAzgiCTcDKCABIAEpAzA3AyAgASkDCCAJUQRAIAFBATYCFAsgAg0AQQAhAiABKAIURQ0BCyAAEOEIDAILIAEoAgAgACABQSBqIAEpAwgQmggiAg0BCyAAIARBCGoQmQgiAg0AIAAgBCgCCCIBNgIUIAAgASAAQSBqEP0FIQILIARBEGokACACC2gBAn9BAiEBA0AgASICQQF0IQEgACACSg0AC0EAIQECQEHkABCUAg0AIAJBPGxBEGqsEK8BIgBFDQAgAEEANgIEIAAgAjYCACAAIABBEGoiATYCDCAAIAEgAkE4bGo2AgggACEBCyABC6kBAQR/IAIhAwNAAkAgA0EATA0AIAAoAgANACAAKAIQIgQgACgCBGogASACIANraiADIAAoAgggBGsiBCADIARIGyIEECUaIAAgACgCECAEaiIFNgIQIAAoAgggBUYEQCAAIAAoAiAgACgCDCIGIAAoAgRqIAUgBmsgACkDGCAGrHwQejYCACAAQgA3AgwgACAAKQMYIAA0Agh8NwMYCyADIARrIQMMAQsLCycBAX8jAEEQayICJAAgACACQQZqIgAgACABEKACEIAGIAJBEGokAAvFAgEJfyMAQRBrIgskAAJAIAVBAEwNACAEIAVqIQ8gAigCACEIIAAoAjghCgNAIAQgBiAHIgVBAnRqKAIoTgRAIAVBAWohByAFQQZJDQELCyAGIAVBAnRqKAIQIQkDQCAGKAIMIARBAXRqLwEAIQcCQAJAAkACQCAKLQABRQRAIAotAAJFDQELIAAgByALQQxqEKgIIg0NAQsgCCABayAHSA0BIAggB2siCCENCyAGKAIIIARBAnRqKAIAIg4gCU8gByAOaiAJTXINAUGkxAQQKRoLQQEhDAwCCyADIA0gDiAHEKoBIAprIgdBCHQgB0GA/gNxQQh2cjsAACAPIARBAWoiBEoEQCAEIAYgBUECdGooAihOBEAgBiAFQQFqIgVBAnRqKAIQIQkLIANBAmohAwwBCwsgAiAINgIACyALQRBqJAAgDAvxBAENfyABIAJqIQcgAC0ACSIDQQFqIQoCfwJAIAMgACgCOCIIaiILLQACDQAgCCAKai0AAA0AIAohBSACIQMgASEEIAFBCHYMAQsgCiEDAkADQCAIIAMiBUH//wNxIgRqIg4tAAAiBkEIdCAOLQABIg1yIgMgAU8NASAEQQRqIANNDQALIANB//8DcUUNAEHMmAQQKQ8LIAMgACgCNCgCKCIPQQRrSwRAQdGYBBApDwsCfyADQf//A3FFIAdBA2ogA0lyRQRAIAMgB0kEQEHdmAQQKQ8LIA8gAyAIaiIGLQACQQh0IAYtAANyIANqIgxJBEBB4JgEECkPCyADIAdrIQkgBi0AASENIAYtAAAhBiAMIAFrDAELIAchDCACCyEDAn8CQCAEIApNDQAgDi0AAyAOLQACQQh0ciAEaiIEQQNqIAFJDQAgASAETwRAIAwgBWshAyAJIAEgBGtqIQkgBQwCC0HtmAQQKQ8LIAELIQQgCy0AByIBIAlB/wFxSQRAQfOYBBApDwsgCyABIAlrOgAHIAwhByAEQf//A3EiAUEIdgshCQJAIAEgCy0ABiALLQAFQQh0ciIMTQRAIAEgDEkEQEH8mAQQKQ8LIAVB//8DcSAKRwRAQf2YBBApDwsgCCAKaiIFIA06AAEgBSAGOgAAIAsgBzoABiALIAdBCHY6AAUMAQsgCCAFQf//A3FqIgUgBDoAASAFIAk6AAALIAAoAjQtABhBDHEEQCABIAhqQQAgA0H//wNxECgaCyABIAhqIgEgDToAASABIAY6AAAgASADOgADIAEgA0EIdjoAAiAAIAAoAhQgAmo2AhRBAAvBAQEDfwJAAkAgAigCHCIFIANrIgZBAEwEQCAEQQAgBEEAShshAgNAIAIgB0YNAiABIAdqIgMtAABFBEAgB0EBaiEHDAELCyAAKAJIEF0iBQ0CIANBACAEIAdrECgaQQAPCwJAIAQgBkwEQCAEIQYMAQsgACABIAZqIAIgBSAEIAZrEIQGIgUNAgtBACEFIAEgAigCECADaiAGEFFFDQEgACgCSBBdIgUNASABIAIoAhAgA2ogBhCqARoLQQAhBQsgBQsgAQF/A0AgAQRAIAEoAiQhAiAAIAEQ1wQgAiEBDAELCwszAQF/IAAoAiAiAQRAIAEgACgCJDYCACAAKAIkIgEEQCABIAAoAiA2AiALIABBADYCIAsLoAYBCH8jAEHQAGsiBiQAIAEoAiwhCCAGQQA2AjwgAEGQA2ohBSABKAIwIQkCQAJAA0AgBSgCACIHRQ0BIAdBCGohBSAHKAIEIAFHDQALIAYgASgCADYCMCAEIABBvDYgBkEwahA8NgIAQQYhBQwBC0EHIQUgACABKAIAEFoiC0UNAAJAQhwQrwEiB0UEQCAAEE8MAQsgB0EBOgARIAcgAjYCBCAHIAA2AgAgASgCMCAAKAIQIAAgASgCPBBOQQR0aigCADYCBCAGIAc2AkAgBiABNgJEIAAoApADIQUgBkEANgJMIAYgBTYCSCAAIAZBQGs2ApADIAAgAigCDCAIIAkgB0EIaiAGQTxqIAMRCQAhBSAAIAYoAkg2ApADIAUEQCAFQQdGBEAgABBPCwJAIAYoAjwiAUUEQCAGIAs2AgAgBCAAQYY/IAYQPDYCAAwBCyAGIAE2AhAgBCAAQfbAACAGQRBqEDw2AgAgBigCPBAjCyAAIAcQJwwBC0EAIQUgBygCCCIDRQ0AIANCADcCACADQQA2AgggBygCCCACKAIANgIAQQEhBSACIAIoAghBAWo2AgggB0EBNgIMIAYoAkxFBEAgBiABKAIANgIgIAQgAEGGwAAgBkEgahA8NgIAIAcQ7QIMAQsgByABKAI0NgIYIAEgBzYCNEEAIQNBACECA38gAS4BIiADTAR/QQAFQQAhBSADQQxsIgwgASgCBGpBreUBEPgEIggQMSIJQQAgCUEAShshBCABAn8CQANAIAQgBUYNAQJAAkBB8tMAIAUgCGoiB0EGEEgNACAFBEAgB0EBay0AAEEgRw0BCyAHLQAGIgpBIHJBIEYNAQsgBUEBaiEFDAELC0EHQQYgChshAiAFIQQDQCACIARqIgogCUpFBEAgBCAIaiAIIApqLQAAOgAAIARBAWohBAwBCwsgBy0AACAFRXJFBEAgB0EBa0EAOgAACyABKAIEIAxqIgIgAi8BCkECcjsBCkGACCECQQIMAQsgAgsgASgCHHI2AhwgA0EBaiEDDAELCyEFCyAAIAsQJwsgBkHQAGokACAFC0sBAX8gACgCBCECIAAQTCABQf8BcSEAAn8gAi0AGEECcQRAQQggAi0AESAAQQBHRw0BGgsgAiAAQQJGOgASIAIgAEEARzoAEUEACwshACAAEEwgACgCBCIALQARRQRAQQAPC0ECQQEgAC0AEhsLnAEBAX8jAEEQayIDJAAgACACQX8gA0EMakEAEJcDIgJFBEADQCADKAIMEEMiAkHkAEYEQCADKAIMQQAQiwIiAkUNASACQYOZAUEDEOYBBEAgAkHPkAFBAxDmAQ0CCyAAIAEgAhCKBiICRQ0BCwtBACACIAJB5QBGGyICBEAgASAAIAAQzQIQwAILIAMoAgwQmAEaCyADQRBqJAAgAgupAQEDfyAAKAIEIQIgABBMIAIoAgAiAC0ADAR/QQEFIAFBB3EiAkEERiEDIAJBAkshBCACQQFGCyECIAAgAzoACSAAIAQ6AAggACACOgAHIAACf0EAIAINABpBAyABQQhxDQAaQQILIgM6AAogACABQQV2QQFxIAAtABVB/gFxckEBczoAFSAAIANBACAEGyADQQJ0IgBBDCAAIAFBEHFBBHYbIAIbcjoACwtsAgJ/An4jAEEQayIDIQICQANAIAApAwAhBANAIAEpAwAiBSAEWQRAIAQgBVMEQCACIAA2AgggACECCyAAKAIIIgANAgwDCyACIAE2AgggASICKAIIIgENAAsLIAAhAQsgAiABNgIIIAMoAggLGQAgACgCCCABQQN2ai0AAEEBIAFBB3F0cQvWCwIbfwF+IwBBkAFrIgQkACAEIAM3A4gBIARBADYChAECQCABRQ0AIAAoAiQhGCAAKAIgIRkgACgCHCEaIAAoAgAiDCgCKCEPIAAgARD7BQ0AIAAgATYCICAAQazkATYCHAJAIAwgASAEQYQBakEAEKwBIgUEQCAEIAU2AmAgAEH/+wAgBEHgAGoQjAFBfyELDAELIAQoAoQBIgctAAAhGyAHQQA6AAAgBxC0AyIFBEAgBCAFNgJQIABB2YABIARB0ABqEIwBQX8hCwwBCyAHEMECIgUEQCAEIAU2AkAgAEHMywAgBEFAaxCMAUF/IQsMAQsgBy0ACSETIAcoAjghCSAAQeLkATYCHEF/IQsgCSATaiIOLQAFQQh0IA4tAAZyQQFrQf//A3EhDSATIActAAgiBUECdGtBDGoiHCAOLQAEIA4tAANBCHRyQQFrIgpBAXRqIQYCfyAFRQRAIA5BCGoQLSEFIAwtABEEQCAAQcbkATYCHCAAIAVBBSABEOkCCyAAIAUgBEGIAWogAxCOBiELQQAMAQsgACgCQCIIQQA2AgBBAQshECANQQFqIR0gBiAJaiERIA9BBWshHiAPQQRrIRRBASEVIAohBQNAAkAgBUEASA0AIAAoAhBFDQAgACAFNgIkAkAgDSARLQABIBEtAABBCHRyIgZJIAYgFE1xRQRAIAQgFDYCKCAEIB02AiQgBCAGNgIgIABBpfwAIARBIGoQjAFBACEVDAELIAcgBiAJaiIXIARB6ABqIAcoAlARAgAgDyAGIAQvAXpqSQRAQQAhFSAAQYXsAEEAEIwBDAELIActAAEEQCAEKQOIASEfIAQpA2ghAwJAAkAgEARAIAMgH1UNAQwCCyADIB9TDQELIAQgAzcDMCAAQYPHACAEQTBqEIwBIAQpA2ghAwsgBCADNwOIAUEAIRALIAQoAnQiEiAELwF4IhZLBEAgEiAeaiAWayAUbiEWIAQvAXogF2pBBGsQLSESIAwtABEEQCAAIBJBAyABEOkCCyAAQQAgEiAWELcICyAHLQAIRQRAIBcQLSEGIAwtABEEQCAAIAZBBSABEOkCC0EAIRAgACAGIARBiAFqIAQpA4gBEI4GIgYgC0YNASAAQdgiQQAQjAEgBiELDAELIAggBiAELwF6akEBayAGQRB0chD6BQsgEUECayERIAVBAWshBQwBCwsgAiAEKQOIATcDACAAQQA2AhwgFQRAIAAoAhBBAEwNAQJAIActAAgNACAAKAJAIghBADYCAANAIApBAEgNASAIIAcgCSAKQQF0IBxqaiICLQAAQQh0IAItAAFyIgIgCWogBygCTBEAACACakEBayACQRB0chD6BSAKQQFrIQoMAAsACyATQQFqIQUDQCAFIAlqIgItAABBCHQgAi0AAXIiBQRAIAggBSAFIAlqIgItAAJBCHQgAi0AA3JqQQFrIAVBEHRyEPoFDAEFQQAhAgNAIA1B//8DcSEKAkACf0EAIQUCQCAIKAIAIgZFDQAgBCAIKAIENgJoIAggCCAGQQJ0aiIFKAIANgIEIAVBfzYCACAIIAgoAgBBAWsiBTYCAEEBIQYDQEEBIAUgBkEBdCIHSQ0CGkEBIQUgCCAGQQJ0aiIJKAIAIgwgCCAHQQFyIgYgByAIIAdBAnRqKAIAIAggBkECdGooAgBLGyIGQQJ0aiIHKAIAIg1JDQEgCSANNgIAIAcgDDYCACAIKAIAIQUMAAsACyAFCwRAIAQoAmgiDUEQdiIFIApLDQEgBCABNgIUIAQgBTYCECAAQekOIARBEGoQjAELIAgoAgANBSAPIApBf3NqIAJqIgIgDi0AByIFRg0FIAQgATYCCCAEIAU2AgQgBCACNgIAIABBtQ4gBBCMAQwFCyACIApBf3NqIAVqIQIMAAsACwALAAsgByAbOgAACyAEKAKEARBJIAAgGDYCJCAAIBk2AiAgACAaNgIcIAtBAWohBQsgBEGQAWokACAFC5YEAQZ/A0AgAiEFA0AgASAFaiIHLQAAIgNFIANBL0ZyRQRAIAVBAWohBQwBCwsgAiAFSARAIAUgAmshBiMAQYAhayIEJAACQAJAAkAgASACaiIDLQAAQS5HDQAgBkEBRg0CIAZBAkcNACADLQABQS5HDQAgACgCECICQQJIDQEgACgCCCEDA0AgACACQQFrIgI2AhAgAiADai0AAEEvRw0ACwwCCyAAKAIMIAYgACgCECICakECakwEQCAAQQE2AgAMAgsgACACQQFqNgIQIAAoAgggAmpBLzoAACAAKAIIIAAoAhBqIAMgBhAlGiAAIAAoAhAgBmoiAjYCECAAKAIADQEgACgCCCACakEAOgAAIAAoAggiAyAEQZAgakHo+wMoAgARAAAEQEGEqAQoAgBBLEYNAiAAQenHAhDiAUG8GSADQenHAhDCATYCAAwCCyAEKAKcIEGA4ANxQYDAAkcNASAAIAAoAgQiAkEBajYCBAJAIAACfyACQckBTgRAQe/HAhDiAQwBCyADIARBgCBB3PsDKAIAEQQAIgJBgCBrQYBgSw0BQfTHAhDiAUGC2AAgA0H0xwIQwgELNgIADAILIAIgBGpBADoAACAAIAQtAABBL0cEfyAAKAIQIAZBf3NqBUEACzYCECAAIAQQjwYMAQsgAEEBNgIACyAEQYAhaiQAIActAAAhAwsgBUEBaiECIAMNAAsLHgEBfyAAEEwgAEEAELEFIgEEfyABBSAAQQAQrwQLCz0BA38gAUEAIAFBAEobIQNBASEBAkADQCACIANGDQEgACACaiEEIAJBAWohAiAELQAARQ0AC0EAIQELIAEL2jMBJn8jAEEQayIkJAAgAEH8AGohIyAAKAJ0IQsDQAJAAkAgCygCFEEATg0AIAsQwQJFDQBBACECDAELIAACfwJAIAstAAxFBEBBACECIAsoAhRBA2wgACgCFCgCKEEBdEwNAyAALQBEIgVFDQMMAQsgAC0ARCIFDQACfyAAKAIUQQhqIQEDQEEAIAEoAgAiAUUNARoCQCAAIAFGDQAgAS0AAA0AIAEoAnQgACgCdEcNAEHFzgQQKQwCCyABQRhqIQEMAAsACyICDQJBACECIwBBEGsiBSQAIAVBADYCCCAFQQA2AgQgCygCNCEBAkACQCALKAJIEF0iBkUEQCAFIAEgBUEIaiAFQQRqIAsoAgRBABCiAjYCDCALIAUoAggiAiAFQQxqEKYIIAEtABEEQCABIAUoAgRBBSALKAIEIAVBDGoQuAELIAUoAgwiBkUNAQsgI0EANgIAIAIQSQwBCyACQRxqIAtBHGogCy0ADEEBdBAlGiACQSRqIAtBJGogCy0ADEECdBAlGiACIAstAAw6AAwgCyACKAI4LQAAQfcBcRCtAyALLQAJIAsoAjhqQQhqIAUoAgQQRSAjIAI2AgBBACEGCyAFQRBqJAAgBiICDQIgACALNgJ4QQAhAiAAQQA2AUYgAEEBOgBEICMMAQsgACAFQRh0QRh1QQFrIgFBAXRqLwFIIR8CQCAAIAFBAnRqKAJ4IgEoAkgQXSICDQAgASgCFEEASARAIAEQwQIiAg0BCwJAIAstAAJFDQAgCy0ADEEBRw0AIAsvARwgCy8BGEcNACABKAIEQQFGDQAgAS8BGCAfRw0AIAEhAiAkQQNqIRMjAEHgAGsiCSQAAkAgCy8BGEUEQEGExgQQKSEBDAELIAsoAjQiBiAJQdwAaiAJQdQAakEAQQAQogIiAQ0AIAkgCygCJCIBNgJQIAkgCyABIAsoAkwRAAA7AU4gCSgCXCIRQQ0QrQMgCSALNgIMIAlBATYCCCAJIAlBzgBqNgIUIAkgCUHQAGo2AhAgCygCPCEBIAlBAjYCMCAJIAE2AhggCSAJQQhqQQBBASAREKUIIgE2AlggAQRAIBEQSQwBCyARIAYoAiggES8BEiAJLwFOamtBAms2AhQCQCAGLQARRQ0AIAYgCSgCVEEFIAIoAgQgCUHYAGoQuAEgCS8BTiARLwEQTQ0AIBEgESAJKAJQIAlB2ABqEOUECyATQQRqIRsgCygCOCALLwEaIAsoAkAgCy8BGEEBdGpBAmsiAS0AAEEIdCABLQABcnFqIQpBACEBA0ACQCAJIAogAUEBaiIGaiIFNgJQIAEgCmoiBywAAEEATg0AIAFBCEkhBCAGIQEgBA0BCwsgB0EKaiEEA0ACQCAJIAVBAWoiATYCUCAbIAUsAAAiBjoAACAbQQFqIRsgBkEATg0AIAEiBSAESQ0BCwsgCSgCWEUEQCACIAIvARggEyAbIBNrQQAgCygCBCAJQdgAahDbBAsgAi0ACSACKAI4akEIaiAJKAJUEEUgERBJIAkoAlghAQsgCUHgAGokACABIQIMAQsgASENIAAoAhQoAiQQ+gMhGyAFQQFGISYgAC0AA0EBcSEZQQAhBEEAIQxBACEOIwBBwAJrIgMkACADQQA2ArwCIANBADoAqAEgA0EANgKkASADQSBqQQBBwAAQKBogGwR/IA0oAjghAgJ/IA0vARgiBiANLQAMIgFqIglBAk8EQAJ/QQAgH0UNABogGSAfakECayAJIB9GDQAaIB9BAWsLIQ5BAiAZayEJCyAGIA4gAWsgCWoiAUYEQCANLQAJQQhqDAELIA0vARogDSgCQCABQQF0aiIBLQAAQQh0IAEtAAFycQshASANKAI0IRcgCUEBaiETIAEgAmoiGhAtIQUgCSECAkADQAJAIARFBEAgAyAXIAUgA0GwAmogAkECdGoiBkEAQQAQ2AQiATYCvAIgAUUNAQsgAyAFNgKsAUEAIQggA0GwAmpBACACQQJ0QQRqECgaDAILAkAgBigCACIGKAIUQQBODQAgAyAGEMECIgE2ArwCIAFFDQAgAyAFNgKsAUEAIQggA0GwAmpBACACQQJ0ECgaDAILIAwgBi8BGGpBBGohDCACBEAgAkEBayICIA5qIQcCQCANLQAMIgFFDQAgByANLwEcRw0AIAJBAnQiASADQYgCamogDSgCJCIGNgIAIAYQLSEFIANBsAFqIAFqIA0gBiANKAJMEQAANgIAQQAhBCANQQA6AAwMAgsgAkECdCIEIANBiAJqaiIGIA0oAjggDS8BGiANKAJAIAcgAWtBAXRqIgEtAABBCHQgAS0AAXJxaiIKNgIAIAoQLSEFIANBsAFqIARqIA0gCiANKAJMEQAAIgQ2AgACQCAXLQAYQQxxRQ0AIBcoAiggCiANKAI4ayIBIARqSA0AIAEgG2ogCiAEECUaIAYgGyAKIA0oAjhrajYCAAsgDSAHIA0tAAxrIAQgA0G8AmoQ3AQgAygCvAIhBAwBCwsgAyAFNgKsASADQQAgFygCJCAMQQNqQfz///8HcSIBQQZsaqwQjQEiDzYCKCAPRQRAIANBBzYCvAJBACEIDAELIAMgAygCsAIiHjYCJCADIA8gAUECdGoiFjYCLCAWIAFBAXRqIRUgCUF/IAlBAE4bQQFqIREgHi0ACCIlQQJ0IRwgHi0AAiEdQQAhBEEAIQZBACEHA0ACQCAHIBFHBEAgB0ECdCISIANBsAJqaigCACIQKAI4IhgtAAAgHigCOC0AAEcEQCADQavJBBApNgK8AkEAIQgMBAsgGCAQLwESaiECIBAvARohCiAWIARBAXRqQQAgEC8BGCIBIBAtAAxqQQF0ECgaIBAtAAwiBUUNASABIBAvARwiAU8EQEEAIQgDQCABIAhGBEBBACEIA0AgBSAIRwRAIA8gBEECdGogECAIQQJ0aigCJDYCACAIQQFqIQggBEEBaiEEDAELCyADIAQ2AiAMBAUgDyAEQQJ0aiAYIAItAAEgAi0AAEEIdHIgCnFqNgIAIAhBAWohCCAEQQFqIQQgAkECaiECDAELAAsACyADQcPJBBApNgK8AkEAIQgMAwsgHCAXKAIoakEMayEhQQAhBEEAIQwDQAJAIAwgEUYEQCADKAIgIREgEyEBQQAhBwwBCyADQSBqIARBAnRqIgEgDEECdCIHIANBsAJqaigCACIKKAI8NgIQIAEgA0HQAWogB2ooAgAiAjYCKCAEBH8gBEEBayIBIAQgAiABQQJ0IANqKAJIRhsFQQALIQUgHUUEQCANKAI8IQYgA0EgaiAFQQFqIgVBAnRqIgEgAkEBajYCKCABIAY2AhALIANBsAFqIAdqIgEgISAKKAIUayIINgIAQQAhBANAIAotAAwgBEsEQCABIAogCiAEQQJ0aigCJCAKKAJMEQAAIAhqQQJqIgg2AgAgBEEBaiEEDAELCyADQfABaiAHaiACNgIAIAVBAWohBCAMQQFqIQwMAQsLA0ACQCABIAdKBEAgB0ECaiEFIAdBAnQiFiADQfABaiICaiEQIAIgB0EBaiIGQQJ0IgRqIRIgBCADQbABaiICaiEPIAIgFmoiGCgCACECA0ACQCACICFMBEAgGCACNgIAIBAoAgAiCCARIAggEUobIQUDQCAFIAhGDQUgA0EgaiAIEL8CQQJqIgwgAmoiAiAhSg0CIBggAjYCACAIQQFqIQgCQCAdDQBBACEMIAggEU4NACADQSBqIAgQvwJBAmohDAsgDyAPKAIAIAxrNgIADAALAAsgASAGTARAIAdBBE8EQCAYIAI2AgAgA0GoygQQKTYCvAJBACEIDAkLIA9BADYCACASIBE2AgAgBSEBCwJ/IANBIGogECgCACIEQQFrIhUQvwJBAmoiCiAdDQAaQQAgBCARTg0AGiADQSBqIAQQvwJBAmoLIQQgAiAKayECIA8gDygCACAEajYCACAQIBU2AgAMAQsLIBAgCDYCACAHBH8gAyAWaigC7AEFQQALIQIgBiEHIAIgCEgNAiADQcnKBBApNgK8AkEAIQgMBQsgAygCLCEUIAFBAWsiICEHA0ACQAJAIAdBAEoEQCAHQQJ0IhAgA0GwAWoiAmoiDygCACEFIAIgB0EBayIKQQJ0IgZqIhgoAgAhDCADQSBqIANB8AFqIAZqIhYoAgAiBCAdayIIEL8CGkEAQX4gByAgRhshEgNAIANBIGogBEEBayICEL8CGgJAIAVFBEAgFCAIQQF0ai8BAEECaiEGIBQgAkEBdGovAQAhFQwBCyAZDQMgBSAUIAhBAXRqLwEAakECaiIGIAwgEmogFCACQQF0ai8BACIVa0oNAwsgFiACNgIAIAhBAWshCCAMIBVrQQJrIQwgBEEBSiEVIAYhBSACIQQgFQ0ACwwCCyABQQAgAUEAShshBSAfIA5rIQYgHigCOC0AACEKQQAhAkEAIQgDQAJAIAIgBUYEQEEAIQUgCEEAIAhBAEobIR4MAQsCQCACIAlMBEAgAkECdCIBIANBkAJqaiADQbACaiABaiIBKAIAIgc2AgAgAUEANgIAIAMgBygCSBBdIgQ2ArwCIAcoAkguAR5BAkEBIAIgBkYbRiAEckUEQCADQZTLBBApIgQ2ArwCCyAIQQFqIQggBEUNAQwLCyADIBcgA0EIaiADQawBakEBIAMoAqwBIBkbQQAQogIiATYCvAIgAQ0KIAMoAggiBCAKEK0DIAJBAnQiASADQdABamogETYCACADQZACaiABaiAENgIAIAhBAWohCCAXLQARRQ0AIBcgBCgCBEEFIA0oAgQgA0G8AmoQuAEgAygCvAINCgsgAkEBaiECDAELCwNAAkACQCAFIB5GBEAgAygCrAEhDEEAIQUDQAJAQQAhBEEBIQIgBSAeRgRAIAMgDDYCrAEgGiADQZACaiAIQQFrIhVBAnRqKAIAIgEoAgQQRSAKQQhxIAggE0ZyRQRAIAEoAjggCUECdCADQZACaiADQbACaiAIIBNKG2ooAgAoAjgoAAg2AAgLIBctABENASADKAIoIRYMBAsDQCACIAhHBEAgAiAEIANB8ABqIgEgAkECdGooAgAgBEECdCABaigCAEkbIQQgAkEBaiECDAELCyAEQQJ0IgYgA0HwAGpqIgEoAgAhDCABQX82AgAgBCAFRwRAIAQgBUoEQCADQZACaiAGaigCACgCSCAEIBcoAjBqQQFqQQAQpAgLIANBkAJqIAVBAnRqKAIAIgEoAkggDCADQeYAaiAEQQF0ai8BABCkCCABIAw2AgQLIAVBAWohBQwBCwtBACEHIBFBACARQQBKGyETIAMoApACIgUtAAwgBS8BGGohBCAdRSEKIAMoAighFiAFIQFBACECQQAhDANAIAwgE0YNAiAKIAxqIQYgFiAMQQJ0aigCACESA0AgBCAMRgRAIAYgA0GQAmogA0GwAmogAkEBaiICIAhIGyACQQJ0aigCACIFLwEYaiAFLQAMaiEEDAELCwJAIANB8AFqIAdBAnRqKAIAIAxGBEAgA0GQAmogB0EBaiIHQQJ0aigCACEBIB1FDQELAkAgAiAITg0AIAEoAgQgA0GQAWogAkECdGooAgBHDQAgEiAFKAI4SQ0AIBIgBSgCPEkNAQsgJUUEQCAXIBIQLUEFIAEoAgQgA0G8AmoQuAELIANBIGogDBC/AiABLwEQSwRAIAEgBSASIANBvAJqEOUECyADKAK8Ag0NCyAMQQFqIQwMAAsACyAFQQJ0IgIgA0GQAWpqIANBkAJqIAJqKAIAIgEoAgQiBjYCACADQfAAaiACaiAGNgIAIANB5gBqIAVBAXRqIAEoAkgvARw7AQBBACECA0AgAiAFRg0CIAJBAnQhASACQQFqIQIgASADQZABamooAgAgBkcNAAsgA0HCywQQKTYCvAIMCgtBACEMIBVBACAVQQBKGyEVQQAhBgNAIAYgFUcEQCAMIBtqIQQgFCAGQQJ0IgogA0HwAWpqKAIAIgVBAXRqLwEAIgIgHGohByAWIAVBAnRqKAIAIQECQCADQZACaiAKaigCACISLQAIRQRAIBIoAjggASgAADYACAwBCyAdBEAgEiAWIAVBAWsiBUECdGooAgAgA0EIaiASKAJQEQIAIARBBGogAykDCBCgAkEEaiEHIAQhAUEAIQQMAQsgAUEEayEBIAJBBEcNACANIAEgDSgCTBEAACEHC0EAIQIDQCAFIANBIGogAkECdGoiEygCKE4EQCACQQZJIQogAkEBaiECIAoNAQsLIBMoAhAiAiABSSACIAEgB2pPckUEQCADQd/MBBApNgK8AgwMCyANIAYgDmogASAHIAQgEigCBCADQbwCahDbBCAGQQFqIQYgByAMaiEMIAMoArwCRQ0BDAsLCyAIQQEgCGsiAiACIAhIGyEYIB1FIRAgAygC8AEhFgNAAkACQAJ/AkAgAiAYRwRAIAIgAkEfdSIBcyABayIEIANBpAFqaiISLQAADQMgAkEASARAIARBAnRBBGsiASADQdABamooAgAgA0HwAWogAWooAgBIDQQMAgsgAg0BQQAhAUEAIQYgFgwCC0EAIQQgA0EANgK8AgJ/AkACQCAmRQ0AIA0vARgNACADKAKQAiIGKAIUIA0tAAlIDQAgAyAGQX8Qpwg2ArwCIAYgDSADQbwCaiIBEKYIIAYgARCYAwwBCyAIIBctABFFDQEaIAggJQ0BGgNAIAQgHkYNASAXIANBkAJqIARBAnRqKAIAIgEoAjhBCGoQLUEFIAEoAgQgA0G8AmoQuAEgBEEBaiEEDAALAAsgCAshAgNAIAIgCUoNDyADQbACaiACQQJ0aigCACADQbwCahCYAyACQQFqIQIMAAsACyAEQQFrIQUgESEGIAQgCUwEQCADQdABaiAFQQJ0aigCACAQaiEGCyADQfABaiIBIARBAnRqKAIAIAVBAnQgAWooAgAgEGoiAWsLIQUgBEECdCIVIANBkAJqaigCACEOIANBIGohFCMAQRBrIhkkACAOKAJAIRMgDi0ACSEKIA4oAjghICAOLQAMIQcgDi8BGCIaIQQCfyABIAZKBEAgGiAOIAYgASAGayAUEKMIIg9IBEBBk8UEECkMAgsgDigCQCIEIAQgD0EBdGogGkEBdBCqARogGiAPayEECyAGIBpqIAdqIgcgASAFaiIPSgRAIAQgDiAPIAcgD2sgFBCjCGshBAsgGSAKICBqIhwtAAVBCHQgHC0ABnJBAWtB//8DcSAgakEBaiIHNgIMAkAgByATIAVBAXRqIhNJDQAgByAOKAI8Sw0AIAEgBkgEQCAOKAJAIgogBiABayIHIAUgBSAHShsiB0EBdGogCiAEQQF0EKoBGiAOIBMgGUEMaiAKIAEgByAUEIIGDQEgBCAHaiEEC0EAIRoDQCAOLQAMIBpLBEAgDiAaQQF0ai8BHCAGaiIHIAFrIg9BAEggBSAPTHJFBEAgDigCQCAPQQF0aiEKIAQgD0oEQCAKQQJqIAogBCAPa0EBdBCqARoLIBQgBxC/AhogDiATIBlBDGogCiAHQQEgFBCCBg0DIARBAWohBAsgGkEBaiEaDAELCyAOIBMgGUEMaiAOKAJAIARBAXRqIAEgBGogBSAEayAUEIIGDQAgDkEAOgAMIA4gBTsBGCAcIAVBCHY6AAMgHCAOLQAYOgAEIBwgGSgCDCAgayIBQQh0IAFBgP4DcUEIdnI7AAVBAAwBCyABIQYgBSEEA0AgBEEASgRAIAZBAXQiCiAUKAIMai8BAEUEQCAUKAIEIgcgFCgCCCAGQQJ0aigCACAHKAJMEQAAIQcgFCgCDCAKaiAHOwEACyAEQQFrIQQgBkEBaiEGDAELCyAUIAEgBSAOEKUICyEBIBlBEGokACABDQEgEkEBOgAAIA4gISADQbABaiAVaigCAGs2AhQLIAJBAWohAgwBCwsgAyABNgK8AgwJCyAFQQFqIQUMAAsACyAEIQIgBSEGCyAPIAY2AgAgGCAMNgIAQQAhBCAHQQJOBEAgAyAQaigC6AEhBAsgCiEHIAIgBEoNAAsgA0HzygQQKTYCvAJBACEIDAQLIBAgBTYCACAGIgEhBwwACwALIBggEC8BEmogEC8BGEEBdGohAQNAIAEgAksEQCAPIARBAnRqIBggAi0AASACLQAAQQh0ciAKcWo2AgAgAyAEQQFqIgQ2AiAgAkECaiECDAELCyADQdABaiASaiAENgIAIAcgCU4gHXJFBEAgFiAEQQF0aiIFIANBsAFqIBJqKAIAIgE7AQAgDyAEQQJ0aiAGIBVqIANBiAJqIBJqKAIAIAFB//8DcSICECUgHGoiATYCACAFIAUvAQAgHGsiCDsBACACIAZqIQYCQCAQLQAIRQRAIAEgECgCOCgACDYAAAwBCwNAIAhB//8DcUEDSw0BIAYgFWpBADoAACAFIAUvAQBBAWoiCDsBACAGQQFqIQYMAAsACyADIARBAWoiBDYCIAsgB0EBaiEHDAALAAtBACECQQAgAygCKBAnIAlBfyAJQQBOG0EBaiEBA38gASACRgR/QQAhAiAIQQAgCEEAShshAQNAIAEgAkcEQCADQZACaiACQQJ0aigCABBJIAJBAWohAgwBCwsgAygCvAIFIANBsAJqIAJBAnRqKAIAEEkgAkEBaiECDAELCwVBBwshAiADQcACaiQAICIEQCAiEKYCCyAbISILIAtBADoADCALEEkgACAALQBEQQFrIgE6AEQgACABQRh0QRh1QQJ0akH4AGoLKAIAIgs2AnQgAkUNAQsLICIEQCAiEKYCCyAkQRBqJAAgAgunAgECfyMAQRBrIgMkAAJAIAEgAi8BEmoiASAAKAI8SwRAQe++BBApIQIMAQsgAUEEaxAtIQEgACgCNCIEKAIoQQRrIgAgAigCDGogAi8BEEF/c2ogAG4hAANAIABFBEBBACECDAILIANBADYCDCADQQA2AggCQCABQQJPBEAgASAEKAIwTQ0BC0GAvwQQKSECDAILAn8CQAJAIABBAWsiAARAIAQgASADQQhqIANBDGoQ6ggiAg0FIAMoAggiAg0BCyADIAQgARCqCCICNgIIIAINAEEAIQIMAQsgAigCSC4BHkEBRg0AQZS/BBApDAELIAQgAiABEKkICyECIAMoAggiAQRAIAEoAkgQpgELIAINASADKAIMIQEMAAsACyADQRBqJAAgAgtPAQJ/A0ACQCABDQAgACgCdCICLQAIDQAgACACKAI4IAIvARogAigCQCAALwFGQQF0aiIBLQAAQQh0IAEtAAFycWoQLRDCAiEBDAELCyABC6gDAQV/IwBBIGsiBiQAAkAgASAAKAIwSwRAQfrWBBApIQUMAQsgACABIAZBHGpBAEEAENgEIgUNACAGKAIcIQQCQAJAIAAtABBBBHENACAEKAJILgEeQQJBASABQQFGG0YNAEGB1wQQKSEFDAELIAQtAAkhCEEAIQEDQCAELwEYIgUgAUsEQCAEKAI4IAQvARogBCgCQCABQQF0aiIFLQAAQQh0IAUtAAFycWohByAELQAIRQRAIAAgBxAtQQEgAxCVBiIFDQMLIAQgByAGIAQoAlARAgAgBigCDCAGLwEQRwRAIAQgByAGEJMGIgUNAwsgAUEBaiEBDAELCyAGQQA2AhgCQAJAIAQtAAhFBEAgBiAAIAggBCgCOGpBCGoQLUEBIAMQlQYiBTYCGCAFDQMgA0UNAiAELQABDQIgBC8BGCEFDAELIANFDQELIAMgAykDACAFrUL//wODfDcDAAsgAgRAIAQgBkEYahCYAyAGKAIYIQUMAQsgBCgCSBBdIgUNACAEIAQoAjggCGotAABBCHIQrQNBACEFCyAEEEkLIAZBIGokACAFC2EBAX8gAEEAOgALIAAoAgRBCGohBANAIAQoAgAiBARAAkAgBC0AAUEQcUUNACAAQQE6AAsgBCgCQCABRw0AIANFBEAgBCkDICACUg0BCyAEQQE6AAALIARBGGohBAwBCwsLXAECfyAAQQA7ATIgACAALQABQfkBcToAASAAIAAsAEQiAUEBdCAAai8BRjsBRiAAIAFBAWsiAToARCAAKAJ0IQIgACAAIAFBGHRBGHVBAnRqKAJ4NgJ0IAIQqwMLegEBfwJAIAAtAAANACAALQABQQhxRQ0AIAFBADYCAEEADwsCQCAAEMMCIgJBEEcEQCACDQEgAUEANgIAIAAQxQghASAALQABIQIgAUUEQCAAIAJBCHI6AAFBAA8LIAAgAkH3AXE6AAEgAQ8LIAFBATYCAEEAIQILIAIL5wEBAX8gAC0ABSECAkACQCAALQAPRQ0AIAFBAmsOAwABAAELIAEgAkYNACAAIAE6AAUCQCABQQFxDQAgAC0ABCACQQVxQQFHcg0AIAAoAkQQlAEgAC0AEkECTwRAIAAoAgAgACgCvAFBABD0ARoMAgtBACEBIAAtABEhAgJAIAIEfyACBSAAEPUIIQEgAC0AEQtBAUYEfyAAQQIQxgIFIAELDQAgACgCACAAKAK8AUEAEPQBGiACQQFHDQAgAEEBEO4CGgwCCyACDQEgABD0BAwBCyABQQJHDQAgACgCRBCUAQsgAC0ABQt1AQJ/AkAgAEUNACAALQAIQQJHDQAgACgCBCEDIAAQTCABQQJGBEAgA0EAQQAQ2QIiBA0BCyADKAIAIAEgAhCBCSIEDQACQCACQQBODQAgAy0AGEEQcUUNACADQQA2AjALIAMQoAchBCADIAMoAgwQswoLIAQLHwEBfwNAIAEEQCABKAIEIQIgACABECcgAiEBDAELCwsWACAAIAE3A2ggACAAKQNwIAF8NwNwCxMAIAEtAARBEHEEQCAAIAEQXgsL7AgBC38jAEEQayIKJAACQCABKAIEIgtBAk0EQEH3pwQQKSEFDAELIAAoAgAhCSABKAJIIQcjAEEQayIMJAACQCAJLQAMBEAgBxBdIgYNAQsgBy8BHCIGQQJxBEAgBxCoBSIGDQEgBy8BHCEGCyAFIAZBCHFFckUEQCAHKAIYIQgLIAcgBkH3/wNxOwEcAkAgCSAEEK8DIgVFDQAgBS4BHkECTgRAIAUQmQJBgd0DECkhBgwCCyAHIAcvARwgBS8BHEEIcXI7ARwgCS0ADARAIAUgCSgCHEEBahDmBAwBCyAFEKYGCyAHKAIYIQYgByAEEOYEIAcQ6gQgCS0ADEUgBUVyRQRAIAUgBhDmBCAFEJkCCyAIBEAgCSAIIAxBDGpBABCnASIGBEAgCCAJKAIgSw0CIAkoAuABIQ0CQCAJKAI8IgdFDQAgCEEBayEFA0AgBygCCCIIBEAgBSAIIAUgCG4iCWxrIQUgByAJQQJ0aigCDCIHDQEMAgsLIAcoAgBBoB9NBEAgByAFQQN2aiIIIAgtAAxBfiAFQQdxd3E6AAwMAQsgDSAHQQxqIghB9AMQJSEJIAhBAEH0AxAoIQ0gB0EANgIEIAVBAWohDkEAIQgDQCAIQf0ARg0BIAkgCEECdGoiDygCACIFRSAFIA5GckUEQCAHIAcoAgRBAWo2AgQgBUEBa0H9AHAhBQNAIA0gBUECdGoiECgCAARAQQAgBUEBaiIFIAVB/ABLGyEFDAELCyAQIA8oAgA2AgALIAhBAWohCAwACwALDAILIAwoAgwiBSAFLwEcQQhyOwEcIAUQ6gQgDCgCDBCZAgtBACEGCyAMQRBqJAAgCiAGIgU2AgggBQ0AIAEgBDYCBAJAIAJB+wFxQQFGBEAgARDpCCIFRQ0BDAILIAEoAjgQLSIBRQ0AIAAgAUEEIAQgCkEIahC4ASAKKAIIIgUNAQtBACEFIAJBAUYNACAAIAMgCkEMakEAEKwBIgUNACAKKAIMIgYoAkgQXSIFBEAgBhBJDAELIwBBIGsiCCQAAkACQCACQQRGBEAgBigCOCIFEC0gC0cEQEGvpwQQKSEBDAMLDAELIAYtAABFBEAgBhC0AyIBDQILIAYvARghB0EAIQEgAkEDRyEJAkADQCABIAdGDQEgBigCOCAGLwEaIAYoAkAgAUEBdGoiBS0AAEEIdCAFLQABcnFqIQUCQAJAIAlFBEAgBiAFIAhBCGogBigCUBECACAIKAIUIAgvARhNDQEgBSAILwEaaiIFIAYoAjggBigCNCgCKGpLBEBBwqcEECkhAQwHCyAFQQRrIgUQLSALRw0BDAULIAUQLSALRg0BCyABQQFqIQEMAQsLDAELAkAgAkEFRgRAIAYtAAkgBigCOGpBCGoiBRAtIAtGDQELQdSnBBApIQEMAgsLIAUgBBBFQQAhAQsgCEEgaiQAIAogASIFNgIIIAYQSSAFDQAgACAEIAIgAyAKQQhqELgBIAooAgghBQsgCkEQaiQAIAULLQAgAEEIaiEAA0AgACgCACIABEAgACAALQABQfsBcToAASAAQRhqIQAMAQsLC0kBAn8gASAAKAIIIgMoAgRHBEAgACgCBCEEIAMgADYCSCADIAQ2AjggAyACNgI0IAMgATYCBCADQeQAQQAgAUEBRhs6AAkLIAMLowECAn8BfiMAQRBrIgMkAAJAAkAgACgC6AEiAgR/IAIuAShBAE4EfyACKAJIBUEACwVBAAsiAkUEQCAAKAJAIgIoAgBFBEBBACECDAILIANCADcDCCACIANBCGoQvAEiAg0CIAApA6gBIgQgAykDCHxCAX0gBH+nIQILIAIgACgCoAFNDQAgACACNgKgAQsgASACNgIAQQAhAgsgA0EQaiQAIAILYQEDfyMAQTBrIgNBCGohAgJAA0AgACgCGCEEA0AgASgCGCAESwRAIAIgADYCECAAIgIoAhAiAA0CDAMLIAIgATYCECABIgIoAhAiAQ0ACwsgACEBCyACIAE2AhAgAygCGAufAgICfwJ+IwBBIGsiAyQAIAFBADoAAAJAIAAgA0EQahC8ASIEDQAgAykDECIFQhBTDQAgACAFQhB9IANBHGoQpAIiBA0AQQAhBCACIAMoAhwiAk0gAkVyDQAgAq0iBSADKQMQIgZCEH1VDQAgACAGQgx9IANBDGoQpAIiBA0AIAAgA0EEakEIIAMpAxBCCH0QggEiBA0AQQAhBCADKQAEQtmrl8iPpOixV1INACAAIAEgAiADKQMQIAV9QhB9EIIBIgQNAEEAIQQgAygCDCEAA0AgAiAERkUEQCAAIAEgBGosAABrIQAgBEEBaiEEDAELCyADIAA2AgxBACEEIAAEfyADQQA2AhxBAAUgAgsgAWpBADsAAAsgA0EgaiQAIAQLYgAgAUUEQCAALQArRQRAQQAPCyAAQQA6ACsgACAALgEoQQNqELADRQRAIAAtACtFDwsgAEEBOgArQQAPCyABQQBKBEAgACAALgEoQQNqEO8CIABBAToAK0EBDwsgAC0AK0ULDAAgACgCAEGo+QFGCz4BAX8gAC0AHEECcQRAIABBARD+AwsgACgCDCIBIAEoAgxBAWs2AgwgASgCLCAAKAIAQQFBhPUDKAIAEQIAC40BAQJ/IAIoAgQiAygCAEUEQCACKAIEIgNCADcCECADIAI2AgAgA0IANwIgIANCADcCGCACKAIAIQQgA0IANwAoIAMgA0EoajYCCCADIAQ2AgQgA0EBOwEcIAMgATYCGCADIAA2AgwgACABIAIQpwYPCyAAIAAoAgxBAWo2AgwgAyADLwEeQQFqOwEeIAMLKQEBfwNAIAAgARDGAiICQQVGBEAgACgCxAEgACgCwAERAQANAQsLIAILKAAgAC0ALARAIABBAEEBEPUBIABBADYCaCAAQQA6ACwgAEEAOgAvCwsuAQF/IAAQqQYgAC4BKCIBQQBOBEAgACABQf//A3FBA2oQ7wIgAEH//wM7ASgLC3IBAn8CQAJAIAAtACtBAkcEQCAALQAyRQ0BCwNAIAAoAhggAkoEQCACQQJ0IgMgACgCIGooAgAQIyAAKAIgIANqQQA2AgAgAkEBaiECDAELCyAALQArQQJGDQELIAAoAgQiACABIAAoAgAoAkARAAAaCwuOAQEEfyMAQRBrIgEkAAJAIAAoAkQiAkUNACAAIAIQxwIgARDwBA0AIAAoAkQgASgCCGshAiABKAIAIQNBACEAA0AgAEGAwABHBEAgAyAAQQF0aiIELwEAIAJKBEAgBEEAOwEACyAAQQFqIQAMAQsLIAEoAgQgAkECdGoiAEEAIAMgAGsQKBoLIAFBEGokAAtPAQJ/IAAQpQIhASAAQZjEtwE2AjQgAEFAa0EBOgAAQQEgAEE0aiICQShBACAAQdwAahDJAiABQTBqIAJBMBAlGiAAEO4EIAEgAkEwECUaC88BAQV/IwBBEGsiAyQAAkAgACABEMcCIAMQ8AQiBA0AAkAgASADKAIIayIFQQFHBEAgAygCBCEBDAELIAMoAgQiAUEAIAMoAgAgAWtBgIABahAoGgsgBUECdCABakEEayIGKAIABEAgABCsBgsgAhCOCSEBIAMoAgAhACAFIQQCQANAIAAgAUEBdGoiBy8BAARAIARFDQIgBEEBayEEIAEQjQkhAQwBCwsgBiACNgIAIAcgBTsBAEEAIQQMAQtB5eoDECkhBAsgA0EQaiQAIAQLHQEBfwNAIAAEQCAAKAIAIQEgABAjIAEhAAwBCwsLWAAgAkEAQcAAECghAiAERQRAIAAgASACIANBABCGAg8LIAIgATYCOCACIAM2AjAgAiAENgIIIAJBqPkBNgIAIAIgADYCNCACIARB/AcgBEEAShs2AgRBAAtDAQN/A0AgAyAAKAJoTkUEQCABIAAoAmQgA0EwbGoiBCgCFE0EQCAEKAIQIAEQ9wIgAnIhAgsgA0EBaiEDDAELCyACC0MBAX8gAARAA0ACQCAAKAIcENULDQAgACgCECABTQ0AIAAgASACQQEQzQsiA0UNACAAIAM2AhwLIAAoAiwiAA0ACwsLQAEBfyAABEAgACgCBEEYaiAAKAIUQfAAahAtQQFqIgEQRSAAKAIEQdwAaiABEEUgACgCBEHgAGpBm765ARBFCwspACAAQQEQ/gMgACAALwEcQfD/A3FBAXI7ARwgAC8BHkUEQCAAEKEJCwszAQF/QYAEIQECQCAALQAMDQAgACgCQBDxAkGAIHENACAAKAJAEJgJIQELIAAgATYCnAELSAEBfyAAKAIMIgEgASgCDEEBazYCDCAAIAAvAR5BAWsiATsBHiABQf//A3FFBEAgAC0AHEEBcQRAIAAQoQkPCyAAQQMQ/gMLC4sCAgJ/An4CQCAALQAUBH9BAAUgACgCDCIDRQRAIABBEhC1AyAAKAIIIAAoAhBBf3NqDwsgAC0AFUEEcQRAIAAoAgQhAgsgADUCECIEIAGsfEIBfCIFIAQgBXwiBCAEIAOtIgVVGyIEIAVVBEAgABCnAiAAQRIQtQNBAA8LIAAgBD4CCCAEQv////8PgyEEAn8gACgCACIDBEAgAyACIAQQuQEMAQsgAiAEEMgBCyICRQ0BAkAgAC0AFUEEcQ0AIAAoAhAiA0UNACACIAAoAgQgAxAlGgsgACACNgIEIAAgACgCACACEKsCNgIIIAAgAC0AFUEEcjoAFSABCw8LIAAQpwIgAEEHELUDQQALMwEBfyAAKAIMIgFBAE4EQCAAIAFBw6UCEMQCIABBfzYCDAsgACgCHBAjIABBAEE0ECgaCxwAAn8gAQRAQaT5ASAALQAPDQEaCyAAKAK4AQsLJgEBfyAAKAJUIgEEQCAAIAFBBGsiATYCVCABEKYCIABBADYCVAsLngcBCH8jAEHwAGsiBCQAIABBAToAsQEgACgCGCEFIARBADYCZCAEQbu8ATYCYCAEQd+1ATYCXCAEQb/DAEHSwwAgAUEBRhsiCTYCWCAEIAk2AlQgBEGQ6gA2AlAgBEEANgIcIAQgATYCGCAEIAA2AhAgBEIANwIkIAQgAzYCICAEIAI2AhQgBEEQaiAEIARB0ABqIAQQ0QgaIAAgACgCGCAFQb9/cnE2AhgCQAJAIAQoAhwiAw0AIAAoAhAiBiABQQR0aiIHKAIEIgNFBEAgBigCHCIBIAEvAU5BAXI7AU5BACEDDAILIAMQTAJAIAcoAgQiAxDfAiILDQAgA0EAQQAQtAIiA0UNACACIAAgAxDTAhDAAgwBC0EAIQMDQCADQQVGRQRAIAcoAgQgA0EBaiIFIARBMGogA0ECdGoQnAMgBSEDDAELCwJ/IAAtACNBAnFFBEAgBCgCMCEIIAQoAkAMAQsgBEFAa0EANgIAIARCADcDOCAEQgA3AzBBAAshBSAGIAFBBHRqIgooAgwiAyAINgIAAkACQCAFRQ0AAkAgAQ0AIAAtABhBwABxDQAgACAFQQNxIgNBASADGxC+BiAKKAIMIQMMAQsgAC0AVCAFQQNxRg0AIAIgAEGl5AAQwAJBASEDDAELIAMgAC0AVDoATSADKAJQRQRAIAMgBCgCOBDnBCIDQbBwIAMbIgM2AlAgBygCBCADEP0DIAooAgwhAwsgAyAEKAI0IgU6AEwCQCAFQf8BcSIIRQRAIANBAToATAwBCyAIQQVJDQAgAiAAQd0ZEMACQQEhAwwBCyABIAVBBEhyRQRAIAAgACkDIEJ9gzcDIAsgBCAHKAIEEJADNgIoIAAoAhAgAUEEdGooAgAhAiAEIAk2AgQgBCACNgIAIABBl+8AIAQQPCECIAAoAugCIQUgAEEANgLoAiAAIAJBBSAEQRBqQQAQ9gEhAyAAIAU2AugCIAQoAhwhBSAAIAIQJwJAAkACQCADIAUgAxsiA0UEQCAAIAEQ0ggaIAAtAFcNAQwDCyAALQBXRQ0BCyAAELICIAAoAhAhBkEHIQMMAgsgAC0AI0EIcUUgA0EHRnINAQsgACgCECABQQR0aigCDCICIAIvAU5BAXI7AU5BACEDCyALDQAgBiABQQR0aigCBBCQBhoLIANFDQAgA0GKGEcgA0EHR3FFBEAgABBPCyAAIAEQiQQLIABBADoAsQEgBEHwAGokACADC5ABAQN/IAAgACgCECgCDCICLQBNOgBUIAAoAhghAwJAIAItAE5BAXFFBEAgAEEAIAFBABC7BiIEDQELIANBAXEhAyAAKAIUIQIDQCACQQJOBEAgACgCECACQQFrIgJBBHRqKAIMLQBOQQFxDQEgACACIAFBABC7BiIERQ0BDAILC0EAIQQgAw0AIAAQugkLIAQLEQAgAARAIAAQtwlBBGsQIwsLGwAgACABOgBUIAAgACABQfD6AUEAEKkCNgIIC1wAAn8gAQRAIAFB1ABBDRCeCQwBC0EAQtQAEEELIgFFBEAgABBPIAEPCyABLQBMRQRAIAFBCGoQqgIgAUEYahCqAiABQShqEKoCIAFBOGoQqgIgAUEBOgBNCyABCzcBAX9BByEBAkAgAEUNACAAEPwERQRAQZHKChCfAQ8LIAAtAFcNACAAKAJIIAAoAkBxIQELIAELMQECfyAAKAIEIgEgACgCAEgEfyAAIAFBAWo2AgQgACgCCCABQQJ0aigCABArBUEACwsxAQF+IAC9IgFCgICAgICAgPj/AINCgICAgICAgPj/AFEgAUL/////////B4NCAFJxC+QFAgV/AX4jAEEQayIGJAAgBkEANgIMAkADQAJAAkACQCABLQAAIgdBrgFrDgMBBAIACyAHQbUBRw0DCyABKAIMIQEMAQsLIAEtAAIhBwsCQAJAAkACQAJAIAdBrQFHBEAgB0EkRwRAQa3lASEJQgEhCgwCCyABKAIIQQAQ0QQhBSAAIAEoAgwgAiAFQf8BcSIAIAQQwwYhCCAEKAIAIgFFDQUgASAAIAIQ2QgaIAQoAgAgAyACEJoDDAULQf67ASEJQn8hCgJAIAEoAgwiAS0AACIHQZkBaw4DAQABAAsgACABIAIgAyAGQQxqEMMGIQAgACAGKAIMIgVFcg0BIAUQyAgCQCAFLwEQIgBBCHEEQCAFIAUrAwCaOQMADAELIAUpAwAiCkKAgICAgICAgIB/UQRAIAVCgICAgICAgPDDADcDACAFIABBwOQDcUEIcjsBEAwBCyAFQgAgCn03AwALIAUgAyACEJoDDAELAkACQAJAAkACQCAHQZkBaw4DAQMBAAsgB0H1AGsOBQAEBAQBAwsgABDjAiIFRQ0EAkAgAS0ABUEIcQRAIAUgCiABNAIIfhCQAQwBCyAGIAEoAgg2AgQgBiAJNgIAIABB9iwgBhA8IgFFDQYgBSABQQEQxgULIAVBwwAgAyAHQf0BcUGZAUYbIAMgA0HBAEYbQQEQmgMgBS8BECIAQSxxBEAgBSAAQf3/A3E7ARALIAJBAUYNAyAFIAIQzAEhCAwDCyAGIAAQ4wIiBTYCDCAFRQ0DIAUQYgwCCyAGIAAQ4wIiBTYCDCAFRQ0CIAUgACABKAIIQQJqIgAgABAxQQFrIgAQkwggAEECba1BAEEBENkBGgwBCyAHQaoBRw0AIAYgABDjAiIFNgIMIAVFBEBBACEFDAELIAVBBDsBECAFIAEoAggtAARFrTcDAAsgBCAFNgIADAILQQAhBQsgABBPIABBABAnIAUQnQFBByEICyAGQRBqJAAgCAsQACAAIAEgAiADQd4AEM8JC0QBAX8CQCAALQAUDQAgAAJ/IAEgADUCCFUEQEESIAA1AgwgAVMNARoLIAAoAgAgARCNASICDQFBBwsQtQNBACECCyACCxoAIAAgAUF/IAJBD3FBgAFyQQAgA0EAEMkECxMAIAAgAUF/QQBBACACQQAQyQQLEAAgACABQbjqAUHbABC5Aws9AQF/IAFBAEoEQANAIABBADYCGCAAIAI2AhQgACADOwEQIABBKGohACABQQFLIQQgAUEBayEBIAQNAAsLCw8AIAAgACgCDEEBajYCDAsvAQF/AkAgACgCECIBRQ0AIAEgACgCBGpBAWstAAAQgAVFDQAgAEGU5QFBARBECwu5AQEBfwJAAkACQAJAAkAgAhAvQQFrDgQAAQMCBAsgACABIAIpAwAQWA8LIAAgAQJ8IAItABBBCHEEQCACKwMADAELIAIpAwC5CxDiCQ8LIAItABFBBHEEQCACKAIAIQIgACABEJAEIgNFBEAgACgCZCABQShsakEoayACEM4GCyADDwsgACABIAIoAgggAigCDEF/ENECDwsgACABIAIoAgggAjQCDEF/IAItABIQzQYPCyAAIAEQ+gILfgECfwJAIAAgARCQBCIGRQRAQQAhBiACRQ0BIAAoAmQgAUEobGpBKGsiByACIAMgBSAEENkBIgEgBUVyRQRAIAcgACgCAC0AVBDMASEBCyABRQ0BIAAoAgAgARCRASAAKAIAIAEQogEPCyAEQQFqQQJJDQAgAiAEEQMACyAGCywAIAAQnAEgAEGQCDsBECAAQQE6ABIgAEIANwMIIAAgAUEAIAFBAEobNgIACyYAIAJCgICAgAhaBEAgASADIAAQ6wkPCyAAIAEgAqdBASADEJQECykAAkAgAEUNACAAKAKIAiIARQ0AIAAgATYCDCAAIAAoAiRBAWo2AiQLCzkBAn8gAC8BECICQRJxRQRAQQAPCyAAKAIMIQEgAkGACHEEfyAAKAIAIAFqBSABCyAAKAIUKAJ4SgseACACEFciAEUEQEEHDwsgASAAQQAgAhAoNgIAQQALBwA/AEEQdAugAQEFfyMAQfABayIEJAAgBCAANgIAQQEhBQJAIAFBAkgNACAAIQMDQCAAIANBBGsiAyACIAFBAmsiB0ECdGooAgBrIgYQhwNBAE4EQCAAIAMQhwNBAE4NAgsgBCAFQQJ0aiAGIAMgBiADEIcDQQBOIgYbIgM2AgAgBUEBaiEFIAFBAWsgByAGGyIBQQFKDQALCyAEIAUQ+gkgBEHwAWokAAtIAQJ+Qn8hAQJAEOwBDQBB4KMEKQMAIQEgAEIAUw0AQeCjBCAANwMAIABB2KMEKQMAIgJZIAJCAFJxDQBB2KMEIAA3AwALIAELCQAgABAcEJoEC4ABAQF/An8CQAJAIANBgCBHIABBAEhyRQRAIAEtAAANASAAIAIQIAwDCwJAIABBnH9HBEAgA0UgAS0AACIEQS9GcQ0BIANBgAJHIARBL0dyDQIMAwsgA0GAAkYNAiADDQELIAEgAhAfDAILIAAgASACIAMQHQwBCyABIAIQHgsQdwu2GAMVfwR8AX4jAEEwayIJJAACQAJAAkAgAL0iG0IgiKciAkH/////B3EiA0H61L2ABE0EQCACQf//P3FB+8MkRg0BIANB/LKLgARNBEAgG0IAWQRAIAEgAEQAAEBU+yH5v6AiAEQxY2IaYbTQvaAiFzkDACABIAAgF6FEMWNiGmG00L2gOQMIQQEhAgwFCyABIABEAABAVPsh+T+gIgBEMWNiGmG00D2gIhc5AwAgASAAIBehRDFjYhphtNA9oDkDCEF/IQIMBAsgG0IAWQRAIAEgAEQAAEBU+yEJwKAiAEQxY2IaYbTgvaAiFzkDACABIAAgF6FEMWNiGmG04L2gOQMIQQIhAgwECyABIABEAABAVPshCUCgIgBEMWNiGmG04D2gIhc5AwAgASAAIBehRDFjYhphtOA9oDkDCEF+IQIMAwsgA0G7jPGABE0EQCADQbz714AETQRAIANB/LLLgARGDQIgG0IAWQRAIAEgAEQAADB/fNkSwKAiAETKlJOnkQ7pvaAiFzkDACABIAAgF6FEypSTp5EO6b2gOQMIQQMhAgwFCyABIABEAAAwf3zZEkCgIgBEypSTp5EO6T2gIhc5AwAgASAAIBehRMqUk6eRDuk9oDkDCEF9IQIMBAsgA0H7w+SABEYNASAbQgBZBEAgASAARAAAQFT7IRnAoCIARDFjYhphtPC9oCIXOQMAIAEgACAXoUQxY2IaYbTwvaA5AwhBBCECDAQLIAEgAEQAAEBU+yEZQKAiAEQxY2IaYbTwPaAiFzkDACABIAAgF6FEMWNiGmG08D2gOQMIQXwhAgwDCyADQfrD5IkESw0BCyAAIABEg8jJbTBf5D+iRAAAAAAAADhDoEQAAAAAAAA4w6AiGEQAAEBU+yH5v6KgIhcgGEQxY2IaYbTQPaIiGaEiGkQYLURU+yHpv2MhBAJ/IBiZRAAAAAAAAOBBYwRAIBiqDAELQYCAgIB4CyECAkAgBARAIAJBAWshAiAYRAAAAAAAAPC/oCIYRDFjYhphtNA9oiEZIAAgGEQAAEBU+yH5v6KgIRcMAQsgGkQYLURU+yHpP2RFDQAgAkEBaiECIBhEAAAAAAAA8D+gIhhEMWNiGmG00D2iIRkgACAYRAAAQFT7Ifm/oqAhFwsgASAXIBmhIgA5AwACQCADQRR2IgQgAL1CNIinQf8PcWtBEUgNACABIBcgGEQAAGAaYbTQPaIiAKEiGiAYRHNwAy6KGaM7oiAXIBqhIAChoSIZoSIAOQMAIAQgAL1CNIinQf8PcWtBMkgEQCAaIRcMAQsgASAaIBhEAAAALooZozuiIgChIhcgGETBSSAlmoN7OaIgGiAXoSAAoaEiGaEiADkDAAsgASAXIAChIBmhOQMIDAELIANBgIDA/wdPBEAgASAAIAChIgA5AwAgASAAOQMIQQAhAgwBCyAbQv////////8Hg0KAgICAgICAsMEAhL8hAEEAIQJBASEEA0AgCUEQaiACQQN0agJ/IACZRAAAAAAAAOBBYwRAIACqDAELQYCAgIB4C7ciFzkDACAAIBehRAAAAAAAAHBBoiEAQQEhAiAEIQZBACEEIAYNAAsgCSAAOQMgQQIhAgNAIAIiB0EBayECIAlBEGogB0EDdGorAwBEAAAAAAAAAABhDQALIAlBEGohDyMAQbAEayIFJAAgA0EUdkGWCGsiAkEDa0EYbSIGQQAgBkEAShsiEEFobCACaiEGQfTIAygCACILIAdBAWoiDUEBayIIakEATgRAIAsgDWohAiAQIAhrIQMDQCAFQcACaiAEQQN0aiADQQBIBHxEAAAAAAAAAAAFIANBAnRBgMkDaigCALcLOQMAIANBAWohAyAEQQFqIgQgAkcNAAsLIAZBGGshB0EAIQIgC0EAIAtBAEobIQ4gDUEATCEEA0ACQCAEBEBEAAAAAAAAAAAhAAwBCyACIAhqIQxBACEDRAAAAAAAAAAAIQADQCAPIANBA3RqKwMAIAVBwAJqIAwgA2tBA3RqKwMAoiAAoCEAIANBAWoiAyANRw0ACwsgBSACQQN0aiAAOQMAIAIgDkYhAyACQQFqIQIgA0UNAAtBLyAGayETQTAgBmshESAGQRlrIRQgCyECAkADQCAFIAJBA3RqKwMAIQBBACEDIAIhBCACQQBMIgpFBEADQCAFQeADaiADQQJ0agJ/An8gAEQAAAAAAABwPqIiF5lEAAAAAAAA4EFjBEAgF6oMAQtBgICAgHgLtyIXRAAAAAAAAHDBoiAAoCIAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAs2AgAgBSAEQQFrIgRBA3RqKwMAIBegIQAgA0EBaiIDIAJHDQALCwJ/IAAgBxCdBCIAIABEAAAAAAAAwD+inEQAAAAAAAAgwKKgIgCZRAAAAAAAAOBBYwRAIACqDAELQYCAgIB4CyEIIAAgCLehIQACQAJAAkACfyAHQQBMIhVFBEAgAkECdCAFaiIEIAQoAtwDIgQgBCARdSIEIBF0ayIDNgLcAyAEIAhqIQggAyATdQwBCyAHDQEgAkECdCAFaigC3ANBF3ULIgxBAEwNAgwBC0ECIQwgAEQAAAAAAADgP2YNAEEAIQwMAQtBACEDQQAhBCAKRQRAA0AgBUHgA2ogA0ECdGoiFigCACESQf///wchCgJ/AkAgBA0AQYCAgAghCiASDQBBAAwBCyAWIAogEms2AgBBAQshBCADQQFqIgMgAkcNAAsLAkAgFQ0AQf///wMhAwJAAkAgFA4CAQACC0H///8BIQMLIAJBAnQgBWoiCiAKKALcAyADcTYC3AMLIAhBAWohCCAMQQJHDQBEAAAAAAAA8D8gAKEhAEECIQwgBEUNACAARAAAAAAAAPA/IAcQnQShIQALIABEAAAAAAAAAABhBEBBASEDQQAhCiACIQQCQCACIAtMDQADQCAFQeADaiAEQQFrIgRBAnRqKAIAIApyIQogBCALSg0ACyAKRQ0AIAchBgNAIAZBGGshBiAFQeADaiACQQFrIgJBAnRqKAIARQ0ACwwDCwNAIAMiBEEBaiEDIAVB4ANqIAsgBGtBAnRqKAIARQ0ACyACIARqIQQDQCAFQcACaiACIA1qIghBA3RqIAJBAWoiAiAQakECdEGAyQNqKAIAtzkDAEEAIQNEAAAAAAAAAAAhACANQQBKBEADQCAPIANBA3RqKwMAIAVBwAJqIAggA2tBA3RqKwMAoiAAoCEAIANBAWoiAyANRw0ACwsgBSACQQN0aiAAOQMAIAIgBEgNAAsgBCECDAELCwJAIABBGCAGaxCdBCIARAAAAAAAAHBBZgRAIAVB4ANqIAJBAnRqAn8CfyAARAAAAAAAAHA+oiIXmUQAAAAAAADgQWMEQCAXqgwBC0GAgICAeAsiA7dEAAAAAAAAcMGiIACgIgCZRAAAAAAAAOBBYwRAIACqDAELQYCAgIB4CzYCACACQQFqIQIMAQsCfyAAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAshAyAHIQYLIAVB4ANqIAJBAnRqIAM2AgALRAAAAAAAAPA/IAYQnQQhACACQQBOBEAgAiEEA0AgBSAEIgZBA3RqIAAgBUHgA2ogBEECdGooAgC3ojkDACAEQQFrIQQgAEQAAAAAAABwPqIhACAGDQALQQAhBiACIQQDQCAOIAYgBiAOSxshB0EAIQNEAAAAAAAAAAAhAANAIANBA3RB0N4DaisDACAFIAMgBGpBA3RqKwMAoiAAoCEAIAMgB0chCyADQQFqIQMgCw0ACyAFQaABaiACIARrQQN0aiAAOQMAIARBAWshBCACIAZHIQcgBkEBaiEGIAcNAAsLRAAAAAAAAAAAIQAgAkEATgRAIAIhBANAIAQiBkEBayEEIAAgBUGgAWogBkEDdGorAwCgIQAgBg0ACwsgCSAAmiAAIAwbOQMAIAUrA6ABIAChIQBBASEDIAJBAEoEQANAIAAgBUGgAWogA0EDdGorAwCgIQAgAiADRyEEIANBAWohAyAEDQALCyAJIACaIAAgDBs5AwggBUGwBGokACAIQQdxIQIgCSsDACEAIBtCAFMEQCABIACaOQMAIAEgCSsDCJo5AwhBACACayECDAELIAEgADkDACABIAkrAwg5AwgLIAlBMGokACACC/4DAwN8An8BfiAAvSIGQiCIp0H/////B3EiBEGAgMCgBE8EQCAARBgtRFT7Ifk/IACmIAC9Qv///////////wCDQoCAgICAgID4/wBWGw8LAkACfyAEQf//7/4DTQRAQX8gBEGAgIDyA08NARoMAgsgAJkhACAEQf//y/8DTQRAIARB//+X/wNNBEAgACAAoEQAAAAAAADwv6AgAEQAAAAAAAAAQKCjIQBBAAwCCyAARAAAAAAAAPC/oCAARAAAAAAAAPA/oKMhAEEBDAELIARB//+NgARNBEAgAEQAAAAAAAD4v6AgAEQAAAAAAAD4P6JEAAAAAAAA8D+goyEAQQIMAQtEAAAAAAAA8L8gAKMhAEEDCyEFIAAgAKIiAiACoiIBIAEgASABIAFEL2xqLES0or+iRJr93lIt3q2/oKJEbZp0r/Kws7+gokRxFiP+xnG8v6CiRMTrmJmZmcm/oKIhAyACIAEgASABIAEgAUQR2iLjOq2QP6JE6w12JEt7qT+gokRRPdCgZg2xP6CiRG4gTMXNRbc/oKJE/4MAkiRJwj+gokQNVVVVVVXVP6CiIQEgBEH//+/+A00EQCAAIAAgAyABoKKhDwsgBUEDdCIEQfDHA2orAwAgACADIAGgoiAEQZDIA2orAwChIAChoSIAmiAAIAZCAFMbIQALIAAL1AMDAn8EfAF+IAC9IgdCIIinIQECQAJ8AnwCQCABQfmE6v4DSyAHQgBZcUUEQCABQYCAwP97TwRARAAAAAAAAPD/IABEAAAAAAAA8L9hDQQaIAAgAKFEAAAAAAAAAACjDwsgAUEBdEGAgIDKB0kNBCABQcX9yv57Tw0BRAAAAAAAAAAADAILIAFB//+//wdLDQMLIABEAAAAAAAA8D+gIgO9IgdCIIinQeK+JWoiAUEUdkH/B2shAiAAIAOhRAAAAAAAAPA/oCAAIANEAAAAAAAA8L+goSABQf//v4AESxsgA6NEAAAAAAAAAAAgAUH//7+aBE0bIQUgB0L/////D4MgAUH//z9xQZ7Bmv8Daq1CIIaEv0QAAAAAAADwv6AhACACtwsiA0QAAOD+Qi7mP6IgACAAIABEAAAAAAAAAECgoyIEIAAgAEQAAAAAAADgP6KiIgYgBCAEoiIEIASiIgAgACAARJ/GeNAJmsM/okSveI4dxXHMP6CiRAT6l5mZmdk/oKIgBCAAIAAgAEREUj7fEvHCP6JE3gPLlmRGxz+gokRZkyKUJEnSP6CiRJNVVVVVVeU/oKKgoKIgA0R2PHk17znqPaIgBaCgIAahoKALDwsgAAt/AgF+An8jAEEQayIDJAAgAAJ+IAFQBEBCAAwBCyADIAEgAUI/hyIChSACfSICQgAgAnmnIgRBMWoQqQEgAykDCEKAgICAgIDAAIVBvoABIARrrUIwhnwgAUKAgICAgICAgIB/g4QhAiADKQMACzcDACAAIAI3AwggA0EQaiQAC74PAgV/D34jAEHQAmsiBSQAIARC////////P4MhCyACQv///////z+DIQogAiAEhUKAgICAgICAgIB/gyENIARCMIinQf//AXEhCAJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAhB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiDEKAgICAgIDA//8AVCAMQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQ0MAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhDSADIQEMAgsgASAMQoCAgICAgMD//wCFhFAEQCADIAJCgICAgICAwP//AIWEUARAQgAhAUKAgICAgIDg//8AIQ0MAwsgDUKAgICAgIDA//8AhCENQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAQgAhAQwCCyABIAyEUARAQoCAgICAgOD//wAgDSACIAOEUBshDUIAIQEMAgsgAiADhFAEQCANQoCAgICAgMD//wCEIQ1CACEBDAILIAxC////////P1gEQCAFQcACaiABIAogASAKIApQIgYbeSAGQQZ0rXynIgZBD2sQqQFBECAGayEGIAUpA8gCIQogBSkDwAIhAQsgAkL///////8/Vg0AIAVBsAJqIAMgCyADIAsgC1AiBxt5IAdBBnStfKciB0EPaxCpASAGIAdqQRBrIQYgBSkDuAIhCyAFKQOwAiEDCyAFQaACaiALQoCAgICAgMAAhCISQg+GIANCMYiEIgJCAEKAgICAsOa8gvUAIAJ9IgRCABCkASAFQZACakIAIAUpA6gCfUIAIARCABCkASAFQYACaiAFKQOYAkIBhiAFKQOQAkI/iIQiBEIAIAJCABCkASAFQfABaiAEQgBCACAFKQOIAn1CABCkASAFQeABaiAFKQP4AUIBhiAFKQPwAUI/iIQiBEIAIAJCABCkASAFQdABaiAEQgBCACAFKQPoAX1CABCkASAFQcABaiAFKQPYAUIBhiAFKQPQAUI/iIQiBEIAIAJCABCkASAFQbABaiAEQgBCACAFKQPIAX1CABCkASAFQaABaiACQgAgBSkDuAFCAYYgBSkDsAFCP4iEQgF9IgJCABCkASAFQZABaiADQg+GQgAgAkIAEKQBIAVB8ABqIAJCAEIAIAUpA6gBIAUpA6ABIgwgBSkDmAF8IgQgDFStfCAEQgFWrXx9QgAQpAEgBUGAAWpCASAEfUIAIAJCABCkASAGIAkgCGtqIQYCfyAFKQNwIhNCAYYiDiAFKQOIASIPQgGGIAUpA4ABQj+IhHwiEELn7AB9IhRCIIgiAiAKQoCAgICAgMAAhCIVQgGGIhZCIIgiBH4iESABQgGGIgxCIIgiCyAQIBRWrSAOIBBWrSAFKQN4QgGGIBNCP4iEIA9CP4h8fHxCAX0iE0IgiCIQfnwiDiARVK0gDiAOIBNC/////w+DIhMgAUI/iCIXIApCAYaEQv////8PgyIKfnwiDlatfCAEIBB+fCAEIBN+IhEgCiAQfnwiDyARVK1CIIYgD0IgiIR8IA4gDiAPQiCGfCIOVq18IA4gDiAUQv////8PgyIUIAp+IhEgAiALfnwiDyARVK0gDyAPIBMgDEL+////D4MiEX58Ig9WrXx8Ig5WrXwgDiAEIBR+IhggECARfnwiBCACIAp+fCIKIAsgE358IhBCIIggCiAQVq0gBCAYVK0gBCAKVq18fEIghoR8IgQgDlStfCAEIA8gAiARfiICIAsgFH58IgtCIIggAiALVq1CIIaEfCICIA9UrSACIBBCIIZ8IAJUrXx8IgIgBFStfCIEQv////////8AWARAIBYgF4QhFSAFQdAAaiACIAQgAyASEKQBIAFCMYYgBSkDWH0gBSkDUCIBQgBSrX0hCkIAIAF9IQsgBkH+/wBqDAELIAVB4ABqIARCP4YgAkIBiIQiAiAEQgGIIgQgAyASEKQBIAFCMIYgBSkDaH0gBSkDYCIMQgBSrX0hCkIAIAx9IQsgASEMIAZB//8AagsiBkH//wFOBEAgDUKAgICAgIDA//8AhCENQgAhAQwBCwJ+IAZBAEoEQCAKQgGGIAtCP4iEIQogBEL///////8/gyAGrUIwhoQhDCALQgGGDAELIAZBj39MBEBCACEBDAILIAVBQGsgAiAEQQEgBmsQ/wIgBUEwaiAMIBUgBkHwAGoQqQEgBUEgaiADIBIgBSkDQCICIAUpA0giDBCkASAFKQM4IAUpAyhCAYYgBSkDICIBQj+IhH0gBSkDMCIEIAFCAYYiAVStfSEKIAQgAX0LIQQgBUEQaiADIBJCA0IAEKQBIAUgAyASQgVCABCkASAMIAIgAiADIAJCAYMiASAEfCIDVCAKIAEgA1atfCIBIBJWIAEgElEbrXwiAlatfCIEIAIgAiAEQoCAgICAgMD//wBUIAMgBSkDEFYgASAFKQMYIgRWIAEgBFEbca18IgJWrXwiBCACIARCgICAgICAwP//AFQgAyAFKQMAViABIAUpAwgiA1YgASADURtxrXwiASACVK18IA2EIQ0LIAAgATcDACAAIA03AwggBUHQAmokAAvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEBBfyEEIAAgAlQgASADUyABIANRGw0BIAAgAoUgASADhYRCAFIPC0F/IQQgACACViABIANVIAEgA1EbDQAgACAChSABIAOFhEIAUiEECyAECzUAIAAtABFBkAFxBEAgABCHBQsgACgCGARAIAAoAhQgACgCIBBeIABBADYCGAsgAEEANgIIC5gEAwN8An4CfwJ8AkAgAL0iBEI0iKdB/w9xIgZByQdrQT9JBEAgBiEHDAELIAZByAdNBEAgAEQAAAAAAADwP6APCyAGQYkISQ0ARAAAAAAAAAAAIARCgICAgICAgHhRDQEaIAZB/w9GBEAgAEQAAAAAAADwP6APCyAEQgBTBEBEAAAAAAAAABAQ/wkPC0QAAAAAAAAAcBD/CQ8LQYC3AysDACAAokGItwMrAwAiAaAiAiABoSIBQZi3AysDAKIgAUGQtwMrAwCiIACgoCIBIAGiIgAgAKIgAUG4twMrAwCiQbC3AysDAKCiIAAgAUGotwMrAwCiQaC3AysDAKCiIAK9IgWnQQR0QfAPcSIGQfC3A2orAwAgAaCgoCEAIAZB+LcDaikDACAFQi2GfCEEIAdFBEACfCAFQoCAgIAIg1AEQCAEQoCAgICAgICIP32/IgEgAKIgAaBEAAAAAAAAAH+iDAELIwBBEGshByAEQoCAgICAgIDwP3y/IgIgAKIiASACoCIDRAAAAAAAAPA/YwR8IAdCgICAgICAgAg3AwggByAHKwMIRAAAAAAAABAAojkDCEQAAAAAAAAAACADRAAAAAAAAPA/oCIAIAEgAiADoaAgA0QAAAAAAADwPyAAoaCgoEQAAAAA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AEcLC54BAQJ/IAAtABEiAUEGRgRAIAAoAiwaDwsgAUECTwR/AkAgACgC6AEEQCAAQQJBfxCBCSIBIAAgAC0AFEEAEPsDIAEbIQIMAQsgACgCRCgCAEEAIAFBAkcbRQRAIABBAEEAEPsDIQIgAC0ADyABQQNJcg0BIABBBjoAESAAQQQ2AiwgABD1BA8LIABBABCACSECCyAAIAIQ/AMFQQALGguYAQECfyAALQAIBEAgACgCACIBKALcAUUEQCABIAAoAgwiATYC3AEgARA6GiAAQQA2AgwLIABBADoACAsgACgCDBCYARogACICKAIcIQADQCAABEAgACgCCCEBIAAoAgwQIyAAECMgASEADAELCyACQQA2AhwgAigCLBAjIAIoAlwQuQogAigCEBCOAiACQQRqQQBB3AAQKBoLcQEBfyAAKALcARCYARoDQCABQShGRQRAIAAgAUECdGooAjwQmAEaIAFBAWohAQwBCwsgACgC+AEQIyAAKALgARAjIAAoAuQBECMgACgCKBAjIAAoAiwQIyAAKAIkIgEgASgCACgCCBEBABogABAjQQALiwEBAn8jAEEQayIEJAAgACgCBCEDIAAQTAJAIAFFBEBBACECIANBAEEAENkCIgFFDQELIAAgASACEMAKGgsgAC0ACEECRgRAIAMoAgAQgAcgA0EBIARBDGpBABCsAUUEQCADIAQoAgwiARCzCiABEKMECyADQQE6ABQgAxDMCgsgABDJCiAEQRBqJAALKAAgAC0ABUUEQCAAKAIoECMgACgCNBD/BCAAQQA2AjQLIABBADYCKAunBgIKfwJ+IwBBEGsiByQAAn8gAywAACILQQBIBEAgAyAHQQxqEHMaIAcoAgwMAQsgC0H/AXELIQ8gASEOIAIhDSAFIQsgBiEMIwBBEGsiCSQAQYsCIQgCQCADIAlBCGoiARCEAyADaiICIAEQhAMgAmoiCiADIARqIhBLDQBBACECQQAhBEEAIQEDQAJAAkAgCiAQSQRAIAsgDHJFBEBBACEIDAILQQAhCCAJQQA2AgACQAJ/IARBAXEEQAJAIAosAAAiBEEASARAIAogCRBzIQQgCSgCACEIDAELIAkgBEH/AXEiCDYCAEEBIQQLIAEgCEgNAiAEIApqIQoLIAosAAAiAUEASARAIAogCUEEahBzDAELIAkgAUH/AXE2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EWtBFG1BAWo2AiBB5AAhFgyZAQsgDCAFKAIMIgFBKGxqIQsgDCAFKAIEIg5BKGxqIgYvARAiAiAMIAUoAggiCUEobGoiAy8BEHJBAXEEQCALEGIMnQELAkACQCACQRJxRQRAIAYgEkEAEKYDRQ0BDKEBCyACQYAIcUUNASAGEOcBDaABCyAGLwEQQX1xIQILAkACQCADLwEQIg1BEnFFBEAgAyASQQAQpgNFDQEMoQELIA1BgAhxRQ0BIAMQ5wENoAELIAMvARBBfXEhDQsgDCAJQShsaiIPKAIMIAwgDkEobGoiECgCDGoiCiAHKAJ4Sg2NASALIApBAmogASAJRiILEL8DDZ4BIAwgAUEobGoiASABLwEQQcDkA3FBAnI7ARAgC0UEQCABKAIIIAwgCUEobGooAgggDygCDBAlGiADIA07ARALIAEoAgggDygCDGogDCAOQShsaigCCCAQKAIMECUaIAYgAjsBECAKQX5xIAogEkEBSxsiAiABKAIIakEAOgAAIAIgASgCCGpBADoAASABIAEvARBBgARyOwEQIAEgEjoAEiABIAI2AgwMnAELIAwgBSgCBEEobGoiARDcCCEDIAwgBSgCCEEobGoiAhDcCCEKIAwgBSgCDCIJQShsaiEGAkACQCADIApxQQRxBEAgASkDACEqIAggAikDACIrNwOoAgJAAkACQAJAAkACQCAFLQAAQeoAaw4EAAECAwQLIAhBqAJqICoQ4QRFDQQMBgsCfyAIQagCaiEDAn8gKkKAgICAgICAgIB/UQRAQQEgAykDACIqQgBZDQEaIAMgKkKAgICAgICAgIB/hTcDAEEADAILIANCACAqfRDhBAsLRQ0DDAULIAgpA6gCISsCQAJAICpCAFUEQEEBIQMgK0L///////////8AICqAVQ0CICtCAEKAgICAgICAgIB/ICqAfVkNAQwCCyAqQgBZDQAgK0IAVQRAQQEhA0IAQoCAgICAgICAgH8gK4B9ICpYDQEMAgsgK0IAWQ0AQQEhAyAqQoCAgICAgICAgH9RICtCgICAgICAgICAf1FyDQFCACArfUL///////////8AQgAgKn2AVg0BCyAIICogK343A6gCQQAhAwsgA0UNAgwECyAqUA0EICpCf1EgK0KAgICAgICAgIB/UXENAyAIICsgKn83A6gCDAELICpQDQMg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bkEBaiADRwR/IBsgAyAKQQxqQQIQpwEiAkUEQCABIAMgCigCDCgCBEEAEM0LIQIgCigCDBCmAQsgASgCEAUgAwtBAWo2AhAgGUEBaiEZDAELCwJAAkAgAkHlAEYNACACDQEgASANNgIkIAEgDSABKAIQIgJrQQFqNgIgIAIgDUsNAEEAIQIgASgCKA0BIAEgASgCGBCOARCACyIDKAIANgIsIAMgATYCACABQQE2AigMAQsCQCANDQBBASENIAEoAgQiAhBMIAIoAgQiAkEANgIwIAIQoAciAkHlAEYNACACDQELIAEoAgRBASABKAIIQQFqELUEIgINACABKAIAIgIEQCACELICCyAdQQVGBEAgASgCBEECEMILIgINAQsCQCAVIBpIBEBBkPkDKAIAIQIgASgCBCgCBCgCJCEDIBMoAkAhGSATIApBDGoQtQcgDSAaIBVtIh1qQQFrIB1tIh0gHSACIANuQQFqRmshAyANrCEqIAooAgwhDUEAIQIDQCACIAMgDUtyRQRAQQAhAgJAIANBkPkDKAIAIAEoAgQoAgQoAiRuQQFqRg0AIBMgAyAKQQhqQQAQpwEiAg0AIAooAggQXSECIAooAggQpgELIANBAWohAwwBCwsgKiAVrCIsfiErIAJFBEAgE0EAQQEQsQchAgsgK0GQ+QMoAgAiAyAaaqwiKiAqICtVGyEyIAMgFWqsISoDQCACICogMllyRQRAIApBADYCCCAbICogLH+nQQFqIApBCGpBABCnASICRQRAIBkgCigCCCgCBCAVICoQeiECCyAKKAIIEKYBICogLHwhKgwBCwsgAg0BIwBBEGsiAiQAAkAgGSACQQhqELwBIgMNAEEAIQMgAikDCCArVw0AIBkgKxCSAiEDCyACQRBqJAAgAyICDQEgE0EAEK4HIQIMAQsgEyAVIBptIA1sEKYLIBNBAEEAELEHIQILIAINACABKAIEQQAQrwQiAkHlACACGyECCyAcRQRAIAEoAhhBABCxBRogASgCGEEAEK8EGgsgAUEHIAIgAkGKGEYbNgIcCyAKQRBqJAAgAQR/IAEoAhQhAyABKAIYEEwgASgCAARAIAEoAhgiAiACKAIQQQFrNgIQCyABKAIoBEAgASgCGBCOARCACyEKA0AgCiICKAIAIg1BLGohCiABIA1HDQALIAIgASgCLDYCAAsg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QCAGQQFqIANBIGoQcxogAygCIAwBCyAEQf8BcQsiBEUNAQtB/////wchBQJAIAMoAiQiBy0AAA4CAwACCwJ/IAcsAAEiBUEASARAIAdBAWogA0EcahBzGiADKAIcDAELIAVB/wFxCyIFDQILQYsCIQUMBgtBACEFCyAEIAVHDQIgA0IANwMQIANCADcDCCADQgA3AwAgAyAHIANBLGogBBD5BiIEajYCJCADIAQgBmo2AiggA0EoaiADQRBqEMQDIANBJGogA0EIahDEAyADKQMQIghCAlkEQCADKQMIIglCAVUNAgsgAygCJCEEIAMoAighBgsgAyADKAIsIgdBAWo2AixBACEFIAdBADoAACAAIAMoAiw2AgAgASAGQQFqNgIAIAIgBEEBajYCAAwDCwNAIANBLGogAyAIIAkgCCAJUxsQqgogAyADKQMAQgJ9NwMAAkAgCCAJUQRAIANBKGogA0EQahCYBSADQSRqIANBCGoQmAUMAQsgCCAJUwRAIANBKGogA0EQahCYBQwBCyADQSRqIANBCGoQmAULIAMpAxAiCEL///////////8AUiADKQMIIglC////////////AFJyDQALDAELIAQgBUgEQCADIANBLGoiBSAEEPkGIAZqNgIoIAUgA0EoahCwAgwBCyADIANBLGoiBCAFEPkGIAdqNgIkIAQgA0EkahCwAgsgAygCKCEGDAELCyADQTBqJAAgBQvxAwIDfwJ+IwBBMGsiByQAIAdCADcDKCAHQgA3AyAgB0IANwMYIAcgATYCFCAHIAM2AhAgB0EANgIIIAVBADYCACAGQQA2AgACQCACrCAErHxCEXwQSyIIRQRAQQchAQwBCyAHIAg2AgwgB0EUaiABIAJqIgJBACAHQShqEOkBIAdBEGogAyAEaiIDQQAgB0EgahDpAQJAAkADQCAHKAIUIgEgBygCECIEckUNAQJAQQBBAUF/QQAgBykDKCIKIAcpAyAiC1IbIAogC1UbIglrIAkgABsiCSAERSABRXJyRQRAIAdBDGoiASAAIAdBGGogB0EIaiAKEJkFIAEgB0EUaiAHQRBqEKsKIgENASAHQRRqIAIgACAHQShqEOkBIAdBEGogAyAAIAdBIGoQ6QEMAgtBACAEIAFBAEcgCUEASHEbRQRAIAdBDGoiASAAIAdBGGogB0EIaiAKEJkF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AzYCHEEBIQQLIAEgAzYCACACIARB9sAAQQAgAxsgARDeASACIAEoAhwQJyACIAQQogEhAiABQSBqJAAgAiEBIAYQIyAAIAFFOgDtAUEACyEAIAVBEGokACAAC5oBAQV/AkADQCAARQ0BIAAQTCAAKAIEQQhqIQQDQCAEKAIAIgMEQAJAAkAgAkUNACADLQABQQFxDQACQCADLQAADgMAAgACCyADEO4IIgRFDQEgByAEIAUbIQdBACECIAQhAUEBIQUMBAsgAxDkBCADIAE2AgQgA0EEOgAACyADEKwDIANBGGohBAwBCwsLIAdBACAFGyEGCyAGC7ICAgN/AX4gAC8BBEEBTQRAIAAoAgAiASABKAI4QQFqNgI4An8gACgCDBBDQeQARwRAIABBAToABiAAKAIMEDoMAQsgACAAKAIMQQAQmQE3AyBBAAshACABIAEoAjhBAWs2AjggAA8LIwBBEGsiASQAIAFBADYCDAJAAkAgACgCECICBEADQCAALQAHRQRAIAAoAgwQOhoLIAAgAiABQQxqEKsBIAItACAhAyAAQQE2AlggAEEBOgAHIAAgAzoABiAAIAIpAxg3AyAgA0UEQCAAIAFBDGoQ+AYNAQsLIAEoAgwiAg0CDAELIABBAToABgsgACkDICEEAkAgAC0ANEUEQEEAIQIgBCAAKQNQVQ0BDAILQQAhAiAEIAApA0hZDQELIABBAToABgsgAUEQaiQAIAILpwEBBH8jAEEQayIEJAACQCAAKAIMDQAgAEEMaiEBAkAgACgCACICKALcASIDBEAgASADNgIAIAJBADYC3AEMAQsgBCACKALgATYCAEGdowEgBBBKIgNFBEBBByEBDAILIAIgAigCOEEBajYCOCACKAIMIANBASABEMYGIQEgAiACKAI4QQFrNgI4IAMQIyABDQELIABBAToACEEAIQELIARBEGokACABCxwAAkAgAEUNACAAEPkCQQFHDQAgABBfIQELIAELhyECGX8BfiMAQYABayIIJAAgBCgCAC0AAyEXIAhBADYCbCAIQQA2AmggCEEANgJkIAQoAgQQPSEbIAQoAggQPSEMIAggA0ECdEEIayIJrSIgEEsiCjYCcAJAAkAgCkUNACAKQQAgCRAoIRMgIBBLIhVFDQAgG0EBaiEcIAxBAWohGCAVQQAgCRAoIRkgF0E0RyEa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QCACQf8DQfz6AygCABEAACICQQBIBEBBBSECQYSoBCgCACIBQRRGDQEgARD2BCIDQQVGDQEgACABEJsBIAMPCyAAIAE6ABALIAILGAAgAEEAEKIJGiAAKAIYECMgABC4BkEACwsAIAFBADYCAEEACwkAIAAQuAZBAAuPAQECfwJ/QbzwAy4BACIARQRAQYSoBEEcNgIAQX8MAQsCQAJAIABBfkoNAEHpoAwhAQJAAkACQAJAAkACQAJAIABB/wFxQQFrDgsIAAECAwQEBQUGAwcLQYCACAwIC0GAgAIMBwtBgIAEDAYLQf////8HDAULQQEMBAsQEEEQdgwDC0EADAILIAAhAQsgAQsLrwEBA38jAEGgBGsiAyQAIAMgADYCAEGABCADQRBqQfbAACADEMQBIgIQPSEAAkADQCAAQQBKBEAgACACaiEEIABBAWshACAELQAAQS9HDQEMAgsLIAItAABBL0cEQCACQS46AAALIAJBAWohBAtBACEAIARBADoAACABIAJBAEEAEKcDIgE2AgAgAUEASARAQZiyAhDiAUHZCCACQZiyAhDCASEACyADQaAEaiQAIAALdQEBfyMAQRBrIgMkACADIAI2AgAjAEEQayICJAAgAgJ+IAFBwABxRQRAQgAgAUGAgIQCcUGAgIQCRw0BGgsgAiADQQRqNgIMIAM1AgALNwMAQZx/IAAgAUGAgAJyIAIQFRB3IQAgAkEQaiQAIANBEGokACAACwQAQQALCwAgA0EANgIAQQALBgAgABBQC4YBAQV/AkAgACgCJCICRQ0AIAIoAgAiA0EgaiEEA0AgBCIFKAIAIgZBBGohBCACIAZHDQALIAUgAigCBDYCACACECMgAEEANgIkIAMgAygCHEEBayIENgIcIAQNAAJAIAFFDQAgAygCDEEASA0AIAMoAghB5PoDKAIAEQEAGgsgABClCQtBAAuPBAEIf0GKKCEEAkAgACgCJCIFRQ0AIAUoAgAiBkUNAEEBIAEgAmoiBHRBASABdCIKayEHIAZBJGohBgJAIANBAXEEQCAHIAUvAQoiCCAFLwEMIglycUUNASABIAQgASAEShshCyABIQRBASEDA0AgBCALRkUEQEEAIAMgBiAEQQJ0aigCACAIIAR2QQFxShshAyAEQQFqIQQMAQsLAkAgAwRAIABBAiABQfgAaiACEP8D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AwRAIAAtADQNASAAKAIAKAIIECNB/ZUBQQAQSiEBIAAoAgAgATYCCEEBQQcgARshAgwBCyAALQAVBEACfyAFIAUoAgBBAnStEEsiBjYCECAGRQRAIAVBAToAFEEHDAELIAVBAEEAEOQGQQALDQELAkAgAUEDRgRAQQAhAiADQQA2AgwgBCgCBBArIgFFDQMgACAEKAIEEGAiAqxCAXwQSyIENgIcIARFBEBBByECDAQLIAQgASACQQFqECUaAkACQCABLQAAQSRHBEAgAyABNgIMDAELQQAhAiAFQQAgACgCHEEBakEAIANBDGoQkwchBCADKAIMIgFFDQELIAAoAgAoAggQIyABEPAKIQEgACgCACABNgIIIAAQkQVBAUEHIAAoAgAoAggbIQIMBAsgBEUNAyAAKAIoIQIMAQsgACgCKCICIQQLIAAgBCACa0EMbSICNgIIIAAgAjYCDCAAIAQtAAAiAToAFCABQQZPBEBBACECIARBADYCCCAAIAAoAgwiBUEBaiIBIAQoAgRqNgIQIAAtABUEQCAAIAAoAigiBCAAKAIwIAVBAnRqKAIAQQxsai0AADoAFCAFRQ0DIAQgBUEBayIBQQxsai0AAUHAAHFFDQMgACABNgIMDAMLIAAgATYCDAwCCyAAIAJBAWo2AhBBACECDAELIAAQkQULIANBEGokACACCw0AIAAQkQUgABAjQQALkAIBB38jAEEQayIEQn83AgggASgCACIAQQAgAEEAShshByABKAIEIQADQCADIAdGRQRAAkAgACgCACIGQQhIDQBBASAGQQhrIgh0IQYgAC0ABUUEQCACIAZyIQIMAQsgAC0ABEECRw0AIARBCGogCEECdGogAzYCACAFIAZyIQULIABBDGohACADQQFqIQMMAQsLQRMhACACIAVBf3NxRQRAQQAhACABAn9BACAEKAIIIgJBAEgNABogAUKAgICAgICA+D83AyggASgCECIFIAJBA3RqIgJBAToABCACQQE2AgBBASAEKAIMIgRBAEgNABogBSAEQQN0aiIDQQE6AAQgA0ECNgIAQQMLNgIUCyAAC0AAIABBzMMBEIgEIgIEfyACBSAEQQwQVyIBNgIAIAFFBEBBBw8LIAFCADcCACABQQA2AgggAEECQQAQzQlBAAsLDgAgASAANAIMNwMAQQALYgACQAJAAkACQAJAAkAgAg4EAAECAwQLIAEgACgCBEF/QX8QPwwECyABIAAoAhAgACgCFEF/ED8MAwsgASAAKAIYEIABDAILIAEgACgCHBCAAQwBCyABIAAoAiAQgAELQQALCAAgACgCEEULnQEBAX8gACgCACEDIAAQ6AZBASECAkAgAUEBRw0AIAQoAgAQKyEFIAAgBCgCABBgIgFBAWqsEEsiAjYCBCACRQRAQQcPCyABQQBKBH8gAiAFIAEQJRogACgCBAUgAgsgAWpBADoAACADKAIQIAAoAgQgASAAQQhqIAMoAgwoAgwRBgAiAg0AIAAoAgggAygCEDYCACAAEIsKIQILIAILDQAgABDoBiAAECNBAAsLACAAIAFBJBDSBgsZACAAKAIQIAAoAgwoAggRAQAaIAAQI0EAC5EBAQJ/QQAhACABKAIAIgJBACACQQBKGyEDAkADQCAAIANHBEACQCABKAIEIABBDGxqIgItAAVFDQAgAigCAA0AIAItAARBAkcNACABQQE2AhQgASgCECAAQQN0aiIAQQE6AAQgAEEBNgIAIAFCgICAgICAgPg/NwMoDAMLIABBAWohAAwBCwsgAUEANgIUC0EAC4cEAQd/IwBBEGsiBiQAIAZBADYCDCAGQQA2AgggBkEANgIEIABB2L4BEIgEIgBFBEACQAJAAkACfyADQQxqIQlBACEDQQAhAAJAIAJBA2siBwRAIAdBACAHQQBKGyEKA0AgACAKRwRAIAkgAEECdGooAgAQPSADakEBaiEDIABBAWohAAwBCwsgBiADIAdBAnQiAGqtEEsiBzYCBEEHIAdFDQIaIAAgB2ohA0EAIQADQCAAIApGDQIgCSAAQQJ0IghqIgsoAgAQPSEMIAcgCGogAzYCACADIAsoAgAgDEEBaiIDECUiCBDJAyAAQQFqIQAgAyAIaiEDDAALAAsgBkEANgIEC0EACyIADQAgAkEETgR/IAYoAgQoAgAFQdvnAAshACMAQRBrIgMkAEEBIQcCQCABIAAgABA9QQFqEJ4FIgFFBEAgAyAANgIAIAVBvDggAxDOAQwBCyAGIAE2AgxBACEHCyADQRBqJAAgByIADQAgAkEEa0EAIAJBBEoiABsgBigCBEEEakEAIAAbIAZBCGogBigCDCICKAIEEQQAIgANAEEUEFciAQ0BQQchAAsgBigCCCIBRQ0BIAEgBigCDCgCCBEBABoMAQsgAUIANwIAIAEgAjYCDEEAIQAgAUEANgIIIAEgBigCCDYCECAEIAE2AgALIAYoAgQQIwsgBkEQaiQAIAALEQAgAiABQQR0aiAANgIAQQALhgEBBH8jAEEQayIDJAAgASACKAIEIgRsQQNsIQZBACEBA0AgASAETiAFckUEQCACKAIAIAAgASADQQxqEJMFIQUgAygCDAR/IANBDGoQjQoFQQALIQQgAigCHCABQQNsIAZqQQJ0aiAENgIAIAFBAWohASACKAIEIQQMAQsLIANBEGokACAFC/wEAgh/An4gAigCHCABIAIoAgRsQQxsaiEHQQAhASACKAIAIgMoAgAhCQJAAkAgAC0AIkUNACAAKAIIKAIAQQFGDQADQCABIAkoAhhODQIgAUEMbCAHaiIAIAMoAkAiAjYCCCAAIAI2AgQgAUEBaiEBDAALAAsjAEEQayIFJAAgBUEANgIMAkAgACICKAIoDQAgAykDICELIAMoAgAhCANAIAIiBCgCCCICBEAgAigCAEEBRg0BCwsgBC0AICEKIAQpAxghDCAEIQIDQCACBEAgAigCAEEFRwR/IAIoAhAFIAILIAgoAhhBDGytEEsiBjYCKCAGBEAgBkEAIAgoAhhBDGwQKBogAigCDCECDAIFQQchBgwDCwALCyADIAQgBUEMahCSBQNAIAUoAgwiBiADLQAGckUEQANAIAMtAAdFBEAgAygCDBA6GgsgAyAEIAVBDGoQqwEgBC0AICECIANBATYCWCADQQE6AAcgAyACOgAGIAMgBCkDGDcDIAJAIAINACAEKAIAQQFHDQAgAyAFQQxqEPgGDQELCyAFKAIMDQEgAy0ABg0BIAQgCCgCGBCMCgwBCwsgAyALNwMgIANBADoABiAKBEAgBCAKOgAgDAELIAMgBCAFQQxqEJIFA0AgAyAEIAVBDGoQqwECfyAELQAgRQRAIAUoAgwMAQsgBUGLAjYCDEGLAgshBiAEKQMYIAxRDQEgBkUNAAsLIAVBEGokACAGIgQNAEEAIQQDQCABIAkoAhhODQEgByABQQxsIgJBBGoiA2ogAyAAKAIoIgVqKAIANgIAIAcgAkEIaiICaiACIAVqKAIANgIAIAFBAWohAQwACwALIAQLSQEBfwJAIAAgACAAQQRrKAIAayIBQRRqRgRAIAFBADoAAQwBCyABQQA6AAILAkAgAS0AAA0AIAEtAAENACABLQACDQAgARAjCwsYACACIAIoAgBBAWo2AgAgACABNgIkQQALuAECA34DfyMAQRBrIgEkACABQgA3AwAgAigCACAAIAIoAgQgAUEMahCTBSEIIAAoAhQoAkAhACABKAIMBEAgAUEMaiABEKAEIAEoAgwhByABKQMAIQQLIABBACAAQQBKG60hBQNAIAMgBVFFBEAgAiACKAIIIgZBAWo2AgggAigCGCAGQRhsaiIGIAQ3AwggBiAHNgIAIAYgACADp0F/c2qsNwMQIANCAXwhAwwBCwsgAUEQaiQAIAgLKAAgACgCFCEAIAIgAigCBEEBajYCBCACIAIoAgggACgCQGo2AghBAAuqAQIDfwF+IwBBEGsiAyQAIAIoAhAiBCABQShsaiIFIAAoAhQoAkA2AgAgAigCACAAIAIoAgQgA0EMahCTBSECAkAgAygCDCIARQ0AIANCADcDACAFIAA2AgQgA0EMaiADEKAEIAMpAwAiBkIAUwRAQYsCIQIMAQsgBCABQShsaiIAIAMoAgwiATYCICAAIAE2AhAgACAGNwMYIAAgBjcDCAsgA0EQaiQAIAILjxICF38CfiMAQRBrIhEkACAAQcvKACACKAIAIBFBDGoQlQVFBEAgAUECTgRAIAIoAgQQKyEJCwJAIBEoAgwiBSgCEEUEQCAAQa3lAUEAQQAQvgMMAQsgBSgCACEVIAAhEiAJQYcMIAkbIQ0jAEEwayIIJAAgBSgCACEBIAhCADcDICAIQgA3AyggCEIANwMYIAggBTYCECAIQQA2AgwgCCABKAIYNgIUAkACQAJAAkACfwJAIAUoAlwiAARAIAAoAgwgDRCVAUUEQEEBIQkMAgsgABC5CiAFQQA2AlwLIAUoAhAhAiMAQRBrIgAkACAAQQA2AgwgAkHuACAAQQxqEIADGiAAKAIMIQIgAEEQaiQAIAUgAjYCGCAIIAI2AhhBACEJQQAhAAJAA0AgACANaiIGLQAAIgRFDQEgCEEANgIIIAhBCGohCkEAIQsjAEEQayICJAACQAJAAkAgBEEYdEEYdSIHQewAayIEQQ1LDQBBASAEdEGQ4QBxDQIgBARAIARBAkcNASABLQDsAUUNAgwDCyABLQDuAQ0CDAELAkAgB0HhAGsOAwACAgELIAEtAOwBDQELIAIgBzYCACAKQYuHASACEM4BQQEhCwsgAkEQaiQAIAtFBEAgAEEBaiEAIAhBEGogBiwAABDsBiAJaiEJDAELCyASIAgoAggiAEF/EGQgABAjDAYLQQEhCyAJrUIDhiIaIA0QPSIBrXxCGXwQ/AEiAARAIABBFDYCECAAIAlBAnQiAmogAkEYajYCFCAAIBqnIABqQRhqIgI2AgwgACAJNgIEIAIgDSABQQFqECUaIABBAToAAAsgBUEBNgJYIAUgADYCXEEAIgkgAEUNARoLQQAhAgJAIAAiAS0AAUUEQCABQQE6AAEgAUEUaiEAQe8AIQIMAQsgAS0AAkUEQCABQQE6AAIgASgCBEECdCABakEYaiEAQe8AIQIMAQsgASgCBEECdK0QSyIARQRAQQAhAAwBC0EDIQIgASgCCEUNACAAIAFBFGogASgCBEECdBAlGgsgCCAANgIMIAIiAQ0BQQALIQlBByEADAELIAggCCgCDCIWNgIsIAggBSgCGDYCGAJ/IwBBIGsiAiQAIAUoAgAhDyACQQA2AhggCEEQaiIEQRBqIRcDQAJAAkACQAJAAkACQAJAAkAgAw0AIA0gE2oiFC0AACIARQ0AIAQgADoAGAJAAkACQAJAAkAgFCwAACIAQewAaw4ICwcDBwEHBwoACyAAQeEAaw4DAwgBBQtBACEDIAtFDQogBCgCHCAEKAIINgIADAoLQQAhAyALRQ0JIAQoAhwgBCgCBDYCAAwJCyALRQ0EIAJCADcDECACIA8gAkEYaiACQRBqQQBBABDrBiIDNgIcIAQoAhwgAikDED4CAAwICyALRQ0DIAIgDyACQRhqIAJBEGogAkEMaiACQQhqEOsGIgM2AhwgAw0HIAIpAxAiGkICfyEbQQAhA0EAIQADQCAAIAQoAgRODQggAiACKAIMIAIQpQEgAigCDGoiBzYCDCACKAIIIAdJBEBBiwIhAyACQYsCNgIcDAkFIAQoAhwgAEECdGogGyACNQIAfCAafz4CACAAQQFqIQAMAQsACwALIAIoAhgQOhogAkEgaiQAIAMMCAsgAEH5AEYNAgsgBSgCECEAIAIgBUEAQQAQlAUiAzYCHCADDQQgCwRAIAUoAhwEQCACIA8gAkEYaiAXQQBBABDrBiIDNgIcIAMNBgsgAiAAQfAAIAQQgAM2AhwgBSACQRxqEPgGGiACKAIcIgMNBQsgAEHxACAEEIADGgtBACEDDAMLIAQoAhxBACAEIAAQ7AZBAnQQKBogAiAFKAIQIAQQjwoiAzYCHAwCCyACIAVBAEEAEJQFIgM2AhwgAw0BIAICf0EAIQBBACEGQQAhDkEHIAUoAhhBBHStEPwBIgpFDQAaIAUoAhBB8gAgChCAAxogBCgCCCIDQQAgA0EAShshAwNAIAMgBkYEQANAAkBBACEMQQAhBiAEKAIEIA5MBEBBACEADAELA0ACQCAEKAIIIAZMBEBBACEQDAELIAUgCiAGQQR0aiIDKAIAIA4gA0EIahCTBSIADQIgAygCCARAIAMgAygCBDYCDCADEI4KGiADKAIIRQRAQYsCIQAMBAsgDEEBaiEMCyAGQQFqIQYMAQsLA0ACQCAMQQBKBEBBACEGIAQoAggiAEEAIABBAEobIRhBACEDQQAhAANAIAYgGEYNAgJAIAogBkEEdCIZaiIHKAIIRQRAQQAhAAwBCwJAIAMEQCAKIBlqKAIMIAMoAgxODQELIAchAwsCfyAABEBBASAHKAIMIAdBBGsoAgBHDQEaCyAAQQFqCyIAIBAgACAQShshEAsgBkEBaiEGDAALAAsgBCgCHCAOQQJ0aiAQNgIAIA5BAWohDgwDCyAMIAMQjgpBAEdrIQwMAAsACwsFIAogBkEEdGoiByAAIAcoAgAoAhQoAkBrIgA2AgQgBkEBaiEGDAELCyAKECMgAAsiAzYCHAwBCyACQQA2AgAgBSkDICEaIwBBEGsiAyQAIANBADYCDCAPQRUgA0EMakEAEFIhByADKAIMIQACQCAHDQAgAEEBIBoQWBogABBDQeQARgRAQQAhByAAQQAQ+wJBBEYNAQsgABA6IgBBiwIgABshB0EAIQALIAIgADYCACADQRBqJAAgAiAHIgM2AhwgAigCACEHAkAgAw0AQQAhAyAHQQAQjAIiBiAHQQAQyQFqIQpBACEAA38gACAEKAIETg0BIAogBiAKIAJBEGoQmgUgBmoiBkkEfyACQYsCNgIcQYsCBSAEKAIcIABBAnRqIAIpAxA+AgAgAEEBaiEADAELCyEDCyAHEDoaCyAEIAQoAhwgBCAULAAAEOwGQQJ0ajYCHCATQQFqIRMMAAsACyEAIAlFBEAgBSgCXCICQQE2AgggAigCBEECdCIEIAJqQRhqIAJBFGogBBAlGgsgAEUNASABIQkLIBIgABDYASAJRQ0BIAgoAgwgCREDAAwBCyASIBYgBSgCXCgCBEECdCABEL4DCyAIQTBqJAAgFRCTAgsLIBFBEGokAAvgAQECfyMAQRBrIgEkAAJAIABB3N4AIAIoAgAgAUEMahCVBQ0AAkAgASgCDCgCACICKAIMQfywAUEAQQBBABD2ASIDDQAgAkEBEJ4KIgNB5QBHQQAgAxtFBEAgAigCDEGcsQFBAEEAQQAQ9gEiBCADIAQbIQMMAQsgAigCDEGLsQFBAEEAQQAQ9gEaIAIoAgxBnLEBQQBBAEEAEPYBGgsgAhCTAgJAIAMiAkHlAEcEQCACDQEgAEH08ABBf0EAED8MAgsgAEHN1wBBf0EAED8MAQsgACACENgBCyABQRBqJAALhAcCDX8BfiMAQRBrIgEkAAJAIABBoR4gAigCACABQQxqEJUFDQAgACABKAIMIgYQnQUNACAAIQkjAEGgAWsiAyQAIAYoAgAiBygCJCgCACEKIANBADYCmAEgA0IANwOQAQJAIAYoAhBFBEAgCUGt5QFBAEEAED8MAQsgA0IANwOIASADQgA3A4ABIANCADcDeCADQgA3A3ACQCAGQQAgA0GcAWoQlAUiBA0AIAMgAygCnAFBGGytEPwBIgA2AogBAkAgAEUNACAGKQMgIRAgAyAGNgJwIAMgEDcDgAFBACEAA0AgBygCGCAATARAQQAhBAwDCyADQQA2AmQgA0EANgJgIANBADYCXCADQQA2AnggAyAANgJ0IANBADYCWCAGKAIQQesAIANB8ABqEIADIgQNAiAGKAIMIABBAWoiAhCLAiEEIAYoAgwgAhDJASEFAkAgBEUEQCAGKAIMIAIQ+wJBBUcNAwwBCyAHKAIkIAYoAhQgBCAFIANB7ABqENgCIgQNAyADKAJsIgsgA0HoAGogA0HkAGogA0HgAGogA0HcAGogA0HYAGogCigCFBEJACEEA0AgAygCnAEiBUEAIAVBAEobIQ0gAygCiAEhDgJAA0AgBA0BQQAhBEH/////ByEIQQAhBQNAIAQgDUcEQCAOIARBGGxqIgwoAgAEQCAMKQMIIAwpAxB9IhCnIAggECAIrFMiDxshCCAMIAUgDxshBQsgBEEBaiEEDAELC0HlACEEIAVFDQALAkAgBSgCAC0AAEEBTQRAIAVBADYCAAwBCyAFIAVBCGoQoAQLQQAhBCADKAJsIQsDQAJAIAQNACADKAJYIAhODQAgCyADQegAaiADQeQAaiADQeAAaiADQdwAaiADQdgAaiAKKAIUEQkAIQQMAQsLIARFBEAgAyAANgIAIAMgAygCYCIENgIIIAMgAygCXCAEazYCDCADIAUgAygCiAFrQRhtNgIEIANBkAFqQcAAIANBEGpB8+ABIAMQxAFBfxCvAiEEDAILIARB5QBHDQFB5QBBiwIgBygCKBshBAwBCwsgCyAKKAIQEQEAGiAEQeUARw0DCyACIQAMAAsAC0EHIQQLIAMoAogBECMgBxCTAiAEBEAgCSAEENgBIAMoApABECMMAQsgCSADKAKQASADKAKUAUEBa0EDED8LIANBoAFqJAALIAFBEGokAAvREwIefwh+IwBBEGsiFiQAAkAgAUEHTgRAIABB8cgBQX8QZAwBCyAAQcwYIAIoAgAgFkEMahCVBQ0AQQ8hC0F/IRFBnqQBIRVBpKQBIRdBmqQBIRgCQAJAAkACQAJAAkAgAUECaw4FBAMCAQAFCyACKAIUEGkhCwsgAigCEBBpIRELIAIoAgwQKyEVCyACKAIIECshFwsgAigCBBArIRgLIBVFIBdFckEBIBgbBEAgABBnDAELIAtFBEAgAEGt5QFBf0EAED8MAQsgACAWKAIMIgwQnQUNACMAQaABayIIJAAgDCgCACEaIAhBADYCmAEgCEIANwOQAQJAIAwoAhBFBEAgAEGt5QFBAEEAED8MAQtBACALQUAgC0FAShsiAUHAACABQcAASBsiFGshBkEBIQ8DQCAIQgA3AyggBiECIBRBAE4EQCAPIBRqQQFrIA9tIQILQgAhI0EAIRACQAJAA0AgDyAQRwRAIAhBMGogEEEYbGoiCkIANwMAIApCADcDECAKQgA3AwhBACEBQX8hCwNAIBooAhggAUoEQCAIQgA3AyAgCEIANwMYIAhCADcDECAIQQA2AgwCQCABIBFHIBFBAE5xDQAjAEFAaiIDJAACQCAMIANBPGpBABCUBSITDQAgAyADKAI8QShsrRD8ASIFNgIwIAVFBEBBByETDAELIAMgAjYCKCADIAE2AiQgA0F/NgI0IAMgAygCPDYCLCADIAw2AiAgDCgCEEHsACADQSBqEIADIhNFBEBBACEFIAMoAjwiBEEAIARBAEobIQQgAygCMCEHA0AgBCAFRwRAIAcgBUEobGooAhAEQCAIIAgpAyhCASAFQT9xrYaENwMoCyAFQQFqIQUMAQsLIAggATYCEEF/IQUDQEEAIQRBACEJAkACQCADKAI0QQBOBEAgAygCLCINQQAgDUEAShshCUH/////ByEHA0AgBCAJRg0CIAMoAjAgBEEobGoiDigCEARAIA4pAwgiIacgByAhIAesUxshBwsgBEEBaiEEDAALAAsgA0EANgI0A0AgBCADKAIsTg0CIAMoAjAgBEEobGoiB0EQaiAHQQhqIAMoAigQ7QYgBEEBaiEEDAALAAtBASEJIAdB/////wdGDQAgAyAHIAMoAihrQQFqIg42AjQgB0EBaiESQQAhCUEAIQQDQCAEIA1ODQEgAygCMCAEQShsaiIHQRBqIAdBCGogEhDtBiAHQSBqIAdBGGogDhDtBiAEQQFqIQQgAygCLCENDAALAAsgCUUEQEIAISFBACEHQgAhJUEAIQkjAEEQayIEJAAgAygCNCINrCEmA0ACQAJAIAMoAiwgB0oEQCADKAIwIAdBKGxqIg4oAiAiEkUNASAEIBI2AgwgBCAOKQMYIiI3AwAgIUIBIAdBP3GthiInhCEkA0AgIiAmUyAiIAMoAiggDWqsWXINAkIBICIgJn2GIShB6AdBASAhICOEICeDUBsgCWohCSAOKAIAIhJBACASQQBKG60hIUIAISIDQCAhICJSBEAgKCAiiCAlhCElICJCAXwhIgwBCwsgBCgCDC0AAEECSQRAICQhIQwDBSAEQQxqIAQQoAQgBCkDACEiICQhIQwBCwALAAsgAyANNgIcIAMgCTYCGCADICE3AxAgAyAlNwMIIARBEGokAAwBCyAHQQFqIQcMAQsLIAMoAhgiBCAFTA0BIAggAygCHDYCFCAIIAMpAwg3AyAgCCADKQMQNwMYIAQhBQwBCwsgCCAFNgIMCyADKAIwECMLIANBQGskACATIgUNBSAIKAIMIgUgC0wNACAKIAgpAxA3AwAgCiAIKQMgNwMQIAogCCkDGDcDCCAFIQsLIAFBAWohAQwBCwsgEEEBaiEQIAopAwggI4QhIwwBCwsgD0EERyAjIAgpAyhScQ0BIA9BAWshEkEAIQVBACEBA0AgASAPTyAFcg0BIBIgASILRiEbIAhBkAFqIQdBACEKQQAhECMAQTBrIgYkACAMKAIAIRMgBkEANgIsIAYgCEEwaiABQRhsaiIBKAIENgIoIAYgASkDEDcDICAMKAIMIAEoAgBBAWoiARCLAiEJIAwoAgwhBQJAIAlFBEBBAEEHIAUgARD7AkEFRhshAQwBCyAFIAEQyQEhDSATKAIkIgEoAgAhFCABIAwoAhQgCSANIAZBHGoQ2AIiAQ0AIAYoAhwhDiALQQBKIRxBACEBAkADQCABDQEgBkF/NgIUIAZBADYCECAGQQA2AgwgDiAGQRhqIAZBFGogBkEQaiAGQQxqIAZBLGogFCgCFBEJACIBBEAgAUHlAEcNAiAHIAkgCmpBfxCvAiEBDAILQQAhASAGKAIsIgQgBigCKCIFSA0AIBBFBEBBASEQIAwoAhQhGSAJIAYoAhAiBWohHSANIAVrIR5CACEhQQAhBSMAQSBrIgMkAAJAIAYpAyAiI1ANAANAICEiJEIBfCEhICMgJIhCAYNQDQALQgAhIQNAICGnIQQgIUIBfCEhICMgBEF/cyACaq2IQgGDUA0ACyAkpyAEayIEQQJtIR8gBEECSA0AIANBADYCHCATKAIkIgUoAgAhESAFIBkgHSAeIANBGGoQ2AIiBQ0AIAIgH2ohGSADKAIYIQVBACEEAkADQCAERQRAIBkgAygCHEwEQCAFIBEoAhARAQAaDAMFIANBADYCECADQQA2AgwgA0EANgIIIAUgA0EUaiADQRBqIANBDGogA0EIaiADQRxqIBEoAhQRCQAhBAwCCwALCyAFIBEoAhARAQAaIARB5QBGDQAgBCEFDAELQQAhBSADKAIcIARBAEcgAmtqIgRBAEwNACAGIAYoAiggBGo2AiggBiAjIAStiDcDIAsgA0EgaiQAIAUEQCAFIQEMAgsCQAJ/IBxFIAYoAigiBUEATHFFBEAgByAVQX8QrwIMAQsgBigCECIERQ0BIAcgCSAEEK8CCyIERQ0AIAQhAQwCCyAGKAIsIgQgBUgNAQsCQCACIAVqIARMBEAgGw0BDAMLIAYpAyBCASAEIAVrrYaDIiFQISAgBCAFSgRAIAcgCSAKaiAGKAIQIAprEK8CIQELICAgAXJFBEAgByAYQX8QrwIhAQsCQCABDQAgByAJIAYoAhAiAWogBigCDCABaxCvAiIBICFQcg0AIAcgF0F/EK8CIQELQQEhECAGKAIMIQoMAQsLIAcgFUF/EK8CIQELIA4gFCgCEBEBABoLIAZBMGokACABIQUgC0EBaiEBDAALAAsgGhCTAiAFBEAgACAFENgBIAgoApABECMMAwsgACAIKAKQAUF/QQMQPwwCCyAPQQFqIQ8MAAsACyAIQaABaiQACyAWQRBqJAALMgECfwNAIAFBBUYEQEEADwsgAUECdCECIAFBAWohASAAIAJBkKwDaigCABBTDQALQQELCQAgABCkBEEACxcAQQAhASAALQDwAQR/QQAFIAAQvgoLC6cCAgN/AX4jAEHQAGsiAiQAIAAoAgwhAyACIAAQvwoiBDYCTCAERQRAIAIgABCcBTYCTAsgACgCKEUEQCAAKQMQIQUgAiABNgJIIAIgBTcDQCACQcwAaiADQe2rASACQUBrEPsBCyAALQDuAQRAIAApAxAhBSACIAE2AjggAiAFNwMwIAJBzABqIANBu60BIAJBMGoQ+wELIAAtAO0BBEAgACkDECEFIAIgATYCKCACIAU3AyAgAkHMAGogA0GirAEgAkEgahD7AQsgACkDECEFIAIgATYCGCACIAU3AxAgAkHMAGoiBCADQdGsASACQRBqEPsBIAApAxAhBSACIAE2AgggAiAFNwMAIAQgA0GHrQEgAhD7ASACKAJMIQAgAkHQAGokACAAC04AQQAhAUEAIQADQAJAIABBBEcEfyACIABBA3RB8KsDaigCABCVAQ0BIAMgAEEDdEH0qwNqKAIANgIAQQEFQQALDwsgAEEBaiEADAALAAsJACAAEKQEQQALDgAgAEEANgI0IAAQvwoLqhcCDH8GfiMAQRBrIgckACAHQQA2AggCQAJAIAFBAkgNACAAKAIYIQQCQCACKAIAEC9BBUcNACAEQQJ0IAJqKAIIIgUQL0EFRg0AIAcCfyAFECshAiAFEGAhA0EHIAJFDQAaAkACQAJAAkACQCADQQdrDgIBAAILIAJB3N4AQQgQSA0CIABBABCeCgwECyACQe7uAEEHEEgNASMAQRBrIgQkAAJAIABBABCdCiICDQAgBEEANgIIIAQgACgC4AE2AgACQAJAQaw1IAQQSiICRQRAQQchASAEQQc2AgwMAQsgBCAAKAIMIAJBfyAEQQhqQQAQlwMiATYCDCACECMgAQ0AIAA0AhhCDH5CDHwiERBLIgVFBEBBByEBIARBBzYCDAwBC0EAIQEgBUEAIBGnECggACgCGEECdEEEaiICaiIGIAJqIQgMAQtBACEFCwNAAkACQCABDQAgBCgCCBBDQeQARw0AQQAhAiAEIABBACAAIAQoAggQ9AYiCyAEKAIIQQAQmQEQ9wYiATYCDCAFQQAgACgCGEECdEEEahAoIQkDQCABIQMCQANAIAMNASACIAAoAhhODQEgACgCICACai0AAARAIAJBAWohAkEAIQMMAQsLIAQgACALIAQoAgggAkEBaiIDEIsCIAIgCSACQQJ0ahD2BiIBNgIMIAQoAgggAxDJASECIAkgACgCGEECdGoiDCACIAwoAgBqNgIAIAMhAgwBCwsgAC0A7gEEQCAEQQxqIAAgCRCgCiAEKAIMIQELIAENAUEAIQIDQCAAKAIYIAJOBEAgBiACQQJ0IgNqIgsgCygCACADIAlqKAIAajYCACACQQFqIQIMAQsLIApBAWohCgwCCyAALQDsAQRAIARBDGogACAGIAggChCfCgsgBRAjIAQoAggiAUUEQCAEKAIMIQIMAwsgARCYASEBIAQoAgwiAiABIAIbIQIMAgsgBCgCCBCYARogBEEANgIIQQEhAQwACwALIARBEGokACACDAMLIANBD0cEQEEBIQEgA0EHSA0CDAELIAJBmNkAQQ8QSA0AIwBBEGsiBiQAIAZBADYCDEEAIQEjAEEwayIEJAAgBEEANgIoIAQgAEEbIARBKGpBABBSIgM2AiwCQCADDQAgBCgCKCICQQEgACgCmAIQdRogAkECIAAoAoACEHUaA0ACQAJAIAENACACEENB5ABHDQBBACEDIAJBABC/ASEJA0AgAyAAKAKAAk4NAkIAIRQjAEHgAGsiASQAIAFBADYCWCABQgA3A1AgAUEYaiIFQQBBOBAoGiABQRM2AlwCQCAAIAkgA0F+QQBBAEEAQQEgBRDIAyIFDQAgACABQRhqIAFB0ABqEKUEIgUNAANAIAAgAUEYahDHAyIFQeQARw0BIAEoAkwhCCABKAJIIQVCACEQIAFCADcDECABQgA3AwggBSAIaiEIIAUgAUEQahClASAFaiEFIAEpAxAhEgNAIAUgCE8NASABQgA3AwAgBSABEIQDIAVqIgUgCE8NACABKQMAIhVCAVgEQCABQgA3AwggFVBFBEAgBSABQQhqEKUBIAVqIQVCACEQDAILIAUgARCEAyAFaiEFIAEpAwAhECAALQDvAQRAIBIgEH0hEkIAIRAMAgsgECASfCESQgAhEAUgASgCQCABKAJEIAkgAyASIAEoAgggECAVfEICfSIQpxDwBiAUhSEUCwwACwALAAsgAUEYahCIAyAEIAU2AiwgAUHgAGokACATIBSFIRMgA0EBaiEDDAALAAsgAhA6IQMgAQRAIAEhAwwDCyADDQIgACgCJCgCACEKIARBADYCJCAEIAAoAuABNgIAAkBBrDUgBBBKIgFFBEBBByEDIARBBzYCLAwBCyAEIAAoAgwgAUF/IARBJGpBABCXAyIDNgIsIAEQIwsDQAJAIAMNACAEKAIkEENB5ABHDQBBACEDIAQoAiRBABCZASEQIAAgBCgCJBD0BiEJQQAhAQNAIAMNAiABIAAoAhhODQIgACgCICABai0AAARAIAFBAWohAUEAIQMMAQsgBCgCJCABQQFqIgIQiwIhAyAEQQA2AiAgACgCJCAJIANBfyAEQSBqENgCIQUgBCgCICEIA0AgBUUEQCAEQQA2AhggBEEANgIUIARBADYCECAEQQA2AgwgCCAEQRxqIARBGGogBEEUaiAEQRBqIARBDGogCigCFBEJACIFDQEgBCgCHCILIAQoAhgiDCAJQQAgECABIAQoAgwiDhDwBiARhSERQQEhAyAAKAKAAiINQQEgDUEBShshDQNAIAMgDUYNAiAMIAAoAoQCIANBGGxqKAIAIg9OBEAgCyAPIAkgAyAQIAEgDhDwBiARhSERCyADQQFqIQMMAAsACwsgCARAIAggCigCEBEBABoLQQAgBSAFQeUARhshAyACIQEMAAsACwsgBCgCJBCYARoMAgsgBCgCLCEBDAALAAsgBiARIBNRNgIMIARBMGokACADIQEgBigCDCECIAZBEGokACABQYsCIAEgAnIbDAILIAJBzKQBQQYQSEUEQCMAQRBrIgMkACADIAJBBmo2AgggA0EIahDzBiEGQQghAQJAIAMoAggiBC0AACIFQSxGBEBBASECIAQtAAFFDQEgAyAEQQFqNgIIIANBCGoQ8wYhASADKAIILQAAIQULQQEhAiAFIAFBAkhyDQAgA0EANgIMAkAgAC0A7QFFBEAgA0EMaiAAEP0GIAMoAgwiAg0BCyAAIAYgARC9CiECCyAAEJMCCyADQRBqJAAgAgwCC0EBIQEgA0ELSQ0AIAJByKQBQQoQSA0AIwBBEGsiASQAIAEgAkEKajYCDCABQQA2AgggAUEANgIEIABBCEEIIAFBDGoQ8wYiAiACQRBKGyACQQFGGzYCMAJAIAAtAO0BRQRAIAFBCGogABD9BiABKAIIIgINAQsgAEEXIAFBBGpBABBSIgINACABKAIEIgJBAUECEHUaIAJBAiAAKAIwEHUaIAIQQxogAhA6IQILIAFBEGokACACIQELIAELNgIMQQAhBQwCCyAEQQJ0IAJqKAIQEGlBAE4NACAHQRM2AgxBACEFDAELIAA0AhhCA4ZCCHwQSyIFRQRAIAdBBzYCDEEAIQUMAQsgBUEAIAAoAhhBAWoiCkEDdBAoIQlBACEEIwBBEGsiBiQAAkAgACgCjAINACAAQRAgBkEMakEAEFIiBA0AIAYoAgwiBEEBEPoCGiAEEEMaIAQQOiEECyAGQRBqJAAgByAENgIMIAQNAAJAIAFBAkgNACAAKAIoDQAgACgCGEECdCACaigCDCIEEC9BBUYEQCACKAIEIQQLIAQQL0EFRg0AIAIoAgAiBhAvQQVHBEAgBhBfIAQQX1ENAQsgBwJ/IAAoAgwtAFxBv+wBai0AAEEFRgRAIAAgBCAHQQhqIAkQogoMAQtBASEIIAAgAiADEKEKCyIENgIMIAQNAQsgCkECdCAJaiEEIAIoAgAiBhAvQQVHBH8gByAAIAYgB0EIaiAJEKIKIgY2AgwgBkUFQQELRSABQQJIckUEQCAAKAIYQQJ0IAJqKAIQEGkhAQJAAkAgCA0AIAcgACACIAMQoQoiBjYCDCAGRQ0AIAZBE0cNASAAKAIoDQEgB0GLAjYCDAwBCyAHIABBACABIAMpAwAQ9wYiAzYCDCADDQBBAiEDA0ACQCAAKAIYQQJqIANMBEBBACEGDAELIANBAmsiBiAAKAIgai0AAEUEQCAAIAEgAiADQQJ0aiIIKAIAECsgBiAEIAZBAnRqEPYGIgYNASAIKAIAEGAhBiAEIAAoAhhBAnRqIgggBiAIKAIAajYCAAsgA0EBaiEDDAELCyAHIAY2AgwLIAAtAO4BBEAgB0EMaiAAIAQQoAoLIAcgBygCCEEBajYCCAsgAC0A7AFFDQAgB0EMaiAAIAQgCSAHKAIIEJ8KCyAFECMgABCTAiAHKAIMIQAgB0EQaiQAIAALDgAgASAAKQMgNwMAQQALsQEBAn8CQAJAAkACQAJAAkAgAiAAKAIAIgQoAhgiA2sOAwABAgMLIAEoAgAiARCcASABQQE7ARAgASAAQY/CAEEAEOkJQQAPCyABIAApAyAQYwwCCyAAKAIQBEAgASAANAIUEGMMAgsgAyECIAQoAiwNACABQQAQgAFBAA8LQQAgABCdBSIDDQEgACgCDCIAEOQJQQFrIAJMDQAgASAAIAJBAWoQ4wkQywELQQAhAwsgAwscACAALQAGRQRAQQAPCyAAEIEHIABBAToABkEBC80JAg5/AX4jAEEwayIIJABBASEDAkAgACgCACIGKAI4DQAgAUH//wNxIgsEfyAEKAIAIQlBAQVBAAshAyABQYCABHEEQCAEIANBAnRqKAIAIQUgA0EBaiEDCyABQYCACHEEQCAEIANBAnRqKAIAIQwgA0EBaiEDCyABQYCAEHEEQCAEIANBAnRqKAIAIQoLIAAQgQcgACAMQoCAgICAgICAgH8Qwwo3A0ggACAKQv///////////wAQwwo3A1ACfyACBEAgAi0AAEHEAEYMAQsgBi0A7wELIQIgACABOwEEIAAgAjoANCALQQJPBEAgCRArIgJFBEBBByEDIAkQL0EFRw0CC0EAIQMgAEEANgIUIAUEQCAAIAUQaSIDNgIUCyAGKAIkIQ8gBigCHCEQIAYtAOwBIREgBigCGCESIAZBCGohDSMAQSBrIgUkACAAQRBqIQcjAEEwayIEJAAgBEEANgIoIARCADcDICAEIAtBAms2AhwgBCASNgIYIAQgEDYCECAEIAM2AgwgBCAPNgIIIAQgETYCFAJAIAJFBEAgB0EANgIADAELIARBCGogAiACED0gByAEQSxqELQKIgNBASADIAQoAigbIAMbIQ4LIARBMGokAAJAAkAgDiIEDQBBACEDIAcoAgBFDQEgB0EMEJsFIgQNACAHKAIAQQwQuAoiBEUNAQsgBygCABCOAiAHQQA2AgBBASEDIARBAUcEQCAEIgNBEkcNASAFQQw2AgAgDUGKwQEgBRDOAUEBIQMMAQsgBSACNgIQIA1B/IkBIAVBEGoQzgELIAVBIGokACADDQEjAEEgayIFJAAgACgCACECIAVBADYCHCAFQQA2AhggBUEANgIUIAAgACgCECAFQRhqIAVBFGogBUEc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BBCjAkUgA0EBR3JFBEAgACACKAIEEMsBDAELIAAgAxDYAQsgAUFAaxCsBAsgBCAHNgLoAiABQdACaiQAC/ECAQZ/IwBBoAJrIgEkACAAEH8hBCACKAIAEGkhAyACKAIEECshBiACKAIIEGkhBSAEKAIQIANBBHRqKAIAIQIgBCgC6AIhCCAEQQA2AugCAkAgAUEQaiACIAQgBiADQQFGEK0EIgINAAJAAkAgASgC/AEiAkUNACACLgEiIgNBAUYNACADIAVKDQELQafsBhApIQIMAQsgAUEQakEAIAVBDGwiByACKAIEaigCABCWASEDAkAgAi4BIkEBayAFSgRAIAFBEGpBACAHIAIoAgRqKAIMEJYBKAIEIQUgAygCBCECDAELIAYgAigCLGohBSADKAIEIQIDQCACLQAAIgdFIAdBLEZyDQEgAyACQQFrIgI2AgQMAAsACyABIAU2AgggASAGNgIEIAEgAiAGazYCACAAIARB4CwgARA8IgJBf0F/ED8gAhAjQQAhAgsgAUEQahCsBCAEIAg2AugCIAIEQCAAIAIQ2AELIAFBoAJqJAALmQMCB38CfiMAQbACayIBJAAgABB/IQMgAigCABArIQUgAigCBBArIQQgAigCEBBpIQcgAykDICELIAIoAhQQKyEGIAIoAhgQaSEIIAMoAugCIQkgA0EANgLoAiAFRSAERXJFBEAgAykDICEKIAgEQCADIApC/////3mDNwMgCyABQSBqIAUgAyAEIAcQrQQhBCADIAMpAyAgCkKAgICABoOENwMgAkACQCAEDQACQCALQoCAgCCDIgpCAFINACABKAKMAiIERQ0AIAQtACtBAkcNACABQQA2AhwgAUIANwIUIAFCADcCDCABQgA3AgQgASABQSBqIgU2AgAgBSAEKAIsIAEQ4AEgASgCLEEAIAEoAkQbIQQMAQsgASgClAIiBEUNASADIApQBH8gAUEgahCuBSIEDQEgASgClAIFIAQLKAIYEE4gAyAFEOcCRw0BIABBARCAAQwBCyAERSAGRXINACADEKMCDQAgACAGIAIoAgggAigCDCABQSBqEJgHCyABQSBqEKwECyADIAk2AugCIAFBsAJqJAALQAEBfwJAIAEtAABBpwFHDQAgAS0AB0EDcQ0AIAAoAhgiAigCDCABKAIsRw0AIAAoAgAgAiABQSxqEJYBGgtBAAt2AQR/QQEhAiABLwEGQaAIcQR/QQEFIAEoAiAiA0UEQEECDwsgACgCGCEEQQAhAgNAIAMoAgAgAkoEQCADIAJBBnRqIgUoAhggBCgCDEYEQCAAKAIAIAQgBSgCEBCWARoLIAJBAWohAgwBCwsgACABEL8HQQALC7kHAgl/AX4jAEHwAmsiASQAIAAQfyEGIAIoAgAQKyEDIAIoAgwQKyEIIAIoAhAQKyEHIAIoAhQQKyEKIAIoAhgQaSEEIApFIAhFIAdFcnJFBEAgBigC6AIhCyAGQQA2AugCIAYQ9wEgAUEANgJYIAFCADcDUCABQgA3A0ggBiAHIAMQfCEFIAFBADYCPCABQgA3AjQgASAFNgJUIAFB2gA2AjAgAUHbADYCLCABIAFByABqNgJAIAEgAUHgAGoiBTYCKAJAIAUgAyAGIAggBBCtBCIDDQAgBikDICIMp0GAgIAgcSEFAkACQCABKALMAiIEBEAgBC0AKyIDQQJGBEAgBQ0DIAQoAiwhAyABQQA2AiQgAUIANwIcIAFCADcCFCABQgA3AgwgASABQeAAaiIFNgIIIAMgAygCBEH///9+cTYCBCAFIAQoAiwgAUEIahDgASABKAKEAQ0CIAFBKGogBCgCLBBqGgwDCwJAIAxCgIABg1AgBUEAR3EgA0EBRnINACAEQTBqIQMDQCADKAIAIgNFDQEgAygCCCIJIAcQU0UEQCABQeAAaiABQcgAaiAJEJYBGgsgA0EEaiEDDAALAAsgByAEKAIAIgMQUw0CIAEgBDYCVCABQeAAaiABQcgAaiAFBH8gAwUgAUEoaiAEKAIQEGUaIAQoAgALEJYBGgwCCyABKALQAiIDBEAgAUHgAGogAUHIAGogAygCABCWARogBQ0CIAFBKGogASgC0AIoAiQQTRoMAgsCQCABKALUAiIEKAIEIgMgBxBTDQAgASgCVCgCPCAEKAIYRw0AIAFB4ABqIAFByABqIAMQlgEaCyAFDQEgAUHgAGoQrgUiAw0CIAFBKGogBBCaByAEQRxqIQMDQCADKAIAIgRFDQICQCAEKAIMIgNFDQAgAyAHEFMNACABQeAAaiABQcgAaiADEJYBGgtBACEDAkAgBCgCECIFRQ0AA0AgAyAFKAIATg0BIAUgA0EGdGooAhAiCSAHEFNFBEAgAUHgAGogAUHIAGogCRCWARogBCgCECEFCyADQQFqIQMMAAsACyAEQShqIQMMAAsACyABKAJsIgMNAQsgACABQcgAaiAIIApBARCZByEDCwJAAkACQCADDgICAAELIAYQowJFDQAgACACKAIMEMsBDAELIAEoAmQEQCAAQa3lASACKAIEIAIoAgggAUHgAGoQmAcMAQsgACADENgBCyABQeAAahCsBCAGIAEoAkgQrQUgBiALNgLoAgsgAUHwAmokAAsHACAAKAIwC4IBAQJ/IAAoAhghAgJAIAEtAAAiA0GnAUcEQCADQc0ARw0BIAIoAgggAS4BIEcNASAAKAIAIgAoAnggAigCDEcNASAAIAIgARCWARoMAQsgAigCCCABLgEgRw0AIAEtAAdBA3ENACACKAIMIAEoAixHDQAgACgCACACIAEQlgEaC0EACyABAX9BASECIAEvAQZBoAhxBH9BAQUgACABEL8HQQALC6EJAQx/IwBB0AJrIgEkACAAEH8hBiACKAIAECshCyACKAIMECshByACKAIQECshCCACKAIUEGkhBSACKAIYECshDCACKAIcEGkhDSACKAIgEGkhBAJAIAtFIAhFciAMRSAFQQBIcnINACAGKALoAiEOIAYQ9wEgBiAIIAcQfCIDRQ0AIAUgAy4BIk4NACADKAIEIAVBDGxqKAIAIQkgAUEANgLIAiABQgA3A8ACIAFCADcDuAIgAUF/IAUgBSADLgEgRhs2AsACIAZBADYC6AIgAUEoaiIKIAcgBiALIAQQrQQhBCABQQA2AhwgAUIANwIUIAFB2AA2AhAgAUHZADYCDCABIAM2AsQCIAEgAUG4Amo2AiAgASAKNgIIAkAgBA0AAkACQCABKAKUAiIEBEACQAJAIAQtACsOAwEEAAQLIAQoAiwiAyADKAIEQf///35xNgIEIAFBADYCNCABQShqIANBABDgAUEHIAEoAjQgBi0AVxsiBA0EIAFBCGogAxBqGgwDCyAIIAQoAgAQUyEHIAEgBDYCxAIgBw0BIAQuASIgBUoEQCABQShqIAFBuAJqIAQoAgQgBUEMbGooAgAQlgEaCyABKALAAkEASARAIAFBKGogAUG4AmogASgClAJBIGoQlgEaCyABQQhqIAEoApQCKAIQEGUaIAEoApQCQQhqIQMDQCADKAIAIgMEQCABQQhqIAMoAigQZRogA0EUaiEDDAELCyABQZgCaiEDA0AgAygCACIDBEAgAUEIaiADKAIoEGUaIANBFGohAwwBBUEAIQMDQCADIAEoApQCIgQuASJODQQgAUEIaiAEIAQoAgQgA0EMbGoQlwEQTRogA0EBaiEDDAALAAsACwALIAEoApgCIgQEQCABQQhqIgMgBCgCKBBlGiADIAEoApgCKAIkEE0aDAILIAFBKGoQrgUiBA0CIAEoApwCQRxqIQQDQCAEKAIAIgQEQAJAIAQoAgwiBUUNACABQShqQQAgBSAHEKwCIANHDQAgBCgCICIFBEAgAUEoaiABQbgCaiAFKAIIIAkQhAsLIAFBKGoiBSABQbgCaiIIIAQoAhwgCRCDCyAFIAggBCgCGCAJEIQLCyAEQShqIQQMAQsLIAMgASgCoAFGBEAgAUEoaiABQbgCaiABKAKcAigCECAJEIMLCyABQQhqIAEoApwCEJoHDAELIARBMGohAwNAIAMoAgAiBEUNAUEAIQMDQCADIAQoAhRORQRAAkAgBw0AIAQgA0EDdGpBJGoiCigCACAFRw0AIAFBKGogAUG4AmogChCWARoLAkAgBCgCCCAIEFMNACAEIANBA3RqKAIoIgogCRBTDQAgAUEoaiABQbgCaiAKEJYBGgsgA0EBaiEDDAELCyAEQQRqIQMMAAsACyAAIAFBuAJqIAsgDCANEJkHIQQLAkACQAJAIAQOAgIAAQsgBhCjAkUNACAAIAIoAgAQywEMAQsgASgCLARAIABBreUBIAIoAgQgAigCCCABQShqEJgHDAELIAAgBBDYAQsgAUEoahCsBCAGIAEoArgCEK0FIAYgDjYC6AILIAFB0AJqJAALPAEBfCACKAIAEPkCQQNrQX5PBEAgAEF/IAIoAgAQUCIDRAAAAAAAAAAAZCADRAAAAAAAAAAAYxsQgAELC9IBAQJ/AkAgAigCABAvQQVGDQAgAEEkEEciAEUNACACKAIAECsaIAIoAgAQYCECIAAgACgCGCIDQQFrNgIYAkAgACgCICIBBEAgA0ECSA0BIAEoAgAhBCABIAFBBGogA0ECdEEIaxCqARogAiAEaiECDAELIAAoAhwgAmohAgsCQCACIAAoAhAiAU4EQCAAQQA2AhAMAQsgACABIAJrIgE2AhAgACgCBCIDIAIgA2ogARCqARogACgCEA0BCyAAQQA2AgwgACgCIBAjIABBADYCIAsLQQECfyAAQQAQRyIBBEACQCABLQAUIgJBB0cEQCACQRJHDQEgABD9Ag8LIAAQZw8LIAAgARCUCSABKAIQQX8QPwsLHQEBfyAAQQAQRyIBBEAgACABEJ0HIAEoAiAQIwsLgQMBBH8CQCACKAIAEC9BBUYNACAAQSQQRyIDRQ0AIAMoAgwhBCADIAAQfygCeDYCDAJAIAFBAUYEQCAEBEAgA0EBQSwQtwMMAgsgA0EBNgIcDAELIAIoAgQhAAJAAkACQCAEBEAgABArIQAgAigCBBBgIQQCQCAARQRAQQAhBAwBCyADIAAgBBBECyADKAIgIQAgAygCHCAERgRAIABFDQUgA0EgaiEFDAILIANBIGohBSAADQEgAygCGEECdEEEaq0QSyIBRQ0DIAMoAhgiAEEBIABBAUobQQFrIQZBACEAA0AgACAGRg0DIAEgAEECdGogAygCHDYCACAAQQFqIQAMAAsACyADIAAQYDYCHAwDCyAAIAMoAhhBAnStEOMBIgFFDQELIAMoAhgiAEEASgRAIABBAnQgAWpBBGsgBDYCAAsgBSABNgIADAELIANBBxC1AwsgAyADKAIYQQFqNgIYIAIoAgAQKyEAIAIoAgAQYCEBIABFDQAgAyAAIAEQRAsLMAAgAEEIEEchAAJAIAEEQCACKAIAEC9BBUYNAQsgAEUNACAAIAApAwBCAX03AwALCxkAIAAgAEEAEEciAAR+IAApAwAFQgALEGMLMAAgAEEIEEchAAJAIAEEQCACKAIAEC9BBUYNAQsgAEUNACAAIAApAwBCAXw3AwALCy0CAX8BfgJAIABBABBHIgFFDQAgASkDECICQgBXDQAgACABKwMAIAK5oxBcCwsgACAAIABBABBHIgAEfCAAKwMABUQAAAAAAAAAAAsQXAt6AgF+AXwgAEEgEEciAEUgAigCABD5AiIBQQVGckUEQCAAIAApAxBCAX03AxACQCABQQFHDQAgAC0AGQ0AIAIoAgAQXyEDIAAgACsDACADuaE5AwAgACAAKQMIIAN9NwMIDwsgAigCABBQIQQgACAAKwMAIAShOQMACwtJAQF/AkAgAEEAEEciAUUNACABKQMQQgBXDQAgAS0AGARAIABB5AxBfxBkDwsgAS0AGQRAIAAgASsDABBcDwsgACABKQMIEGMLC5YBAgF+AX8CQCAAQSAQRyIARSACKAIAEPkCIgRBBUZyDQAgACAAKQMQQgF8NwMQIAIoAgAhAQJ/IARBAUYEQCABEF8hAyAAIAArAwAgA7mgOQMAIAAtABggAC0AGXINAiAAQQhqIAMQ4QRFDQIgAEEBOgAYIABBGWoMAQsgACABEFAgACsDAKA5AwAgAEEZagtBAToAAAsL+gQCBH4HfwJAAkAgAigCBCIHEC9BBUYNACABQQNGBEAgAigCCBAvQQVGDQELIAIoAgAQLyEMIAcQaSEKIAIoAgAhBwJAIAxBBEYEQCAHEGAhCyACKAIAEI0CIghFDQIMAQsgBxArIghFDQEgCkEATg0AIAghBwNAIActAAAiDUUNASAHQQFqIgkhByANQcABTwRAA0AgCSIHQQFqIQkgBy0AAEHAAXFBgAFGDQALCyALQQFqIQsMAAsACwJ/IAFBA0YEQCACKAIIEGkiASABQR91IgJzIAJrrSEDIAFBAE4MAQsgABB/NAJ4IQNBAQshASAKrCEEAkAgCkEASARAIAusIAR8IgRCAFkNASADIAR8IQNCACEEIANCACADQgBVGyEDDAELIAoEQCAEQgF9IQQMAQtCACEEIAMgA0IAVa19IQMLIAQgBCADfSIGQgAgBkIAVRsgARshBSADIAQgAyAGQgBTGyABGyEDIAxBBEcEQANAIAgtAAAiAkUgBVByDQMgCEEBaiIHIQggAkHAAU8EQANAIAciCEEBaiEHIAgtAABBwAFxQYABRg0ACwsgBUIBfSEFDAALAAsgCCAFp2ohAQJAIAusIgQgBX0iBkIAIAZCAFUbIAMgAyAFfCAEVRsiA0KAgICACFoEQCABQX8gABDrCQwBCyAAIAEgA6dBAEF/EJQECwsPCyAIIQkDQCACQf8BcUUgA1ByRQRAIAlBAWohBwJAIAJB/wFxQb8BSwRAA0AgByIJQQFqIQcgCS0AACICQcABcUGAAUYNAAwCCwALIActAAAhAiAHIQkLIANCAX0hAwwBCwsgACAIIAkgCGusQX8QzwYLTAEBfgJ/IAIoAgAQXyIDQgAgA0IAVRshAyADIAAoAgAiASgCFDQCeFYEQCAAEP0CQRIMAQsgASADpxDOBkEACyIBBEAgACABENgBCwuJAwINfwN+IAAQfyELAkAgAigCABArIgpFDQAgAigCABBgIQYgAigCBBArIghFDQAgCC0AAEUEQCAAIAIoAgAQywEPCyACKAIEEGAhBCACKAIIECsiDEUNACACKAIIEGAhByAAIAZBAWqsIhAQzwMiAUUNACAEQQFrIQ0gBiAEayEOIAZBf3OsIREgByAEa6whEkEAIQIDQAJ/AkACQCACIA5MBEACQCACIApqIgUtAAAiDyAILQAARgRAIAUgCCAEEFFFDQELIAEgA2ogDzoAACADQQFqDAQLIAQgB04NASALNAJ4IBAgEnwiEEIBfVMEQCAAEP0CIAEQIw8LIAkgCUEBaiIJcQ0BIAEgECARfCAQQiCGQiCHfBDIASIFDQIgABBnIAEQIw8LIAEgA2ogAiAKaiAGIAJrIgIQJRogASACIANqIgJqQQA6AAAgACABIAJBAxA/DAQLIAEhBQsgAyAFaiAMIAcQJRogAiANaiECIAUhASADIAdqCyEDIAJBAWohAgwACwALCw0AIAAgABB/KQNwEGMLDQAgACAAEH8pA2gQYwsNACAAIAAQfykDKBBjC7sDAgh/AXwjAEEgayIBJAAgAUEIaiIEIAAQfyIDQQBBACADKAJ4EJoBIAIoAgAhAyMAQUBqIgIkAAJAAkACQAJAAkACQCADEC9BAWsOBAEAAwIECyACIAMQUCILOQMQIARBnt0AIAJBEGoQPiAEEJQJIgNFDQQgAyACQThqIAQoAhBBARDHARogCyACKwM4YQ0EIAQQpwIgAiALOQMAIARB8+0AIAIQPgwECyACIAMQXzcDICAEQenuACACQSBqED4MAwsgAxCNAiEHIAQgAxBgIgNBAXQiBkEEahC3BhogBC0AFA0CIANBACADQQBKGyEIIAQoAgQhAwNAIAUgCEcEQCAFQQF0IANqIgkgBSAHaiIKLQAAQQR2QZCKA2otAAA6AAIgCSAKLQAAQQ9xQZCKA2otAAA6AAMgBUEBaiEFDAELCyADIAZqQSc7AAIgA0HYzgA7AAAgBCAGQQNqNgIQDAILIAIgAxArNgIwIARB25UBIAJBMGoQPgwBCyAEQYKYAUEEEEQLIAJBQGskACAAIAQQxQEgASgCGEEBED8gAS0AHARAIAAQWSAAIAEtABwQ2AELIAFBIGokAAsxACMAQRBrIgAkACACKAIAEGkhASAAIAIoAgQQKzYCACABQfbAACAAEH4gAEEQaiQACw4AIABBjK4BQX9BABA/CyEAIAIoAgAgAigCBCAAEJwHEKMDBEAgACACKAIAEMsBCws2AQF+IAAgAigCABBfIgNCASADQgFVGyIDEM8DIgEEQCADpyICIAEQ8wEgACABIAJBAxC+AwsLSQEBfiMAQRBrIgEkAEEIIAFBCGoQ8wEgASkDCCIDQgBTBEAgAUIAIANC////////////AIN9IgM3AwgLIAAgAxBjIAFBEGokAAuYAQEFfyACKAIAEI0CIQMgACACKAIAEGAiBKxCAYZCAYQQzwMiAQRAIARBACAEQQBKGyEGIAEhAgNAIAUgBkZFBEAgAiADLQAAIgdBD3FBkIoDai0AADoAASACIAdBBHZBkIoDai0AADoAACADQQFqIQMgBUEBaiEFIAJBAmohAgwBCwsgAkEAOgAAIAAgASAEQQF0QQMQPwsLdQEDfyACKAIAECshAyACKAIAEGAhAQJAIANFDQAgACABrEIBfBDPAyIERQ0AQQAhAiABQQAgAUEAShshBQNAIAIgBUZFBEAgAiAEaiACIANqLQAAQcDnAWotAAA6AAAgAkEBaiECDAELCyAAIAQgAUEDED8LC4EBAQR/IAIoAgAQKyEDIAIoAgAQYCEBAkAgA0UNACAAIAGsQgF8EM8DIgRFDQBBACECIAFBACABQQBKGyEFA0AgAiAFRkUEQCACIARqIAIgA2otAAAiBiAGQcDqAWotAABBf3NB3wFycToAACACQQFqIQIMAQsLIAAgBCABQQMQPwsLlAICAXwCfyMAQSBrIgQkAAJAIAFBAkYEQCACKAIEIgEQL0EFRg0BIAEQaSIBQR4gAUEeSBsiAUEAIAFBAEobIQULIAIoAgAiARAvQQVGDQAgBCABEFAiAzkDGAJAIANEAAAAAAAAMMNjIANEAAAAAAAAMENkcg0AIAVFBEACfiADRAAAAAAAAOC/RAAAAAAAAOA/IANEAAAAAAAAAABjG6AiA5lEAAAAAAAA4ENjBEAgA7AMAQtCgICAgICAgICAfwu5IQMMAQsgBCADOQMIIAQgBTYCAEGF3gAgBBBKIgFFBEAgABBnDAILIAEgBEEYaiABEDFBARDHARogARAjIAQrAxghAwsgACADEFwLIARBIGokAAt2AgF+AXwCQAJAAkAgAigCACIBEC9BAWsOBQACAgIBAgsgACABEF8iA0IAUwR+IANCgICAgICAgICAf1EEQCAAQeQMQX8QZA8LQgAgA30FIAMLEGMPCyAAEFkPCyAAIAEQUCIEmiAEIAREAAAAAAAAAABjGxBcC7oCAgR/AX4gAUECdEEBcqwQSyIEBEAgAUEAIAFBAEobIQYgBCEBA0AgBSAGRwRAAn9B/f8DIAIgBUECdGooAgAQXyIHp0H///8AcSAHQv//wwBWGyIDQf8ATQRAIAEgAzoAACABQQFqDAELIANB/w9NBEAgASADQT9xQYABcjoAASABIANBBnZBwAFyOgAAIAFBAmoMAQsgA0H//wNNBEAgASADQT9xQYABcjoAAiABIANBDHZB4AFyOgAAIAEgA0EGdkE/cUGAAXI6AAEgAUEDagwBCyABIANBP3FBgAFyOgADIAEgA0ESdkHwAXI6AAAgASADQQZ2QT9xQYABcjoAAiABIANBDHZBP3FBgAFyOgABIAFBBGoLIQEgBUEBaiEFDAELCyAAIAQgASAEa6xBAxDPBg8LIAAQZws9ACMAQRBrIgEkACABIAIoAgAQKyICNgIMAkAgAkUNACACLQAARQ0AIAAgAUEMahDGARCAAQsgAUEQaiQAC40BAQN/IwBBMGsiAyQAIAAQfyEEAkAgAUEATA0AIAIoAgAQKyIFRQ0AIANBADYCJCADIAJBBGo2AiggAyABQQFrNgIgIANBCGoiAiAEQQBBACAEKAJ4EJoBIANBAjoAHSADIANBIGo2AgAgAiAFIAMQPiADKAIYIQEgACACEMUBIAFBARA/CyADQTBqJAAL9AIBB38gAigCACIFEC8iA0EFRiACKAIEEC8iAUEFRnJFBEAgBRBgIQVBASEEAkACQCACKAIEEGAiBkEATARAQQAhA0EAIQIMAQsCQAJAAkACQAJAAkACfyADQQRGIgMgAUEERnEiCARAIAIoAgAQjQIhASACKAIEEI0CDAELIAIoAgAhBCADIAFBBEZyDQEgBBArIQEgAigCBBArCyIHDQNBACEDDAELIAQQlQQiAxArIgENAQtBACECDAMLIAMQYCEFIAIoAgQQlQQiAhArIgdFDQIgAhBgIQYMAQtBACEDIAVFBEBBACECDAELQQAhAiABRQ0BCyAHLQAAIQlBASEEA0AgBSAGSARAQQAhBAwDCwJAIAEtAAAgCUcNACABIAcgBhBRDQAMAwsgBEEBaiEEA0AgAUEBaiEBIAVBAWshBSAIDQEgAS0AAEHAAXFBgAFGDQALDAALAAsgABBnDAELIAAgBBCAAQsgAxCdASACEJ0BCwuIAQEBfwJAAkACQAJAIAIoAgAiARAvQQFrDgQAAAEAAgsgACABEGAQgAEPCyABECsiAUUNASABIQIDQCACLQAAIgMEQCACQQFqIQIgA0HAAUkNAQNAIAItAABBwAFxQYABRw0CIAFBAWohASACQQFqIQIMAAsACwsgACACIAFrEIABDwsgABBZCwsPACAAIAIoAgAQ7wkQgAELHAAgACACKAIAEC9BAnRB7IkDaigCAEF/QQAQPwsJACAAQQEQhwsLCQAgAEEAEIcLC48BAQJ/IAIoAgAhAgJAAkAgAEEoEEciAUUNACABLwEQIQMgAhAvQQVGBEAgA0UNAQwCCyADBEAgABCcByEDIAAQ0gIiBEEAIAEgAiADEKMDIgNBAEgbQQEgBCADQQBMchtFDQIgASACEJMEGg8LIAEgABB/NgIUIAEgAhCTBBoLDwsgAEEBOgAZIABBfzYCFAuVAQEFfyAAENICIQMgABCcByEEAkAgAigCABAvQQVGDQBBf0EAIAMbIQUgAUEBIAFBAUobIQZBACEDQQEhAQNAIAEgBkcEQCACIAFBAnRqKAIAIgcQL0EFRg0CIAMgASACIANBAnRqKAIAIAcgBBCjAyAFc0EASBshAyABQQFqIQEMAQsLIAAgAiADQQJ0aigCABDLAQsLrwQBCH8CQCACKAIAIgMQL0EFRg0AIAMQKyIHRQ0AIAIoAgAQYCEDAkACQAJAIAFBAUYEQEHkiQMhCkHoiQMhBkEBIQUMAQsgAigCBBArIglFDQNBACEBIAkhAgNAIAItAAAiBQRAIAJBAWoiBCECIAVBwAFPBEADQCAEIgJBAWohBCACLQAAQcABcUGAAUYNAAsLIAFBAWohAQwBCwsgAUUNASAAIAGtQgOGEM8DIgZFDQMgBiABQQJ0aiEKQQAhBSAJIQEDQCABLQAABEAgBiAFQQJ0IghqIAE2AgAgAUEBaiIEIQIgAS0AAEHAAU8EQANAIAQiAkEBaiEEIAItAABBwAFxQYABRg0ACwsgCCAKaiACIAFrNgIAIAVBAWohBSACIQEMAQsLIAVFDQELAkAgABDSAiIBQQFxRSADRXINAANAQQAhAkEAIQQDQAJAIAIgBUYNACADIAogAkECdCIIaigCACIETwRAIAcgBiAIaigCACAEEFFFDQELIAJBAWohAgwBCwsgAiAFTw0BIAQgB2ohByADIARrIgMNAAtBACEDCwJAIAFBAnFFIANFckUEQANAIAMhAUEAIQIDQCACIAVGDQMCQCAKIAJBAnQiCGooAgAiBCABTQRAIAcgASAEayIDaiAGIAhqKAIAIAQQUUUNAQsgAkEBaiECDAELC0EAIQEgAw0ADAILAAsgAyEBCyAJRQ0BIAYQIwwBCyADIQELIAAgByABQX8QPwsLFAAgACACKAIAEGkQsQlBf0EAED8LoQEBBH8gAigCABArIgEEQCAAAn8jAEEQayICJAAgAkEMahCyCSABQQBBByABQauJAUEHEEgbaiIEEDEhASACKAIMIgBBACAAQQBKGyEFQQAhAANAAkAgACAFRwRAIAQgAEECdEGwrQNqKAIAIgYgARBIDQEgASAGai0AABCABQ0BQQEhAwsgAkEQaiQAIAMMAgsgAEEBaiEADAALAAsQgAELCw0AIABBgAhBf0EAED8LzgECAn8CfiMAQTBrIgEkACABQRhqIgRBAEEAQQAgAigCABCNAiICKAIUQeQAbEHkAGoQmgEgASACQQRBCCACLQAYG2o1AgA3AxAgBEGjDiABQRBqED4DQCADIAIoAhRORQRAIAEgAigCICADQQJ0aigCAEEBaq0iBSACKAIIIgStfEIBfSAFgCIGQgJRBH5CAkIBIARBCmytIAVCC35WGwUgBgs3AwAgAUEYakGiDiABED4gA0EBaiEDDAELCyAAIAFBGGoQnQcgAUEwaiQAC44CAQN/IAIoAgAQjQIhASACKAIEEGkhAgJAIAEoAggEQCACQQAgAkEAShshBANAIAMgBEYEQANAIAIgASgCEE4NBCACQQJ0IgMgASgCIGoiBCAEKAIAQQFqNgIAIAEoAhwgA2pBATYCACACQQFqIQIMAAsABSABKAIcIANBAnRqIgUgBSgCAEEBajYCACADQQFqIQMMAQsACwALQQAhAgNAIAIgASgCEE4NASABKAIcIAJBAnRqQQE2AgAgAkEBaiECDAALAAsgASABKAIIQQFqIgI2AggCQCABKAIMIgNFDQAgAiADIAEtABgiA0EBamxNDQAgASADQQFqOgAYIAAgASgCICgCAEEA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QCACQacBaw4GAQECAgIAAgsgAS0AB0EBcUUNASADIQIDQCACKAIAIgBFDQEgAEEkaiECQQEhBCABKAIsIABHDQALDAILQQIhBCAFKAIAIgAtAFcNAQJ/AkACQCADKAIIIgIEf0EAIQADQCACKAIAIABKBEBBACACIABBBHRqKAIIIAFBfxBrRQ0EIABBAWohACADKAIIIQIMAQsLIAUoAgAFIAALIAFBABA2IgBFDQAgAC0AAEGoAUcNACAAQawBOgAACyADIAUgAygCCCAAEDsiAjYCCEF/IQBBAQwBCyADKAIIIQJBAAshBiACBEAgASABKAIEIgJBgICAwAByNgIEIAUoAgAgARAuIAFBAEE0ECgiAUGnAToAACABIAYEfyADKAIIKAIAQQFrBSAACzsBICABIAMoAgAoAjA2AhwgAygCDCEAIAEgAkGABHE2AgQgASAANgIsCyAFKAIALQBXDQELQQAhBAsgBAswAQJ/IAEgACgCGCICKAIQIgNGBEBBAA8LIAIgATYCECAAIAEQahogAiADNgIQQQELqgEBA38CQCABKAIEQYCABXENACABKAIoIgJFDQAgAS4BIiEDIAAoAgAiBCgCACEAAkAgAS0AAEGpAUYEQCACKAIcIANBFGxqKAIEIAFHDQIgACABQQAQNiIBRQ0CIAIoAhwgA0EUbGogATYCBAwBCyACKAIoIANBFGxqKAIAIAFHDQEgACABQQAQNiIBRQ0BIAIoAiggA0EUbGogATYCAAsgBCABENcHC0EAC9wGAQh/IAAoAhgiAygCCCEEIAMoAgAhBQJAAkACQAJAIAEtAABBpwFrDgMAAQADCyADKAIEIgBFDQEgACgCACIDQQAgA0EAShshAyAAQQhqIQBBASEGA0AgAiADRg0DIAEoAhwiByAAKAIoRgRAQQAhACAEKAIgIgJBACACQQBKGyEDIAQoAhwhAgJAA0AgACADRwRAIAcgAigCCEYEQCACLwEQIAEvASBGDQMLIAJBFGohAiAAQQFqIQAMAQsLIAUoAgAhAiMAQRBrIgAkACAEIAIgBCgCHCAEQSBqIABBDGoQlAs2AhwgACgCDCECIABBEGokACACIgBBAEgNACAEKAIcIABBFGxqIgMgASgCLDYCACADIAEoAhwiBzYCCCADIAEvASAiCDsBECAFIAUoAixBAWoiAjYC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QQFGDQILIAAtAABBpwFHDQAgACgCLCIARQ0AIAAtACtBAUYNAQtBACECCyACCzIAAkAgACgCACIAKAKIAkUNACABKAI0DQAgARDIBygCQCIBRQ0AIAAgASgCCDYCiAILCwMAAQsLACAAQQA7ARRBAgsmACAAKAIQKAIcQShqQdzcAEEAEKgBGiAAIAEoAgQQOSAAIAEQJwsLloQExwIAQYAIC+feATMuMzkuMwB7fQAlcy4legBhZmZpbml0eQBSZWFsQWZmaW5pdHkAYnVzeQB0ZW1wX3N0b3JlX2RpcmVjdG9yeQBub3QgYSB3cml0YWJsZSBkaXJlY3RvcnkAb3BlbkRpcmVjdG9yeQBzaHJpbmtfbWVtb3J5AG91dCBvZiBtZW1vcnkAZmFpbGVkIHRvIGFsbG9jYXRlICV1IGJ5dGVzIG9mIG1lbW9yeQBIQVZJTkcgY2xhdXNlIG9uIGEgbm9uLWFnZ3JlZ2F0ZSBxdWVyeQBJbnRDb3B5AFNDb3B5AFZEZXN0cm95AE11bHRpcGx5AHF1ZXJ5X29ubHkAdW5saWtlbHkAdGFibGUgIiVzIiBoYXMgbW9yZSB0aGFuIG9uZSBwcmltYXJ5IGtleQBmb3JlaWduIGtleQBqc29uX2dyb3VwX2FycmF5AGpzb25fYXJyYXkAanVsaWFuZGF5AGZ0czRhdXgAdW5peABzcWxpdGVfcmVuYW1lX3F1b3RlZml4AHByZWZpeABMSUtFIG9yIEdMT0IgcGF0dGVybiB0b28gY29tcGxleABoZXgAY2hhcmluZGV4AE9wZW5BdXRvaW5kZXgAYXV0b21hdGljX2luZGV4AGF1dG8taW5kZXgAb3JwaGFuIGluZGV4AERyb3BJbmRleABpZHgAUmVvcGVuSWR4AHBjeABtYXgATWVtTWF4ACUwMngAMHgAIEZST00gJyVxJy4nJXElcycgQVMgeABDUkVBVEUgVEFCTEUgeABydwBwc293AGltcGxpZXNfbm9ubnVsbF9yb3cAbm93AGludGVnZXIgb3ZlcmZsb3cAcGFyc2VyIHN0YWNrIG92ZXJmbG93AHdpbmRvdwBzaGFkb3cAUmVzdWx0Um93AElmTnVsbFJvdwBuZXcAbm8gc3VjaCB2aWV3AGNhbm5vdCBtb2RpZnkgJXMgYmVjYXVzZSBpdCBpcyBhIHZpZXcAQ2Fubm90IGFkZCBhIGNvbHVtbiB0byBhIHZpZXcAY2Fubm90IFVQU0VSVCBhIHZpZXcAUHJldgBzdGRldgAgJWxsdQAlYyV1ACUuKno6JXUARnJhZ21lbnRhdGlvbiBvZiAlZCBieXRlcyByZXBvcnRlZCBhcyAlZCBvbiBwYWdlICV1AE11bHRpcGxlIHVzZXMgZm9yIGJ5dGUgJXUgb2YgcGFnZSAldQB1bmFibGUgdG8gdXNlIGZ1bmN0aW9uICVzIGluIHRoZSByZXF1ZXN0ZWQgY29udGV4dABTb3J0ZXJOZXh0AFZOZXh0AGluY29tcGxldGUgaW5wdXQAYnVzeV90aW1lb3V0AGxvY2FsaG9zdABjYW5ub3QgZHJvcCBjb2x1bW4gIiVzIjogbm8gb3RoZXIgY29sdW1ucyBleGlzdABwZXJzaXN0AGZvcmVpZ25fa2V5X2xpc3QAaW5kZXhfbGlzdABmdW5jdGlvbl9saXN0AGNvbGxhdGlvbl9saXN0AGRhdGFiYXNlX2xpc3QAbW9kdWxlX2xpc3QAUFJBR01BIHRhYmxlX2xpc3QAcHJhZ21hX2xpc3QAc2V0IGxpc3QAVmFsdWVMaXN0AHNxbGl0ZV9yZW5hbWVfdGVzdABSb3dTZXRUZXN0AFNlcXVlbmNlVGVzdABmYXN0AExhc3QAQ2FzdABzcXJ0AFNvcnRlclNvcnQAanNvbl9pbnNlcnQASWR4SW5zZXJ0AFNvcnRlckluc2VydAByZXN0YXJ0AGNvdABCaXROb3QASWZOb3QAUGFnZWNvdW50AGZyZWVsaXN0X2NvdW50AG1heF9wYWdlX2NvdW50AFJlc2V0Q291bnQAd2FsX2F1dG9jaGVja3BvaW50AHdhbF9jaGVja3BvaW50AENoZWNrcG9pbnQAU2F2ZXBvaW50AGEgQ0hFQ0sgY29uc3RyYWludAAlc09OIENPTkZMSUNUIGNsYXVzZSBkb2VzIG5vdCBtYXRjaCBhbnkgUFJJTUFSWSBLRVkgb3IgVU5JUVVFIGNvbnN0cmFpbnQAQ3Vyc29ySGludABfY29udGVudABwYXJlbnQARElTVElOQ1QgYWdncmVnYXRlcyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgYXJndW1lbnQAY29tbWVudABBUEkgY2FsbGVkIHdpdGggZmluYWxpemVkIHByZXBhcmVkIHN0YXRlbWVudABBUEkgY2FsbGVkIHdpdGggTlVMTCBwcmVwYXJlZCBzdGF0ZW1lbnQATWF4UGdjbnQAZGVmYXVsdCB2YWx1ZSBvZiBjb2x1bW4gWyVzXSBpcyBub3QgY29uc3RhbnQATXVzdEJlSW50AENhbm5vdCBhZGQgYSBjb2x1bW4gd2l0aCBub24tY29uc3RhbnQgZGVmYXVsdABIYWx0AGxhbm9pdABzdGF0X2luaXQASW5pdABBdXRvQ29tbWl0AGFuYWx5c2lzX2xpbWl0AHNvZnRfaGVhcF9saW1pdABoYXJkX2hlYXBfbGltaXQAam91cm5hbF9zaXplX2xpbWl0AE9mZnNldExpbWl0AFNlZWtIaXQAT04gY2xhdXNlIHJlZmVyZW5jZXMgdGFibGVzIHRvIGl0cyByaWdodABTaGlmdFJpZ2h0AGhnaHQAU2hpZnRMZWZ0AE9mZnNldAByZXNldABqc29uX3NldAB0b28gbWFueSBjb2x1bW5zIGluIHJlc3VsdCBzZXQAJXIgT1JERVIgQlkgdGVybSBkb2VzIG5vdCBtYXRjaCBhbnkgY29sdW1uIGluIHRoZSByZXN1bHQgc2V0AHNuaXBwZXQAc3RhdF9nZXQAc3FsaXRlX2NvbXBpbGVvcHRpb25fZ2V0AHN0cmljdABOb0NvbmZsaWN0AGpzb25fZ3JvdXBfb2JqZWN0AGpzb25fb2JqZWN0AGpzb25fZXh0cmFjdABTdWJ0cmFjdABsc3RhdABmc3RhdAAlc19zdGF0AHRibCxpZHgsc3RhdAB1bnN1cHBvcnRlZCBmaWxlIGZvcm1hdABncm91cF9jb25jYXQAQ29uY2F0AEx0AEd0AGRlZmVyX2ZvcmVpZ25fa2V5cwBhbHdheXMAcGFyYW1ldGVycyBhcmUgbm90IGFsbG93ZWQgaW4gdmlld3MAc3RhdHVzAHN5bmNocm9ub3VzAGluZGV4ICVzIGFscmVhZHkgZXhpc3RzAG91dHB1dCBmaWxlIGFscmVhZHkgZXhpc3RzACVzICVUIGFscmVhZHkgZXhpc3RzAHRyaWdnZXIgJVQgYWxyZWFkeSBleGlzdHMATm90RXhpc3RzAGlnbm9yZV9jaGVja19jb25zdHJhaW50cwBDSEVDSyBjb25zdHJhaW50cwBleHByZXNzaW9ucyBwcm9oaWJpdGVkIGluIFBSSU1BUlkgS0VZIGFuZCBVTklRVUUgY29uc3RyYWludHMAanNvbl9vYmplY3QoKSByZXF1aXJlcyBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMAanNvbl8lcygpIG5lZWRzIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzACVzX3NlZ21lbnRzAHVuYWJsZSB0byBkZWxldGUvbW9kaWZ5IHVzZXItZnVuY3Rpb24gZHVlIHRvIGFjdGl2ZSBzdGF0ZW1lbnRzAHVuYWJsZSB0byBkZWxldGUvbW9kaWZ5IGNvbGxhdGlvbiBzZXF1ZW5jZSBkdWUgdG8gYWN0aXZlIHN0YXRlbWVudHMAb2Zmc2V0cwByZXZlcnNlX3Vub3JkZXJlZF9zZWxlY3RzAGlpc3Nzc3NzAGlzcwBzZXNzAHVuY29tcHJlc3MAY2Fubm90IG9wZW4gc2F2ZXBvaW50IC0gU1FMIHN0YXRlbWVudHMgaW4gcHJvZ3Jlc3MAY2Fubm90IHJlbGVhc2Ugc2F2ZXBvaW50IC0gU1FMIHN0YXRlbWVudHMgaW4gcHJvZ3Jlc3MAY2Fubm90IGNvbW1pdCB0cmFuc2FjdGlvbiAtIFNRTCBzdGF0ZW1lbnRzIGluIHByb2dyZXNzAGNhbm5vdCBWQUNVVU0gLSBTUUwgc3RhdGVtZW50cyBpbiBwcm9ncmVzcwBhY2Nlc3MAcGFyYW1ldGVycwByZWN1cnNpdmVfdHJpZ2dlcnMAdGhlIElOREVYRUQgQlkgY2xhdXNlIGlzIG5vdCBhbGxvd2VkIG9uIFVQREFURSBvciBERUxFVEUgc3RhdGVtZW50cyB3aXRoaW4gdHJpZ2dlcnMAdGhlIE5PVCBJTkRFWEVEIGNsYXVzZSBpcyBub3QgYWxsb3dlZCBvbiBVUERBVEUgb3IgREVMRVRFIHN0YXRlbWVudHMgd2l0aGluIHRyaWdnZXJzAHF1YWxpZmllZCB0YWJsZSBuYW1lcyBhcmUgbm90IGFsbG93ZWQgb24gSU5TRVJULCBVUERBVEUsIGFuZCBERUxFVEUgc3RhdGVtZW50cyB3aXRoaW4gdHJpZ2dlcnMAQ2hpbGQgcGFnZSBkZXB0aCBkaWZmZXJzAHVuYWJsZSB0byBjbG9zZSBkdWUgdG8gdW5maW5hbGl6ZWQgc3RhdGVtZW50cyBvciB1bmZpbmlzaGVkIGJhY2t1cHMAYWNvcwBJZlBvcwBjb21waWxlX29wdGlvbnMARElTVElOQ1QgaXMgbm90IHN1cHBvcnRlZCBmb3Igd2luZG93IGZ1bmN0aW9ucwBGSUxURVIgY2xhdXNlIG1heSBvbmx5IGJlIHVzZWQgd2l0aCBhZ2dyZWdhdGUgd2luZG93IGZ1bmN0aW9ucwBub24tZGV0ZXJtaW5pc3RpYyBmdW5jdGlvbnMAaW5kZXggZXhwcmVzc2lvbnMAU0VMRUNUcyB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgJXMgZG8gbm90IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHJlc3VsdCBjb2x1bW5zAHZpcnR1YWwgdGFibGVzIGNhbm5vdCB1c2UgY29tcHV0ZWQgY29sdW1ucwBnZW5lcmF0ZWQgY29sdW1ucwB0YWJsZSAlcyBoYXMgJWQgdmFsdWVzIGZvciAlZCBjb2x1bW5zAHJhZGlhbnMAYWxsIFZBTFVFUyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHRlcm1zAGVtcHR5X3Jlc3VsdF9jYWxsYmFja3MATG9hZEFuYWx5c2lzAGZsZ3MAZmxhZ3MAdmZzACVkIGNvbHVtbnMgYXNzaWduZWQgJWQgdmFsdWVzAEpTT04gY2Fubm90IGhvbGQgQkxPQiB2YWx1ZXMAZmFpbGVkIG1lbW9yeSByZXNpemUgJXUgdG8gJXUgYnl0ZXMAcGFydGlhbCBpbmRleCBXSEVSRSBjbGF1c2VzAHNob3J0X2NvbHVtbl9uYW1lcwBmdWxsX2NvbHVtbl9uYW1lcwB1bmFibGUgdG8gb3BlbiBhIHRlbXBvcmFyeSBkYXRhYmFzZSBmaWxlIGZvciBzdG9yaW5nIHRlbXBvcmFyeSB0YWJsZXMAY2Fubm90IGNyZWF0ZSB0cmlnZ2VycyBvbiB2aXJ0dWFsIHRhYmxlcwAlcyBSRVRVUk5JTkcgaXMgbm90IGF2YWlsYWJsZSBvbiB2aXJ0dWFsIHRhYmxlcwBjYW5ub3Qgam9pbiB1c2luZyBjb2x1bW4gJXMgLSBjb2x1bW4gbm90IHByZXNlbnQgaW4gYm90aCB0YWJsZXMAQVVUT0lOQ1JFTUVOVCBub3QgYWxsb3dlZCBvbiBXSVRIT1VUIFJPV0lEIHRhYmxlcwAlcyBjYW5ub3QgdXNlIHZhcmlhYmxlcwB0b28gbWFueSBTUUwgdmFyaWFibGVzAHN1YnF1ZXJpZXMAY2Fubm90IHVzZSB3aW5kb3cgZnVuY3Rpb25zIGluIHJlY3Vyc2l2ZSBxdWVyaWVzAGNvdW50X2NoYW5nZXMAdG90YWxfY2hhbmdlcwBkZWdyZWVzAFJFVFVSTklORyBtYXkgbm90IHVzZSAiVEFCTEUuKiIgd2lsZGNhcmRzAHRocmVhZHMAYWJzAC4lLipzAENSRUFURSAlcyAlLipzAENSRUFURSVzIElOREVYICUuKnMAaW52YWxpZCB1cmkgYXV0aG9yaXR5OiAlLipzAHVua25vd24gdGFibGUgb3B0aW9uOiAlLipzACUuKnMlcwAsJXMlcyVzAFNDQU4gJXMlcyVzAHNxbGl0ZV9hbHRlcnRhYl8lcwBTQ0FOICVkIENPTlNUQU5UIFJPVyVzACVRJXMAIFZJUlRVQUwgVEFCTEUgSU5ERVggJWQ6JXMAJXM6ICVzLiVzLiVzAG1pc3NpbmcgZGF0YXR5cGUgZm9yICVzLiVzAGNhbm5vdCBzdG9yZSAlcyB2YWx1ZSBpbiAlcyBjb2x1bW4gJXMuJXMAbm9uLSVzIHZhbHVlIGluICVzLiVzAE5VTEwgdmFsdWUgaW4gJXMuJXMAJXM6ICVzLiVzAG5vIHN1Y2ggdGFibGUgY29sdW1uOiAlcy4lcwAuLiVzACUuMThzLSVzACBVU0lORyBJTlRFR0VSIFBSSU1BUlkgS0VZICglcwB1c2UgRFJPUCBWSUVXIHRvIGRlbGV0ZSB2aWV3ICVzAGlsbGVnYWwgZmlyc3QgYXJndW1lbnQgdG8gJXMAbWlzdXNlIG9mIGFsaWFzZWQgd2luZG93IGZ1bmN0aW9uICVzAHRvbyBtYW55IGNvbHVtbnMgb24gJXMAdG9vIG1hbnkgY29sdW1ucyBpbiAlcwAlcyBwcm9oaWJpdGVkIGluICVzAENIRUNLIGNvbnN0cmFpbnQgZmFpbGVkIGluICVzAG5vbi1kZXRlcm1pbmlzdGljIHVzZSBvZiAlcygpIGluICVzAHJlY292ZXJlZCAlZCBwYWdlcyBmcm9tICVzAG1pc3VzZSBvZiBhbGlhc2VkIGFnZ3JlZ2F0ZSAlcwAlcyAlVCBjYW5ub3QgcmVmZXJlbmNlIG9iamVjdHMgaW4gZGF0YWJhc2UgJXMAY2Fubm90IGRldGFjaCBkYXRhYmFzZSAlcwBhIEpPSU4gY2xhdXNlIGlzIHJlcXVpcmVkIGJlZm9yZSAlcwBjYW5ub3Qgb3BlbiB2YWx1ZSBvZiB0eXBlICVzAGNhbm5vdCBmc3RhdCBkYiBmaWxlICVzAHJlY292ZXJlZCAlZCBmcmFtZXMgZnJvbSBXQUwgZmlsZSAlcwBQUklNQVJZIEtFWSBtaXNzaW5nIG9uIHRhYmxlICVzAHVzZSBEUk9QIFRBQkxFIHRvIGRlbGV0ZSB0YWJsZSAlcwBTRUxFQ1QgJXMgT1JERVIgQlkgcm93aWQgJXMAU0VMRUNUICVzIFdIRVJFIHJvd2lkIEJFVFdFRU4gJWxsZCBBTkQgJWxsZCBPUkRFUiBCWSByb3dpZCAlcwB0aGVyZSBpcyBhbHJlYWR5IGFuIGluZGV4IG5hbWVkICVzAHRhYmxlICVTIGhhcyBubyBjb2x1bW4gbmFtZWQgJXMAdGhlcmUgaXMgYWxyZWFkeSBhIHRhYmxlIG5hbWVkICVzAHN0YXRlbWVudCBhYm9ydHMgYXQgJWQ6IFslc10gJXMAQ09WRVJJTkcgSU5ERVggJXMAU0VMRUNUICVzAHVuc3VwcG9ydGVkIHVzZSBvZiBOVUxMUyAlcwBVU0UgVEVNUCBCLVRSRUUgRk9SICVzAC0tIFRSSUdHRVIgJXMAUklHSFQtSk9JTiAlcwA+PyBBTkQgJXMAJXo6ICVzAHJlY3Vyc2l2ZSByZWZlcmVuY2UgaW4gYSBzdWJxdWVyeTogJXMAdnRhYmxlIGNvbnN0cnVjdG9yIGNhbGxlZCByZWN1cnNpdmVseTogJXMAbm8gc3VjaCBpbmRleDogJXMAbm8gc3VjaCB3aW5kb3c6ICVzAGNhbm5vdCBvdmVycmlkZSAlcyBvZiB3aW5kb3c6ICVzAGNhbm5vdCBvcGVuIHZpZXc6ICVzAG5vIHN1Y2ggc2F2ZXBvaW50OiAlcwBubyBzdWNoIHZmczogJXMAbXVsdGlwbGUgcmVjdXJzaXZlIHJlZmVyZW5jZXM6ICVzAGVycm9yIGluICVzICVzJXMlczogJXMAZXJyb3IgaW4gJXMgJXMgYWZ0ZXIgJXM6ICVzAHVua25vd24gdG9rZW5pemVyOiAlcwBlcnJvciBwYXJzaW5nIHByZWZpeCBwYXJhbWV0ZXI6ICVzAHVucmVjb2duaXplZCBwYXJhbWV0ZXI6ICVzAHVucmVjb2duaXplZCBvcmRlcjogJXMAdW5yZWNvZ25pemVkIG1hdGNoaW5mbzogJXMAbm8gc3VjaCBjb2x1bW46ICVzAGZpbGUgcmVuYW1lZCB3aGlsZSBvcGVuOiAlcwBmaWxlIHVubGlua2VkIHdoaWxlIG9wZW46ICVzAHVuc3VwcG9ydGVkIGVuY29kaW5nOiAlcwBjYW5ub3QgbGltaXQgV0FMIHNpemU6ICVzAE1KIGRlbGV0ZTogJXMAdGFyZ2V0IG9iamVjdC9hbGlhcyBtYXkgbm90IGFwcGVhciBpbiBGUk9NIGNsYXVzZTogJXMAb2JqZWN0IG5hbWUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZTogJXMAdW5rbm93biBkYXRhYmFzZTogJXMAdW5hYmxlIHRvIG9wZW4gZGF0YWJhc2U6ICVzAG5vIHN1Y2ggZGF0YWJhc2U6ICVzAHRoZXJlIGlzIGFscmVhZHkgYW5vdGhlciB0YWJsZSBvciBpbmRleCB3aXRoIHRoaXMgbmFtZTogJXMAZHVwbGljYXRlIGNvbHVtbiBuYW1lOiAlcwBkdXBsaWNhdGUgV0lUSCB0YWJsZSBuYW1lOiAlcwBubyBzdWNoIG1vZHVsZTogJXMAbXVsdGlwbGUgbGlua3MgdG8gZmlsZTogJXMAY2Fubm90IG9wZW4gdmlydHVhbCB0YWJsZTogJXMAbm8gc3VjaCB0YWJsZTogJXMAbXVsdGlwbGUgcmVmZXJlbmNlcyB0byByZWN1cnNpdmUgdGFibGU6ICVzAG5vIHN1Y2ggJXMgbW9kZTogJXMATUogY29sbGlkZTogJXMAbm8gc3VjaCBjb2xsYXRpb24gc2VxdWVuY2U6ICVzAGNpcmN1bGFyIHJlZmVyZW5jZTogJXMAY2Fubm90IG9wZW4gdGFibGUgd2l0aG91dCByb3dpZDogJXMAJXMgbW9kZSBub3QgYWxsb3dlZDogJXMAdnRhYmxlIGNvbnN0cnVjdG9yIGZhaWxlZDogJXMAYXV0b21hdGljIGV4dGVuc2lvbiBsb2FkaW5nIGZhaWxlZDogJXMAZGF0YWJhc2UgdGFibGUgaXMgbG9ja2VkOiAlcwBkYXRhYmFzZSBzY2hlbWEgaXMgbG9ja2VkOiAlcwB2dGFibGUgY29uc3RydWN0b3IgZGlkIG5vdCBkZWNsYXJlIHNjaGVtYTogJXMAYWJvcnQgYXQgJWQgaW4gWyVzXTogJXMALS0gJXMAJXogLSAlcwBvc191bml4LmM6JWQ6ICglZCkgJXMoJXMpIC0gJXMAd3IAcmlnaHRzdHIAbGVmdHN0cgBpbnN0cgBzdWJzdHIAZXhwcl9pbXBsaWVzX2V4cHIAaW52YWxpZCBhcmd1bWVudHMgdG8gZnRzNGF1eCBjb25zdHJ1Y3RvcgBtaXNzaW5nICVzIHBhcmFtZXRlciBpbiBmdHM0IGNvbnN0cnVjdG9yAHRoZSAiLiIgb3BlcmF0b3IAZnRzM2N1cnNvcgBuZWFyICIlVCI6IHN5bnRheCBlcnJvcgB1bmtub3duIGVycm9yAGRvbWFpbiBlcnJvcgBub3QgYW4gZXJyb3IAU1FMIGxvZ2ljIGVycm9yAGRpc2sgSS9PIGVycm9yAGZsb29yAHJtZGlyAG1rZGlyAHNlZ2RpcgBmdHMzX3Rva2VuaXplcgB1bmtub3duIHRva2VuaXplcgBwb3dlcgBsb3dlcgBzcWxpdGVfdGVtcF9tYXN0ZXIAc3FsaXRlX21hc3RlcgBwb3J0ZXIAUmVzZXRTb3J0ZXIARmtDb3VudGVyAEFQSSBjYWxsIHdpdGggJXMgZGF0YWJhc2UgY29ubmVjdGlvbiBwb2ludGVyAHN0cmZpbHRlcgBWRmlsdGVyAEVTQ0FQRSBleHByZXNzaW9uIG11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyAHVwcGVyAHByb3BlcgBJZlNtYWxsZXIAY2Fubm90IHVzZSBSRVRVUk5JTkcgaW4gYSB0cmlnZ2VyAERyb3BUcmlnZ2VyAHNlY29uZCBhcmd1bWVudCB0byBudGhfdmFsdWUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIAYXJndW1lbnQgb2YgbnRpbGUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIAZnJhbWUgc3RhcnRpbmcgb2Zmc2V0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcgBmcmFtZSBlbmRpbmcgb2Zmc2V0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcgBJbnRlZ2VyAFJvd2lkICVsbGQgb3V0IG9mIG9yZGVyAFJlbWFpbmRlcgBmcmFtZSBzdGFydGluZyBvZmZzZXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIAZnJhbWUgZW5kaW5nIG9mZnNldCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcgBhZGRyAHBhZHIAY2hhcgB5ZWFyAENsZWFyAEJpdE9yAHNlcQBDb2xsU2VxAEVsc2VFcQByZWdleHAAT3BlbkR1cABOb29wAEp1bXAAL3Vzci90bXAAL3Zhci90bXAAdGVtcABjdXJyZW50X3RpbWVzdGFtcABBZ2dTdGVwAG1vZGVTdGVwAHZhcmlhbmNlU3RlcABtdW5tYXAAbW1hcABtcmVtYXAAdnRhYjolcABzc2Vuc3VvAGlsc3VvAGF1dG8AR290bwBpbnRvAGluY3JlbWVudGFsX3ZhY3V1bSBlbmFibGVkIHdpdGggYSBtYXggcm9vdHBhZ2Ugb2YgemVybwBJZk5vdFplcm8ARGVjckp1bXBaZXJvAEZrSWZaZXJvAHNlcW5vAGluZGV4X3hpbmZvAHRhYmxlX3hpbmZvAG1hdGNoaW5mbwBpbmRleF9pbmZvAHRhYmxlX2luZm8AT3BlblBzZXVkbwBmY2hvd24AQmVnaW5TdWJydG4AUmV0dXJuAGpzb24Abm8gcXVlcnkgc29sdXRpb24AaW5kZXggY29ycnVwdGlvbgBkYXRhYmFzZSBjb3JydXB0aW9uAGZyZWUgc3BhY2UgY29ycnVwdGlvbgB1bmtub3duIGNvbHVtbiAiJXMiIGluIGZvcmVpZ24ga2V5IGRlZmluaXRpb24AJXMueEJlc3RJbmRleCBtYWxmdW5jdGlvbgBhdXRob3JpemVyIG1hbGZ1bmN0aW9uACUjVCgpIG1heSBub3QgYmUgdXNlZCBhcyBhIHdpbmRvdyBmdW5jdGlvbgAnJXMnIGlzIG5vdCBhIGZ1bmN0aW9uAEZ1bmN0aW9uAGNhbm5vdCBzdGFydCBhIHRyYW5zYWN0aW9uIHdpdGhpbiBhIHRyYW5zYWN0aW9uAGNhbm5vdCBjaGFuZ2UgJXMgd2FsIG1vZGUgZnJvbSB3aXRoaW4gYSB0cmFuc2FjdGlvbgB0ZW1wb3Jhcnkgc3RvcmFnZSBjYW5ub3QgYmUgY2hhbmdlZCBmcm9tIHdpdGhpbiBhIHRyYW5zYWN0aW9uAGNhbm5vdCBWQUNVVU0gZnJvbSB3aXRoaW4gYSB0cmFuc2FjdGlvbgBTYWZldHkgbGV2ZWwgbWF5IG5vdCBiZSBjaGFuZ2VkIGluc2lkZSBhIHRyYW5zYWN0aW9uAFRyYW5zYWN0aW9uAFBlcm11dGF0aW9uAHVua25vd24gb3BlcmF0aW9uAHVuc3VwcG9ydGVkIGZyYW1lIHNwZWNpZmljYXRpb24AUkFOR0Ugd2l0aCBvZmZzZXQgUFJFQ0VESU5HL0ZPTExPV0lORyByZXF1aXJlcyBvbmUgT1JERVIgQlkgZXhwcmVzc2lvbgB0b28gbWFueSBsZXZlbHMgb2YgdHJpZ2dlciByZWN1cnNpb24AdXNlcl92ZXJzaW9uAHNxbGl0ZV92ZXJzaW9uAGRhdGFfdmVyc2lvbgBzY2hlbWFfdmVyc2lvbgBzcWxpdGVfZHJvcF9jb2x1bW4Ac3FsaXRlX3JlbmFtZV9jb2x1bW4AYWZ0ZXIgZHJvcCBjb2x1bW4Abm8gc3VjaCBjb2x1bW4AbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBub24tZ2VuZXJhdGVkIGNvbHVtbgBjYW5ub3QgdXNlIERFRkFVTFQgb24gYSBnZW5lcmF0ZWQgY29sdW1uAGFkZCBjb2x1bW4AQ2Fubm90IGFkZCBhIFBSSU1BUlkgS0VZIGNvbHVtbgBDYW5ub3QgYWRkIGEgVU5JUVVFIGNvbHVtbgBjYW5ub3QgYWRkIGEgU1RPUkVEIGNvbHVtbgBWQ29sdW1uAGJ1aWx0aW4AYXNpbgBhdCBtb3N0ICVkIHRhYmxlcyBpbiBhIGpvaW4AbWluAG9yaWdpbgBWQmVnaW4AbWFpbgBFeHBsYWluAHNpZ24Ac3NlbgBvcGVuAElmTm90T3BlbgBTb3J0ZXJPcGVuAFZPcGVuAGhpZGRlbgBhdGFuAG1lZGlhbgBTZWVrU2NhbgBWSW5pdEluAGF1dG9fdmFjdXVtAGluY3JlbWVudGFsX3ZhY3V1bQBJbmNyVmFjdXVtAHN1bQBkcm9wIGNvbHVtbiBmcm9tAC9kZXYvdXJhbmRvbQBBZGRJbW0AcnRyaW0AbHRyaW0AcmVhZG9ubHlfc2htACVzLXNobQB0bmVtAFJBSVNFKCkgbWF5IG9ubHkgYmUgdXNlZCB3aXRoaW4gYSB0cmlnZ2VyLXByb2dyYW0AUHJvZ3JhbQBQYXJhbQBmdWwAZmNudGwAaW9jdGwAaWdvbABsb2NraW5nIHByb3RvY29sAG5jb2wAbm90bnVsbABpZm51bGwAL2Rldi9udWxsAGRhdGFiYXNlIG9yIGRpc2sgaXMgZnVsbABOb3ROdWxsAFNvZnROdWxsAElzTnVsbABaZXJvT3JOdWxsAEhhbHRJZk51bGwAY29sbABjYWNoZV9zcGlsbABSb3dDZWxsAGNlaWwAZGV0YWlsAHBhZGwAdW5peC1leGNsAHRibAB3YWwAdmlydHVhbAB0b3RhbABpbmNyZW1lbnRhbABPcGVuRXBoZW1lcmFsAEFnZ0ZpbmFsAG5vcm1hbABJbmRleCBhbHJlYWR5IG9wdGltYWwAcGFydGlhbAByZWFsAFJlYWwAcGsAb2sAdW5saW5rAHJlYWRsaW5rAEZpbmlzaFNlZWsARGVmZXJyZWRTZWVrAG5vbG9jawBDdXJzb3JVbmxvY2sAYmxvY2sAJXMubG9jawBDdXJzb3JMb2NrAFRhYmxlTG9jawBpbnRlZ3JpdHlfY2hlY2sAZm9yZWlnbl9rZXlfY2hlY2sAcXVpY2tfY2hlY2sAY2VsbF9zaXplX2NoZWNrAGludGVncml0eS1jaGVjawBGa0NoZWNrAFR5cGVDaGVjawBJbnRlZ3JpdHlDawByZXppAG5vaXRhemkAaXRpdmkAc3NlbmV2aQBpdGkAaXNzaXNpAGlzaXNpAHBpAG5vaQBnbmkAc2lzc2lpAGlzc2lzaWkAc3NzaWlpAHNlaQBpdGljaQBldGFjaQBsYWNpAGNvdGgAbW9udGgAanNvbl9hcnJheV9sZW5ndGgAb3ZlcmZsb3cgbGlzdCBsZW5ndGgAd2R0aABzdGF0X3B1c2gAYWNvc2gAYXNpbmgAYXRhbmgAanNvbl9wYXRjaABkYXRhdHlwZSBtaXNtYXRjaABhcmd1bWVudCB0eXBlIG1pc21hdGNoAGFiYnJldmlhdGVkIHF1ZXJ5IGFsZ29yaXRobSBzZWFyY2gAdW5peGVwb2NoAHNxbGl0ZV9hdHRhY2gAc3FsaXRlX2RldGFjaABqc29uX2VhY2gAYXZnAG5hcmcAc3FsaXRlX2xvZwBzdGF0ZW1lbnQgdG9vIGxvbmcAY2Fubm90IG9wZW4gJXMgY29sdW1uIGZvciB3cml0aW5nAHN1YnN0cmluZwBTdHJpbmcAc3FsaXRlX3JldHVybmluZwBlbmNvZGluZwBzdHJpbmcgb3IgYmxvYiB0b28gYmlnAFJlbGVhc2VSZWcAJS4xNmcAJSEuMTVnAHNzZW5sdWYAcHJpbnRmAHR5cGVvZgBtb2Rlb2YAb3V0IG9mAHJlbmFtZSBjb2x1bW5zIG9mAG51bGxpZgBpaWYAb2ZmADAxMjM0NTY3ODlhYmNkZWYASWYAJTA2LjNmACUuKmYAZ2V0cGFnZXNpemUAZG9jc2l6ZQBtbWFwX3NpemUAZGVmYXVsdF9jYWNoZV9zaXplAFBSQUdNQSAlUS5wYWdlX3NpemUAZnRzM3Rva2VuaXplAG9wdGltaXplAGpzb25fcmVtb3ZlAE1vdmUAY2Fubm90IGNvbW1pdCAtIG5vIHRyYW5zYWN0aW9uIGlzIGFjdGl2ZQBjYW5ub3Qgcm9sbGJhY2sgLSBubyB0cmFuc2FjdGlvbiBpcyBhY3RpdmUAZXhjbHVzaXZlAHRydWUASXNUcnVlAHVuaXF1ZQBkZmx0X3ZhbHVlAENhbm5vdCBhZGQgYSBSRUZFUkVOQ0VTIGNvbHVtbiB3aXRoIG5vbi1OVUxMIGRlZmF1bHQgdmFsdWUAQWdnVmFsdWUAanNvbl9xdW90ZQBwd3JpdGUAT3BlbldyaXRlAG9uX2RlbGV0ZQBzZWN1cmVfZGVsZXRlAElkeERlbGV0ZQBwcml2YXRlAGFnZ3JlZ2F0ZQBWQ3JlYXRlAG9uX3VwZGF0ZQBWVXBkYXRlAGN1cnJlbnRfZGF0ZQBmYWxsb2NhdGUAZnRydW5jYXRlAHJlcGxpY2F0ZQBiYWQgcGFyYW1ldGVyIG9yIG90aGVyIEFQSSBtaXN1c2UAdG9vIG1hbnkgdGVybXMgaW4gJXMgQlkgY2xhdXNlAHRvbyBtYW55IHRlcm1zIGluIE9SREVSIEJZIGNsYXVzZQBhZ2dyZWdhdGUgZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZCBpbiB0aGUgR1JPVVAgQlkgY2xhdXNlAFBBUlRJVElPTiBjbGF1c2UAYSBOQVRVUkFMIGpvaW4gbWF5IG5vdCBoYXZlIGFuIE9OIG9yIFVTSU5HIGNsYXVzZQBkYXRhYmFzZSAlcyBpcyBhbHJlYWR5IGluIHVzZQBBZ2dJbnZlcnNlAHJldmVyc2UAY2xvc2UAQ2xvc2UAZmFsc2UAYXR0ZW1wdCB0byB3cml0ZSBhIHJlYWRvbmx5IGRhdGFiYXNlAGNvcnJ1cHQgZGF0YWJhc2UAYXR0YWNoZWQgZGF0YWJhc2VzIG11c3QgdXNlIHRoZSBzYW1lIHRleHQgZW5jb2RpbmcgYXMgbWFpbiBkYXRhYmFzZQBmaWxlIGlzIG5vdCBhIGRhdGFiYXNlAHRlbXBfc3RvcmUAJXMgY2xhdXNlIHNob3VsZCBjb21lIGFmdGVyICVzIG5vdCBiZWZvcmUARXhwaXJlAHNxdWFyZQBleHByX2NvbXBhcmUAU29ydGVyQ29tcGFyZQBzdWJ0eXBlAENsclN1YnR5cGUAanNvbl90eXBlAElzTnVsbE9yVHlwZQBJZk5vSG9wZQBpbHRuZQB1bml4LW5vbmUASW5pdENvcm91dGluZQBFbmRDb3JvdXRpbmUAaWNuZQBsb2NhbHRpbWUAc3RyZnRpbWUAZGF0ZXRpbWUAY3VycmVudF90aW1lAHRuZW1lAGFmdGVyIHJlbmFtZQBub24tdGV4dCBmaWxlbmFtZQBWUmVuYW1lAGFtYmlndW91cyBjb2x1bW4gbmFtZQB0ZW1wb3JhcnkgdHJpZ2dlciBtYXkgbm90IGhhdmUgcXVhbGlmaWVkIG5hbWUAc2ltcGxlAGxvd2VyX3F1YXJ0aWxlAHVwcGVyX3F1YXJ0aWxlAHVuaXgtZG90ZmlsZQBjYW5ub3Qgb3BlbiBmaWxlAHVuYWJsZSB0byBvcGVuIGRhdGFiYXNlIGZpbGUAaW1tdXRhYmxlAEFib3J0YWJsZQBsZWdhY3lfYWx0ZXJfdGFibGUAc3FsaXRlX3JlbmFtZV90YWJsZQBjYW5ub3QgY3JlYXRlIHRyaWdnZXIgb24gc3lzdGVtIHRhYmxlAHZpcnR1YWwgdGFibGUAbm8gc3VjaCB0YWJsZQBudW1iZXIgb2YgY29sdW1ucyBpbiBmb3JlaWduIGtleSBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHJlZmVyZW5jZWQgdGFibGUAbG9jYWwgdGltZSB1bmF2YWlsYWJsZQBhbm90aGVyIHJvdyBhdmFpbGFibGUAbm8gbW9yZSByb3dzIGF2YWlsYWJsZQBWYXJpYWJsZQBEcm9wVGFibGUAdXRmMTZsZQBVVEYxNmxlAFVURi0xNmxlAGNhc2Vfc2Vuc2l0aXZlX2xpa2UAU2V0Q29va2llAFJlYWRDb29raWUAY2FjaGUAY29sdW1uIGluZGV4IG91dCBvZiByYW5nZQBub3RpZmljYXRpb24gbWVzc2FnZQB3YXJuaW5nIG1lc3NhZ2UAaW52YWxpZCByb290cGFnZQBFeHRlbmRzIG9mZiBlbmQgb2YgcGFnZQBqc29uX3RyZWUAQ3JlYXRlQnRyZWUAZGVlAGpvdXJuYWxfbW9kZQBsb2NraW5nX21vZGUAb3Bjb2RlAHVuaWNvZGUASm91cm5hbE1vZGUARGl2aWRlAGNvYWxlc2NlAHNxbGl0ZV9zZXF1ZW5jZQBTZXF1ZW5jZQBkaWZmZXJlbmNlAHZhcmlhbmNlAE9uY2UAVHJhY2UAanNvbl9yZXBsYWNlAHV0ZjE2YmUAVVRGMTZiZQBVVEYtMTZiZQBOZQBMZQBHZQAyMGM6MjBlADIwYjoyMGUAJSEuMjBlAGdldGN3ZABNYWtlUmVjb3JkAHRoc3RuZHJkAGxpa2VsaWhvb2QAZmNobW9kAHJvdW5kAE5vdEZvdW5kAFJld2luZABTZWVrRW5kAEJpdEFuZABvbGQAJWxsZCAlbGxkAG5vIHN1Y2ggcm93aWQ6ICVsbGQAcmVidWlsZABZaWVsZABsYXN0X2luc2VydF9yb3dpZAAlcy5yb3dpZABTRUxFQ1QqRlJPTSIldyIuJXMgT1JERVIgQlkgcm93aWQAU0VMRUNUKkZST00iJXciLiVzIFdIRVJFICVzIE9SREVSIEJZIHJvd2lkAElkeFJvd2lkAE5ld1Jvd2lkAFNlZWtSb3dpZABnZXRldWlkAGludmFsaWQAanNvbl92YWxpZABma2lkAF9fbGFuZ2lkACV6LCBsYW5naWQAbGFuZ3VhZ2VpZABkb2NpZABhcHBsaWNhdGlvbl9pZABzcWxpdGVfc291cmNlX2lkAG5vdCBhdXRob3JpemVkAEluZGV4IG9wdGltaXplZABub3RpbmRleGVkAHVuYWJsZSB0byBpZGVudGlmeSB0aGUgb2JqZWN0IHRvIGJlIHJlaW5kZXhlZAB2aWV3cyBtYXkgbm90IGJlIGluZGV4ZWQAdmlydHVhbCB0YWJsZXMgbWF5IG5vdCBiZSBpbmRleGVkAHRhYmxlICVzIG1heSBub3QgYmUgaW5kZXhlZAByZWFkX3VuY29tbWl0dGVkAHJlY3Vyc2l2ZSBhZ2dyZWdhdGUgcXVlcmllcyBub3Qgc3VwcG9ydGVkAHF1ZXJ5IGFib3J0ZWQAcm93cyBpbnNlcnRlZABpbnRlcnJ1cHRlZABjaGVja3BvaW50ZWQAYWNjZXNzIHRvICV6IGlzIHByb2hpYml0ZWQAYWNjZXNzIHRvIHZpZXcgIiVzIiBwcm9oaWJpdGVkAHJvd3MgZGVsZXRlZABnZW5lcmF0ZWQAcm93cyB1cGRhdGVkAG5vdHVzZWQAcm93IHZhbHVlIG1pc3VzZWQAc3FsaXRlX2NvbXBpbGVvcHRpb25fdXNlZABQYWdlICVkIGlzIG5ldmVyIHVzZWQAQ29sdW1uc1VzZWQAc3RvcmVkAHZpcnR1YWwgdGFibGVzIG1heSBub3QgYmUgYWx0ZXJlZAB2aWV3ICVzIG1heSBub3QgYmUgYWx0ZXJlZAB0YWJsZSAlcyBtYXkgbm90IGJlIGFsdGVyZWQAc2hhcmVkAGluZGV4IGFzc29jaWF0ZWQgd2l0aCBVTklRVUUgb3IgUFJJTUFSWSBLRVkgY29uc3RyYWludCBjYW5ub3QgYmUgZHJvcHBlZAB0YWJsZSAlcyBtYXkgbm90IGJlIGRyb3BwZWQAdmlldyAlcyBpcyBjaXJjdWxhcmx5IGRlZmluZWQAdW5vcGVuZWQAZGF0YWJhc2UgZGlzayBpbWFnZSBpcyBtYWxmb3JtZWQAJXMgY29uc3RyYWludCBmYWlsZWQARk9SRUlHTiBLRVkgY29uc3RyYWludCBmYWlsZWQAbGFyZ2UgZmlsZSBzdXBwb3J0IGlzIGRpc2FibGVkAGZ0czN0b2tlbml6ZSBkaXNhYmxlZABkYXRhYmFzZSAlcyBpcyBsb2NrZWQAZGF0YWJhc2UgaXMgbG9ja2VkAGRhdGFiYXNlIHRhYmxlIGlzIGxvY2tlZABhdXRob3JpemF0aW9uIGRlbmllZABhY2Nlc3MgcGVybWlzc2lvbiBkZW5pZWQAdGFibGUgJVMgaGFzICVkIGNvbHVtbnMgYnV0ICVkIHZhbHVlcyB3ZXJlIHN1cHBsaWVkAHRlbXBvcmFyeSB0YWJsZSBuYW1lIG11c3QgYmUgdW5xdWFsaWZpZWQAdGFibGUgJXMgbWF5IG5vdCBiZSBtb2RpZmllZABjb25mbGljdGluZyBPTiBDT05GTElDVCBjbGF1c2VzIHNwZWNpZmllZABubyB0YWJsZXMgc3BlY2lmaWVkAGRhdGFiYXNlIGlzIGFscmVhZHkgYXR0YWNoZWQAZGF0YWJhc2Ugc2NoZW1hIGhhcyBjaGFuZ2VkAGV4Y2x1ZGVkAFBvaW50ZXIgbWFwIHBhZ2UgJWQgaXMgcmVmZXJlbmNlZABSb3dTZXRBZGQARmlsdGVyQWRkAHByZWFkAFJvd1NldFJlYWQAT3BlblJlYWQAJTA0ZAAlMDNkACUwMmQANDBmLTIxYS0yMWQAc3FsaXRlX3N0YXQlZABjb2x1bW4lZABzcWxpdGVfYXV0b2luZGV4XyVzXyVkAHZhcmlhYmxlIG51bWJlciBtdXN0IGJlIGJldHdlZW4gPzEgYW5kID8lZABGYWlsZWQgdG8gcmVhZCBwdHJtYXAga2V5PSVkAHVuYWJsZSB0byBnZXQgdGhlIHBhZ2UuIGVycm9yIGNvZGU9JWQAT2Zmc2V0ICVkIG91dCBvZiByYW5nZSAlZC4uJWQAayglZABVUERBVEUgJVEuc3FsaXRlX21hc3RlciBTRVQgcm9vdHBhZ2U9JWQgV0hFUkUgIyVkIEFORCByb290cGFnZT0jJWQAVVBEQVRFICVRLnNxbGl0ZV9tYXN0ZXIgU0VUIHR5cGU9JyVzJywgbmFtZT0lUSwgdGJsX25hbWU9JVEsIHJvb3RwYWdlPSMlZCwgc3FsPSVRIFdIRVJFIHJvd2lkPSMlZABVUERBVEUgJVEuc3FsaXRlX21hc3RlciBTRVQgdHlwZT0ndGFibGUnLCBuYW1lPSVRLCB0YmxfbmFtZT0lUSwgcm9vdHBhZ2U9MCwgc3FsPSVRIFdIRVJFIHJvd2lkPSMlZAB0b28gbWFueSBhdHRhY2hlZCBkYXRhYmFzZXMgLSBtYXggJWQAdG9vIG1hbnkgYXJndW1lbnRzIG9uICVzKCkgLSBtYXggJWQAZXhwZWN0ZWQgJWQgY29sdW1ucyBmb3IgJyVzJyBidXQgZ290ICVkAGF0dGVtcHQgdG8gb3BlbiAiJXMiIGFzIGZpbGUgZGVzY3JpcHRvciAlZABpbnZhbGlkIHBhZ2UgbnVtYmVyICVkAGZhaWxlZCB0byBnZXQgcGFnZSAlZAAybmQgcmVmZXJlbmNlIHRvIHBhZ2UgJWQAZnJlZWxpc3QgbGVhZiBjb3VudCB0b28gYmlnIG9uIHBhZ2UgJWQAYnRyZWVJbml0UGFnZSgpIHJldHVybnMgZXJyb3IgY29kZSAlZAAlcyBpcyAlZCBidXQgc2hvdWxkIGJlICVkACVyICVzIEJZIHRlcm0gb3V0IG9mIHJhbmdlIC0gc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgJWQAc3ViLXNlbGVjdCByZXR1cm5zICVkIGNvbHVtbnMgLSBleHBlY3RlZCAlZABJTiguLi4pIGVsZW1lbnQgaGFzICVkIHRlcm0lcyAtIGV4cGVjdGVkICVkACVzTElTVCBTVUJRVUVSWSAlZABSRVVTRSBMSVNUIFNVQlFVRVJZICVkACVzU0NBTEFSIFNVQlFVRVJZICVkAFJFVVNFIFNVQlFVRVJZICVkAElOREVYICVkAHRvbyBtYW55IEZST00gY2xhdXNlIHRlcm1zLCBtYXg6ICVkAHJ3YwB1dGMAZGVzYwBhc2MAY2hlY2twb2ludF9mdWxsZnN5bmMAZnVsbF9mc3luYwBjaGFyaW5kZXhGdW5jAHNxcnRGdW5jAGNvdEZ1bmMAcmlnaHRGdW5jAGxlZnRGdW5jAGFjb3NGdW5jAGZsb29yRnVuYwBwb3dlckZ1bmMAc3RyZmlsdGVyRnVuYwBwcm9wZXJGdW5jAHBhZHJGdW5jAGV4cEZ1bmMAYXNpbkZ1bmMAc2lnbkZ1bmMAYXRhbkZ1bmMAY2VpbEZ1bmMAcGFkbEZ1bmMAY290aEZ1bmMAYWNvc2hGdW5jAGFzaW5oRnVuYwBhdGFuaEZ1bmMAbG9nRnVuYwByYWQyZGVnRnVuYwByZXZlcnNlRnVuYwBQdXJlRnVuYwBzcXVhcmVGdW5jAGRpZmZlcmVuY2VGdW5jAGRlZzJyYWRGdW5jAHBhZGNGdW5jAGF0bjJGdW5jAGxvZzEwRnVuYwBlbmMAbnVtZXJpYwAxPT1hcmdjAFNxbEV4ZWMAcGFkYwAlLjRjJXMlLjE2YwBzcWxpdGUtc3JjL3NxbGl0ZS1hbWFsZ2FtYXRpb24tMzM5MDMwMC9leHRlbnNpb24tZnVuY3Rpb25zLmMAJXMvZXRpbHFzXyVsbHglYwB1bnJlY29nbml6ZWQgbWF0Y2hpbmZvIHJlcXVlc3Q6ICVjAEdvc3ViAGdsb2IAemVyb2Jsb2IAcmFuZG9tYmxvYgBCbG9iAGlsYgBpdGlsaWIAbWVtZGIAQVRUQUNIICVRIEFTIHZhY3V1bV9kYgByb3RhAGV2aXRhAGxhbm9pdGEAZXRhAFJvd0RhdGEAU29ydGVyRGF0YQBpY25hAHNxbGl0ZV90ZW1wX3NjaGVtYQBzcWxpdGVfc2NoZW1hAHdyaXRhYmxlX3NjaGVtYQB0cnVzdGVkX3NjaGVtYQBjb3JydXB0IHNjaGVtYQBQYXJzZVNjaGVtYQBpbGxhAGV6aWxhAGl0aWxhAG1zaWxhAHNxbGl0ZV8AcHJhZ21hXwBTUUxJVEVfAF9ST1dJRF8AJXMgYXQgbGluZSAlZCBvZiBbJS4xMHNdAGJpbmQgb24gYSBidXN5IHByZXBhcmVkIHN0YXRlbWVudDogWyVzXQBtYWxmb3JtZWQgTUFUQ0ggZXhwcmVzc2lvbjogWyVzXQBbJWRdAFtdAFswXQAkWwBMRUZULU1PU1QgU1VCUVVFUlkAQ09NUE9VTkQgUVVFUlkAQU5ZAGdlbmVyYXRlZCBjb2x1bW5zIGNhbm5vdCBiZSBwYXJ0IG9mIHRoZSBQUklNQVJZIEtFWQBBVVRPSU5DUkVNRU5UIGlzIG9ubHkgYWxsb3dlZCBvbiBhbiBJTlRFR0VSIFBSSU1BUlkgS0VZAGRvY2lkIElOVEVHRVIgUFJJTUFSWSBLRVkARk9SRUlHTiBLRVkAUklHSFQgUEFSVCBPRiBPUkRFUiBCWQBHUk9VUCBCWQBpaXNYAGlzaVgAQVVUT01BVElDIFBBUlRJQUwgQ09WRVJJTkcgSU5ERVgAQVVUT01BVElDIENPVkVSSU5HIElOREVYAC1taiUwNlg5JTAyWABTQ0FOIENPTlNUQU5UIFJPVwBWSUVXAGpzb25fb2JqZWN0KCkgbGFiZWxzIG11c3QgYmUgVEVYVABGSVJTVABMQVNUAEVYQ0VQVABOT1QAIElOVABJZHhMVABTZWVrTFQAU0VUIERFRkFVTFQATVVURVhfT01JVABDT01NSVQATElNSVQAUklHSFQASWR4R1QAU2Vla0dUAExFRlQARElTVElOQ1QAUkVTVFJJQ1QASU5URVJTRUNUAHRvbyBtYW55IHRlcm1zIGluIGNvbXBvdW5kIFNFTEVDVAB1bmtub3duIGpvaW4gdHlwZTogJVQlcyVUJXMlVAAtJVQAdG9vIG1hbnkgYXJndW1lbnRzIG9uIGZ1bmN0aW9uICVUAHVua25vd24gZGF0YWJhc2UgJVQAZm9yZWlnbiBrZXkgb24gJXMgc2hvdWxkIHJlZmVyZW5jZSBvbmx5IG9uZSBjb2x1bW4gb2YgdGFibGUgJVQAQ1JFQVRFIFZJUlRVQUwgVEFCTEUgJVQAaGV4IGxpdGVyYWwgdG9vIGJpZzogJXMlI1QAbm8gc3VjaCBmdW5jdGlvbjogJSNUAG5vdCBhdXRob3JpemVkIHRvIHVzZSBmdW5jdGlvbjogJSNUAERFRkFVTFRfUkVDVVJTSVZFX1RSSUdHRVJTAElOUwBFTkFCTEVfRlRTM19QQVJFTlRIRVNJUwBESVNBQkxFX0xGUwAlcyAlUwBubyBzdWNoIGluZGV4OiAlUwBjYW5ub3QgY3JlYXRlICVzIHRyaWdnZXIgb24gdmlldzogJVMAbm8gc3VjaCB0cmlnZ2VyOiAlUwBjYW5ub3QgY3JlYXRlIElOU1RFQUQgT0YgdHJpZ2dlciBvbiB0YWJsZTogJVMATUFURVJJQUxJWkUgJSFTAENPLVJPVVRJTkUgJSFTAFVTSU5HIElOREVYICVzIEZPUiBJTi1PUEVSQVRPUgBVU0lORyBST1dJRCBTRUFSQ0ggT04gVEFCTEUgJXMgRk9SIElOLU9QRVJBVE9SAE1VTFRJLUlOREVYIE9SAFNRTElURV9UTVBESVIAQUZURVIASU5URUdFUgBPUkRFUgBORUFSAERFTEVURSBGUk9NICVRLiVzIFdIRVJFICVzPSVRAG5hbWU9JVEgQU5EIHNxbD0lUQBERUxFVEUgRlJPTSAlUS5zcWxpdGVfc2VxdWVuY2UgV0hFUkUgbmFtZT0lUQAsIHguJVEAU0VMRUNUICogRlJPTSAlUS4lUQBVUERBVEUgIiV3Ii5zcWxpdGVfc2VxdWVuY2Ugc2V0IG5hbWUgPSAlUSBXSEVSRSBuYW1lID0gJVEAVVBEQVRFICIldyIuc3FsaXRlX21hc3RlciBTRVQgc3FsID0gcHJpbnRmKCclJS4lZHMsICcsc3FsKSB8fCAlUSB8fCBzdWJzdHIoc3FsLDErbGVuZ3RoKHByaW50ZignJSUuJWRzJyxzcWwpKSkgV0hFUkUgdHlwZSA9ICd0YWJsZScgQU5EIG5hbWUgPSAlUQBTRVRVUABHUk9VUABSRUNVUlNJVkUgU1RFUABOYU4AbWFsZm9ybWVkIEpTT04ATk8gQUNUSU9OAE9NSVRfTE9BRF9FWFRFTlNJT04AVU5JT04AIExFRlQtSk9JTgBCRUdJTgAsYXJnIEhJRERFTgAsc2NoZW1hIEhJRERFTgBTQ0FOAERFRkFVTFRfQVVUT1ZBQ1VVTQAgTlVNAFJUUklNAENhbm5vdCBhZGQgYSBOT1QgTlVMTCBjb2x1bW4gd2l0aCBkZWZhdWx0IHZhbHVlIE5VTEwATk9UIE5VTEwAU0VUIE5VTEwAU0VMRUNUIDEgRlJPTSAlUS4nJXFfc2VnbWVudHMnIFdIRVJFIGJsb2NraWQ9PyBBTkQgYmxvY2sgSVMgTlVMTABVTklPTiBBTEwAIFJFQUwAQ0hFQ0sAYWJvcnQgZHVlIHRvIFJPTExCQUNLAE1BVENIAFNFQVJDSABVU0lORwBFTkFCTEVfTk9STUFMSVpFACBVTklRVUUAREVMRVRFAFVQREFURQBSRUxFQVNFAE5PQ0FTRQBCRUZPUkUAQ1JFAE5PTkUASWR4TEUAU2Vla0xFAFRBQkxFADE2TEUASWR4R0UAU2Vla0dFACVzIFVTSU5HIFRFTVAgQi1UUkVFAENBU0NBREUAMTZCRQBBTkQAUk9XSUQAT0lEAERFU0MAU0VMRUNUIGlkeCwgc3RhcnRfYmxvY2ssIGxlYXZlc19lbmRfYmxvY2ssIGVuZF9ibG9jaywgcm9vdCBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsID0gPyBPUkRFUiBCWSBpZHggQVNDAFNFTEVDVCBpZHgsIHN0YXJ0X2Jsb2NrLCBsZWF2ZXNfZW5kX2Jsb2NrLCBlbmRfYmxvY2ssIHJvb3QgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCBCRVRXRUVOID8gQU5EID9PUkRFUiBCWSBsZXZlbCBERVNDLCBpZHggQVNDAFNFTEVDVCBsZXZlbCwgaWR4LCBlbmRfYmxvY2sgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCBCRVRXRUVOID8gQU5EID8gT1JERVIgQlkgbGV2ZWwgREVTQywgaWR4IEFTQwBTRUxFQ1QgaWR4IEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWw9PyBPUkRFUiBCWSAxIEFTQwBTWVNURU1fTUFMTE9DAEJMT0IAQkJCAFVQREFURSBPUiBGQUlMICVRLiclcV9zZWdkaXInIFNFVCBsZXZlbD0tMSxpZHg9PyBXSEVSRSBsZXZlbD0/IEFORCBpZHg9PwBVUERBVEUgJVEuJyVxX3NlZ2RpcicgU0VUIGlkeCA9ID8gV0hFUkUgbGV2ZWw9PyBBTkQgaWR4PT8AJXM9PwBTRUxFQ1QgJXMgV0hFUkUgcm93aWQ9PwBTRUxFQ1Qgc2l6ZSBGUk9NICVRLiclcV9kb2NzaXplJyBXSEVSRSBkb2NpZD0/AFNFTEVDVCB2YWx1ZSBGUk9NICVRLiclcV9zdGF0JyBXSEVSRSBpZD0/AD8sPyw/AERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsIEJFVFdFRU4gPyBBTkQgPwBTRUxFQ1QgbWF4KGxldmVsKSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsIEJFVFdFRU4gPyBBTkQgPwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnbWVudHMnIFdIRVJFIGJsb2NraWQgQkVUV0VFTiA/IEFORCA/AFVQREFURSAlUS4nJXFfc2VnZGlyJyBTRVQgc3RhcnRfYmxvY2sgPSA/LCByb290ID0gP1dIRVJFIGxldmVsID0gPyBBTkQgaWR4ID0gPwBTRUxFQ1QgaWR4LCBzdGFydF9ibG9jaywgbGVhdmVzX2VuZF9ibG9jaywgZW5kX2Jsb2NrLCByb290IEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/IEFORCBpZHggPSA/AERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsID0gPyBBTkQgaWR4ID0gPwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCA9ID8AU0VMRUNUIGNvdW50KCopIEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/AFNFTEVDVCAlcyBXSEVSRSByb3dpZCA9ID8AREVMRVRFIEZST00gJVEuJyVxX2NvbnRlbnQnIFdIRVJFIHJvd2lkID0gPwBERUxFVEUgRlJPTSAlUS4nJXFfZG9jc2l6ZScgV0hFUkUgZG9jaWQgPSA/ACwgPwA8ZXhwcj4APGI+ADxiPi4uLjwvYj4ALT4+AC0+AHNlcGFyYXRvcnM9AHRva2VuY2hhcnM9AGF1dG9tZXJnZT0APABJTlNFUlQgSU5UTyAlUS5zcWxpdGVfbWFzdGVyIFZBTFVFUygnaW5kZXgnLCVRLCVRLCMlZCwlUSk7AENSRUFURSBUQUJMRSAlUS4nJXFfc2VnbWVudHMnKGJsb2NraWQgSU5URUdFUiBQUklNQVJZIEtFWSwgYmxvY2sgQkxPQik7AENSRUFURSBUQUJMRSAlUS4nJXFfZG9jc2l6ZScoZG9jaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgc2l6ZSBCTE9CKTsAQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJVEuJyVxX3N0YXQnKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIHZhbHVlIEJMT0IpOwBDUkVBVEUgVEFCTEUgJVEuJyVxX3NlZ2RpcicobGV2ZWwgSU5URUdFUixpZHggSU5URUdFUixzdGFydF9ibG9jayBJTlRFR0VSLGxlYXZlc19lbmRfYmxvY2sgSU5URUdFUixlbmRfYmxvY2sgSU5URUdFUixyb290IEJMT0IsUFJJTUFSWSBLRVkobGV2ZWwsIGlkeCkpOwBVUERBVEUgJVEuc3FsaXRlX21hc3RlciBTRVQgdGJsX25hbWUgPSAlUSwgbmFtZSA9IENBU0UgV0hFTiB0eXBlPSd0YWJsZScgVEhFTiAlUSBXSEVOIG5hbWUgTElLRSAnc3FsaXRlWF9hdXRvaW5kZXglJScgRVNDQVBFICdYJyAgICAgIEFORCB0eXBlPSdpbmRleCcgVEhFTiAnc3FsaXRlX2F1dG9pbmRleF8nIHx8ICVRIHx8IHN1YnN0cihuYW1lLCVkKzE4KSBFTFNFIG5hbWUgRU5EIFdIRVJFIHRibF9uYW1lPSVRIENPTExBVEUgbm9jYXNlIEFORCAodHlwZT0ndGFibGUnIE9SIHR5cGU9J2luZGV4JyBPUiB0eXBlPSd0cmlnZ2VyJyk7AERST1AgVEFCTEUgSUYgRVhJU1RTICVRLiclcV9zZWdtZW50cyc7RFJPUCBUQUJMRSBJRiBFWElTVFMgJVEuJyVxX3NlZ2Rpcic7RFJPUCBUQUJMRSBJRiBFWElTVFMgJVEuJyVxX2RvY3NpemUnO0RST1AgVEFCTEUgSUYgRVhJU1RTICVRLiclcV9zdGF0JzslcyBEUk9QIFRBQkxFIElGIEVYSVNUUyAlUS4nJXFfY29udGVudCc7AEFMVEVSIFRBQkxFICVRLiclcV9jb250ZW50JyAgUkVOQU1FIFRPICclcV9jb250ZW50JzsAQUxURVIgVEFCTEUgJVEuJyVxX3N0YXQnICBSRU5BTUUgVE8gJyVxX3N0YXQnOwBBTFRFUiBUQUJMRSAlUS4nJXFfc2VnbWVudHMnIFJFTkFNRSBUTyAnJXFfc2VnbWVudHMnOwBBTFRFUiBUQUJMRSAlUS4nJXFfc2VnZGlyJyAgIFJFTkFNRSBUTyAnJXFfc2VnZGlyJzsAQUxURVIgVEFCTEUgJVEuJyVxX2RvY3NpemUnICBSRU5BTUUgVE8gJyVxX2RvY3NpemUnOwA6bWVtb3J5OgBmaWxlOgBTdHJpbmc4AHV0ZjgAMjAyMi0wOS0wNSAxMTowMjoyMyA0NjM1ZjRhNjljOGMyYThkZjI0MmIzODRhOTkyYWVhNzEyMjRlMzlhMmNjYWI0MmQ4YzBiMDYwMmYxZTgyNmU4AFVURjgAVVRGLTgATUFYX0ZVTkNUSU9OX0FSRz0xMjcAREVGQVVMVF9TRUNUT1JfU0laRT00MDk2AERFRkFVTFRfUEFHRV9TSVpFPTQwOTYATUFYX1ZBUklBQkxFX05VTUJFUj0zMjc2NgBNQVhfUEFHRV9TSVpFPTY1NTM2AFVURjE2AFVURi0xNgBwNQB0b28gbWFueSByZWZlcmVuY2VzIHRvICIlcyI6IG1heCA2NTUzNQBzcWxpdGVfc3RhdDQAZnRzNABwNABERUZBVUxUX0ZJTEVfRk9STUFUPTQASW50NjQAcHdyaXRlNjQAcHJlYWQ2NABNQUxMT0NfU09GVF9MSU1JVD0xMDI0AHNxbGl0ZV9zdGF0MwBTQVZFUE9JTlQgZnRzMwBST0xMQkFDSyBUTyBmdHMzAFJFTEVBU0UgZnRzMwBwMwBFTkFCTEVfRlRTMwBNQVhfUEFHRV9DT1VOVD0xMDczNzQxODIzAHAyAGF0bjIAYXRhbjIAcmVtb3ZlX2RpYWNyaXRpY3M9MgBERUZBVUxUX1NZTkNIUk9OT1VTPTIAREVGQVVMVF9XQUxfU1lOQ0hST05PVVM9MgBhcmdjPT0zIHx8YXJnYz09MgBNQVhfREVGQVVMVF9QQUdFX1NJWkU9ODE5MgBTRUxFQ1QgdGJsLGlkeCxzdGF0IEZST00gJVEuc3FsaXRlX3N0YXQxAEFnZ1N0ZXAxAHJlbW92ZV9kaWFjcml0aWNzPTEAQVRPTUlDX0lOVFJJTlNJQ1M9MQBURU1QX1NUT1JFPTEAYXJnYz09MQB1bmljb2RlNjEAVVBEQVRFIE9SIEZBSUwgJVEuJyVxX3NlZ2RpcicgU0VUIGxldmVsPT8gV0hFUkUgbGV2ZWw9LTEAREVGQVVMVF9KT1VSTkFMX1NJWkVfTElNSVQ9LTEAU0VMRUNUIGxldmVsLCBjb3VudCgqKSBBUyBjbnQgRlJPTSAlUS4nJXFfc2VnZGlyJyAgIEdST1VQIEJZIGxldmVsIEhBVklORyBjbnQ+PT8gIE9SREVSIEJZIChsZXZlbCAlJSAxMDI0KSBBU0MsIDIgREVTQyBMSU1JVCAxAFNFTEVDVCAoU0VMRUNUIG1heChpZHgpIEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/KSArIDEAU0VMRUNUJ0lOU0VSVCBJTlRPIHZhY3V1bV9kYi4nfHxxdW90ZShuYW1lKXx8JyBTRUxFQ1QqRlJPTSIldyIuJ3x8cXVvdGUobmFtZSlGUk9NIHZhY3V1bV9kYi5zcWxpdGVfc2NoZW1hIFdIRVJFIHR5cGU9J3RhYmxlJ0FORCBjb2FsZXNjZShyb290cGFnZSwxKT4wAFNFTEVDVCBzcWwgRlJPTSAiJXciLnNxbGl0ZV9zY2hlbWEgV0hFUkUgdHlwZT0ndGFibGUnQU5EIG5hbWU8PidzcWxpdGVfc2VxdWVuY2UnIEFORCBjb2FsZXNjZShyb290cGFnZSwxKT4wAHJlbW92ZV9kaWFjcml0aWNzPTAATUFYX1dPUktFUl9USFJFQURTPTAAREVGQVVMVF9XT1JLRVJfVEhSRUFEUz0wAE1BWF9NTUFQX1NJWkU9MABERUZBVUxUX01NQVBfU0laRT0wAFRIUkVBRFNBRkU9MAA5MjIzMzcyMDM2ODU0Nzc1ODAAREVGQVVMVF9QQ0FDSEVfSU5JVFNaPTIwAGxvZzEwAE1BWF9BVFRBQ0hFRD0xMABNQVhfQ09NUE9VTkRfU0VMRUNUPTUwMAA/MDAwAE1BWF9DT0xVTU49MjAwMABERUZBVUxUX0NBQ0hFX1NJWkU9LTIwMDAAREVGQVVMVF9XQUxfQVVUT0NIRUNLUE9JTlQ9MTAwMABNQVhfRVhQUl9ERVBUSD0xMDAwAE1BWF9UUklHR0VSX0RFUFRIPTEwMDAATUFYX0xJS0VfUEFUVEVSTl9MRU5HVEg9NTAwMDAATUFYX1ZEQkVfT1A9MjUwMDAwMDAwAE1BWF9MRU5HVEg9MTAwMDAwMDAwMABNQVhfU1FMX0xFTkdUSD0xMDAwMDAwMDAwAHNlY29uZCBhcmd1bWVudCB0byAlI1QoKSBtdXN0IGJlIGEgY29uc3RhbnQgYmV0d2VlbiAwLjAgYW5kIDEuMABDT01QSUxFUj1jbGFuZy0xNi4wLjAAL3Byb2Mvc2VsZi9mZC8AJVEuAE4uACQuAC0tACwAbm9za2lwc2NhbioAdW5vcmRlcmVkKgBzej1bMC05XSoAKHN1YnF1ZXJ5LSV1KQAoam9pbi0ldSkAQ1JFQVRFIFRBQkxFIHgodHlwZSB0ZXh0LG5hbWUgdGV4dCx0YmxfbmFtZSB0ZXh0LHJvb3RwYWdlIGludCxzcWwgdGV4dCkAQ1JFQVRFIFRBQkxFICVRLiVzKCVzKQBhdXRvbWF0aWMgaW5kZXggb24gJXMoJXMpAEFOWSglcykASU5TRVJUIElOVE8gJVEuJyVxX2NvbnRlbnQnIFZBTFVFUyglcykAQ1JFQVRFIFRBQkxFICVRLiclcV9jb250ZW50JyglcykAbWFsZm9ybWVkIGRhdGFiYXNlIHNjaGVtYSAoJXMpAE1FUkdFICglcykAQ1JFQVRFIFRBQkxFICVRLnNxbGl0ZV9zZXF1ZW5jZShuYW1lLHNlcSkAQ1JFQVRFIFRBQkxFIHgoaW5wdXQsIHRva2VuLCBzdGFydCwgZW5kLCBwb3NpdGlvbikAVVBEQVRFICIldyIuc3FsaXRlX21hc3RlciBTRVQgc3FsID0gc3FsaXRlX2Ryb3BfY29sdW1uKCVkLCBzcWwsICVkKSBXSEVSRSAodHlwZT09J3RhYmxlJyBBTkQgdGJsX25hbWU9JVEgQ09MTEFURSBub2Nhc2UpAG1lbWRiKCVwLCVsbGQpAEJhZCBwdHIgbWFwIGVudHJ5IGtleT0lZCBleHBlY3RlZD0oJWQsJWQpIGdvdD0oJWQsJWQpACVzKCVkKQB6ZXJvYmxvYiglZCkAbWF4IHJvb3RwYWdlICglZCkgZGlzYWdyZWVzIHdpdGggaGVhZGVyICglZCkARlRTIGV4cHJlc3Npb24gdHJlZSBpcyB0b28gbGFyZ2UgKG1heGltdW0gZGVwdGggJWQpAEV4cHJlc3Npb24gdHJlZSBpcyB0b28gbGFyZ2UgKG1heGltdW0gZGVwdGggJWQpAChibG9iKQBVU0UgVEVNUCBCLVRSRUUgRk9SICVzKERJU1RJTkNUKQBVUERBVEUgIiV3Ii5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX2NvbHVtbihzcWwsIHR5cGUsIG5hbWUsICVRLCAlUSwgJWQsICVRLCAlZCwgJWQpIFdIRVJFIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZVhfJSUnIEVTQ0FQRSAnWCcgIEFORCAodHlwZSAhPSAnaW5kZXgnIE9SIHRibF9uYW1lID0gJVEpAENSRUFURSBUQUJMRSB4KGtleSx2YWx1ZSx0eXBlLGF0b20saWQscGFyZW50LGZ1bGxrZXkscGF0aCxqc29uIEhJRERFTixyb290IEhJRERFTikAQ1JFQVRFIFRBQkxFIHgodGVybSwgY29sLCBkb2N1bWVudHMsIG9jY3VycmVuY2VzLCBsYW5ndWFnZWlkIEhJRERFTikAQ1JFQVRFIFRBQkxFIHgoJXMgJVEgSElEREVOLCBkb2NpZCBISURERU4sICVRIEhJRERFTikAKE5VTEwpACVjPykAU0VMRUNUIE5PVCBFWElTVFMoU0VMRUNUIGRvY2lkIEZST00gJVEuJyVxX2NvbnRlbnQnIFdIRVJFIHJvd2lkIT0/KQBSRVBMQUNFIElOVE8gJVEuJyVxX3NlZ2RpcicgVkFMVUVTKD8sPyw/LD8sPyw/KQBSRVBMQUNFIElOVE8gJVEuJyVxX3N0YXQnIFZBTFVFUyg/LD8pAFJFUExBQ0UgSU5UTyAlUS4nJXFfZG9jc2l6ZScgVkFMVUVTKD8sPykALCVzKD8pAFJFUExBQ0UgSU5UTyAlUS4nJXFfc2VnbWVudHMnKGJsb2NraWQsIGJsb2NrKSBWQUxVRVMoPywgPykAU0VMRUNUIGNvYWxlc2NlKChTRUxFQ1QgbWF4KGJsb2NraWQpIEZST00gJVEuJyVxX3NlZ21lbnRzJykgKyAxLCAxKQBJTlNFUlQgSU5UTyB2YWN1dW1fZGIuc3FsaXRlX3NjaGVtYSBTRUxFQ1QqRlJPTSAiJXciLnNxbGl0ZV9zY2hlbWEgV0hFUkUgdHlwZSBJTigndmlldycsJ3RyaWdnZXInKSBPUih0eXBlPSd0YWJsZSdBTkQgcm9vdHBhZ2U9MCkAd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmdW5jdGlvbiBzbmlwcGV0KCkAbWlzdXNlIG9mIGFnZ3JlZ2F0ZTogJXMoKQBtaXN1c2Ugb2YgJXMgZnVuY3Rpb24gJSNUKCkAd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmdW5jdGlvbiAlI1QoKQB1bnNhZmUgdXNlIG9mICUjVCgpAEZJTFRFUiBtYXkgbm90IGJlIHVzZWQgd2l0aCBub24tYWdncmVnYXRlICUjVCgpAHVua25vd24gZnVuY3Rpb246ICUjVCgpAG1pc3VzZSBvZiBhZ2dyZWdhdGU6ICUjVCgpAGFtYmlndW91cyByZWZlcmVuY2UgdG8gJXMgaW4gVVNJTkcoKQBVUERBVEUgdGVtcC5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX2NvbHVtbihzcWwsIHR5cGUsIG5hbWUsICVRLCAlUSwgJWQsICVRLCAlZCwgMSkgV0hFUkUgdHlwZSBJTiAoJ3RyaWdnZXInLCAndmlldycpAFVQREFURSBzcWxpdGVfdGVtcF9zY2hlbWEgU0VUIHNxbCA9IHNxbGl0ZV9yZW5hbWVfdGFibGUoJVEsIHR5cGUsIG5hbWUsIHNxbCwgJVEsICVRLCAxKSwgdGJsX25hbWUgPSBDQVNFIFdIRU4gdGJsX25hbWU9JVEgQ09MTEFURSBub2Nhc2UgQU5EICAgc3FsaXRlX3JlbmFtZV90ZXN0KCVRLCBzcWwsIHR5cGUsIG5hbWUsIDEsICdhZnRlciByZW5hbWUnLCAwKSBUSEVOICVRIEVMU0UgdGJsX25hbWUgRU5EIFdIRVJFIHR5cGUgSU4gKCd2aWV3JywgJ3RyaWdnZXInKQAsJXMoeC4nYyVkJXEnKQBJTlNFUlQgSU5UTyAlUS5zcWxpdGVfbWFzdGVyIFZBTFVFUygndHJpZ2dlcicsJVEsJVEsMCwnQ1JFQVRFIFRSSUdHRVIgJXEnKQBTRUxFQ1QgMiAqIHRvdGFsKDEgKyBsZWF2ZXNfZW5kX2Jsb2NrIC0gc3RhcnRfYmxvY2spICAgRlJPTSAoU0VMRUNUICogRlJPTSAlUS4nJXFfc2VnZGlyJyAgICAgICAgIFdIRVJFIGxldmVsID0gPyBPUkRFUiBCWSBpZHggQVNDIExJTUlUID8gICkACikAQkxPT00gRklMVEVSIE9OICVTICgAU0VMRUNUIHNxbCBGUk9NICIldyIuc3FsaXRlX3NjaGVtYSBXSEVSRSB0eXBlPSdpbmRleCcAREVMRVRFIEZST00gJVEuc3FsaXRlX21hc3RlciBXSEVSRSBuYW1lPSVRIEFORCB0eXBlPSdpbmRleCcAbmFtZT0nJXEnIEFORCB0eXBlPSdpbmRleCcAREVMRVRFIEZST00gJVEuJyVxX2NvbnRlbnQnAERFTEVURSBGUk9NICVRLiclcV9zdGF0JwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnbWVudHMnAERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInAFNFTEVDVCA/IFVOSU9OIFNFTEVDVCBsZXZlbCAvICgxMDI0ICogPykgRlJPTSAlUS4nJXFfc2VnZGlyJwBTRUxFQ1QgbWF4KCBsZXZlbCAlJSAxMDI0ICkgRlJPTSAlUS4nJXFfc2VnZGlyJwBERUxFVEUgRlJPTSAlUS5zcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9JVEgQU5EIHR5cGU9J3RyaWdnZXInAERFTEVURSBGUk9NICVRLnNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JVEgYW5kIHR5cGUhPSd0cmlnZ2VyJwB0YmxfbmFtZT0nJXEnIEFORCB0eXBlIT0ndHJpZ2dlcicAJyUuKnEnACV6LCAnYyVkJXEnAHR5cGU9J3RyaWdnZXInIEFORCBuYW1lPSclcScALCB4LiclcScAaW5kZXggJyVxJwBKU09OIHBhdGggZXJyb3IgbmVhciAnJXEnAERFTEVURSBGUk9NICVRLiclcV9kb2NzaXplJwBVUERBVEUgIiV3Ii5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX3RhYmxlKCVRLCB0eXBlLCBuYW1lLCBzcWwsICVRLCAlUSwgJWQpIFdIRVJFICh0eXBlIT0naW5kZXgnIE9SIHRibF9uYW1lPSVRIENPTExBVEUgbm9jYXNlKUFORCAgIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZVhfJSUnIEVTQ0FQRSAnWCcAU0VMRUNUIENBU0UgV0hFTiBxdWlja19jaGVjayBHTE9CICdDSEVDSyonIFRIRU4gcmFpc2UoQUJPUlQsJ0NIRUNLIGNvbnN0cmFpbnQgZmFpbGVkJykgRUxTRSByYWlzZShBQk9SVCwnTk9UIE5VTEwgY29uc3RyYWludCBmYWlsZWQnKSBFTkQgIEZST00gcHJhZ21hX3F1aWNrX2NoZWNrKCVRLCVRKSBXSEVSRSBxdWlja19jaGVjayBHTE9CICdDSEVDSyonIE9SIHF1aWNrX2NoZWNrIEdMT0IgJ05VTEwqJwBVUERBVEUgIiV3Ii5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX3F1b3RlZml4KCVRLCBzcWwpV0hFUkUgbmFtZSBOT1QgTElLRSAnc3FsaXRlWF8lJScgRVNDQVBFICdYJyBBTkQgc3FsIE5PVCBMSUtFICdjcmVhdGUgdmlydHVhbCUlJwBVUERBVEUgdGVtcC5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX3F1b3RlZml4KCd0ZW1wJywgc3FsKVdIRVJFIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZVhfJSUnIEVTQ0FQRSAnWCcgQU5EIHNxbCBOT1QgTElLRSAnY3JlYXRlIHZpcnR1YWwlJScAc3FsaXRlXF8lACQAU0VMRUNUKkZST00iJXciAFNFTEVDVCByYWlzZShBQk9SVCwlUSkgRlJPTSAiJXciLiIldyIAQU5BTFlaRSAiJXciLiIldyIAZm9yZWlnbiBrZXkgbWlzbWF0Y2ggLSAiJXciIHJlZmVyZW5jaW5nICIldyIAZG91YmxlLXF1b3RlZCBzdHJpbmcgbGl0ZXJhbDogIiV3IgBzeW50YXggZXJyb3IgYWZ0ZXIgY29sdW1uIG5hbWUgIiUuKnMiACVjIiVzIgAoIiVzIgBjYW5ub3QgJXMgJXMgIiVzIgBnZW5lcmF0ZWQgY29sdW1uIGxvb3Agb24gIiVzIgBjYW5ub3QgSU5TRVJUIGludG8gZ2VuZXJhdGVkIGNvbHVtbiAiJXMiAGVycm9yIGluIGdlbmVyYXRlZCBjb2x1bW4gIiVzIgBjYW5ub3QgVVBEQVRFIGdlbmVyYXRlZCBjb2x1bW4gIiVzIgAlcyBpbiAiJXMiAFVQU0VSVCBub3QgaW1wbGVtZW50ZWQgZm9yIHZpcnR1YWwgdGFibGUgIiVzIgB1bnNhZmUgdXNlIG9mIHZpcnR1YWwgdGFibGUgIiVzIgBjYW5ub3QgY3JlYXRlIGEgVEVNUCBpbmRleCBvbiBub24tVEVNUCB0YWJsZSAiJXMiAG5vIHN1Y2ggaW5kZXg6ICIlcyIAdW5rbm93biBkYXRhdHlwZSBmb3IgJXMuJXM6ICIlcyIAY2Fubm90IGRyb3AgJXMgY29sdW1uOiAiJXMiAG5vIHN1Y2ggY29sdW1uOiAiJXMiAG5vIHN1Y2ggY29sdW1uOiAiJVQiAHVucmVjb2duaXplZCB0b2tlbjogIiVUIgB3ZWVrZGF5IABub24tdW5pcXVlIGVudHJ5IGluIGluZGV4IAB3cm9uZyAjIG9mIGVudHJpZXMgaW4gaW5kZXggACBtaXNzaW5nIGZy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KQAAcUQAANYzAAD2MgAA9CoAAHkgAAB2DAAALSUAAEE4AADWMwAAr0EAAFkrAAA1BQAA1jMAAIApAAD2MgAAEEMAAAYuAACAEwAAjSsAAPkFAABaLQAAywsAAHsTAAArJAAA1jMAAOAvAACtKQAA4ysAABA1AADeNwAAFgoAABs4AAArJAAA1jMAADY0AAAmBAAAEi4AAHc5AAB3MgAATQ0AADAvAADoBwAAAwIBAEH0lQILJzsAOwA7ADsAAAA7ADsAOwAAADsAOwA7ADsAAAAAAAAAOwAAAAAAOwBBpJYCCys7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAAAAAAAAAOwA7AEHolgILUTsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwBB8JgCC5QD//3//QD////+/v79+/r/AP3/APv+AP3+//4A/Pr+AAD+/fz8/P39+/78/P/+/fwA/wD+/v39/f7+///+/f4A/v4A//75+/v2AAD9AP7///z+APf8//38//3//v/39vz7//8AAPv9+/4AAP7+APv6+Pr6AP7//f/9+/3//v38/vwAAP3+AP37/f//AP7+AAD9AP4A/vz8+gD+AP7+/Pf7+f37+fgA/vT3+/j+/v8A/f3//f///fv//////fr7/Pr7//v9/f39/f39/f79+/79/fz6+/7+/v3//vv//vv9+/v8+/v8/gD/AAD9/wD99P8AAP37/QD+/P79/gD9+/r7+v7++/X//gD///0A/v3+/f3+9/j6/fz6/////Pr9AP7//f/9+vn6//j//PgA//3//v3//v36//3//fv7+vz7//4A/fr///7//v7+AP7+/v/+/v///P77//7///79AP/+/wD+//z+//////////4A/vz+/v3/AP/////+//8A////////////AP3/AP8AAP///f4A/P4AQZCcAgvWLHAGxQX4BEIBQgEBACcFxgXTBS0HLQctB9cBAAAAANYARQQtBy0HLQctBy0HLQctBy0HLQctBy0HLQctBw8BDwHDBMME2ABYAAEAAQABAAEAAQAoAG8AAgFpAdUBAAJHAm4CtQLcAiMDSgORAzEERQRFBEUERQRFBEUERQRFBEUERQRFBEUERQRFBEUERQRFBEUEWQRFBMAEvQO9A2MGfgbxBi0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HiQC1ALUAtQC1ALUAtQC1AF4ArgFCAEEAcABuARUCFQLkAu0EFQIVAk8ATwAVApwBnAGcAU0AnAF7AHEAcQAWABYAMggyCEgBSAFIAe8A1AHUAdQB1AH3A/cDmQFuAWkEogQVAhUCFQIVAhUCFQIVAhUCFQIVAhUCFQIVAhUCFQIVAhUCFQIVAhUCyQNtAm0CFQKCAhQDFAPMBMwENgM2A0MA+gQyCDIIMggyCDIIMggyCBsFugO6A0kC2AGAAoMBtwIaAh0CvAIVAhUCFQIVAhUCFQIVAhUCFQIVAt4AFQIVAhUCFQIVAhUCFQIVAhUCFQIVAhUCmwSbBJsEFQIVAhUCNQIVAhUCFQKUA3gEFQIVAggFFQIVAhUCFQIVAhUCFQIVAn8CMgXRADQENAQ0BDQERALRANEAIQUAA5UDiQKdBCQFlQEkBdYE+QCdBJ0E+QCdBJUB1gRZBdAB6wT0A/QD9ANYBVgFWAVYBbgAuAAuBYgDBwXIBbAGsAZhBmEG3QbdBmEGbwZzBvcG5Ab/Bv8G/wb/BmEGDgeNBnMGcwaNBvcG5AaNBuQGjQZhBg4HigbzBmEGDgcfB2EGDgdhBg4HHwfEBsQGxAYCBzAHMAcfB8QGygbEBgIHxAbEBqUGNAfeBt4GHwdhBv0G/QYPBw8HzgbYBlUHYQbPBs4G3wblBo0GVwdpB2kHegd6B3oHMggyCDIIMggyCDIIMggyCDIIMggyCDIIMggyCDIIzwBHBEsBbAKHAyYDMgTLBZgFyQUqBVoFcgXrBQsFCgYLBhUGOwY+Bj8GmgWtBVIGtgUfBtEFbAZ2BlAGfAYMBg0GkgaVBj0G5gKVB5kHhwf7BpEHlAeOB5AHHQcSBygHkgeSB5YHHgebByAHnQewByQHMQeSBzIHeAeTB5IHIgeBB4IHhQeGBzoHSQecBzMHvge8B6wHUAcjB4gHsgeJB4MHpgc4B10HuQe/B8EHTwdYB8AHlwfCB8MHxAfGB5oHowfHB3cHxQfKB58HyAfMB1EHzgfQB9EH0gfTB9QHzweNB2IH2QfaB3YH1QfcB2QH2wfWB9cH2AfdB54HqgelB94HsQegB98H5wfqB+sH6QfsB+IHeQd7B+8H2wfxB/QH9Qf2B/cH+Af7BwMI/Af9B/4H/wcBCAIIAAiYB48HoQeiB6QHBAgHCAUIGQgaCMEAwQDBABIBEwEUAcEAEgETARQBwQDfANsA4QDOANIA0wDUAMEAEwDbAOkA2ADYANkA2ADZAMEAJwHYANkAHwDBANgA2QDBAOQA1QDmACcAzgDYANkAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAwQATALkAugC7ALwAvQC+AP0AEgETARQBwwDBAMUAwQAFARIBEwEUAf0AzADuAMwAUQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQASARMBFAEGAWYAZwBoAGkAagBrAGwAbQBuAG8AcABxAO8A8ADvAPAA0gDTANQAOgE7AToBOwA8AVYA/ABYAPwAEwA6ATsBAAEBAXEAGQBIACgBigCLAAoBZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAUQAkATsAJAEqAWwAbQBuAG8AcABxAEUAdAB1AHYASABqAGsAwQBvAHAAcQA2ADcAOAA5ADoAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAeAAZANgA2QCRAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAOcAigCLAHQAdQB2AKQAmQATAJsANgA3ADgAOQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQCAAIEALgAvADAAMQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDYAMEAGQA7AMEAEwClAKYAwQBDABgAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEASQDYANkAOwDYANkAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAeQCRADsAwQB0AHUAdgB3ABEBzAB6AHsAfAATABQAhgAWAIgAiQATAIQAfwCAAIEAGAAWABcAdAB1AHYAJADBAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAO8A8AA3ATgB1wBqAGsA8QATADsA2ADZAN8A/ABzAHQAdQB2AJcAeAAaAEcAwQA0ATUBwQCVAIAAOQHYAA0BUQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQD9ANgA2QBkAF8AmQA7AJsABQFqAGsAGQDBAGUAwQDBAOcAcgAZAHQAdQB2AHEAMAF5AMEAzAA7AHcAeAB5AHoAewB8AH0A2ADZAMEA2ADZAIMAigCLAOYAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAmQCaAJsAnACdAO8A8AB0AHUAdgBMAMEAFwATABkAFgD9ABcA/AD9AGwAVwDMAFkABQHGAFwABQF0AHUAdgDBADIBMwHYANkAlgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA7AMEA2ADZABMA7wDwABsBFwBqAGsAbABtAG4AbwBwAHEASQD8AP0AjgA0ATUBigCLAFEAOQGRACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADMBZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAGQF0AHUAdgAdARcAwQAZAHcAOwDBAHoAewB8ADsAfwDLADsAzQATAAwBhAAZABcAFgDBAIoAiwD5AMwA+wBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQATABYAFwA7ABcAGQDvAPAAdAB1AHYAwQALAHQAdQB2AHQAdQB2APwADQEWAMEADwArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQARAY8AwQB2AI8AZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEATAB2ADsA8QB0AHUAdgAwAdgA2QAkAY8APABZAPEAEwBcAMEAwQAXABYANwE4AecAZQAWAI8AZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAEwDBAMEAOwAXAHQAdQB2ADsAyQAVAPEAMAEWAM4AfwCAAIEAwQCAAIEA6wDsADABKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAFgDBANgA2QDBAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAOcAwQDBAMEAdAB1AHYA2ADZAHQAdQB2AOIAUADBABMA6wDsADABFwDTANQA5wDMANgA2QDNAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ABMAwQB7AEwA7wDwAMEA/QDvAPAA7wDwAMEAagBrAMEAWQD8AMEAXAA7APwAjQD8ACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ABwBoQDYANkAwQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQDnAMEAEAC7ALwAvQC+AAcACAAJADUBwwAZAMUAOQETAH8AgACBAAYBzAAWAHUAGADYANkABwFmAGcAaABpAGoAawBsAG0AbgBvAHAAcQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDBAO8A8ADBADsAEwC8AP0AvgBNAOIATwDBAMMA/ADFAMEAEwAtAS4BwQDBAMwA2ADZAOIA2ADZAAoBzACfAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEADADvAPAA6AAqAe4AdQD9AO8A8ADuAAMBBAHBAPwAGwAfAMEAwQCOAMwA/ADBAMEAJwAGAcEAZAAKARYBKgDMAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHUAnwDYANkAeQDYANkAPwDBAMEAwQDvAPAAcwB0AMEAKgFJAO4A7gDnABMA7wDwAPwAFgAYANMA1AAYAMEA2ADZANgA2QD8AJkAmgCbAP0AEAATAJAA1QAMASsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5AO4AEwA7AMEAOwArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQAWABcAwQAZAMEAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAHAFNAMEATwBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQAeAcEAwQDBAHUAIwF1AOgAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAzAAWABcAQgAZANgA2QAjAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAMEADAFVAGUAwQA1ATUB8AATADkBOQFeANAA0QDBAO8A8ADBAEIA/AATAAwB9ADYANkAwQBKANUA/AChABMABwH+ACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDBANgA2QAFADsAwQATAPQACgALAAwADQAOAGUANQERAJIA/gA5AcEAwQBMAHMA2ADZADUBDAAHAR4AOQEgAC4AVwAuAFkAggDBAFwAKAAWAAcBGwDYANkAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAKgCWACMB2ADZAHQAdQB2ABMAFADBABYARgAEAXQAwQAYAAgBwQAHAU4APwA9AFEAdAAkAMEABAHBAB0AwQAIAcEAIQCRAMEAOwAwANgA2QBiANgA2QDBAHMAwQBzAMEAOwDYANkA2ADZANgA2QDYANkA/wDYANkARwDBAIMAwQAZAEEA2ADZANgA2QDYANkA0ADRAFUAhQDBAGQAwQBaAIoAiwCKAIsA2ADZANgA2QDBAGQAwQBsAIcAdAB1AGoAawCMAHkA2ADZANgA2QByAKIAdAB1AHYAKwEsAXkA2ADZANgA2QDBAPQAwQCHAPQAwQAAAQEBjAD0AMEA/gDBAMEA/gCZAJoAmwCNAP4AlQCWAAIB2ADZANgA2QCZAJoAmwCcAJ0AAAABAAIA2ADZAAUAcwCeAMEAoAAKAAsADAANAA4AwQA7ABEAfgDBABMAFACBABYAwQAWABYAGADBABcAHgAZACAAEwAUAJAAFgAkANgA2QAoAMEA2ADZAMEAmACBANgA2QDBACQA2ADZAMEAYwDBAMEANQDBAMEAOwAXAMEAGQDYANkAwQDYANkAmABGADsARwA7AHUAwQDYANkATgDYANkAUQDYANkAPgFHAFUAwQCFAMEAwQBaABcAFwAZABkAeAB5AGIAVQDBAGQAwQAXAFoAGQB5AGoAawATANgA2QDYANkAZAByAIMAdAB1AHYAagBrAHkA2ADZANgA2QDBAHIAdQB0AHUAdgCFAMEAeQDBAMEAigCLAMEAFwDBABkAFwAXABkAGQAHAAgA2ADZAMEAwQCZAJoAmwCcAJ0A2ADZAMEAogDYANkA2ADZAJkAmgCbAJwAnQABAAIAwQDBAAUAEwAUADsAFgAKAAsADAANAA4AwQBhABEAwQAXAMEAGQAgASQAwQDyANgA2QDsABcAHgAZACAAEwAUABcAFgAZANgA2QAoANgA2QDYANkAwQA7ANgA2QDBACQAUwBUAJkAmQCbAJsAFwBHABkAFwDBABkAwQDBAMEAdQDBAMEAwQBGAMEAwQA7AMEA/wD/AB8BTgD/APMAUQC/AP8AKQFHAA8BZAAlAfUACwHWAPYAagBrAGwA9gAPAWIA9QAlAXIA3AB0AHUAdgALAQ8BeQAPAeEA2wDlANsAZADbAAMBAwEDAQMBagBrAPkAxAA8ABgBjQDzAHIA+QB0AHUAdgCFAPUAeQDIACkBigCLAJkAmgCbAJwAnQApAcgAJgATABQAlwAWAMgAlgCMACYBJgEWABABKwDqABIAogAOAcgAJADtAJkAmgCbAJwAnQDtABsB7QDtABIAxwCVAPYAEAEOARAByACeAPYA9gDqADsA6gD2AMcAIgE+ACEByADHABYA3QBzAEcAyADIAMcAxwDdANoA2gATABQAQAAWANoA4wAWAOAAfgDgAKUA3QAYADEByABxADgBJADaANwA2gBkABoB2gBbANoAPQFqAGsA3QDjABoBPQFSAJQAcgAJAXQAdQB2ADsAkQB5ABYAFQGeAMgACQEZAMoAkwD6AEcAFwENAJIAwgDCAPkA+AD6AIwA9wD2AAYAwADAAMAALwEvAdUAzwAsAdUAmQCaAJsAnACdANUA1QBkANUA3gDPANYA1gBqAGsABADeAM8AAwAWAKMAcgAPAHQAdQB2ABAAFwB5ABcAiwCXAIIAGQCOABAAGAAUAJAAAQCOAIIAggA9ADUANQAlAJcANQA1AIIAdAAiAAEAjQAFABYAcwChAI0AmQCaAJsAnACdABkARABEAEsAKQBzABgAgwAUABMAfQAWAGAAFgAWAEMAFwAWAEMAOwAYABYAHABDABcAFgAWAJUAFwAXABcAdAAXABkAJQBhAI0AFwAXABYAjwAZAEsAWAAiACIAIgAiAFYASwBdABcAIgAWACIAGQAYACIAGQAXAI4AFwCOACwAFwAXABcACwAXABkAFgAWABYADwAXABcAFgAWABkAAQABAI0AGQAXAIcAPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AY0AjQA/AY0APwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AQBB8MgCC+QgOALQADgCdgBzAOUAOAJ2AHMA5QA4AiIFeQENBZgBMgIyAjICOAKZAXoBIgX8BCkAKQApACkA0AD2BUcARwDLA6MBKQApAOsBLwEXAS8BzAONAUcARwB9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfADcAZkB2QQBAAEAPwICAN0EJgJ2AHMA5QA9AeABkgDgAQwCdgBzAOUAEQIvBaEBCwKOAH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AHYAcwDlAEcBegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBHAEcARwBHAG6AboBugEfBngBIQaoBHcBiwQ1AosENQKZAR8GGQIDAeIAvAFlAJEAwQE8AS8C8AB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAF9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfACOACYBqARTAcABeAB4AHgAdwB0ALwBfwCoBKkEqgSUALkBuAE4AncAdAC8AXwAfAB8AHwAdQB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAHGAXEADQANACICegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBpgE8AS8CqASpBKoElQDIBJkByAR8AHwAfAB8AHoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AdEBVgENBA0EGwQeBH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AP8ECgLeAKgEOAKZAeAAAgKvAFIAUwB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAHvAxAAEACoBIUAhQB9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfAB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAERBCICqAR1AagEqQSqBPwAmgWPAfgB9QH0AW8AMAI2AgQAngOeA7EB8wFUAcwBSAFoAYoB1QSoBKkEqgQzAjgCegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBHAEcAXEBLAZHBrkBuAGaAJkBvQFHAEcABgU1AsUEqASpBKoEVQDHBA8BLQIfAgMCGQY4AmIAxgQGAP4E2AGOAH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8ACYCDQANAAME+wHIBKgEyAQlAm0AbQDeADgC1gSvADgCqwFuAMUAvQE6AjkCrgEQBvkDRQEnAqgEDgEfAXAB/gFrAf0BAQFHAEcAHwJHAEcAZwE8AS8CTQZ6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAH5A/kD+wP8AxsAHAEcAagEqQSqBIYEOAJMBpkBhQO+ACYCZAE1AiYCqQMVAgUChgQEAp0BhgQoAqgEqQSqBDgCIAISBjMAMwDWAH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AKgE2gGHAIcAmQEcARwB0gX5AXkAeQB4AHgAeAB3AHQAvAHvAzUCBgLZAB0CGQY8AS8CjgAGABQCfQB+AFAAwQTBBBoEHQQQBBAEewB7AHwAfAB8AHwAEwZ6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAHlAagEqQSqBOIBGQHzBL0D/ACoBHUB+AH1AfQBqARUATsCqAQ7ApkBJAHzAb0DbAO/AOABPAEvAoABIgF8AXoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AX0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AJkBigFwBKgEZQNkABwBHAGoBKkEqgR1AUUEqASpBKoEqASpBKoENQLHASAAdQHpAH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AJkFvwM4AuQAvgN6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAGGBOQAqASdAKgEqQSqBBEGDQANAC0BvQPQBIYEmQCZAYYEdQEvBpgEBQBxASwGrQHWBAMAvQN6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAF9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfACZAdAANwKoBAQEqASpBKoEqASEAVQDmwAQBh4BkgFKBEoE6AE4AtEBVgEnBScFEAZ9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfACBADgCDQANAHYBegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBLgE4AsUBEAKoBKkEqgQNAA0AqASpBKoEEQXPAfMEmQElBSUFEAb0A8UBxAHIACsBRwBHAPEEegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBfQB+AFAAwQTBBBoEHQQQBBAEewB7AHwAfAB8AHwAmQHjADEEhgQcARwBowE4ARYBFgEdAR0BiwWWAZUBfgGGBDUCOAKGBKwENQJABjUCfQB+AFAAwQTBBBoEHQQQBBAEewB7AHwAfAB8AHwAxQHKBQ0ADQAABnoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AckAOAJiATIGPwICAN0ESANJA0oDGgY9AbwEkgAGAJkB/wD+AP0AzgAvBQkArAQGAUcARwCoAXoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AX0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8ADgCHAEcATgCvQSZAT4COQHdBF0BEAVgAaMBPQE1ApIA6wENAmsGiwFzAesBLwVGAEYADwVHAEcA8AAtBWgAUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfAB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAFaBBwBHAGsAcAB9QW9BLcBHAEcAdEFSAU3AdoBNQJbBMsD6wHrAdkA7wQ1AgIGOALMA88AOAIDBPAAfwFcBAcCegB6AHoAegB5AHkAeAB4AHgAdwB0ALwB+gNrAEcARwD5Aw0ADQCQAzgC1wU4AhwBHAFhAA4C6wHAAZEDLgUqBSECmQEcARwBNQKXANEA1wXZBQYBwgE3ADcAOAA4ADUC+QP5A/sDuwFMAZkBDwIMACcBfQB+AFAAwQTBBBoEHQQQBBAEewB7AHwAfAB8AHwAWwGZAWAD/gW9BH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AHEEaQbaAWkGcwF9AHIAUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfADXBUkB2gFLAXoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AcsAiwU4Ag4FYAPQAb0EtAF6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAEpAnEEagYbAmoGDwAPAHwDegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBOAIqARoCbwSLBRcGGAYzBZkBBgAGAJEE9ASfAUABHAEcAYsF/AE1Ag0CLAHJASsAKwA4An0DDAA1AkoB3gGpAZcBfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8ADgCOQA5ACABqASLBfABygGIAYgBhwERAYUBbwQWBlEDkQSXAQYAOAJBAYYE1gEsACwAFQZaBKoB6gAGAEMBAAEcAgABhgSvATgChgRCAREA5wFbBDoAOgB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAFcBNgA4QE7ADsAqASpBKoEbwAwAkQBBADsAMgBDgI4Au0AyAE4ArUBqAAsAqQBjQDfATMCOAIlATgCRwQ4AiUBOAJHBBMCOAJoAwgAPAA8AOsAPQA9ADgCngE4Ap4BOAK9AT4APgAtAC0ALgAuAC8ALwDHADEAMQAtAjgCZwE4AmQA5gEyADIAPwA/AEAAQAAxAp8BFwKaATgCAwQ4AhYCPAEvAjwBLwJBAEEADgAOADgCAwQ4AgACpANoA/oDbQBtAKMD+QNCAEIAgwCDAG4AwwG9AToCOQKgAbEA+QOEAIQAQwBDADgC0wE4AqQD1wFUBRsB4gCjAzsBUwWXATgCywGXAfkD+QP7A+8AlwFWANUARgU0ADQARABEAPkD+QP7A/wDGwAxBpwEvwFFAEUAIAFhAGwABQZqAIgBiAGHAREBhQE4Am8DUQNzAzgCbwAwAtIBBAA4ApgAHgAmADgCbATqAIwBQwFvADACDwIEADMCNQA1AEIBOAKjAKMAOAJRAdQBpACkAE0BMwJMAEwAOAIhAeoFOAIfAOkFOAK9AVIB4wFkADYANgBYAUgASAAoAewAOAQtAr0BbwNQBYYAhgCoAEkASQCNAKEAoQAmBi0CFwI4Aj8BOAJcARgC8QPZAQUBBQF7A3oD6wAXAjgCAwQ4AtsBFgIFAW8BbQBtAAkCiACIAIIAggADBG4AbgG9AToCOQJtAG0A+QOiAKIAnACcADgCbgA4BL0BOgI5ApoBXwH5AzgCYQE8AS8COAJXATgCZADxAWUBAgFkAIIDgwOMAIwAYwEeBfkD+QP7A/wDGwCLAIsAagHDAYkAiQCKAIoA+QP5A/sD/AMbAJwEvwE4AnQBIAFvADAC/QMEAIgBiAGHAREBhQE4AnUEUQM4AjQEOAICAewBMwI4AtMASwBLACsCwgPqAAUBQwFvADACoQMEAHEATQBNAEIBSgBKACoAKgBdBb0BMAAwAIoFMwLOA88DRARDBEQEQwReAy0ClgCiA0IFcQBOBSoCkAX9A/sE8gTmBOwA5QTnBL0BOQY/BTQBFAGoADUBCwCNAIkBNgHoAC0CfQUDBE8BIwF4BdsAUAFtAG0AqAMpAYIF6wBVAd0BbgD2Ab0BOgI5AnEFgQX5A5ABDQVtAd8AzgUDBM0FSwVMBUoFSQVtAG0AzAA8BtAELgIJAdoAbgDNAL0BOgI5ApoBgwH5A/0FswA8AS8C+QP5A/sD/AMbAOYA+wXNBE8AMAJVAAQAogHXACQCUQBUALwAfgWtALUAzQHDASMAzgEzArcA+QP5A/sD/AMbALgA0wW5ALoA7wHyAGIAjgGEBSQAgwXkAVsA1QGRAYYFvQHAAMgF9gDeBeoBWgEVAfgAxADtAf8BLQJeAegE+QD6AJMBIQUgBW8AMAKwAQQAHwUYBV0ASwZzA0oG4ACUAbIBCAIHAbMBKwYzAgMFAgVsAQMEMgEBBQgBSQYdBm0AbQByARcFMwEcBrYBgABuAGIFvQE6AjkCvQEiAvkDCgC6BWkAfQFhBSIAPAJjADgFLQI6AaIEEgIQARIBewHSADcFIwKBAYIBEwE9AuME3gSbAZwB7gWlALIA7wX5A/kD+wP8AxsA7QXsBQMETgCTAKYA3ADdAG0AbQBEAzABpwC+AdQAPgFuAOcAvQE6AjkCkABCBPkDQARGAbQAqQC8BLYATgHuAJMD8QBQBLsAqgCrAKUBVwBYAKcBvQBZAFoArABTBPMATwT0AJ4AEgD1AFkB9wD5A/kD+wP8AxsABQFIBMEAygTpAcIAJQBuAVMD7gH7AMMA+gFcABMA8gFmARQA9wFxA2kBXgB+AzEBnwABAicAXwCWBKAAIATGA3cEYACuAHYE4QAYARoBxgDAA3EAjASIBAQBFQAWABcAigSQBI8EfAQYACEAGQDKAB4CGgBkAC8EZgAhBGcABwAfBCMEWQQkBFgECgELARwAKACGAf4DXwNwAB0ANAKeBJ0EDAGwAI8AnQPaBNoE2gTaBNoE2gTaBNoE2gTaBNoE2gTaBNoEDQFCBtoEQQYAQeDpAguBCW8GbwZvBsMF2ARHBdgE2ATYBMMFwwXDBdgEZQVlBfgF+QTYBNgE2ATYBNgE2ATYBNgE2ATYBMIF2ATYBNgE2AQbBhsG2ATYBNgE2ATYBNgE2ATYBG4F2AR1BdgE2ATYBNgE2ATEBcUF2ATYBNgE9wX5BdQFfAV7BXoFeQXmBVkFcwVsBXAFvgW/Bb0FwQXFBcQF2ARvBZ4FrgWdBdgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEpgWtBawFqwW0BaoFpwWgBZ8FoQWiBdgE2ATwBNgE2ATtBCMF2ATYBNgE2ATYBAsGCgbYBKMF2AT5BJgFlwWxBaQFsAWvBf8FPwY+BtUF2ATYBNgE2ATYBNgEGwbYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEWwUbBhsG2AT5BBsGGwZcBVwF9QT1BF8F2AQGBj4FPgU+BT4FRwU+BdgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBPwF+gXYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ARDBdgE2ATYBNgE2ATYBNgE2ATYBNgE2AQ4BtgE4QUxBUMFQwVDBUMFRQUyBTAFPQX6BN8EZwZ/BXQFRAV0BWQGcgV/BX8FcgV/BUQFZAYKBU8GBQVlBWUFZQVbBVsFWwVbBV8FXwXABUQFPQXYBGcGZwZNBU0FZgZmBk0F1QVXBogFJgUsBSwFLAUsBU0F6gRyBVcGVwZyBYgFJgVyBSYFcgVNBeoE5QVhBk0F6gTLBU0F6gRNBeoEywUkBSQFJAUZBdgE2ATLBSQFCgUkBRkFJAUkBS0G2ATPBc8FywVNBSUGJQZoBWgFbQVfBcYFTQXYBG0FawVpBXIFHAU7BjsGNwY3BjcGbAZsBgYGSAb5BPkE+QT5BEgGDAUMBfoE+gT5BEgG2ATYBNgE2ATYBNgEQwbYBAEG1gVRBdgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2AQMBtgE2ATYBNgE2ATYBNgE2ATYBNgEjQXYBNsEAwbYBNgE2ATYBNgE2ATYBNgEdgV3BVIF2ATYBNgE2ATYBNgE2ASFBdgE2ATYBIAF2ATYBNgE2ATYBNgE2ATYBGMG2ATYBNgE2ATYBNgE5AXjBdgE2ARPBdgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgECAXYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEagXYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEKgZgBdgE2ATYBNgEWgbYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEUwY0BY8F2ASOBZIF7gTYBOQE2ATYBAkAQYDzAgvnBr0AvQC8AL4AvwC/AL8AvwC+AL4AvgC+AL4AwwDFAMcAxwDGAMYAxADEAMsAywDNAM0AzgDQANAA0ADRANUA1gDXANcA1wDXANcA1wDXANcA1wDXANcA1wDXAOAA4ADcANwA3gDeAOEA4QDhAOEA4gDiAOIA4gDiAN8A3wDjAOMA4wDKAOUA5gDmAOYA5gDmAOkA2gDaAOoA6gDrAOsAvgDtAO0AvgC+AL4AzADMAMwA7wDyAPIA8gDwAPAA/AD8APMA8wDzAP4A9AD0APQA/wD/APUA9QABAQEBAAEAAQABAAEAAcgAyADuAO4ABgEGAQYBBgECAQIBAgECAQMBAwEDAQgBBAEEAfkA+QDnAOcA2wDbANsACQEJAQkB9wD3APgA+AD6APoA+gD6AL4A9gD2AAsBCwELAQsBvgAMAQwBDAEMAb4AvgAPAQ8BDwEPAQ8BDwEQAQ0BDQEOAQ4BBwEHAdkA2QDZANkA2QDYANgA2ADZANkA2QDZANkA2QDZANgA2QDZANkA2QDZANkA2QDZANkAEgHZANkA2QDZANkA2QDZANkA2QDZANkA2QATARMB2QAUARQB2QDZANkA2QDZANkAFwEXARgBGAEWARYBBQH9AP0AFQEVAb4AGQEZAd0A3QDoAOgAGgEaAb4AvgC+ABsBGwG+AL4AvgC+AL4A0wDUAL4AHQEfAR8BHwEgASABIAEiASIBHgEeASQBJQElASMBIwEjASMB2QDZAOwA7ADsAL4AvgC+ACcBJwG+AL4AvgC+AL4AvgC+ACgBvgC+AL4AKgEsAS0BLQEuAQoBCgExATEBMQEwAfEA8QAyATIBMwE0ATQBNAE0ATQBNAE1ATUBNQE5ATsBOwE8ATwBOgE6AT0BPQE+AT4BPgH7ABEBEQERATgBOAE3AbkAugC6ALsAuwC7AMAAwADAAMIAwgC+AMsAyQDJAMEAwQDBANAA0QDSANIAzwDP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IGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE11bHRpaG9wIGF0dGVtcHRlZAAAAAAApQJbAPABtQWMBSUBgwYdA5QE/wDHAzEDCwa8AY8BfwPKBCsA2gavAEIDTgPcAQ4EFQChBg0BlAILAjgGZAK8Av8CXQPnBAsHzwLLBe8F2wXhAh4GRQKFAIICbANvBPEA8wMYBdkA2gNMBlQCewGdA70EAABRABUCuwCzA20A/wGFBC8F+QQ4AGUBRgGfALcGqAFzAlMBAEGY7wMLDCEEAAAAAAAAAAAvAgBBuO8DCwY1BEcEVgQAQc7vAwsCoAQAQeLvAwuIAUYFYAVuBWEGAADPAQAAAAAAAAAAyQbpBvkGAAAAAAL/AARkACAAAAT//wYAAQABAAEA//8B/wH//////wH/Af8B/wH/Af8B/wH/Af//////Cv8gAP//A/8B/wT/HgAAAQX//////2MAAAhjAOgDAgAAAP//////AAAAAf8B//////////////8AQfnwAwsBBABBhvEDC0QB/wH//////wABIAAEAIAAAAj//wH/Af////////8B/wb/B/8I/wn//////7wCvAIBAP//AQABAP//AAD//////////wBB2vEDCwEUAEH68QMLHv//AQAK////////////Af8B/wAAAAAAAAH/Af8B/wBBqvIDC0gB/wAAAAAAAAH/Af8BAAAAAQAAAAH//////wAAAAAB////AAAAAP////////////8oAAr//////wEACv////8A//////////8AQdbzAwscAf8B////AQD//////////////////wr//////wBBgPQDCx8BAAAAAQAAAQABAAD+//9/AAAAALAEAAAoAAAAAAABAEHA9QMLARQAQcz1AwsB+gBB+/UDCwFAAEGM9gMLCP7//3////9/AEGs9gMLKQcAAAADAAAANAAAAAACAAAAAAAAZwUAANR0AABzAAAAdAAAAHUAAAB2AEHo9gMLRXcAAAB4AAAAeQAAAHoAAAB7AAAAfAAAAH0AAAB+AAAAAwAAADQAAAAAAgAAAAAAABczAADYdAAAcwAAAHQAAAB1AAAAdgBBwPcDC0V3AAAAeAAAAHkAAAB6AAAAewAAAHwAAAB9AAAAfgAAAAMAAAA0AAAAAAIAAAAAAAAANAAA3HQAAHMAAAB0AAAAdQAAAHYAQZj4AwtFdwAAAHgAAAB5AAAAegAAAHsAAAB8AAAAfQAAAH4AAAADAAAANAAAAAACAAAAAAAAgysAANR0AABzAAAAdAAAAHUAAAB2AEHw+AMLJHcAAAB4AAAAeQAAAHoAAAB7AAAAfAAAAH0AAAB+AAAAAAAAQABBoPkDC27SKQAAlAAAAAAAAADdMQAAlQAAAAAAAAArEAAAlgAAAAAAAAD6NgAAlwAAAAAAAADYDAAAmAAAAAAAAADCDAAAmQAAAAAAAAC3MAAAmgAAAAAAAADSKgAAmwAAAAAAAABVPQAA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"); // src/utils/db/sqljs.js var import_sql = __toESM(require_sql_wasm()); var loadSQL = async () => { const sql = await (0, import_sql.default)({ wasmBinary: sql_wasm_default }); return sql; }; // node_modules/monkey-around/mjs/index.js function around(obj, factories) { const removers = Object.keys(factories).map((key2) => around1(obj, key2, factories[key2])); return removers.length === 1 ? removers[0] : function() { removers.forEach((r3) => r3()); }; } function around1(obj, method, createWrapper) { const original = obj[method], hadOwn = obj.hasOwnProperty(method); let current = createWrapper(original); if (original) Object.setPrototypeOf(current, original); Object.setPrototypeOf(wrapper, current); obj[method] = wrapper; return remove; function wrapper(...args) { if (current === original && obj[method] === wrapper) remove(); return current.apply(this, args); } function remove() { if (obj[method] === wrapper) { if (hadOwn) obj[method] = original; else delete obj[method]; } if (current === original) return; current = original; Object.setPrototypeOf(wrapper, original || Function); } } // src/utils/spaces/patches.ts var import_obsidian45 = require("obsidian"); var patchFileExplorer = (plugin) => { plugin.register( around(import_obsidian45.Workspace.prototype, { getLeavesOfType(old) { return function(type) { if (type == "file-explorer") { return old.call(this, FILE_TREE_VIEW_TYPE); } return old.call(this, type); }; } }) ); }; var patchWorkspace = (plugin) => { let layoutChanging = false; const uninstaller = around(import_obsidian45.Workspace.prototype, { changeLayout(old) { return async function(workspace) { layoutChanging = true; try { await old.call(this, workspace); } finally { layoutChanging = false; } }; }, iterateLeaves(old) { return function(arg1, arg2) { if (old.call(this, arg1, arg2)) return true; let cb = typeof arg1 === "function" ? arg1 : arg2; let parent = typeof arg1 === "function" ? arg2 : arg1; if (!parent) return false; if (layoutChanging) return false; if (parent === app.workspace.rootSplit || import_obsidian45.WorkspaceContainer && parent instanceof import_obsidian45.WorkspaceContainer) { for (const popover of FlowEditor.popoversForWindow( parent.win )) { if (old.call(this, cb, popover.rootSplit)) return true; } } return false; }; }, getDropLocation(old) { return function getDropLocation(event) { for (const popover of FlowEditor.activePopovers()) { const dropLoc = this.recursiveGetTarget(event, popover.rootSplit); if (dropLoc) { return dropLoc; } } return old.call(this, event); }; }, onDragLeaf(old) { return function(event, leaf) { const hoverPopover = FlowEditor.forLeaf(leaf); return old.call(this, event, leaf); }; } }); plugin.register(uninstaller); }; // src/main.ts var import_obsidian_dataview = __toESM(require_lib()); var MakeMDPlugin = class extends import_obsidian46.Plugin { constructor() { super(...arguments); this.dataViewAPI = () => (0, import_obsidian_dataview.getAPI)(); this.saveSpacesDB = (0, import_obsidian46.debounce)( () => saveDBAndKeepAlive(this.spaceDBInstance(), this.spacesDBPath), 1e3, true ); this.createTable = async (path) => { const dbPath = folderContextFromFolder(this, path); const schemas = await getMDBTableSchemas(this, dbPath, false); if (schemas) return uniqueNameFromString( "Table", schemas.map((f4) => f4.id) ); return "Table"; }; this.triggerVaultChangeEvent = (file, changeType, oldPath) => { let event = new CustomEvent(eventTypes.vaultChange, { detail: { file, changeType, oldPath: oldPath ? oldPath : "" } }); window.dispatchEvent(event); }; this.metadataChange = (file, data, cache) => { var _a2, _b2; let event = new CustomEvent(eventTypes.tagsChange, { detail: { file, tags: (_b2 = (_a2 = cache == null ? void 0 : cache.tags) == null ? void 0 : _a2.map((f4) => f4.tag)) != null ? _b2 : [] } }); window.dispatchEvent(event); this.addToQueue(() => onMetadataChange(this, file)); }; this.onCreate = (file) => { if (!file) return; this.triggerVaultChangeEvent(file, "create", ""); this.addToQueue(() => onFileCreated(this, file.path)); onFileCreated2(this, file.path, file instanceof import_obsidian46.TFolder); }; this.onDelete = (file) => { this.triggerVaultChangeEvent(file, "delete", ""); if (file instanceof import_obsidian46.TFile && file.extension != "mdb") { this.addToQueue(() => onFileDeleted(this, file.path)); onFileDeleted2(this, file.path); } else if (file instanceof import_obsidian46.TFolder) { this.addToQueue(() => onFolderDeleted(file.path)); onFolderDeleted2(this, file.path); } this.activeFileChange(); }; this.onRename = (file, oldPath) => { this.triggerVaultChangeEvent(file, "rename", oldPath); if (file instanceof import_obsidian46.TFile && file.extension != "mdb") { this.addToQueue(() => onFileChanged(this, oldPath, file.path)); onFileChanged2(this, oldPath, file.path); } else if (file instanceof import_obsidian46.TFolder) { this.addToQueue(() => onFolderChanged(this, oldPath, file.path)); onFolderChanged2(this, oldPath, file.path); } this.activeFileChange(); }; this.openFileTreeLeaf = async (showAfterAttach) => { let leafs = this.app.workspace.getLeavesOfType(FILE_TREE_VIEW_TYPE); if (leafs.length == 0) { let leaf = this.app.workspace.getLeftLeaf(false); await leaf.setViewState({ type: FILE_TREE_VIEW_TYPE }); if (showAfterAttach) this.app.workspace.revealLeaf(leaf); } else { leafs.forEach((leaf) => this.app.workspace.revealLeaf(leaf)); } if (platformIsMobile()) { app.workspace.leftSplit.collapse(); } replaceMobileMainMenu(this); }; this.detachFileTreeLeafs = () => { let leafs = this.app.workspace.getLeavesOfType(FILE_TREE_VIEW_TYPE); for (let leaf of leafs) { if (leaf.view instanceof FileTreeView) leaf.view.destroy(); leaf.detach(); } }; this.detachFileContextLeafs = () => { let leafs = this.app.workspace.getLeavesOfType(FILE_CONTEXT_VIEW_TYPE); for (let leaf of leafs) { if (leaf.view instanceof FileContextLeafView) leaf.view.destroy(); leaf.detach(); } }; this.openFileContextLeaf = async () => { let leafs = this.app.workspace.getLeavesOfType(FILE_CONTEXT_VIEW_TYPE); if (leafs.length == 0) { let leaf = this.app.workspace.getRightLeaf(false); await leaf.setViewState({ type: FILE_CONTEXT_VIEW_TYPE }); this.app.workspace.revealLeaf(leaf); } else { leafs.forEach((leaf) => this.app.workspace.revealLeaf(leaf)); } }; this.refreshFileContextLeafs = () => { this.detachFileContextLeafs(); this.openFileContextLeaf(); }; this.refreshTreeLeafs = () => { this.detachFileTreeLeafs(); this.openFileTreeLeaf(true); }; } async sqlJS() { const sqljs = await loadSQL(); return sqljs; } spaceDBInstance() { return this.spaceDB; } openFlow() { const cm = getActiveCM(); if (cm) { const value = cm.state.field(flowEditorInfo, false); const currPosition = cm.state.selection.main; for (let flowEditor of value) { if (flowEditor.from < currPosition.to && flowEditor.to > currPosition.from) { cm.dispatch({ annotations: toggleFlowEditor.of([flowEditor.id, 2]) }); } } } } closeFlow() { const cm = getActiveCM(); if (cm) { const value = cm.state.field(flowEditorInfo, false); const currPosition = cm.state.selection.main; for (let flowEditor of value) { if (flowEditor.from < currPosition.to && flowEditor.to > currPosition.from) { cm.dispatch({ annotations: toggleFlowEditor.of([flowEditor.id, 0]) }); } } } } quickOpen() { let quickOpenModal = new Blink(this.app, this); quickOpenModal.open(); } toggleBold() { const cm = getActiveCM(); if (cm) { cm.dispatch({ annotations: toggleMark.of("strong") }); } } toggleEm() { const cm = getActiveCM(); if (cm) { cm.dispatch({ annotations: toggleMark.of("em") }); } } async loadSpaces() { this.spacesDBPath = (0, import_obsidian46.normalizePath)( app.vault.configDir + "/plugins/make-md/Spaces.mdb" ); this.spaceDB = await getDB(await loadSQL(), this.spacesDBPath); patchWorkspace(this); document.body.classList.toggle("mk-hide-tabs", !this.settings.sidebarTabs); document.body.classList.toggle("mk-hide-ribbon", !this.settings.showRibbon); this.registerView(CONTEXT_VIEW_TYPE, (leaf) => { return new ContextView(leaf, this, CONTEXT_VIEW_TYPE); }); if (this.settings.spacesEnabled) { this.addCommand({ id: "mk-spaces", name: i18n_default.commandPalette.openSpaces, callback: () => this.openFileTreeLeaf(true) }); if (!this.settings.spacesDisablePatch) patchFileExplorer(this); this.registerView(FILE_TREE_VIEW_TYPE, (leaf) => { return new FileTreeView(leaf, this); }); this.app.workspace.onLayoutReady(async () => { const tables = dbResultsToDBTables( this.spaceDBInstance().exec( "SELECT name FROM sqlite_schema WHERE type ='table' AND name NOT LIKE 'sqlite_%';" ) ); if (tables.length == 0) { initiateDB(this.spaceDBInstance()); } if (this.settings.folderRank && this.settings.folderRank.children.length > 0) { migrateIndex(this); } else { rebuildIndex(this); } this.registerEvent(this.app.vault.on("create", this.onCreate)); this.registerEvent(this.app.vault.on("delete", this.onDelete)); this.registerEvent(this.app.vault.on("rename", this.onRename)); this.app.metadataCache.on("changed", this.metadataChange); if (this.dataViewAPI()) { this.registerEvent(this.app.metadataCache.on( "dataview:index-ready", () => { this.dataViewReady = true; } )); this.registerEvent(this.app.metadataCache.on( "dataview:metadata-change", (type, file, oldPath) => { if (type === "update" && this.app.metadataCache.fileCache[file.path].mtime >= this.loadTime && this.dataViewAPI().index.revision !== this.dataViewLastIndex && this.dataViewReady) { if (file instanceof import_obsidian46.TFile) { this.metadataChange(file); } this.dataViewLastIndex = this.dataViewAPI().index.revision; } } )); } await this.openFileTreeLeaf(true); }); } this.registerEvent( app.workspace.on("active-leaf-change", () => this.activeFileChange()) ); } activeFileChange() { let filePath = null; const activeLeaf = app.workspace.activeLeaf; if ((activeLeaf == null ? void 0 : activeLeaf.view.getViewType()) == CONTEXT_VIEW_TYPE && (activeLeaf == null ? void 0 : activeLeaf.view.getState().type) == "folder") { let file = getAbstractFileAtPath(app, activeLeaf.view.getState().folder); if (file) filePath = file.path; } else if ((activeLeaf == null ? void 0 : activeLeaf.view.getViewType()) == "markdown") { const view = app.workspace.getActiveViewOfType(import_obsidian46.MarkdownView); if (view instanceof import_obsidian46.MarkdownView) { filePath = view.file.path; } } if (filePath) { let evt = new CustomEvent(eventTypes.activeFileChange, { detail: { filePath } }); window.dispatchEvent(evt); } } loadContext() { this.registerView(FILE_CONTEXT_VIEW_TYPE, (leaf) => { return new FileContextLeafView(leaf, this); }); this.registerView(INLINE_CONTEXT_VIEW_TYPE, (leaf) => { return new InlineContextView(leaf, this); }); this.registerView(MDB_FILE_VIEWER_TYPE, (leaf) => { return new MDBFileViewer(leaf, this); }); this.registerExtensions(["mdb"], MDB_FILE_VIEWER_TYPE); this.app.workspace.onLayoutReady(async () => { if (this.settings.autoOpenFileContext) { await this.openFileContextLeaf(); } setTimeout(() => this.activeFileChange(), 2e3); }); } loadFlowEditor() { this.addCommand({ id: "mk-blink", name: i18n_default.commandPalette.blink, callback: () => this.quickOpen(), hotkeys: [ { modifiers: ["Mod"], key: "o" } ] }); document.body.classList.toggle("mk-flow-replace", this.settings.editorFlow); document.body.classList.toggle( "mk-flow-" + this.settings.editorFlowStyle, true ); this.addCommand({ id: "mk-open-file-context", name: i18n_default.commandPalette.openFileContext, callback: () => this.openFileContextLeaf() }); this.addCommand({ id: "mk-open-flow", name: i18n_default.commandPalette.openFlow, callback: () => this.openFlow() }); this.addCommand({ id: "mk-close-flow", name: i18n_default.commandPalette.closeFlow, callback: () => this.closeFlow() }); if (this.settings.editorFlow) { this.registerMarkdownPostProcessor((element, context) => { const removeAllFlowMarks = (el) => { const embeds = el.querySelectorAll(".internal-embed"); for (let index = 0; index < embeds.length; index++) { const embed = embeds.item(index); if (embed.previousSibling && embed.previousSibling.textContent.slice(-1) == "!") embed.previousSibling.textContent = embed.previousSibling.textContent.slice(0, -1); } }; removeAllFlowMarks(element); replaceAllTables(this, element, context); replaceAllEmbed(element, context); }); window.addEventListener( eventTypes.spawnPortal, this.spawnPortal.bind(this) ); window.addEventListener( eventTypes.loadPortal, this.loadPortal.bind(this) ); window.addEventListener( eventTypes.focusPortal, this.focusPortal.bind(this) ); window.addEventListener( eventTypes.openFilePortal, this.openFileFromPortal.bind(this) ); } } loadMakerMode() { if (this.settings.makerMode) { this.addCommand({ id: "mk-toggle-bold", name: i18n_default.commandPalette.toggleBold, callback: () => this.toggleBold(), hotkeys: [ { modifiers: ["Mod"], key: "b" } ] }); this.addCommand({ id: "mk-toggle-italics", name: i18n_default.commandPalette.toggleItalics, callback: () => this.toggleEm(), hotkeys: [ { modifiers: ["Mod"], key: "i" } ] }); this.registerEditorSuggest(new MakeMenu(this.app, this)); this.registerEditorSuggest(new StickerMenu(this.app, this)); if (platformIsMobile() && this.settings.mobileMakeBar) loadStylerIntoContainer(app.mobileToolbar.containerEl, this); } } addToQueue(operation) { this.queue = this.queue.then(operation).catch(() => { }); } async onload() { console.time("Loading Make.md"); this.loadTime = Date.now(); this.queue = Promise.resolve(); (0, import_obsidian46.addIcon)("mk-logo", mkLogo); console.time("Loading Settings"); await this.loadSettings(); this.addSettingTab(new MakeMDPluginSettingsTab(this.app, this)); console.timeEnd("Loading Settings"); this.app.workspace.onLayoutReady(async () => { if (!getAbstractFileAtPath( this.app, getFolderPathFromString(this.settings.tagContextFolder) )) { this.app.vault.createFolder(this.settings.tagContextFolder); } }); console.time("Loading Spaces"); await this.loadSpaces(); console.timeEnd("Loading Spaces"); console.time("Loading Context"); this.loadContext(); console.timeEnd("Loading Context"); console.time("Loading Flow Editor"); this.loadFlowEditor(); console.timeEnd("Loading Flow Editor"); console.time("Loading Maker Mode"); this.loadMakerMode(); console.timeEnd("Loading Maker Mode"); console.time("Loading CM Extensions"); this.registerEditorExtension(cmExtensions(this, platformIsMobile())); console.timeEnd("Loading CM Extensions"); console.timeEnd("Loading Make.md"); } openFileFromPortal(e4) { openFileFromPortal(this, e4); } loadPortal(e4) { loadFlowEditorByDOM2(this, e4.detail.el, e4.detail.view, e4.detail.id); } spawnPortal(e4) { spawnNewPortal(this, e4); } focusPortal(e4) { focusPortal(this, e4); } async loadSettings() { this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); const userConfig = safelyParseJSON(await defaultConfigFile(this.app)); this.settings.newFileFolderPath = userConfig.newFileFolderPath; this.settings.newFileLocation = userConfig.newFileLocation; this.saveSettings(); } async saveSettings(refresh = true) { await this.saveData(this.settings); if (refresh) { let evt = new CustomEvent(eventTypes.settingsChanged, {}); window.dispatchEvent(evt); } } onunload() { console.log("Unloading Make.md"); this.spaceDBInstance().close(); window.removeEventListener(eventTypes.spawnPortal, this.spawnPortal); window.removeEventListener(eventTypes.loadPortal, this.loadPortal); window.removeEventListener(eventTypes.focusPortal, this.focusPortal); window.removeEventListener( eventTypes.openFilePortal, this.openFileFromPortal ); this.detachFileTreeLeafs(); } }; /*! Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames */ /** * @license * Lodash * Copyright OpenJS Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ /** * react-table * * Copyright (c) TanStack * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */ /** * react-virtual * * Copyright (c) TanStack * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */ /** * table-core * * Copyright (c) TanStack * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */