{"version":3,"file":"iterateJsdoc.cjs","names":["jsdocUtils","_interopRequireWildcard","require","_jsdoccomment","_commentParser","_esquery","_interopRequireDefault","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","end","column","line","start","parseClosureTemplateTag","tag","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagNameSimple","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","sc","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","String","type","isVirtualFunction","Boolean","hasATag","stringify","tagBlock","specRewire","block","commentStringify","reportJSDoc","msg","handler","data","fixer","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","setTagDescription","matcher","setter","finalIdx","source","some","tokens","description","idx","getDescription","descriptions","lastDescriptionLine","tagsBegun","push","length","join","setBlockDescription","descLines","startIdx","endIdx","info","delimiter","postDelimiter","undefined","splice","setDescriptionLines","changeTag","src","entries","setTag","number","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","addTag","targetTagName","_jsdoc$tags","getFirstLine","firstLine","emptyTokens","prop","addLine","_jsdoc$source","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","lineEnd","name","postName","postTag","postType","trimEnd","flattenRoots","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","_node$declaration","generator","value","declaration","isConstructor","getJsdocTagsDeep","getPreferredTagName","args","isValidTag","definedTags","names","hasTag","comparePaths","dropPathSegmentQuotes","avoidDocs","_context$options$","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","tagMissingRequiredTypeOrNamepath","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","getTags","tagList","filterTags","filter","filterAllTags","getAllTags","getTagsByType","hasOptionTag","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","skipReportingBlockedTag","findContext","contexts","comment","foundContext","cntxt","esquery","matches","parse","visitorKeys","contextStr","getSettings","_context$settings$jsd","_context$settings$jsd2","_context$settings$jsd3","_context$settings$jsd4","_context$settings$jsd5","_context$settings$jsd6","_context$settings$jsd7","_context$settings$jsd8","_context$settings$jsd9","_context$settings$jsd10","_context$settings$jsd11","_context$settings$jsd12","_context$settings$jsd13","_context$settings$jsd14","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","iterator","state","jsdocNde","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indentChar","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","selector","lastComment","settngs","exit","create","commentHandler","*:not(Program)","noTracking","nonComment","ste","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","allComms","iterateJsdoc","_ruleConfig$meta","metaType","TypeError","contextDefaults","contextSelected","matchContext","_context$options$2","_contexts","_contexts2","match","enforcedContexts","nonGlobalSettings","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import * as jsdocUtils from './jsdocUtils.js';\nimport {\n  commentHandler,\n  getJSDocComment,\n  parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n  stringify as commentStringify,\n  util,\n} from 'comment-parser';\nimport esquery from 'esquery';\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @typedef {import('@es-joy/jsdoccomment').JsdocBlockWithInline} JsdocBlockWithInline\n */\n\n/**\n * @typedef {{\n *   disallowName?: string,\n *   allowName?: string,\n *   context?: string,\n *   comment?: string,\n *   tags?: string[],\n *   replacement?: string,\n *   minimum?: Integer,\n *   message?: string,\n *   forceRequireReturn?: boolean\n * }} ContextObject\n */\n/**\n * @typedef {string|ContextObject} Context\n */\n\n/**\n * @callback CheckJsdoc\n * @param {{\n *   lastIndex?: Integer,\n *   isFunctionContext?: boolean,\n *   selector?: string,\n *   comment?: string\n * }} info\n * @param {null|((jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean|undefined)} handler\n * @param {import('eslint').Rule.Node} node\n * @returns {void}\n */\n\n/**\n * @callback ForEachPreferredTag\n * @param {string} tagName\n * @param {(\n *   matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n *   targetTagName: string\n * ) => void} arrayHandler\n * @param {boolean} [skipReportingBlockedTag]\n * @returns {void}\n */\n\n/**\n * @callback ReportSettings\n * @param {string} message\n * @returns {void}\n */\n\n/**\n * @callback ParseClosureTemplateTag\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\n\n/**\n * @callback GetPreferredTagNameObject\n * @param {{\n *   tagName: string\n * }} cfg\n * @returns {string|false|{\n *   message: string;\n *   replacement?: string|undefined\n * }|{\n *   blocked: true,\n *   tagName: string\n * }}\n */\n\n/**\n * @typedef {{\n *   forEachPreferredTag: ForEachPreferredTag,\n *   reportSettings: ReportSettings,\n *   parseClosureTemplateTag: ParseClosureTemplateTag,\n *   getPreferredTagNameObject: GetPreferredTagNameObject,\n *   pathDoesNotBeginWith: import('./jsdocUtils.js').PathDoesNotBeginWith\n * }} BasicUtils\n */\n\n/**\n * @callback IsIteratingFunction\n * @returns {boolean}\n */\n\n/**\n * @callback IsVirtualFunction\n * @returns {boolean}\n */\n\n/**\n * @callback Stringify\n * @param {import('comment-parser').Block} tagBlock\n * @param {boolean} [specRewire]\n * @returns {string}\n */\n\n/**\n * @callback ReportJSDoc\n * @param {string} msg\n * @param {null|import('comment-parser').Spec|{line: Integer, column?: Integer}} [tag]\n * @param {(() => void)|null} [handler]\n * @param {boolean} [specRewire]\n * @param {undefined|{\n *   [key: string]: string\n * }} [data]\n */\n\n/**\n * @callback GetRegexFromString\n * @param {string} str\n * @param {string} [requiredFlags]\n * @returns {RegExp}\n */\n\n/**\n * @callback GetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\n\n/**\n * @callback SetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback GetDescription\n * @returns {{\n *   description: string,\n *   descriptions: string[],\n *   lastDescriptionLine: Integer\n * }}\n */\n\n/**\n * @callback SetBlockDescription\n * @param {(\n *   info: {\n *     delimiter: string,\n *     postDelimiter: string,\n *     start: string\n *   },\n *   seedTokens: (\n *     tokens?: Partial<import('comment-parser').Tokens>\n *   ) => import('comment-parser').Tokens,\n *   descLines: string[]\n * ) => import('comment-parser').Line[]} setter\n * @returns {void}\n */\n\n/**\n * @callback SetDescriptionLines\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback ChangeTag\n * @param {import('comment-parser').Spec} tag\n * @param {...Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback SetTag\n * @param {import('comment-parser').Spec & {\n *   line: Integer\n * }} tag\n * @param {Partial<import('comment-parser').Tokens>} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback RemoveTag\n * @param {Integer} tagIndex\n * @param {{\n *   removeEmptyBlock?: boolean,\n *   tagSourceOffset?: Integer\n * }} [cfg]\n * @returns {void}\n */\n\n/**\n * @callback AddTag\n * @param {string} targetTagName\n * @param {Integer} [number]\n * @param {import('comment-parser').Tokens|{}} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback GetFirstLine\n * @returns {Integer|undefined}\n */\n\n/**\n * @typedef {(\n *   tokens?: Partial<import('comment-parser').Tokens> | undefined\n * ) => import('comment-parser').Tokens} SeedTokens\n */\n\n/**\n * Sets tokens to empty string.\n * @callback EmptyTokens\n * @param {import('comment-parser').Tokens} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLine\n * @param {Integer} sourceIndex\n * @param {Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLines\n * @param {Integer} tagIndex\n * @param {Integer} tagSourceOffset\n * @param {Integer} numLines\n * @returns {void}\n */\n\n/**\n * @callback MakeMultiline\n * @returns {void}\n */\n\n/**\n * @callback GetFunctionParameterNames\n * @param {boolean} [useDefaultObjectProperties]\n * @returns {import('./jsdocUtils.js').ParamNameInfo[]}\n */\n\n/**\n * @callback HasParams\n * @returns {Integer}\n */\n\n/**\n * @callback IsGenerator\n * @returns {boolean}\n */\n\n/**\n * @callback IsConstructor\n * @returns {boolean}\n */\n\n/**\n * @callback GetJsdocTagsDeep\n * @param {string} tagName\n * @returns {false|{\n *   idx: Integer,\n *   name: string,\n *   type: string\n * }[]}\n */\n\n/**\n * @callback GetPreferredTagName\n * @param {{\n *   tagName: string,\n *   skipReportingBlockedTag?: boolean,\n *   allowObjectReturn?: boolean,\n *   defaultMessage?: string\n * }} cfg\n * @returns {string|undefined|false|{\n *   message: string;\n *   replacement?: string|undefined;\n * }|{\n *   blocked: true,\n *   tagName: string\n * }}\n */\n\n/**\n * @callback IsValidTag\n * @param {string} name\n * @param {string[]} definedTags\n * @returns {boolean}\n */\n\n/**\n * @callback HasATag\n * @param {string[]} names\n * @returns {boolean}\n */\n\n/**\n * @callback HasTag\n * @param {string} name\n * @returns {boolean}\n */\n\n/**\n * @callback ComparePaths\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\n\n/**\n * @callback DropPathSegmentQuotes\n * @param {string} name\n * @returns {string}\n */\n\n/**\n * @callback AvoidDocs\n * @returns {boolean}\n */\n\n/**\n * @callback TagMightHaveNamePositionTypePosition\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n *   TagStructure[]} [otherModeMaps]\n * @returns {boolean|{otherMode: true}}\n */\n\n/**\n * @callback TagMustHave\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n *   TagStructure[]} otherModeMaps\n * @returns {boolean|{\n *   otherMode: false\n * }}\n */\n\n/**\n * @callback TagMissingRequiredTypeOrNamepath\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').\n *   TagStructure[]} otherModeMaps\n * @returns {boolean|{\n *   otherMode: false\n * }}\n */\n\n/**\n * @callback IsNamepathX\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetTagStructureForMode\n * @param {import('./jsdocUtils.js').ParserMode} mde\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\n\n/**\n * @callback MayBeUndefinedTypeTag\n * @param {import('comment-parser').Spec} tag\n * @returns {boolean}\n */\n\n/**\n * @callback HasValueOrExecutorHasNonEmptyResolveValue\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} [allBranches]\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldReturnValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasThrowValue\n * @returns {boolean}\n */\n\n/**\n * @callback IsAsync\n * @returns {boolean|undefined}\n */\n\n/**\n * @callback GetTags\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\n\n/**\n * @callback GetPresentTags\n * @param {string[]} tagList\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterTags\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterAllTags\n * @param {(tag: (import('comment-parser').Spec|\n *   import('@es-joy/jsdoccomment').JsdocInlineTagNoType)) => boolean} filter\n * @returns {(import('comment-parser').Spec|\n *   import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]}\n */\n\n/**\n * @callback GetTagsByType\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n *   tagsWithNames: import('comment-parser').Spec[],\n *   tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\n\n/**\n * @callback HasOptionTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetClassNode\n * @returns {Node|null}\n */\n\n/**\n * @callback GetClassJsdoc\n * @returns {null|JsdocBlockWithInline}\n */\n\n/**\n * @callback ClassHasTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback FindContext\n * @param {Context[]} contexts\n * @param {string|undefined} comment\n * @returns {{\n *   foundContext: Context|undefined,\n *   contextStr: string\n * }}\n */\n\n/**\n * @typedef {BasicUtils & {\n *   isIteratingFunction: IsIteratingFunction,\n *   isVirtualFunction: IsVirtualFunction,\n *   stringify: Stringify,\n *   reportJSDoc: ReportJSDoc,\n *   getRegexFromString: GetRegexFromString,\n *   getTagDescription: GetTagDescription,\n *   setTagDescription: SetTagDescription,\n *   getDescription: GetDescription,\n *   setBlockDescription: SetBlockDescription,\n *   setDescriptionLines: SetDescriptionLines,\n *   changeTag: ChangeTag,\n *   setTag: SetTag,\n *   removeTag: RemoveTag,\n *   addTag: AddTag,\n *   getFirstLine: GetFirstLine,\n *   seedTokens: SeedTokens,\n *   emptyTokens: EmptyTokens,\n *   addLine: AddLine,\n *   addLines: AddLines,\n *   makeMultiline: MakeMultiline,\n *   flattenRoots: import('./jsdocUtils.js').FlattenRoots,\n *   getFunctionParameterNames: GetFunctionParameterNames,\n *   hasParams: HasParams,\n *   isGenerator: IsGenerator,\n *   isConstructor: IsConstructor,\n *   getJsdocTagsDeep: GetJsdocTagsDeep,\n *   getPreferredTagName: GetPreferredTagName,\n *   isValidTag: IsValidTag,\n *   hasATag: HasATag,\n *   hasTag: HasTag,\n *   comparePaths: ComparePaths,\n *   dropPathSegmentQuotes: DropPathSegmentQuotes,\n *   avoidDocs: AvoidDocs,\n *   tagMightHaveNamePosition: TagMightHaveNamePositionTypePosition,\n *   tagMightHaveTypePosition: TagMightHaveNamePositionTypePosition,\n *   tagMustHaveNamePosition: TagMustHave,\n *   tagMustHaveTypePosition: TagMustHave,\n *   tagMissingRequiredTypeOrNamepath: TagMissingRequiredTypeOrNamepath,\n *   isNamepathDefiningTag: IsNamepathX,\n *   isNamepathReferencingTag: IsNamepathX,\n *   isNamepathOrUrlReferencingTag: IsNamepathX,\n *   tagMightHaveNamepath: IsNamepathX,\n *   getTagStructureForMode: GetTagStructureForMode,\n *   mayBeUndefinedTypeTag: MayBeUndefinedTypeTag,\n *   hasValueOrExecutorHasNonEmptyResolveValue: HasValueOrExecutorHasNonEmptyResolveValue,\n *   hasYieldValue: HasYieldValue,\n *   hasYieldReturnValue: HasYieldReturnValue,\n *   hasThrowValue: HasThrowValue,\n *   isAsync: IsAsync,\n *   getTags: GetTags,\n *   getPresentTags: GetPresentTags,\n *   filterTags: FilterTags,\n *   filterAllTags: FilterAllTags,\n *   getTagsByType: GetTagsByType,\n *   hasOptionTag: HasOptionTag,\n *   getClassNode: GetClassNode,\n *   getClassJsdoc: GetClassJsdoc,\n *   classHasTag: ClassHasTag,\n *   findContext: FindContext\n * }} Utils\n */\n\nconst {\n  rewireSpecs,\n  seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n * @typedef {import('eslint').Rule.RuleMetaData} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n * @typedef {{\n *   globalTags: {},\n *   hasDuplicates: {\n *     [key: string]: boolean\n *   },\n *   selectorMap: {\n *     [selector: string]: {\n *       [comment: string]: Integer\n *     }\n *   },\n *   hasTag: {\n *     [key: string]: boolean\n *   },\n *   hasNonComment: number,\n *   hasNonCommentBeforeTag: {\n *     [key: string]: boolean|number\n *   }\n * }} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n * @typedef {import('eslint').Rule.Node} Node\n */\n\n/*\nconst {\n   align as commentAlign,\n  flow: commentFlow,\n  indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {{\n *   tagNamePreference?: import('./jsdocUtils.js').TagNamePreference,\n *   mode?: import('./jsdocUtils.js').ParserMode\n * }} cfg\n * @returns {BasicUtils}\n */\nconst getBasicUtils = (context, {\n  tagNamePreference,\n  mode,\n}) => {\n  /** @type {BasicUtils} */\n  const utils = {};\n\n  /** @type {ReportSettings} */\n  utils.reportSettings = (message) => {\n    context.report({\n      loc: {\n        end: {\n          column: 1,\n          line: 1,\n        },\n        start: {\n          column: 1,\n          line: 1,\n        },\n      },\n      message,\n    });\n  };\n\n  /** @type {ParseClosureTemplateTag} */\n  utils.parseClosureTemplateTag = (tag) => {\n    return jsdocUtils.parseClosureTemplateTag(tag);\n  };\n\n  utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n  /** @type {GetPreferredTagNameObject} */\n  utils.getPreferredTagNameObject = ({\n    tagName,\n  }) => {\n    const ret = jsdocUtils.getPreferredTagNameSimple(\n      tagName,\n      /** @type {import('./jsdocUtils.js').ParserMode} */ (mode),\n      tagNamePreference,\n      context,\n    );\n    const isObject = ret && typeof ret === 'object';\n    if (ret === false || (isObject && !ret.replacement)) {\n      return {\n        blocked: true,\n        tagName,\n      };\n    }\n\n    return ret;\n  };\n\n  return utils;\n};\n\n/**\n * @callback Report\n * @param {string} message\n * @param {import('eslint').Rule.ReportFixer|null} [fix]\n * @param {null|\n *   {line?: Integer, column?: Integer}|\n *   import('comment-parser').Spec & {line?: Integer}\n * } [jsdocLoc]\n * @param {undefined|{\n *   [key: string]: string\n * }} [data]\n * @returns {void}\n */\n\n/**\n * @param {Node|null} node\n * @param {JsdocBlockWithInline} jsdoc\n * @param {import('eslint').AST.Token} jsdocNode\n * @param {Settings} settings\n * @param {Report} report\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('eslint').SourceCode} sc\n * @param {boolean|undefined} iteratingAll\n * @param {RuleConfig} ruleConfig\n * @param {string} indent\n * @returns {Utils}\n */\nconst getUtils = (\n  node,\n  jsdoc,\n  jsdocNode,\n  settings,\n  report,\n  context,\n  sc,\n  iteratingAll,\n  ruleConfig,\n  indent,\n) => {\n  const ancestors = /** @type {import('eslint').Rule.Node[]} */ (node ?\n    (sc.getAncestors ?\n      (\n        sc.getAncestors(node)\n      /* c8 ignore next 4 */\n      ) :\n      (\n        context.getAncestors()\n      )) :\n    []);\n\n  /* c8 ignore next -- Fallback to deprecated method */\n  const {\n    sourceCode = context.getSourceCode(),\n  } = context;\n\n  const utils = /** @type {Utils} */ (getBasicUtils(context, settings));\n\n  const {\n    tagNamePreference,\n    overrideReplacesDocs,\n    ignoreReplacesDocs,\n    implementsReplacesDocs,\n    augmentsExtendsReplacesDocs,\n    maxLines,\n    minLines,\n    mode,\n  } = settings;\n\n  /** @type {IsIteratingFunction} */\n  utils.isIteratingFunction = () => {\n    return !iteratingAll || [\n      'MethodDefinition',\n      'ArrowFunctionExpression',\n      'FunctionDeclaration',\n      'FunctionExpression',\n    ].includes(String(node && node.type));\n  };\n\n  /** @type {IsVirtualFunction} */\n  utils.isVirtualFunction = () => {\n    return Boolean(iteratingAll) && utils.hasATag([\n      'callback', 'function', 'func', 'method',\n    ]);\n  };\n\n  /** @type {Stringify} */\n  utils.stringify = (tagBlock, specRewire) => {\n    let block;\n    if (specRewire) {\n      block = rewireSpecs(tagBlock);\n    }\n\n    return commentStringify(/** @type {import('comment-parser').Block} */ (\n      specRewire ? block : tagBlock));\n  };\n\n  /** @type {ReportJSDoc} */\n  utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n    report(msg, handler ? /** @type {import('eslint').Rule.ReportFixer} */ (\n      fixer,\n    ) => {\n      handler();\n      const replacement = utils.stringify(jsdoc, specRewire);\n\n      if (!replacement) {\n        const text = sourceCode.getText();\n        const lastLineBreakPos = text.slice(\n          0, jsdocNode.range[0],\n        ).search(/\\n[ \\t]*$/u);\n        if (lastLineBreakPos > -1) {\n          return fixer.removeRange([\n            lastLineBreakPos, jsdocNode.range[1],\n          ]);\n        }\n\n        return fixer.removeRange(\n          (/\\s/u).test(text.charAt(jsdocNode.range[1])) ?\n            [\n              jsdocNode.range[0], jsdocNode.range[1] + 1,\n            ] :\n            jsdocNode.range,\n        );\n      }\n\n      return fixer.replaceText(jsdocNode, replacement);\n    } : null, tag, data);\n  };\n\n  /** @type {GetRegexFromString} */\n  utils.getRegexFromString = (str, requiredFlags) => {\n    return jsdocUtils.getRegexFromString(str, requiredFlags);\n  };\n\n  /** @type {GetTagDescription} */\n  utils.getTagDescription = (tg, returnArray) => {\n    return jsdocUtils.getTagDescription(tg, returnArray);\n  };\n\n  /** @type {SetTagDescription} */\n  utils.setTagDescription = (tg, matcher, setter) => {\n    let finalIdx = 0;\n    tg.source.some(({\n      tokens: {\n        description,\n      },\n    }, idx) => {\n      if (description && matcher.test(description)) {\n        tg.source[idx].tokens.description = setter(description);\n        finalIdx = idx;\n        return true;\n      }\n\n      return false;\n    });\n\n    return finalIdx;\n  };\n\n  /** @type {GetDescription} */\n  utils.getDescription = () => {\n    /** @type {string[]} */\n    const descriptions = [];\n    let lastDescriptionLine = 0;\n    let tagsBegun = false;\n    jsdoc.source.some(({\n      tokens: {\n        description,\n        tag,\n        end,\n      },\n    }, idx) => {\n      if (tag) {\n        tagsBegun = true;\n      }\n\n      if (idx && (tag || end)) {\n        lastDescriptionLine = idx - 1;\n        if (!tagsBegun && description) {\n          descriptions.push(description);\n        }\n\n        return true;\n      }\n\n      if (!tagsBegun && (idx || description)) {\n        descriptions.push(description || (descriptions.length ? '' : '\\n'));\n      }\n\n      return false;\n    });\n\n    return {\n      description: descriptions.join('\\n'),\n      descriptions,\n      lastDescriptionLine,\n    };\n  };\n\n  /** @type {SetBlockDescription} */\n  utils.setBlockDescription = (setter) => {\n    /** @type {string[]} */\n    const descLines = [];\n    /**\n     * @type {undefined|Integer}\n     */\n    let startIdx;\n    /**\n     * @type {undefined|Integer}\n     */\n    let endIdx;\n\n    /**\n     * @type {undefined|{\n     *   delimiter: string,\n     *   postDelimiter: string,\n     *   start: string\n     * }}\n     */\n    let info;\n\n    jsdoc.source.some(({\n      tokens: {\n        description,\n        start,\n        delimiter,\n        postDelimiter,\n        tag,\n        end,\n      },\n    }, idx) => {\n      if (delimiter === '/**') {\n        return false;\n      }\n\n      if (startIdx === undefined) {\n        startIdx = idx;\n        info = {\n          delimiter,\n          postDelimiter,\n          start,\n        };\n      }\n\n      if (tag || end) {\n        endIdx = idx;\n        return true;\n      }\n\n      descLines.push(description);\n      return false;\n    });\n\n    /* c8 ignore else -- Won't be called if missing */\n    if (descLines.length) {\n      jsdoc.source.splice(\n        /** @type {Integer} */ (startIdx),\n        /** @type {Integer} */ (endIdx) - /** @type {Integer} */ (startIdx),\n        ...setter(\n          /**\n           * @type {{\n           *   delimiter: string,\n           *   postDelimiter: string,\n           *   start: string\n           * }}\n           */\n          (info),\n          seedTokens,\n          descLines,\n        ),\n      );\n    }\n  };\n\n  /** @type {SetDescriptionLines} */\n  utils.setDescriptionLines = (matcher, setter) => {\n    let finalIdx = 0;\n    jsdoc.source.some(({\n      tokens: {\n        description,\n        tag,\n        end,\n      },\n    }, idx) => {\n      /* c8 ignore next 3 -- Already checked */\n      if (idx && (tag || end)) {\n        return true;\n      }\n\n      if (description && matcher.test(description)) {\n        jsdoc.source[idx].tokens.description = setter(description);\n        finalIdx = idx;\n        return true;\n      }\n\n      return false;\n    });\n\n    return finalIdx;\n  };\n\n  /** @type {ChangeTag} */\n  utils.changeTag = (tag, ...tokens) => {\n    for (const [\n      idx,\n      src,\n    ] of tag.source.entries()) {\n      src.tokens = {\n        ...src.tokens,\n        ...tokens[idx],\n      };\n    }\n  };\n\n  /** @type {SetTag} */\n  utils.setTag = (tag, tokens) => {\n    tag.source = [\n      {\n        number: tag.line,\n        // Or tag.source[0].number?\n        source: '',\n        tokens: seedTokens({\n          delimiter: '*',\n          postDelimiter: ' ',\n          start: indent + ' ',\n          tag: '@' + tag.tag,\n          ...tokens,\n        }),\n      },\n    ];\n  };\n\n  /** @type {RemoveTag} */\n  utils.removeTag = (tagIndex, {\n    removeEmptyBlock = false,\n    tagSourceOffset = 0,\n  } = {}) => {\n    const {\n      source: tagSource,\n    } = jsdoc.tags[tagIndex];\n    /** @type {Integer|undefined} */\n    let lastIndex;\n    const firstNumber = jsdoc.source[0].number;\n    tagSource.some(({\n      number,\n    }, tagIdx) => {\n      const sourceIndex = jsdoc.source.findIndex(({\n        number: srcNumber,\n      }) => {\n        return number === srcNumber;\n      });\n      // c8 ignore else\n      if (sourceIndex > -1) {\n        let spliceCount = 1;\n        tagSource.slice(tagIdx + 1).some(({\n          tokens: {\n            tag,\n            end: ending,\n          },\n        }) => {\n          if (!tag && !ending) {\n            spliceCount++;\n\n            return false;\n          }\n\n          return true;\n        });\n\n        const spliceIdx = sourceIndex + tagSourceOffset;\n\n        const {\n          delimiter,\n          end,\n        } = jsdoc.source[spliceIdx].tokens;\n\n        if (\n          spliceIdx === 0 && jsdoc.tags.length >= 2 ||\n          !removeEmptyBlock && (end || delimiter === '/**')\n        ) {\n          const {\n            tokens,\n          } = jsdoc.source[spliceIdx];\n          for (const item of [\n            'postDelimiter',\n            'tag',\n            'postTag',\n            'type',\n            'postType',\n            'name',\n            'postName',\n            'description',\n          ]) {\n            tokens[\n              /**\n               * @type {\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n               *   \"postTag\"|\"name\"|\"postName\"|\"description\"}\n               */ (\n                item\n              )\n            ] = '';\n          }\n        } else {\n          jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n          tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n        }\n\n        lastIndex = sourceIndex;\n\n        return true;\n      }\n      /* c8 ignore next */\n      return false;\n    });\n    for (const [\n      idx,\n      src,\n    ] of jsdoc.source.slice(lastIndex).entries()) {\n      src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n    }\n\n    // Todo: Once rewiring of tags may be fixed in comment-parser to reflect\n    //         missing tags, this step should be added here (so that, e.g.,\n    //         if accessing `jsdoc.tags`, such as to add a new tag, the\n    //         correct information will be available)\n  };\n\n  /** @type {AddTag} */\n  utils.addTag = (\n    targetTagName,\n    number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n      tokens: {\n        tag,\n      },\n    }) => {\n      return tag;\n    }) - 1) + 1,\n    tokens = {},\n  ) => {\n    jsdoc.source.splice(number, 0, {\n      number,\n      source: '',\n      tokens: seedTokens({\n        delimiter: '*',\n        postDelimiter: ' ',\n        start: indent + ' ',\n        tag: `@${targetTagName}`,\n        ...tokens,\n      }),\n    });\n    for (const src of jsdoc.source.slice(number + 1)) {\n      src.number++;\n    }\n  };\n\n  /** @type {GetFirstLine} */\n  utils.getFirstLine = () => {\n    let firstLine;\n    for (const {\n      number,\n      tokens: {\n        tag,\n      },\n    } of jsdoc.source) {\n      if (tag) {\n        firstLine = number;\n        break;\n      }\n    }\n\n    return firstLine;\n  };\n\n  /** @type {SeedTokens} */\n  utils.seedTokens = seedTokens;\n\n  /** @type {EmptyTokens} */\n  utils.emptyTokens = (tokens) => {\n    for (const prop of [\n      'start',\n      'postDelimiter',\n      'tag',\n      'type',\n      'postType',\n      'postTag',\n      'name',\n      'postName',\n      'description',\n      'end',\n      'lineEnd',\n    ]) {\n      tokens[\n        /**\n         * @type {\"start\"|\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n         *   \"postTag\"|\"name\"|\"postName\"|\"description\"|\"end\"|\"lineEnd\"}\n         */ (\n          prop\n        )\n      ] = '';\n    }\n  };\n\n  /** @type {AddLine} */\n  utils.addLine = (sourceIndex, tokens) => {\n    const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n    jsdoc.source.splice(sourceIndex, 0, {\n      number,\n      source: '',\n      tokens: seedTokens(tokens),\n    });\n\n    for (const src of jsdoc.source.slice(number + 1)) {\n      src.number++;\n    }\n    // If necessary, we can rewire the tags (misnamed method)\n    // rewireSource(jsdoc);\n  };\n\n  /** @type {AddLines} */\n  utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n    const {\n      source: tagSource,\n    } = jsdoc.tags[tagIndex];\n    /** @type {Integer|undefined} */\n    let lastIndex;\n    const firstNumber = jsdoc.source[0].number;\n    tagSource.some(({\n      number,\n    }) => {\n      const makeLine = () => {\n        return {\n          number,\n          source: '',\n          tokens: seedTokens({\n            delimiter: '*',\n            start: indent + ' ',\n          }),\n        };\n      };\n\n      const makeLines = () => {\n        return Array.from({\n          length: numLines,\n        }, makeLine);\n      };\n\n      const sourceIndex = jsdoc.source.findIndex(({\n        number: srcNumber,\n        tokens: {\n          end,\n        },\n      }) => {\n        return number === srcNumber && !end;\n      });\n      // c8 ignore else\n      if (sourceIndex > -1) {\n        const lines = makeLines();\n        jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n        // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n        lastIndex = sourceIndex;\n\n        return true;\n      }\n      /* c8 ignore next */\n      return false;\n    });\n\n    for (const [\n      idx,\n      src,\n    ] of jsdoc.source.slice(lastIndex).entries()) {\n      src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n    }\n  };\n\n  /** @type {MakeMultiline} */\n  utils.makeMultiline = () => {\n    const {\n      source: [\n        {\n          tokens,\n        },\n      ],\n    } = jsdoc;\n    const {\n      postDelimiter,\n      description,\n      lineEnd,\n      tag,\n      name,\n      type,\n    } = tokens;\n\n    let {\n      tokens: {\n        postName,\n        postTag,\n        postType,\n      },\n    } = jsdoc.source[0];\n\n    // Strip trailing leftovers from single line ending\n    if (!description) {\n      if (postName) {\n        postName = '';\n      } else if (postType) {\n        postType = '';\n      } else /* c8 ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n        postTag = '';\n      }\n    }\n\n    utils.emptyTokens(tokens);\n\n    utils.addLine(1, {\n      delimiter: '*',\n\n      // If a description were present, it may have whitespace attached\n      //   due to being at the end of the single line\n      description: description.trimEnd(),\n      name,\n      postDelimiter,\n      postName,\n      postTag,\n      postType,\n      start: indent + ' ',\n      tag,\n      type,\n    });\n    utils.addLine(2, {\n      end: '*/',\n      lineEnd,\n      start: indent + ' ',\n    });\n  };\n\n  /**\n   * @type {import('./jsdocUtils.js').FlattenRoots}\n   */\n  utils.flattenRoots = jsdocUtils.flattenRoots;\n\n  /** @type {GetFunctionParameterNames} */\n  utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n    return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n  };\n\n  /** @type {HasParams} */\n  utils.hasParams = () => {\n    return jsdocUtils.hasParams(/** @type {Node} */ (node));\n  };\n\n  /** @type {IsGenerator} */\n  utils.isGenerator = () => {\n    return node !== null && Boolean(\n      /**\n       * @type {import('estree').FunctionDeclaration|\n       *   import('estree').FunctionExpression}\n       */ (node).generator ||\n      node.type === 'MethodDefinition' && node.value.generator ||\n      [\n        'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n      ].includes(node.type) &&\n      /** @type {import('estree').FunctionDeclaration} */\n      (\n        /**\n         * @type {import('estree').ExportNamedDeclaration|\n         *   import('estree').ExportDefaultDeclaration}\n         */ (node).declaration\n      )?.generator,\n    );\n  };\n\n  /** @type {IsConstructor} */\n  utils.isConstructor = () => {\n    return jsdocUtils.isConstructor(/** @type {Node} */ (node));\n  };\n\n  /** @type {GetJsdocTagsDeep} */\n  utils.getJsdocTagsDeep = (tagName) => {\n    const name = /** @type {string|false} */ (utils.getPreferredTagName({\n      tagName,\n    }));\n    if (!name) {\n      return false;\n    }\n\n    return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n  };\n\n  /** @type {GetPreferredTagName} */\n  utils.getPreferredTagName = (args) => {\n    return jsdocUtils.getPreferredTagName(\n      jsdoc, {\n        ...args,\n        context, mode, report, tagNamePreference,\n      }\n    );\n  };\n\n  /** @type {IsValidTag} */\n  utils.isValidTag = (name, definedTags) => {\n    return jsdocUtils.isValidTag(context, mode, name, definedTags);\n  };\n\n  /** @type {HasATag} */\n  utils.hasATag = (names) => {\n    return jsdocUtils.hasATag(jsdoc, names);\n  };\n\n  /** @type {HasTag} */\n  utils.hasTag = (name) => {\n    return jsdocUtils.hasTag(jsdoc, name);\n  };\n\n  /** @type {ComparePaths} */\n  utils.comparePaths = (name) => {\n    return jsdocUtils.comparePaths(name);\n  };\n\n  /** @type {DropPathSegmentQuotes} */\n  utils.dropPathSegmentQuotes = (name) => {\n    return jsdocUtils.dropPathSegmentQuotes(name);\n  };\n\n  /** @type {AvoidDocs} */\n  utils.avoidDocs = () => {\n    if (\n      ignoreReplacesDocs !== false &&\n        (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n      overrideReplacesDocs !== false &&\n        (utils.hasTag('override') || utils.classHasTag('override')) ||\n      implementsReplacesDocs !== false &&\n        (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n      augmentsExtendsReplacesDocs &&\n        (utils.hasATag([\n          'augments', 'extends',\n        ]) ||\n          utils.classHasTag('augments') ||\n            utils.classHasTag('extends'))) {\n      return true;\n    }\n\n    if (jsdocUtils.exemptSpeciaMethods(\n      jsdoc,\n      node,\n      context,\n      /** @type {import('json-schema').JSONSchema4|import('json-schema').JSONSchema4[]} */ (\n        ruleConfig.meta.schema\n      ),\n    )) {\n      return true;\n    }\n\n    const exemptedBy = context.options[0]?.exemptedBy ?? [\n      'inheritDoc',\n      ...mode === 'closure' ? [] : [\n        'inheritdoc',\n      ],\n    ];\n    if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n      return true;\n    }\n\n    return false;\n  };\n\n  for (const method of [\n    'tagMightHaveNamePosition',\n    'tagMightHaveTypePosition',\n  ]) {\n    /** @type {TagMightHaveNamePositionTypePosition} */\n    utils[\n      /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */ (\n        method\n      )\n    ] = (tagName, otherModeMaps) => {\n      const result = jsdocUtils[\n        /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n        (method)\n      ](tagName);\n      if (result) {\n        return true;\n      }\n\n      if (!otherModeMaps) {\n        return false;\n      }\n\n      const otherResult = otherModeMaps.some((otherModeMap) => {\n        return jsdocUtils[\n          /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n          (method)\n        ](tagName, otherModeMap);\n      });\n\n      return otherResult ? {\n        otherMode: true,\n      } : false;\n    };\n  }\n\n  /** @type {TagMissingRequiredTypeOrNamepath} */\n  utils.tagMissingRequiredTypeOrNamepath = (tagName, otherModeMaps) => {\n    const result = jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName);\n    if (!result) {\n      return false;\n    }\n\n    const otherResult = otherModeMaps.every((otherModeMap) => {\n      return jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName, otherModeMap);\n    });\n\n    return otherResult ? true : {\n      otherMode: false,\n    };\n  };\n\n  for (const method of [\n    'tagMustHaveNamePosition',\n    'tagMustHaveTypePosition',\n  ]) {\n    /** @type {TagMustHave} */\n    utils[\n      /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n      (method)\n    ] = (tagName, otherModeMaps) => {\n      const result = jsdocUtils[\n        /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n        (method)\n      ](tagName);\n      if (!result) {\n        return false;\n      }\n\n      // if (!otherModeMaps) { return true; }\n\n      const otherResult = otherModeMaps.every((otherModeMap) => {\n        return jsdocUtils[\n          /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n          (method)\n        ](tagName, otherModeMap);\n      });\n\n      return otherResult ? true : {\n        otherMode: false,\n      };\n    };\n  }\n\n  for (const method of [\n    'isNamepathDefiningTag',\n    'isNamepathReferencingTag',\n    'isNamepathOrUrlReferencingTag',\n    'tagMightHaveNamepath',\n  ]) {\n    /** @type {IsNamepathX} */\n    utils[\n      /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */ (\n        method\n      )] = (tagName) => {\n      return jsdocUtils[\n        /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */\n        (method)\n      ](tagName);\n    };\n  }\n\n  /** @type {GetTagStructureForMode} */\n  utils.getTagStructureForMode = (mde) => {\n    return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n  };\n\n  /** @type {MayBeUndefinedTypeTag} */\n  utils.mayBeUndefinedTypeTag = (tag) => {\n    return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n  };\n\n  /** @type {HasValueOrExecutorHasNonEmptyResolveValue} */\n  utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n    return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(\n      /** @type {Node} */ (node), anyPromiseAsReturn, allBranches,\n    );\n  };\n\n  /** @type {HasYieldValue} */\n  utils.hasYieldValue = () => {\n    if ([\n      'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n    ].includes(/** @type {Node} */ (node).type)) {\n      return jsdocUtils.hasYieldValue(\n        /** @type {import('estree').Declaration|import('estree').Expression} */ (\n          /** @type {import('estree').ExportNamedDeclaration|import('estree').ExportDefaultDeclaration} */\n          (node).declaration\n        ),\n      );\n    }\n\n    return jsdocUtils.hasYieldValue(/** @type {Node} */ (node));\n  };\n\n  /** @type {HasYieldReturnValue} */\n  utils.hasYieldReturnValue = () => {\n    return jsdocUtils.hasYieldValue(/** @type {Node} */ (node), true);\n  };\n\n  /** @type {HasThrowValue} */\n  utils.hasThrowValue = () => {\n    return jsdocUtils.hasThrowValue(node);\n  };\n\n  /** @type {IsAsync} */\n  utils.isAsync = () => {\n    return Boolean(node && 'async' in node && node.async);\n  };\n\n  /** @type {GetTags} */\n  utils.getTags = (tagName) => {\n    return jsdocUtils.getTags(jsdoc, tagName);\n  };\n\n  /** @type {GetPresentTags} */\n  utils.getPresentTags = (tagList) => {\n    return jsdocUtils.filterTags(jsdoc, (tag) => {\n      return tagList.includes(tag.tag);\n    });\n  };\n\n  /** @type {FilterTags} */\n  utils.filterTags = (filter) => {\n    return jsdocUtils.filterTags(jsdoc, (tag) => {\n      return filter(tag);\n    });\n  };\n\n  /** @type {FilterAllTags} */\n  utils.filterAllTags = (filter) => {\n    const tags = jsdocUtils.getAllTags(jsdoc);\n    return tags.filter((tag) => {\n      return filter(tag);\n    });\n  };\n\n  /** @type {GetTagsByType} */\n  utils.getTagsByType = (tags) => {\n    return jsdocUtils.getTagsByType(context, mode, tags);\n  };\n\n  /** @type {HasOptionTag} */\n  utils.hasOptionTag = (tagName) => {\n    const {\n      tags,\n    } = context.options[0] ?? {};\n\n    return Boolean(tags && tags.includes(tagName));\n  };\n\n  /** @type {GetClassNode} */\n  utils.getClassNode = () => {\n    return [\n      ...ancestors, node,\n    ].reverse().find((parent) => {\n      return parent && [\n        'ClassDeclaration', 'ClassExpression',\n      ].includes(parent.type);\n    }) ?? null;\n  };\n\n  /** @type {GetClassJsdoc} */\n  utils.getClassJsdoc = () => {\n    const classNode = utils.getClassNode();\n\n    if (!classNode) {\n      return null;\n    }\n\n    const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n      maxLines,\n      minLines,\n    });\n\n    if (classJsdocNode) {\n      return parseComment(classJsdocNode, '');\n    }\n\n    return null;\n  };\n\n  /** @type {ClassHasTag} */\n  utils.classHasTag = (tagName) => {\n    const classJsdoc = utils.getClassJsdoc();\n\n    return classJsdoc !== null && jsdocUtils.hasTag(classJsdoc, tagName);\n  };\n\n  /** @type {ForEachPreferredTag} */\n  utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag) => {\n    return jsdocUtils.forEachPreferredTag(\n      jsdoc, tagName, arrayHandler, {\n        skipReportingBlockedTag,\n        context, mode, report, tagNamePreference\n      }\n    );\n  };\n\n  /** @type {FindContext} */\n  utils.findContext = (contexts, comment) => {\n    const foundContext = contexts.find((cntxt) => {\n      return typeof cntxt === 'string' ?\n        esquery.matches(\n          /** @type {Node} */ (node),\n          esquery.parse(cntxt),\n          undefined,\n          {\n            visitorKeys: sourceCode.visitorKeys,\n          },\n        ) :\n        (!cntxt.context || cntxt.context === 'any' ||\n        esquery.matches(\n          /** @type {Node} */ (node),\n          esquery.parse(cntxt.context),\n          undefined,\n          {\n            visitorKeys: sourceCode.visitorKeys,\n          },\n        )) && comment === cntxt.comment;\n    });\n\n    const contextStr = typeof foundContext === 'object' ?\n      foundContext.context ?? 'any' :\n      String(foundContext);\n\n    return {\n      contextStr,\n      foundContext,\n    };\n  };\n\n  return utils;\n};\n\n/**\n * @typedef {{\n *   [key: string]: false|string|{\n *     message: string,\n *     replacement?: false|string\n *     skipRootChecking?: boolean\n *   }\n * }} PreferredTypes\n */\n/**\n * @typedef {{\n *   [key: string]: {\n *     name?: \"text\"|\"namepath-defining\"|\"namepath-referencing\"|false,\n *     type?: boolean|string[],\n *     required?: (\"name\"|\"type\"|\"typeOrNameRequired\")[]\n *   }\n * }} StructuredTags\n */\n/**\n * Settings from ESLint types.\n * @typedef {{\n *   maxLines: Integer,\n *   minLines: Integer,\n *   tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n *   mode: import('./jsdocUtils.js').ParserMode,\n *   preferredTypes: PreferredTypes,\n *   structuredTags: StructuredTags,\n *   [name: string]: any,\n *   contexts?: Context[]\n * }} Settings\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @returns {Settings|false}\n */\nconst getSettings = (context) => {\n  /* dslint-disable canonical/sort-keys */\n  const settings = {\n    // All rules\n    ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n    ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n    maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n    minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n    // `check-tag-names` and many returns/param rules\n    tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n    // `check-types` and `no-undefined-types`\n    preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n    // `check-types`, `no-undefined-types`, `valid-types`\n    structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n    // `require-param`, `require-description`, `require-example`,\n    // `require-returns`, `require-throw`, `require-yields`\n    overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n    ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n    implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n    augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n    // `require-param-type`, `require-param-description`\n    exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\n\n    // Many rules, e.g., `check-tag-names`\n    mode: context.settings.jsdoc?.mode ?? 'typescript',\n\n    // Many rules\n    contexts: context.settings.jsdoc?.contexts,\n  };\n  /* dslint-enable canonical/sort-keys */\n\n  jsdocUtils.setTagStructure(settings.mode);\n  try {\n    jsdocUtils.overrideTagStructure(settings.structuredTags);\n  } catch (error) {\n    context.report({\n      loc: {\n        end: {\n          column: 1,\n          line: 1,\n        },\n        start: {\n          column: 1,\n          line: 1,\n        },\n      },\n      message: /** @type {Error} */ (error).message,\n    });\n\n    return false;\n  }\n\n  return settings;\n};\n\n/**\n * Create the report function\n * @callback MakeReport\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('estree').Node} commentNode\n * @returns {Report}\n */\n\n/** @type {MakeReport} */\nconst makeReport = (context, commentNode) => {\n  /** @type {Report} */\n  const report = (message, fix = null, jsdocLoc = null, data = undefined) => {\n    let loc;\n\n    if (jsdocLoc) {\n      if (!('line' in jsdocLoc)) {\n        jsdocLoc.line = /** @type {import('comment-parser').Spec & {line?: Integer}} */ (\n          jsdocLoc\n        ).source[0].number;\n      }\n\n      const lineNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n        commentNode.loc\n      ).start.line +\n      /** @type {Integer} */ (jsdocLoc.line);\n\n      loc = {\n        end: {\n          column: 0,\n          line: lineNumber,\n        },\n        start: {\n          column: 0,\n          line: lineNumber,\n        },\n      };\n\n      // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n      if ('column' in jsdocLoc && typeof jsdocLoc.column === 'number') {\n        const colNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n          commentNode.loc\n        ).start.column + jsdocLoc.column;\n\n        loc.end.column = colNumber;\n        loc.start.column = colNumber;\n      }\n    }\n\n    context.report({\n      data,\n      fix,\n      loc,\n      message,\n      node: commentNode,\n    });\n  };\n\n  return report;\n};\n\n/**\n * @typedef {(\n *   arg: {\n *     context: import('eslint').Rule.RuleContext,\n *     sourceCode: import('eslint').SourceCode,\n *     indent?: string,\n *     info?: {\n *       comment?: string|undefined,\n *       lastIndex?: Integer|undefined\n *     },\n *     state?: StateObject,\n *     globalState?: Map<string, Map<string, string>>,\n *     jsdoc?: JsdocBlockWithInline,\n *     jsdocNode?: import('eslint').Rule.Node & {\n *       range: [number, number]\n *     },\n *     node?: Node,\n *     allComments?: import('estree').Node[]\n *     report?: Report,\n *     makeReport?: MakeReport,\n *     settings: Settings,\n *     utils: BasicUtils,\n *   }\n * ) => any } JsdocVisitorBasic\n */\n/**\n * @typedef {(\n *   arg: {\n *     context: import('eslint').Rule.RuleContext,\n *     sourceCode: import('eslint').SourceCode,\n *     indent: string,\n *     info: {\n *       comment?: string|undefined,\n *       lastIndex?: Integer|undefined\n *     },\n *     state: StateObject,\n *     globalState: Map<string, Map<string, string>>,\n *     jsdoc: JsdocBlockWithInline,\n *     jsdocNode: import('eslint').Rule.Node & {\n *       range: [number, number]\n *     },\n *     node: Node|null,\n *     allComments?: import('estree').Node[]\n *     report: Report,\n *     makeReport?: MakeReport,\n *     settings: Settings,\n *     utils: Utils,\n *   }\n * ) => any } JsdocVisitor\n */\n\n/**\n * @param {{\n *   comment?: string,\n *   lastIndex?: Integer,\n *   selector?: string,\n *   isFunctionContext?: boolean,\n * }} info\n * @param {string} indent\n * @param {JsdocBlockWithInline} jsdoc\n * @param {RuleConfig} ruleConfig\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('@es-joy/jsdoccomment').Token} jsdocNode\n * @param {Node|null} node\n * @param {Settings} settings\n * @param {import('eslint').SourceCode} sourceCode\n * @param {JsdocVisitor} iterator\n * @param {StateObject} state\n * @param {boolean} [iteratingAll]\n * @returns {void}\n */\nconst iterate = (\n  info,\n  indent, jsdoc,\n  ruleConfig, context, jsdocNode, node, settings,\n  sourceCode, iterator, state, iteratingAll,\n) => {\n  const jsdocNde = /** @type {unknown} */ (jsdocNode);\n  const report = makeReport(\n    context,\n    /** @type {import('estree').Node} */\n    (jsdocNde),\n  );\n\n  const utils = getUtils(\n    node,\n    jsdoc,\n    /** @type {import('eslint').AST.Token} */\n    (jsdocNode),\n    settings,\n    report,\n    context,\n    sourceCode,\n    iteratingAll,\n    ruleConfig,\n    indent,\n  );\n\n  if (\n    !ruleConfig.checkInternal && settings.ignoreInternal &&\n    utils.hasTag('internal')\n  ) {\n    return;\n  }\n\n  if (\n    !ruleConfig.checkPrivate && settings.ignorePrivate &&\n    (\n      utils.hasTag('private') ||\n      jsdocUtils\n        .filterTags(jsdoc, ({\n          tag,\n        }) => {\n          return tag === 'access';\n        })\n        .some(({\n          description,\n        }) => {\n          return description === 'private';\n        })\n    )\n  ) {\n    return;\n  }\n\n  iterator({\n    context,\n    globalState,\n    indent,\n    info,\n    jsdoc,\n    jsdocNode: /**\n                * @type {import('eslint').Rule.Node & {\n                *  range: [number, number];}}\n                */ (jsdocNde),\n    node,\n    report,\n    settings,\n    sourceCode,\n    state,\n    utils,\n  });\n};\n\n/**\n * @param {string[]} lines\n * @param {import('estree').Comment} jsdocNode\n * @returns {[indent: string, jsdoc: JsdocBlockWithInline]}\n */\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n  const sourceLine = lines[\n    /** @type {import('estree').SourceLocation} */\n    (jsdocNode.loc).start.line - 1\n  ];\n\n  let indentChar = sourceLine.charAt(0);\n  if (indentChar !== ' ' && indentChar !== '\\t') {\n    indentChar = ' ';\n  }\n\n  const indnt = indentChar.repeat(\n    /** @type {import('estree').SourceLocation} */\n    (jsdocNode.loc).start.column,\n  );\n\n  const jsdc = parseComment(jsdocNode, '');\n\n  return [\n    indnt, jsdc,\n  ];\n};\n\n/**\n *\n * @typedef {{node: Node & {\n *   range: [number, number]\n * }, state: StateObject}} NonCommentArgs\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils.js').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n *   regardless of context\n * @property {true} [checkPrivate] Whether to check `@private` blocks (normally exempted)\n * @property {true} [checkInternal] Whether to check `@internal` blocks (normally exempted)\n * @property {true} [checkFile] Whether to iterates over all JSDoc blocks regardless of attachment\n * @property {true} [nonGlobalSettings] Whether to avoid relying on settings for global contexts\n * @property {true} [noTracking] Whether to disable the tracking of visited comment nodes (as\n *   non-tracked may conduct further actions)\n * @property {true} [matchContext] Whether the rule expects contexts to be based on a match option\n * @property {(args: {\n *   context: import('eslint').Rule.RuleContext,\n *   state: StateObject,\n *   settings: Settings,\n *   utils: BasicUtils\n * }) => void} [exit] Handler to be executed upon exiting iteration of program AST\n * @property {(nca: NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n *   to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param {ContextObject[]|null} [contexts] The `contexts` containing relevant `comment` info.\n * @param {boolean} [additiveCommentContexts] If true, will have a separate\n *   iteration for each matching comment context. Otherwise, will iterate\n *   once if there is a single matching comment context.\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n  const trackedJsdocs = new Set();\n\n  /** @type {import('@es-joy/jsdoccomment').CommentHandler} */\n  let handler;\n\n  /** @type {Settings|false} */\n  let settings;\n\n  /**\n   * @param {import('eslint').Rule.RuleContext} context\n   * @param {Node|null} node\n   * @param {import('estree').Comment[]} jsdocNodes\n   * @param {StateObject} state\n   * @param {boolean} [lastCall]\n   * @returns {void}\n   */\n  const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n    /* c8 ignore next -- Fallback to deprecated method */\n    const {\n      sourceCode = context.getSourceCode(),\n    } = context;\n    const {\n      lines,\n    } = sourceCode;\n\n    const utils = getBasicUtils(context, /** @type {Settings} */ (settings));\n    for (const jsdocNode of jsdocNodes) {\n      const jsdocNde = /** @type {unknown} */ (jsdocNode);\n      if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(\n        /** @type {import('estree').Node} */\n        (jsdocNde),\n      ))) {\n        continue;\n      }\n\n      const [\n        indent,\n        jsdoc,\n      ] = getIndentAndJSDoc(\n        lines, jsdocNode,\n      );\n\n      if (additiveCommentContexts) {\n        for (const [\n          idx,\n          {\n            comment,\n          },\n        ] of /** @type {ContextObject[]} */ (contexts).entries()) {\n          if (comment && handler(comment, jsdoc) === false) {\n            continue;\n          }\n\n          iterate(\n            {\n              comment,\n              lastIndex: idx,\n              selector: node?.type,\n            },\n            indent,\n            jsdoc,\n            ruleConfig,\n            context,\n            jsdocNode,\n            /** @type {Node} */\n            (node),\n            /** @type {Settings} */\n            (settings),\n            sourceCode,\n            iterator,\n            state,\n            true,\n          );\n        }\n\n        continue;\n      }\n\n      let lastComment;\n      let lastIndex;\n      // eslint-disable-next-line no-loop-func\n      if (contexts && contexts.every(({\n        comment,\n      }, idx) => {\n        lastComment = comment;\n        lastIndex = idx;\n\n        return comment && handler(comment, jsdoc) === false;\n      })) {\n        continue;\n      }\n\n      iterate(\n        lastComment ? {\n          comment: lastComment,\n          lastIndex,\n          selector: node?.type,\n        } : {\n          lastIndex,\n          selector: node?.type,\n        },\n        indent,\n        jsdoc,\n        ruleConfig,\n        context,\n        jsdocNode,\n        node,\n        /** @type {Settings} */\n        (settings),\n        sourceCode,\n        iterator,\n        state,\n        true,\n      );\n    }\n\n    const settngs = /** @type {Settings} */ (settings);\n\n    if (lastCall && ruleConfig.exit) {\n      ruleConfig.exit({\n        context,\n        settings: settngs,\n        state,\n        utils,\n      });\n    }\n  };\n\n  return {\n    // @ts-expect-error ESLint accepts\n    create (context) {\n      /* c8 ignore next -- Fallback to deprecated method */\n      const {\n        sourceCode = context.getSourceCode(),\n      } = context;\n      settings = getSettings(context);\n      if (!settings) {\n        return {};\n      }\n\n      if (contexts) {\n        handler = commentHandler(settings);\n      }\n\n      const state = {};\n\n      return {\n        /**\n         * @param {import('eslint').Rule.Node & {\n         *   range: [Integer, Integer];\n         * }} node\n         * @returns {void}\n         */\n        '*:not(Program)' (node) {\n          const commentNode = getJSDocComment(\n            sourceCode, node, /** @type {Settings} */ (settings),\n          );\n          if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {\n            return;\n          }\n\n          if (!commentNode) {\n            if (ruleConfig.nonComment) {\n              const ste = /** @type {StateObject} */ (state);\n              ruleConfig.nonComment({\n                node,\n                state: ste,\n              });\n            }\n\n            return;\n          }\n\n          trackedJsdocs.add(commentNode);\n          callIterator(context, node, [\n            /** @type {import('estree').Comment} */\n            (commentNode),\n          ], /** @type {StateObject} */ (state));\n        },\n        'Program:exit' () {\n          const allComments = sourceCode.getAllComments();\n          const untrackedJSdoc = allComments.filter((node) => {\n            return !trackedJsdocs.has(node);\n          });\n\n          callIterator(\n            context,\n            null,\n            untrackedJSdoc,\n            /** @type {StateObject} */\n            (state),\n            true,\n          );\n        },\n      };\n    },\n    meta: ruleConfig.meta,\n  };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n * @param {JsdocVisitorBasic} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst checkFile = (iterator, ruleConfig) => {\n  return {\n    create (context) {\n      /* c8 ignore next -- Fallback to deprecated method */\n      const {\n        sourceCode = context.getSourceCode(),\n      } = context;\n      const settings = getSettings(context);\n      if (!settings) {\n        return {};\n      }\n\n      return {\n        'Program:exit' () {\n          const allComms = /** @type {unknown} */ (sourceCode.getAllComments());\n          const utils = getBasicUtils(context, settings);\n\n          iterator({\n            allComments: /** @type {import('estree').Node[]} */ (allComms),\n            context,\n            makeReport,\n            settings,\n            sourceCode,\n            utils,\n          });\n        },\n      };\n    },\n    meta: ruleConfig.meta,\n  };\n};\n\nexport {\n  getSettings,\n  // dslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n  parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n  const metaType = ruleConfig?.meta?.type;\n  if (!metaType || ![\n    'problem', 'suggestion', 'layout',\n  ].includes(metaType)) {\n    throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n  }\n\n  if (typeof iterator !== 'function') {\n    throw new TypeError('The iterator argument must be a function.');\n  }\n\n  if (ruleConfig.checkFile) {\n    return checkFile(\n      /** @type {JsdocVisitorBasic} */ (iterator),\n      ruleConfig,\n    );\n  }\n\n  if (ruleConfig.iterateAllJsdocs) {\n    return iterateAllJsdocs(iterator, ruleConfig);\n  }\n\n  /** @type {import('eslint').Rule.RuleModule} */\n  return {\n    /**\n     * The entrypoint for the JSDoc rule.\n     * @param {import('eslint').Rule.RuleContext} context\n     *   a reference to the context which hold all important information\n     *   like settings and the sourcecode to check.\n     * @returns {import('eslint').Rule.RuleListener}\n     *   a listener with parser callback function.\n     */\n    create (context) {\n      const settings = getSettings(context);\n      if (!settings) {\n        return {};\n      }\n\n      /**\n       * @type {Context[]|undefined}\n       */\n      let contexts;\n      if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n        contexts = ruleConfig.matchContext && context.options[0]?.match ?\n          context.options[0].match :\n          jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults, ruleConfig.nonGlobalSettings ? {} : settings);\n\n        if (contexts) {\n          contexts = contexts.map((obj) => {\n            if (typeof obj === 'object' && !obj.context) {\n              return {\n                ...obj,\n                context: 'any',\n              };\n            }\n\n            return obj;\n          });\n        }\n\n        const hasPlainAny = contexts?.includes('any');\n        const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n          if (typeof ctxt === 'string') {\n            return false;\n          }\n\n          return ctxt?.context === 'any';\n        });\n        if (hasPlainAny || hasObjectAny) {\n          return iterateAllJsdocs(\n            iterator,\n            ruleConfig,\n            hasObjectAny ? /** @type {ContextObject[]} */ (contexts) : null,\n            ruleConfig.matchContext,\n          ).create(context);\n        }\n      }\n\n      /* c8 ignore next -- Fallback to deprecated method */\n      const {\n        sourceCode = context.getSourceCode(),\n      } = context;\n      const {\n        lines,\n      } = sourceCode;\n\n      /** @type {Partial<StateObject>} */\n      const state = {};\n\n      /** @type {CheckJsdoc} */\n      const checkJsdoc = (info, handler, node) => {\n        const jsdocNode = getJSDocComment(sourceCode, node, settings);\n        if (!jsdocNode) {\n          return;\n        }\n\n        const [\n          indent,\n          jsdoc,\n        ] = getIndentAndJSDoc(\n          lines,\n          /** @type {import('estree').Comment} */\n          (jsdocNode),\n        );\n\n        if (\n          // Note, `handler` should already be bound in its first argument\n          //  with these only to be called after the value of\n          //  `comment`\n          handler && handler(jsdoc) === false\n        ) {\n          return;\n        }\n\n        iterate(\n          info,\n          indent,\n          jsdoc,\n          ruleConfig,\n          context,\n          jsdocNode,\n          node,\n          settings,\n          sourceCode,\n          iterator,\n          /** @type {StateObject} */\n          (state),\n        );\n      };\n\n      /** @type {import('eslint').Rule.RuleListener} */\n      let contextObject = {};\n\n      if (contexts && (\n        ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n      )) {\n        contextObject = jsdocUtils.getContextObject(\n          contexts,\n          checkJsdoc,\n          commentHandler(settings),\n        );\n      } else {\n        for (const prop of [\n          'ArrowFunctionExpression',\n          'FunctionDeclaration',\n          'FunctionExpression',\n          'TSDeclareFunction',\n        ]) {\n          contextObject[prop] = checkJsdoc.bind(null, {\n            selector: prop,\n          }, null);\n        }\n      }\n\n      if (typeof ruleConfig.exit === 'function') {\n        contextObject['Program:exit'] = () => {\n          const ste = /** @type {StateObject} */ (state);\n\n          // @ts-expect-error `utils` not needed at this point\n          /** @type {Required<RuleConfig>} */ (ruleConfig).exit({\n            context,\n            settings,\n            state: ste,\n          });\n        };\n      }\n\n      return contextObject;\n    },\n    meta: ruleConfig.meta,\n  };\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAKA,IAAAE,cAAA,GAAAF,OAAA;AAIA,IAAAG,QAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAA8B,SAAAI,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,yBAAAH,CAAA,6BAAAI,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAD,wBAAA,YAAAA,CAAAH,CAAA,WAAAA,CAAA,GAAAM,CAAA,GAAAD,CAAA,KAAAL,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAK,CAAA,SAAAA,CAAA,IAAAL,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAE,OAAA,EAAAF,CAAA,QAAAM,CAAA,GAAAH,wBAAA,CAAAE,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAC,GAAA,CAAAP,CAAA,UAAAM,CAAA,CAAAE,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAf,CAAA,oBAAAe,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAd,CAAA,EAAAe,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAf,CAAA,CAAAe,CAAA,YAAAN,CAAA,CAAAP,OAAA,GAAAF,CAAA,EAAAM,CAAA,IAAAA,CAAA,CAAAa,GAAA,CAAAnB,CAAA,EAAAS,CAAA,GAAAA,CAAA;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM;EACJW,WAAW;EACXC;AACF,CAAC,GAAGC,mBAAI;;AAER;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;A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","ignoreList":[]}