{"version":3,"file":"requireDescriptionCompleteSentence.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_escapeStringRegexp","e","__esModule","default","otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replaceAll","replace","sentenceEndGrouping","puncts","matchAll","map","sentEnd","sentence","idx","test","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","some","line","isCapitalized","str","toUpperCase","isTable","charAt","capitalize","slice","validateDescription","description","reportOrig","jsdocNode","sourceCode","tag","newlineBeforeCapsAssumesBadSentenceEnd","descriptionNoHeadings","paragraphs","filter","Boolean","paragraph","parIdx","sentences","fix","fixer","getText","findLast","RegExp","escapeStringRegexp","sentence_","beginning","reg","_$0","$1","replaceText","report","msg","tagObj","source","number","column","paragraphNoAbbreviations","_default","exports","iterateJsdoc","context","jsdoc","utils","abbreviations","options","getInlineTags","includes","length","abbreviation","join","getDescription","indices","match","index","toReversed","forEachPreferredTag","matchingJsdocTag","desc","name","getTagDescription","trim","tagsWithNames","getTagsByType","tags","tagsWithoutNames","filterTags","tagName","has","hasOptionTag","trimEnd","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type","module"],"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport escapeStringRegexp from 'escape-string-regexp';\n\nconst otherDescriptiveTags = new Set([\n  'classdesc', 'deprecated', 'exception', 'file', 'fileoverview', 'overview',\n  // 'copyright' and 'see' might be good addition, but as the former may be\n  //   sensitive text, and the latter may have just a link, they are not\n  //   included by default\n  'summary', 'throws', 'todo', 'yield', 'yields',\n]);\n\n/**\n * @param {string} text\n * @returns {string[]}\n */\nconst extractParagraphs = (text) => {\n  return text.split(/(?<![;:])\\n\\n+/v);\n};\n\n/**\n * @param {string} text\n * @param {string|RegExp} abbreviationsRegex\n * @returns {string[]}\n */\nconst extractSentences = (text, abbreviationsRegex) => {\n  const txt = text\n    // Remove all {} tags.\n    .replaceAll(/(?<!^)\\{[\\s\\S]*?\\}\\s*/gv, '')\n\n    // Remove custom abbreviations\n    .replace(abbreviationsRegex, '');\n\n  const sentenceEndGrouping = /([.?!])(?:\\s+|$)/gv;\n\n  const puncts = [\n    ...txt.matchAll(sentenceEndGrouping),\n  ].map((sentEnd) => {\n    return sentEnd[0];\n  });\n\n  return txt\n    .split(/[.?!](?:\\s+|$)/v)\n\n    // Re-add the dot.\n    .map((sentence, idx) => {\n      return !puncts[idx] && /^\\s*$/v.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;\n    });\n};\n\n/**\n * @param {string} text\n * @returns {boolean}\n */\nconst isNewLinePrecededByAPeriod = (text) => {\n  /** @type {boolean} */\n  let lastLineEndsSentence;\n\n  const lines = text.split('\\n');\n\n  return !lines.some((line) => {\n    if (lastLineEndsSentence === false && /^[A-Z][a-z]/v.test(line)) {\n      return true;\n    }\n\n    lastLineEndsSentence = /[.:?!\\|]$/v.test(line);\n\n    return false;\n  });\n};\n\n/**\n * @param {string} str\n * @returns {boolean}\n */\nconst isCapitalized = (str) => {\n  return str[0] === str[0].toUpperCase();\n};\n\n/**\n * @param {string} str\n * @returns {boolean}\n */\nconst isTable = (str) => {\n  return str.charAt(0) === '|';\n};\n\n/**\n * @param {string} str\n * @returns {string}\n */\nconst capitalize = (str) => {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\n/**\n * @param {string} description\n * @param {import('../iterateJsdoc.js').Report} reportOrig\n * @param {import('eslint').Rule.Node} jsdocNode\n * @param {string|RegExp} abbreviationsRegex\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('comment-parser').Spec|{\n *   line: import('../iterateJsdoc.js').Integer\n * }} tag\n * @param {boolean} newlineBeforeCapsAssumesBadSentenceEnd\n * @returns {boolean}\n */\nconst validateDescription = (\n  description, reportOrig, jsdocNode, abbreviationsRegex,\n  sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd,\n) => {\n  if (!description || (/^\\n+$/v).test(description)) {\n    return false;\n  }\n\n  const descriptionNoHeadings = description.replaceAll(/^\\s*#[^\\n]*(\\n|$)/gmv, '');\n\n  const paragraphs = extractParagraphs(descriptionNoHeadings).filter(Boolean);\n\n  return paragraphs.some((paragraph, parIdx) => {\n    const sentences = extractSentences(paragraph, abbreviationsRegex);\n\n    const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n      let text = sourceCode.getText(jsdocNode);\n\n      if (!/[.:?!]$/v.test(paragraph)) {\n        const line = paragraph.split('\\n').findLast(Boolean);\n        text = text.replace(new RegExp(`${escapeStringRegexp(\n          /** @type {string} */\n          (line),\n        )}$`, 'mv'), `${line}.`);\n      }\n\n      for (const sentence of sentences.filter((sentence_) => {\n        return !(/^\\s*$/v).test(sentence_) && !isCapitalized(sentence_) &&\n          !isTable(sentence_);\n      })) {\n        const beginning = sentence.split('\\n')[0];\n\n        if ('tag' in tag && tag.tag) {\n          const reg = new RegExp(`(@${escapeStringRegexp(tag.tag)}.*)${escapeStringRegexp(beginning)}`, 'v');\n\n          text = text.replace(reg, (_$0, $1) => {\n            return $1 + capitalize(beginning);\n          });\n        } else {\n          text = text.replace(new RegExp('((?:[.?!]|\\\\*|\\\\})\\\\s*)' + escapeStringRegexp(beginning), 'v'), '$1' + capitalize(beginning));\n        }\n      }\n\n      return fixer.replaceText(jsdocNode, text);\n    };\n\n    /**\n     * @param {string} msg\n     * @param {import('eslint').Rule.ReportFixer | null | undefined} fixer\n     * @param {{\n     *   line?: number | undefined;\n     *   column?: number | undefined;\n     * } | (import('comment-parser').Spec & {\n     *   line?: number | undefined;\n     *   column?: number | undefined;\n     * })} tagObj\n     * @returns {void}\n     */\n    const report = (msg, fixer, tagObj) => {\n      if ('line' in tagObj) {\n        /**\n         * @type {{\n         *   line: number;\n         * }}\n         */ (tagObj).line += parIdx * 2;\n      } else {\n        /** @type {import('comment-parser').Spec} */ (\n          tagObj\n        ).source[0].number += parIdx * 2;\n      }\n\n      // Avoid errors if old column doesn't exist here\n      tagObj.column = 0;\n      reportOrig(msg, fixer, tagObj);\n    };\n\n    if (sentences.some((sentence) => {\n      return (/^[.?!]$/v).test(sentence);\n    })) {\n      report('Sentences must be more than punctuation.', null, tag);\n    }\n\n    if (sentences.some((sentence) => {\n      return !(/^\\s*$/v).test(sentence) && !isCapitalized(sentence) && !isTable(sentence);\n    })) {\n      report('Sentences should start with an uppercase character.', fix, tag);\n    }\n\n    const paragraphNoAbbreviations = paragraph.replace(abbreviationsRegex, '');\n\n    if (!/(?:[.?!\\|]|```)\\s*$/v.test(paragraphNoAbbreviations)) {\n      report('Sentences must end with a period.', fix, tag);\n      return true;\n    }\n\n    if (newlineBeforeCapsAssumesBadSentenceEnd && !isNewLinePrecededByAPeriod(paragraphNoAbbreviations)) {\n      report('A line of text is started with an uppercase character, but the preceding line does not end the sentence.', null, tag);\n\n      return true;\n    }\n\n    return false;\n  });\n};\n\nexport default iterateJsdoc(({\n  context,\n  jsdoc,\n  jsdocNode,\n  report,\n  sourceCode,\n  utils,\n}) => {\n  const /** @type {{abbreviations: string[], newlineBeforeCapsAssumesBadSentenceEnd: boolean}} */ {\n    abbreviations = [],\n    newlineBeforeCapsAssumesBadSentenceEnd = false,\n  } = context.options[0] || {};\n\n  // `@inheritDoc` can be used as inline tag with TSDoc/typedoc: https://typedoc.org/documents/Tags.__inheritDoc_.html\n  if (utils.getInlineTags().some(({\n    tag,\n  }) => {\n    return [\n      // Typdoc\n      'include', 'includeCode',\n      // TSDoc\n      'inheritDoc', 'inheritdoc',\n      'label',\n    ].includes(tag);\n  })) {\n    return;\n  }\n\n  const abbreviationsRegex = abbreviations.length ?\n    new RegExp('\\\\b' + abbreviations.map((abbreviation) => {\n      return escapeStringRegexp(abbreviation.replaceAll(/\\.$/gv, '') + '.');\n    }).join('|') + '(?:$|\\\\s)', 'gv') :\n    '';\n\n  let {\n    description,\n  } = utils.getDescription();\n\n  const indices = [\n    ...description.matchAll(/```[\\s\\S]*```/gv),\n  ].map((match) => {\n    const {\n      index,\n    } = match;\n    const [\n      {\n        length,\n      },\n    ] = match;\n    return {\n      index,\n      length,\n    };\n  }).toReversed();\n\n  for (const {\n    index,\n    length,\n  } of indices) {\n    description = description.slice(0, index) +\n      description.slice(/** @type {import('../iterateJsdoc.js').Integer} */ (\n        index\n      ) + length);\n  }\n\n  if (validateDescription(description, report, jsdocNode, abbreviationsRegex, sourceCode, {\n    line: jsdoc.source[0].number + 1,\n  }, newlineBeforeCapsAssumesBadSentenceEnd)) {\n    return;\n  }\n\n  utils.forEachPreferredTag('description', (matchingJsdocTag) => {\n    const desc = `${matchingJsdocTag.name} ${utils.getTagDescription(matchingJsdocTag)}`.trim();\n    validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, matchingJsdocTag, newlineBeforeCapsAssumesBadSentenceEnd);\n  }, true);\n\n  const {\n    tagsWithNames,\n  } = utils.getTagsByType(jsdoc.tags);\n  const tagsWithoutNames = utils.filterTags(({\n    tag: tagName,\n  }) => {\n    return otherDescriptiveTags.has(tagName) ||\n      utils.hasOptionTag(tagName) && !tagsWithNames.some(({\n        tag,\n      }) => {\n        // If user accidentally adds tags with names (or like `returns`\n        //  get parsed as having names), do not add to this list\n        return tag === tagName;\n      });\n  });\n\n  tagsWithNames.some((tag) => {\n    const desc = /** @type {string} */ (\n      utils.getTagDescription(tag)\n    ).replace(/^- /v, '').trimEnd();\n\n    return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n  });\n\n  tagsWithoutNames.some((tag) => {\n    const desc = `${tag.name} ${utils.getTagDescription(tag)}`.trim();\n\n    return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n  });\n}, {\n  iterateAllJsdocs: true,\n  meta: {\n    docs: {\n      description: 'Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-description-complete-sentence.md#repos-sticky-header',\n    },\n    fixable: 'code',\n    schema: [\n      {\n        additionalProperties: false,\n        properties: {\n          abbreviations: {\n            description: `You can provide an \\`abbreviations\\` options array to avoid such strings of text\nbeing treated as sentence endings when followed by dots. The \\`.\\` is not\nnecessary at the end of the array items.`,\n            items: {\n              type: 'string',\n            },\n            type: 'array',\n          },\n          newlineBeforeCapsAssumesBadSentenceEnd: {\n            description: `When \\`false\\` (the new default), we will not assume capital letters after\nnewlines are an incorrect way to end the sentence (they may be proper\nnouns, for example).`,\n            type: 'boolean',\n          },\n          tags: {\n            description: `If you want additional tags to be checked for their descriptions, you may\nadd them within this option.\n\n\\`\\`\\`js\n{\n  'jsdoc/require-description-complete-sentence': ['error', {\n    tags: ['see', 'copyright']\n  }]\n}\n\\`\\`\\`\n\nThe tags \\`@param\\`/\\`@arg\\`/\\`@argument\\` and \\`@property\\`/\\`@prop\\` will be properly\nparsed to ensure that the checked \"description\" text includes only the text\nafter the name.\n\nAll other tags will treat the text following the tag name, a space, and\nan optional curly-bracketed type expression (and another space) as part of\nits \"description\" (e.g., for \\`@returns {someType} some description\\`, the\ndescription is \\`some description\\` while for \\`@some-tag xyz\\`, the description\nis \\`xyz\\`).`,\n            items: {\n              type: 'string',\n            },\n            type: 'array',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAsD,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtD,MAAMG,oBAAoB,GAAG,IAAIC,GAAG,CAAC,CACnC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU;AAC1E;AACA;AACA;AACA,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAC/C,CAAC;;AAEF;AACA;AACA;AACA;AACA,MAAMC,iBAAiB,GAAIC,IAAI,IAAK;EAClC,OAAOA,IAAI,CAACC,KAAK,CAAC,iBAAiB,CAAC;AACtC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAGA,CAACF,IAAI,EAAEG,kBAAkB,KAAK;EACrD,MAAMC,GAAG,GAAGJ;EACV;EAAA,CACCK,UAAU,CAAC,yBAAyB,EAAE,EAAE;;EAEzC;EAAA,CACCC,OAAO,CAACH,kBAAkB,EAAE,EAAE,CAAC;EAElC,MAAMI,mBAAmB,GAAG,oBAAoB;EAEhD,MAAMC,MAAM,GAAG,CACb,GAAGJ,GAAG,CAACK,QAAQ,CAACF,mBAAmB,CAAC,CACrC,CAACG,GAAG,CAAEC,OAAO,IAAK;IACjB,OAAOA,OAAO,CAAC,CAAC,CAAC;EACnB,CAAC,CAAC;EAEF,OAAOP,GAAG,CACPH,KAAK,CAAC,iBAAiB;;EAExB;EAAA,CACCS,GAAG,CAAC,CAACE,QAAQ,EAAEC,GAAG,KAAK;IACtB,OAAO,CAACL,MAAM,CAACK,GAAG,CAAC,IAAI,QAAQ,CAACC,IAAI,CAACF,QAAQ,CAAC,GAAGA,QAAQ,GAAG,GAAGA,QAAQ,GAAGJ,MAAM,CAACK,GAAG,CAAC,IAAI,EAAE,EAAE;EAC/F,CAAC,CAAC;AACN,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAME,0BAA0B,GAAIf,IAAI,IAAK;EAC3C;EACA,IAAIgB,oBAAoB;EAExB,MAAMC,KAAK,GAAGjB,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC;EAE9B,OAAO,CAACgB,KAAK,CAACC,IAAI,CAAEC,IAAI,IAAK;IAC3B,IAAIH,oBAAoB,KAAK,KAAK,IAAI,cAAc,CAACF,IAAI,CAACK,IAAI,CAAC,EAAE;MAC/D,OAAO,IAAI;IACb;IAEAH,oBAAoB,GAAG,YAAY,CAACF,IAAI,CAACK,IAAI,CAAC;IAE9C,OAAO,KAAK;EACd,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMC,aAAa,GAAIC,GAAG,IAAK;EAC7B,OAAOA,GAAG,CAAC,CAAC,CAAC,KAAKA,GAAG,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;AACxC,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMC,OAAO,GAAIF,GAAG,IAAK;EACvB,OAAOA,GAAG,CAACG,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;AAC9B,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMC,UAAU,GAAIJ,GAAG,IAAK;EAC1B,OAAOA,GAAG,CAACG,MAAM,CAAC,CAAC,CAAC,CAACF,WAAW,CAAC,CAAC,GAAGD,GAAG,CAACK,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,mBAAmB,GAAGA,CAC1BC,WAAW,EAAEC,UAAU,EAAEC,SAAS,EAAE3B,kBAAkB,EACtD4B,UAAU,EAAEC,GAAG,EAAEC,sCAAsC,KACpD;EACH,IAAI,CAACL,WAAW,IAAK,QAAQ,CAAEd,IAAI,CAACc,WAAW,CAAC,EAAE;IAChD,OAAO,KAAK;EACd;EAEA,MAAMM,qBAAqB,GAAGN,WAAW,CAACvB,UAAU,CAAC,sBAAsB,EAAE,EAAE,CAAC;EAEhF,MAAM8B,UAAU,GAAGpC,iBAAiB,CAACmC,qBAAqB,CAAC,CAACE,MAAM,CAACC,OAAO,CAAC;EAE3E,OAAOF,UAAU,CAACjB,IAAI,CAAC,CAACoB,SAAS,EAAEC,MAAM,KAAK;IAC5C,MAAMC,SAAS,GAAGtC,gBAAgB,CAACoC,SAAS,EAAEnC,kBAAkB,CAAC;IAEjE,MAAMsC,GAAG,GAAG,gDAAkDC,KAAK,IAAK;MACtE,IAAI1C,IAAI,GAAG+B,UAAU,CAACY,OAAO,CAACb,SAAS,CAAC;MAExC,IAAI,CAAC,UAAU,CAAChB,IAAI,CAACwB,SAAS,CAAC,EAAE;QAC/B,MAAMnB,IAAI,GAAGmB,SAAS,CAACrC,KAAK,CAAC,IAAI,CAAC,CAAC2C,QAAQ,CAACP,OAAO,CAAC;QACpDrC,IAAI,GAAGA,IAAI,CAACM,OAAO,CAAC,IAAIuC,MAAM,CAAC,GAAG,IAAAC,2BAAkB,EAClD;QACC3B,IACH,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,GAAGA,IAAI,GAAG,CAAC;MAC1B;MAEA,KAAK,MAAMP,QAAQ,IAAI4B,SAAS,CAACJ,MAAM,CAAEW,SAAS,IAAK;QACrD,OAAO,CAAE,QAAQ,CAAEjC,IAAI,CAACiC,SAAS,CAAC,IAAI,CAAC3B,aAAa,CAAC2B,SAAS,CAAC,IAC7D,CAACxB,OAAO,CAACwB,SAAS,CAAC;MACvB,CAAC,CAAC,EAAE;QACF,MAAMC,SAAS,GAAGpC,QAAQ,CAACX,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEzC,IAAI,KAAK,IAAI+B,GAAG,IAAIA,GAAG,CAACA,GAAG,EAAE;UAC3B,MAAMiB,GAAG,GAAG,IAAIJ,MAAM,CAAC,KAAK,IAAAC,2BAAkB,EAACd,GAAG,CAACA,GAAG,CAAC,MAAM,IAAAc,2BAAkB,EAACE,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC;UAElGhD,IAAI,GAAGA,IAAI,CAACM,OAAO,CAAC2C,GAAG,EAAE,CAACC,GAAG,EAAEC,EAAE,KAAK;YACpC,OAAOA,EAAE,GAAG1B,UAAU,CAACuB,SAAS,CAAC;UACnC,CAAC,CAAC;QACJ,CAAC,MAAM;UACLhD,IAAI,GAAGA,IAAI,CAACM,OAAO,CAAC,IAAIuC,MAAM,CAAC,yBAAyB,GAAG,IAAAC,2BAAkB,EAACE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,GAAGvB,UAAU,CAACuB,SAAS,CAAC,CAAC;QAC/H;MACF;MAEA,OAAON,KAAK,CAACU,WAAW,CAACtB,SAAS,EAAE9B,IAAI,CAAC;IAC3C,CAAC;;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI,MAAMqD,MAAM,GAAGA,CAACC,GAAG,EAAEZ,KAAK,EAAEa,MAAM,KAAK;MACrC,IAAI,MAAM,IAAIA,MAAM,EAAE;QACpB;AACR;AACA;AACA;AACA;QAAaA,MAAM,CAAEpC,IAAI,IAAIoB,MAAM,GAAG,CAAC;MACjC,CAAC,MAAM;QACL,4CACEgB,MAAM,CACNC,MAAM,CAAC,CAAC,CAAC,CAACC,MAAM,IAAIlB,MAAM,GAAG,CAAC;MAClC;;MAEA;MACAgB,MAAM,CAACG,MAAM,GAAG,CAAC;MACjB7B,UAAU,CAACyB,GAAG,EAAEZ,KAAK,EAAEa,MAAM,CAAC;IAChC,CAAC;IAED,IAAIf,SAAS,CAACtB,IAAI,CAAEN,QAAQ,IAAK;MAC/B,OAAQ,UAAU,CAAEE,IAAI,CAACF,QAAQ,CAAC;IACpC,CAAC,CAAC,EAAE;MACFyC,MAAM,CAAC,0CAA0C,EAAE,IAAI,EAAErB,GAAG,CAAC;IAC/D;IAEA,IAAIQ,SAAS,CAACtB,IAAI,CAAEN,QAAQ,IAAK;MAC/B,OAAO,CAAE,QAAQ,CAAEE,IAAI,CAACF,QAAQ,CAAC,IAAI,CAACQ,aAAa,CAACR,QAAQ,CAAC,IAAI,CAACW,OAAO,CAACX,QAAQ,CAAC;IACrF,CAAC,CAAC,EAAE;MACFyC,MAAM,CAAC,qDAAqD,EAAEZ,GAAG,EAAET,GAAG,CAAC;IACzE;IAEA,MAAM2B,wBAAwB,GAAGrB,SAAS,CAAChC,OAAO,CAACH,kBAAkB,EAAE,EAAE,CAAC;IAE1E,IAAI,CAAC,sBAAsB,CAACW,IAAI,CAAC6C,wBAAwB,CAAC,EAAE;MAC1DN,MAAM,CAAC,mCAAmC,EAAEZ,GAAG,EAAET,GAAG,CAAC;MACrD,OAAO,IAAI;IACb;IAEA,IAAIC,sCAAsC,IAAI,CAAClB,0BAA0B,CAAC4C,wBAAwB,CAAC,EAAE;MACnGN,MAAM,CAAC,0GAA0G,EAAE,IAAI,EAAErB,GAAG,CAAC;MAE7H,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd,CAAC,CAAC;AACJ,CAAC;AAAC,IAAA4B,QAAA,GAAAC,OAAA,CAAAjE,OAAA,GAEa,IAAAkE,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,KAAK;EACLlC,SAAS;EACTuB,MAAM;EACNtB,UAAU;EACVkC;AACF,CAAC,KAAK;EACJ,MAAM,yFAA0F;IAC9FC,aAAa,GAAG,EAAE;IAClBjC,sCAAsC,GAAG;EAC3C,CAAC,GAAG8B,OAAO,CAACI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;;EAE5B;EACA,IAAIF,KAAK,CAACG,aAAa,CAAC,CAAC,CAAClD,IAAI,CAAC,CAAC;IAC9Bc;EACF,CAAC,KAAK;IACJ,OAAO;IACL;IACA,SAAS,EAAE,aAAa;IACxB;IACA,YAAY,EAAE,YAAY,EAC1B,OAAO,CACR,CAACqC,QAAQ,CAACrC,GAAG,CAAC;EACjB,CAAC,CAAC,EAAE;IACF;EACF;EAEA,MAAM7B,kBAAkB,GAAG+D,aAAa,CAACI,MAAM,GAC7C,IAAIzB,MAAM,CAAC,KAAK,GAAGqB,aAAa,CAACxD,GAAG,CAAE6D,YAAY,IAAK;IACrD,OAAO,IAAAzB,2BAAkB,EAACyB,YAAY,CAAClE,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;EACvE,CAAC,CAAC,CAACmE,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,GACjC,EAAE;EAEJ,IAAI;IACF5C;EACF,CAAC,GAAGqC,KAAK,CAACQ,cAAc,CAAC,CAAC;EAE1B,MAAMC,OAAO,GAAG,CACd,GAAG9C,WAAW,CAACnB,QAAQ,CAAC,iBAAiB,CAAC,CAC3C,CAACC,GAAG,CAAEiE,KAAK,IAAK;IACf,MAAM;MACJC;IACF,CAAC,GAAGD,KAAK;IACT,MAAM,CACJ;MACEL;IACF,CAAC,CACF,GAAGK,KAAK;IACT,OAAO;MACLC,KAAK;MACLN;IACF,CAAC;EACH,CAAC,CAAC,CAACO,UAAU,CAAC,CAAC;EAEf,KAAK,MAAM;IACTD,KAAK;IACLN;EACF,CAAC,IAAII,OAAO,EAAE;IACZ9C,WAAW,GAAGA,WAAW,CAACF,KAAK,CAAC,CAAC,EAAEkD,KAAK,CAAC,GACvChD,WAAW,CAACF,KAAK,CAAC,mDAChBkD,KAAK,GACHN,MAAM,CAAC;EACf;EAEA,IAAI3C,mBAAmB,CAACC,WAAW,EAAEyB,MAAM,EAAEvB,SAAS,EAAE3B,kBAAkB,EAAE4B,UAAU,EAAE;IACtFZ,IAAI,EAAE6C,KAAK,CAACR,MAAM,CAAC,CAAC,CAAC,CAACC,MAAM,GAAG;EACjC,CAAC,EAAExB,sCAAsC,CAAC,EAAE;IAC1C;EACF;EAEAgC,KAAK,CAACa,mBAAmB,CAAC,aAAa,EAAGC,gBAAgB,IAAK;IAC7D,MAAMC,IAAI,GAAG,GAAGD,gBAAgB,CAACE,IAAI,IAAIhB,KAAK,CAACiB,iBAAiB,CAACH,gBAAgB,CAAC,EAAE,CAACI,IAAI,CAAC,CAAC;IAC3FxD,mBAAmB,CAACqD,IAAI,EAAE3B,MAAM,EAAEvB,SAAS,EAAE3B,kBAAkB,EAAE4B,UAAU,EAAEgD,gBAAgB,EAAE9C,sCAAsC,CAAC;EACxI,CAAC,EAAE,IAAI,CAAC;EAER,MAAM;IACJmD;EACF,CAAC,GAAGnB,KAAK,CAACoB,aAAa,CAACrB,KAAK,CAACsB,IAAI,CAAC;EACnC,MAAMC,gBAAgB,GAAGtB,KAAK,CAACuB,UAAU,CAAC,CAAC;IACzCxD,GAAG,EAAEyD;EACP,CAAC,KAAK;IACJ,OAAO5F,oBAAoB,CAAC6F,GAAG,CAACD,OAAO,CAAC,IACtCxB,KAAK,CAAC0B,YAAY,CAACF,OAAO,CAAC,IAAI,CAACL,aAAa,CAAClE,IAAI,CAAC,CAAC;MAClDc;IACF,CAAC,KAAK;MACJ;MACA;MACA,OAAOA,GAAG,KAAKyD,OAAO;IACxB,CAAC,CAAC;EACN,CAAC,CAAC;EAEFL,aAAa,CAAClE,IAAI,CAAEc,GAAG,IAAK;IAC1B,MAAMgD,IAAI,GAAG,qBACXf,KAAK,CAACiB,iBAAiB,CAAClD,GAAG,CAAC,CAC5B1B,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAACsF,OAAO,CAAC,CAAC;IAE/B,OAAOjE,mBAAmB,CAACqD,IAAI,EAAE3B,MAAM,EAAEvB,SAAS,EAAE3B,kBAAkB,EAAE4B,UAAU,EAAEC,GAAG,EAAEC,sCAAsC,CAAC;EAClI,CAAC,CAAC;EAEFsD,gBAAgB,CAACrE,IAAI,CAAEc,GAAG,IAAK;IAC7B,MAAMgD,IAAI,GAAG,GAAGhD,GAAG,CAACiD,IAAI,IAAIhB,KAAK,CAACiB,iBAAiB,CAAClD,GAAG,CAAC,EAAE,CAACmD,IAAI,CAAC,CAAC;IAEjE,OAAOxD,mBAAmB,CAACqD,IAAI,EAAE3B,MAAM,EAAEvB,SAAS,EAAE3B,kBAAkB,EAAE4B,UAAU,EAAEC,GAAG,EAAEC,sCAAsC,CAAC;EAClI,CAAC,CAAC;AACJ,CAAC,EAAE;EACD4D,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJnE,WAAW,EAAE,uIAAuI;MACpJoE,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVlC,aAAa,EAAE;UACbtC,WAAW,EAAE;AACzB;AACA,yCAAyC;UAC7ByE,KAAK,EAAE;YACLC,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACDrE,sCAAsC,EAAE;UACtCL,WAAW,EAAE;AACzB;AACA,qBAAqB;UACT0E,IAAI,EAAE;QACR,CAAC;QACDhB,IAAI,EAAE;UACJ1D,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;UACDyE,KAAK,EAAE;YACLC,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAC,MAAA,CAAA1C,OAAA,GAAAA,OAAA,CAAAjE,OAAA","ignoreList":[]}