@notectl/core 2.1.0 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/TextDirectionAutoPlugin-kZ1tcu0d.mjs +2 -0
- package/dist/chunks/TextDirectionAutoPlugin-kZ1tcu0d.mjs.map +1 -0
- package/dist/chunks/{full-BMvrL5dE.mjs → full-5hGvv-bG.mjs} +2 -2
- package/dist/chunks/{full-BMvrL5dE.mjs.map → full-5hGvv-bG.mjs.map} +1 -1
- package/dist/full.mjs +1 -1
- package/dist/notectl-core.umd.js +1 -1
- package/dist/notectl-core.umd.js.map +1 -1
- package/dist/plugins/text-direction-auto/TextDirectionAutoMiddleware.d.ts.map +1 -1
- package/dist/plugins/text-direction-auto.mjs +1 -1
- package/dist/presets/full.mjs +1 -1
- package/dist/presets.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunks/TextDirectionAutoPlugin-DS_gpI8N.mjs +0 -2
- package/dist/chunks/TextDirectionAutoPlugin-DS_gpI8N.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextDirectionAutoMiddleware.d.ts","sourceRoot":"","sources":["../../../src/plugins/text-direction-auto/TextDirectionAutoMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQlD,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,aAAa,EACtB,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GAClC,IAAI,CAuBN;AAED,wBAAgB,4BAA4B,CAC3C,OAAO,EAAE,aAAa,EACtB,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GAClC,IAAI,
|
|
1
|
+
{"version":3,"file":"TextDirectionAutoMiddleware.d.ts","sourceRoot":"","sources":["../../../src/plugins/text-direction-auto/TextDirectionAutoMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQlD,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,aAAa,EACtB,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GAClC,IAAI,CAuBN;AAED,wBAAgB,4BAA4B,CAC3C,OAAO,EAAE,aAAa,EACtB,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GAClC,IAAI,CAwBN;AA0FD,wBAAgB,4BAA4B,CAC3C,OAAO,EAAE,aAAa,EACtB,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GAClC,IAAI,CAgDN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t}from"../chunks/TextDirectionAutoPlugin-
|
|
1
|
+
import{t}from"../chunks/TextDirectionAutoPlugin-kZ1tcu0d.mjs";export{t as TextDirectionAutoPlugin};
|
package/dist/presets/full.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as m}from"../chunks/full-
|
|
1
|
+
import{t as m}from"../chunks/full-5hGvv-bG.mjs";export{m as createFullPreset};
|
package/dist/presets.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as m}from"./chunks/minimal-pBhi4EJI.mjs";import{t as s}from"./chunks/full-
|
|
1
|
+
import{t as m}from"./chunks/minimal-pBhi4EJI.mjs";import{t as s}from"./chunks/full-5hGvv-bG.mjs";export{s as createFullPreset,m as createMinimalPreset};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@notectl/core",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "A modern and accessible rich text editor shipped as a single Web Component. Immutable state, transaction-based architecture, and a plugin system that powers every feature.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{d as t,m as e,n as r}from"./Document-_qdGR4vh.mjs";import{t as i}from"./TextDirectionService-DY4M8EwU.mjs";import{n,r as o,t as s}from"./DirectionDetection-Hun6-7ER.mjs";function c(t,e,r){const i=t.getNodePath(e.id);if(i)return{type:"setNodeAttr",path:i,attrs:{...e.attrs,dir:r},previousAttrs:e.attrs}}function a(i,n,a,d){const u=n.getBlock(i.blockId);if(!u||!a.has(u.type))return;if("auto"!==o(u)&&t(u)>0)return;const f=e(u),p=r(u,i.offset),l=s(f.slice(0,p)+i.text+f.slice(p));if(!l)return;const h=c(n,u,l);h&&d.push(h)}function d(t,i,n,a){const d=i.getBlock(t.blockId);if(!d||!n.has(d.type))return;const u=o(d);if("auto"===u)return;const f=e(d),p=r(d,t.from),l=r(d,t.to),h=f.slice(0,p)+f.slice(l);if(0===h.length){const t=c(i,d,"auto");return void(t&&a.push(t))}const g=s(h);if(!g||g===u)return;const m=c(i,d,g);m&&a.push(m)}var u={autoDetect:!0,inherit:!0,preserve:!0},f=class{id="text-direction-auto";name="Text Direction Auto-detect";priority=93;dependencies=["text-direction"];config;constructor(t){this.config={...u,...t}}init(t){const r=t.getService(i);if(!r)throw new Error("TextDirectionAutoPlugin requires TextDirectionPlugin to be registered first.");const{directableTypes:o}=r;this.config.preserve&&function(t,e){t.registerMiddleware((t,r,i)=>{let n=!1;const o=t.steps.map(t=>{if("setBlockType"!==t.type)return t;if(!e.has(t.nodeType))return t;const r=t.previousAttrs?.dir;return r&&"auto"!==r?(n=!0,{...t,attrs:{...t.attrs,dir:r}}):t});i(n?{...t,steps:o}:t)},{name:"text-direction:preserve-dir"})}(t,o),this.config.autoDetect&&function(t,e){t.registerMiddleware((t,r,i)=>{const n=[];for(const o of t.steps)"insertText"===o.type?a(o,r,e,n):"deleteText"===o.type&&d(o,r,e,n);i(n.length>0?{...t,steps:[...t.steps,...n]}:t)},{name:"text-direction:auto-detect"})}(t,o),this.config.inherit&&function(t,r){t.registerMiddleware((t,i,o)=>{let c=!1;const a=t.steps.map(t=>{if("insertNode"!==t.type)return t;if(!r.has(t.node.type))return t;if("auto"!==String(t.node.attrs?.dir??"auto"))return t;const o=e(t.node);if(o.length>0){const e=s(o);if(e)return c=!0,{...t,node:{...t.node,attrs:{...t.node.attrs,dir:e}}}}const a=n(i,t.parentPath,t.index);return a&&"auto"!==a?(c=!0,{...t,node:{...t.node,attrs:{...t.node.attrs,dir:a}}}):t});o(c?{...t,steps:a}:t)},{name:"text-direction:inherit-dir"})}(t,o)}};export{f as t};
|
|
2
|
-
//# sourceMappingURL=TextDirectionAutoPlugin-DS_gpI8N.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TextDirectionAutoPlugin-DS_gpI8N.mjs","names":[],"sources":["../../src/plugins/text-direction-auto/TextDirectionAutoMiddleware.ts","../../src/plugins/text-direction-auto/TextDirectionAutoPlugin.ts"],"sourcesContent":["/**\n * Middleware registrations for the TextDirectionAutoPlugin.\n *\n * Three independent middlewares that all operate on the block-level `dir`\n * attribute owned by the {@link TextDirectionPlugin}:\n *\n * - **preserveDir**: keeps `dir` when another plugin replaces a block's\n * attrs (e.g. `setBlockType` paragraph → heading).\n * - **autoDetect**: on `insertText` / `deleteText`, detects direction from\n * the first strong directional character and updates `dir`.\n * - **inheritDir**: on `insertNode`, inherits the new block's `dir` from\n * the nearest sibling (or auto-detects from inserted text content).\n */\n\nimport type { BlockNode } from '../../model/Document.js';\nimport { blockOffsetToTextOffset, getBlockLength, getBlockText } from '../../model/Document.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { Step } from '../../state/Transaction.js';\nimport type { PluginContext } from '../Plugin.js';\nimport {\n\tdetectTextDirection,\n\tfindSiblingDirection,\n\tgetBlockDir,\n} from '../text-direction/DirectionDetection.js';\nimport type { TextDirection } from '../text-direction/TextDirectionService.js';\n\nexport function registerPreserveDirMiddleware(\n\tcontext: PluginContext,\n\tdirectableTypes: ReadonlySet<string>,\n): void {\n\tcontext.registerMiddleware(\n\t\t(tr, _state, next) => {\n\t\t\tlet patched = false;\n\n\t\t\tconst patchedSteps = tr.steps.map((step) => {\n\t\t\t\tif (step.type !== 'setBlockType') return step;\n\t\t\t\tif (!directableTypes.has(step.nodeType)) return step;\n\n\t\t\t\tconst prevDir = step.previousAttrs?.dir;\n\t\t\t\tif (!prevDir || prevDir === 'auto') return step;\n\n\t\t\t\tpatched = true;\n\t\t\t\treturn {\n\t\t\t\t\t...step,\n\t\t\t\t\tattrs: { ...step.attrs, dir: prevDir },\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tnext(patched ? { ...tr, steps: patchedSteps } : tr);\n\t\t},\n\t\t{ name: 'text-direction:preserve-dir' },\n\t);\n}\n\nexport function registerAutoDetectMiddleware(\n\tcontext: PluginContext,\n\tdirectableTypes: ReadonlySet<string>,\n): void {\n\tcontext.registerMiddleware(\n\t\t(tr, state, next) => {\n\t\t\tconst extraSteps: Step[] = [];\n\n\t\t\tfor (const step of tr.steps) {\n\t\t\t\tif (step.type === 'insertText') {\n\t\t\t\t\thandleInsertText(step, state, directableTypes, extraSteps);\n\t\t\t\t} else if (step.type === 'deleteText') {\n\t\t\t\t\thandleDeleteText(step, state, directableTypes, extraSteps);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (extraSteps.length > 0) {\n\t\t\t\tnext({ ...tr, steps: [...tr.steps, ...extraSteps] });\n\t\t\t} else {\n\t\t\t\tnext(tr);\n\t\t\t}\n\t\t},\n\t\t{ name: 'text-direction:auto-detect' },\n\t);\n}\n\nfunction buildDirChangeStep(\n\tstate: EditorState,\n\tblock: BlockNode,\n\tdir: TextDirection | 'auto',\n): Step | undefined {\n\tconst path = state.getNodePath(block.id);\n\tif (!path) return undefined;\n\n\treturn {\n\t\ttype: 'setNodeAttr',\n\t\tpath,\n\t\tattrs: { ...block.attrs, dir },\n\t\tpreviousAttrs: block.attrs,\n\t};\n}\n\nfunction handleInsertText(\n\tstep: Extract<Step, { type: 'insertText' }>,\n\tstate: EditorState,\n\tdirectableTypes: ReadonlySet<string>,\n\textraSteps: Step[],\n): void {\n\tconst block = state.getBlock(step.blockId);\n\tif (!block || !directableTypes.has(block.type)) return;\n\n\tif (getBlockDir(block) !== 'auto' && getBlockLength(block) > 0) return;\n\n\tconst existingText: string = getBlockText(block);\n\tconst textOffset: number = blockOffsetToTextOffset(block, step.offset);\n\tconst textAfter: string =\n\t\texistingText.slice(0, textOffset) + step.text + existingText.slice(textOffset);\n\n\tconst detected: TextDirection | null = detectTextDirection(textAfter);\n\tif (!detected) return;\n\n\tconst dirStep: Step | undefined = buildDirChangeStep(state, block, detected);\n\tif (dirStep) extraSteps.push(dirStep);\n}\n\nfunction handleDeleteText(\n\tstep: Extract<Step, { type: 'deleteText' }>,\n\tstate: EditorState,\n\tdirectableTypes: ReadonlySet<string>,\n\textraSteps: Step[],\n): void {\n\tconst block = state.getBlock(step.blockId);\n\tif (!block || !directableTypes.has(block.type)) return;\n\n\tconst currentDir: TextDirection = getBlockDir(block);\n\tif (currentDir === 'auto') return;\n\n\tconst existingText: string = getBlockText(block);\n\tconst fromText: number = blockOffsetToTextOffset(block, step.from);\n\tconst toText: number = blockOffsetToTextOffset(block, step.to);\n\tconst textAfter: string = existingText.slice(0, fromText) + existingText.slice(toText);\n\n\tif (textAfter.length === 0) {\n\t\tconst dirStep: Step | undefined = buildDirChangeStep(state, block, 'auto');\n\t\tif (dirStep) extraSteps.push(dirStep);\n\t\treturn;\n\t}\n\n\tconst detected: TextDirection | null = detectTextDirection(textAfter);\n\tif (!detected || detected === currentDir) return;\n\n\tconst dirStep: Step | undefined = buildDirChangeStep(state, block, detected);\n\tif (dirStep) extraSteps.push(dirStep);\n}\n\nexport function registerInheritDirMiddleware(\n\tcontext: PluginContext,\n\tdirectableTypes: ReadonlySet<string>,\n): void {\n\tcontext.registerMiddleware(\n\t\t(tr, state, next) => {\n\t\t\tlet patched = false;\n\n\t\t\tconst patchedSteps = tr.steps.map((step) => {\n\t\t\t\tif (step.type !== 'insertNode') return step;\n\t\t\t\tif (!directableTypes.has(step.node.type)) return step;\n\n\t\t\t\tconst newDir: string = String(step.node.attrs?.dir ?? 'auto');\n\t\t\t\tif (newDir !== 'auto') return step;\n\n\t\t\t\tconst nodeText: string = getBlockText(step.node);\n\t\t\t\tif (nodeText.length > 0) {\n\t\t\t\t\tconst detected: TextDirection | null = detectTextDirection(nodeText);\n\t\t\t\t\tif (detected) {\n\t\t\t\t\t\tpatched = true;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...step,\n\t\t\t\t\t\t\tnode: {\n\t\t\t\t\t\t\t\t...step.node,\n\t\t\t\t\t\t\t\tattrs: { ...step.node.attrs, dir: detected },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst siblingDir: string | undefined = findSiblingDirection(\n\t\t\t\t\tstate,\n\t\t\t\t\tstep.parentPath,\n\t\t\t\t\tstep.index,\n\t\t\t\t);\n\t\t\t\tif (!siblingDir || siblingDir === 'auto') return step;\n\n\t\t\t\tpatched = true;\n\t\t\t\treturn {\n\t\t\t\t\t...step,\n\t\t\t\t\tnode: {\n\t\t\t\t\t\t...step.node,\n\t\t\t\t\t\tattrs: { ...step.node.attrs, dir: siblingDir },\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tnext(patched ? { ...tr, steps: patchedSteps } : tr);\n\t\t},\n\t\t{ name: 'text-direction:inherit-dir' },\n\t);\n}\n","/**\n * Text direction auto-detection / inheritance / preservation plugin.\n *\n * Registers three transaction middlewares that keep block-level `dir`\n * attributes in sync with content changes. Strictly requires\n * {@link TextDirectionPlugin} (declared via `dependencies`) — without it,\n * the patched `dir` attribute does not exist on NodeSpecs and the\n * `directableTypes` service is unavailable.\n */\n\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport { TEXT_DIRECTION_SERVICE_KEY } from '../text-direction/TextDirectionService.js';\nimport {\n\tregisterAutoDetectMiddleware,\n\tregisterInheritDirMiddleware,\n\tregisterPreserveDirMiddleware,\n} from './TextDirectionAutoMiddleware.js';\n\nexport interface TextDirectionAutoConfig {\n\t/**\n\t * Whether to register the auto-detect middleware (insertText / deleteText).\n\t * @default true\n\t */\n\treadonly autoDetect?: boolean;\n\t/**\n\t * Whether to register the inherit-dir middleware (insertNode).\n\t * @default true\n\t */\n\treadonly inherit?: boolean;\n\t/**\n\t * Whether to register the preserve-dir middleware (setBlockType).\n\t * @default true\n\t */\n\treadonly preserve?: boolean;\n}\n\nconst DEFAULT_CONFIG: Required<TextDirectionAutoConfig> = {\n\tautoDetect: true,\n\tinherit: true,\n\tpreserve: true,\n};\n\nexport class TextDirectionAutoPlugin implements Plugin {\n\treadonly id = 'text-direction-auto';\n\treadonly name = 'Text Direction Auto-detect';\n\treadonly priority = 93;\n\treadonly dependencies = ['text-direction'] as const;\n\n\tprivate readonly config: Required<TextDirectionAutoConfig>;\n\n\tconstructor(config?: TextDirectionAutoConfig) {\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\tinit(context: PluginContext): void {\n\t\tconst service = context.getService(TEXT_DIRECTION_SERVICE_KEY);\n\t\tif (!service) {\n\t\t\tthrow new Error(\n\t\t\t\t'TextDirectionAutoPlugin requires TextDirectionPlugin to be registered first.',\n\t\t\t);\n\t\t}\n\n\t\tconst { directableTypes } = service;\n\n\t\tif (this.config.preserve) {\n\t\t\tregisterPreserveDirMiddleware(context, directableTypes);\n\t\t}\n\t\tif (this.config.autoDetect) {\n\t\t\tregisterAutoDetectMiddleware(context, directableTypes);\n\t\t}\n\t\tif (this.config.inherit) {\n\t\t\tregisterInheritDirMiddleware(context, directableTypes);\n\t\t}\n\t}\n}\n"],"mappings":"iLAgFA,SAAS,EACR,EACA,EACA,GAEA,MAAM,EAAO,EAAM,YAAY,EAAM,IACrC,GAAK,EAEL,MAAO,CACN,KAAM,cACN,OACA,MAAO,IAAK,EAAM,MAAO,OACzB,cAAe,EAAM,OAIvB,SAAS,EACR,EACA,EACA,EACA,GAEA,MAAM,EAAQ,EAAM,SAAS,EAAK,SAClC,IAAK,IAAU,EAAgB,IAAI,EAAM,MAAO,OAEhD,GAA2B,SAAvB,EAAY,IAAqB,EAAe,GAAS,EAAG,OAEhE,MAAM,EAAuB,EAAa,GACpC,EAAqB,EAAwB,EAAO,EAAK,QAIzD,EAAiC,EAFtC,EAAa,MAAM,EAAG,GAAc,EAAK,KAAO,EAAa,MAAM,IAGpE,IAAK,EAAU,OAEf,MAAM,EAA4B,EAAmB,EAAO,EAAO,GAC/D,GAAS,EAAW,KAAK,GAG9B,SAAS,EACR,EACA,EACA,EACA,GAEA,MAAM,EAAQ,EAAM,SAAS,EAAK,SAClC,IAAK,IAAU,EAAgB,IAAI,EAAM,MAAO,OAEhD,MAAM,EAA4B,EAAY,GAC9C,GAAmB,SAAf,EAAuB,OAE3B,MAAM,EAAuB,EAAa,GACpC,EAAmB,EAAwB,EAAO,EAAK,MACvD,EAAiB,EAAwB,EAAO,EAAK,IACrD,EAAoB,EAAa,MAAM,EAAG,GAAY,EAAa,MAAM,GAE/E,GAAyB,IAArB,EAAU,OAAc,CAC3B,MAAM,EAA4B,EAAmB,EAAO,EAAO,QAEnE,YADI,GAAS,EAAW,KAAK,IAI9B,MAAM,EAAiC,EAAoB,GAC3D,IAAK,GAAY,IAAa,EAAY,OAE1C,MAAM,EAA4B,EAAmB,EAAO,EAAO,GAC/D,GAAS,EAAW,KAAK,GC9G9B,IAAM,EAAoD,CACzD,YAAY,EACZ,SAAS,EACT,UAAU,GAGE,EAAb,MACC,GAAc,sBACd,KAAgB,6BAChB,SAAoB,GACpB,aAAwB,CAAC,kBAEzB,OAEA,WAAA,CAAY,GACX,KAAK,OAAS,IAAK,KAAmB,GAGvC,IAAA,CAAK,GACJ,MAAM,EAAU,EAAQ,WAAW,GACnC,IAAK,EACJ,MAAM,IAAI,MACT,gFAIF,MAAM,gBAAE,GAAoB,EAExB,KAAK,OAAO,UDtClB,SACC,EACA,GAEA,EAAQ,mBAAA,CACN,EAAI,EAAQ,KACZ,IAAI,GAAU,EAEd,MAAM,EAAe,EAAG,MAAM,IAAK,IAClC,GAAkB,iBAAd,EAAK,KAAyB,OAAO,EACzC,IAAK,EAAgB,IAAI,EAAK,UAAW,OAAO,EAEhD,MAAM,EAAU,EAAK,eAAe,IACpC,OAAK,GAAuB,SAAZ,GAEhB,GAAU,EACH,IACH,EACH,MAAO,IAAK,EAAK,MAAO,IAAK,KALa,IAS5C,EAAK,EAAU,IAAK,EAAI,MAAO,GAAiB,IAEjD,CAAE,KAAM,gCCeP,CAA8B,EAAS,GAEpC,KAAK,OAAO,YDblB,SACC,EACA,GAEA,EAAQ,mBAAA,CACN,EAAI,EAAO,KACX,MAAM,EAAqB,GAE3B,IAAK,MAAM,KAAQ,EAAG,MACH,eAAd,EAAK,KACR,EAAiB,EAAM,EAAO,EAAiB,GACvB,eAAd,EAAK,MACf,EAAiB,EAAM,EAAO,EAAiB,GAKhD,EADG,EAAW,OAAS,EAClB,IAAK,EAAI,MAAO,IAAI,EAAG,SAAU,IAEjC,IAGP,CAAE,KAAM,+BCRP,CAA6B,EAAS,GAEnC,KAAK,OAAO,SD+ElB,SACC,EACA,GAEA,EAAQ,mBAAA,CACN,EAAI,EAAO,KACX,IAAI,GAAU,EAEd,MAAM,EAAe,EAAG,MAAM,IAAK,IAClC,GAAkB,eAAd,EAAK,KAAuB,OAAO,EACvC,IAAK,EAAgB,IAAI,EAAK,KAAK,MAAO,OAAO,EAGjD,GAAe,SADQ,OAAO,EAAK,KAAK,OAAO,KAAO,QAC/B,OAAO,EAE9B,MAAM,EAAmB,EAAa,EAAK,MAC3C,GAAI,EAAS,OAAS,EAAG,CACxB,MAAM,EAAiC,EAAoB,GAC3D,GAAI,EAEH,OADA,GAAU,EACH,IACH,EACH,KAAM,IACF,EAAK,KACR,MAAO,IAAK,EAAK,KAAK,MAAO,IAAK,KAMtC,MAAM,EAAiC,EACtC,EACA,EAAK,WACL,EAAK,OAEN,OAAK,GAA6B,SAAf,GAEnB,GAAU,EACH,IACH,EACH,KAAM,IACF,EAAK,KACR,MAAO,IAAK,EAAK,KAAK,MAAO,IAAK,MAPa,IAYlD,EAAK,EAAU,IAAK,EAAI,MAAO,GAAiB,IAEjD,CAAE,KAAM,+BC/HP,CAA6B,EAAS"}
|