canvas-editor-pdf
Version:
pdf exporter to canvas-editor
8,982 lines • 386 kB
JavaScript
var Pe = Object.defineProperty;
var Ne = (i, t, R) => t in i ? Pe(i, t, { enumerable: !0, configurable: !0, writable: !0, value: R }) : i[t] = R;
var F = (i, t, R) => Ne(i, typeof t != "symbol" ? t + "" : t, R);
import { GState as tR, jsPDF as Fe } from "jspdf";
var jt = /* @__PURE__ */ ((i) => (i.HALF = "half", i.ONE_THIRD = "one-third", i.QUARTER = "quarter", i))(jt || {}), WR = /* @__PURE__ */ ((i) => (i.ARABIC = "arabic", i.CHINESE = "chinese", i))(WR || {}), Rt = /* @__PURE__ */ ((i) => (i.INLINE = "inline", i.BLOCK = "block", i.SURROUND = "surround", i.FLOAT_TOP = "float-top", i.FLOAT_BOTTOM = "float-bottom", i))(Rt || {});
const q = "", jR = " ", ue = [
"·",
"、",
":",
":",
",",
",",
".",
"。",
";",
";",
"?",
"?",
"!",
"!"
], qR = {
[jt.HALF]: 1 / 2,
[jt.ONE_THIRD]: 1 / 3,
[jt.QUARTER]: 1 / 4
}, Se = {
ENGLISH: "A-Za-z"
}, Le = "中";
var Gt = /* @__PURE__ */ ((i) => (i.LEFT = "left", i.CENTER = "center", i.RIGHT = "right", i.ALIGNMENT = "alignment", i.JUSTIFY = "justify", i))(Gt || {});
const he = /[\uD800-\uDBFF][\uDC00-\uDFFF]/, Te = /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g, We = new RegExp(
`${Te.source}|${he.source}`,
"g"
), Ye = /[、,。?!;:……「」“”‘’*()【】〔〕〖〗〘〙〚〛《》———﹝﹞–—\\/·.,!?;:`~<>()[\]{}'"|]/, cR = new RegExp(`^[${q}
]`);
function mt(i) {
if (typeof structuredClone == "function")
return structuredClone(i);
if (!i || typeof i != "object")
return i;
let t = {};
return Array.isArray(i) ? t = i.map((R) => mt(R)) : Object.keys(i).forEach((R) => {
t[R] = mt(i[R]);
}), t;
}
function Yt() {
function i() {
return ((1 + Math.random()) * 65536 | 0).toString(16).substring(1);
}
return i() + i() + "-" + i() + "-" + i() + "-" + i() + "-" + i() + i() + i();
}
function wt(i) {
const t = [];
if (Intl.Segmenter) {
const e = new Intl.Segmenter().segment(i);
for (const { segment: o } of e)
t.push(o);
} else {
const R = /* @__PURE__ */ new Map();
for (const o of i.matchAll(We))
R.set(o.index, o[0]);
let e = 0;
for (; e < i.length; ) {
const o = R.get(e);
o ? (t.push(o), e += o.length) : (t.push(i[e]), e++);
}
}
return t;
}
function xR(i) {
return Object.prototype.toString.call(i) === "[object Object]";
}
function BR(i) {
return Array.isArray(i);
}
function te(i, t) {
if (xR(i) && xR(t)) {
const R = t;
for (const [e, o] of Object.entries(i))
e === "__proto__" || e === "constructor" || e === "prototype" || (R[e] ? R[e] = te(o, R[e]) : R[e] = o);
} else BR(i) && BR(t) && t.push(...i);
return t;
}
function Ve(i) {
const t = [
"零",
"一",
"二",
"三",
"四",
"五",
"六",
"七",
"八",
"九"
], R = [
"",
"十",
"百",
"千",
"万",
"十",
"百",
"千",
"亿",
"十",
"百",
"千",
"万",
"十",
"百",
"千",
"亿"
];
if (!i || isNaN(i)) return "零";
const e = i.toString().split("");
let o = "";
for (let n = 0; n < e.length; n++) {
const s = e.length - 1 - n;
o = `${R[n]}${o}`, o = `${t[Number(e[s])]}${o}`;
}
return o = o.replace(/零(千|百|十)/g, "零").replace(/十零/g, "十"), o = o.replace(/零+/g, "零"), o = o.replace(/零亿/g, "亿").replace(/零万/g, "万"), o = o.replace(/亿万/g, "亿"), o = o.replace(/零+$/, ""), o = o.replace(/^一十/g, "十"), o;
}
function LR(i, t) {
const R = {};
for (const e in i)
t.includes(e) && (R[e] = i[e]);
return R;
}
function ce(i) {
const R = new TextEncoder().encode(i), e = Array.from(R, (n) => String.fromCharCode(n));
return btoa(e.join(""));
}
function Qe(i, t) {
return i.length !== t.length ? !1 : !i.some((R) => !t.includes(R));
}
function Ze(i, t) {
const R = i.x, e = i.x + i.width, o = i.y, n = i.y + i.height, s = t.x, r = t.x + t.width, l = t.y, a = t.y + t.height;
return !(R > r || e < s || o > a || n < l);
}
function Ue(i) {
return i == null;
}
function Ke(i) {
return new Promise((t, R) => {
const e = new Image();
e.onload = () => t(e), e.onerror = R, e.src = i;
});
}
var Bt = /* @__PURE__ */ ((i) => (i.TEXT = "text", i.SELECT = "select", i.CHECKBOX = "checkbox", i.RADIO = "radio", i.DATE = "date", i.NUMBER = "number", i))(Bt || {}), j = /* @__PURE__ */ ((i) => (i.PREFIX = "prefix", i.POSTFIX = "postfix", i.PRE_TEXT = "preText", i.POST_TEXT = "postText", i.PLACEHOLDER = "placeholder", i.VALUE = "value", i.CHECKBOX = "checkbox", i.RADIO = "radio", i))(j || {}), Re = /* @__PURE__ */ ((i) => (i.ROW_START = "rowStart", i.VALUE_START = "valueStart", i))(Re || {}), ee = /* @__PURE__ */ ((i) => (i.COMPONENT = "component", i.MENU = "menu", i.MAIN = "main", i.FOOTER = "footer", i.CONTEXTMENU = "contextmenu", i.POPUP = "popup", i.CATALOG = "catalog", i.COMMENT = "comment", i))(ee || {}), dt = /* @__PURE__ */ ((i) => (i.EDIT = "edit", i.CLEAN = "clean", i.READONLY = "readonly", i.FORM = "form", i.PRINT = "print", i.DESIGN = "design", i.GRAFFITI = "graffiti", i))(dt || {}), Qt = /* @__PURE__ */ ((i) => (i.HEADER = "header", i.MAIN = "main", i.FOOTER = "footer", i))(Qt || {}), bt = /* @__PURE__ */ ((i) => (i.PAGING = "paging", i.CONTINUITY = "continuity", i))(bt || {}), _t = /* @__PURE__ */ ((i) => (i.VERTICAL = "vertical", i.HORIZONTAL = "horizontal", i))(_t || {}), GR = /* @__PURE__ */ ((i) => (i.BREAK_ALL = "break-all", i.BREAK_WORD = "break-word", i))(GR || {}), JR = /* @__PURE__ */ ((i) => (i.SPEED = "speed", i.COMPATIBILITY = "compatibility", i))(JR || {});
const de = "editor-component", it = "ce", QR = {
print: {
imagePreviewerDisabled: !1,
backgroundDisabled: !1,
filterEmptyControl: !1,
areaHideDisabled: !1
},
readonly: {
imagePreviewerDisabled: !1
},
form: {
controlDeletableDisabled: !1
}
};
var V = /* @__PURE__ */ ((i) => (i.TEXT = "text", i.IMAGE = "image", i.TABLE = "table", i.HYPERLINK = "hyperlink", i.SUPERSCRIPT = "superscript", i.SUBSCRIPT = "subscript", i.SEPARATOR = "separator", i.PAGE_BREAK = "pageBreak", i.CONTROL = "control", i.AREA = "area", i.CHECKBOX = "checkbox", i.RADIO = "radio", i.LATEX = "latex", i.TAB = "tab", i.DATE = "date", i.BLOCK = "block", i.TITLE = "title", i.LIST = "list", i.LABEL = "label", i))(V || {});
const At = {
defaultFontSource: "cdn",
createMeasurementCanvas() {
return document.createElement("canvas");
},
createCanvas(i, t) {
const R = document.createElement("canvas");
return R.width = i, R.height = t, R;
},
getBundledFontPath(i) {
throw new Error(
`fontSource 'bundled' is not supported in the browser build (looking up ${i}). Use 'cdn' (default) or host the TTFs and pass { dir: '/your/url/base' }.`
);
},
async loadFontAsBase64(i) {
const t = await fetch(i);
if (!t.ok)
throw new Error(
`Font fetch failed: ${t.status} ${t.statusText}`
);
const R = await t.blob();
return new Promise((e, o) => {
const n = new FileReader();
n.onload = () => {
const r = n.result.split("base64,")[1];
e(r);
}, n.onerror = () => o(n.error), n.readAsDataURL(R);
});
},
registerFontForMeasurement() {
},
svgToPngDataUrl(i, t, R) {
return new Promise((e, o) => {
const n = document.createElement("canvas");
n.width = t, n.height = R;
const s = n.getContext("2d"), r = new Image();
r.onload = () => {
s.clearRect(0, 0, t, R), s.drawImage(r, 0, 0, t, R), e(n.toDataURL("image/png"));
}, r.onerror = () => o(new Error("canvas-editor-pdf: failed to rasterize SVG")), r.src = i.startsWith("data:image/svg+xml") ? i : "data:image/svg+xml;base64," + btoa(unescape(encodeURIComponent(i)));
});
}
};
class ie {
constructor(t) {
F(this, "draw");
F(this, "options");
F(this, "imageCache");
// private container: HTMLDivElement
F(this, "floatImageContainer");
F(this, "floatImage");
this.draw = t, this.options = t.getOptions(), this.imageCache = /* @__PURE__ */ new Map(), this.floatImageContainer = null, this.floatImage = null;
}
getOriginalMainImageList() {
const t = [], R = (e) => {
for (const o of e)
if (o.type === V.TABLE) {
const n = o.trList;
for (let s = 0; s < n.length; s++) {
const r = n[s];
for (let l = 0; l < r.tdList.length; l++) {
const a = r.tdList[l];
R(a.value);
}
}
} else o.type === V.IMAGE && t.push(o);
};
return R(this.draw.getOriginalMainElementList()), t;
}
_countImagesBeforeTarget(t, R) {
let e = 0;
for (const o of t) {
if (o === R) break;
if (o.type === V.TABLE) {
const n = o.trList;
for (const s of n)
for (const r of s.tdList)
e += this._countImagesBeforeTarget(r.value, R);
} else o.type === V.IMAGE && e++;
}
return e;
}
createFloatImage(t) {
const { scale: R } = this.options;
let e = this.floatImageContainer, o = this.floatImage;
e || (e = document.createElement("div"), e.classList.add(`${it}-float-image`), this.floatImageContainer = e), o || (o = document.createElement("img"), e.append(o), this.floatImage = o), e.style.display = "none", o.style.width = `${t.width * R}px`, o.style.height = `${t.height * R}px`;
const n = this.draw.getHeight(), s = this.draw.getPageGap(), r = this.draw.getPageNo() * (n + s), l = t.imgFloatPosition;
e.style.left = `${l.x * R}px`, e.style.top = `${r + l.y * R}px`, o.src = t.value;
}
dragFloatImage(t, R) {
if (!this.floatImageContainer) return;
this.floatImageContainer.style.display = "block";
const e = parseFloat(this.floatImageContainer.style.left) + t, o = parseFloat(this.floatImageContainer.style.top) + R;
this.floatImageContainer.style.left = `${e}px`, this.floatImageContainer.style.top = `${o}px`;
}
destroyFloatImage() {
this.floatImageContainer && (this.floatImageContainer.style.display = "none");
}
addImageObserver(t) {
this.draw.getImageObserver().add(t);
}
getFallbackImage(t, R) {
const o = (t - Math.ceil(t / 8) * 8) / 2, n = (R - Math.ceil(R / 8) * 8) / 2, s = `<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${R}" viewBox="0 0 ${t} ${R}">
<rect width="${t}" height="${R}" fill="url(#mosaic)" />
<defs>
<pattern id="mosaic" x="${o}" y="${n}" width="${8 * 2}" height="${8 * 2}" patternUnits="userSpaceOnUse">
<rect width="8" height="8" fill="#cccccc" />
<rect width="8" height="8" fill="#cccccc" transform="translate(8, 8)" />
</pattern>
</defs>
</svg>`, r = new Image();
return r.src = `data:image/svg+xml;base64,${ce(
s
)}`, r;
}
_renderCaption(t, R, e, o, n, s) {
var Y;
if (!((Y = R.imgCaption) != null && Y.value)) return;
const { scale: r, imgCaption: l } = this.options;
let a = R.imgCaption.value;
if (a.includes("{imageNo}")) {
const S = this.draw.getOriginalMainElementList(), W = this._countImagesBeforeTarget(S, R) + 1;
a = a.replace(/\{imageNo\}/g, String(W));
}
const O = (R.imgCaption.size || l.size) * r, M = R.imgCaption.font || l.font, X = R.imgCaption.color || l.color;
t.save(), t.font = `${O}px ${M}`, t.fillStyle = X, t.textAlign = "center";
let P = a;
const N = this.draw.getFakeCtx().measureText(a);
if (N.width > n) {
let S = 0, W = a.length;
for (; S < W; ) {
const c = Math.ceil((S + W) / 2), T = a.substring(0, c);
this.draw.getFakeCtx().measureText(T + "...").width <= n ? S = c : W = c - 1;
}
P = a.substring(0, S) + "...";
}
const u = (R.imgCaption.top ?? l.top) * r, h = o + s + u + N.actualBoundingBoxAscent, L = e + n / 2;
t.fillText(P, L, h), t.restore();
}
render(t, R, e, o) {
if (!R.value) return;
const { scale: n } = this.options, s = R.width * n, r = R.height * n;
t.drawImage(R.value, e, o, s, r), this._renderCaption(t, R, e, o, s, r);
}
}
function Os(i, t, R, e, o) {
return At.svgToPngDataUrl(i, t, R).then((n) => (o(n), n));
}
const uR = 82;
function vt(i) {
return gR[i] == null && ge(i), gR[i];
}
function ge(i) {
const t = Ie[i];
if (t == null)
return;
const R = t.substring(3, 5), e = 1 * R.charCodeAt(0) - uR, o = 1 * R.charCodeAt(1) - uR, n = t.substring(5), s = [[]];
let r = 1 / 0, l = -1 / 0, a = 1 / 0, O = -1 / 0, M = 0;
for (; M < n.length; ) {
const X = n.substring(M, M + 2);
if (X == " R")
s.push([]);
else {
const P = X.charCodeAt(0) - uR - e, N = X.charCodeAt(1) - uR;
r = Math.min(N, r), l = Math.max(N, l), a = Math.min(P, a), O = Math.max(P, O), s[s.length - 1].push([P, N]);
}
M += 2;
}
gR[i] = {
w: o - e,
xmin: a,
xmax: O,
ymin: r,
ymax: l,
polylines: s
};
}
const gR = {}, Ie = {
1: " 9MWRMNV RRMVV RPSTS",
2: " 16MWOMOV ROMSMUNUPSQ ROQSQURUUSVOV",
3: " 11MXVNTMRMPNOPOSPURVTVVU",
4: " 12MWOMOV ROMRMTNUPUSTURVOV",
5: " 12MWOMOV ROMUM ROQSQ ROVUV",
6: " 9MVOMOV ROMUM ROQSQ",
7: " 15MXVNTMRMPNOPOSPURVTVVUVR RSRVR",
8: " 9MWOMOV RUMUV ROQUQ",
9: " 3PTRMRV",
10: " 7NUSMSTRVPVOTOS",
11: " 9MWOMOV RUMOS RQQUV",
12: " 6MVOMOV ROVUV",
13: " 12LXNMNV RNMRV RVMRV RVMVV",
14: " 9MWOMOV ROMUV RUMUV",
15: " 14MXRMPNOPOSPURVSVUUVSVPUNSMRM",
16: " 10MWOMOV ROMSMUNUQSROR",
17: " 17MXRMPNOPOSPURVSVUUVSVPUNSMRM RSTVW",
18: " 13MWOMOV ROMSMUNUQSROR RRRUV",
19: " 13MWUNSMQMONOOPPTRUSUUSVQVOU",
20: " 6MWRMRV RNMVM",
21: " 9MXOMOSPURVSVUUVSVM",
22: " 6MWNMRV RVMRV",
23: " 12LXNMPV RRMPV RRMTV RVMTV",
24: " 6MWOMUV RUMOV",
25: " 7MWNMRQRV RVMRQ",
26: " 9MWUMOV ROMUM ROVUV",
27: " 9MWRMNV RRMVV RPSTS",
28: " 16MWOMOV ROMSMUNUPSQ ROQSQURUUSVOV",
29: " 6MVOMOV ROMUM",
30: " 9MWRMNV RRMVV RNVVV",
31: " 12MWOMOV ROMUM ROQSQ ROVUV",
32: " 9MWUMOV ROMUM ROVUV",
33: " 9MWOMOV RUMUV ROQUQ",
34: " 20MXRMPNOPOSPURVSVUUVSVPUNSMRM RQQTR RTQQR",
35: " 3PTRMRV",
36: " 9MWOMOV RUMOS RQQUV",
37: " 6MWRMNV RRMVV",
38: " 12LXNMNV RNMRV RVMRV RVMVV",
39: " 9MWOMOV ROMUV RUMUV",
40: " 12MWOMUM RPQTR RTQPR ROVUV",
41: " 14MXRMPNOPOSPURVSVUUVSVPUNSMRM",
42: " 9MWOMOV RUMUV ROMUM",
43: " 10MWOMOV ROMSMUNUQSROR",
44: " 10MWOMRQOV ROMUM ROVUV",
45: " 6MWRMRV RNMVM",
46: " 15MWNONNOMPMQNRPRV RVOVNUMTMSNRP",
47: " 13LXRMRV RPONPNSPTTTVSVPTOPO",
48: " 6MWOMUV RUMOV",
49: " 12LXRMRV RNOOPOSQTSTUSUPVO",
50: " 13MXOVQVOROPPNRMSMUNVPVRTVVV",
200: " 12MWRMPNOPOSPURVTUUSUPTNRM",
201: " 4MWPORMRV",
202: " 9MWONQMSMUNUPTROVUV",
203: " 15MWONQMSMUNUPSQ RRQSQURUUSVQVOU",
204: " 7MWSMSV RSMNSVS",
205: " 14MWPMOQQPRPTQUSTURVQVOU RPMTM",
206: " 14MWTMRMPNOPOSPURVTUUSTQRPPQOS",
207: " 6MWUMQV ROMUM",
208: " 19MWQMONOPQQSQUPUNSMQM RQQOROUQVSVUUURSQ",
209: " 14MWUPTRRSPROPPNRMTNUPUSTURVPV",
210: " 6PURURVSVSURU",
211: " 7PUSVRVRUSUSWRY",
212: " 12PURPRQSQSPRP RRURVSVSURU",
213: " 13PURPRQSQSPRP RSVRVRUSUSWRY",
214: " 12PURMRR RSMSR RRURVSVSURU",
215: " 17NWPNRMSMUNUPRQRRSRSQUP RRURVSVSURU",
216: " 3PTRMRQ",
217: " 6NVPMPQ RTMTQ",
218: " 10NVQMPNPPQQSQTPTNSMQM",
219: " 16MWUNSMQMONOPQQTRUSUUSVQVOU RRLRW",
220: " 3MWVLNW",
221: " 7OVTLRNQPQSRUTW",
222: " 7NUPLRNSPSSRUPW",
223: " 3PTRLRW",
224: " 3LXNRVR",
225: " 6LXRNRV RNRVR",
226: " 6LXNPVP RNTVT",
227: " 6MWOOUU RUOOU",
228: " 9MWRORU ROPUT RUPOT",
229: " 6PURQRRSRSQRQ",
230: " 7PUSMRORQSQSPRP",
231: " 7PUSNRNRMSMSORQ",
232: " 7LXSOVRSU RNRVR",
233: " 12MXRLPW RULSW ROPVP ROSVS",
234: " 21LXVRURTSSURVOVNUNSORRQSPSNRMPMONOPQSSUUVVV",
235: " 20LXNNOQOSNV RVNUQUSVV RNNQOSOVN RNVQUSUVV",
501: " 9I[RFJ[ RRFZ[ RMTWT",
502: " 24G\\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[",
503: " 19H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV",
504: " 16G\\KFK[ RKFRFUGWIXKYNYSXVWXUZR[K[",
505: " 12H[LFL[ RLFYF RLPTP RL[Y[",
506: " 9HZLFL[ RLFYF RLPTP",
507: " 23H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZS RUSZS",
508: " 9G]KFK[ RYFY[ RKPYP",
509: " 3NVRFR[",
510: " 11JZVFVVUYTZR[P[NZMYLVLT",
511: " 9G\\KFK[ RYFKT RPOY[",
512: " 6HYLFL[ RL[X[",
513: " 12F^JFJ[ RJFR[ RZFR[ RZFZ[",
514: " 9G]KFK[ RKFY[ RYFY[",
515: " 22G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF",
516: " 14G\\KFK[ RKFTFWGXHYJYMXOWPTQKQ",
517: " 25G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RSWY]",
518: " 17G\\KFK[ RKFTFWGXHYJYLXNWOTPKP RRPY[",
519: " 21H\\YIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX",
520: " 6JZRFR[ RKFYF",
521: " 11G]KFKULXNZQ[S[VZXXYUYF",
522: " 6I[JFR[ RZFR[",
523: " 12F^HFM[ RRFM[ RRFW[ R\\FW[",
524: " 6H\\KFY[ RYFK[",
525: " 7I[JFRPR[ RZFRP",
526: " 9H\\YFK[ RKFYF RK[Y[",
527: " 9I[RFJ[ RRFZ[ RMTWT",
528: " 24G\\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[",
529: " 6HYLFL[ RLFXF",
530: " 9I[RFJ[ RRFZ[ RJ[Z[",
531: " 12H[LFL[ RLFYF RLPTP RL[Y[",
532: " 9H\\YFK[ RKFYF RK[Y[",
533: " 9G]KFK[ RYFY[ RKPYP",
534: " 25G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF ROPUP",
535: " 3NVRFR[",
536: " 9G\\KFK[ RYFKT RPOY[",
537: " 6I[RFJ[ RRFZ[",
538: " 12F^JFJ[ RJFR[ RZFR[ RZFZ[",
539: " 9G]KFK[ RKFY[ RYFY[",
540: " 9I[KFYF ROPUP RK[Y[",
541: " 22G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF",
542: " 9G]KFK[ RYFY[ RKFYF",
543: " 14G\\KFK[ RKFTFWGXHYJYMXOWPTQKQ",
544: " 10I[KFRPK[ RKFYF RK[Y[",
545: " 6JZRFR[ RKFYF",
546: " 19I[KKKILGMFOFPGQIRMR[ RYKYIXGWFUFTGSIRM",
547: " 21H\\RFR[ RPKMLLMKOKRLTMUPVTVWUXTYRYOXMWLTKPK",
548: " 6H\\KFY[ RK[YF",
549: " 18G]RFR[ RILJLKMLQMSNTQUSUVTWSXQYMZL[L",
550: " 17H\\K[O[LTKPKLLINGQFSFVGXIYLYPXTU[Y[",
551: " 20G[G[IZLWOSSLVFV[UXSUQSNQLQKRKTLVNXQZT[Y[",
552: " 41F]SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFXFZG[I[KZMYNWOTP RSPTPWQXRYTYWXYWZU[R[PZOX",
553: " 24H\\TLTMUNWNYMZKZIYGWFTFQGOIMLLNKRKVLYMZO[Q[TZVXWV",
554: " 35G^TFRGQIPMOSNVMXKZI[G[FZFXGWIWKXMZP[S[VZXXZT[O[KZHYGWFTFRHRJSMUPWRZT\\U",
555: " 28H\\VJVKWLYLZKZIYGVFRFOGNINLONPOSPPPMQLRKTKWLYMZP[S[VZXXYV",
556: " 28H\\RLPLNKMINGQFTFXG[G]F RXGVNTTRXPZN[L[JZIXIVJULUNV RQPZP",
557: " 29G^G[IZMVPQQNRJRGQFPFOGNINLONQOUOXNYMZKZQYVXXVZS[O[LZJXIVIT",
558: " 38F^MMKLJJJIKGMFNFPGQIQKPONULYJ[H[GZGX RMRVOXN[L]J^H^G]F\\FZHXLVRUWUZV[W[YZZY\\V",
559: " 25IZWVUTSQROQLQIRGSFUFVGWIWLVQTVSXQZO[M[KZJXJVKUMUOV",
560: " 25JYT^R[PVOPOJPGRFTFUGVJVMURR[PaOdNfLgKfKdLaN^P\\SZWX",
561: " 39F^MMKLJJJIKGMFNFPGQIQKPONULYJ[H[GZGX R^I^G]F\\FZGXIVLTNROPO RROSQSXTZU[V[XZYY[V",
562: " 29I\\MRORSQVOXMYKYHXFVFUGTISNRSQVPXNZL[J[IZIXJWLWNXQZT[V[YZ[X",
563: " 45@aEMCLBJBICGEFFFHGIIIKHPGTE[ RGTJLLHMGOFPFRGSISKRPQTO[ RQTTLVHWGYFZF\\G]I]K\\PZWZZ[[\\[^Z_YaV",
564: " 32E]JMHLGJGIHGJFKFMGNINKMPLTJ[ RLTOLQHRGTFVFXGYIYKXPVWVZW[X[ZZ[Y]V",
565: " 29H]TFQGOIMLLNKRKVLYMZO[Q[TZVXXUYSZOZKYHXGVFTFRHRKSNUQWSZU\\V",
566: " 31F_SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFZF\\G]H^J^M]O\\PZQWQUPTO",
567: " 32H^ULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWSSWPYNZK[I[HZHXIWKWMXPZS[V[YZ[X",
568: " 38F_SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFYF[G\\H]J]M\\O[PYQVQSPTQUSUXVZX[ZZ[Y]V",
569: " 28H\\H[JZLXOTQQSMTJTGSFRFQGPIPKQMSOVQXSYUYWXYWZT[P[MZKXJVJT",
570: " 25H[RLPLNKMINGQFTFXG[G]F RXGVNTTRXPZN[L[JZIXIVJULUNV",
571: " 33E]JMHLGJGIHGJFKFMGNINKMOLRKVKXLZN[P[RZSYUUXMZF RXMWQVWVZW[X[ZZ[Y]V",
572: " 32F]KMILHJHIIGKFLFNGOIOKNOMRLVLYM[O[QZTWVTXPYMZIZGYFXFWGVIVKWNYP[Q",
573: " 25C_HMFLEJEIFGHFIFKGLILLK[ RUFK[ RUFS[ RaF_G\\JYNVTS[",
574: " 36F^NLLLKKKILGNFPFRGSISLQUQXRZT[V[XZYXYVXUVU R]I]G\\FZFXGVITLPUNXLZJ[H[GZGX",
575: " 38F]KMILHJHIIGKFLFNGOIOKNOMRLVLXMZN[P[RZTXVUWSYM R[FYMVWT]RbPfNgMfMdNaP^S[VY[V",
576: " 40H]ULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWTTWPZN[K[JZJXKWNWPXQYR[R^QaPcNfLgKfKdLaN^Q[TYZV",
583: " 9I[JFR[ RZFR[ RJFZF",
601: " 18I\\XMX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX",
602: " 18H[LFL[ RLPNNPMSMUNWPXSXUWXUZS[P[NZLX",
603: " 15I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX",
604: " 18I\\XFX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX",
605: " 18I[LSXSXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX",
606: " 9MYWFUFSGRJR[ ROMVM",
607: " 23I\\XMX]W`VaTbQbOa RXPVNTMQMONMPLSLUMXOZQ[T[VZXX",
608: " 11I\\MFM[ RMQPNRMUMWNXQX[",
609: " 9NVQFRGSFREQF RRMR[",
610: " 12MWRFSGTFSERF RSMS^RaPbNb",
611: " 9IZMFM[ RWMMW RQSX[",
612: " 3NVRFR[",
613: " 19CaGMG[ RGQJNLMOMQNRQR[ RRQUNWMZM\\N]Q][",
614: " 11I\\MMM[ RMQPNRMUMWNXQX[",
615: " 18I\\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM",
616: " 18H[LMLb RLPNNPMSMUNWPXSXUWXUZS[P[NZLX",
617: " 18I\\XMXb RXPVNTMQMONMPLSLUMXOZQ[T[VZXX",
618: " 9KXOMO[ ROSPPRNTMWM",
619: " 18J[XPWNTMQMNNMPNRPSUTWUXWXXWZT[Q[NZMX",
620: " 9MYRFRWSZU[W[ ROMVM",
621: " 11I\\MMMWNZP[S[UZXW RXMX[",
622: " 6JZLMR[ RXMR[",
623: " 12G]JMN[ RRMN[ RRMV[ RZMV[",
624: " 6J[MMX[ RXMM[",
625: " 10JZLMR[ RXMR[P_NaLbKb",
626: " 9J[XMM[ RMMXM RM[X[",
627: " 24H]QMONMPLRKUKXLZN[P[RZUWWTYPZM RQMSMTNUPWXXZY[Z[",
628: " 31I\\UFSGQIOMNPMTLZKb RUFWFYHYKXMWNUORO RROTPVRWTWWVYUZS[Q[OZNYMV",
629: " 17I\\JPLNNMOMQNROSRSVR[ RZMYPXRR[P_Ob",
630: " 24I[TMQMONMPLSLVMYNZP[R[TZVXWUWRVOTMRKQIQGRFTFVGXI",
631: " 19JZWOVNTMQMONOPPRSS RSSOTMVMXNZP[S[UZWX",
632: " 23JYTFRGQHQIRJUKXK RXKTMQONRMUMWNYP[S]T_TaSbQbP`",
633: " 19H\\IQJOLMNMONOPNTL[ RNTPPRNTMVMXOXRWWTb",
634: " 27G\\HQIOKMMMNNNPMUMXNZO[Q[SZUWVUWRXMXJWGUFSFRHRJSMUPWRZT",
635: " 9LWRMPTOXOZP[R[TYUW",
636: " 19I[OMK[ RYNXMWMUNQROSNS RNSPTQUSZT[U[VZ",
637: " 9JZKFMFOGPHX[ RRML[",
638: " 21H]OMIb RNQMVMYO[Q[SZUXWT RYMWTVXVZW[Y[[Y\\W",
639: " 14I[LMOMNSMXL[ RYMXPWRUURXOZL[",
640: " 29JZTFRGQHQIRJUKXK RUKRLPMOOOQQSTTVT RTTPUNVMXMZO\\S^T_TaRbPb",
641: " 18J[RMPNNPMSMVNYOZQ[S[UZWXXUXRWOVNTMRM",
642: " 13G]PML[ RUMVSWXX[ RIPKNNM[M",
643: " 19I[MSMVNYOZQ[S[UZWXXUXRWOVNTMRMPNNPMSIb",
644: " 18I][MQMONMPLSLVMYNZP[R[TZVXWUWRVOUNSM",
645: " 8H\\SMP[ RJPLNOMZM",
646: " 16H\\IQJOLMNMONOPMVMYO[Q[TZVXXTYPYM",
647: " 21G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb",
648: " 14I[KMMMOOU`WbYb RZMYOWRM]K`Jb",
649: " 20F]VFNb RGQHOJMLMMNMPLULXMZO[Q[TZVXXUZP[M",
650: " 23F]NMLNJQITIWJZK[M[OZQW RRSQWRZS[U[WZYWZTZQYNXM",
651: " 22L\\UUTSRRPRNSMTLVLXMZO[Q[SZTXVRUWUZV[W[YZZY\\V",
652: " 23M[MVOSRNSLTITGSFQGPIOMNTNZO[P[RZTXUUURVVWWYW[V",
653: " 14MXTTTSSRQROSNTMVMXNZP[S[VYXV",
654: " 24L\\UUTSRRPRNSMTLVLXMZO[Q[SZTXZF RVRUWUZV[W[YZZY\\V",
655: " 17NXOYQXRWSUSSRRQROSNUNXOZQ[S[UZVYXV",
656: " 24OWOVSQUNVLWIWGVFTGSIQQNZKaJdJfKgMfNcOZP[R[TZUYWV",
657: " 28L[UUTSRRPRNSMTLVLXMZO[Q[SZTY RVRTYPdOfMgLfLdMaP^S\\U[XY[V",
658: " 29M\\MVOSRNSLTITGSFQGPIOMNSM[ RM[NXOVQSSRURVSVUUXUZV[W[YZZY\\V",
659: " 16PWSMSNTNTMSM RPVRRPXPZQ[R[TZUYWV",
660: " 20PWSMSNTNTMSM RPVRRLdKfIgHfHdIaL^O\\Q[TYWV",
661: " 33M[MVOSRNSLTITGSFQGPIOMNSM[ RM[NXOVQSSRURVSVUTVQV RQVSWTZU[V[XZYY[V",
662: " 18OWOVQSTNULVIVGUFSGRIQMPTPZQ[R[TZUYWV",
663: " 33E^EVGSIRJSJTIXH[ RIXJVLSNRPRQSQTPXO[ RPXQVSSURWRXSXUWXWZX[Y[[Z\\Y^V",
664: " 23J\\JVLSNROSOTNXM[ RNXOVQSSRURVSVUUXUZV[W[YZZY\\V",
665: " 23LZRRPRNSMTLVLXMZO[Q[SZTYUWUUTSRRQSQURWTXWXYWZV",
666: " 24KZKVMSNQMUGg RMUNSPRRRTSUUUWTYSZQ[ RMZO[R[UZWYZV",
667: " 27L[UUTSRRPRNSMTLVLXMZO[Q[SZ RVRUUSZPaOdOfPgRfScS\\U[XY[V",
668: " 15MZMVOSPQPSSSTTTVSYSZT[U[WZXYZV",
669: " 16NYNVPSQQQSSVTXTZR[ RNZP[T[VZWYYV",
670: " 16OXOVQSSO RVFPXPZQ[S[UZVYXV RPNWN",
671: " 19L[LVNRLXLZM[O[QZSXUU RVRTXTZU[V[XZYY[V",
672: " 17L[LVNRMWMZN[O[RZTXUUUR RURVVWWYW[V",
673: " 25I^LRJTIWIYJ[L[NZPX RRRPXPZQ[S[UZWXXUXR RXRYVZW\\W^V",
674: " 20JZJVLSNRPRQSQZR[U[XYZV RWSVRTRSSOZN[L[KZ",
675: " 23L[LVNRLXLZM[O[QZSXUU RVRPdOfMgLfLdMaP^S\\U[XY[V",
676: " 23LZLVNSPRRRTTTVSXQZN[P\\Q^QaPdOfMgLfLdMaP^S\\WYZV",
677: " 22J\\K[NZQXSVUSWOXKXIWGUFSGRHQJPOPTQXRZT[V[XZYY",
683: " 26I[WUWRVOUNSMQMONMPLSLVMYNZP[R[TZVXWUXPXKWHVGTFRFPGNI",
684: " 16JZWNUMRMPNNPMSMVNYOZQ[T[VZ RMTUT",
685: " 23J[TFRGPJOLNOMTMXNZO[Q[SZUWVUWRXMXIWGVFTF RNPWP",
686: " 21H\\VFNb RQMNNLPKSKVLXNZQ[S[VZXXYUYRXPVNSMQM",
687: " 16I[XOWNTMQMNNMOLQLSMUOWSZT\\T^S_Q_",
700: " 18H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF",
701: " 5H\\NJPISFS[",
702: " 15H\\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[",
703: " 16H\\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW",
704: " 7H\\UFKTZT RUFU[",
705: " 18H\\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW",
706: " 24H\\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT",
707: " 6H\\YFO[ RKFYF",
708: " 30H\\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF",
709: " 24H\\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX",
710: " 6MWRYQZR[SZRY",
711: " 9MWSZR[QZRYSZS\\R^Q_",
712: " 12MWRMQNROSNRM RRYQZR[SZRY",
713: " 15MWRMQNROSNRM RSZR[QZRYSZS\\R^Q_",
714: " 9MWRFRT RRYQZR[SZRY",
715: " 21I[LKLJMHNGPFTFVGWHXJXLWNVORQRT RRYQZR[SZRY",
716: " 3NVRFRM",
717: " 6JZNFNM RVFVM",
718: " 14KYQFOGNINKOMQNSNUMVKVIUGSFQF",
719: " 27H\\PBP_ RTBT_ RYIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX",
720: " 3G][BIb",
721: " 11KYVBTDRGPKOPOTPYR]T`Vb",
722: " 11KYNBPDRGTKUPUTTYR]P`Nb",
723: " 3NVRBRb",
724: " 3E_IR[R",
725: " 6E_RIR[ RIR[R",
726: " 6E_IO[O RIU[U",
727: " 6G]KKYY RYKKY",
728: " 9JZRLRX RMOWU RWOMU",
729: " 6MWRQQRRSSRRQ",
730: " 8MWSFRGQIQKRLSKRJ",
731: " 8MWRHQGRFSGSIRKQL",
732: " 9E_UMXP[RXTUW RIR[R",
733: " 12H]SBLb RYBRb RLOZO RKUYU",
734: " 35E_\\O\\N[MZMYNXPVUTXRZP[L[JZIYHWHUISJRQNRMSKSIRGPFNGMIMKNNPQUXWZY[[[\\Z\\Y",
735: " 28G]IIJKKOKUJYI[ R[IZKYOYUZY[[ RIIKJOKUKYJ[I RI[KZOYUYYZ[[",
737: " 6KYOBO[ RUBU[",
738: " 6F^RBR[ RI[[[",
739: " 4F^[BI[[[",
740: " 18E_RIQJRKSJRI RIYHZI[JZIY R[YZZ[[\\Z[Y",
741: " 33F^RHNLKPJSJUKWMXOXQWRU RRHVLYPZSZUYWWXUXSWRU RRUQYP\\ RRUSYT\\ RP\\T\\",
742: " 26F^RNQKPINHMHKIJKJOKRLTNWR\\ RRNSKTIVHWHYIZKZOYRXTVWR\\",
743: " 20F^RGPJLOIR RRGTJXO[R RIRLUPZR] R[RXUTZR]",
744: " 48F^RTTWVXXXZW[U[SZQXPVPSQ RSQUOVMVKUISHQHOINKNMOOQQ RQQNPLPJQISIUJWLXNXPWRT RRTQYP\\ RRTSYT\\ RP\\T\\",
745: " 55F^RRR[Q\\ RRVQ\\ RRIQHOHNINKONRR RRISHUHVIVKUNRR RRRNOLNJNIOIQJR RRRVOXNZN[O[QZR RRRNULVJVIUISJR RRRVUXVZV[U[SZR",
746: " 55F^ISJSLTMVMXLZ RISIRJQLQMRNTNWMYLZ RRGPIOLOOQUQXPZR\\ RRGTIULUOSUSXTZR\\ R[S[RZQXQWRVTVWWYXZ R[SZSXTWVWXXZ RKVYV",
750: " 18PSSRRSQSPRPQQPRPSQSSRUQV RQQQRRRRQQQ",
751: " 16PTQPPQPSQTSTTSTQSPQP RRQQRRSSRRQ",
752: " 9NVPOTU RTOPU RNRVR",
753: " 28MWRKQMOPMR RRKSMUPWR RRMOQ RRMUQ RROPQ RROTQ RQQSQ RMRWR",
754: " 26MWMRMQNOONQMSMUNVOWQWR RPNTN ROOUO RNPVP RNQVQ RMRWR",
755: " 14LRLFLRRRLF RLIPQ RLLOR RLOMQ",
756: " 10MWRKQMOPMR RRKSMUPWR",
757: " 11MWWRWQVOUNSMQMONNOMQMR",
758: " 13G]]R]P\\MZJWHTGPGMHJJHMGPGR",
759: " 11MWMRMSNUOVQWSWUVVUWSWR",
760: " 7LXLPNRQSSSVRXP",
761: " 6RURUTTURTPRO",
762: " 7RVRRUPVNVLUKTK",
763: " 7NRRROPNNNLOKPK",
764: " 21MWWHVGTFQFOGNHMJMLNNOOUSVTWVWXVZU[S\\P\\N[MZ",
765: " 21G]IWHVGTGQHOINKMMMONPOTUUVWWYW[V\\U]S]P\\N[M",
766: " 31G]RRTUUVWWYW[V\\U]S]Q\\O[NYMWMUNTOPUOVMWKWIVHUGSGQHOINKMMMONPORR",
767: " 22H\\KFK[ RHF[FQP[Z RZV[Y\\[ RZVZY RWYZY RWYZZ\\[",
768: " 30KYUARBPCNELHKLKRLUNWQXSXVWXUYR RKPLMNKQJSJVKXMYPYVXZV]T_R`Oa",
796: " 3>f>RfR",
797: " 3D`D``D",
798: " 3RRR>Rf",
799: " 3D`DD``",
800: " 3D`DR`R",
801: " 3F^FY^K",
802: " 3KYK^YF",
803: " 3RRRDR`",
804: " 3KYKFY^",
805: " 3F^FK^Y",
806: " 3KYKRYR",
807: " 3MWMWWM",
808: " 3RRRKRY",
809: " 3MWMMWW",
810: " 8GRRGPGMHJJHMGPGR",
811: " 8GRGRGTHWJZM\\P]R]",
812: " 8R]R]T]W\\ZZ\\W]T]R",
813: " 8R]]R]P\\MZJWHTGRG",
814: " 9D`DOGQKSPTTTYS]Q`O",
815: " 9PUUDSGQKPPPTQYS]U`",
816: " 9OTODQGSKTPTTSYQ]O`",
817: " 9D`DUGSKQPPTPYQ]S`U",
818: " 5KYRJYNKVRZ",
819: " 5JZJRNKVYZR",
820: " 5KYKVKNYVYN",
821: " 5JZLXJPZTXL",
822: " 23JZJ]L]O\\Q[TXUVVSVOULTJSIQIPJOLNONSOVPXS[U\\X]Z]",
823: " 23I]]Z]X\\U[SXPVOSNONLOJPIQISJTLUOVSVVUXT[Q\\O]L]J",
824: " 23JZZGXGUHSIPLONNQNUOXPZQ[S[TZUXVUVQUNTLQIOHLGJG",
825: " 23G[GJGLHOIQLTNUQVUVXUZT[S[QZPXOUNQNNOLPISHUGXGZ",
826: " 21E[EPFRHTJUMVQVUUXSZP[NZLWLSMQNNPLSKVKYL\\M^",
827: " 19EYETHVKWPWSVVTXQYNYLXKVKSLPNNQMTMYN\\P_",
828: " 26OUQOOQOSQUSUUSUQSOQO RQPPQPSQTSTTSTQSPQP RRQQRRSSRRQ",
829: " 11RWRMSMUNVOWQWSVUUVSWRW",
830: " 9D`DRJR RORUR RZR`R",
831: " 5D`DUDO`O`U",
832: " 6JZRDJR RRDZR",
833: " 9D`DR`R RJYZY RP`T`",
834: " 9D`DR`R RDRRb R`RRb",
840: " 18KYQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK",
841: " 6LXLLLXXXXLLL",
842: " 5KYRJKVYVRJ",
843: " 6LXRHLRR\\XRRH",
844: " 12JZRIPOJOOSMYRUWYUSZOTORI",
845: " 6KYRKRY RKRYR",
846: " 6MWMMWW RWMMW",
847: " 9MWRLRX RMOWU RWOMU",
850: " 35NVQNOONQNSOUQVSVUUVSVQUOSNQN ROQOS RPPPT RQOQU RRORU RSOSU RTPTT RUQUS",
851: " 27NVNNNVVVVNNN ROOOU RPOPU RQOQU RRORU RSOSU RTOTU RUOUU",
852: " 17MWRLMUWURL RROOT RROUT RRRQT RRRST",
853: " 17LULRUWUMLR RORTU RORTO RRRTS RRRTQ",
854: " 17MWRXWOMORX RRUUP RRUOP RRRSP RRRQP",
855: " 17OXXROMOWXR RURPO RURPU RRRPQ RRRPS",
856: " 22LXRLNWXPLPVWRL RRRRL RRRLP RRRNW RRRVW RRRXP",
857: " 11RYRKRY RRKYNRQ RSMVNSO",
860: " 13MWRLRX ROOUO RMUOWQXSXUWWU",
861: " 11LXRLRX RLQMOWOXQ RPWTW",
862: " 14KYMNWX RWNMX ROLLOKQ RULXOYQ",
863: " 18I[NII[ RVI[[ RMM[[ RWMI[ RNIVI RMMWM",
864: " 21I[RGRV RMJWP RWJMP RIVL\\ R[VX\\ RIV[V RL\\X\\",
865: " 11G[MJSV RKPSL RG\\[\\[RG\\",
866: " 14LXPLPPLPLTPTPXTXTTXTXPTPTLPL",
867: " 32KYYPXNVLSKQKNLLNKQKSLVNXQYSYVXXVYT RYPWNUMSMQNPOOQOSPUQVSWUWWVYT",
868: " 10KYRJKVYVRJ RRZYNKNRZ",
869: " 34G]PIPGQFSFTGTI RGZHXJVKTLPLKMJOIUIWJXKXPYTZV\\X]Z RGZ]Z RQZP[Q\\S\\T[SZ",
870: " 64JZRMRS RRSQ\\ RRSS\\ RQ\\S\\ RRMQJPHNG RQJNG RRMSJTHVG RSJVG RRMNKLKJM RPLLLJM RRMVKXKZM RTLXLZM RRMPNOOOR RRMPOOR RRMTNUOUR RRMTOUR",
871: " 94JZRIRK RRNRP RRSRU RRYQ\\ RRYS\\ RQ\\S\\ RRGQIPJ RRGSITJ RPJRITJ RRKPNNOMN RRKTNVOWN RNOPORNTOVO RRPPSNTLTKRKSLT RRPTSVTXTYRYSXT RNTPTRSTTVT RRUPXOYMZLZKYJWJYLZ RRUTXUYWZXZYYZWZYXZ RMZOZRYUZWZ",
872: " 40JZRYQ\\ RRYS\\ RQ\\S\\ RRYUZXZZXZUYTWTYRZOYMWLUMVJUHSGQGOHNJOMMLKMJOKRMTKTJUJXLZOZRY",
873: " 32JZRYQ\\ RRYS\\ RQ\\S\\ RRYVXVVXUXRZQZLYIXHVHTGPGNHLHKIJLJQLRLUNVNXRY",
874: " 15I[IPKR RLKNP RRGRO RXKVP R[PYR",
899: " 6QSRQQRRSSRRQ",
900: " 10PTQPPQPSQTSTTSTQSPQP",
901: " 14NVQNOONQNSOUQVSVUUVSVQUOSNQN",
902: " 18MWQMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM",
903: " 18KYQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK",
904: " 22G]PGMHJJHMGPGTHWJZM\\P]T]W\\ZZ\\W]T]P\\MZJWHTGPG",
905: " 34AcPALBJCGEEGCJBLAPATBXCZE]G_JaLbPcTcXbZa]__]aZbXcTcPbLaJ_G]EZCXBTAPA",
906: " 34<hP<K=G?DAAD?G=K<P<T=Y?]A`DcGeKgPhThYg]e`cc`e]gYhThPgKeGcD`A]?Y=T<P<",
907: " 50){O)I*E+@-;073370;-@+E*I)O)U*[+_-d0i3m7q;t@wEyIzO{U{[z_ydwitmqqmtiwdy_z[{U{OzIyEw@t;q7m3i0d-_+[*U)O)",
908: " 34>fRAPCMDJDGCEA>H@JAMAZB]D_G`M`PaRc RRATCWDZD]C_AfHdJcMcZb]`_]`W`TaRc",
909: " 33AcRAPCMDJDGCEABGAKAPBTDXG\\L`Rc RRATCWDZD]C_AbGcKcPbT`X]\\X`Rc RBHbH",
997: " 3MWMXWX",
998: " 3JZJZZZ",
999: " 3JZJ]Z]",
1001: " 18KYRKMX RRNVX RRKWX ROTTT RKXPX RTXYX",
1002: " 35JZNKNX ROKOX RLKSKVLWNVPSQ RSKULVNUPSQ ROQSQVRWTWUVWSXLX RSQURVTVUUWSX",
1003: " 24KYVLWKWOVLTKQKOLNMMPMSNVOWQXTXVWWU RQKOMNPNSOVQX",
1004: " 26JZNKNX ROKOX RLKSKVLWMXPXSWVVWSXLX RSKULVMWPWSVVUWSX",
1005: " 22JYNKNX ROKOX RSOSS RLKVKVOUK ROQSQ RLXVXVTUX",
1006: " 20JXNKNX ROKOX RSOSS RLKVKVOUK ROQSQ RLXQX",
1007: " 36K[VLWKWOVLTKQKOLNMMPMSNVOWQXTXVW RQKOMNPNSOVQX RTXUWVU RVSVX RWSWX RTSYS",
1008: " 27J[NKNX ROKOX RVKVX RWKWX RLKQK RTKYK ROQVQ RLXQX RTXYX",
1009: " 12NWRKRX RSKSX RPKUK RPXUX",
1010: " 19LXSKSURWQX RTKTUSWQXPXNWMUNTOUNV RQKVK",
1011: " 27JZNKNX ROKOX RWKOS RQQVX RRQWX RLKQK RTKYK RLXQX RTXYX",
1012: " 14KXOKOX RPKPX RMKRK RMXWXWTVX",
1013: " 30I\\MKMX RNNRX RNKRU RWKRX RWKWX RXKXX RKKNK RWKZK RKXOX RUXZX",
1014: " 21JZNKNX ROMVX ROKVV RVKVX RLKOK RTKXK RLXPX",
1015: " 32KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK RQKOMNPNSOVQX RTXVVWSWPVMTK",
1016: " 25JYNKNX ROKOX RLKSKVLWNWOVQSROR RSKULVNVOUQSR RLXQX",
1017: " 47KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK RQKOMNPNSOVQX RTXVVWSWPVMTK RPWPUQTSTTUUZV[W[XZ RTUUXVZW[",
1018: " 37JZNKNX ROKOX RLKSKVLWNWOVQSROR RSKULVNVOUQSR RLXQX RSRTSUWVXWXXW RSRUSVWWX",
1019: " 32KZVMWKWOVMULSKQKOLNMNOOPQQTRVSWT RNNOOQPTQVRWSWVVWTXRXPWOVNTNXOV",
1020: " 16KZRKRX RSKSX RNKMOMKXKXOWK RPXUX",
1021: " 20J[NKNUOWQXTXVWWUWK ROKOUPWQX RLKQK RUKYK",
1022: " 15KYMKRX RNKRU RWKRX RKKPK RTKYK",
1023: " 24I[LKOX RMKOT RRKOX RRKUX RSKUT RXKUX RJKOK RVKZK",
1024: " 21KZNKVX ROKWX RWKNX RLKQK RTKYK RLXQX RTXYX",
1025: " 20LYNKRRRX ROKSR RWKSRSX RLKQK RTKYK RPXUX",
1026: " 16LYVKNX RWKOX ROKNONKWK RNXWXWTVX",
1027: " 18KYRKMX RRNVX RRKWX ROTTT RKXPX RTXYX",
1028: " 35JZNKNX ROKOX RLKSKVLWNVPSQ RSKULVNUPSQ ROQSQVRWTWUVWSXLX RSQURVTVUUWSX",
1029: " 14KXOKOX RPKPX RMKWKWOVK RMXRX",
1030: " 15KYRKLX RRMWX RRKXX RMWVW RLXXX",
1031: " 22JYNKNX ROKOX RSOSS RLKVKVOUK ROQSQ RLXVXVTUX",
1032: " 16LYVKNX RWKOX ROKNONKWK RNXWXWTVX",
1033: " 27J[NKNX ROKOX RVKVX RWKWX RLKQK RTKYK ROQVQ RLXQX RTXYX",
1034: " 44KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK RQKOMNPNSOVQX RTXVVWSWPVMTK RQOQT RTOTT RQQTQ RQRTR",
1035: " 12NWRKRX RSKSX RPKUK RPXUX",
1036: " 27JZNKNX ROKOX RWKOS RQQVX RRQWX RLKQK RTKYK RLXQX RTXYX",
1037: " 15KYRKMX RRNVX RRKWX RKXPX RTXYX",
1038: " 30I\\MKMX RNNRX RNKRU RWKRX RWKWX RXKXX RKKNK RWKZK RKXOX RUXZX",
1039: " 21JZNKNX ROMVX ROKVV RVKVX RLKOK RTKXK RLXPX",
1040: " 36JZMJLM RXJWM RPPOS RUPTS RMVLY RXVWY RMKWK RMLWL RPQTQ RPRTR RMWWW RMXWX",
1041: " 32KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK RQKOMNPNSOVQX RTXVVWSWPVMTK",
1042: " 21J[NKNX ROKOX RVKVX RWKWX RLKYK RLXQX RTXYX",
1043: " 25JYNKNX ROKOX RLKSKVLWNWOVQSROR RSKULVNVOUQSR RLXQX",
1044: " 20K[MKRQ RNKSQMX RMKWKXOVK RNWWW RMXWXXTVX",
1045: " 16KZRKRX RSKSX RNKMOMKXKXOWK RPXUX",
1046: " 33KZMONLOKPKQLRORX RXOWLVKUKTLSOSX RMONMOLPLQMRO RXOWMVLULTMSO RPXUX",
1047: " 40KZRKRX RSKSX RQNNOMQMRNTQUTUWTXRXQWOTNQN RQNOONQNROTQU RTUVTWRWQVOTN RPKUK RPXUX",
1048: " 21KZNKVX ROKWX RWKNX RLKQK RTKYK RLXQX RTXYX",
1049: " 33J[RKRX RSKSX RLPMONOOSQU RTUVSWOXOYP RMONROTQUTUVTWRXO RPKUK RPXUX",
1050: " 35KZMVNXQXMRMONMOLQKTKVLWMXOXRTXWXXV ROUNRNOOMQK RTKVMWOWRVU RNWPW RUWWW",
1051: " 18KYTKKX RSMTX RTKUX RNTTT RIXNX RRXWX",
1052: " 34JYPKLX RQKMX RNKUKWLWNVPSQ RUKVLVNUPSQ ROQRQTRUSUUTWQXJX RRQTSTUSWQX",
1053: " 25KXVLWLXKWNVLTKRKPLOMNOMRMUNWPXRXTWUU RRKPMOONRNVPX",
1054: " 26JYPKLX RQKMX RNKTKVLWNWQVTUVTWQXJX RTKULVNVQUTTVSWQX",
1055: " 22JYPKLX RQKMX RSORS RNKXKWNWK ROQRQ RJXTXUUSX",
1056: " 20JXPKLX RQKMX RSORS RNKXKWNWK ROQRQ RJXOX",
1057: " 33KYVLWLXKWNVLTKRKPLOMNOMRMUNWPXRXTWUVVS RRKPMOONRNVPX RRXTVUS RSSXS",
1058: " 27J[PKLX RQKMX RXKTX RYKUX RNKSK RVK[K ROQVQ RJXOX RRXWX",
1059: " 12NWTKPX RUKQX RRKWK RNXSX",
1060: " 19LXUKRUQWPX RVKSURWPXOXMWLUMTNUMV RSKXK",
1061: " 27JZPKLX RQKMX RYKOR RRPTX RSPUX RNKSK RVK[K RJXOX RRXWX",
1062: " 14KXQKMX RRKNX ROKTK RKXUXVUTX",
1063: " 30I\\OKKX ROMPX RPKQV RYKPX RYKUX RZKVX RMKPK RYK\\K RIXMX RSXXX",
1064: " 21JZPKLX RPKTX RQKTU RXKTX RNKQK RVKZK RJXNX",
1065: " 32KYRKPLOMNOMRMUNWPXRXTWUVVTWQWNVLTKRK RRKPMOONRNVPX RRXTVUTVQVMTK",
1066: " 24JYPKLX RQKMX RNKUKWLXMXOWQTROR RUKWMWOVQTR RJXOX",
1067: " 46KYRKPLOMNOMRMUNWPXRXTWUVVTWQWNVLTKRK RRKPMOONRNVPX RRXTVUTVQVMTK ROWOVPUQURVRZS[T[UZ RRVSZT[",
1068: " 35JZPKLX RQKMX RNKUKWLXMXOWQTROR RUKWMWOVQTR RSRTWUXVXWW RSRTSUWVX RJXOX",
1069: " 28KZWLXLYKXNWLUKRKPLOMOOPPUSVT RONPOURVSVVUWSXPXNWMULXMWNW",
1070: " 16KZTKPX RUKQX RPKNNOKZKYNYK RNXSX",
1071: " 20J[PKMUMWOXSXUWVUYK RQKNUNWOX RNKSK RWK[K",
1072: " 15KYOKPX RPKQV RYKPX RMKRK RVK[K",
1073: " 24I[NKMX ROKNV RTKMX RTKSX RUKTV RZKSX RLKQK RXK\\K",
1074: " 21KZPKTX RQKUX RYKLX RNKSK RVK[K RJXOX RRXWX",
1075: " 20LYPKRQPX RQKSQ RYKSQQX RNKSK RVK[K RNXSX",
1076: " 16LYXKLX RYKMX RQKONPKYK RLXUXVUTX",
1101: " 32LZQOPPPQOQOPQOTOVQVWWXXX RTOUQUWWX RURRSPTOUOWPXSXTWUU RRSPUPWQX",
1102: " 29JYNKNX ROKOX RORPPROTOVPWRWUVWTXRXPWOU RTOUPVRVUUWTX RLKOK",
1103: " 24LXVQUQURVRVQUPSOQOOPNRNUOWQXSXUWVV RQOPPOROUPWQX",
1104: " 32L[VKVX RWKWX RVRUPSOQOOPNRNUOWQXSXUWVU RQOPPOROUPWQX RTKWK RVXYX",
1105: " 26LXOSVSVRUPSOQOOPNRNUOWQXSXUWVV RUSUQSO RQOPPOROUPWQX",
1106: " 20LWTKULUMVMVLTKRKPMPX RRKQMQX RNOSO RNXSX",
1107: " 42LYQOOQOSQUSUUSUQSOQO RQOPQPSQU RSUTSTQSO RTPUOVO RPTOUOXPYTYVZ ROWPXTXVYV[T\\P\\N[NYPX",
1108: " 28J[NKNX ROKOX RORPPROTOVPWRWX RTOUPVRVX RLKOK RLXQX RTXYX",
1109: " 18NWRKRLSLSKRK RRORX RSOSX RPOSO RPXUX",
1110: " 23NWSKSLTLTKSK RSOSZR\\ RTOTZR\\P\\O[OZPZP[O[ RQOTO",
1111: " 27JZNKNX ROKOX RWOOU RRSVX RSSWX RLKOK RTOYO RLXQX RTXYX",
1112: " 12NWRKRX RSKSX RPKSK RPXUX",
1113: " 44F_JOJX RKOKX RKRLPNOPORPSRSX RPOQPRRRX RSRTPVOXOZP[R[X RXOYPZRZX RHOKO RHXMX RPXUX RXX]X",
1114: " 28J[NONX ROOOX RORPPROTOVPWRWX RTOUPVRVX RLOOO RLXQX RTXYX",
1115: " 28LYQOOPNRNUOWQXTXVWWUWRVPTOQO RQOPPOROUPWQX RTXUWVUVRUPTO",
1116: " 32JYNON\\ ROOO\\ RORPPROTOVPWRWUVWTXRXPWOU RTOUPVRVUUWTX RLOOO RL\\Q\\",
1117: " 29KYUOU\\ RVOV\\ RURTPROPONPMRMUNWPXRXTWUU RPOOPNRNUOWPX RS\\X\\",
1118: " 22KXOOOX RPOPX RPRQPSOUOVPVQUQUPVP RMOPO RMXRX",
1119: " 26LYTOUPUQVQVPTOQOOPORQSTTVU ROQQRTSVTVWTXQXOWOVPVPWQX",
1120: " 14LWPKPVRXTXUWUV RQKQVRX RNOTO",
1121: " 28J[NONUOWQXSXUWVU ROOOUPWQX RVOVX RWOWX RLOOO RTOWO RVXYX",
1122: " 15KYNORX ROORV RVORX RLOQO RTOXO",
1123: " 24I[LOOX RMOOU RROOX RROUX RSOUU RXOUX RJOOO RVOZO",
1124: " 21KYNOUX ROOVX RVONX RLOQO RTOXO RLXPX RSXXX",
1125: " 23KYNORX ROORV RVORXP[N\\M\\L[LZMZM[L[ RLOQO RTOXO",
1126: " 16LXUONX RVOOX ROONQNOVO RNXVXVVUX",
1127: " 32K[QOOPNQMSMUNWPXQXSWUUWRXO RQOOQNSNUOWPX RQOSOUPWWXX RSOTPVWXXYX",
1128: " 40KXRKPMOOMUK\\ RQLPNNTL\\ RRKTKVLVNUPRQ RTKULUNTPRQ RRQTRUTUVTWRXQXOWNT RRQSRTTTVRX",
1129: " 19KYLQNOPORPSSSXR\\ RLQNPPPRQSS RWOVRSXQ\\",
1130: " 39KYSOQOOPNQMSMUNWPXRXTWUVVTVRUPRNQLQKRJTJUKVM RQOOQNSNVPX RRXTVUTUQSO RQLRKTKVM",
1131: " 27LXVPTOQOOPOQPRRS RQOPPPQRS RRSOTNUNWPXSXUW RRSPTOUOWPX",
1132: " 28LWRKQLQMSNVNVMSNPOOPNRNTOVPWRXSYS[R\\P\\O[ RSNQOPPOROTPVRX",
1133: " 26IYJRKPLONOOPOQMX RMONPNQLX ROQPPROTOVPVRS\\ RTOUPURR\\",
1134: " 35IYJSKQLPNPOQOVPX RMPNQNUOWPXQXSWTVUTVQVNULTKRKQLQNRPURWS RQXSVTTUQUNTK",
1135: " 13NWROPVPWQXSXUWVU RSOQVQWRX",
1136: " 26KYOOLX RPOMX RUOVPWPVOTORQOR RORPSRWTXVWWU RORQSSWTX",
1137: " 15LXLKNKPLWX RNKOLVX RRPMX RRPNX",
1138: " 26KZOOK\\ RPOL\\ RNUNWOXQXSWTV RVOTVTWUXWXXWYU RWOUVUWVX",
1139: " 19JYNOMX ROONUMX RVRVOWOVRTUQWNXMX RLOOO",
1140: " 36MXRKQLQMSNVN RTNQOPPPRRSUS RTNROQPQRRS RSSPTOUOWQXSYTZT[S\\Q\\ RSSQTPUPWQX",
1141: " 28KXQOOPNQMSMUNWPXRXTWUVVTVRUPSOQO RQOOQNSNVPX RRXTVUTUQSO",
1142: " 20IZPPMX RPPNX RTPSX RTPTX RKQMOXO RKQMPXP",
1143: " 29JXSOQOOPNQMSJ\\ RQOOQNSK\\ RSOUPVRVTUVTWRXPXNWMU RSOUQUTTVRX",
1144: " 28K[YOQOOPNQMSMUNWPXRXTWUVVTVRUPYP RQOOQNSNVPX RRXTVUTUQSO",
1145: " 14KZSPQX RSPRX RMQOOXO RMQOPXP",
1146: " 24JXKRLPMOOOPPPROUOWPX RNOOPORNUNWPXQXSWUUVRVOUOVP",
1147: " 35KZOPNQMSMUNWPXRXUWWUXRXPWOUOTPSRRUO\\ RMUNVPWRWUVWTXR RXQWPUPSR RRUQXP\\",
1148: " 17KXMONOPPS[T\\ RNOOPR[T\\U\\ RVOTRNYL\\",
1149: " 28I[TKQ\\ RUKP\\ RJRKPLONOOPOVPWSWUVWT RMONPNTOWPXSXUWWTXRYO",
1150: " 36JZNPPPPONPMQLSLUMWNXPXQWRUSR RLUNWPWRU RRRRWSXUXWVXTXRWPVOVPWP RRUSWUWWV",
1151: " 32KZVOTVTWUXWXXWYU RWOUVUWVX RUSUQSOQOOPNQMSMUNWPXRXTV RQOOQNSNVPX",
1152: " 32JXOKMR RPKNRNVPX RNROPQOSOUPVRVTUVTWRXPXNWMUMR RSOUQUTTVRX RMKPK",
1153: " 22KXUPUQVQUPSOQOOPNQMSMUNWPXRXTWUV RQOOQNSNVPX",
1154: " 35KZWKTVTWUXWXXWYU RXKUVUWVX RUSUQSOQOOPNQMSMUNWPXRXTV RQOOQNSNVPX RUKXK",
1155: " 23KWNURTTSURUPSOQOOPNQMSMUNWPXRXTWUV RQOOQNSNVPX",
1156: " 23MXWKXLXKVKTLSNPYO[N\\ RVKULTNQYP[N\\L\\L[M\\ RPOVO",
1157: " 34KYVOTVSYR[ RWOUVTYR[P\\M\\L[M[N\\ RUSUQSOQOOPNQMSMUNWPXRXTV RQOOQNSNVPX",
1158: " 29KZPKLX RQKMX ROQPPROTOVPVRUUUWVX RTOUPURTUTWUXWXXWYU RNKQK",
1159: " 26MWSKSLTLTKSK RNROPPOROSPSRRURWSX RQORPRRQUQWRXTXUWVU",
1160: " 26MWTKTLULUKTK RORPPQOSOTPTRRYQ[O\\M\\M[N\\ RROSPSRQYP[O\\",
1161: " 32KXPKLX RQKMX RVPUQVQVPUOTORQPROR RORPSQWRXTXUWVU RORQSRWSX RNKQK",
1162: " 16NVSKPVPWQXSXTWUU RTKQVQWRX RQKTK",
1163: " 46F^GRHPIOKOLPLQJX RJOKPKQIX RLQMPOOQOSPSQQX RQORPRQPX RSQTPVOXOZPZRYUYWZX RXOYPYRXUXWYX[X\\W]U",
1164: " 33J[KRLPMOOOPPPQNX RNOOPOQMX RPQQPSOUOWPWRVUVWWX RUOVPVRUUUWVXXXYWZU",
1165: " 28KXQOOPNQMSMUNWPXRXTWUVVTVRUPSOQO RQOOQNSNVPX RRXTVUTUQSO",
1166: " 35JYKRLPMOOOPPPQM\\ RNOOPOQL\\ RPQROTOVPWRWTVVUWSXQXOVOT RTOVQVTUVSX RJ\\O\\",
1167: " 28KYVOR\\ RWOS\\ RUSUQSOQOOPNQMSMUNWPXRXTV RQOOQNSNVPX RP\\U\\",
1168: " 22LXMRNPOOQORPRQPX RPOQPQQOX RRQSPUOVOWPWQVQWP",
1169: " 24LYVPVQWQVPTOQOOPORQSTTVU ROQQRTSVTVWTXQXOWNVOVOW",
1170: " 16NWSKPVPWQXSXTWUU RTKQVQWRX RPOUO",
1171: " 33IZJRKPLONOOPORNUNWOX RMONPNRMUMWOXQXSWTV RVOTVTWUXWXXWYU RWOUVUWVX",
1172: " 24JXKRLPMOOOPPPROUOWPX RNOOPORNUNWPXQXSWUUVRVOUOVP",
1173: " 37H\\IRJPKOMONPNRMUMWNX RLOMPMRLULWNXOXQWRV RTORVRWTX RUOSVSWTXUXWWYUZRZOYOZP",
1174: " 38JZMRNPPOROSPSR RQORPRRQUPWNXMXLWLVMVLW RXPWQXQXPWOVOTPSRRURWSX RQUQWRXTXVWWU",
1175: " 35IYJRKPLONOOPORNUNWOX RMONPNRMUMWOXQXSWTV RVOTVSYR[ RWOUVTYR[P\\M\\L[M[N\\",
1176: " 27KYWOWPVQNVMWMX RNQOOROUQ ROPRPUQVQ RNVOVRWUW ROVRXUXVV",
1177: " 39H[RKSLSMTMTLRKOKMLLNLX ROKNLMNMX RXKYLYMZMZLXKVKTMTX RVKUMUX RJOWO RJXOX RRXWX",
1178: " 29J[UKVLWLWKQKOLNNNX RQKPLONOX RVOVX RWOWX RLOWO RLXQX RTXYX",
1179: " 27J[WKQKOLNNNX RQKPLONOX RUKVLVX RWKWX RLOVO RLXQX RTXYX",
1180: " 48F_PKQLQMRMRLPKMKKLJNJX RMKLLKNKX RYKZL[L[KUKSLRNRX RUKTLSNSX RZOZX R[O[X RHO[O RHXMX RPXUX RXX]X",
1181: " 46F_PKQLQMRMRLPKMKKLJNJX RMKLLKNKX R[KUKSLRNRX RUKTLSNSX RYKZLZX R[K[X RHOZO RHXMX RPXUX RXX]X",
1182: " 12NWRORX RSOSX RPOSO RPXUX",
1184: " 21LXVPTOROPPOQNSNUOWQXSXUW RROPQOSOVQX ROSSS",
1185: " 35LYSKQLPMOONRNUOWPXRXTWUVVTWQWNVLUKSK RSKQMPOOSOVPX RRXTVUTVPVMUK ROQVQ",
1186: " 34KZTKQ\\ RUKP\\ RQONPMRMUNWQXTXWWXUXRWPTOQO RQOOPNRNUOWQX RTXVWWUWRVPTO",
1187: " 22LXUPVRVQUPSOQOOPNRNTOVRX RQOOQOTPVRXSYS[R\\P\\",
1191: " 45I[VKWLXLVKSKQLPMOOLYK[J\\ RSKQMPOMYL[J\\H\\H[I\\ RZK[L[KYKWLVNSYR[Q\\ RYKXLWNTYS[Q\\O\\O[P\\ RLOYO",
1192: " 38IZVKWLXLXKSKQLPMOOLYK[J\\ RSKQMPOMYL[J\\H\\H[I\\ RVOTVTWUXWXXWYU RWOUVUWVX RLOWO",
1193: " 38IZVKWL RXKSKQLPMOOLYK[J\\ RSKQMPOMYL[J\\H\\H[I\\ RWKTVTWUXWXXWYU RXKUVUWVX RLOVO",
1194: " 63F^SKTLTM RULSKPKNLMMLOIYH[G\\ RPKNMMOJYI[G\\E\\E[F\\ RZK[L\\L\\KWKUL RTMSOPYO[N\\ RWKUMTOQYP[N\\L\\L[M\\ RZOXVXWYX[X\\W]U R[OYVYWZX RIO[O",
1195: " 63F^SKTLTM RULSKPKNLMMLOIYH[G\\ RPKNMMOJYI[G\\E\\E[F\\ RZK[L R\\KWKUL RTMSOPYO[N\\ RWKUMTOQYP[N\\L\\L[M\\ R[KXVXWYX[X\\W]U R\\KYVYWZX RIOZO",
1196: " 20MWNROPPOROSPSRRURWSX RQORPRRQUQWRXTXUWVU",
1200: " 28LYQKOLNONTOWQXTXVWWTWOVLTKQK RQKPLOOOTPWQX RTXUWVTVOULTK",
1201: " 10LYPNSKSX RRLRX ROXVX",
1202: " 35LYOMONNNNMOLQKTKVLWNVPTQQROSNUNX RTKULVNUPTQ RNWOVPVSWVWWV RPVSXVXWVWU",
1203: " 39LYOMONNNNMOLQKTKVLWNVPTQ RTKULVNUPTQ RRQTQVRWTWUVWTXQXOWNVNUOUOV RTQURVTVUUWTX",
1204: " 13LYSMSX RTKTX RTKMTXT RQXVX",
1205: " 33LYOKNQ ROKVK ROLSLVK RNQOPQOTOVPWRWUVWTXQXOWNVNUOUOV RTOUPVRVUUWTX",
1206: " 36LYVMVNWNWMVLTKRKPLOMNPNUOWQXTXVWWUWSVQTPQPNR RRKPMOPOUPWQX RTXUWVUVSUQTP",
1207: " 22LYNKNO RVMRTPX RWKTQQX RNMPKRKUM RNMPLRLUMVM",
1208: " 51LYQKOLNNOPQQTQVPWNVLTKQK RQKPLONPPQQ RTQUPVNULTK RQQORNTNUOWQXTXVWWUWTVRTQ RQQPROTOUPWQX RTXUWVUVTURTQ",
1209: " 36LYOVOUNUNVOWQXSXUWVVWSWNVLTKQKOLNNNPORQSTSWQ RSXUVVSVNULTK RQKPLONOPPRQS",
1210: " 6NVRVQWRXSWRV",
1211: " 8NVSWRXQWRVSWSYQ[",
1212: " 12NVROQPRQSPRO RRVQWRXSWRV",
1213: " 14NVROQPRQSPRO RSWRXQWRVSWSYQ[",
1214: " 15NVRKQLRSSLRK RRLRO RRVQWRXSWRV",
1215: " 29LYNNONOONONNOLQKTKVLWNWOVQSRRSRTST RTKVMVPUQSR RRWRXSXSWRW",
1216: " 6OVRKRP RSKRP",
1217: " 12LXOKOP RPKOP RUKUP RVKUP",
1218: " 10MWQKPLPNQOSOTNTLSKQK",
1219: " 9MWRJRP ROKUO RUKOO",
1220: " 3KZXHM\\",
1221: " 16MWUHSJQMPPPTQWSZU\\ RSJRLQPQTRXSZ",
1222: " 16MWOHQJSMTPTTSWQZO\\ RQJRLSPSTRXQZ",
1223: " 12MWPHP\\ RQHQ\\ RPHUH RP\\U\\",
1224: " 12MWSHS\\ RTHT\\ ROHTH RO\\T\\",
1225: " 38LWSHQIPJPLRNSP RQIPL RSNRQ RPJQLSNSPRQPRRSSTSVQXPZ RRSSV RPXQ[ RSTRVPXPZQ[S\\",
1226: " 38MXQHSITJTLRNQP RSITL RQNRQ RTJSLQNQPRQTRRSQTQVSXTZ RRSQV RTXS[ RQTRVTXTZS[Q\\",
1227: " 4MWTHPRT\\",
1228: " 4MWPHTRP\\",
1229: " 3OURHR\\",
1230: " 6MWPHP\\ RTHT\\",
1231: " 3I[LRXR",
1232: " 6I[RLRX RLRXR",
1233: " 9JZRMRX RMRWR RMXWX",
1234: " 9JZRMRX RMMWM RMRWR",
1235: " 6JZMMWW RWMMW",
1236: " 6NVRQQRRSSRRQ",
1237: " 15I[RLQMRNSMRL RLRXR RRVQWRXSWRV",
1238: " 6I[LPXP RLTXT",
1239: " 9I[WLMX RLPXP RLTXT",
1240: " 9I[LNXN RLRXR RLVXV",
1241: " 4JZWLMRWX",
1242: " 4JZMLWRMX",
1243: " 10JZWKMOWS RMTWT RMXWX",
1244: " 10JZMKWOMS RMTWT RMXWX",
1245: " 21H[YUWUUTTSRPQOONNNLOKQKRLTNUOUQTRSTPUOWNYN",
1246: " 16JZLTLRMPOPUSWSXR RLRMQOQUTWTXRXP",
1247: " 8JZMSRPWS RMSRQWS",
1248: " 7NVSKPO RSKTLPO",
1249: " 7NVQKTO RQKPLTO",
1250: " 14LXNKOMQNSNUMVK RNKONQOSOUNVK",
1251: " 8NVSLRMQLRKSLSNQP",
1252: " 8NVSKQMQORPSORNQO",
1253: " 8NVQLRMSLRKQLQNSP",
1254: " 8NVQKSMSORPQORNSO",
1256: " 11JZWMQMONNOMQMSNUOVQWWW",
1257: " 11JZMMMSNUOVQWSWUVVUWSWM",
1258: " 11JZMMSMUNVOWQWSVUUVSWMW",
1259: " 11JZMWMQNOONQMSMUNVOWQWW",
1260: " 14JZWMQMONNOMQMSNUOVQWWW RMRUR",
1261: " 13I[TOUPXRUTTU RUPWRUT RLRWR",
1262: " 13MWRMRX ROPPORLTOUP RPORMTO",
1263: " 13I[POOPLROTPU ROPMROT RMRXR",
1264: " 13MWRLRW ROTPURXTUUT RPURWTU",
1265: " 37KYVSUPSOQOOPNQMSMUNWPXRXTWUVVTWQWNVLTKQKPLQLRK RQOOQNSNVPX RRXTVUTVQVNULTK",
1266: " 15JZLKRX RMKRV RXKRX RLKXK RNLWL",
1267: " 10G[IOLORW RKORX R[FRX",
1268: " 26I[XIXJYJYIXHVHTJSLROQUPYO[ RUITKSORUQXPZN\\L\\K[KZLZL[",
1269: " 40I[XIXJYJYIXHVHTJSLROQUPYO[ RUITKSORUQXPZN\\L\\K[KZLZL[ RQNOONQNSOUQVSVUUVSVQUOSNQN",
1270: " 26H\\ZRYTWUVUTTSSQPPONNMNKOJQJRKTMUNUPTQSSPTOVNWNYOZQZR",
1271: " 26JZXKLX ROKPLPNOOMOLNLLMKOKSLVLXK RUTTUTWUXWXXWXUWTUT",
1272: " 41J[YPXPXQYQYPXOWOVPUTTVSWQXOXMWLVLTMSORRPSNSLRKPKOLONPQUWWXXXYW ROXMVMTOR RONPPVWWX",
1273: " 29J[UPSOQOPQPRQTSTUS RUOUSVTXTYRYQXNVLSKRKOLMNLQLRMUOWRXSXVW",
1274: " 34KZQHQ\\ RTHT\\ RWLVLVMWMWLUKPKNLNNOPVSWT RNNOOVRWTWVVWTXQXOWNVNUOUOVNV",
1275: " 12KYRKN\\ RVKR\\ RNQWQ RMVVV",
1276: " 40LXTLSLSMTMTLSKQKPLPNQPTRUS RPNQOTQUSUUSW RQPOROTPVSXTY ROTPUSWTYT[S\\Q\\P[PZQZQ[P[",
1277: " 29LXRKQLRMSLRK RRMRQ RRQQSRVSSRQ RRVR\\ RPOONNOOPPOTOUNVOUPTO",
1278: " 42LXRMSLRKQLRMRQQRSURV RRQSRQURVRZQ[R\\S[RZ RPOONNOOPPOTOUNVOUPTO RPXOWNXOYPXTXUWVXUYTX",
1279: " 12LYVKVX RNKVK RQQVQ RNXVX",
1281: " 24H\\QKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK RRQQRRSSRRQ",
1282: " 33LYQKPLPMQN RTKULUMTN RRNPOOQORPTRUSUUTVRVQUOSNRN RRURY RSUSY ROWVW",
1283: " 23LYRKPLONOOPQRRSRUQVOVNULSKRK RRRRX RSRSX ROUVU",
1284: " 24H\\QKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK RRKRY RKRYR",
1285: " 25JYRRPQOQMRLTLUMWOXPXRWSUSTRR RWMRR RRMWMWR RRMVNWR",
1286: " 25JZLLMKOKQLRNRPQRPSNT ROKPLQNQQPS RVKUX RWKTX RNTXT",
1287: " 27JYNKNU ROKNR RNROPQOSOUPVQVTTVTXUYVYWX RSOUQUTTV RLKOK",
1288: " 27LYONRKRQ RVNSKSQ RRQPROTOUPWRXSXUWVUVTURSQ RRTRUSUSTRT",
1289: " 27JZRKRY RMKMPNRPSTSVRWPWK RLMMKNM RQMRKSM RVMWKXM ROVUV",
1290: " 27JYNKNX ROKOX RLKSKVLWNWOVQSROR RSKULVNVOUQSR RLXVXVUUX",
1291: " 20LYWKTKQLONNQNSOVQXTYWY RWKTLRNQQQSRVTXWY",
1292: " 23JZRRPQOQMRLTLUMWOXPXRWSUSTRR RSLQQ RWMRR RXQSS",
1293: " 12KYPMTW RTMPW RMPWT RWPMT",
1294: " 34J[OUMULVLXMYOYPXPVNTMRMONMOLQKTKVLWMXOXRWTUVUXVYXYYXYVXUVU RNMPLULWM",
1295: " 34J[OOMOLNLLMKOKPLPNNPMRMUNWOXQYTYVXWWXUXRWPUNULVKXKYLYNXOVO RNWPXUXWW",
1401: " 21F^KHK\\ RLHL\\ RXHX\\ RYHY\\ RHH\\H RH\\O\\ RU\\\\\\",
1402: " 20H]KHRQJ\\ RJHQQ RJHYHZMXH RK[X[ RJ\\Y\\ZWX\\",
1403: " 20KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\\T`",
1404: " 20KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\\P`",
1405: " 12KYOBOb RPBPb ROBVB RObVb",
1406: " 12KYTBTb RUBUb RNBUB RNbUb",
1407: " 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\\P^Q`RaTb",
1408: " 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\\T^S`RaPb",
1409: " 24KYU@RCPFOIOLPOSVTYT\\S_Ra RRCQEPHPKQNTUUXU[T^RaOd",
1410: " 24KYO@RCTFUIULTOQVPYP\\Q_Ra RRCSETHTKSNPUOXO[P^RaUd",
1411: " 13AXCRGRR` RGSRa RFSRb RX:Rb",
1412: " 32F^[CZD[E\\D\\C[BYBWCUETGSJRNPZO^N` RVDUFTJRVQZP]O_MaKbIbHaH`I_J`Ia",
2001: " 18H\\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[",
2002: " 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[",
2003: " 32G\\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV RQFOGMILKKNKSLVMXOZQ[",
2004: " 30G]LFL[ RMFM[ RIFSFVGXIYKZNZSYVXXVZS[I[ RSFUGWIXKYNYSXVWXUZS[",
2005: " 22G\\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[",
2006: " 20G[LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[P[",
2007: " 40G^XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXX RQFOGMILKKNKSLVMXOZQ[ RXSX[ RYSY[ RUS\\S",
2008: " 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RLPXP RH[O[ RU[\\[",
2009: " 12MXRFR[ RSFS[ ROFVF RO[V[",
2010: " 20KZUFUWTZR[P[NZMXMVNUOVNW RTFTWSZR[ RQFXF",
2011: " 27F\\KFK[ RLFL[ RYFLS RQOY[ RPOX[ RHFOF RUF[F RH[O[ RU[[[",
2012: " 14I[NFN[ ROFO[ RKFRF RK[Z[ZUY[",
2013: " 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][",
2014: " 21G^LFL[ RMFYY RMHY[ RYFY[ RIFMF RVF\\F RI[O[",
2015: " 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF",
2016: " 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[",
2017: " 64G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF RNYNXOVQURUTVUXV_W`Y`Z^Z] RUXV\\W^X_Y_Z^",
2018: " 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUPMP RUFWGXHYJYLXNWOUP RI[P[ RRPTQURXYYZZZ[Y RTQUSWZX[Z[[Y[X",
2019: " 34H\\XIYFYLXIVGSFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[Q[NZLXKUK[LX",
2020: " 16I\\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[",
2021: " 23F^KFKULXNZQ[S[VZXXYUYF RLFLUMXOZQ[ RHFOF RVF\\F",
2022: " 15H\\KFR[ RLFRX RYFR[ RIFOF RUF[F",
2023: " 24F^JFN[ RKFNV RRFN[ RRFV[ RSFVV RZFV[ RGFNF RWF]F",
2024: " 21H\\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[",
2025: " 20H]KFRQR[ RLFSQS[ RZFSQ RIFOF RVF\\F RO[V[",
2026: " 16H\\XFK[ RYFL[ RLFKLKFYF RK[Y[YUX[",
2027: " 18H\\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[",
2028: " 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[",
2029: " 14I[NFN[ ROFO[ RKFZFZLYF RK[R[",
2030: " 15H\\RFJ[ RRFZ[ RRIY[ RKZYZ RJ[Z[",
2031: " 22G\\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[",
2032: " 16H\\XFK[ RYFL[ RLFKLKFYF RK[Y[YUX[",
2033: " 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RLPXP RH[O[ RU[\\[",
2034: " 56G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF ROMOT RUMUT ROPUP ROQUQ",
2035: " 12MXRFR[ RSFS[ ROFVF RO[V[",
2036: " 27F\\KFK[ RLFL[ RYFLS RQOY[ RPOX[ RHFOF RUF[F RH[O[ RU[[[",
2037: " 15H\\RFK[ RRFY[ RRIX[ RI[O[ RU[[[",
2038: " 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][",
2039: " 21G^LFL[ RMFYY RMHY[ RYFY[ RIFMF RVF\\F RI[O[",
2040: " 36G]KEJJ RZEYJ RONNS RVNUS RKWJ\\ RZWY\\ RKGYG RKHYH ROPUP ROQUQ RKYYY RKZYZ",
2041: " 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF",
2042: " 21F^KFK[ RLFL[ RXFX[ RYFY[ RHF\\F RH[O[ RU[\\[",
2043: " 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[",
2044: " 20H]KFRPJ[ RJFQP RJFYFZLXF RKZXZ RJ[Y[ZUX[",
2045: " 16I\\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[",
2046: " 33I\\KKKILGMFOFPGQIRMR[ RKIMGOGQI RZKZIYGXFVFUGTISMS[ RZIXGVGTI RO[V[",
2047: " 48H]RFR[ RSFS[ RPKMLLMKOKRLTMUPVUVXUYTZRZOYMXLUKPK RPKNLMMLOLRMTNUPV RUVWUXTYRYOXMWLUK ROFVF RO[V[",
2048: " 21H\\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[",
2049: " 41G^RFR[ RSFS[ RIMJLLMMQNSOTQU RJLKMLQMSNTQUTUWTXSYQZM[L RTUVTWSXQYM[L\\M ROFVF RO[V[",
2050: " 43G]JXK[O[MWKSJPJLKIMGPFTFWGYIZLZPYSWWU[Y[ZX RMWLTKPKLLINGPF RTFVGXIYLYPXTWW RKZNZ RVZYZ",
2051: " 18H\\UFH[ RUFV[ RTHU[ RLUUU RF[L[ RR[X[",
2052: " 41F^OFI[ RPFJ[ RLFWFZG[I[KZNYOVP RWFYGZIZKYNXOVP RMPVPXQYSYUXXVZR[F[ RVPWQXSXUWXUZR[",
2053: " 34H]ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[S[UZWXXV RTFRGPINLMOLSLVMYNZP[",
2054: " 30F]OFI[ RPFJ[ RLFUFXGYHZKZOYSWWUYSZO[F[ RUFWGXHYKYOXSVWTYRZO[",
2055: " 22F]OFI[ RPFJ[ RTLRT RLF[FZLZF RMPSP RF[U[WVT[",
2056: " 20F\\OFI[ RPFJ[ RTLRT RLF[FZLZF RMPSP RF[M[",
2057: " 42H^ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[R[UZWXYT RTFRGPINLMOLSLVMYNZP[ RR[TZVXXT RUT\\T",
2058: " 27E_NFH[ ROFI[ R[FU[ R\\FV[ RKFRF RXF_F RLPXP RE[L[ RR[Y[",
2059: " 12LYUFO[ RVFP[ RRFYF RL[S[",
2060: " 21I[XFSWRYQZO[M[KZJXJVKULVKW RWFRWQYO[ RTF[F",
2061: " 27F]OFI[ RPFJ[ R]FLS RSOW[ RROV[ RLFSF RYF_F RF[M[ RS[Y[",
2062: " 14H\\QFK[ RRFL[ RNFUF RH[W[YUV[",
2063: " 30E`NFH[ RNFO[ ROFPY R\\FO[ R\\FV[ R]FW[ RKFOF R\\F`F RE[K[ RS[Z[",
2064: " 21F_OFI[ ROFVX ROIV[ R\\FV[ RLFOF RYF_F RF[L[",
2065: " 42G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF RSFQGOIMLLOKSKVLYN[ RQ[SZUXWUXRYNYKXHVF",
2066: " 27F]OFI[ RPFJ[ RLFXF[G\\I\\K[NYPUQMQ RXFZG[I[KZNXPUQ RF[M[",
2067: " 61G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF RSFQGOIMLLOKSKVLYN[ RQ[SZUXWUXRYNYKXHVF RLYLXMVOUPURVSXS_T`V`W^W] RSXT^U_V_W^",
2068: " 42F^OFI[ RPFJ[ RLFWFZG[I[KZNYOVPMP RWFYGZIZKYNXOVP RRPTQURVZW[Y[ZYZX RURWYXZYZZY RF[M[",
2069: " 35G^ZH[H\\F[L[JZHYGVFRFOGMIMKNMONVRXT RMKOMVQWRXTXWWYVZS[O[LZKYJWJUI[JYKY",
2070: " 16H]UFO[ RVFP[ ROFLLNF]F\\L\\F RL[S[",
2071: " 25F_NFKQJUJXKZN[R[UZWXXU\\F ROFLQKUKXLZN[ RKFRF RYF_F",
2072: " 15H\\NFO[ ROFPY R\\FO[ RLFRF RXF^F",
2073: " 24E_MFK[ RNFLY RUFK[ RUFS[ RVFTY R]FS[ RJFQF RZF`F",
2074: " 21G]NFU[ ROFV[ R\\FH[ RLFRF RXF^F RF[L[ RR[X[",
2075: " 20H]NFRPO[ ROFSPP[ R]FSP RLFRF RYF_F RL[S[",
2076: " 16G][FH[ R\\FI[ ROFLLNF\\F RH[V[XUU[",
2077: " 46H\\KILKXWYYY[ RLLXX RKIKKLMXYY[ RPPLTKVKXLZK[ RKVMZ RLTLVMXMZK[ RSSXN RVIVLWNYNYLWKVI RVIWLYN",
2101: " 39I]NONPMPMONNPMTMVNWOXQXXYZZ[ RWOWXXZZ[[[ RWQVRPSMTLVLXMZP[S[UZWX RPSNTMVMXNZP[",
2102: " 33G\\LFL[ RMFM[ RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIFMF",
2103: " 28H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX RQMONMPLSLUMXOZQ[",
2104: " 36H]WFW[ RXFX[ RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTFXF RW[[[",
2105: " 31H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX RWSWPVN RQMONMPLSLUMXOZQ[",
2106: " 22KXUGTHUIVHVGUFSFQGPIP[ RSFRGQIQ[ RMMUM RM[T[",
2107: " 60I\\QMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM RONNPNTOV RUVVTVPUN RVOWNYMYNWN RNUMVLXLYM[P\\U\\X]Y^ RLYMZP[U[X\\Y^Y_XaUbObLaK_K^L\\O[",
2108: " 28G]LFL[ RMFM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIFMF RI[P[ RT[[[",
2109: " 18MXRFQGRHSGRF RRMR[ RSMS[ ROMSM RO[V[",
2110: " 25MXSFRGSHTGSF RTMT_SaQbObNaN`O_P`Oa RSMS_RaQb RPMTM",
2111: " 27G\\LFL[ RMFM[ RWMMW RRSX[ RQSW[ RIFMF RTMZM RI[P[ RT[Z[",
2112: " 12MXRFR[ RSFS[ ROFSF RO[V[",
2113: " 44BcGMG[ RHMH[ RHPJNMMOMRNSPS[ ROMQNRPR[ RSPUNXMZM]N^P^[ RZM\\N]P][ RDMHM RD[K[ RO[V[ RZ[a[",
2114: " 28G]LML[ RMMM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIMMM RI[P[ RT[[[",
2115: " 36H\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM",
2116: " 36G\\LMLb RMMMb RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIMMM RIbPb",
2117: " 33H\\WMWb RXMXb RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTb[b",
2118: " 23IZNMN[ ROMO[ ROSPPRNTMWMXNXOWPVOWN RKMOM RK[R[",
2119: " 32J[WOXMXQWOVNTMPMNNMOMQNRPSUUWVXW RMPNQPRUTWUXVXYWZU[Q[OZNYMWM[NY",
2120: " 16KZPFPWQZS[U[WZXX RQFQWRZS[ RMMUM",
2121: " 28G]LMLXMZP[R[UZWX RMMMXNZP[ RWMW[ RXMX[ RIMMM RTMXM RW[[[",
2122: " 15I[LMR[ RMMRY RXMR[ RJMPM RTMZM",
2123: " 24F^JMN[ RKMNX RRMN[ RRMV[ RSMVX RZMV[ RGMNM RWM]M",
2124: " 21H\\LMW[ RMMX[ RXML[ RJMPM RTMZM RJ[P[ RT[Z[",
2125: " 22H[LMR[ RMMRY RXMR[P_NaLbKbJaK`La RJMPM RTMZM",
2126: " 16I[WML[ RXMM[ RMMLQLMXM RL[X[XWW[",
2127: " 40G^QMNNLPKRJUJXKZN[P[RZUWWTYPZM RQMONMPLRKUKXLZN[ RQMSMUNVPXXYZZ[ RSMTNUPWXXZZ[[[",
2128: " 57G\\TFQGOIMMLPKTJZIb RTFRGPINMMPLTKZJb RTFVFXGYHYKXMWNTOPO RVFXHXKWMVNTO RPOTPVRWTWWVYUZR[P[NZMYLV RPOSPURVTVWUYTZR[",
2129: " 28H\\IPKNMMOMQNROSRSVRZOb RJOLNPNRO RZMYPXRSYP^Nb RYMXPWRSY",
2130: " 44I\\VNTMRMONMQLTLWMYNZP[R[UZWWXTXQWOSJRHRFSEUEWFYH RRMPNNQMTMXNZ RR[TZVWWTWPVNTKSISGTFVFYH",
2131: " 32I[XPVNTMPMNNNPPRSS RPMONOPQRSS RSSNTLVLXMZP[S[UZWX RSSOTMVMXNZP[",
2132: " 31I[TFRGQHQIRJUKZKZJWKSMPOMRLULWMYP[S]T_TaSbQbPa RULQONRMUMWNYP[",
2133: " 32G]HQIOKMNMONOPNTL[ RMMNNNPMTK[ RNTPPRNTMVMXNYOYRXWUb RVMXOXRWWTb",
2134: " 44F]GQHOJMMMNNNPMUMXNZO[ RLMMNMPLULXMZO[Q[SZUXWUXRYMYIXGVFTFRHRJSMUPWRZT RSZUWVUWRXMXIWGVF",
2135: " 15LXRMPTOXOZP[S[UYVW RSMQTPXPZQ[",
2136: " 29H\\NMJ[ ROMK[ RXMYNZNYMWMUNQROSMS ROSQTSZT[ ROSPTRZS[U[WZYW",
2137: " 23H\\KFMFOGPHQJWXXZY[ RMFOHPJVXWZY[Z[ RRMJ[ RRMK[",
2138: " 28F]MMGb RNMHb RMPLVLYN[P[RZTXVU RXMUXUZV[Y[[Y\\W RYMVXVZW[",
2139: " 24H\\NML[ ROMNSMXL[ RYMXQVU RZMYPXRVUTWQYOZL[ RKMOM",
2140: " 45IZTFRGQHQIRJUKXK RUKQLOMNONQPSSTVT RUKRLPMOOOQQSST RSTOUMVLXLZN\\S^T_TaRbPb RSTPUNVMXMZO\\S^",
2141: " 32I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RRMPNNQMTMXNZ RR[TZVWWTWPVN",
2142: " 22G]PNL[ RPNM[ RVNV[ RVNW[ RIPKNNM[M RIPKONN[N",
2143: " 31H[LVMYNZP[R[UZWWXTXQWOVNTMRMONMQLTHb RR[TZVWWTWPVN RRMPNNQMTIb",
2144: " 35H][MQMNNLQKTKWLYMZO[Q[TZVWWTWQVOUNSM RQMONMQLTLXMZ RQ[SZUWVTVPUN RUN[N",
2145: " 16H\\SNP[ RSNQ[ RJPLNOMZM RJPLOONZN",
2146: " 31H\\IQJOLMOMPNPPNVNYP[ RNMONOPMVMYNZP[Q[TZVXXUYRYOXMWNXOYR RXUYO",
2147: " 37G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb RJWLYNZQZTYWWYU RZOXNVNTPRSPYNb",
2148: " 23I[KMMMONPPU_VaWb RMMNNOPT_UaWbYb RZMYOWRM]K`Jb",
2149: " 34F]UFOb RVFNb RGQHOJMMMNNNPMUMXOZRZTYWVYS RLMMNMPLULXMZO[R[TZVXXUYS[M",
2150: " 44F]JQLOONNMLNJQITIWJZK[M[OZQWRT RIWJYKZMZOYQW RQTQWRZS[U[WZYWZTZQYNXMWNYOZQ RQWRYSZUZWYYW",
2151: " 39H]XMVTUXUZV[Y[[Y\\W RYMWTVXVZW[ RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ",
2152: " 36H[PFLSLVMYNZ RQFMS RMSNPPNRMTMVNWOXQXTWWUZR[P[NZMWMS RVNWPWTVWTZR[ RMFQF",
2153: " 25I[WPWQXQXPWNUMRMONMQLTLWMYNZP[R[UZWW RRMPNNQMTMXNZ",
2154: " 42H]ZFVTUXUZV[Y[[Y\\W R[FWTVXVZW[ RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ RWF[F",
2155: " 26I[MVQUTTWRXPWNUMRMONMQLTLWMYNZP[R[UZWX RRMPNNQMTMXNZ",
2156: " 35KZZGYHZI[H[GZFXFVGUHTJSMP[O_Na RXFVHUJTNRWQ[P^O`NaLbJbIaI`J_K`Ja ROMYM",
2157: " 43H\\YMU[T^RaObLbJaI`I_J^K_J` RXMT[S^QaOb RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ",
2158: " 31H]PFJ[ RQFK[ RMTOPQNSMUMWNXOXQVWVZW[ RUMWOWQUWUZV[Y[[Y\\W RMFQF",
2159: " 26LYUFTGUHVGUF RMQNOPMSMTNTQRWRZS[ RRMSNSQQWQZR[U[WYXW",
2160: " 32LYVFUGVHWGVF RNQOOQMTMUNUQR[Q^P`OaMbKbJaJ`K_L`Ka RSMTNTQQ[P^O`Mb",
2161: " 34H\\PFJ[ RQFK[ RXNWOXPYOYNXMWMUNQROSMS ROSQTSZT[ ROSPTRZS[U[WZYW RMFQF",
2162: " 18MYUFQTPXPZQ[T[VYWW RVFRTQXQZR[ RRFVF",
2163: " 52AbBQCOEMHMINIPHTF[ RGMHNHPGTE[ RHTJPLNNMPMRNSOSQP[ RPMRORQO[ RRTTPVNXMZM\\N]O]Q[W[Z\\[ RZM\\O\\QZWZZ[[^[`YaW",
2164: " 37F]GQHOJMMMNNNPMTK[ RLMMNMPLTJ[ RMTOPQNSMUMWNXOXQVWVZW[ RUMWOWQUWUZV[Y[[Y\\W",
2165: " 32I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RRMPNNQMTMXNZ RR[TZVWWTWPVN",
2166: " 42G\\HQIOKMNMONOPNTJb RMMNNNPMTIb RNTOQQNSMUMWNXOYQYTXWVZS[Q[OZNWNT RWNXPXTWWUZS[ RFbMb",
2167: " 33H\\XMRb RYMSb RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ RObVb",
2168: " 26IZJQKOMMPMQNQPPTN[ ROMPNPPOTM[ RPTRPTNVMXMYNYOXPWOXN",
2169: " 28J[XOXPYPYOXNUMRMONNONQORVVWW RNPOQVUWVWYVZS[P[MZLYLXMXMY",
2170: " 18KYTFPTOXOZP[S[UYVW RUFQTPXPZQ[ RNMWM",
2171: " 37F]GQHOJMMMNNNQLWLYN[ RLMMNMQKWKYLZN[P[RZTXVT RXMVTUXUZV[Y[[Y\\W RYMWTVXVZW[",
2172: " 26H\\IQJOLMOMPNPQNWNYP[ RNMONOQMWMYNZP[Q[TZVXXUYQYMXMYO",
2173: " 41C`DQEOGMJMKNKQIWIYK[ RIMJNJQHWHYIZK[M[OZQXRV RTMRVRYSZU[W[YZ[X\\V]R]M\\M]O RUMSVSYU[",
2174: " 42H\\KQMNOMRMSOSR RQMRORRQVPXNZL[K[JZJYKXLYKZ RQVQYR[U[WZYW RYNXOYPZOZNYMXMVNTPSRRVRYS[",
2175: " 41G\\HQIOKMNMONOQMWMYO[ RMMNNNQLWLYMZO[Q[SZUXWT RZMV[U^SaPbMbKaJ`J_K^L_K` RYMU[T^RaPb",
2176: " 31H\\YMXOVQNWLYK[ RLQMOOMRMVO RMOONRNVOXO RLYNYRZUZWY RNYR[U[WYXW",
2177: " 43G^VGUHVIWHWGUFRFOGMILLL[ RRFPGNIMLM[ R\\G[H\\I]H]G\\FZFXGWIW[ RZFYGXIX[ RIM[M RI[P[ RT[[[",
2178: " 33G]WGVHWIXHWGUFRFOGMILLL[ RRFPGNIMLM[ RWMW[ RXMX[ RIMXM RI[P[ RT[[[",
2179: " 35G]VGUHVIWHWGUF RXFRFOGMILLL[ RRFPGNIMLM[ RWHW[ RXFX[ RIMWM RI[P[ RT[[[",
2180: " 54BcRGQHRISHRGPFMFJGHIGLG[ RMFKGIIHLH[ R]G\\H]I^H]G[FXFUGSIRLR[ RXFVGTISLS[ R]M][ R^M^[ RDM^M RD[K[ RO[V[ RZ[a[",
2181: " 56BcRGQHRISHRGPFMFJGHIGLG[ RMFKGIIHLH[ R\\G[H\\I]H]G[F R^FXFUGSIRLR[ RXFVGTISLS[ R]H][ R^F^[ RDM]M RD[K[ RO[V[ RZ[a[",
2182: " 12MXRMR[ RSMS[ ROMSM RO[V[",
2184: " 25IZWNUMRMONMPLSLVMYNZQ[T[VZ RRMPNNPMSMVNYOZQ[ RMTUT",
2185: " 43I\\TFQGOJNLMOLTLXMZO[Q[TZVWWUXRYMYIXGVFTF RTFRGPJOLNOMTMXNZO[ RQ[SZUWVUWRXMXIWGVF RNPWP",
2186: " 42G]UFOb RVFNb RQMMNKPJSJVKXMZP[S[WZYXZUZRYPWNTMQM RQMNNLPKSKVLXNZP[ RS[VZXXYUYRXPVNTM",
2187: " 27I[TMVNXPXOWNTMQMNNMOLQLSMUOWSZ RQMONNOMQMSNUSZT\\T^S_Q_",
2190: " 45G]LMKNJPJRKUOYP[ RJRKTOXP[P]O`MbLbKaJ_J\\KXMTOQRNTMVMYNZPZTYXWZU[T[SZSXTWUXTY RVMXNYPYTXXWZ",
2191: " 69E_YGXHYIZHYGWFTFQGOINKMNLRJ[I_Ha RTFRGPIOKNNLWK[J^I`HaFbDbCaC`D_E`Da R_G^H_I`H`G_F]F[GZHYJXMU[T_Sa R]F[HZJYNWWV[U^T`SaQbObNaN`O_P`Oa RIM^M",
2192: " 52F^[GZH[I\\H[GXFUFRGPIOKNNMRK[J_Ia RUFSGQIPKONMWL[K^J`IaGbEbDaD`E_F`Ea RYMWTVXVZW[Z[\\Y]W RZMXTWXWZX[ RJMZM",
2193: " 54F^YGXHYIZHZGXF R\\FUFRGPIOKNNMRK[J_Ia RUFSGQIPKONMWL[K^J`IaGbEbDaD`E_F`Ea R[FWTVXVZW[Z[\\Y]W R\\FXTWXWZX[ RJMYM",
2194: " 86@cTGSHTIUHTGRFOFLGJIIKHNGRE[D_Ca ROFMGKIJKINGWF[E^D`CaAb?b>a>`?_@`?a R`G_H`IaH`G]FZFWGUITKSNRRP[O_Na RZFXGVIUKTNRWQ[P^O`NaLbJbIaI`J_K`Ja R^M\\T[X[Z\\[_[aYbW R_M]T\\X\\Z][ RDM_M",
2195: " 88@cTGSHTIUHTGRFOFLGJIIKHNGRE[D_Ca ROFMGKIJKINGWF[E^D`CaAb?b>a>`?_@`?a R^G]H^I_H_G]F RaFZFWGUITKSNRRP[O_Na RZFXGVIUKTNRWQ[P^O`NaLbJbIaI`J_K`Ja R`F\\T[X[Z\\[_[aYbW RaF]T\\X\\Z][ RDM^M",
2196: " 20LYMQNOPMSMTNTQRWRZS[ RRMSNSQQWQZR[U[WYXW",
2200: " 40H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RQFOGNHMJLOLRMWNYOZQ[ RS[UZVYWWXRXOWJVHUGSF",
2201: " 11H\\NJPISFS[ RRGR[ RN[W[",
2202: " 45H\\LJMKLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RTFVGWHXJXLWNTPPR RKYLXNXSZVZXYYX RNXS[W[XZYXYV",
2203: " 47H\\LJMKLLKKKJLHMGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[P[MZLYKWKVLUMVLW RWQXTXWWYVZT[",
2204: " 13H\\THT[ RUFU[ RUFJUZU RQ[X[",
2205: " 39H\\MFKP RKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMVLW RSMUNWPXSXUWXUZS[ RMFWF RMGRGWF",
2206: " 48H\\WIVJWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNRNOOMQLT RRFPGNIMKLOLUMXOZQ[ RS[UZWXXUXTWQUOSN",
2207: " 31H\\KFKL RKJLHNFPFUIWIXHYF RLHNGPGUI RYFYIXLTQSSRVR[ RXLSQRSQVQ[",
2208: " 63H\\PFMGLILLMNPOTOWNXLXIWGTFPF RPFNGMIMLNNPO RTOVNWLWIVGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RPONPMQLSLWMYNZP[ RT[VZWYXWXSWQVPTO",
2209: " 48H\\XMWPURRSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNWMX RQSORMPLMLLMIOGQF RSFUGWIXLXRWVVXTZR[",
2210: " 6MWRYQZR[SZRY",
2211: " 8MWR[QZRYSZS\\R^Q_",
2212: " 12MWRMQNROSNRM RRYQZR[SZRY",
2213: " 14MWRMQNROSNRM RR[QZRYSZS\\R^Q_",
2214: " 15MWRFQHRTSHRF RRHRN RRYQZR[SZRY",
2215: " 32I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT RSFUGVHWJWLVNTP RRYQZR[SZRY",
2216: " 6NVRFQM RSFQM",
2217: " 12JZNFMM ROFMM RVFUM RWFUM",
2218: " 14KYQFOGNINKOMQNSNUMVKVIUGSFQF",
2219: " 9JZRFRR RMIWO RWIMO",
2220: " 3G][BIb",
2221: " 20KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\\T`",
2222: " 20KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\\P`",
2223: " 12KYOBOb RPBPb ROBVB RObVb",
2224: " 12KYTBTb RUBUb RNBUB RNbUb",
2225: " 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\\P^Q`RaTb",
2226: " 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\\T^S`RaPb",
2227: " 4KYUBNRUb",
2228: " 4KYOBVROb",
2229: " 3NVRBRb",
2230: " 6KYOBOb RUBUb",
2231: " 3E_IR[R",
2232: " 6E_RIR[ RIR[R",
2233: " 9F^RJR[ RJRZR RJ[Z[",
2234: " 9F^RJR[ RJJZJ RJRZR",
2235: " 6G]KKYY RYKKY",
2236: " 6MWRQQRRSSRRQ",
2237: " 15E_RIQJRKSJRI RIR[R RRYQZR[SZRY",
2238: " 6E_IO[O RIU[U",
2239: " 9E_YIK[ RIO[O RIU[U",
2240: " 9E_IM[M RIR[R RIW[W",
2241: " 4F^ZIJRZ[",
2242: " 4F^JIZRJ[",
2243: " 10F^ZFJMZT RJVZV RJ[Z[",
2244: " 10F^JFZMJT RJVZV RJ[Z[",
2245: " 21F_[WYWWVUTRPQOONMNKOJQJSKUMVOVQURTUPWNYM[M",
2246: " 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O",
2247: " 8G]JTROZT RJTRPZT",
2248: " 7LXTFOL RTFUGOL",
2249: " 7LXPFUL RPFOGUL",
2250: " 18H\\KFLHNJQKSKVJXHYF RKFLINKQLSLVKXIYF",
2251: " 8MWRHQGRFSGSIRKQL",
2252: " 8MWSFRGQIQKRLSKRJ",
2253: " 8MWRHSGRFQGQIRKSL",
2254: " 8MWQFRGSISKRLQKRJ",
2255: " 10E[HMLMRY RKMR[ R[BR[",
2256: " 13F^ZJSJOKMLKNJQJSKVMXOYSZZZ",
2257: " 13F^JJJQKULWNYQZSZVYXWYUZQZJ",
2258: " 13F^JJQJUKWLYNZQZSYVWXUYQZJZ",
2259: " 13F^JZJSKOLMNKQJSJVKXMYOZSZZ",
2260: " 16F^ZJSJOKMLKNJQJSKVMXOYSZZZ RJRVR",
2261: " 11E_XP[RXT RUMZRUW RIRZR",
2262: " 11JZPLRITL RMORJWO RRJR[",
2263: " 11E_LPIRLT ROMJROW RJR[R",
2264: " 11JZPXR[TX RMURZWU RRIRZ",
2265: " 44I\\XRWOVNTMRMONMQLTLWMYNZP[R[UZWXXUYPYKXHWGUFRFPGOHOIPIPH RRMPNNQMTMXNZ RR[TZVXWUXPXKWHUF",
2266: " 15H\\JFR[ RKFRY RZFR[ RJFZF RKGYG",
2267: " 10AbDMIMRY RHNR[ Rb:R[",
2268: " 32F^[CZD[E\\D\\C[BYBWCUETGSJRNPZO^N` RVDUFTJRVQZP]O_MaKbIbHaH`I_J`Ia",
2269: " 50F^[CZD[E\\D\\C[BYBWCUETGSJRNPZO^N` RVDUFTJRVQZP]O_MaKbIbHaH`I_J`Ia RQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK",
2270: " 26F_\\S[UYVWVUUTTQPPONNLNJOIQISJULVNVPUQTTPUOWNYN[O\\Q\\S",
2271: " 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT",
2272: " 49F_[NZO[P\\O\\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\\Z\\Y RM[KZJXJUKSMQ RMKNMVXXZZ[",
2273: " 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\\T]Q]O\\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV",
2274: " 42H\\PBP_ RTBT_ RXIWJXKYJYIWGTFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[P[MZKXKWLVMWLX",
2275: " 12H]SFLb RYFRb RLQZQ RKWYW",
2276: " 46JZUITJUKVJVIUGSFQFOGNINKOMQOVR ROMTPVRWTWVVXTZ RPNNPMRMTNVPXU[ RNVSYU[V]V_UaSbQbOaN_N^O]P^O_",
2277: " 30JZRFQHRJSHRF RRFRb RRQQTRbSTRQ RLMNNPMNLLM RLMXM RTMVNXMVLTM",
2278: " 56JZRFQHRJSHRF RRFRT RRPQRSVRXQVSRRP RRTRb RR^Q`RbS`R^ RLMNNPMNLLM RLMXM RTMVNXMVLTM RL[N\\P[NZL[ RL[X[ RT[V\\X[VZT[",
2279: " 12I\\XFX[ RKFXF RPPXP RK[X[",
2281: " 38E`QFNGKIILHOHRIUKXNZQ[T[WZZX\\U]R]O\\LZIWGTFQF RROQPQQRRSRTQTPSORO RRPRQSQSPRP",
2282: " 45J[PFNGOIQJ RPFOGOI RUFWGVITJ RUFVGVI RQJOKNLMNMQNSOTQUTUVTWSXQXNWLVKTJQJ RRUR[ RSUS[ RNXWX",
2283: " 27I\\RFOGMILLLMMPORRSSSVRXPYMYLXIVGSFRF RRSR[ RSSS[ RNWWW",
2284: " 28D`PFMGJIHLGOGSHVJYM[P\\T\\W[ZY\\V]S]O\\LZIWGTFPF RRFR\\ RGQ]Q",
2285: " 31G`PMMNKPJSJTKWMYPZQZTYVWWTWSVPTNQMPM R]GWG[HUN R]G]M\\IVO R\\HVN",
2286: " 28F\\IIJGLFOFQGRIRLQOPQNSKU ROFPGQIQMPPNS RVFT[ RWFS[ RKUYU",
2287: " 30I\\MFMU RNFMQ RMQNOONQMTMWNXPXRWTUV RTMVNWPWRTXTZU[W[YY RKFNF",
2288: " 44I\\RNOOMQLTLUMXOZR[S[VZXXYUYTXQVOSNRN RRHNJRFRN RSHWJSFSN RRSQTQURVSVTUTTSSRS RRTRUSUSTRT",
2289: " 37G^QHRFR[ RTHSFS[ RJHKFKMLPNRQSRS RMHLFLNMQ R[HZFZMYPWRTSSS RXHYFYNXQ RNWWW",
2290: " 31G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[Y[YVX[",
2291: " 24H[YGUGQHNJLMKPKSLVNYQ[U\\Y\\ RYGVHSJQMPPPSQVSYV[Y\\",
2292: " 27F_OQMQKRJSIUIWJYKZM[O[QZRYSWSURSQROQ RSHPQ RZJRR R\\QST",
2293: " 12H\\OKUY RUKOY RKOYU RYOKU",
2294: " 48F^NVLUKUIVHXHYI[K\\L\\N[OYOXNVKRJOJMKJMHPGTGWHYJZMZOYRVVUXUYV[X\\Y\\[[\\Y\\X[VYUXUVV RJMKKMIPHTHWIYKZM",
2295: " 48F^NMLNKNIMHKHJIHKGLGNHOJOKNMKQJTJVKYM[P\\T\\W[YYZVZTYQVMUKUJVHXGYG[H\\J\\K[MYNXNVM RJVKXMZP[T[WZYXZV",
2301: " 40F_JMILIJJHLGNGPHQIRKSP RIJKHMHOIPJQLRPR[ R[M\\L\\J[HYGWGUHTISKRP R\\JZHXHVIUJTLSPS[",
2302: " 51F^IGJKKMMOPPTPWOYMZK[G RIGJJKLMNPOTOWNYLZJ[G RPONPMQLSLVMXOZQ[S[UZWXXVXSWQVPTO RPPNQMSMVNY RVYWVWSVQTP",
2303: " 30F^MJMV RNKNU RVKVU RWJWV RIGKIMJPKTKWJYI[G RIYKWMVPUTUWVYW[Y",
2304: " 48F^[ILIJJILINJPLQNQPPQNQLPJ[J RIMJOKPMQ RQMPKOJMI RIXXXZW[U[SZQXPVPTQSSSUTWIW R[TZRYQWP RSTTVUWWX",
2305: " 48F]OUMTLTJUIWIXJZL[M[OZPXPWOUJPINIKJILHOGSGWHYJZLZOYRVUUWUYV[X[YZZX RMSKPJNJKKILH RSGVHXJYLYOXRVU",
2306: " 48G_HKKHMKMV RJILLLV RMKPHRKRU ROIQLQU RRKUHWKW[ RTIVLV[ RWKZH[J\\M\\P[SZUXWUYP[ RYIZJ[M[PZSYUWWTYP[",
2307: " 41F^ISMSLRKOKMLJNHQGSGVHXJYMYOXRWS[S RITOTMRLOLMMJOHQG RSGUHWJXMXOWRUT[T RKXYX RKYYY",
2308: " 30F_GLJIMLMX RIJLMLX RMLPISLSX ROJRMRX RSLVIYLYW[Y RUJXMXXZZ]W",
2309: " 33G]ZIJY RZIWJQJ RXKUKQJ RZIYLYR RXKXNYR RQRJR RPSMSJR RQRQY RPSPVQY",
2310: " 33F^HOJKOU RJMOWRPWPZO[M[KZIXHWHUITKTMUPVRWUWXUZ RWHVIUKUMWQXTXWWYUZ",
2311: " 36F^IOLLPN RKMOORLUN RQMTOWLYN RVMXO[L RIULRPT RKSOURRUT RQSTUWRYT RVSXU[R",
2312: " 48F^JHNJPLQOQRPUNWJY RJHMIOJQLRO RRRQUOWMXJY RZHWIUJSLRO RRRSUUWWXZY RZHVJTLSOSRTUVWZY RIP[P RIQ[Q",
2317: " 12NVQQQSSSSQQQ RQQSS RSQQS",
2318: " 18JZMPQRTTVVWYW[V]U^ RMQST RMRPSTUVWWY",
2319: " 18JZWKVMTOPQMR RSPMS RUFVGWIWKVNTPQRMT",
2320: " 36H\\SMONLPKRKTLVNWQWUVXTYRYPXNVMSM RXNSM RVMQNLP RONKR RLVQW RNWSVXT RUVYR",
2321: " 36H\\SMONLPKRKTLVNWQWUVXTYRYPXNVMSM RXNSM RVMQNLP RONKR RLVQW RNWSVXT RUVYR",
2322: " 34J[SMPNNPMRMTNVPWRWUVWTXRXPWNUMSM ROPUM RNRVN RMTWO RNUXP ROVWR RPWVT",
2323: " 18JZOGO^ RUFU] RMNWL RMOWM RMWWU RMXWV",
2324: " 18JZNFNX RVLV^ RNNVL RNOVM RNWVU RNXVV",
2325: " 25JZNBNW RNNQLTLVMWOWQVSSUQVNW RNNQMTMVN RUMVOVQUSSU",
2326: " 18E_HIHL R\\I\\L RHI\\I RHJ\\J RHK\\K RHL\\L",
2327: " 18JZMNMQ RWNWQ RMNWN RMOWO RMPWP RMQWQ",
2328: " 49JZMLWX RMLONQOTOVNWMWKUKUMTO RONTO RQOWM RVKVN RULWL RWXUVSUPUNVMWMYOYOWPU RUVPU RSUMW RNVNY RMXOX",
2329: " 26JZPOOMOKMKMMNNPOSOUNWL RNKNN RMLOL RMMSO RPOUN RWLWY",
2330: " 86A^GfHfIeIdHcGcFdFfGhIiKiNhPfQdR`RUQ;Q4R/S-U,V,X-Y/Y3X6W8U;P?JCHEFHEJDNDREVGYJ[N\\R\\V[XZZW[T[PZMYKWITHPHMIKKJNJRKUMW RGdGeHeHdGd RU;Q?LCIFGIFKENERFVGXJ[ RR\\U[WZYWZTZPYMXKVITH",
2331: "103EfNSOUQVSVUUVSVQUOSNQNOONPMSMVNYP[S\\V\\Y[[Y\\W]T]P\\MZJXIUHRHOIMJKLIOHSHXI]KaMcPeTfYf]e`cba RKLJNIRIXJ\\L`NbQdUeYe]d_cba RPOTO ROPUP RNQVQ RNRVR RNSVS ROTUT RPUTU RaLaNcNcLaL RbLbN RaMcM RaVaXcXcVaV RbVbX RaWcW",
2332: " 30D`H@Hd RM@Md RW@Wd R\\@\\d RMMWK RMNWL RMOWM RMWWU RMXWV RMYWW",
2367: " 12NVQQQSSSSQQQ RQQSS RSQQS",
2368: " 18JZMPQRTTVVWYW[V]U^ RMQST RMRPSTUVWWY",
2369: " 18JZWKVMTOPQMR RSPMS RUFVGWIWKVNTPQRMT",
2370: " 32H\\PMMNLOKQKSLUMVPWTWWVXUYSYQXOWNTMPM RMNLPLSMUNVPW RWVXTXQWOVNTM",
2371: " 36H\\SMONLPKRKTLVNWQWUVXTYRYPXNVMSM RXNSM RVMQNLP RONKR RLVQW RNWSVXT RUVYR",
2372: " 34J[SMPNNPMRMTNVPWRWUVWTXRXPWNUMSM ROPUM RNRVN RMTWO RNUXP ROVWR RPWVT",
2373: " 18JZOGO^ RUFU] RMNWL RMOWM RMWWU RMXWV",
2374: " 18JZNFNX RVLV^ RNNVL RNOVM RNWVU RNXVV",
2375: " 25JZNBNW RNNQLTLVMWOWQVSSUQVNW RNNQMTMVN RUMVOVQUSSU",
2376: " 18E_HIHL R\\I\\L RHI\\I RHJ\\J RHK\\K RHL\\L",
2377: " 18JZMNMQ RWNWQ RMNWN RMOWO RMPWP RMQWQ",
2378: " 36JZQCVMRTRU RULQS RTITKPRRUUY RW\\UYSXQXOYN[N]O_Ra RW\\UZSYOYO]P_Ra RSXPZN]",
2379: " 26JZPOOMOKMKMMNNPOSOUNWL RNKNN RMLOL RMMSO RPOUN RWLSY",
2380: " 86A^GfHfIeIdHcGcFdFfGhIiKiNhPfQdR`RUQ;Q4R/S-U,V,X-Y/Y3X6W8U;P?JCHEFHEJDNDREVGYJ[N\\R\\V[XZZW[T[PZMYKWITHPHMIKKJNJRKUMW RGdGeHeHdGd RU;Q?LCIFGIFKENERFVGXJ[ RR\\U[WZYWZTZPYMXKVITH",
2381: " 89IjNQOOQNSNUOVQVSUUSVQVOUNTMQMNNKPISHWH[I^K`NaRaW`[_]]`ZcVfQiMk RWHZI]K_N`R`W_[^]\\`YcTgQi RPOTO ROPUP RNQVQ RNRVR RNSVS ROTUT RPUTU ReLeNgNgLeL RfLfN ReMgM ReVeXgXgVeV RfVfX ReWgW",
2382: " 85D`H>Hf RI>If RM>Mf RQBSBSDQDQAR?T>W>Y?[A\\D\\I[LYNWOUOSNRLQNOQNROSQVRXSVUUWUYV[X\\[\\`[cYeWfTfReQcQ`S`SbQb RRBRD RQCSC RY?ZA[D[IZLYN RRLRNPQNRPSRVRX RYVZX[[[`ZcYe RR`Rb RQaSa",
2401: " 21AcHBHb RIBIb R[B[b R\\B\\b RDB`B RDbMb RWb`b",
2402: " 23BaGBQPFb RFBPP REBPQ REB\\B^I[B RGa\\a RFb\\b^[[b",
2403: " 28I[X+U1R8P=OANFMNMVN^OcPgRlUsXy RU1S6Q<P@OFNNNVO^PdQhSnUs",
2404: " 28I[L+O1R8T=UAVFWNWVV^UcTgRlOsLy RO1Q6S<T@UFVNVVU^TdShQnOs",
2405: " 14I[M+MRMy RN+NRNy RM+X+ RMyXy",
2406: " 14I[V+VRVy RW+WRWy RL+W+ RLyWy",
2407: " 48I[V+S-Q/P1O4O8P<TDUGUJTMRP RS-Q0P4P8Q;UCVGVJUMRPNRRTUWVZV]UaQiPlPpQtSw RRTTWUZU]T`PhOlOpPsQuSwVy",
2408: " 48I[N+Q-S/T1U4U8T<PDOGOJPMRP RQ-S0T4T8S;OCNGNJOMRPVRRTOWNZN]OaSiTlTpStQw RRTPWOZO]P`ThUlUpTsSuQwNy",
2409: " 32I[V.S1Q4O8N=NCOIPMSXT\\UbUgTlSoQs RS1Q5P8O=OBPHQLTWU[VaVgUlSpQsNv",
2410: " 32I[N.Q1S4U8V=VCUITMQXP\\ObOgPlQoSs RQ1S5T8U=UBTHSLPWO[NaNgOlQpSsVv",
2411: ' 147Z:RARRo R@RQo R?RRr RZ"VJRr',
2412: " 57Ca].\\.[/[0\\1]1^0^.],[+Y+W,U.T0S3R:QJQjPsOv R\\/\\0]0]/\\/ RR:Rj RU.T1S:SZRjQqPtOvMxKyIyGxFvFtGsHsItIuHvGv RGtGuHuHtGt",
2501: " 20H\\RFJ[ RRIK[J[ RRIY[Z[ RRFZ[ RMUWU RLVXV",
2502: " 44H\\LFL[ RMGMZ RLFTFWGXHYJYMXOWPTQ RMGTGWHXJXMWOTP RMPTPWQXRYTYWXYWZT[L[ RMQTQWRXTXWWYTZMZ",
2503: " 38H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV RZKYKXIWHUGQGOHMKLNLSMVOYQZUZWYXXYVZV",
2504: " 32H]LFL[ RMGMZ RLFSFVGXIYKZNZSYVXXVZS[L[ RMGSGVHWIXKYNYSXVWXVYSZMZ",
2505: " 27I\\MFM[ RNGNZ RMFYF RNGYGYF RNPTPTQ RNQTQ RNZYZY[ RM[Y[",
2506: " 21I[MFM[ RNGN[M[ RMFYF RNGYGYF RNPTPTQ RNQTQ",
2507: " 44H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZRUR RZKYKXIWHUGQGOHNIMKLNLSMVNXOYQZUZWYXXYVYSUSUR",
2508: " 22G]KFK[ RKFLFL[K[ RYFXFX[Y[ RYFY[ RLPXP RLQXQ",
2509: " 8NWRFR[S[ RRFSFS[",
2510: " 20J[VFVVUYSZQZOYNVMV RVFWFWVVYUZS[Q[OZNYMV",
2511: " 22H]LFL[M[ RLFMFM[ RZFYFMR RZFMS RPOY[Z[ RQOZ[",
2512: " 14IZMFM[ RMFNFNZ RNZYZY[ RM[Y[",
2513: " 26F^JFJ[ RKKK[J[ RKKR[ RJFRX RZFRX RYKR[ RYKY[Z[ RZFZ[",
2514: " 20G]KFK[ RLIL[K[ RLIY[ RKFXX RXFXX RXFYFY[",
2515: " 40G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG",
2516: " 27H\\LFL[ RMGM[L[ RLFUFWGXHYJYMXOWPUQMQ RMGUGWHXJXMWOUPMP",
2517: " 48G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG RSXX]Y] RSXTXY]",
2518: " 34H\\LFL[ RMGM[L[ RLFTFWGXHYJYMXOWPTQMQ RMGTGWHXJXMWOTPMP RRQX[Y[ RSQY[",
2519: " 43H\\YIWGTFPFMGKIKKLMMNOOTQVRWSXUXXWYTZPZNYMXKX RYIWIVHTGPGMHLILKMMONTPVQXSYUYXWZT[P[MZKX",
2520: " 15J[RGR[ RSGS[R[ RLFYFYG RLFLGYG",
2521: " 24G]KFKULXNZQ[S[VZXXYUYF RKFLFLUMXNYQZSZVYWXXUXFYF",
2522: " 14H\\JFR[ RJFKFRX RZFYFRX RZFR[",
2523: " 26E_GFM[ RGFHFMX RRFMX RRIM[ RRIW[ RRFWX R]F\\FWX R]FW[",
2524: " 16H\\KFX[Y[ RKFLFY[ RYFXFK[ RYFL[K[",
2525: " 17I\\KFRPR[S[ RKFLFSP RZFYFRP RZFSPS[",
2526: " 20H\\XFK[ RYFL[ RKFYF RKFKGXG RLZYZY[ RK[Y[",
2551: " 38E\\XFVHTKQPOSLWIZG[E[DZDXEWFXEY RXFWJUTT[ RXFU[ RT[TYSVRTPRNQLQKRKTLWOZR[V[XZ",
2552: " 70F^UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWIXHY ROLNNMOKOJNJLKJMHOGRFXFZG[I[KZMXNTORO RXFYGZIZKYMXN RTOWPXQYSYVXYWZU[S[RZRXSU RTOVPWQXSXVWYU[",
2553: " 41H]KHJJJLKNNOQOUNWMYKZIZGYFWFTGQJOMMQLULXMZP[R[UZWXXVXTWRURSSRU RWFUGRJPMNQMUMXNZP[",
2554: " 43F]UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWJWLXNZP[S[UZWXYTZOZLYIWGUFPFMGKIJKJMKNMNNMOK",
2555: " 49I\\WIVJVLWMYMZKZIYGWFTFRGQHPJPLQNSO RTFRHQJQMSO RSOQONPLRKTKWLYMZO[R[UZWXXVXTWRURSSRU RQOOPMRLTLXMZ",
2556: " 46G\\WHVJTORUQWOZM[ RQLPNNOLOKMKKLINGQF[FXGWHVKTSSVRXPZM[K[IZHYHXIWJXIY RSFWGXG ROSPRRQVQXPZMXT",
2557: " 53G]JIIKIMJOLPOPROTNWKXHXGWFVFTGRIQKPNPQQSSTUTWSYQZO RWFUGSIRKQNQRST RZOYSWWUYSZO[L[JZIXIWJVKWJX RYSWVUXRZO[",
2558: " 55F^LLKKKILGOFRFOQMWLYKZI[G[FZFXGWHXGY RRFOONRLWKYI[ RJTKSMRVOXN[L]J^H^G]F\\FZGXJWLURTVTYV[W[YZ[X R\\FZHXLVRUVUYV[",
2559: " 33IYWHUKSPQUPWNZL[ RYLWNTOQOONNLNJOHQGUFYFWHVJTPRVQXOZL[J[IZIXJWKXJY",
2560: " 34IZYFWHUKSPPYN] RYMWOTPQPOONMNKOIQGUFYFWIVKSTQXPZN]M^K_J^J\\KZMXOWRVVU",
2561: " 59F^LLKKKIMGPFRFOQMWLYKZI[G[FZFXGWHXGY RRFOONRLWKYI[ RZGWKUMSNPO R]G\\H]I^H^G]F\\FZGWLVMTNPO RPOSPTRUYV[ RPORPSRTYV[W[YZ[X",
2562: " 40I[MILKLMMOOPRPUOWNZK[H[GZFYFWGVHTKPUOWMZK[ RVHTLRSQVPXNZK[I[HZHXIWKWMXPZR[U[WZYX",
2563: " 49D`RFNOKUIXGZE[C[BZBXCWDXCY RRFPMOQNVNZP[ RRFQJPOOVOZP[ R[FWORXP[ R[FYMXQWVWZY[Z[\\Z^X R[FZJYOXVXZY[",
2564: " 38G^RFQJOPMULWJZH[F[EZEXFWGXFY RRFRKSVT[ RRFSKTVT[ R`G_H`IaHaG`F^F\\GZJYLWQUWT[",
2565: " 34H]SFQGOIMLLNKRKVLYMZO[Q[TZVXXUYSZOZKYHXGWGUHSJQNPSPV RQGOJMNLRLVMYO[",
2566: " 53F]UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWIXHY ROLNNMOKOJNJLKJMHOGRFVFYGZH[J[MZOYPVQTQRP RVFXGYHZJZMYOXPVQ",
2567: " 43H]UJULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWSSWPYNZK[I[HZHXIWKWMXPZS[V[XZZX RWFXGYIYMXPVSSVOYK[",
2568: " 65F^UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWIXHY ROLNNMOKOJNJLKJMHOGRFWFZG[I[KZMYNVORO RWFYGZIZKYMXNVO RROUPVRWYX[ RROTPURVYX[Y[[Z]X",
2569: " 36H\\NIMKMMNOPPSPVOXN[K\\H\\G[FZFXGWHVJUMSTRWPZN[ RVJUNTUSXQZN[K[IZHXHWIVJWIX",
2570: " 38I[YHXJVOTUSWQZO[ RSLRNPONOMMMKNIPGSF\\FZGYHXKVSUVTXRZO[M[KZJYJXKWLXKY RUFYGZG",
2571: " 39G]HJJGLFMFOHOKNNKVKYL[ RMFNHNKKSJVJYL[N[PZSWUTVR RZFVRUVUYW[X[ZZ\\X R[FWRVVVYW[",
2572: " 36G\\HJJGLFMFOHOKNOLVLYM[ RMFNHNKLRKVKYM[N[QZTWVTXPYMZIZGYFXFWGVIVLWNYP[Q]Q",
2573: " 41F]ILHLGKGIHGJFNFMHLLKUJ[ RLLLUK[ RVFTHRLOUMYK[ RVFUHTLSUR[ RTLTUS[ R`F^G\\IZLWUUYS[",
2574: " 52H\\PKOLMLLKLIMGOFQFSGTITLSPQUOXMZJ[H[GZGXHWIXHY RQFRGSISLRPPUNXLZJ[ R]G\\H]I^H^G]F[FYGWIULSPRURXSZT[U[WZYX",
2575: " 42G]JJLGNFOFQGQIOOORPT ROFPGPINONRPTRTUSWQYNZL R\\FZLWTUX R]F[LYQWUUXSZP[L[JZIXIWJVKWJX",
2576: " 44G\\ZHYJWOVRUTSWQYOZL[ RSLRNPONOMMMKNIPGSF]F[GZHYKXOVUTXQZL[H[GZGXHWJWLXOZQ[T[WZYX RVFZG[G",
2601: " 36H\\WMW[X[ RWMXMX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX",
2602: " 36H\\LFL[M[ RLFMFM[ RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX",
2603: " 32I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX RXPWQVOTNQNOONPMSMUNXOYQZTZVYWWXX",
2604: " 36H\\WFW[X[ RWFXFX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX",
2605: " 36I[MTXTXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX RMSWSWQVOTNQNOONPMSMUNXOYQZTZVYWWXX",
2606: " 24LZWFUFSGRJR[S[ RWFWGUGSH RTGSJS[ ROMVMVN ROMONVN",
2607: " 48H\\XMWMW\\V_U`SaQaO`N_L_ RXMX\\W_UaSbPbNaL_ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX",
2608: " 25H\\LFL[M[ RLFMFM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[",
2609: " 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMR[S[ RRMSMS[",
2610: " 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMRbSb RRMSMSb",
2611: " 22H[LFL[M[ RLFMFM[ RXMWMMW RXMMX RPTV[X[ RQSX[",
2612: " 8NWRFR[S[ RRFSFS[",
2613: " 42CbGMG[H[ RGMHMH[ RHQKNMMPMRNSQS[ RHQKOMNONQORQR[S[ RSQVNXM[M]N^Q^[ RSQVOXNZN\\O]Q][^[",
2614: " 25H\\LML[M[ RLMMMM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[",
2615: " 36I\\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM RQNOONPMSMUNXOYQZTZVYWXXUXSWPVOTNQN",
2616: " 36H\\LMLbMb RLMMMMb RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX",
2617: " 36H\\WMWbXb RWMXMXb RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX",
2618: " 21KYOMO[P[ ROMPMP[ RPSQPSNUMXM RPSQQSOUNXNXM",
2619: " 50J[XPWNTMQMNNMPNRPSUUWV RVUWWWXVZ RWYTZQZNY ROZNXMX RXPWPVN RWOTNQNNO RONNPOR RNQPRUTWUXWXXWZT[Q[NZMX",
2620: " 16MXRFR[S[ RRFSFS[ ROMVMVN ROMONVN",
2621: " 25H\\LMLWMZO[R[TZWW RLMMMMWNYPZRZTYWW RWMW[X[ RWMXMX[",
2622: " 14JZLMR[ RLMMMRY RXMWMRY RXMR[",
2623: " 26F^IMN[ RIMJMNX RRMNX RRPN[ RRPV[ RRMVX R[MZMVX R[MV[",
2624: " 16I[LMW[X[ RLMMMX[ RXMWML[ RXMM[L[",
2625: " 17JZLMR[ RLMMMRY RXMWMRYNb RXMR[ObNb",
2626: " 20I[VNL[ RXMNZ RLMXM RLMLNVN RNZXZX[ RL[X[",
2651: " 33K[UUTSRRPRNSMTLVLXMZO[Q[SZTX RPRNTMVMYO[ RVRTXTZV[XZYY[V RWRUXUZV[",
2652: " 23LZLVNSPO RSFMXMZO[P[RZTXUUURVVWWXWZV RTFNXNZO[",
2653: " 22LXTSSTTTTSSRQROSNTMVMXNZP[S[VYXV RQROTNVNYP[",
2654: " 33K[UUTSRRPRNSMTLVLXMZO[Q[SZTX RPRNTMVMYO[ RZFTXTZV[XZYY[V R[FUXUZV[",
2655: " 23LXOYQXRWSUSSRRQROSNTMVMXNZP[S[VYXV RQROTNVNYP[",
2656: " 27OXRRUOWLXIXGWFUGTIKdKfLgNfOcPZQ[S[UZVYXV RTISNRRO[M`Kd",
2657: " 38K[UUTSRRPRNSMTLVLXMZO[Q[SZTX RPRNTMVMYO[ RVRPd RWRT[R`PdOfMgLfLdMaO_R]V[YY[V",
2658: " 30L[LVNSPO RSFL[ RTFM[ ROUQSSRTRVSVUUXUZV[ RTRUSUUTXTZV[XZYY[V",
2659: " 19NVSLRMSNTMSL RQROXOZQ[SZTYVV RRRPXPZQ[",
2660: " 24NVSLRMSNTMSL RQRKd RRRO[M`KdJfHgGfGdHaJ_M]Q[TYVV",
2661: " 31LZLVNSPO RSFL[ RTFM[ RURUSVSURTRRTOU ROURVSZT[ ROUQVRZT[U[XYZV",
2662: " 17NVNVPSRO RUFOXOZQ[SZTYVV RVFPXPZQ[",
2663: " 45E^EVGSIRKSKUI[ RIRJSJUH[ RKUMSORPRRSRUP[ RPRQSQUO[ RRUTSVRWRYSYUXXXZY[ RWRXSXUWXWZY[[Z\\Y^V",
2664: " 32I[IVKSMROSOUM[ RMRNSNUL[ ROUQSSRTRVSVUUXUZV[ RTRUSUUTXTZV[XZYY[V",
2665: " 29KYRRPRNSMTLVLXMZO[Q[SZTYUWUUTSRRQSQURWTXVXXWYV RPRNTMVMYO[",
2666: " 30L[LVNSPO RQLHg RRLIg ROUQSSRTRVSVUUXUZV[ RTRUSUUTXTZV[XZYY[V",
2667: " 35K[UUTSRRPRNSMTLVLXMZO[Q[SZ RPRNTMVMYO[ RVRPdPfQgSfTcT[V[YY[V RWRT[R`Pd",
2668: " 24LZLVNSPRRSRUP[ RPRQSQUO[ RRUTSVRWRVU RVRVUWWXWZV",
2669: " 22NZNVPSQQQSTUUWUYTZR[ RQSSUTWTYR[ RNZP[U[XYZV",
2670: " 20NVNVPSRO RUFOXOZQ[SZTYVV RVFPXPZQ[ RPNVN",
2671: " 27K[NRLXLZN[O[QZSXUU RORMXMZN[ RVRTXTZV[XZYY[V RWRUXUZV[",
2672: " 23KZNRMTLWLZN[O[RZTXUUUR RORNTMWMZN[ RURVVWWXWZV",
2673: " 36H]LRJTIWIZK[L[NZPX RMRKTJWJZK[ RRRPXPZR[S[UZWXXUXR RSRQXQZR[ RXRYVZW[W]V",
2674: " 42JZJVLSNRPRQSQUPXOZM[L[KZKYLYKZ RWSVTWTWSVRURSSRUQXQZR[U[XYZV RQSRU RSSQU RPXQZ RQXOZ",
2675: " 32K[NRLXLZN[O[QZSXUU RORMXMZN[ RVRPd RWRT[R`PdOfMgLfLdMaO_R]V[YY[V",
2676: " 38LYLVNSPRRRTSTVSXPZN[ RRRSSSVRXPZ RN[P\\Q^QaPdNfLgKfKdLaO^R\\VYYV RN[O\\P^PaOdNf",
2700: " 42H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF ROGMJLOLRMWOZ RNYQZSZVY RUZWWXRXOWJUG RVHSGQGNH",
2701: " 12H\\NJPISFS[ RNJNKPJRHR[S[",
2702: " 34H\\LKLJMHNGPFTFVGWHXJXLWNUQL[ RLKMKMJNHPGTGVHWJWLVNTQK[ RLZYZY[ RK[Y[",
2703: " 48H\\MFXFQO RMFMGWG RWFPO RQNSNVOXQYTYUXXVZS[P[MZLYKWLW RPOSOVPXS RTOWQXTXUWXTZ RXVVYSZPZMYLW ROZLX",
2704: " 18H\\UIU[V[ RVFV[ RVFKVZV RUILV RLUZUZV",
2705: " 53H\\MFLO RNGMN RMFWFWG RNGWG RMNPMSMVNXPYSYUXXVZS[P[MZLYKWLW RLOMOONSNVOXR RTNWPXSXUWXTZ RXVVYSZPZMYLW ROZLX",
2706: " 62H\\VGWIXIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQ RWHTGRGOH RPGNJMOMTNXQZ RMVOYRZSZVYXV RTZWXXUXTWQTO RXSVPSOROOPMS RQONQMT",
2707: " 12H\\KFYFO[ RKFKGXG RXFN[O[",
2708: " 68H\\PFMGLILKMMNNPOTPVQWRXTXWWYTZPZMYLWLTMRNQPPTOVNWMXKXIWGTFPF RNGMIMKNMPNTOVPXRYTYWXYWZT[P[MZLYKWKTLRNPPOTNVMWKWIVG RWHTGPGMH RLXOZ RUZXX",
2709: " 62H\\WPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLXMXNZ RWMVPSR RWNUQRRQRNQLN RPRMPLMLLMIPG RLKNHQGRGUHWK RSGVIWMWRVWTZ RUYRZPZMY",
2710: " 16MXRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
2711: " 24MXTZS[R[QZQYRXSXTYT\\S^Q_ RRYRZSZSYRY RS[T\\ RTZS^",
2712: " 32MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
2713: " 40MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RTZS[R[QZQYRXSXTYT\\S^Q_ RRYRZSZSYRY RS[T\\ RTZS^",
2714: " 24MXRFRTST RRFSFST RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
2715: " 58I\\LKLJMHNGQFTFWGXHYJYLXNWOUPRQ RLKMKMJNHQGTGWHXJXLWNUORP RMIPG RUGXI RXMTP RRPRTSTSP RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
2716: " 24MXTFRGQIQLRMSMTLTKSJRJQK RRKRLSLSKRK RRGQK RQIRJ",
2717: " 24MXTHSIRIQHQGRFSFTGTJSLQM RRGRHSHSGRG RSITJ RTHSL",
2718: " 71F_\\MZMXNWPUVTXSYQZMZKYJWJUKSLRQOSMTKTISGQFPFNGMIMKNNPQUWXZZ[\\[ R\\M\\NZNXO RYNXPVVUXSZQ[M[KZJYIWIUJSLQQNRMSKSIRG RSHQGPGNH ROGNINKONQQVWXYZZ\\Z\\[",
2719: " 51I\\RBR_S_ RRBSBS_ RWIYIWGTFQFNGLILKMMNNVRWSXUXWWYTZQZOYNX RWIVHTGQGNHMIMKNMVQXSYUYWXYWZT[Q[NZLXNX RXXUZ",
2720: " 8G^[BIbJb R[B\\BJb",
2721: " 24KYUBSDQGOKNPNTOYQ]S`UbVb RUBVBTDRGPKOPOTPYR]T`Vb",
2722: " 24KYNBPDRGTKUPUTTYR]P`NbOb RNBOBQDSGUKVPVTUYS]Q`Ob",
2723: " 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO",
2724: " 8F_JQ[Q[R RJQJR[R",
2725: " 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R",
2726: " 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V",
2727: " 11NWSFRGRM RSGRM RSFTGRM",
2728: " 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM",
2729: " 30KYQFOGNINKOMQNSNUMVKVIUGSFQF RQFNIOMSNVKUGQF RSFOGNKQNUMVISF",
2750: " 42H]TFQGOIMLLOKSKVLYMZO[Q[TZVXXUYRZNZKYHXGVFTF RTFRGPINLMOLSLVMYO[ RQ[SZUXWUXRYNYKXHVF",
2751: " 15H]TJO[ RVFP[ RVFSIPKNL RUIQKNL",
2752: " 42H]OJPKOLNKNJOHPGSFVFYGZIZKYMWOTQPSMUKWI[ RVFXGYIYKXMVOPS RJYKXMXRZUZWYXW RMXR[U[WZXW",
2753: " 50H]OJPKOLNKNJOHPGSFVFYGZIZKYMVOSP RVFXGYIYKXMVO RQPSPVQWRXTXWWYVZS[O[LZKYJWJVKULVKW RSPUQVRWTWWVYUZS[",
2754: " 10H]XGR[ RYFS[ RYFJUZU",
2755: " 39H]QFLP RQF[F RQGVG[F RLPMOPNSNVOWPXRXUWXUZR[O[LZKYJWJVKULVKW RSNUOVPWRWUVXTZR[",
2756: " 46H]YIXJYKZJZIYGWFTFQGOIMLLOKSKWLYMZO[R[UZWXXVXSWQVPTOQOOPMRLT RTFRGPINLMOLSLXMZ RR[TZVXWVWRVP",
2757: " 30H]NFLL R[FZIXLSRQUPWO[ RXLRRPUOWN[ RMIPFRFWI RNHPGRGWIYIZH[F",
2758: " 63H]SFPGOHNJNMOOQPTPXOYNZLZIYGVFSF RSFQGPHOJOMPOQP RTPWOXNYLYIXGVF RQPMQKSJUJXKZN[R[VZWYXWXTWRVQTP RQPNQLSKUKXLZN[ RR[UZVYWWWSVQ",
2759: " 46H]YMXOVQTRQROQNPMNMKNIPGSFVFXGYHZJZNYRXUVXTZQ[N[LZKXKWLVMWLX ROQNONKOIQGSF RXGYIYNXRWUUXSZQ[",
2760: " 6MXPYOZP[QZPY",
2761: " 8MXP[OZPYQZQ[P]N_",
2762: " 11MXSMRNSOTNSM RPYOZP[QZ",
2763: " 14MXSMRNSOTNSM RP[OZPYQZQ[P]N_",
2764: " 17MXUFTGRS RUGRS RUFVGRS RPYOZP[QZPY",
2765: " 34H]OJPKOLNKNJOHPGSFWFZG[I[KZMYNSPQQQSRTTT RWFYGZIZKYMXNVO RPYOZP[QZPY",
2766: " 8MXVFTHSJSKTLUKTJ",
2767: " 8MXUHTGUFVGVHUJSL",
2768: " 55E_\\N[O\\P]O]N\\M[MYNWPRXPZN[K[HZGXGVHTISKRPPROTMUKUITGRFPGOIOLPRQUSXUZW[Y[ZYZX RK[IZHXHVITJSPP ROLPQQTSWUYWZYZZY",
2769: " 41H]TBL_ RYBQ_ RZJYKZL[K[JZHYGVFRFOGMIMKNMONVRXT RMKOMVQWRXTXWWYVZS[O[LZKYJWJVKULVKW",
2770: " 3G]_BEb",
2771: " 20KZZBVESHQKOONTNXO]P`Qb RVESIQMPPOUOZP_Qb",
2772: " 20JYSBTDUGVLVPUUSYQ\\N_Jb RSBTEUJUOTTSWQ[N_",
2773: " 9J[TFTR ROIYO RYIOO",
2774: " 3E_IR[R",
2775: " 6E_RIR[ RIR[R",
2776: " 6E_IO[O RIU[U",
2777: " 6NWUFSM RVFSM",
2778: " 12I[PFNM RQFNM RYFWM RZFWM",
2779: " 14KZSFQGPIPKQMSNUNWMXKXIWGUFSF",
2801: " 18H\\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[",
2802: " 31G]LFL[ RMFM[ RIFYFYLXF RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[",
2803: " 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[",
2804: " 14I[NFN[ ROFO[ RKFZFZLYF RK[R[",
2805: " 31F^NFNLMTLXKZJ[ RXFX[ RYFY[ RKF\\F RG[\\[ RG[Gb RH[Gb R[[\\b R\\[\\b",
2806: " 22G\\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[",
2807: " 71CbRFR[ RSFS[ ROFVF RGGHHGIFHFGGFHFIGJIKMLONPWPYOZM[I\\G]F^F_G_H^I]H^G RNPLQKSJXIZH[ RNPMQLSKXJZI[G[FZEX RWPYQZS[X\\Z][ RWPXQYSZX[Z\\[^[_Z`X RO[V[",
2808: " 45H\\LIKFKLLINGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[O[MZLYKWKVLUMVLW RWQXTXWWYVZT[",
2809: " 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RXHLY RH[O[ RU[\\[",
2810: " 37F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RXHLY RH[O[ RU[\\[ RN@N?M?M@NBPCTCVBW@",
2811: " 43F^KFK[ RLFL[ RHFOF RLPSPUOVMWIXGYFZF[G[HZIYHZG RSPUQVSWXXZY[ RSPTQUSVXWZX[Z[[Z\\X RH[O[",
2812: " 25E^MFMLLTKXJZI[H[GZGYHXIYHZ RXFX[ RYFY[ RJF\\F RU[\\[",
2813: " 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][",
2814: " 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RLPXP RH[O[ RU[\\[",
2815: " 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF",
2816: " 21F^KFK[ RLFL[ RXFX[ RYFY[ RHF\\F RH[O[ RU[\\[",
2817: " 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[",
2818: " 32G\\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV RQFOGMILKKNKSLVMXOZQ[",
2819: " 16I\\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[",
2820: " 24H]KFRV RLFSV RZFSVQYPZN[M[LZLYMXNYMZ RIFOF RVF\\F",
2821: " 48F_RFR[ RSFS[ ROFVF RPILJJLIOIRJULWPXUXYW[U\\R\\O[LYJUIPI RPIMJKLJOJRKUMWPX RUXXWZU[R[OZLXJUI RO[V[",
2822: " 21H\\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[",
2823: " 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RH[\\[ R[[\\b R\\[\\b",
2824: " 28F]KFKQLSOTRTUSWQ RLFLQMSOT RWFW[ RXFX[ RHFOF RTF[F RT[[[",
2825: " 30BcGFG[ RHFH[ RRFR[ RSFS[ R]F][ R^F^[ RDFKF ROFVF RZFaF RD[a[",
2826: " 36BcGFG[ RHFH[ RRFR[ RSFS[ R]F][ R^F^[ RDFKF ROFVF RZFaF RD[a[ R`[ab Ra[ab",
2827: " 31F`PFP[ RQFQ[ RIFHLHFTF RQPXP[Q\\R]T]W\\Y[ZX[M[ RXPZQ[R\\T\\W[YZZX[",
2828: " 41CaHFH[ RIFI[ REFLF RIPPPSQTRUTUWTYSZP[E[ RPPRQSRTTTWSYRZP[ R[F[[ R\\F\\[ RXF_F RX[_[",
2829: " 29H]MFM[ RNFN[ RJFQF RNPUPXQYRZTZWYYXZU[J[ RUPWQXRYTYWXYWZU[",
2830: " 39H]LIKFKLLINGQFSFVGXIYKZNZSYVXXVZS[P[MZLYKWKVLUMVLW RSFUGWIXKYNYSXVWXUZS[ RPPYP",
2831: " 59CbHFH[ RIFI[ REFLF RE[L[ RVFSGQIPKOOORPVQXSZV[X[[Z]X^V_R_O^K]I[GXFVF RVFTGRIQKPOPRQVRXTZV[ RX[ZZ\\X]V^R^O]K\\IZGXF RIPOP",
2832: " 45G]WFW[ RXFX[ R[FOFLGKHJJJLKNLOOPWP ROFMGLHKJKLLNMOOP RRPPQORLYKZJZIY RPQOSMZL[J[IYIX RT[[[",
2901: " 39I]NONPMPMONNPMTMVNWOXQXXYZZ[ RWOWXXZZ[[[ RWQVRPSMTLVLXMZP[S[UZWX RPSNTMVMXNZP[",
2902: " 48H\\XFWGQINKLNKQKULXNZQ[S[VZXXYUYSXPVNSMQMNNLPKS RXFWHUIQJNLLN RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM",
2903: " 37H\\MMM[ RNMN[ RJMUMXNYPYQXSUT RUMWNXPXQWSUT RNTUTXUYWYXXZU[J[ RUTWUXWXXWZU[",
2904: " 14HZMMM[ RNMN[ RJMXMXRWM RJ[Q[",
2905: " 22F]NMNQMWLZK[ RWMW[ RXMX[ RKM[M RI[H`H[[[[`Z[",
2906: " 31H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX RWSWPVN RQMONMPLSLUMXOZQ[",
2907: " 59E`RMR[ RSMS[ ROMVM RJNIOHNIMJMKNMRNSPTUTWSXRZN[M\\M]N\\O[N RPTNUMVKZJ[ RPTNVLZK[I[HZGX RUTWUXVZZ[[ RUTWVYZZ[\\[]Z^X RO[V[",
2908: " 42I[MOLMLQMONNPMTMWNXPXQWSTT RTMVNWPWQVSTT RQTTTWUXWXXWZT[P[MZLXLWMVNWMX RTTVUWWWXVZT[",
2909: " 27G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[P[ RT[[[ RWNMZ",
2910: " 37G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[P[ RT[[[ RWNMZ ROGOFNFNGOIQJSJUIVG",
2911: " 38H\\MMM[ RNMN[ RJMQM RNTPTSSTRVNWMXMYNXOWN RPTSUTVVZW[ RPTRUSVUZV[X[YZZX RJ[Q[",
2912: " 22G]NMNQMWLZK[J[IZJYKZ RWMW[ RXMX[ RKM[M RT[[[",
2913: " 30G^LML[ RLMR[ RMMRY RXMR[ RXMX[ RYMY[ RIMMM RXM\\M RI[O[ RU[\\[",
2914: " 27G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RMTWT RI[P[ RT[[[",
2915: " 36H\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM",
2916: " 21G]LML[ RMMM[ RWMW[ RXMX[ RIM[M RI[P[ RT[[[",
2917: " 36G\\LMLb RMMMb RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIMMM RIbPb",
2918: " 28H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX RQMONMPLSLUMXOZQ[",
2919: " 16I\\RMR[ RSMS[ RMMLRLMYMYRXM RO[V[",
2920: " 22I[LMR[ RMMRY RXMR[P_NaLbKbJaK`La RJMPM RTMZM",
2921: " 52H]RFRb RSFSb ROFSF RRPQNPMNMLNKQKWLZN[P[QZRX RNMMNLQLWMZN[ RWMXNYQYWXZW[ RSPTNUMWMYNZQZWYZW[U[TZSX RObVb",
2922: " 21H\\LMW[ RMMX[ RXML[ RJMPM RTMZM RJ[P[ RT[Z[",
2923: " 23G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[[[[`Z[",
2924: " 28G]LMLTMVPWRWUVWT RMMMTNVPW RWMW[ RXMX[ RIMPM RTM[M RT[[[",
2925: " 30CbHMH[ RIMI[ RRMR[ RSMS[ R\\M\\[ R]M][ REMLM ROMVM RYM`M RE[`[",
2926: " 32CbHMH[ RIMI[ RRMR[ RSMS[ R\\M\\[ R]M][ REMLM ROMVM RYM`M RE[`[``_[",
2927: " 27H]QMQ[ RRMR[ RLMKRKMUM RRTVTYUZWZXYZV[N[ RVTXUYWYXXZV[",
2928: " 37E_JMJ[ RKMK[ RGMNM RKTOTRUSWSXRZO[G[ ROTQURWRXQZO[ RYMY[ RZMZ[ RVM]M RV[][",
2929: " 25J[OMO[ RPMP[ RLMSM RPTTTWUXWXXWZT[L[ RTTVUWWWXVZT[",
2930: " 34I\\MOLMLQMONNPMSMVNXPYSYUXXVZS[P[NZLXLWMVNWMX RSMUNWPXSXUWXUZS[ RRTXT",
2931: " 51DaIMI[ RJMJ[ RFMMM RF[M[ RVMSNQPPSPUQXSZV[X[[Z]X^U^S]P[NXMVM RVMTNRPQSQURXTZV[ RX[ZZ\\X]U]S\\PZNXM RJTPT",
2932: " 40G\\VMV[ RWMW[ RZMOMLNKPKQLSOTVT ROMMNLPLQMSOT RTTQUPVNZM[ RTTRUQVOZN[L[KZJX RS[Z[",
3001: " 36H\\RFKZ RQIW[ RRIX[ RRFY[ RMUVU RI[O[ RT[[[ RKZJ[ RKZM[ RWZU[ RWYV[ RXYZ[",
3002: " 78G]LFL[ RMGMZ RNFN[ RIFUFXGYHZJZLYNXOUP RXHYJYLXN RUFWGXIXMWOUP RNPUPXQYRZTZWYYXZU[I[ RXRYTYWXY RUPWQXSXXWZU[ RJFLG RKFLH ROFNH RPFNG RLZJ[ RLYK[ RNYO[ RNZP[",
3003: " 37G\\XIYFYLXIVGTFQFNGLIKKJNJSKVLXNZQ[T[VZXXYV RMILKKNKSLVMX RQFOGMJLNLSMWOZQ[",
3004: " 62G]LFL[ RMGMZ RNFN[ RIFSFVGXIYKZNZSYVXXVZS[I[ RWIXKYNYSXVWX RSFUGWJXNXSWWUZS[ RJFLG RKFLH ROFNH RPFNG RLZJ[ RLYK[ RNYO[ RNZP[",
3005: " 83G\\LFL[ RMGMZ RNFN[ RIFYFYL RNPTP RTLTT RI[Y[YU RJFLG RKFLH ROFNH RPFNG RTFYG RVFYH RWFYI RXFYL RTLSPTT RTNRPTR RTOPPTQ RLZJ[ RLYK[ RNYO[ RNZP[ RT[YZ RV[YY RW[YX RX[YU",
3006: " 70G[LFL[ RMGMZ RNFN[ RIFYFYL RNPTP RTLTT RI[Q[ RJFLG RKFLH ROFNH RPFNG RTFYG RVFYH RWFYI RXFYL RTLSPTT RTNRPTR RTOPPTQ RLZJ[ RLYK[ RNYO[ RNZP[",
3007: " 60G^XIYFYLXIVGTFQFNGLIKKJNJSKVLXNZQ[T[VZXZY[YS RMILKKNKSLVMX RQFOGMJLNLSMWOZQ[ RXTXY RWSWYVZ RTS\\S RUSWT RVSWU RZSYU R[SYT",
3008: " 81F^KFK[ RLGLZ RMFM[ RWFW[ RXGXZ RYFY[ RHFPF RTF\\F RMPWP RH[P[ RT[\\[ RIFKG RJFKH RNFMH ROFMG RUFWG RVFWH RZFYH R[FYG RKZI[ RKYJ[ RMYN[ RMZO[ RWZU[ RWYV[ RYYZ[ RYZ[[",
3009: " 39LXQFQ[ RRGRZ RSFS[ RNFVF RN[V[ ROFQG RPFQH RTFSH RUFSG RQZO[ RQYP[ RSYT[ RSZU[",
3010: " 45JYSFSWRZQ[ RTGTWSZ RUFUWTZQ[O[MZLXLVMUNUOVOWNXMX RMVMWNWNVMV RPFXF RQFSG RRFSH RVFUH RWFUG",
3011: " 69F\\KFK[ RLGLZ RMFM[ RXGMR RPPW[ RQPX[ RQNY[ RHFPF RUF[F RH[P[ RT[[[ RIFKG RJFKH RNFMH ROFMG RWFXG RZFXG RKZI[ RKYJ[ RMYN[ RMZO[ RWYU[ RWYZ[",
3012: " 52I[NFN[ ROGOZ RPFP[ RKFSF RK[Z[ZU RLFNG RMFNH RQFPH RRFPG RNZL[ RNYM[ RPYQ[ RPZR[ RU[ZZ RW[ZY RX[ZX RY[ZU",
3013: " 63E_JFJZ RJFQ[ RKFQX RLFRX RXFQ[ RXFX[ RYGYZ RZFZ[ RGFLF RXF]F RG[M[ RU[][ RHFJG R[FZH R\\FZG RJZH[ RJZL[ RXZV[ RXYW[ RZY[[ RZZ\\[",
3014: " 39F^KFKZ RKFY[ RLFXX RMFYX RYGY[ RHFMF RVF\\F RH[N[ RIFKG RWFYG R[FYG RKZI[ RKZM[",
3015: " 54G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RMILKKNKSLVMX RWXXVYSYNXKWI RQFOGMJLNLSMWOZQ[ RS[UZWWXSXNWJUGSF",
3016: " 59G]LFL[ RMGMZ RNFN[ RIFUFXGYHZJZMYOXPUQNQ RXHYJYMXO RUFWGXIXNWPUQ RI[Q[ RJFLG RKFLH ROFNH RPFNG RLZJ[ RLYK[ RNYO[ RNZP[",
3017: " 77G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RMILKKNKSLVMX RWXXVYSYNXKWI RQFOGMJLNLSMWOZQ[ RS[UZWWXSXNWJUGSF RNXOVQURUTVUXV^W`Y`Z^Z\\ RV\\W^X_Y_ RUXW]X^Y^Z]",
3018: " 80G]LFL[ RMGMZ RNFN[ RIFUFXGYHZJZLYNXOUPNP RXHYJYLXN RUFWGXIXMWOUP RRPTQUSWYX[Z[[Y[W RWWXYYZZZ RTQURXXYYZY[X RI[Q[ RJFLG RKFLH ROFNH RPFNG RLZJ[ RLYK[ RNYO[ RNZP[",
3019: " 44H\\XIYFYLXIVGSFPFMGKIKLLNOPURWSXUXXWZ RLLMNOOUQWRXT RMGLILKMMONUPXRYTYWXYWZT[Q[NZLXKUK[LX",
3020: " 57H\\JFJL RQFQ[ RRGRZ RSFS[ RZFZL RJFZF RN[V[ RKFJL RLFJI RMFJH ROFJG RUFZG RWFZH RXFZI RYFZL RQZO[ RQYP[ RSYT[ RSZU[",
3021: " 45F^KFKULXNZQ[S[VZXXYUYG RLGLVMX RMFMVNYOZQ[ RHFPF RVF\\F RIFKG RJFKH RNFMH ROFMG RWFYG R[FYG",
3022: " 34H\\KFR[ RLFRXR[ RMFSX RYGR[ RIFPF RUF[F RJFLH RNFMH ROFMG RWFYG RZFYG",
3023: " 55F^JFN[ RKFNVN[ RLFOV RRFOVN[ RRFV[ RSFVVV[ RTFWV RZGWVV[ RGFOF RRFTF RWF]F RHFKG RIFKH RMFLH RNFLG RXFZG R\\FZG",
3024: " 54H\\KFW[ RLFX[ RMFY[ RXGLZ RIFPF RUF[F RI[O[ RT[[[ RJFMH RNFMH ROFMG RVFXG RZFXG RLZJ[ RLZN[ RWZU[ RWYV[ RWYZ[",
3025: " 48G]JFQQQ[ RKFRQRZ RLFSQS[ RYGSQ RHFOF RVF\\F RN[V[ RIFKG RNFLG RWFYG R[FYG RQZO[ RQYP[ RSYT[ RSZU[",
3026: " 41H\\YFKFKL RWFK[ RXFL[ RYFM[ RK[Y[YU RLFKL RMFKI RNFKH RPFKG RT[YZ RV[YY RW[YX RX[YU",
3051: " 38H\\UFIZ RSJT[ RTHUZ RUFUHVYV[ RLUTU RF[L[ RQ[X[ RIZG[ RIZK[ RTZR[ RTYS[ RVYW[",
3052: " 78F^OFI[ RPFJ[ RQFK[ RLFWFZG[I[KZNYOVP RYGZIZKYNXO RWFXGYIYKXNVP RNPVPXQYSYUXXVZR[F[ RWQXSXUWXUZ RVPWRWUVXTZR[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[",
3053: " 41H]ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[S[UZWXXV RQHOJNLMOLSLWMY RTFRGPJOLNOMSMXNZP[",
3054: " 63F]OFI[ RPFJ[ RQFK[ RLFUFXGYHZKZOYSWWUYSZO[F[ RWGXHYKYOXSVWTY RUFWHXKXOWSUWRZO[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[",
3055: " 80F]OFI[ RPFJ[ RQFK[ RULST RLF[FZL RNPTP RF[U[WV RMFPG RNFOH RRFPH RSFPG RWFZG RXFZH RYFZI RZFZL RULSPST RTNRPSR RTOQPSQ RJZG[ RJYH[ RKYL[ RJZM[ RP[UZ RR[UY RUYWV",
3056: " 70F\\OFI[ RPFJ[ RQFK[ RULST RLF[FZL RNPTP RF[N[ RMFPG RNFOH RRFPH RSFPG RWFZG RXFZH RYFZI RZFZL RULSPST RTNRPSR RTOQPSQ RJZG[ RJYH[ RKYL[ RJZM[",
3057: " 65H^ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[R[UZWXYT RQHOJNLMOLSLWMY RVXWWXT RTFRGPJOLNOMSMXNZP[ RR[TZVWWT RTT\\T RUTWU RVTWW RZTXV R[TXU",
3058: " 81E_NFH[ ROFI[ RPFJ[ RZFT[ R[FU[ R\\FV[ RKFSF RWF_F RLPXP RE[M[ RQ[Y[ RLFOG RMFNH RQFOH RRFOG RXF[G RYFZH R]F[H R^F[G RIZF[ RIYG[ RJYK[ RIZL[ RUZR[ RUYS[ RVYW[ RUZX[",
3059: " 39KYTFN[ RUFO[ RVFP[ RQFYF RK[S[ RRFUG RSFTH RWFUH RXFUG ROZL[ ROYM[ RPYQ[ ROZR[",
3060: " 47I\\WFRWQYO[ RXFTSSVRX RYFUSSXQZO[M[KZJXJVKULUMVMWLXKX RKVKWLWLVKV RTF\\F RUFXG RVFWH RZFXH R[FXG",
3061: " 72F]OFI[ RPFJ[ RQFK[ R\\GMR RQOU[ RROV[ RSNWZ RLFTF RYF_F RF[N[ RR[Y[ RMFPG RNFOH RRFPH RSFPG RZF\\G R^F\\G RJZG[ RJYH[ RKYL[ RJZM[ RUZS[ RUYT[ RVYX[",
3062: " 49H\\QFK[ RRFL[ RSFM[ RNFVF RH[W[YU ROFRG RPFQH RTFRH RUFRG RLZI[ RLYJ[ RMYN[ RLZO[ RR[WZ RT[XX RV[YU",
3063: " 68D`MFGZ RMGNYN[ RNFOY ROFPX R[FPXN[ R[FU[ R\\FV[ R]FW[ RJFOF R[F`F RD[J[ RR[Z[ RKFMG RLFMH R^F\\H R_F\\G RGZE[ RGZI[ RVZS[ RVYT[ RWYX[ RVZY[",
3064: " 43F_OFIZ ROFV[ RPFVX RQFWX R\\GWXV[ RLFQF RYF_F RF[L[ RMFPG RNFPH RZF\\G R^F\\G RIZG[ RIZK[",
3065: " 56G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF ROIMLLOKSKWLY RUXWUXRYNYJXH RSFQGOJNLMOLSLXMZN[ RQ[SZUWVUWRXNXIWGVF",
3066: " 60F]OFI[ RPFJ[ RQFK[ RLFXF[G\\I\\K[NYPUQMQ RZG[I[KZNXP RXFYGZIZKYNWPUQ RF[N[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[",
3067: " 78G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF ROIMLLOKSKWLY RUXWUXRYNYJXH RSFQGOJNLMOLSLXMZN[ RQ[SZUWVUWRXNXIWGVF RLXMVOUPURVSXT]U^V^W] RT^U_V_ RSXS_T`V`W]W\\",
3068: " 78F^OFI[ RPFJ[ RQFK[ RLFWFZG[I[KZNYOVPNP RYGZIZKYNXO RWFXGYIYKXNVP RRPTQURWXXYYYZX RWYXZYZ RURVZW[Y[ZXZW RF[N[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[",
3069: " 44G^ZH[H\\F[L[JZHYGVFRFOGMIMLNNPPVSWUWXVZ RNLONVRWT ROGNINKOMUPWRXTXWWYVZS[O[LZKYJWJUI[JYKY",
3070: " 54G]TFN[ RUFO[ RVFP[ RMFKL R]F\\L RMF]F RK[S[ RNFKL RPFLI RRFMG RYF\\G RZF\\H R[F\\I R\\F\\L ROZL[ ROYM[ RPYQ[ ROZR[",
3071: " 48F_NFKQJUJXKZN[R[UZWXXU\\G ROFLQKUKYLZ RPFMQLULYN[ RKFSF RYF_F RLFOG RMFNH RQFOH RRFOG RZF\\G R^F\\G",
3072: " 35H\\NFNHOYO[ ROGPX RPFQW R[GO[ RLFSF RXF^F RMFNH RQFPH RRFOG RYF[G R]F[G",
3073: " 57E_MFMHKYK[ RNGLX ROFMW RUFMWK[ RUFUHSYS[ RVGTX RWFUW R]GUWS[ RJFRF RUFWF RZF`F RKFNG RLFMH RPFNI RQFNG R[F]G R_F]G",
3074: " 54G]NFT[ ROFU[ RPFV[ R[GIZ RLFSF RXF^F RF[L[ RQ[X[ RMFOH RQFPH RRFPG RYF[G R]F[G RIZG[ RIZK[ RTZR[ RTYS[ RUYW[",
3075: " 51G]MFQPN[ RNFRPO[ ROFSPP[ R\\GSP RKFRF RYF_F RK[S[ RLFNG RPFOH RQFNG RZF\\G R^F\\G ROZL[ ROYM[ RPYQ[ ROZR[",
3076: " 35G]ZFH[ R[FI[ R\\FJ[ R\\FNFLL RH[V[XU ROFLL RPFMI RRFNG RR[VZ RT[WX RU[XU",
3101: " 54I]NPNOOOOQMQMONNPMTMVNWOXQXXYZZ[ RVOWQWXXZ RTMUNVPVXWZZ[[[ RVRUSPTMULWLXMZP[S[UZVX RNUMWMXNZ RUSQTOUNWNXOZP[",
3102: " 47G\\LFL[MZOZ RMGMY RIFNFNZ RNPONQMSMVNXPYSYUXXVZS[Q[OZNX RWPXRXVWX RSMUNVOWRWVVYUZS[ RJFLG RKFLH",
3103: " 34H[WQWPVPVRXRXPVNTMQMNNLPKSKULXNZQ[S[VZXX RMPLRLVMX RQMONNOMRMVNYOZQ[",
3104: " 52H]VFV[[[ RWGWZ RSFXFX[ RVPUNSMQMNNLPKSKULXNZQ[S[UZVX RMPLRLVMX RQMONNOMRMVNYOZQ[ RTFVG RUFVH RXYY[ RXZZ[",
3105: " 41H[MSXSXQWOVNSMQMNNLPKSKULXNZQ[S[VZXX RWRWQVO RMPLRLVMX RVSVPUNSM RQMONNOMRMVNYOZQ[",
3106: " 40KYWHWGVGVIXIXGWFTFRGQHPKP[ RRHQKQZ RTFSGRIR[ RMMVM RM[U[ RPZN[ RPYO[ RRYS[ RRZT[",
3107: " 89I\\XNYOZNYMXMVNUO RQMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM ROONQNSOU RUUVSVQUO RQMPNOPOTPVQW RSWTVUTUPTNSM RNUMVLXLYM[N\\Q]U]X^Y_ RN[Q\\U\\X] RLYMZP[U[X\\Y^Y_XaUbObLaK_K^L\\O[ RObMaL_L^M\\O[",
3108: " 65G^LFL[ RMGMZ RIFNFN[ RNQOOPNRMUMWNXOYRY[ RWOXRXZ RUMVNWQW[ RI[Q[ RT[\\[ RJFLG RKFLH RLZJ[ RLYK[ RNYO[ RNZP[ RWZU[ RWYV[ RYYZ[ RYZ[[",
3109: " 43LXQFQHSHSFQF RRFRH RQGSG RQMQ[ RRNRZ RNMSMS[ RN[V[ ROMQN RPMQO RQZO[ RQYP[ RSYT[ RSZU[",
3110: " 41KXRFRHTHTFRF RSFSH RRGTG RRMR^QaPb RSNS]R` ROMTMT]S`RaPbMbLaL_N_NaMaM` RPMRN RQMRO",
3111: " 61G]LFL[ RMGMZ RIFNFN[ RWNNW RRSY[ RRTX[ RQTW[ RTM[M RI[Q[ RT[[[ RJFLG RKFLH RUMWN RZMWN RLZJ[ RLYK[ RNYO[ RNZP[ RWYU[ RVYZ[",
3112: " 31LXQFQ[ RRGRZ RNFSFS[ RN[V[ ROFQG RPFQH RQZO[ RQYP[ RSYT[ RSZU[",
3113: " 99AcFMF[ RGNGZ RCMHMH[ RHQIOJNLMOMQNROSRS[ RQORRRZ ROMPNQQQ[ RSQTOUNWMZM\\N]O^R^[ R\\O]R]Z RZM[N\\Q\\[ RC[K[ RN[V[ RY[a[ RDMFN REMFO RFZD[ RFYE[ RHYI[ RHZJ[ RQZO[ RQYP[ RSYT[ RSZU[ R\\ZZ[ R\\Y[[ R^Y_[ R^Z`[",
3114: " 65G^LML[ RMNMZ RIMNMN[ RNQOOPNRMUMWNXOYRY[ RWOXRXZ RUMVNWQW[ RI[Q[ RT[\\[ RJMLN RKMLO RLZJ[ RLYK[ RNYO[ RNZP[ RWZU[ RWYV[ RYYZ[ RYZ[[",
3115: " 46H\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RMPLRLVMX RWXXVXRWP RQMONNOMRMVNYOZQ[ RS[UZVYWVWRVOUNSM",
3116: " 60G\\LMLb RMNMa RIMNMNb RNPONQMSMVNXPYSYUXXVZS[Q[OZNX RWPXRXVWX RSMUNVOWRWVVYUZS[ RIbQb RJMLN RKMLO RLaJb RL`Kb RN`Ob RNaPb",
3117: " 55H\\VNVb RWOWa RUNWNXMXb RVPUNSMQMNNLPKSKULXNZQ[S[UZVX RMPLRLVMX RQMONNOMRMVNYOZQ[ RSb[b RVaTb RV`Ub RX`Yb RXaZb",
3118: " 43IZNMN[ RONOZ RKMPMP[ RWOWNVNVPXPXNWMUMSNQPPS RK[S[ RLMNN RMMNO RNZL[ RNYM[ RPYQ[ RPZR[",
3119: " 43J[WOXMXQWOVNTMPMNNMOMQNSPTUUWVXY RNNMQ RNRPSUTWU RXVWZ RMONQPRUSWTXVXYWZU[Q[OZNYMWM[NY",
3120: " 22KZPHPVQYRZT[V[XZYX RQHQWRY RPHRFRWSZT[ RMMVM",
3121: " 43G^LMLVMYNZP[S[UZVYWW RMNMWNY RIMNMNWOZP[ RWMW[\\[ RXNXZ RTMYMY[ RJMLN RKMLO RYYZ[ RYZ[[",
3122: " 31I[LMR[ RMMRY RNMSY RXNSYR[ RJMQM RTMZM RKMNO RPMNN RVMXN RYMXN",
3123: " 45F^JMN[ RKMNX RLMOX RRMOXN[ RRMV[ RSMVX RRMTMWX RZNWXV[ RGMOM RWM]M RHMKN RNMLN RXMZN R\\MZN",
3124: " 48H\\LMV[ RMMW[ RNMX[ RWNMZ RJMQM RTMZM RJ[P[ RS[Z[ RKMMN RPMNN RUMWN RYMWN RMZK[ RMZO[ RVZT[ RWZY[",
3125: " 40H[LMR[ RMMRY RNMSY RXNSYP_NaLbJbIaI_K_KaJaJ` RJMQM RTMZM RKMNO RPMNN RVMXN RYMXN",
3126: " 41I[VML[ RWMM[ RXMN[ RXMLMLQ RL[X[XW RMMLQ RNMLP ROMLO RQMLN RS[XZ RU[XY RV[XX RW[XW",
3151: " 50G]WMUTUXVZW[Y[[Y\\W RXMVTVZ RWMYMWTVX RUTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT RNNLQKTKWLY RPMNOMQLTLWMZN[",
3152: " 52I\\PFNMMSMWNYOZQ[S[VZXWYTYRXOWNUMSMQNPOOQNT RQFOMNQNWOZ RVYWWXTXQWO RMFRFPMNT RS[UYVWWTWQVNUM RNFQG ROFPH",
3153: " 34I[WQWPVPVRXRXPWNUMRMONMQLTLVMYNZP[R[UZWW ROONQMTMWNY RRMPOOQNTNWOZP[",
3154: " 58G]YFVQUUUXVZW[Y[[Y\\W RZFWQVUVZ RVF[FWTVX RUTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT RMOLQKTKWLY RPMNOMQLTLWMZN[ RWFZG RXFYH",
3155: " 33I[MVQUTTWRXPWNUMRMONMQLTLVMYNZP[R[UZWX ROONQMTMWNY RRMPOOQNTNWOZP[",
3156: " 45JZZHZGYGYI[I[GZFXFVGTISKRNQRO[N^M`Kb RTJSMRRP[O^ RXFVHUJTMSRQZP]O_MaKbIbHaH_J_JaIaI` RNMYM",
3157: " 57H]XMT[S^QaOb RYMU[S_ RXMZMV[T_RaObLbJaI`I^K^K`J`J_ RVTVQUNSMQMNNLQKTKVLYMZO[Q[SZTYUWVT RNOMQLTLWMY RQMOONQMTMWNZO[",
3158: " 41G]OFI[K[ RPFJ[ RLFQFK[ RMTOPQNSMUMWNXPXSVX RWNWRVVVZ RWPUUUXVZW[Y[[Y\\W RMFPG RNFOH",
3159: " 35KXSFSHUHUFSF RTFTH RSGUG RLQMOOMQMRNSPSSQX RRNRRQVQZ RRPPUPXQZR[T[VYWW",
3160: " 45KXUFUHWHWFUF RVFVH RUGWG RMQNOPMRMSNTPTSRZQ]P_NaLbJbIaI_K_KaJaJ` RSNSSQZP]O_ RSPRTP[O^N`Lb",
3161: " 49G]OFI[K[ RPFJ[ RLFQFK[ RYOYNXNXPZPZNYMWMUNQROS RMSOSQTRUTYUZWZ RQUSYTZ ROSPTRZS[U[WZYW RMFPG RNFOH",
3162: " 26LXTFQQPUPXQZR[T[VYWW RUFRQQUQZ RQFVFRTQX RRFUG RSFTH",
3163: " 61@cAQBODMFMGNHPHSF[ RGNGSE[ RGPFTD[F[ RHSJPLNNMPMRNSPSSQ[ RRNRSP[ RRPQTO[Q[ RSSUPWNYM[M]N^P^S\\X R]N]R\\V\\Z R]P[U[X\\Z][_[aYbW",
3164: " 42F^GQHOJMLMMNNPNSL[ RMNMSK[ RMPLTJ[L[ RNSPPRNTMVMXNYPYSWX RXNXRWVWZ RXPVUVXWZX[Z[\\Y]W",
3165: " 46H\\QMNNLQKTKVLYMZP[S[VZXWYTYRXOWNTMQM RNOMQLTLWMY RVYWWXTXQWO RQMOONQMTMWNZP[ RS[UYVWWTWQVNTM",
3166: " 66G]HQIOKMMMNNOPOSNWKb RNNNSMWJb RNPMTIb ROTPQQORNTMVMXNYOZRZTYWWZT[R[PZOWOT RXOYQYTXWWY RVMWNXQXTWWVYT[ RFbNb RJaGb RJ`Hb RK`Lb RJaMb",
3167: " 57G\\WMQb RXMRb RWMYMSb RUTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT RMOLQKTKWLY RPMNOMQLTLWMZN[ RNbVb RRaOb RR`Pb RS`Tb RRaUb",
3168: " 30I[JQKOMMOMPNQPQTO[ RPNPTN[ RPPOTM[O[ RYOYNXNXPZPZNYMWMUNSPQT",
3169: " 47J[XPXOWOWQYQYOXNUMRMONNONQOSQTTUVVWX RONNQ RORQSTTVU RWVVZ RNOOQQRTSVTWVWXVZS[P[MZLYLWNWNYMYMX",
3170: " 23KYTFQQPUPXQZR[T[VYWW RUFRQQUQZ RTFVFRTQX RNMXM",
3171: " 42F^GQHOJMLMMNNPNSLX RMNMRLVLZ RMPKUKXLZN[P[RZTXVU RXMVUVXWZX[Z[\\Y]W RYMWUWZ RXMZMXTWX",
3172: " 29H\\IQJOLMNMONPPPSNX RONORNVNZ ROPMUMXNZP[R[TZVXXUYQYMXMXNYP",
3173: " 48CaDQEOGMIMJNKPKSIX RJNJRIVIZ RJPHUHXIZK[M[OZQXRU RTMRURXSZU[W[YZ[X]U^Q^M]M]N^P RUMSUSZ RTMVMTTSX",
3174: " 51G]JQLNNMPMRNSPSR RPMQNQRPVOXMZK[I[HZHXJXJZIZIY RRORRQVQY RZOZNYNYP[P[NZMXMVNTPSRRVRZS[ RPVPXQZS[U[WZYW",
3175: " 49G]HQIOKMMMNNOPOSMX RNNNRMVMZ RNPLULXMZO[Q[SZUXWT RYMU[T^RaPb RZMV[T_ RYM[MW[U_SaPbMbKaJ`J^L^L`K`K_",
3176: " 39H\\YMXOVQNWLYK[ RXOOOMPLR RVORNONNO RVORMOMMOLR RLYUYWXXV RNYRZUZVY RNYR[U[WYXV",
3200: " 50H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RNHMJLNLSMWNY RVYWWXSXNWJVH RQFOGNIMNMSNXOZQ[ RS[UZVXWSWNVIUGSF",
3201: " 28H\\QHQ[ RRHRZ RSFS[ RSFPINJ RM[W[ RQZO[ RQYP[ RSYT[ RSZU[",
3202: " 62H\\LJLKMKMJLJ RLIMINJNKMLLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RWHXJXLWN RTFVGWJWLVNTPPR RKYLXNXSYWYYX RNXSZWZXY RNXS[W[XZYXYV",
3203: " 76H\\LJLKMKMJLJ RLIMINJNKMLLLKKKJLHMGPFTFWGXIXLWNTO RVGWIWLVN RSFUGVIVLUNSO RQOTOVPXRYTYWXYWZT[P[MZLYKWKVLUMUNVNWMXLX RWRXTXWWY RSOUPVQWTWWVZT[ RLVLWMWMVLV",
3204: " 28H\\SIS[ RTHTZ RUFU[ RUFJUZU RP[X[ RSZQ[ RSYR[ RUYV[ RUZW[",
3205: " 55H\\MFKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMUNVNWMXLX RWPXRXVWX RSMUNVOWRWVVYUZS[ RLVLWMWMVLV RMFWF RMGUG RMHQHUGWF",
3206: " 69H\\VIVJWJWIVI RWHVHUIUJVKWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNQNOONPMR RNIMKLOLUMXNY RWXXVXSWQ RRFPGOHNJMNMUNXOZQ[ RS[UZVYWVWSVPUOSN",
3207: " 43H\\KFKL RYFYIXLTQSSRWR[ RSRRTQWQ[ RXLSQQTPWP[R[ RKJLHNFPFUIWIXHYF RMHNGPGRH RKJLINHPHUI",
3208: " 79H\\PFMGLILLMNPOTOWNXLXIWGTFPF RNGMIMLNN RVNWLWIVG RPFOGNINLONPO RTOUNVLVIUGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RMQLSLWMY RWYXWXSWQ RPONPMSMWNZP[ RT[VZWWWSVPTO",
3209: " 69H\\MWMXNXNWMW RWOVQURSSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNVOWOXNYMY RMPLNLKMI RVHWIXLXRWVVX RQSORNQMNMKNHOGQF RSFUGVIWLWSVWUYTZR[",
3210: " 16MXRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
3211: " 24MXTZS[R[QZQYRXSXTYT\\S^Q_ RRYRZSZSYRY RS[T\\ RTZS^",
3212: " 32MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
3213: " 40MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RTZS[R[QZQYRXSXTYT\\S^Q_ RRYRZSZSYRY RS[T\\ RTZS^",
3214: " 34MXRFQGQIRQ RRFRTST RRFSFST RSFTGTISQ RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
3215: " 52I\\MKMJNJNLLLLJMHNGPFTFWGXHYJYLXNWOSQ RWHXIXMWN RTFVGWIWMVOUP RRQRTSTSQRQ RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
3216: " 24MXTFRGQIQLRMSMTLTKSJRJQK RRKRLSLSKRK RRGQK RQIRJ",
3217: " 24MXTHSIRIQHQGRFSFTGTJSLQM RRGRHSHSGRG RSITJ RTHSL",
3218: " 74E_[O[NZNZP\\P\\N[MZMYNXPVUTXRZP[L[JZIXIUJSPORMSKSIRGPFNGMIMLNOPRTWWZY[[[\\Y\\X RKZJXJUKSLR RRMSI RSKRG RNGMK RNNPQTVWYYZ RN[LZKXKULSPO RMINMQQUVXYZZ[Z\\Y",
3219: " 56H\\PBP_ RTBT_ RXKXJWJWLYLYJXHWGTFPFMGKIKLLNOPURWSXUXXWZ RLLMNOOUQWRXT RMGLILKMMONUPXRYTYWXYWZT[P[MZLYKWKUMUMWLWLV",
3220: " 8G^[BIbJb R[B\\BJb",
3221: " 27KYUBSDQGOKNPNTOYQ]S`Ub RQHPKOOOUPYQ\\ RSDRFQIPOPUQ[R^S`",
3222: " 27KYOBQDSGUKVPVTUYS]Q`Ob RSHTKUOUUTYS\\ RQDRFSITOTUS[R^Q`",
3223: " 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO",
3224: " 8F_JQ[Q[R RJQJR[R",
3225: " 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R",
3226: " 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V",
3227: " 11NWSFRGRM RSGRM RSFTGRM",
3228: " 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM",
3229: " 30KYQFOGNINKOMQNSNUMVKVIUGSFQF RQFNIOMSNVKUGQF RSFOGNKQNUMVISF",
3250: " 58H]TFQGOIMLLOKSKVLYMZO[Q[TZVXXUYRZNZKYHXGVFTF RQHOJNLMOLSLWMY RTYVWWUXRYNYJXH RTFRGPJOLNOMSMXNZO[ RQ[SZUWVUWRXNXIWGVF",
3251: " 20H]TJO[Q[ RWFUJP[ RWFQ[ RWFTIQKOL RTJRKOL",
3252: " 52H]OKOJPJPLNLNJOHPGSFVFYGZIZKYMWOMUKWI[ RXGYIYKXMVOSQ RVFWGXIXKWMUOMU RJYKXMXRYWYXX RMXRZWZ RMXR[U[WZXXXW",
3253: " 64H]OKOJPJPLNLNJOHPGSFVFYGZIZKYMXNVOSP RXGYIYKXMWN RVFWGXIXKWMUOSP RQPSPVQWRXTXWWYUZR[O[LZKYJWJULULWKWKV RVRWTWWVY RSPUQVSVWUYTZR[",
3254: " 15H]WJR[T[ RZFXJS[ RZFT[ RZFJUZU",
3255: " 49H]QFLP RQF[F RQGYG RPHUHYG[F RLPMOPNSNVOWPXRXUWXUZQ[N[LZKYJWJULULWKWKV RVPWRWUVXTZ RSNUOVQVUUXSZQ[",
3256: " 61H]YJYIXIXKZKZIYGWFTFQGOIMLLOKSKVLYMZO[R[UZWXXVXSWQVPTOQOOPNQMS RPINLMOLSLWMY RVXWVWSVQ RTFRGPJOLNOMSMXNZO[ RR[TZUYVVVRUPTO",
3257: " 39H]NFLL R[FZIXLTQRTQWP[ RRSPWO[ RXLRRPUOWN[P[ RMIPFRFWI ROGRGWI RMIOHRHWIYIZH[F",
3258: "104H]SFPGOHNJNMOOQPTPWOYNZLZIYGWFSF RUFPG RPHOJONPO ROORP RSPWO RXNYLYIXG RYGUF RSFQHPJPNQP RTPVOWNXLXHWF RQPMQKSJUJXKZN[R[VZWYXWXTWRVQTP RRPMQ RNQLSKUKXLZ RKZP[VZ RVYWWWTVR RVQSP RQPOQMSLULXMZN[ RR[TZUYVWVSUQTP",
3259: " 61H]XNWPVQTRQROQNPMNMKNIPGSFVFXGYHZKZNYRXUVXTZQ[N[LZKXKVMVMXLXLW ROPNNNKOI RXHYJYNXRWUUX RQRPQOOOKPHQGSF RVFWGXIXNWRVUUWSZQ[",
3260: " 16MXPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY",
3261: " 22MXQ[P[OZOYPXQXRYR[Q]P^N_ RPYPZQZQYPY RQ[Q\\P^",
3262: " 32MXSMRNROSPTPUOUNTMSM RSNSOTOTNSN RPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY",
3263: " 38MXSMRNROSPTPUOUNTMSM RSNSOTOTNSN RQ[P[OZOYPXQXRYR[Q]P^N_ RPYPZQZQYPY RQ[Q\\P^",
3264: " 34MXVFUFTGRT RVGUGRT RVGVHRT RVFWGWHRT RPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY",
3265: " 59H]OKOJPJPLNLNJOHPGSFWFZG[I[KZMYNWOSPQQQSSTTT RUFZG RYGZIZKYMXNVO RWFXGYIYKXMWNSPRQRSST RPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY",
3266: " 22MXWFUGTHSJSLTMUMVLVKUJTJ RUGTITJ RTKTLULUKTK",
3267: " 22MXVIUITHTGUFVFWGWIVKULSM RUGUHVHVGUG RVIVJUL",
3268: " 72E_\\O\\N[N[P]P]N\\M[MYNWPRXPZN[K[HZGXGVHTISKRPPROTMUKUITGRFPGOIOLPRQURWTZV[X[YYYX RL[HZ RIZHXHVITJSLR RPPQSTYVZ RK[JZIXIVJTKSMRRO ROLPOQRSVUYWZXZYY",
3269: " 52H]TBL_ RYBQ_ RZKZJYJYL[L[JZHYGVFRFOGMIMLNNPPVSWUWXVZ RNLONVRWT ROGNINKOMUPWRXTXWWYVZS[O[LZKYJWJULULWKWKV",
3270: " 8G^_BEbFb R_B`BFb",
3271: " 32JZZBXCUERHPKNOMSMXN\\O_Qb RSHQKOONTN\\ RZBWDTGRJQLPOOSN\\ RNTO]P`Qb",
3272: " 32JZSBUEVHWLWQVUTYR\\O_LaJb RVHVPUUSYQ\\ RSBTDUGVP RVHUQTUSXRZP]M`Jb",
3273: " 39J[TFSGUQTR RTFTR RTFUGSQTR ROIPIXOYO ROIYO ROIOJYNYO RYIXIPOOO RYIOO RYIYJONOO",
3274: " 8F_JQ[Q[R RJQJR[R",
3275: " 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R",
3276: " 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V",
3277: " 11MWUFTGRM RUGRM RUFVGRM",
3278: " 22H\\PFOGMM RPGMM RPFQGMM RZFYGWM RZGWM RZF[GWM",
3279: " 30KZSFQGPIPKQMSNUNWMXKXIWGUFSF RSFPIQMUNXKWGSF RUFQGPKSNWMXIUF",
3301: " 62F^IHJIIJHIIGKFMFOGPHQKQOPRNTLUIV ROHPKPPOR RMFNGOJOPNSLU RLVOY RKVOZ RIVN[UV R\\G[H\\H\\G[FYFWGVHUJUYW[[W RWHVJVXXZ RYFXGWJWWYY",
3302: "101E_GQGRHSJSLRLOKMIJIHKF RKOIK RJSKRKPIMHKHIIGKFNFPGQHRJRRQUOW RPHQJQT RNFOGPJPUOW RRISGUFWFYGZH[J\\K RYHZJ RWFXGYJZK\\K R\\KRP RYM[O\\R\\U[XYZV[S[PZJWIWHX RXNYN[P RVNYO[Q\\S RTZRZLWKW RZYXZUZRYNWKVIVHXHZI[JZIY",
3303: " 79F^RHPFNFLGJJINIRJVLYNZQ[T[WZYY[W RLHKJJMJRKVMYPZ RNFMGLIKMKQLUMWOYRZUZXY[W RUFRHQIPKPLQNTPURUT RQKQLUPUQ RQIQJRLUNVPVRUTSURUPTOR RUFVGXHZH RUGVHWH RTGVIXIZH[G",
3304: " 79E_HLHKIIKGNFRFUGWHYJ[M\\Q\\U[XYZV[S[PZJWIWHX RKHMGRGUHWIYK[N RTZRZLWKW RHKJIMHRHUIWJYL[O\\R RZYXZUZRYNWKVIVHXHZI[JZIY RPHMKLMLONSNU RMNMONQNR RMKMMOQOSNUMVKVJUJT",
3305: " 95F^RHPFNFLGJJINIRJVLYNZQ[T[WZYY[W RLHKJJMJRKVMYPZ RNFMGLIKMKQLUMWOYRZUZXY[W RUFRHQIPKPLQNTPURUT RQKQLUPUQ RQIQJRLUNVPVRUTSURUPTOR RUFVGXHZH RUGVHWH RTGVIXIZH[G RUNYK RYKZL\\L RXLYMZM RWMXNZN\\L",
3306: " 94F^MNKMJKJIKGNFQFTGXI RKHMGRGUH RJKKIMHRHXIZI[H[GZFYF RSHRIQKQMROVSWVWYV\\U]S^ RTPWSXVXYW[ RQMSOVQXSYVYYX[V]S^O^L]K\\JZJWLTLRKQ RL\\K[KWLU RO^M]L[LWMTMRLQJQIRIS RUPYL RYLZM\\M RXMYNZN RWNXOZO\\M",
3307: " 99E_UJTHSGQFNFKGIJHNHRIUJWLYNZQ[T[WZYY[W\\T\\Q[NYL RKHJJIMIRJUKW RZW[U[QZNYM RNFLGKIJMJRKVLXNZ RWZYXZUZQYOWM RUFRHPJOLOMPOSQTSTU RPLPMTQTR RPJPKQMTOUQUSTURVQVOUNS RTOYLZJ R\\FZJ RYG]I R\\F[GYGZHZJ[I]I\\H\\F",
3308: " 92F_RFPGNIMKMMNOPQQSQU RNLNMQQQR RNINKOMQORQRSQUPVNWLWJVIUHSHQIPJQIR RRFTHVHXG RQGSH RPGQHSIUIXG RRPYK RYK[N\\Q\\T[WYYVZR[ RXLZN[Q[UZW RVMWMYOZRZVYXXYVZ RVZTZRYPYNZM\\N^P_R_T^ RSZQZ RR[PZNZ",
3309: " 83F_PPNPLOKNJLJJKHLGOFQFTGWJYK RLHNGRGTHUI RJJKIMHQHTIVJYK[K\\J\\H[GYG RJXKYJZIYIWJVLVNWPYR\\T^ RNXOYQ\\R] RLVMWNYP\\Q]S^V^X]Y\\ZZZWYUWRVPVO RYXYWVRVQ RX]Y[YYXWVTURUPWNYNZOZP",
3310: " 83F_PPNPLOKNJLJJKHLGOFQFTGWJYK RLHNGRGTHUI RJJKIMHQHTIVJYK[K\\J\\H[GYG RJXKYJZIYIWJVLVNWPYR\\T^ RNXOYQ\\R] RLVMWNYP\\Q]S^V^X]Y\\ZZZWYUWRVPVO RYXYWVRVQ RX]Y[YYXWVTURUPWNYNZOZP",
3311: " 81E_[KZIXGUFRFOGMILKLNMQPWPYN[ RMNMOPUPV RNHMJMMNOPSQVQXPZN[L[JZ RHVJZ RGYKW RHVHXGYIYJZJXKWIWHV RNONMOKQJTJVKXMYM RUKWM RRJTKULVN RYMPQ RUOYXZY[Y RTPXXZZ RSPWYY[\\X",
3312: " 73G^ZSYTVTUSUQVOXLYJYH RVQVPYLYK RWTVSVRWPYNZLZJYHXGUFPFMGLHKJKLLNNQOSOTNV RLKLLOQOR RLHLJMLOOPQPSOUMWJY RMWOWRYUZXZZY RNXOXSZTZ RJYLXMXQZT[V[YZZY[W",
3313: "128BbEQERFSHSJRJOIMGJGHIF RIOGK RHSIRIPGMFKFIGGIFKFMGOIPLPROUNWLYI[HZGZ RNIOLORNUMW RJZIYHY RKFMHNKNRMVLXKYJXIXF[ RNGPFRFTGVIWLWRVUUWSYQ[PZOZ RUIVLVRUV RRZQYPY RRFTHUKUSTWSYRXQXN[ RUHVGXFZF\\G]H^J_K R\\H]J RZF[G\\J]K_K R_K\\M[NZQZT[X][`X R\\N[P[T\\W^Z R_K]M\\O\\S]W_Y",
3314: " 96D`GQGRHSJSLRLOKMIJIHKF RKOIK RJSKRKPIMHKHIIGKFNFPGRISLSRRUQWOYL[KZIZG[ RQIRKRRQUPWOX RMZKYIY RNFPHQKQRPVNYLXJXG[ RRHSGUFWFYGZH[J\\K RYHZJ RWFXGYJZK\\K R\\KYMXNWQWTXXZ[]X RYNXPXTYW[Z R\\KZMYOYSZW\\Y",
3315: " 72D`PFNGLIKKKMMQMS RLLLMMOMP RLILKNONQMSLTJTISIR RPFQGWIZK[M\\P\\S[VZXXZU[R[OZIWHWGX RPGQHWJYKZL RPFPHQIWKYL[N\\P RSZQZKWJW RYYWZTZQYMWJVHVGXGZH[IZHY",
3316: "100E`HQHRISKSMRMOLMJJJHLF RLOJK RKSLRLPJMIKIIJGLFOFQGRHSJSU RSWS\\R^P_M_L^L\\M[N\\M] RQHRJR\\Q^ ROFPGQJQU RQWQ\\P^O_ RSJXF RXFZI[K\\O\\R[UYXV[ RWGZK[N[O RVHXJZM[P[SZVYX RWYUVSU RQUOVMX RWZUWSVPV RV[TXSW RQWOWMX",
3317: " 88D`PFNGLIKKKMMQMS RLLLMMOMP RLILKNONQMSLTJTISIR RPFQGWIZK[M\\P\\S[VZX RXZU[R[OZIWHWGX RPGQHWJYKZL RPFPHQIWKYL[N\\P RSZQZKWJW RXZTZQYMWJVHVGXGZH[IZHY RTXVVXV\\Z]Z RWWXW[Z RUWVWZ[\\[^Y",
3318: " 96D`GQGRHSJSLRLOKMIJIHKF RKOIK RJSKRKPIMHKHIIGKFNFPGQHRJRVQXOZM[K[IZ RPHQJQVPX RNFOGPJPVOYM[ RGVIZ RFYJW RGVGXFYHYIZIXJWHWGV RRISGUFWFYGZH[J\\K RYHZJ RWFXGYJZK\\K R\\KRP RTOXYZ[]X RUOYX[Z RVNZX[Y\\Y",
3319: " 83E`\\H[G\\F]G]I\\KZKVISHOHKIIK RYJVHSGOGLH R]I\\JZJVGSFOFLGJIIKHNHRIUJWLYNZQ[U[XZZY\\W]T]Q\\OZNWNUOSRQSOS RLXNYQZUZYY RIUKWMXPYUYYX[W\\V]T RXOWOSSRS R]Q[OYOWPUSSTQTOSNQNOOMQL",
3320: " 81F_LNJMIKIIJGMFRFUGYJ[J\\I RJHLGRGUHXJ RIKJILHRHUIYK[K\\I\\G[FZG[H RUIRLQNQPSTSV RRORPSRSS RRLRNTRTTSVRWPWOVOT RJYKZJ[IZIXJVLVOWSYVZYZ[Y RLWMWSZUZ RIXJWKWMXQZT[W[ZZ\\X",
3321: " 45G]JHKHLILWJX RKGMHMXPZ RIILFNHNWPYRY RJXKXMYO[RYVV RTHUHVIVYX[[X RUGWHWYYZ RSIVFYHXIXXYYZY",
3322: "100D`GQGRHSJSLRLOKMIJIHKF RKOIK RJSKRKPIMHKHIIGKFNFPGQHRJRRQUOW RPHQJQT RNFOGPJPUOW RRISGUFWFYG[J\\K RYHZJ RWFXGYJZK\\K RZKXKWLWNXP[R\\T RXO[Q RWMXN[P\\R\\V[XYZW[S[PZJWIWHX RTZRZLWKW RZYXZUZRYNWKVIVHXHZI[JZIY",
3323: "143BcEQERFSHSJRJOIMGJGHIF RIOGK RHSIRIPGMFKFIGGIFLFNGOHPJPNOQMTKV RNHOJOONR RLFMGNJNOMSKV RNGPFSFUG RWFTGSISMTPVSWUWWVY RTMTNWSWT RWFUGTITLUNWQXTXVWXUZS[O[MZKXIWGWFX RNZKWJW RQ[OZLWJVGVFXFZG[HZGY RWFZF\\G^J_K R\\H]J RZF[G\\J]K_K R]K[KZLZN[P^R_T R[O^Q RZM[N^P_R_W^Y]Z[[X[UZ RYZXZVY R^Y\\ZZZXYWX",
3324: " 86F^KHMHOIPJQMQO RQQQUPXM[KZI[ RNZLYKY ROYNYLXI[ RMGPHQIRLRUSWUYWZ RIINFPGRISLSO RSQSTTWUXWYYY RQURXTZV[[X RSLTIWFYG[F RVGXHYH RUHVHXI[F RKSMOQO RSOWOYM RMPWP RKSMQQQ RSQWQYM",
3325: " 74E_HQHRISKSMRMOLMJJJHLF RLOJK RKSLRLPJMIKIIJGLFOFQGRHSJSORRQTQUSWTW RQHRJRPQSPUSX ROFPGQJQPPTOVRYUV RSJ[F RYGYZX] RZGZXY[ R[F[VZZY\\W^T_P_M^K\\JZKYLZK[",
3326: " 74F^NIOGQFTFVGWHXJXMWOVPTQ RQQOPNN RVHWIWNVO RTFUGVIVNUPTQ RMUNSORQQTQWRYTZVZZY\\W^T_P_N^KZJY RXTYVYZX\\ RTQWSXUX[W]V^T_ RO^N]LZKY RR_P^O]MZLYIYHZH\\I]J]",
3401: " 46J[TMQNOONPMSMVNYO[UX RNVOYPZ RQNOPNSNUOXQZ RRNSOUPUYW[ZX RSNVPVXXZ RTMUNWOXO RWPXO RWPWXXYYY",
3402: " 50J[LHMINK RTFQGOINKNXMY RPIOKOXRZ RTFRGQHPKPXRYSZ RMYNYPZQ[TZ RPPVMWOXRXUWXVYTZ RUNVOWQ RTNVPWSWUVXTZ",
3403: " 27KXRNTPVOTMRNOPNRNWOYQ[UY RSNUO RPPOROWPYQZ RQOPQPVQXSZ",
3404: " 47J[QFNINKOLSNVPWRWUVXTZ ROJOKSMVOWP ROHOIPJUMWOXRXUWXTZQ[ RRNNPNXMY ROPOXRZ RPOPXRYSZ RMYNYPZQ[",
3405: " 27KXPUVQSMOPNRNWOYQ[UY RUQRN RPPOROWPYQZ RTRROQOPQPVQXSZ",
3406: " 49LYXFWGUGSFQFPHPMOONP RVHTHRGQG RXFWHVITIRHQHPI RPKQMRNTOVOVP RNPPP RRPVP RPPPTQ` RSOPOQNQ[ RRPRTQ`",
3407: " 53J[TMQNOONPMSMVNYO[UX RNWOYPZ RQNOPNSNUOXQZ RRNSOUPUXV[V]U_ RSNVPVZ RTMUNWOXO RWPXO RWPW\\V^U_S`P`N_M^M]N]N^",
3408: " 50J[LHMINK RTFQGOINKNXMY RPIOKOYPZ RTFRGQHPKPXQYRY RMYOZP[SX RPPVMWOXSXWWZV\\T^Q` RUNVOWR RTNVQWTWWV[T^",
3409: " 39MWRFQGQHRISHSGRF RQGSH RQHSG ROOPOQPQYS[VX RPNRORXTZ RNPQMRNTO RSPTO RSPSXTYUY",
3410: " 45MWRFQGQHRISHSGRF RQGSH RQHSG ROOPOQPQ[P^O_M` RPNROR[Q] RNPQMRNTO RSPTO RSPS[R]P_M` RS[T]U^",
3411: " 63KYNHOIPK RUFSGQIPKPMOONP RPPPXOY RRIQKQM RQOPOQMQXSZ RUFSHRKRO RRPRXSYTY ROYQZR[UX RRLVIWJWLUNSO RUJVKVLUN RROWOWP RNPPP RRPWP",
3412: " 29MWOHPIQK RWFTGRIQKQXPY RSIRKRYTZ RWFUGTHSKSXTYUY RPYRZS[VX",
3413: " 74E_GOHOIPIXHYJ[ RHNJPJXIYJZKYJX RFPIMKOKXLYJ[ RNNPOQQQXPYR[ RPNQORQRXQYRZSYRX RKPNNPMRNSPSXTYR[ RVNWOYPYY[[^X RWNZPZX\\Z RSPVNXMYN[O\\O R[P\\O R[P[X\\Y]Y",
3414: " 49I[KOLOMPMXLYN[ RLNNPNXMYNZOYNX RJPMMOOOXPYN[ RRNSOUPUYW[ZX RSNVPVXXZ ROPRNTMUNWOXO RWPXO RWPWXXYYY",
3415: " 41J[NPNXMY ROPOXRZ RQOPPPXRYSZ RMYNYPZQ[TZ RNPQOVMWOXRXUWXVYTZ RUNVOWQ RTNVPWSWUVXTZ",
3416: " 57J[OJMLMNNQNXLZ RNYO` RNMNNOQO[ RNKNLONPQPXQXSYTZ RPYO` RSZQY RTZR[PY RNYLZ RPPVMWOXRXUWXVYTZ RUNVOWQ RTNVPWSWUVXTZ",
3417: " 43J[TMQNOONPMSMVNYO[UX RNWOYPZ RQNOPNSNUOXQZ RRNSOUPUXV` RSNVPV[ RTMUNWOXO RWPXO RWPWXV`",
3418: " 32KYNOOOPPPXOY RONQPQYSZ RMPPMRORXSYTY ROYQZR[UX RTNUPWOVMRO RUNVO",
3419: " 42LWXFWGUGSFQFPHPMOONP RVHTHRGQG RXFWHVITIRHQHPI RPKRP RPPPTQ` RQOPOQNQ[ RRPRTQ` RNPPP",
3420: " 37LXSIRLQNPONP RSISOVOVP RNPQP RSPVP RQPQXPY RROQORMRXTZ RSPSXTYUY RPYRZS[VX",
3421: " 47I[KOLOMPMXLY RLNNPNXPZ RJPMMOOOXQYRZ RLYMYOZP[RZUX RVMTOUPUYW[ZX RVPWOVNUOVPVXXZ RVMXOWPWXXYYY",
3422: " 47J[OKMMMONRNXMY RNNNOOROXRZ RNLNMOOPRPXRYSZ RMYNYPZQ[TZ RPPVMWOXRXUWXVYTZ RUNVOWQ RTNVPWSWUVXTZ",
3423: " 72F_KKIMIOJRJXIYK[ RJNJOKRKXJYKZLYKX RJLJMKOLRLXMYK[ RONQORQRXQY RQNROSQSXVZ RLPONQMSNTPTXVYWZ RQYRYTZU[XZ RTPZM[O\\R\\T[XZYXZ RYNZO[Q RXNZP[S[UZXXZ",
3424: " 44KZOOPOQPQXPXNYM[M]N_P`S`V_V^U^U_ RPNRPRXUZ RNPQMSOSXUYVZ RXYT[SZQYOYM[ RUNVPXOWMSO RVNWO",
3425: " 47J[OKMMMONRNXMY RNNNOOROYQZ RNLNMOOPRPXQYRY RMYOZP[SX RPPVMWOXSXWWZV\\T^Q` RUNVOWR RTNVQWTWWV[T^",
3426: " 43KYNPSMUNVPVRUTQV RSNUO RRNTOUQURTTSU RSUUWVYV]U_S`Q`O_N]N[OYQXWV RRVTWUY RQVTXUZU]T_S`",
3427: " 61JZRMPNMPMRNU RNPNROT RPNOOORPT RPNROTOVNWMWKVJTJ RQNSN RRMTNVN RNUVRWUWWVYR[ RUSVUVXUY RTSUUUXTZ RTZRYOYL[ RSZQZ RR[PZNZL[",
3428: " 78J[VFUGSGQFOFNHNMMOLP RTHRHPGOG RVFUHTIRIPHOHNI RNKPP RNPNTO` ROONOONO[ RPPPTO` RLPNP RPPUMWNXPXRWTSV RUNWO RTNVOWQWRVTUU RUUWVXXX[W]U_R` RUVWW RSVTVVWWYW\\V^",
3429: " 62J[PIOLNNMOKP RPIPXQYO[ ROONOONOXNYOZPYOX RKPNPNXMYO[ RPPUMWNXPXRWTSV RUNWO RTNVOWQWRVTUU RUUWVXXX[W]U_R` RUVWW RSVTVVWWYW\\V^",
3501: " 60G]LINGPFRFSGZW[X]X RQGRHYXZZ[YYX RNGPGQHXXYZZ[[[]X RLMMLOKPKQL RPLPM RMLOLPN RG[IYKXNXPY RJYNYOZ RG[JZMZN[PY RRJLX RNSVS",
3502: "110F^HHJFMFOGQF RKGNG RHHJGLHOHQF RMKLLKNKOIOHPHRIQKQKW RLMLU RIPLP RMKMTLVKW RRIQJPLPU RQKQS RRIRRQTPU RRIXFZG[I[KYMUO RXGZIZK RVGXHYIYLWN RWNZP[R[X RYPZRZW RWNXOYQYX RJ[MYPXTXWY RLZOYTYVZ RJ[NZSZU[WYYX[X RUOUX RURYR RUUYU",
3503: " 69E]NGLHJJILHOHSIVJXMZP[S[VZXYZW[U RJKINISKWNYQZTZWY RNGLIKKJNJRKUNXQYTYWXYW[U RPJPV RQJQT RRIRSQUPV RPJRIUFWGYGZF RTGVHXH RSHUIWIYHZF RWIWX",
3504: " 72G^IFWFYGZIZX RKGWGYIYW RIFJGLHWHXIXX ROKNLMNMOKOJPJRKQMQMV RNMNT RKPNP ROKOSNUMV RI[LYOXSXVY RKZNYSYUZ RI[MZRZT[VYXXZX RRHRX RRMTNVNXM RRSTRVRXS",
3505: " 94G]IHKFMFOGQF RLGNG RIHKGMHOHQF RNKMLLNLOJOIPIRJQLQLW RMMMU RJPMP RNKNTMVLW RQMRJSHTGVFXF[G RTHVGXGZH RRJSIUHWHYI[G RQURRSPTOVOXP RTPVPWQ RRRSQUQVRXP RK[NYRXWX[Y RMZPYWYZZ RK[OZVZY[[Y RQMQX",
3506: " 91F]JHLFOFQGSF RMGPG RJHLGNHQHSF RPKOLNNNOLOKPKRLQNQNV ROMOT RLPOP RPKPSOUNV RSJSYRZQZMXKXIYG[ RTJTX RTPXP RPZOZMYJY RUIUOXO RXQUQUWTYP[N[LZJZG[ RSJUIXFZG\\G]F RWGYH[H RVHXIZI\\H]F RXIXW",
3507: " 87E^NGLHJJILHOHRIUJWLYNZQ[U[XZZX[V[SZQYPWOUO RJKINISJV RNGLIKKJNJSKVLXNZ RYXZWZSYQ RU[WZXYYWYSXQWPUO RPJPW RQJQU RRIRTQVPW RPJRIUFWGYGZF RTGVHXH RSHUIWIYHZF RYHUOU[ RUSYS RUVYV",
3508: "112F^HHJFMFOGQF RKGNG RHHJGLHOHQF RMKLLKNKOIOHPHRIQKQKW RLMLU RIPLP RMKMTLVKW RJ[MYPXSXUY RLZOYRYTZ RJ[NZQZS[UY RRIQJPLPU RQKQS RRIRRQTPU RRITGVFXFZG RWGXGYH RTGVGXIZG RUOWNYLZM[P[TZXX[ RXMYNZPZUYX RWNXNYPYUX[ RUOUY RURYR RUUYU",
3509: " 67I\\LHNFQFTGVF ROGSG RLHNGQHTHVF RSKRLQNQOOONPNROQQQQV RRMRT ROPRP RSKSSRUQV RYHWJVMVXUZSZOXMXKYI[ RWKWW RRZQZOYLY RYHXJXVWXUZS[P[NZKZI[",
3510: " 65H\\LHNFQFTGVF ROGSG RLHNGQHTHVF RSKRLQNQOOONPNROQQQQV RRMRT ROPRP RSKSSRUQV RYHWJVMVXUZ RWKWW RYHXJXVWXUZR[O[LZJXJVKULUMVLWKW RJVMV",
3511: "115F^HHJFMFOGQF RKGNG RHHJGLHOHQF RMKLLKNKOIOHPHRIQKQKW RLMLU RIPLP RMKMTLVKW RJ[MYPXSXUY RLZNYRYTZ RJ[NZQZS[UY RRIQJPLPU RQKQS RRIRRQTPU RRITGVFXFZG RWGXGYH RTGVGXIZG RUOXLYM[N RWMYN[N R[NYQWSUU RWSYTZX[Z\\Z RYVZZ RWSXTYZZ[[[\\Z RUOUY",
3512: " 85G]IHKFNFPGRF RLGOG RIHKGMHPHRF RNKMLLNLOJOIPIRJQLQLW RMMMU RJPMP RNKNTMVLW RK[NYRXWX[Y RMZPYWYZZ RK[OZVZY[[Y RSIRJQLQU RRKRS RSISRRTQU RSIUGWFYF[G RXGYGZH RUGWGYI[G RWGWX",
3513: "107D`LJKKJMJOHOGPGRHQJQJU RKLKS RHPKP RLJLRKTJU RE[GYIXKXMYNYOX RHYKYMZ RE[GZJZL[M[NZOX RLJPFTJTWUYVY RPGSJSXRYSZTYSX RPPSP RNHOHRKROOO ROQRQRXQYS[VYWX RTJXF\\J\\W]Y^Y RXG[J[X]Z RXP[P RVHWHZKZOWO RWQZQZY\\[^Y ROHOX RWHWX",
3514: " 84E^GIIGKFMFOGQJVUXXYY RMGOIPKVWYZ RIGKGMHOKTVVYWZY[ RVHXIZI\\H]F RWGYH[H RVHXFZG\\G]F RKOIOHPHRIQKQ RIPKP RG[IYKXNXPY RJYMYOZ RG[JZMZN[PY RKGKX RYIY[ RRLSMUNWNYM RKTMSQSST",
3515: " 79E_NFLGJIIKHNHRIUJWLYNZQ[S[VZXYZW[U\\R\\N[KZIXGVFUGRIOJ RJJIMISJV RNFLHKJJMJSKVLXNZ RZV[S[MYIXH RVZXXYVZSZMYKWHUG ROJOW RPJPU RQJQTPVOW RUGUZ RUMWNXNZM RUSWRXRZS",
3516: " 70H^KFLGMIMOKOJPJRKQMQMYJ[MZMbO` RMHNJN` RKPNP RKFMGNHOJO` ROKRIVFZJZX RVGYJYX RTHUHXKXY RRXUXXY RSYUYWZ RRZTZV[XYZX RRIR_ RRMTNVNXM RRSTRVRXS",
3517: " 99E_NFLGJIIKHNHRIUJWLYNZP[T[VZXYZW[U\\R\\N[KZIXGVFUGRIOJ RJJIMISJV RNFLHKJJMJSKVLXNZ RZV[S[MYIXH RVZXXYVZSZMYKWHUG ROJOW RPJPU RQJQTPVOW RUGUZ RUMWNXNZM RUSWRXRZS RP[QZRZT[X`Za[a RT\\V_XaYa RRZS[VaXbZb[a",
3518: "108F^HHJFMFOGQF RKGNG RHHJGLHOHQF RMKLLKNKOIOHPHRIQKQKW RLMLU RIPLP RMKMTLVKW RJ[MYPXRXUY RLZNYRYTZ RJ[NZQZS[UY RRIQJPLPU RQKQS RRIRRQTPU RRIUGWFYGZIZLYNXOTQRR RWGXGYIYMXN RUGWHXJXMWOTQ RTQVRWSZX[Y\\Y RWTYX[Z RTQVSXYZ[\\Y",
3519: " 94G^UITHRGOF RVHTG RWGSFOFLGKHJJKLLMONWNYOZPZRYU RKKLLOMXMZN[O[QZS RKHKJLKOLYL[M\\O\\QYUU[ RIOJPLQUQVRVSUU RJQLRTRUS RIOIPJRLSSSUTUU RI[LYPXSXVY RKZNYRYUZ RI[MZRZU[ RWGUISL RRNPQ ROSMUKVJVJUKV",
3520: " 71E]JJILHOHSIVKYMZP[S[VZXYZW[U RISJVLXNYQZTZWY RJJIMIQJTLWNXQYTYWXYW[U RHIIGKFOFUGYG[F RPGTHXH RHIIHKGNGTIWIYH[F RSIRJPKPV RQKQT RRJRSQUPV RWIWX",
3521: " 89F^HHJFLFOGQF RKGNG RHHJGMHOHQF RKJJLIOISJVKXMZP[S[VZXYZ[\\Y RJSKVNYQZTZ RKJJNJQKTLVNXQYUYXX RUIQJPLPV RQKQT RRJRSQUPV RUIWHYFZG\\HZIZW[Y\\Y RYIZHYGXHYIYX[Z RWHXIXX RUIUY RUNXN RURXR",
3522: " 72G^JFKGLILOJOIPIRJQLQLXJY RLHMJMX RJPMP RNYQYSZ RJFLGMHNJNXRXUY RJYMYPZR[UYXXZX RRJUIWHYFZG\\HZIZX RYIZHYGXHYIYW RWHXIXX RRJRX RRMTNVNXM RRSTRVRXS",
3523: " 95E`HFIGJIJOHOGPGRHQJQJXHY RJHKJKX RHPKP RLYNYPZ RHFJGKHLJLXOXQY RHYKYNZO[QYTXVYW[YY\\X ROHRFTHTXWXYY RRGSHSX ROHQHRIRXQY RWYXZ RWHZF\\H\\X RZG[H[X RWHYHZIZXYY ROHOX RWHWX RONRN RORRR RWNZN RWRZR",
3524: " 65G]HIJGLFNFOGWYXZZZ RMGNHVYWZ RJGLGMHUZV[X[ZZ\\X RWFYG[G\\F RWGXHZH RVHWIYI[H\\F RH[IYKXMXNY RJYLYMZ RH[IZKZM[ RWFSO RQRM[ RLPPP RSPXP",
3525: " 86G^JFKGLILOJOIPIRJQLQLXJY RLHMJMX RJPMP RNYQYSZ RJFLGMHNJNXRXUY RJYMYPZR[UYXX RRJUIWHYFZG\\HZIZ^Y`WbUaQ`L` RYIZHYGXHYIYY RWHXIXXZ[ RXaV`S` RY`V_P_L` RRJRX RRMTNVNXM RRSTRVRXS",
3526: " 57H\\XGWIROOSMWJ[ RVKNV RZFWJUNRRMXLZ RJHLFOGUGZF RKGOHSHWG RJHNIRIVHXG RLZNYRXVXZY RMZQYUYYZ RJ[OZUZX[ZY RMPQP RTPXP",
3601: " 53J[PRNTMVMXNZP[RYUX RMVNXOYQZ RNTNVOXQYRY RNPPPSOUNVMXOWPWXXYYY RONNOQO RTOWOVNVYWZ RMOOMPNROUPUYW[YY RMORT",
3602: " 44I[LHMJMXKY RNJMHNGNXQZ RLHOFOXQYRZ RKYMYOZP[RZUYWY ROPROTNUMVNXOYOWPWY RTNVOVX RROSOUPUY",
3603: " 35JXNONXLYMYOZP[ ROOOYQZ RPOPXRYSYQZP[ RNORNTMUNWOXO RSNTOVO RPORNTPVPXO",
3604: " 41IZRMPNMOMXKY RNONXQZ RRMOOOXQYRZ RKYMYOZP[RZUYWY RMHPFQIWOWY RPINHOGPIVOVX RMHUPUY",
3605: " 32JXNONXLYMYOZP[ ROOOYQZ RPOPXRYSYQZP[ RNORNTMWQURPU RSNVQ RPORNUR",
3606: " 41JWNHNXLYMYOZP[ ROHOYQZ RPHPXRYSYQZP[ RNHQGSFTGVHWH RRGSHUH RPHQGSIUIWH RKMNM RPMTM",
3607: " 56I[MOMXKYLYNZO[PZRYUX RNPNYPZ ROOOXQYRY RMOOORNTMUNWOYOWPW\\V_TaRbQaO`M` RSNVPV\\ RSaQ`P` RRNSOUPUZV]V_ RTaS`Q_O_M`",
3608: " 47I[LHMJMXKYLYNZO[ RNJMHNGNYPZ RLHOFOXQYO[ ROPROTNUMVNXOYOWPWYU[T] RTNVOVYU[ RROSOUPUYT]T`UbVbT`",
3609: " 35MWRFPHRITHRF RRGQHSHRG RRMQNOOQPQYS[UY RRPSORNQORPRYSZ RRMSNUOSPSXTYUY",
3610: " 39MWRFPHRITHRF RRGQHSHRG RRMQNOOQPQYS[T] RRPSORNQORPRYS[ RRMSNUOSPSYT]T`RbPbPaRb",
3611: " 50IZLHMJMXKYLYNZO[ RNJMHNGNYPZ RLHOFOXQYO[ ROPRNTMVPSROU RSNUP RRNTQ RSRTSVXWYXY RSSTTUYVZ RRSSTTYV[XY",
3612: " 22MWPHQJQXOYPYRZS[ RRJQHRGRYTZ RPHSFSXUYVYTZS[",
3613: " 67E_GOHOIPIXGYHYJZK[ RINJOJYLZ RGOIMKOKXMYK[ RKPNOPNQMSOSXUYS[ RPNRORYTZ RNOOOQPQXPYRZS[ RSPVOXNYMZN\\O]O[P[X\\Y]Y RXNZOZY[Z RVOWOYPYY[[]Y",
3614: " 45I[KOLOMPMXKYLYNZO[ RMNNONYPZ RKOMMOOOXQYO[ ROPROTNUMVNXOYOWPWXXYYY RTNVOVYWZ RROSOUPUYW[YY",
3615: " 40I[MOMXKY RNPNXQZ ROOOXQYRZ RKYMYOZP[RZUYWY RMOOORNTMUNWOYOWPWY RSNVPVX RRNSOUPUY",
3616: " 54I[LMMOMXKYMYMb RMNNONaO`N^ RNYOYQZ RLMNNOOOXQYRZ ROZP[RZUYWY ROZO^P`Mb ROPROTNUMVNXOYOWPWY RTNVOVX RROSOUPUY",
3617: " 44I[MOMXKY RNPNYPZ ROOOXQYRY RKYLYNZO[PZRYUX RMOOORNTMUNWOYOWPWb RSNVPVaU`V^ RRNSOUPU^T`Wb",
3618: " 38JXLOMONPNXLYMYOZP[ RMNOOOYQZ RLONMPOPXRYSYQZP[ RPOTMUNWOXO RSNTOVO RRNTPVPXO",
3619: " 59JZMOMSOTUTWUWY RNONS RVUVY RPNOOOSQT RSTUUUYTZ RMOPNRMTNVNWM RQNSN RPNROTOVN RWYTZR[PZNZL[ RSZQZ RTZRYOYL[ RWMVOTROWL[",
3620: " 28MWPHQJQXOYPYRZS[ RRJQHRGRYTZ RPHSFSXUYVYTZS[ RNMQM RSMVM",
3621: " 47I[KOLOMPMXKY RLNNONYPZ RKOMMOOOXQYRY RKYLYNZO[PZRYUX RUMVNXOYOWPWXXYYY RTNVOVYWZ RUMSOUPUYW[YY",
3622: " 36I[LMMOMXP[RYUXWX RMNNONXQZ RLMNNOOOWPXRY RUMVNXOYOWPWX RTNVOVW RUMSOUPUX",
3623: " 57E_HMIOIXL[NYQX RINJOJXMZ RHMJNKOKWLXNY RQMOOQPQXT[VYYX[X RPNRORXUZ RQMRNTOSPSWTXVY RYMZN\\O]O[P[X RXNZOZW RYMWOYPYX",
3624: " 59H[KOLONPOQSYTZV[XY RMNOOTYVZ RKOMMONPOTWUXWYXY RRSUMVNXNYM RUNVOWO RTOVPXOYM RQUN[MZKZJ[ RNZMYLY ROYMXKYJ[ RMTPT RSTVT",
3625: " 60I[KOLOMPMXKY RLNNONYPZ RKOMMOOOXQYRY RKYLYNZO[PZRYUX RUMVNXOYOWPW\\V_TaRbQaO`M` RTNVOV\\ RSaQ`P` RUMSOUPUZV]V_ RTaS`Q_O_M`",
3626: " 38I[XML[ RLONPQPTOXM RMNOOSO RLONMPNTNXM RL[PYSXVXXY RQYUYWZ RL[PZTZV[XY RNTVT",
3700: " 42H\\LHLXJY RMIMXPZ RNHNXPYQZ RLHNHSGUF RSGTHVIVY RTGWIWX RUFVGXHZHXIXY RJYLYNZO[QZVYXY",
3701: " 27H\\OHPIQKQXOY RQIPHQGRIRYTZ ROHRFSHSXUYVY ROYPYRZS[TZVY",
3702: " 48H\\LHNHPGQFSGVHXH RPHRG RLHNIPIRHSG RVHVP RWIWO RXHXPQPNQLSKVK[ RK[OYSXVXZY RNZQYVYYZ RK[PZUZX[ZY",
3703: " 57H\\LHMHOGPFRGVHXH ROHQG RLHNIPIRG RVHVO RWIWN RXHXOVOSPQQ RQPSQVRXRXY RWSWX RVRVY RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY",
3704: " 41H\\UFKPKUTU RVUZU[V[TZU RLPLT RMNMU RTGTXRY RUJVHUGUYWZ RUFWHVJVXXYYY RRYSYUZV[WZYY",
3705: " 53H\\LFLO RLFXF RMGVG RLHUHWGXF RVLUMSNOOLO RSNTNVOVY RUMWNWX RVLWMYNZNXOXY RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY",
3706: " 59H\\LHLXJY RMIMXPZ RNHNXPYQZ RLHNHRGTFUGWHXH RSGUH RRGTIVIXH RNPOPSOUNVM RSOTOVPVY RUNWPWX RVMWNYOZOXPXY RJYLYNZO[QZVYXY",
3707: " 38H\\KHMFPGUGZF RLGOHTHWG RKHOIRIVHZF RZFYHWKSOQRPUPXQ[ RRQQTQWRZ RUMSPRSRVSYQ[",
3708: " 71H\\LILO RMJMN RNINO RLINISHUGVF RSHTHVIVO RUGWHWN RVFWGYHZHXIXO RLONOVRXR RXOVONRLR RLRLXJY RMSMXPZ RNRNXPYQZ RVRVY RWSWX RXRXY RJYLYNZO[QZVYXY",
3709: " 60H\\LHLQJR RMIMROS RNHNQPRQR RLHNHSGUF RSGTHVIVY RTGWIWX RUFVGXHZHXIXY RJRKRMSNTOSQRUQVQ RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY",
3710: " 11LXRXPZR[TZRX RRYQZSZRY",
3711: " 14LXR^R\\PZRXSZS\\R^P_ RRYQZR[RY",
3712: " 22LXRMPORPTORM RRNQOSORN RRXPZR[TZRX RRYQZSZRY",
3713: " 25LXRMPORPTORM RRNQOSORN RR^R\\PZRXSZS\\R^P_ RRYQZR[RY",
3714: " 30LXRFQGOHQIRT RRISHRGQHRIRT RRFSGUHSIRT RRXPZR[TZRX RRYQZSZRY",
3715: " 51I[LJMHNGQFSFVGWHXJXLWNUPSQ RMJNH RVHWIWMVN RLJNKNIOGQF RSFUGVIVMUOSQ RRQRTSQQQRT RRXPZR[TZRX RRYQZSZRY",
3716: " 14LXTFRGQIQKRMTKRIRG RRJRLSKRJ",
3717: " 14LXRLRJPHRFSHSJRLPM RRGQHRIRG",
3718: " 62E_YNZO[O\\N RXOYP[P RXPYQZQ[P\\N RYNST RRUL[HVNP ROOSKOFJLPRTXVZX[Z[[Z\\X RLZIV RRKOG RKLPQTWVYXZ[Z RMZIU RRLNG RKKQQUWVXXY[Y\\X",
3719: " 60H\\PBP_ RTBT_ RTFVGWIWKYJXHWGTFPFMGKIKLLNOPURWSXUXXWZ RXJWH RLLMNOOUQWRXT RMYLW RMGLILKMMONUPXRYTYWXYWZT[P[MZLYKWMVMXNZP[",
3720: " 8G^[BIbJb R[B\\BJb",
3721: " 27KYUBSDQGOKNPNTOYQ]S`Ub RQHPKOOOUPYQ\\ RSDRFQIPOPUQ[R^S`",
3722: " 27KYOBQDSGUKVPVTUYS]Q`Ob RSHTKUOUUTYS\\ RQDRFSITOTUS[R^Q`",
3723: " 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO",
3724: " 8F_JQ[Q[R RJQJR[R",
3725: " 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R",
3726: " 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V",
3727: " 11NWSFRGRM RSGRM RSFTGRM",
3728: " 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM",
3729: " 30KYQFOGNINKOMQNSNUMVKVIUGSFQF RQFNIOMSNVKUGQF RSFOGNKQNUMVISF",
3801: " 52E_NHLIJKIMHPHSIUKV RJLIOISJU RNHLJKLJOJRKVKXJZH[ RVHXHXYVY RYHYY RZGZZ RHFKGQHVHZG\\F RJPXP RH[KZQYVYZZ\\[",
3802: " 65E_LGLZ RMGMZ RPFNGNZP[ RHJJHLGPFUFXGZIZKYM RXHYIYKXM RUFWGXIXKWL RQUOTNRNPONPMSLVLYM[O\\Q\\T[WYYWZT[P[LZJYHW RZO[Q[UZW RVLYNZQZUYXWZ",
3803: " 60E_\\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[Y\\[ R[HZMZT[Y RZKYJ RZNYKXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RYWZV RVZXXYVZS",
3804: " 46E_KGKZ RLGLZ RNFMGMZN[ RHKIIKGNFSFVGXHZJ[L\\O\\R[UZWXYVZS[N[KZIXHV RZK[N[SZV RVGXIYKZNZSYVXXVZ",
3805: " 86E_\\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[Y\\[ R[HZMZT[Y RZKYJ RZMXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RYWZV RVZXXYVZS RJPKONOUQXQZP RPPRQURWRYQ RMORRUSWSYRZP RZMYLXLWMXNYM",
3806: " 69E_JHJZ RMGKHKY ROFMGLILYNY RHJJHLGOFSFVGXHYI\\F R\\F[HZLZO[S\\U RZIYK RVGXIYLZO RLPMOOOTPWPYO RQPTQVQXP RNOTRVRXQYOYLXKWKVLWMXL RH[JZNYSYYZ\\[",
3807: " 90E_\\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[T[VZXYYXZV[Y\\[ R[HZMZT[Y RZKYJ RZNYKXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RXXYVYR RVZWYXVXQ RKSLRMSLTKTJS RJPKNMMOMRNUPWQ RKOMNONROTP RJPLOOOUQYQZP",
3808: " 50E_JGJZH[ RKHKZ RNHLHLZ RHFJGNHSHYG\\F RLPMNOLRKVKYL[N\\Q\\T[UYV RZN[P[SZU RVKXLYMZOZSYVYXZZ\\[ RH[LZPZU[",
3809: " 23E_QIQY RRJRX RSISY RHFLHPITIXH\\F RH[KZOYUYYZ\\[",
3810: " 42E_TIVIVXUZS[ RWIWXVY RXHXY RHFLHPITIXH\\F RIOHQHUIXKZN[S[VZXYZW\\T RIUJXKY RHSJUKXLZN[",
3811: " 70E_JGJZH[ RKHKZ RNHLHLZ RHFJGNHSHYG\\F RLPMNOLRKUKXLYMYOXPSRQSPTPUQVRUQT RWLXMXOWP RUKWMWOVPSR RSRVRYSZUZWYX RWSYUYW RSRVSXUYXZZ[[\\[ RH[LZPZU[",
3812: " 45E_JGJZ RKHKY RNHLHLYNY R\\KZNYPXSXUYW[X RZOYRYUZW R\\K[MZQZT[X\\[ RHFJGNHSHYG\\F RH[JZNYSYYZ\\[",
3813: " 68E_QIQY RRJRX RSISY RNYLWJVIUHRHMIJKHMGPFTFWGYH[J\\M\\R[UZVXWVY RJUIRIMJJ RLWKUJRJLKIMG RZJ[M[RZU RWGYIZLZRYUXW RHFLHPITIXH\\F RH[KZOYUYYZ\\[",
3814: " 48E_JHJZH[ RLHKIKZ ROFMGLILZ RHJJHLGOFSFVGXHZJ[L\\O\\S[UYV RZK[N[RZU RVGXIYKZNZRYVYXZZ[[\\[ RH[LZPZU[",
3815: " 54E_QFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\\R\\O[LZJXHVGSFQF RJKINISJV RNGLIKKJNJSKVLXNZ RZV[S[NZK RVZXXYVZSZNYKXIVG",
3816: " 51E_JIJZ RMHKJKY RQFOGMILKLYNY RHKJINGQFTFWGYH[J\\M\\O[RYTVURUOTMRLO RZJ[L[PZR RWGYIZLZPYSVU RH[JZNYSYYZ\\[",
3817: " 74E_QFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\\R\\O[LZJXHVGSFQF RJKINISJV RNGLIKKJNJSKVLXNZ RZV[S[NZK RVZXXYVZSZNYKXIVG RJSKUNVTW[W\\X\\Z[[[Z\\Y RPWRW RKUNWQXSXTW",
3818: " 69E_JIJZH[ RKIKZ RLHLZ RHKJILHNGQFUFYG[I\\K\\N[PZQ RYHZI[K[NZP RUFWGYIZKZOYQ RXRUSRSPRPPROUOXPZR\\U\\W[XZX RXQYR[V[WZT RTOVPXRYTZX[Z\\[ RH[LZPZU[",
3819: " 94E_TFZG\\F[H[JYHWGTFPFMGJJIMIOJRLTOURUTTUSVQVP R[GZH[J RJPKRLSOTRTTS RKIJKJNKPMRPSRSTRVPWOXO RLQMQNPPNRMUMWNYPZRZUYXWZ RPMRLULXMZO[R[UZW RIWJYIZ RNPNOOMPLRKUKXL[O\\R\\T[WYYWZT[P[MZKYIWIYH[JZP[",
3820: " 66E_QHMHKIJJILHOHSIVJXKYMZP[S[VZXYZW[U\\R\\N[KYIWH RUHTITKULVKUJ RISJVLXNYQZTZWY RJJINIQJTLWNXQYTYWXYW[T\\R RHFKI RKHLG RIGJGKFMGQHWHZG\\F",
3821: " 51E_LHJJILHOHRIUJWLYNZQ[U[XZZY RKJJLIOISJV RKILJLKKMJPJSKVLXNZ RVHXHXXWZU[ RYHYXXY RZGZY\\[ RHFKGQHVHZG\\F",
3822: " 31E_HFR[ RIGJHQWRY RJGKHRWSX R\\FR[ RWNUS RYLUQTTTV RHFJGOHUHZG\\F",
3823: " 67E_LHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\\R\\O[LZJXH RJLIOIRJUKW RJJKKKLJOJRKVLXNZ RYWZU[R[OZL RVZXXYVZRZOYLYKZJ RQIQ[ RRJRZ RSIS[ RHFLHPITIXH\\F",
3824: " 41E_HFXYYZ RIGKHZZ RLH\\[ R\\FSP RQRJZ RPSMULW RQRMTLUKWKY RHFLHPITIXH\\F RH[JZNYSYYZ\\[",
3825: " 47E_XHXZ RYHYY RZGZY RKHIJHMHPISKUMVPWSWVVXU RLUOVUV RHPIRKTNUTUVV RHFLHPITIXH\\F RHWJYLZP[T[XZ\\X",
3826: " 73E_HFIGKHNHSFVFYGZIZKYM RXGYIYKXM RVFWGXIXL RXNTOROPNPLRKTKXL RTKVLWMVNTO RYM[O\\R\\T[WYYWZT[P[MZKYIWHTHRIOJNLMNMPNPPOQNPOO RXMZO[Q[UZW RXNYOZQZUYXWZ",
3901: " 42J[PQMTMXP[TY RNTNXPZ ROROWRZ RRSMNNMONNO RONSNUMWOWXXY RUNVOVXUYVZWYVX RSNUPUXTYV[XY",
3902: " 31IZNHLFMJMXP[UYWX RNHNXPZ RNHPFOJOWRZ ROOTMWPWX RTNVPVX RRNUQUY",
3903: " 23KWNPNYP[RY ROPOYPZ RPOPXQYRY RNPTMVOTPRN RSNUO",
3904: " 32JZRMMPMXP[RZUYWY RNPNXPZ ROOOWRZ RPIPFQIWPWY RPIVPVX RPIMIPJUPUY",
3905: " 25KXNPNYP[RY ROPOYPZ RPOPXQYRY RNPTMWQPU RSNVQ RRNUR",
3906: " 32KWOIOXNYP[ RPIPXOYPZQYPX RQHQXRYP[ ROIUFWHUISG RTGVH RLMOM RQMUM",
3907: " 41J[MPMXP[UY RNPNXPZ ROOOWRZ RMPOOTMWPW]V_U`SaQaO`MaObQa RTNVPV]U_ RPaNa RRNUQU^T`Sa",
3908: " 42I[NHLFMJMXLYN[ RNHNXMYNZOYNX RNHPFOJOXPYN[ ROORNTMWPWYT]T`UbVbT` RTNVPVYU[ RRNUQUZT]",
3909: " 37MWRFPHRJTHRF RRGQHRISHRG RRMPOQPQXPYR[ RRPSORNQORPRXQYRZSYRX RRMTOSPSXTYR[",
3910: " 37MWRFPHRJTHRF RRGQHRISHRG RRMPOQPQYT] RRPSORNQORPRYS[ RRMTOSPSZT]T`RbPaPbRb",
3911: " 51IZNHLFMJMXLYN[ RNHNXMYNZOYNX RNHPFOJOXPYN[ ROPRNTMVPSROU RSNUP RRNTQ RRSSTTYV[XY RSSTUUYVZ RSRTSVXWYXY",
3912: " 21MWRHPFQJQXPYR[ RRHRXQYRZSYRX RRHTFSJSXTYR[",
3913: " 66E_GOHOIPIXHYJ[ RINJOJXIYJZKYJX RGOIMKOKXLYJ[ RKONNPMSOSXTYR[ RPNRORXQYRZSYRX RNNQPQXPYR[ RSOVNXM[O[X\\YZ[ RXNZOZXYYZZ[YZX RVNYPYXXYZ[",
3914: " 44I[KOLOMPMXLYN[ RMNNONXMYNZOYNX RKOMMOOOXPYN[ ROORNTMWOWXXYV[ RTNVOVXUYVZWYVX RRNUPUXTYV[",
3915: " 28JZMPMXP[UYWX RNPNXPZ ROOOWRZ RMPOOTMWPWX RTNVPVX RRNUQUY",
3916: " 47IZLMMOMXKYMYM_LbN` RNON` RLMNNOOOXQYRZ RNYOYQZ ROZP[UYWX ROZO_PbN` ROORNTMWPWX RTNVPVX RRNUQUY",
3917: " 31J[MPMXP[UY RNPNXPZ ROOOWRZ RMPOOTMWPW_XbV` RTNVPV` RRNUQU_TbV`",
3918: " 31KXMONOOPOXNYP[ RONPOPXOYPZQYPX RMOOMQOQXRYP[ RQOUMWOUPSN RTNVO",
3919: " 41JZMPMSOUURWTWX RNPNSOT ROOOSPT RUSVTVX RTSUTUY RMPSMVNTOQN RRNUN RWXQ[MYOXSZ ROYQZ",
3920: " 27MWRHPFQJQXPYR[ RRHRXQYRZSYRX RRHTFSJSXTYR[ RNMQM RSMVM",
3921: " 40I[KOLOMPMYP[UY RMNNONYPZ RKOMMOOOXRZ RVMXOWPWXXYYY RVPWOVNUOVPVYWZ RVMTOUPUYW[YY",
3922: " 36I[LMMOMXQ[SYWW RMNNONXQZ RLMNNOOOWRYSY RVMXOWPWW RVPWOVNUOVPVW RVMTOUPUX",
3923: " 59E_HMIOIXM[OYQX RINJOJXMZ RHMJNKOKWNYOY RRMPOQPQXU[WY[W RRPSORNQORPRXUZ RRMTOSPSWVYWY RZM\\O[P[W RZP[OZNYOZPZW RZMXOYPYX",
3924: " 39I[LONPUZV[XY RMNOOUYWZ RLONMONVXXY RXMVMVOXOXMVOSS RQUNYL[N[NYLYL[ RNTQT RSTVT",
3925: " 49I[KOLOMPMYP[UY RMNNONYPZ RKOMMOOOXRZ RVMXOWPW]V_U`SaQaO`MaObQa RVPWOVNUOVPV^U_ RPaNa RVMTOUPU^T`Sa",
3926: " 43L[RNOPOORNTMWOWSRU RTNVOVS RRNUPUSTT RRUWWW]V_U`SaQaO`MaObQa RVWV^U_ RPaNa RTVUWU^T`Sa"
}, x = {
"\\frac": { glyph: 0, arity: 2, flags: {} },
"\\binom": { glyph: 0, arity: 2, flags: {} },
"\\sqrt": {
glyph: 2267,
arity: 1,
flags: { opt: !0, xfl: !0, yfl: !0 }
},
"^": { glyph: 0, arity: 1, flags: {} },
_: { glyph: 0, arity: 1, flags: {} },
"(": { glyph: 2221, arity: 0, flags: { yfl: !0 } },
")": { glyph: 2222, arity: 0, flags: { yfl: !0 } },
"[": { glyph: 2223, arity: 0, flags: { yfl: !0 } },
"]": { glyph: 2224, arity: 0, flags: { yfl: !0 } },
"\\langle": { glyph: 2227, arity: 0, flags: { yfl: !0 } },
"\\rangle": { glyph: 2228, arity: 0, flags: { yfl: !0 } },
"|": { glyph: 2229, arity: 0, flags: { yfl: !0 } },
"\\|": { glyph: 2230, arity: 0, flags: { yfl: !0 } },
"\\{": { glyph: 2225, arity: 0, flags: { yfl: !0 } },
"\\}": { glyph: 2226, arity: 0, flags: { yfl: !0 } },
"\\#": { glyph: 2275, arity: 0, flags: {} },
"\\$": { glyph: 2274, arity: 0, flags: {} },
"\\&": { glyph: 2273, arity: 0, flags: {} },
"\\%": { glyph: 2271, arity: 0, flags: {} },
/*semantics*/
"\\begin": { glyph: 0, arity: 1, flags: {} },
"\\end": { glyph: 0, arity: 1, flags: {} },
"\\left": { glyph: 0, arity: 1, flags: {} },
"\\right": { glyph: 0, arity: 1, flags: {} },
"\\middle": { glyph: 0, arity: 1, flags: {} },
/*operators*/
"\\cdot": { glyph: 2236, arity: 0, flags: {} },
"\\pm": { glyph: 2233, arity: 0, flags: {} },
"\\mp": { glyph: 2234, arity: 0, flags: {} },
"\\times": { glyph: 2235, arity: 0, flags: {} },
"\\div": { glyph: 2237, arity: 0, flags: {} },
"\\leqq": { glyph: 2243, arity: 0, flags: {} },
"\\geqq": { glyph: 2244, arity: 0, flags: {} },
"\\leq": { glyph: 2243, arity: 0, flags: {} },
"\\geq": { glyph: 2244, arity: 0, flags: {} },
"\\propto": { glyph: 2245, arity: 0, flags: {} },
"\\sim": { glyph: 2246, arity: 0, flags: {} },
"\\equiv": { glyph: 2240, arity: 0, flags: {} },
"\\dagger": { glyph: 2277, arity: 0, flags: {} },
"\\ddagger": { glyph: 2278, arity: 0, flags: {} },
"\\ell": { glyph: 662, arity: 0, flags: {} },
/*accents*/
"\\vec": {
glyph: 2261,
arity: 1,
flags: { hat: !0, xfl: !0, yfl: !0 }
},
"\\overrightarrow": {
glyph: 2261,
arity: 1,
flags: { hat: !0, xfl: !0, yfl: !0 }
},
"\\overleftarrow": {
glyph: 2263,
arity: 1,
flags: { hat: !0, xfl: !0, yfl: !0 }
},
"\\bar": { glyph: 2231, arity: 1, flags: { hat: !0, xfl: !0 } },
"\\overline": { glyph: 2231, arity: 1, flags: { hat: !0, xfl: !0 } },
"\\widehat": {
glyph: 2247,
arity: 1,
flags: { hat: !0, xfl: !0, yfl: !0 }
},
"\\hat": { glyph: 2247, arity: 1, flags: { hat: !0 } },
"\\acute": { glyph: 2248, arity: 1, flags: { hat: !0 } },
"\\grave": { glyph: 2249, arity: 1, flags: { hat: !0 } },
"\\breve": { glyph: 2250, arity: 1, flags: { hat: !0 } },
"\\tilde": { glyph: 2246, arity: 1, flags: { hat: !0 } },
"\\underline": { glyph: 2231, arity: 1, flags: { mat: !0, xfl: !0 } },
"\\not": { glyph: 2220, arity: 1, flags: {} },
"\\neq": { glyph: 2239, arity: 1, flags: {} },
"\\ne": { glyph: 2239, arity: 1, flags: {} },
"\\exists": { glyph: 2279, arity: 0, flags: {} },
"\\in": { glyph: 2260, arity: 0, flags: {} },
"\\subset": { glyph: 2256, arity: 0, flags: {} },
"\\supset": { glyph: 2258, arity: 0, flags: {} },
"\\cup": { glyph: 2257, arity: 0, flags: {} },
"\\cap": { glyph: 2259, arity: 0, flags: {} },
"\\infty": { glyph: 2270, arity: 0, flags: {} },
"\\partial": { glyph: 2265, arity: 0, flags: {} },
"\\nabla": { glyph: 2266, arity: 0, flags: {} },
"\\aleph": { glyph: 2077, arity: 0, flags: {} },
"\\wp": { glyph: 2190, arity: 0, flags: {} },
"\\therefore": { glyph: 740, arity: 0, flags: {} },
"\\mid": { glyph: 2229, arity: 0, flags: {} },
"\\sum": { glyph: 2402, arity: 0, flags: { big: !0 } },
"\\prod": { glyph: 2401, arity: 0, flags: { big: !0 } },
"\\bigoplus": { glyph: 2284, arity: 0, flags: { big: !0 } },
"\\bigodot": { glyph: 2281, arity: 0, flags: { big: !0 } },
"\\int": { glyph: 2412, arity: 0, flags: { yfl: !0 } },
"\\oint": { glyph: 2269, arity: 0, flags: { yfl: !0 } },
"\\oplus": { glyph: 1284, arity: 0, flags: {} },
"\\odot": { glyph: 1281, arity: 0, flags: {} },
"\\perp": { glyph: 738, arity: 0, flags: {} },
"\\angle": { glyph: 739, arity: 0, flags: {} },
"\\triangle": { glyph: 842, arity: 0, flags: {} },
"\\Box": { glyph: 841, arity: 0, flags: {} },
"\\rightarrow": { glyph: 2261, arity: 0, flags: {} },
"\\to": { glyph: 2261, arity: 0, flags: {} },
"\\leftarrow": { glyph: 2263, arity: 0, flags: {} },
"\\gets": { glyph: 2263, arity: 0, flags: {} },
"\\circ": { glyph: 902, arity: 0, flags: {} },
"\\bigcirc": { glyph: 904, arity: 0, flags: {} },
"\\bullet": { glyph: 828, arity: 0, flags: {} },
"\\star": { glyph: 856, arity: 0, flags: {} },
"\\diamond": { glyph: 743, arity: 0, flags: {} },
"\\ast": { glyph: 728, arity: 0, flags: {} },
/*verbatim symbols*/
"\\log": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\ln": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\exp": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\mod": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\lim": { glyph: 0, arity: 0, flags: { txt: !0, big: !0 } },
"\\sin": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\cos": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\tan": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\csc": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\sec": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\cot": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\sinh": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\cosh": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\tanh": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\csch": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\sech": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\coth": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\arcsin": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\arccos": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\arctan": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\arccsc": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\arcsec": { glyph: 0, arity: 0, flags: { txt: !0 } },
"\\arccot": { glyph: 0, arity: 0, flags: { txt: !0 } },
/*font modes*/
"\\text": { glyph: 0, arity: 1, flags: {} },
"\\mathnormal": { glyph: 0, arity: 1, flags: {} },
"\\mathrm": { glyph: 0, arity: 1, flags: {} },
"\\mathit": { glyph: 0, arity: 1, flags: {} },
"\\mathbf": { glyph: 0, arity: 1, flags: {} },
"\\mathsf": { glyph: 0, arity: 1, flags: {} },
"\\mathtt": { glyph: 0, arity: 1, flags: {} },
"\\mathfrak": { glyph: 0, arity: 1, flags: {} },
"\\mathcal": { glyph: 0, arity: 1, flags: {} },
"\\mathbb": { glyph: 0, arity: 1, flags: {} },
"\\mathscr": { glyph: 0, arity: 1, flags: {} },
"\\rm": { glyph: 0, arity: 1, flags: {} },
"\\it": { glyph: 0, arity: 1, flags: {} },
"\\bf": { glyph: 0, arity: 1, flags: {} },
"\\sf": { glyph: 0, arity: 1, flags: {} },
"\\tt": { glyph: 0, arity: 1, flags: {} },
"\\frak": { glyph: 0, arity: 1, flags: {} },
"\\cal": { glyph: 0, arity: 1, flags: {} },
"\\bb": { glyph: 0, arity: 1, flags: {} },
"\\scr": { glyph: 0, arity: 1, flags: {} },
"\\quad": { glyph: 0, arity: 0, flags: {} },
"\\,": { glyph: 0, arity: 0, flags: {} },
"\\.": { glyph: 0, arity: 0, flags: {} },
"\\;": { glyph: 0, arity: 0, flags: {} },
"\\!": { glyph: 0, arity: 0, flags: {} },
/*greek letters*/
"\\alpha": { glyph: 2127, flags: {} },
"\\beta": { glyph: 2128, flags: {} },
"\\gamma": { glyph: 2129, flags: {} },
"\\delta": { glyph: 2130, flags: {} },
"\\varepsilon": { glyph: 2131, flags: {} },
"\\zeta": { glyph: 2132, flags: {} },
"\\eta": { glyph: 2133, flags: {} },
"\\vartheta": { glyph: 2134, flags: {} },
"\\iota": { glyph: 2135, flags: {} },
"\\kappa": { glyph: 2136, flags: {} },
"\\lambda": { glyph: 2137, flags: {} },
"\\mu": { glyph: 2138, flags: {} },
"\\nu": { glyph: 2139, flags: {} },
"\\xi": { glyph: 2140, flags: {} },
"\\omicron": { glyph: 2141, flags: {} },
"\\pi": { glyph: 2142, flags: {} },
"\\rho": { glyph: 2143, flags: {} },
"\\sigma": { glyph: 2144, flags: {} },
"\\tau": { glyph: 2145, flags: {} },
"\\upsilon": { glyph: 2146, flags: {} },
"\\varphi": { glyph: 2147, flags: {} },
"\\chi": { glyph: 2148, flags: {} },
"\\psi": { glyph: 2149, flags: {} },
"\\omega": { glyph: 2150, flags: {} },
"\\epsilon": { glyph: 2184, flags: {} },
"\\theta": { glyph: 2185, flags: {} },
"\\phi": { glyph: 2186, flags: {} },
"\\varsigma": { glyph: 2187, flags: {} },
"\\Alpha": { glyph: 2027, flags: {} },
"\\Beta": { glyph: 2028, flags: {} },
"\\Gamma": { glyph: 2029, flags: {} },
"\\Delta": { glyph: 2030, flags: {} },
"\\Epsilon": { glyph: 2031, flags: {} },
"\\Zeta": { glyph: 2032, flags: {} },
"\\Eta": { glyph: 2033, flags: {} },
"\\Theta": { glyph: 2034, flags: {} },
"\\Iota": { glyph: 2035, flags: {} },
"\\Kappa": { glyph: 2036, flags: {} },
"\\Lambda": { glyph: 2037, flags: {} },
"\\Mu": { glyph: 2038, flags: {} },
"\\Nu": { glyph: 2039, flags: {} },
"\\Xi": { glyph: 2040, flags: {} },
"\\Omicron": { glyph: 2041, flags: {} },
"\\Pi": { glyph: 2042, flags: {} },
"\\Rho": { glyph: 2043, flags: {} },
"\\Sigma": { glyph: 2044, flags: {} },
"\\Tau": { glyph: 2045, flags: {} },
"\\Upsilon": { glyph: 2046, flags: {} },
"\\Phi": { glyph: 2047, flags: {} },
"\\Chi": { glyph: 2048, flags: {} },
"\\Psi": { glyph: 2049, flags: {} },
"\\Omega": { glyph: 2050, flags: {} }
};
function SR(i, t = "math") {
const R = i.charCodeAt(0);
if (65 <= R && R <= 90) {
const e = R - 65;
return t == "text" || t == "rm" ? e + 2001 : t == "tt" ? e + 501 : t == "bf" || t == "bb" ? e + 3001 : t == "sf" ? e + 2501 : t == "frak" ? e + 3301 : t == "scr" || t == "cal" ? e + 2551 : e + 2051;
}
if (97 <= R && R <= 122) {
const e = R - 97;
return t == "text" || t == "rm" ? e + 2101 : t == "tt" ? e + 601 : t == "bf" || t == "bb" ? e + 3101 : t == "sf" ? e + 2601 : t == "frak" ? e + 3401 : t == "scr" || t == "cal" ? e + 2651 : e + 2151;
}
if (48 <= R && R <= 57) {
const e = R - 48;
return t == "it" ? e + 2750 : t == "bf" ? e + 3200 : t == "tt" ? e + 700 : e + 2200;
}
return {
".": 2210,
",": 2211,
":": 2212,
";": 2213,
"!": 2214,
"?": 2215,
"'": 2216,
'"': 2217,
"*": 2219,
"/": 2220,
"-": 2231,
"+": 2232,
"=": 2238,
"<": 2241,
">": 2242,
"~": 2246,
"@": 2273,
"\\": 804
}[i];
}
const ct = {
SUB_SUP_SCALE: 0.5,
SQRT_MAG_SCALE: 0.5,
FRAC_SCALE: 0.85,
LINE_SPACING: 0.5,
FRAC_SPACING: 0.4
};
function De(i) {
i = i.replace(/\n/g, " ");
let t = 0;
const R = [];
let e = "";
for (; t < i.length; )
i[t] == " " ? e.length && (R.push(e), e = "") : i[t] == "\\" ? e.length == 1 && e[0] == "\\" ? (e += i[t], R.push(e), e = "") : (e.length && R.push(e), e = i[t]) : /[A-Za-z0-9\.]/.test(i[t]) ? e += i[t] : (e.length && e != "\\" && (R.push(e), e = ""), e += i[t], R.push(e), e = ""), t++;
return e.length && R.push(e), R;
}
function fe(i) {
return {
type: x[i] ? "symb" : "char",
mode: "math",
text: i,
chld: [],
// @ts-ignore
bbox: null
};
}
function IR(i) {
let t = 0, R = {
type: "node",
text: "",
mode: "math",
chld: [],
// @ts-ignore
bbox: null
};
function e() {
if (i[t] != "[")
return null;
let n = 0, s = t;
for (; s < i.length; ) {
if (i[s] == "[")
n++;
else if (i[s] == "]" && (n--, !n))
break;
s++;
}
const r = IR(i.slice(t + 1, s));
return t = s, r;
}
function o(n) {
let s = t, r = s, l = 0, a = 0;
const O = [];
for (; s < i.length; ) {
if (i[s] == "{")
l || (r = s), l++;
else if (i[s] == "}") {
if (l--, !l && (O.push(IR(i.slice(r + 1, s))), a++, a == n))
break;
} else if (l == 0 && (O.push(fe(i[s])), a++, a == n))
break;
s++;
}
return t = s, O;
}
for (t = 0; t < i.length; t++) {
const n = x[i[t]], s = {
type: "",
text: i[t],
mode: "math",
chld: [],
// @ts-ignore
bbox: null
};
if (n)
if (n.arity) {
t++, s.type = "func";
let r = null;
n.flags.opt && (r = e(), r && t++);
const l = o(n.arity);
s.chld = l, r && s.chld.push(r);
} else
s.type = "symb";
else
i[t] == "{" ? (s.type = "node", s.text = "", s.chld = o(1)) : s.type = "char";
R.chld.push(s);
}
return R.chld.length == 1 && (R = R.chld[0]), R;
}
function se(i) {
let t = 0;
for (; t < i.length; ) {
if (i[t].text == "\\begin") {
let R;
for (R = t; R < i.length && i[R].text != "\\end"; R++)
;
const e = i.splice(t + 1, R - (t + 1));
se(e), i[t].text = i[t].chld[0].text, i[t].chld = e, i.splice(t + 1, 1);
}
t++;
}
}
function Lt(i, t, R, e, o, n) {
if (R == null && (R = t), !!i.bbox) {
n && (i.bbox.x *= t, i.bbox.y *= R), i.bbox.w *= t, i.bbox.h *= R;
for (let s = 0; s < i.chld.length; s++)
Lt(i.chld[s], t, R, 0, 0, !0);
i.bbox.x += e, i.bbox.y += o;
}
}
function oe(i) {
let t = 1 / 0, R = -1 / 0, e = 1 / 0, o = -1 / 0;
for (let n = 0; n < i.length; n++)
i[n].bbox && (t = Math.min(t, i[n].bbox.x), e = Math.min(e, i[n].bbox.y), R = Math.max(R, i[n].bbox.x + i[n].bbox.w), o = Math.max(o, i[n].bbox.y + i[n].bbox.h));
return { x: t, y: e, w: R - t, h: o - e };
}
function He(i) {
if (!i.length)
return null;
const t = oe(i);
for (let e = 0; e < i.length; e++)
i[e].bbox && (i[e].bbox.x -= t.x, i[e].bbox.y -= t.y);
return {
type: "node",
text: "",
mode: "math",
chld: i,
bbox: t
};
}
function Ge(i, t = "center") {
for (let a = 0; a < i.length; a++)
if (i[a].text == "^" || i[a].text == "'") {
let O = 0, M = a;
for (; M > 0 && (i[M].text == "^" || i[M].text == "_" || i[M].text == "'"); )
M--;
O = i[M].bbox.y, i[a].text == "'" ? i[a].bbox.y = O : (Lt(i[a], ct.SUB_SUP_SCALE, null, 0, 0), x[i[M].text] && x[i[M].text].flags.big ? i[a].bbox.y = O - i[a].bbox.h : i[M].text == "\\int" ? i[a].bbox.y = O : i[a].bbox.y = O - i[a].bbox.h / 2);
} else if (i[a].text == "_") {
let O = 1, M = a;
for (; M > 0 && (i[M].text == "^" || i[M].text == "_" || i[M].text == "'"); )
M--;
O = i[M].bbox.y + i[M].bbox.h, Lt(i[a], ct.SUB_SUP_SCALE, null, 0, 0), x[i[M].text] && x[i[M].text].flags.big ? i[a].bbox.y = O : i[M].text == "\\int" ? i[a].bbox.y = O - i[a].bbox.h : i[a].bbox.y = O - i[a].bbox.h / 2;
}
function R(a, O, M, X, P) {
let N = a, u = P, h = 1 / 0, L = -1 / 0;
for (; X > 0 ? N < i.length : N >= 0; ) {
if (i[N].text == O)
u++;
else if (i[N].text == M) {
if (u--, u == 0)
break;
} else i[N].text == "^" || i[N].text == "_" || i[N].bbox && (h = Math.min(h, i[N].bbox.y), L = Math.max(L, i[N].bbox.y + i[N].bbox.h));
N += X;
}
return [h, L];
}
for (let a = 0; a < i.length; a++)
if (i[a].text == "\\left") {
const [O, M] = R(a, "\\left", "\\right", 1, 0);
O != 1 / 0 && M != -1 / 0 && (i[a].bbox.y = O, Lt(i[a], 1, (M - O) / i[a].bbox.h, 0, 0));
} else if (i[a].text == "\\right") {
const [O, M] = R(a, "\\right", "\\left", -1, 0);
O != 1 / 0 && M != -1 / 0 && (i[a].bbox.y = O, Lt(i[a], 1, (M - O) / i[a].bbox.h, 0, 0));
} else if (i[a].text == "\\middle") {
const [O, M] = R(a, "\\right", "\\left", -1, 1), [X, P] = R(a, "\\left", "\\right", 1, 1), N = Math.min(O, X), u = Math.max(M, P);
N != 1 / 0 && u != -1 / 0 && (i[a].bbox.y = N, Lt(i[a], 1, (u - N) / i[a].bbox.h, 0, 0));
}
if (!i.some((a) => a.text == "&" || a.text == "\\\\"))
return;
const e = [];
let o = [], n = [];
for (let a = 0; a < i.length; a++)
i[a].text == "&" ? (o.push(n), n = []) : i[a].text == "\\\\" ? (n.length && (o.push(n), n = []), e.push(o), o = []) : n.push(i[a]);
n.length && o.push(n), o.length && e.push(o);
const s = [], r = [];
for (let a = 0; a < e.length; a++) {
const O = [];
for (let M = 0; M < e[a].length; M++) {
const X = He(e[a][M]);
X && (s[M] = s[M] || 0, s[M] = Math.max(X.bbox.w + 1, s[M])), O[M] = X;
}
r.push(O);
}
const l = [];
for (let a = 0; a < r.length; a++) {
let O = 1 / 0, M = -1 / 0;
for (let X = 0; X < r[a].length; X++)
r[a][X] && (O = Math.min(O, r[a][X].bbox.y), M = Math.max(M, r[a][X].bbox.y + r[a][X].bbox.h));
l.push([O, M]);
}
for (let a = 0; a < l.length; a++)
(l[a][0] == 1 / 0 || l[a][1] == 1 / 0) && (l[a][0] = a == 0 ? 0 : l[a - 1][1], l[a][1] = l[a][0] + 2);
for (let a = 1; a < r.length; a++) {
const O = l[a - 1][1] - l[a][0] + ct.LINE_SPACING;
for (let M = 0; M < r[a].length; M++)
r[a][M] && (r[a][M].bbox.y += O);
l[a][0] += O, l[a][1] += O;
}
i.splice(0, i.length);
for (let a = 0; a < r.length; a++) {
let O = 0;
for (let M = 0; M < r[a].length; M++) {
const X = r[a][M];
if (!X) {
O += s[M];
continue;
}
X.bbox.x += O, O += s[M] - X.bbox.w, t == "center" ? X.bbox.x += (s[M] - X.bbox.w) / 2 : t == "left" || (t == "right" || t == "equation" && M != r[a].length - 1) && (X.bbox.x += s[M] - X.bbox.w), i.push(X);
}
}
}
function ft(i, t = "math") {
const R = {
"\\text": "text",
"\\mathnormal": "math",
"\\mathrm": "rm",
"\\mathit": "it",
"\\mathbf": "bf",
"\\mathsf": "sf",
"\\mathtt": "tt",
"\\mathfrak": "frak",
"\\mathcal": "cal",
"\\mathbb": "bb",
"\\mathscr": "scr",
"\\rm": "rm",
"\\it": "it",
"\\bf": "bf",
"\\sf": "tt",
"\\tt": "tt",
"\\frak": "frak",
"\\cal": "cal",
"\\bb": "bb",
"\\scr": "scr"
}[i.text] ?? t;
if (!i.chld.length) {
if (x[i.text])
if (x[i.text].flags.big)
i.text == "\\lim" ? i.bbox = { x: 0, y: 0, w: 3.5, h: 2 } : i.bbox = { x: 0, y: -0.5, w: 3, h: 3 };
else if (x[i.text].flags.txt) {
let e = 0;
for (let o = 1; o < i.text.length; o++)
e += vt(SR(i.text[o], "text")).w;
e /= 16, i.bbox = { x: 0, y: 0, w: e, h: 2 };
} else if (x[i.text].glyph) {
let e = vt(x[i.text].glyph).w;
e /= 16, i.text == "\\int" || i.text == "\\oint" ? i.bbox = { x: 0, y: -1.5, w: e, h: 5 } : i.bbox = { x: 0, y: 0, w: e, h: 2 };
} else
i.bbox = { x: 0, y: 0, w: 1, h: 2 };
else {
let e = 0;
for (let o = 0; o < i.text.length; o++)
vt(SR(i.text[o], R)) && (R == "tt" ? e += 16 : e += vt(SR(i.text[o], R)).w);
e /= 16, i.bbox = { x: 0, y: 0, w: e, h: 2 };
}
i.mode = R;
return;
}
if (i.text == "\\frac") {
const e = i.chld[0], o = i.chld[1], n = ct.FRAC_SCALE;
ft(e), ft(o), e.bbox.x = 0, e.bbox.y = 0, o.bbox.x = 0, o.bbox.y = 0;
const s = Math.max(e.bbox.w, o.bbox.w) * n;
Lt(e, n, null, (s - e.bbox.w * n) / 2, 0), Lt(
o,
n,
// @ts-ignore
null,
(s - o.bbox.w * n) / 2,
e.bbox.h + ct.FRAC_SPACING
), i.bbox = {
x: 0,
y: -e.bbox.h + 1 - ct.FRAC_SPACING / 2,
w: s,
h: e.bbox.h + o.bbox.h + ct.FRAC_SPACING
};
} else if (i.text == "\\binom") {
const e = i.chld[0], o = i.chld[1];
ft(e), ft(o), e.bbox.x = 0, e.bbox.y = 0, o.bbox.x = 0, o.bbox.y = 0;
const n = Math.max(e.bbox.w, o.bbox.w);
Lt(e, 1, null, (n - e.bbox.w) / 2 + 1, 0), Lt(o, 1, null, (n - o.bbox.w) / 2 + 1, e.bbox.h), i.bbox = { x: 0, y: -e.bbox.h + 1, w: n + 2, h: e.bbox.h + o.bbox.h };
} else if (i.text == "\\sqrt") {
const e = i.chld[0];
ft(e);
const o = i.chld[1];
let n = 0;
o && (ft(o), n = Math.max(o.bbox.w * ct.SQRT_MAG_SCALE - 0.5, 0), Lt(o, ct.SQRT_MAG_SCALE, null, 0, 0.5)), Lt(e, 1, null, 1 + n, 0.5), i.bbox = {
x: 0,
y: 2 - e.bbox.h - 0.5,
w: e.bbox.w + 1 + n,
h: e.bbox.h + 0.5
};
} else if (x[i.text] && x[i.text].flags.hat) {
const e = i.chld[0];
ft(e);
const o = e.bbox.y - 0.5;
e.bbox.y = 0.5, i.bbox = { x: 0, y: o, w: e.bbox.w, h: e.bbox.h + 0.5 };
} else if (x[i.text] && x[i.text].flags.mat) {
const e = i.chld[0];
ft(e), i.bbox = { x: 0, y: 0, w: e.bbox.w, h: e.bbox.h + 0.5 };
} else {
let e = 0, o = 0, n = 1;
for (let M = 0; M < i.chld.length; M++) {
const X = i.chld[M], P = {
"\\quad": 2,
"\\,": 2 * 3 / 18,
"\\:": 2 * 4 / 18,
"\\;": 2 * 5 / 18,
"\\!": 2 * -3 / 18
}[X.text] ?? null;
if (X.text == "\\\\") {
o += n, e = 0, n = 1;
continue;
} else {
if (X.text == "&")
continue;
if (P != null) {
e += P;
continue;
} else {
if (ft(X, R), Lt(X, 1, null, e, o), X.text == "^" || X.text == "_" || X.text == "'") {
let N = M;
for (; N > 0 && (i.chld[N].text == "^" || i.chld[N].text == "_" || i.chld[N].text == "'"); )
N--;
const u = x[i.chld[N].text] && x[i.chld[N].text].flags.big;
if (X.text == "'") {
let h = N + 1, L = 0;
for (; h < M; )
i.chld[h].text == "'" && L++, h++;
X.bbox.x = i.chld[N].bbox.x + i.chld[N].bbox.w + X.bbox.w * L, e = Math.max(e, X.bbox.x + X.bbox.w);
} else if (u) {
const h = i.chld[N].bbox.x + (i.chld[N].bbox.w - X.bbox.w * ct.SUB_SUP_SCALE) / 2;
X.bbox.x = h, e = Math.max(
e,
i.chld[N].bbox.x + i.chld[N].bbox.w + (X.bbox.w * ct.SUB_SUP_SCALE - i.chld[N].bbox.w) / 2
);
} else
X.bbox.x = i.chld[N].bbox.x + i.chld[N].bbox.w, e = Math.max(e, X.bbox.x + X.bbox.w * ct.SUB_SUP_SCALE);
} else
e += X.bbox.w;
t == "text" && (e += 1), n = Math.max(X.bbox.y + X.bbox.h - o, n);
}
}
}
o += n;
const s = {
bmatrix: ["[", "]"],
pmatrix: ["(", ")"],
Bmatrix: ["\\{", "\\}"],
cases: ["\\{"]
}, r = {
bmatrix: "center",
pmatrix: "center",
Bmatrix: "center",
cases: "left",
matrix: "center",
aligned: "equation"
}[i.text] ?? "left", l = !!s[i.text], a = !!s[i.text] && s[i.text].length > 1;
Ge(i.chld, r);
const O = oe(i.chld);
i.text == "\\text" && (O.x -= 1, O.w += 2);
for (let M = 0; M < i.chld.length; M++)
Lt(i.chld[M], 1, null, -O.x + (l ? 1.5 : 0), -O.y);
i.bbox = {
x: 0,
y: 0,
w: O.w + 1.5 * Number(l) + 1.5 * Number(a),
h: O.h
}, l && i.chld.unshift({
type: "symb",
text: s[i.text][0],
mode: i.mode,
chld: [],
bbox: { x: 0, y: 0, w: 1, h: O.h }
}), a && i.chld.push({
type: "symb",
text: s[i.text][1],
mode: i.mode,
chld: [],
bbox: { x: O.w + 2, y: 0, w: 1, h: O.h }
}), (l || a || i.text == "matrix") && (i.type = "node", i.text = "", i.bbox.y -= (i.bbox.h - 2) / 2);
}
}
function Je(i) {
function t(e, o, n) {
const s = [];
if (e.bbox) {
if (o += e.bbox.x, n += e.bbox.y, e.text == "\\frac") {
const r = e.chld[1].bbox.y - (e.chld[0].bbox.y + e.chld[0].bbox.h), l = {
type: "symb",
mode: e.mode,
text: "\\bar",
bbox: {
x: o,
y: n + (e.chld[1].bbox.y - r / 2) - r / 2,
w: e.bbox.w,
h: r
},
chld: []
};
s.push(l);
} else if (e.text == "\\sqrt") {
const r = e.chld[0].bbox.y, l = Math.max(
0,
e.chld[0].bbox.x - e.chld[0].bbox.h / 2
), a = {
type: "symb",
mode: e.mode,
text: "\\sqrt",
bbox: {
x: o + l,
y: n + r / 2,
w: e.chld[0].bbox.x - l,
h: e.bbox.h - r / 2
},
chld: []
};
s.push(a), s.push({
type: "symb",
text: "\\bar",
mode: e.mode,
bbox: {
x: o + e.chld[0].bbox.x,
y: n,
w: e.bbox.w - e.chld[0].bbox.x,
h: r
},
chld: []
});
} else if (e.text == "\\binom") {
const r = Math.min(e.chld[0].bbox.x, e.chld[1].bbox.x), l = {
type: "symb",
mode: e.mode,
text: "(",
bbox: {
x: o,
y: n,
w: r,
h: e.bbox.h
},
chld: []
};
s.push(l), s.push({
type: "symb",
text: ")",
mode: e.mode,
bbox: {
x: o + e.bbox.w - r,
y: n,
w: r,
h: e.bbox.h
},
chld: []
});
} else if (x[e.text] && x[e.text].flags.hat) {
const r = e.chld[0].bbox.y, l = {
type: "symb",
mode: e.mode,
text: e.text,
bbox: {
x: o,
y: n,
w: e.bbox.w,
h: r
},
chld: []
};
s.push(l);
} else if (x[e.text] && x[e.text].flags.mat) {
const r = e.chld[0].bbox.h, l = {
type: "symb",
text: e.text,
mode: e.mode,
bbox: {
x: o,
y: n + r,
w: e.bbox.w,
h: e.bbox.h - r
},
chld: []
};
s.push(l);
} else if (e.type != "node" && e.text != "^" && e.text != "_") {
const r = {
type: e.type == "func" ? "symb" : e.type,
text: e.text,
mode: e.mode,
bbox: {
x: o,
y: n,
w: e.bbox.w,
h: e.bbox.h
},
chld: []
};
s.push(r);
}
}
for (let r = 0; r < e.chld.length; r++) {
const l = t(e.chld[r], o, n);
s.push(...l);
}
return s;
}
const R = t(i, -i.bbox.x, -i.bbox.y);
i.type = "node", i.text = "", i.chld = R;
}
function pe(i) {
const t = [];
for (let R = 0; R < i.chld.length; R++) {
const e = i.chld[R];
let o = e.bbox.h / 2, n = !1;
if (x[e.text] && x[e.text].flags.hat && !x[e.text].flags.xfl && !x[e.text].flags.yfl && (o *= 4, n = !0), x[e.text] && x[e.text].glyph) {
const s = vt(x[e.text].glyph);
for (let r = 0; r < s.polylines.length; r++) {
const l = [];
for (let a = 0; a < s.polylines[r].length; a++) {
let O = s.polylines[r][a][0], M = s.polylines[r][a][1];
if (x[e.text].flags.xfl)
O = (O - s.xmin) / Math.max(s.xmax - s.xmin, 1) * e.bbox.w, O += e.bbox.x;
else if (s.w / 16 * o > e.bbox.w)
O = O / Math.max(s.w, 1) * e.bbox.w, O += e.bbox.x;
else {
O = O / 16 * o;
const X = (e.bbox.w - s.w / 16 * o) / 2;
O += e.bbox.x + X;
}
if (x[e.text].flags.yfl)
M = (M - s.ymin) / Math.max(s.ymax - s.ymin, 1) * e.bbox.h, M += e.bbox.y;
else {
if (M = M / 16 * o, n) {
const X = (s.ymax + s.ymin) / 2;
M -= X / 16 * o;
}
M += e.bbox.y + e.bbox.h / 2;
}
l.push([O, M]);
}
t.push(l);
}
} else if (x[e.text] && x[e.text].flags.txt || e.type == "char") {
let s = e.bbox.x;
const r = !!(x[e.text] && x[e.text].flags.txt);
for (let l = Number(r); l < e.text.length; l++) {
const a = vt(SR(e.text[l], r ? "text" : e.mode));
if (!a) {
console.warn("unmapped character: " + e.text[l]);
continue;
}
for (let O = 0; O < a.polylines.length; O++) {
const M = [];
for (let X = 0; X < a.polylines[O].length; X++) {
let P = a.polylines[O][X][0], N = a.polylines[O][X][1];
P /= 16, N /= 16, P *= o, N *= o, e.mode == "tt" && (a.w > 16 ? P *= 16 / a.w : P += (16 - a.w) / 2 / 16), P += s, N += e.bbox.y + e.bbox.h / 2, M.push([P, N]);
}
t.push(M);
}
e.mode == "tt" ? s += o : s += a.w / 16 * o;
}
}
}
return t;
}
function Dt(i) {
return Math.round(i * 100) / 100;
}
class _R {
constructor(t) {
F(this, "_latex");
F(this, "_tree");
F(this, "_tokens");
F(this, "_polylines");
this._latex = t, this._tokens = De(t), this._tree = IR(this._tokens), se(this._tree.chld), ft(this._tree), Je(this._tree), this._polylines = pe(this._tree);
}
resolveScale(t) {
if (t == null)
return [16, 16, 16, 16];
let R = t.SCALE_X ?? 16, e = t.SCALE_Y ?? 16;
if (t.MIN_CHAR_H != null) {
let s = 0;
for (let l = 0; l < this._tree.chld.length; l++) {
const a = this._tree.chld[l];
(a.type == "char" || x[a.text] && (x[a.text].flags.txt || !Object.keys(x[a.text].flags).length)) && (s = Math.min(a.bbox.h, s));
}
const r = Math.max(1, t.MIN_CHAR_H / s);
R *= r, e *= r;
}
if (t.MAX_W != null) {
const s = R;
R = Math.min(R, t.MAX_W / this._tree.bbox.w), e *= R / s;
}
if (t.MAX_H != null) {
const s = e;
e = Math.min(e, t.MAX_H / this._tree.bbox.h), R *= e / s;
}
const o = t.MARGIN_X ?? R, n = t.MARGIN_Y ?? e;
return [o, n, R, e];
}
polylines(t) {
t || (t = {});
const R = [], [e, o, n, s] = this.resolveScale(t);
for (let r = 0; r < this._polylines.length; r++) {
R.push([]);
for (let l = 0; l < this._polylines[r].length; l++) {
const [a, O] = this._polylines[r][l];
R[R.length - 1].push([e + a * n, o + O * s]);
}
}
return R;
}
pathd(t) {
t || (t = {});
let R = "";
const [e, o, n, s] = this.resolveScale(t);
for (let r = 0; r < this._polylines.length; r++)
for (let l = 0; l < this._polylines[r].length; l++) {
const [a, O] = this._polylines[r][l];
R += l ? "L" : "M", R += `${Dt(e + a * n)} ${Dt(o + O * s)}`;
}
return R;
}
svg(t) {
t || (t = {});
const [R, e, o, n] = this.resolveScale(t), s = Dt(this._tree.bbox.w * o + R * 2), r = Dt(this._tree.bbox.h * n + e * 2);
let l = `<svg
xmlns="http://www.w3.org/2000/svg"
width="${s}" height="${r}"
fill="none" stroke="${t.FG_COLOR ?? "black"}" stroke-width="${t.STROKE_W ?? 1}"
stroke-linecap="round" stroke-linejoin="round"
>`;
t.BG_COLOR && (l += `<rect x="0" y="0" width="${s}" height="${r}" fill="${t.BG_COLOR}" stroke="none"></rect>`), l += '<path d="';
for (let a = 0; a < this._polylines.length; a++) {
l += "M";
for (let O = 0; O < this._polylines[a].length; O++) {
const [M, X] = this._polylines[a][O];
l += Dt(R + M * o) + " " + Dt(e + X * n) + " ";
}
}
return l += '"/>', l += "</svg>", {
// btoa (global since Node 16) works in both browser and Node;
// window.btoa would crash this LaTeX path in the Node bundle.
svg: `data:image/svg+xml;base64,${btoa(l)}`,
width: Math.ceil(s),
height: Math.ceil(r)
};
}
pdf(t) {
t || (t = {});
const [R, e, o, n] = this.resolveScale(t), s = Dt(this._tree.bbox.w * o + R * 2), r = Dt(this._tree.bbox.h * n + e * 2);
let l = `%PDF-1.1
%%¥±ë
1 0 obj
<< /Type /Catalog
/Pages 2 0 R
>>endobj
2 0 obj
<< /Type /Pages
/Kids [3 0 R]
/Count 1
/MediaBox [0 0 ${s} ${r}]
>>
endobj
3 0 obj
<< /Type /Page
/Parent 2 0 R
/Resources
<< /Font
<< /F1
<< /Type /Font
/Subtype /Type1
/BaseFont /Times-Roman
>>
>>
>>
/Contents [`, a = "", O = 4;
for (let M = 0; M < this._polylines.length; M++) {
a += `${O} 0 obj
<< /Length 0 >>
stream
1 j 1 J ${t.STROKE_W ?? 1} w
`;
for (let X = 0; X < this._polylines[M].length; X++) {
const [P, N] = this._polylines[M][X];
a += `${Dt(R + P * o)} ${Dt(r - (e + N * n))} ${X ? "l" : "m"} `;
}
a += `
S
endstream
endobj
`, l += `${O} 0 R `, O++;
}
return l += `]
>>
endobj
`, a += `
trailer
<< /Root 1 0 R
/Size 0
>>startxref
%%EOF
`, l + a;
}
boxes(t) {
t || (t = {});
const [R, e, o, n] = this.resolveScale(t), s = [];
for (let r = 0; r < this._tree.chld.length; r++) {
const { x: l, y: a, w: O, h: M } = this._tree.chld[r].bbox;
s.push({ x: R + l * o, y: e + a * n, w: O * o, h: M * n });
}
return s;
}
box(t) {
t || (t = {});
const [R, e, o, n] = this.resolveScale(t);
return {
x: R + this._tree.bbox.x * o,
y: e + this._tree.bbox.y * n,
w: this._tree.bbox.w * o,
h: this._tree.bbox.h * n
};
}
}
const ZR = {
SCALE_X: 10,
SCALE_Y: 10,
MARGIN_X: 0,
MARGIN_Y: 0
};
class YR extends ie {
static convertLaTextToSVG(t) {
return new _R(t).svg(ZR);
}
// Vector path data for the formula. Points live in the same [0..width] ×
// [0..height] space the SVG export used, so a formula's intrinsic size is
// identical whether it is rasterized or drawn directly.
static convertLaTextToPolylines(t) {
const R = new _R(t), e = R.box(ZR);
return {
polylines: R.polylines(ZR),
width: Math.ceil(e.w),
height: Math.ceil(e.h)
};
}
render(t, R, e, o) {
const { scale: n } = this.options, s = R.width * n, r = R.height * n;
t.clearRect(e, o, s, r);
const { polylines: l, width: a, height: O } = YR.convertLaTextToPolylines(R.value);
if (!l.length || !a || !O) return;
const M = s / a, X = r / O;
t.save(), t.beginPath(), t.strokeStyle = R.color || "black", t.lineWidth = M, t.lineCap = "round", t.lineJoin = "round";
for (let P = 0; P < l.length; P++) {
const N = l[P];
for (let u = 0; u < N.length; u++) {
const h = e + N[u][0] * M, L = o + N[u][1] * X;
u === 0 ? t.moveTo(h, L) : t.lineTo(h, L);
}
}
t.stroke(), t.restore();
}
}
const ne = ["rowFlex", "rowMargin"], be = [
"type",
"font",
"size",
"bold",
"color",
"italic",
"highlight",
"underline",
"strikeout",
"rowFlex",
"rowMargin",
"dashArray",
"trList",
"tableToolDisabled",
"borderType",
"borderColor",
"translateX",
"width",
"height",
"url",
"colgroup",
"valueList",
"control",
"checkbox",
"radio",
"dateFormat",
"block",
"level",
"title",
"listType",
"listStyle",
"listWrap",
"groupIds",
"conceptId",
"imgDisplay",
"imgFloatPosition",
"imgCrop",
"imgCaption",
"textDecoration",
"extension",
"externalId",
"areaId",
"area",
"hide",
"label",
"labelId",
"lineWidth"
], me = [
"conceptId",
"extension",
"externalId",
"verticalAlign",
"backgroundColor",
"borderTypes",
"slashTypes",
"disabled",
"deletable"
], Ee = ["areaId", "area"], Ce = [
"tdId",
"trId",
"tableId"
], we = [
"level",
"titleId",
"title"
], ye = [
"listId",
"listType",
"listStyle"
], ae = [
"font",
"size",
"bold",
"highlight",
"italic",
"strikeout"
], xe = [
...Ce,
...we,
...ye,
...Ee
], pR = [
V.TEXT,
V.HYPERLINK,
V.SUBSCRIPT,
V.SUPERSCRIPT,
V.CONTROL,
V.DATE
];
V.IMAGE, V.LATEX;
const Be = [
V.BLOCK,
V.PAGE_BREAK,
V.SEPARATOR,
V.TABLE
];
V.TITLE, V.LIST;
var hR = /* @__PURE__ */ ((i) => (i.UL = "ul", i.OL = "ol", i))(hR || {}), Ht = /* @__PURE__ */ ((i) => (i.DISC = "disc", i.CIRCLE = "circle", i.SQUARE = "square", i.CHECKBOX = "checkbox", i))(Ht || {}), Vt = /* @__PURE__ */ ((i) => (i.DISC = "disc", i.CIRCLE = "circle", i.SQUARE = "square", i.DECIMAL = "decimal", i.CHECKBOX = "checkbox", i))(Vt || {});
const _e = {
inheritStyle: !1
}, AR = {
[Ht.DISC]: "•",
[Ht.CIRCLE]: "◦",
[Ht.SQUARE]: "▫︎",
[Ht.CHECKBOX]: "☑️"
};
hR.OL + "", hR.UL + "";
Vt.DISC + "", Vt.CIRCLE + "", Vt.SQUARE + "", Vt.DECIMAL + "", Vt.CHECKBOX + "";
const Ae = {
first: "defaultFirstSize",
second: "defaultSecondSize",
third: "defaultThirdSize",
fourth: "defaultFourthSize",
fifth: "defaultFifthSize",
sixth: "defaultSixthSize"
}, ve = {
defaultFirstSize: 22,
defaultSecondSize: 18,
defaultThirdSize: 16,
defaultFourthSize: 14,
defaultFifthSize: 12,
defaultSixthSize: 11
};
var nR = /* @__PURE__ */ ((i) => (i.ALL = "all", i.EMPTY = "empty", i.EXTERNAL = "external", i.INTERNAL = "internal", i.DASH = "dash", i))(nR || {}), aR = /* @__PURE__ */ ((i) => (i.TOP = "top", i.RIGHT = "right", i.BOTTOM = "bottom", i.LEFT = "left", i))(aR || {}), DR = /* @__PURE__ */ ((i) => (i.FORWARD = "forward", i.BACK = "back", i))(DR || {});
function vR(i) {
const t = [];
for (let R = 0; R < i.length; R++) {
const e = i[R], o = wt(e.value);
for (let n = 0; n < o.length; n++)
t.push({ ...e, value: o[n] });
}
return t;
}
async function Ct(i, t) {
var r, l;
const {
isHandleFirstElement: R = !0,
isForceCompensation: e = !1,
editorOptions: o
} = t, n = i[0];
(n == null ? void 0 : n.type) !== V.LIST && (e || R && (n != null && n.type && n.type !== V.TEXT || !cR.test(n == null ? void 0 : n.value))) && i.unshift({
value: q
});
let s = 0;
for (; s < i.length; ) {
let a = i[s];
if (a.type === V.TITLE) {
i.splice(s, 1);
const O = a.valueList || [];
if (Ct(O, {
...t,
isHandleFirstElement: !1,
isForceCompensation: !1
}), O.length) {
const M = Yt(), X = o.title;
for (let P = 0; P < O.length; P++) {
const N = O[P];
N.title = a.title, a.level && (N.titleId = M, N.level = a.level), ze(N) && (N.size || (N.size = X[Ae[N.level]]), N.bold === void 0 && (N.bold = !0)), i.splice(s, 0, N), s++;
}
}
s--;
} else if (a.type === V.LIST) {
i.splice(s, 1);
const O = a.valueList || [];
if (Ct(O, {
...t,
isHandleFirstElement: !0,
isForceCompensation: !1
}), O.length) {
const M = a.listId || Yt(), X = /* @__PURE__ */ new Map([[0, M]]);
for (let P = 0; P < O.length; P++) {
const N = O[P], u = N.listLevel ?? a.listLevel ?? 0;
N.listId || (N.listId = X.get(u) || Yt()), X.set(u, N.listId), Array.from(X.keys()).forEach((h) => {
h > u && X.delete(h);
}), N.listType = N.listType || a.listType, N.listStyle = N.listStyle || a.listStyle, N.listLevel = u, i.splice(s, 0, N), s++;
}
i[s] && ((r = i[s].valueList) != null && r.length ? !cR.test(i[s].valueList[0].value) : !cR.test(i[s].value)) && (i.splice(s, 0, {
value: q
}), s++);
}
s--;
} else if (a.type === V.AREA) {
i.splice(s, 1);
const O = (a == null ? void 0 : a.valueList) || [];
if (Ct(O, {
...t,
isHandleFirstElement: !0,
isForceCompensation: !0
}), O.length) {
const M = Yt();
for (let X = 0; X < O.length; X++) {
const P = O[X];
if (P.areaId = a.areaId || M, P.area = a.area, P.areaIndex = X, P.type === V.TABLE) {
const N = P.trList;
for (let u = 0; u < N.length; u++) {
const h = N[u];
for (let L = 0; L < h.tdList.length; L++) {
const S = h.tdList[L].value;
for (let W = 0; W < S.length; W++) {
const c = S[W];
c.areaId = a.areaId || M, c.area = a.area;
}
}
}
}
i.splice(s, 0, P), s++;
}
}
s--;
} else if (a.type === V.TABLE) {
const O = Yt();
if (a.id = O, a.trList) {
const {
table: { defaultTrMinHeight: M, defaultColMinWidth: X },
margins: P
} = o;
if (!((l = a.colgroup) != null && l.length) && a.trList.length) {
const N = a.trList[0].tdList.reduce(
(L, Y) => L + Y.colspan,
0
), u = o.width - P[1] - P[3], h = Math.max(u / N, X);
a.colgroup = [];
for (let L = 0; L < N; L++)
a.colgroup.push({ width: h });
}
for (let N = 0; N < a.trList.length; N++) {
const u = a.trList[N], h = Yt();
u.id = h, (!u.minHeight || u.minHeight < M) && (u.minHeight = M), u.height < u.minHeight && (u.height = u.minHeight);
for (let L = 0; L < u.tdList.length; L++) {
const Y = u.tdList[L], S = Yt();
Y.id = S, Ct(Y.value, {
...t,
isHandleFirstElement: !0,
isForceCompensation: !0
});
for (let W = 0; W < Y.value.length; W++) {
const c = Y.value[W];
c.tdId = S, c.trId = h, c.tableId = O;
}
}
}
}
} else if (a.type === V.HYPERLINK) {
i.splice(s, 1);
const O = vR(a.valueList || []);
if (O.length) {
const M = Yt();
for (let X = 0; X < O.length; X++) {
const P = O[X];
P.type = a.type, P.url = a.url, P.hyperlinkId = M, i.splice(s, 0, P), s++;
}
}
s--;
} else if (a.type === V.DATE) {
i.splice(s, 1);
const O = vR(a.valueList || []);
if (O.length) {
const M = Yt();
for (let X = 0; X < O.length; X++) {
const P = O[X];
P.type = a.type, P.dateFormat = a.dateFormat, P.dateId = M, i.splice(s, 0, P), s++;
}
}
s--;
} else if (a.type === V.CONTROL) {
if (!a.control) {
s++;
continue;
}
const { prefix: O, postfix: M, value: X, placeholder: P, code: N, type: u, valueSets: h } = a.control, {
editorOptions: {
control: L,
checkbox: Y,
radio: S
}
} = t, W = Yt();
i.splice(s, 1);
const c = LR(a, [
...xe,
...ne
]), T = LR(
a.control,
ae
), H = {
...T,
color: o.control.bracketColor
}, f = wt(O || L.prefix);
for (let K = 0; K < f.length; K++) {
const Z = f[K];
i.splice(s, 0, {
...c,
...H,
controlId: W,
value: Z,
type: a.type,
control: a.control,
controlComponent: j.PREFIX
}), s++;
}
if (X && X.length || u === Bt.CHECKBOX || u === Bt.RADIO || u === Bt.SELECT && N && (!X || !X.length)) {
let K = X ? mt(X) : [];
if (u === Bt.CHECKBOX) {
const Z = N ? N.split(",") : [];
if (Array.isArray(h) && h.length) {
const U = K.reduce(
(p, g) => p.concat(
g.value.split("").map((J) => ({ ...g, value: J }))
),
[]
);
let I = 0;
for (let p = 0; p < h.length; p++) {
const g = h[p];
i.splice(s, 0, {
...c,
...T,
controlId: W,
value: "",
type: a.type,
control: a.control,
controlComponent: j.CHECKBOX,
checkbox: {
code: g.code,
value: Z.includes(g.code)
}
}), s++;
const J = wt(g.value);
for (let y = 0; y < J.length; y++) {
const v = J[y], B = y === J.length - 1;
i.splice(s, 0, {
...c,
...T,
...U[I],
controlId: W,
value: v === `
` ? q : v,
letterSpacing: B ? Y.gap : 0,
control: a.control,
controlComponent: j.VALUE
}), I++, s++;
}
}
}
} else if (u === Bt.RADIO) {
if (Array.isArray(h) && h.length) {
const Z = K.reduce(
(I, p) => I.concat(
p.value.split("").map((g) => ({ ...p, value: g }))
),
[]
);
let U = 0;
for (let I = 0; I < h.length; I++) {
const p = h[I];
i.splice(s, 0, {
...c,
...T,
controlId: W,
value: "",
type: a.type,
control: a.control,
controlComponent: j.RADIO,
radio: {
code: p.code,
value: N === p.code
}
}), s++;
const g = wt(p.value);
for (let J = 0; J < g.length; J++) {
const y = g[J], v = J === g.length - 1;
i.splice(s, 0, {
...c,
...T,
...Z[U],
controlId: W,
value: y === `
` ? q : y,
letterSpacing: v ? S.gap : 0,
control: a.control,
controlComponent: j.VALUE
}), U++, s++;
}
}
}
} else {
if ((!X || !X.length) && Array.isArray(h) && h.length) {
const Z = h.find((U) => U.code === N);
Z && (K = [
{
value: Z.value
}
]);
}
Ct(K, {
...t,
isHandleFirstElement: !1,
isForceCompensation: !1
});
for (let Z = 0; Z < K.length; Z++) {
const U = K[Z], I = U.value;
i.splice(s, 0, {
...c,
...T,
...U,
controlId: W,
value: I === `
` ? q : I,
type: U.type || V.TEXT,
control: a.control,
controlComponent: j.VALUE
}), s++;
}
}
} else if (P) {
const K = {
...T,
color: o.control.placeholderColor
}, Z = wt(P);
for (let U = 0; U < Z.length; U++) {
const I = Z[U];
i.splice(s, 0, {
...c,
...K,
controlId: W,
value: I === `
` ? q : I,
type: a.type,
control: a.control,
controlComponent: j.PLACEHOLDER
}), s++;
}
}
const D = wt(M || L.postfix);
for (let K = 0; K < D.length; K++) {
const Z = D[K];
i.splice(s, 0, {
...c,
...H,
controlId: W,
value: Z,
type: a.type,
control: a.control,
controlComponent: j.POSTFIX
}), s++;
}
s--;
} else if ((!a.type || pR.includes(a.type)) && a.value.length > 1) {
i.splice(s, 1);
const O = wt(a.value);
for (let M = 0; M < O.length; M++)
i.splice(s + M, 0, { ...a, value: O[M] });
a = i[s];
}
if ((a.value === `
` || a.value == `\r
`) && (a.value = q), (a.type === V.IMAGE || a.type === V.BLOCK) && (a.id = Yt()), a.type === V.LATEX) {
const { width: O, height: M } = YR.convertLaTextToPolylines(a.value);
a.width = a.width || O, a.height = a.height || M, a.id = Yt();
}
s++;
}
}
function ke(i, t) {
const R = Object.keys(i), e = Object.keys(t);
if (R.length !== e.length) return !1;
for (let o = 0; o < R.length; o++) {
const n = R[o];
if (n !== "value" && !(n === "groupIds" && Array.isArray(i[n]) && Array.isArray(t[n]) && Qe(i[n], t[n])) && i[n] !== t[n])
return !1;
}
return !0;
}
function UR(i, t = {}) {
const { extraPickAttrs: R } = t, e = be;
R && e.push(...R);
const o = {
value: i.value === q ? `
` : i.value
};
return e.forEach((n) => {
const s = i[n];
s !== void 0 && (o[n] = s);
}), o;
}
function gt(i, t = {}) {
const { extraPickAttrs: R, isClassifyArea: e = !1 } = t, o = mt(i), n = [];
let s = 0;
for (; s < o.length; ) {
let r = o[s];
if (s === 0 && r.value === q && !r.listId && (!r.type || r.type === V.TEXT)) {
s++;
continue;
}
if (r.areaId) {
const a = r.areaId, O = r.area, M = [];
for (; s < o.length; ) {
const P = o[s];
if (a !== P.areaId) {
s--;
break;
}
delete P.area, delete P.areaId, M.push(P), s++;
}
const X = gt(M, t);
if (e) {
const P = {
type: V.AREA,
value: "",
areaId: a,
area: O
};
P.valueList = X, r = P;
} else {
n.splice(s, 0, ...X);
continue;
}
} else if (r.titleId && r.level) {
const a = r.titleId;
if (a) {
const O = r.level, M = {
type: V.TITLE,
title: r.title,
value: "",
level: O
}, X = [];
for (; s < o.length; ) {
const P = o[s];
if (a !== P.titleId) {
s--;
break;
}
delete P.level, delete P.title, X.push(P), s++;
}
M.valueList = gt(X, t), r = M;
}
} else if (r.listId && r.listType) {
const a = r.listId;
if (a) {
const O = r.listType, M = r.listStyle, X = {
type: V.LIST,
value: "",
listId: a,
listType: O,
listStyle: M
}, P = [];
for (; s < o.length; ) {
const N = o[s];
if (a !== N.listId) {
s--;
break;
}
delete N.listType, delete N.listStyle, P.push(N), s++;
}
X.valueList = gt(P, t), r = X;
}
} else if (r.type === V.TABLE) {
if (r.trList)
for (let a = 0; a < r.trList.length; a++) {
const O = r.trList[a];
delete O.id;
for (let M = 0; M < O.tdList.length; M++) {
const X = O.tdList[M], P = {
colspan: X.colspan,
rowspan: X.rowspan,
value: gt(X.value, {
...t,
isClassifyArea: !0
})
};
me.forEach((N) => {
const u = X[N];
u !== void 0 && (P[N] = u);
}), O.tdList[M] = P;
}
}
} else if (r.type === V.HYPERLINK) {
const a = r.hyperlinkId;
if (a) {
const O = {
type: V.HYPERLINK,
value: "",
url: r.url
}, M = [];
for (; s < o.length; ) {
const X = o[s];
if (a !== X.hyperlinkId) {
s--;
break;
}
delete X.type, delete X.url, M.push(X), s++;
}
O.valueList = gt(M, t), r = O;
}
} else if (r.type === V.DATE) {
const a = r.dateId;
if (a) {
const O = {
type: V.DATE,
value: "",
dateFormat: r.dateFormat
}, M = [];
for (; s < o.length; ) {
const X = o[s];
if (a !== X.dateId) {
s--;
break;
}
delete X.type, delete X.dateFormat, M.push(X), s++;
}
O.valueList = gt(M, t), r = O;
}
} else if (r.controlId) {
const a = r.controlId;
if (a) {
const O = LR(r, ae), M = {
...r.control,
...O
}, X = {
...LR(r, ne),
type: V.CONTROL,
value: "",
control: M,
controlId: a
}, P = [];
for (; s < o.length; ) {
const N = o[s];
if (a !== N.controlId) {
s--;
break;
}
N.controlComponent === j.VALUE && (delete N.control, delete N.controlId, P.push(N)), s++;
}
X.control.value = gt(P, t), r = UR(X, { extraPickAttrs: R });
}
}
const l = UR(r, { extraPickAttrs: R });
if (!r.type || r.type === V.TEXT || r.type === V.SUBSCRIPT || r.type === V.SUPERSCRIPT)
for (; s < o.length; ) {
const a = o[s + 1];
if (s++, a && ke(
l,
UR(a, { extraPickAttrs: R })
)) {
const O = a.value === q ? `
` : a.value;
l.value += O;
} else
break;
}
else
s++;
n.push(l);
}
return n;
}
function ze(i) {
return !i.type || pR.includes(i.type);
}
function re(i) {
return !!(i != null && i.type) && (Be.includes(i.type) || i.imgDisplay === Rt.INLINE);
}
function le(i) {
const t = [];
for (let R = 0; R < i.length; R++) {
const e = i[R];
e.imgDisplay === Rt.SURROUND && t.push(e);
}
return t;
}
function $e(i, t) {
var R;
for (let e = i.length - 1; e >= 0; e--)
((R = i[e].imgFloatPosition) == null ? void 0 : R.pageNo) === t && i.splice(e, 1);
}
var ht = /* @__PURE__ */ ((i) => (i.TOP = "top", i.MIDDLE = "middle", i.BOTTOM = "bottom", i))(ht || {});
class je {
constructor(t) {
F(this, "cursorPosition");
F(this, "positionContext");
F(this, "positionList");
// 表格跨页片段位置列表(含全部片段;主列表仅保留首片段以维持下标对齐)
F(this, "tablePagingPositionList");
// 片段位置按页索引(命中与片段查找只扫当前页,避免全表线性扫描)
F(this, "tablePagingPositionMap");
F(this, "floatPositionList");
F(this, "draw");
// private eventBus: EventBus<EventBusMap>
F(this, "options");
this.positionList = [], this.tablePagingPositionList = [], this.tablePagingPositionMap = /* @__PURE__ */ new Map(), this.floatPositionList = [], this.cursorPosition = null, this.positionContext = {
isTable: !1,
isControl: !1
}, this.draw = t, this.options = t.getOptions();
}
getFloatPositionList() {
return this.floatPositionList;
}
getTablePagingPositionList() {
return this.tablePagingPositionList;
}
// 按元素索引与页码查找表格跨页片段位置;
// 同页存在多个片段(分栏)时按锚点坐标所属片段进一步区分
getTableFragmentPosition(t, R, e) {
const o = this.tablePagingPositionMap.get(R);
if (!(o != null && o.length)) return null;
const n = o.filter(
(s) => s.index === t
);
if (n.length <= 1)
return n[0] || null;
if (e) {
const {
coordinate: { leftTop: s, rightBottom: r }
} = e, l = n.find((a) => {
const {
leftTop: O,
rightTop: M,
leftBottom: X
} = a.coordinate;
return s[0] >= O[0] && r[0] <= M[0] && s[1] >= O[1] && r[1] <= X[1];
});
if (l) return l;
}
return n[0];
}
getTablePositionList(t) {
var R;
return ((R = this.getTableTdByContext(t, this.positionContext)) == null ? void 0 : R.positionList) || [];
}
getTableTdByContext(t, R) {
var s, r, l, a;
const e = (s = R.tablePath) != null && s.length ? R.tablePath : this._getTablePathByContext(R);
let o = t, n = null;
for (let O = 0; O < e.length; O++) {
const { index: M, trIndex: X, tdIndex: P } = e[O];
if (n = ((a = (l = (r = o[M]) == null ? void 0 : r.trList) == null ? void 0 : l[X]) == null ? void 0 : a.tdList[P]) || null, !n) return null;
o = n.value;
}
return n;
}
buildTablePositionContext(t, R, e, o) {
var l;
const n = R.trList[e], s = n.tdList[o], r = (l = t.tablePath) != null && l.length ? t.tablePath.map(
(a, O, M) => O === M.length - 1 ? {
...a,
trIndex: e,
tdIndex: o,
tdId: s.id,
trId: n.id,
tableId: R.id
} : a
) : void 0;
return {
...t,
isTable: !0,
trIndex: e,
tdIndex: o,
tdId: s.id,
trId: n.id,
tableId: R.id,
tablePath: r
};
}
getTableElementByContext(t, R) {
var s, r, l;
const e = (s = R.tablePath) != null && s.length ? R.tablePath : this._getTablePathByContext(R);
let o = t, n = null;
for (let a = 0; a < e.length; a++) {
const { index: O, trIndex: M, tdIndex: X } = e[a];
if (n = o[O] || null, !n) return null;
if (a === e.length - 1) break;
const P = (l = (r = n.trList) == null ? void 0 : r[M]) == null ? void 0 : l.tdList[X];
if (!P) return null;
o = P.value;
}
return n;
}
getTableElementPositionByContext(t, R, e) {
var l, a, O, M, X, P, N;
const o = (l = e.tablePath) != null && l.length ? e.tablePath : this._getTablePathByContext(e);
let n = t, s = R, r = null;
for (let u = 0; u < o.length; u++) {
const { index: h, trIndex: L, tdIndex: Y } = o[u];
r = s[h] || null;
const S = n[h];
if (!r || !S) return null;
if (u === o.length - 1) break;
const W = (O = (a = S.trList) == null ? void 0 : a[L]) == null ? void 0 : O.tdList[Y];
if (!W) return null;
n = W.value, s = W.positionList || [];
}
if (r != null && r.tableFragment) {
const u = this.getTableTdByContext(t, e), h = this.getCursorPosition(), L = !!u && !!h && !!((M = u.positionList) != null && M.includes(h)), Y = L ? h.pageNo : (P = (X = u == null ? void 0 : u.positionList) == null ? void 0 : X[0]) == null ? void 0 : P.pageNo;
if (Y !== void 0) {
const S = this.getTableFragmentPosition(
r.index,
Y,
// 同页多栏片段按光标(或单元格首个位置)坐标区分所属片段
L ? h : (N = u == null ? void 0 : u.positionList) == null ? void 0 : N[0]
);
if (S) return S;
}
}
return r;
}
_getTablePathByContext(t) {
const { isTable: R, index: e, trIndex: o, tdIndex: n, tdId: s, trId: r, tableId: l } = t;
return !R || e === void 0 || o === void 0 || n === void 0 ? [] : [
{
index: e,
trIndex: o,
tdIndex: n,
tdId: s,
trId: r,
tableId: l
}
];
}
getPositionList() {
return this.positionContext.isTable ? this.getTablePositionList(this.draw.getOriginalElementList()) : this.getOriginalPositionList();
}
getMainPositionList() {
return this.positionContext.isTable ? this.getTablePositionList(this.draw.getOriginalMainElementList()) : this.positionList;
}
getOriginalPositionList() {
return this.positionList;
}
getOriginalMainPositionList() {
return this.positionList;
}
// public getSelectionPositionList(): IElementPosition[] | null {
// const { startIndex, endIndex } = this.draw.getRange().getRange()
// if (startIndex === endIndex) return null
// const positionList = this.getPositionList()
// return positionList.slice(startIndex + 1, endIndex + 1)
// }
setPositionList(t) {
this.positionList = t;
}
setFloatPositionList(t) {
this.floatPositionList = t;
}
getFloatPositionByElement(t) {
return this.floatPositionList.find(
(R) => R.element === t
) || null;
}
getFloatPositionCoordinate(t) {
const { scale: R } = this.options, e = t.element.imgFloatPosition;
let o = e.x * R, n = e.y * R;
const { index: s, isTable: r, zone: l } = t;
if (r && s !== void 0) {
let a;
l === Qt.HEADER ? a = this.draw.getHeader().getPositionList() : l === Qt.FOOTER ? a = this.draw.getFooter().getPositionList() : a = this.positionList;
let O = a[s];
if (O != null && O.tableFragment && (O = this.getTableFragmentPosition(
s,
t.pageNo,
t.position
) || O), O) {
const {
coordinate: {
leftTop: [M, X]
}
} = O;
o += M, n += X;
}
}
return { x: o, y: n };
}
computePageRowPosition(t) {
var S;
const {
positionList: R,
rowList: e,
pageNo: o,
startX: n,
startY: s,
startRowIndex: r,
startIndex: l,
innerWidth: a,
zone: O,
tablePosition: M
} = t, {
scale: X,
table: { tdPadding: P }
} = this.options;
let N = n, u = s, h = l;
const L = this.draw.getColumnLayout();
let Y;
for (let W = 0; W < e.length; W++) {
const c = e[W];
Y !== void 0 && c.columnIndex !== void 0 && c.columnIndex > 0 && c.columnIndex !== Y && (u = s), Y = c.columnIndex;
const T = L && c.columnIndex !== void 0 && c.columnIndex >= 0, H = T && L && L.offsets[c.columnIndex] || 0, f = T && L ? L.width : a;
if (N += H, !c.isSurround) {
const Z = c.width + (c.offsetX || 0);
c.rowFlex === Gt.CENTER ? N += (f - Z) / 2 : c.rowFlex === Gt.RIGHT && (N += f - Z);
}
N += c.offsetX || 0, u += c.offsetY || 0;
const D = N, K = u;
for (let Z = 0; Z < c.elementList.length; Z++) {
const U = c.elementList[Z];
c.tableFragment && (h = c.startIndex + Z);
const I = U.metrics, p = !U.hide && (U.imgDisplay !== Rt.INLINE && U.type === V.IMAGE || U.type === V.LATEX) ? c.ascent - I.height : c.ascent;
U.left && (N += U.left), U.translateX && (N += U.translateX * X);
const g = {
pageNo: o,
index: h,
value: U.value,
rowIndex: r + W,
// 表格单元格内行号为绝对序号(拆分窗口的续排位置与原窗口位置不冲突);
// 正文保持页内行号(页首行查找依赖 rowNo === 0)
rowNo: t.isTable ? r + W : W,
metrics: I,
left: U.left || 0,
ascent: p,
lineHeight: c.height,
isFirstLetter: Z === 0,
isLastLetter: Z === c.elementList.length - 1,
columnIndex: c.columnIndex,
coordinate: {
leftTop: [N, u],
leftBottom: [N, u + c.height],
rightTop: [N + I.width, u],
rightBottom: [N + I.width, u + c.height]
}
};
if (U.imgDisplay === Rt.SURROUND || U.imgDisplay === Rt.FLOAT_TOP || U.imgDisplay === Rt.FLOAT_BOTTOM) {
const y = R[R.length - 1];
if (y && (g.metrics = y.metrics, g.coordinate = y.coordinate), !U.imgFloatPosition) {
const v = M == null ? void 0 : M.coordinate.leftTop;
U.imgFloatPosition = {
x: v ? N - v[0] : N,
y: v ? u - v[1] : u,
pageNo: o
};
}
this.floatPositionList.push({
pageNo: o,
element: U,
position: g,
isTable: t.isTable,
index: t.index,
tdIndex: t.tdIndex,
trIndex: t.trIndex,
tdValueIndex: h,
zone: O
});
}
const J = c.tableFragment;
if (J) {
g.tableFragment = J, c.fragmentPosition = g, this.tablePagingPositionList.push(g);
const y = this.tablePagingPositionMap.get(o) || [];
y.push(g), this.tablePagingPositionMap.set(o, y), J.startTrIndex === 0 && !J.startSplitTrOffset && R.push(g);
} else
R.push(g);
if (h++, N += I.width, U.type === V.TABLE && !U.hide) {
const y = P[1] + P[3], v = J ? this.draw.getTableParticle().getFragmentTdList(U, J) : U.trList.flatMap((B) => B.tdList);
for (const B of v) {
let tt = !1, st = !1, Mt = 0, Nt = B.height;
if (J) {
if ([Mt, Nt] = this.draw.getTableParticle().getTdWindowInFragment(B, U, J), Nt <= Mt) continue;
tt = Mt > 0 || Nt < B.height, st = Mt > 0;
}
let rt = B.rowList, ot = 0, nt = 0;
if (tt) {
const w = this.draw.getTableParticle().getTdVisibleRowListByWindow(B, Mt, Nt);
rt = w.rowList, ot = w.startIndex, nt = w.startRowIndex;
}
st || (B.positionList = []);
const Jt = B.positionList, Zt = J ? this.draw.getTableParticle().getTdWindowOffsetY(Mt, J) : 0, k = this.computePageRowPosition({
positionList: Jt,
rowList: rt,
pageNo: o,
startRowIndex: nt,
startIndex: ot,
startX: (B.x + P[3]) * X + D + (U.translateX || 0) * X,
startY: (B.y + P[0]) * X + K + Zt,
innerWidth: (B.width - y) * X,
isTable: !0,
index: h - 1,
tdIndex: B.tdIndex,
trIndex: B.rowIndex,
zone: O,
tablePosition: g
});
tt || this._offsetTdPositionByVerticalAlign(B, Jt), N = k.x, u = k.y;
}
if ((S = J == null ? void 0 : J.repeatTrIndexes) != null && S.length) {
c.repeatTdPositionList = [];
let B = 0;
for (const tt of J.repeatTrIndexes) {
const st = U.trList[tt];
for (let Mt = 0; Mt < st.tdList.length; Mt++) {
const Nt = st.tdList[Mt], rt = [];
this.computePageRowPosition({
positionList: rt,
rowList: Nt.rowList,
pageNo: o,
startRowIndex: 0,
startIndex: 0,
startX: (Nt.x + P[3]) * X + D + (U.translateX || 0) * X,
startY: (B + P[0]) * X + K,
innerWidth: (Nt.width - y) * X,
isTable: !0,
index: h - 1,
tdIndex: Mt,
trIndex: tt,
zone: O,
tablePosition: g
}), this._offsetTdPositionByVerticalAlign(Nt, rt), c.repeatTdPositionList.push({ td: Nt, positionList: rt });
}
B += st.height;
}
}
N = D, u = K;
}
}
N = n, u += c.height;
}
return { x: N, y: u, index: h };
}
// 单元格内容按垂直对齐方式偏移位置
_offsetTdPositionByVerticalAlign(t, R) {
if (t.verticalAlign !== ht.MIDDLE && t.verticalAlign !== ht.BOTTOM)
return;
const {
scale: e,
table: { tdPadding: o }
} = this.options, n = o[0] + o[2], s = t.rowList.reduce((a, O) => a + O.height, 0), r = (t.height - n) * e - s, l = t.verticalAlign === ht.MIDDLE ? r / 2 : r;
Math.floor(l) > 0 && R.forEach((a) => {
const {
coordinate: { leftTop: O, leftBottom: M, rightBottom: X, rightTop: P }
} = a;
O[1] += l, M[1] += l, X[1] += l, P[1] += l;
});
}
computePositionList() {
this.positionList = [], this.tablePagingPositionList = [], this.tablePagingPositionMap.clear();
const t = this.draw.getInnerWidth(), R = this.draw.getPageRowList(), e = this.draw.getMargins(), o = e[3], n = this.draw.getHeader();
let s = 0;
for (let r = 0; r < R.length; r++) {
const l = R[r];
if (!(l != null && l.length)) continue;
const a = l[0].startIndex, O = e[0] + n.getExtraHeight(r);
this.computePageRowPosition({
positionList: this.positionList,
rowList: l,
pageNo: r,
startRowIndex: s,
startIndex: a,
startX: o,
startY: O,
innerWidth: t
}), s += l.length;
}
}
computeRowPosition(t) {
const { row: R, innerWidth: e } = t, o = [];
return this.computePageRowPosition({
positionList: o,
innerWidth: e,
rowList: [mt(R)],
pageNo: 0,
startX: 0,
startY: 0,
startIndex: 0,
startRowIndex: 0
}), o;
}
setCursorPosition(t) {
this.cursorPosition = t;
}
getCursorPosition() {
return this.cursorPosition;
}
getPositionContext() {
return this.positionContext;
}
setPositionContext(t) {
this.positionContext = t;
}
// 根据 x 坐标推断点击位置所属的分栏索引;无分栏布局时返回 undefined
_getColumnIndexByX(t) {
const R = this.draw.getColumnLayout();
if (!R) return;
const e = this.draw.getMargins()[3], o = t - e;
for (let n = 0; n < R.count; n++) {
const s = R.offsets[n], r = n < R.count - 1 ? R.offsets[n + 1] : s + R.width;
if (o >= s && o < r)
return n;
}
return R.count - 1;
}
// 表格被命中时下钻查找单元格内位置(未命中单元格返回 null)
_getTableChildPositionByXY(t) {
const { x: R, y: e, pageNo: o, element: n, index: s, tablePosition: r } = t, { scale: l } = this.options, a = r.tableFragment, O = a ? this.draw.getTableParticle().getFragmentTdList(n, a) : n.trList.flatMap((M) => M.tdList);
for (const M of O) {
const X = M.rowIndex, P = M.tdIndex, N = n.trList[X];
if (a) {
const [h, L] = this.draw.getTableParticle().getTdWindowInFragment(M, n, a);
if (L <= h) continue;
const Y = r.coordinate.leftTop[1] + M.y * l + this.draw.getTableParticle().getTdWindowOffsetY(h, a), S = Y + (L - h) * l;
if (e < Y || e > S) continue;
}
const u = this.getPositionByXY({
x: R,
y: e,
td: M,
pageNo: o,
tablePosition: r,
isTable: !0,
elementList: M.value,
positionList: M.positionList
});
if (~u.index) {
const {
index: h,
isTable: L,
hitLineStartIndex: Y,
tablePath: S = []
} = u, W = {
index: s,
trIndex: X,
tdIndex: P,
tdId: M.id,
trId: N.id,
tableId: n.id
};
if (L)
return {
...u,
index: s,
tablePath: [W, ...S],
hitLineStartIndex: Y
};
const c = M.value[h];
return {
index: s,
isCheckbox: u.isCheckbox || c.type === V.CHECKBOX || c.controlComponent === j.CHECKBOX,
isRadio: c.type === V.RADIO || c.controlComponent === j.RADIO,
isControl: !!c.controlId,
isImage: u.isImage,
isDirectHit: u.isDirectHit,
isTable: !0,
tdIndex: P,
trIndex: X,
tdValueIndex: h,
tdId: M.id,
trId: N.id,
tableId: n.id,
tablePath: [W],
hitLineStartIndex: Y
};
}
}
return null;
}
getPositionByXY(t) {
var u, h, L, Y;
const { x: R, y: e, isTable: o } = t;
let { elementList: n, positionList: s } = t;
n || (n = this.draw.getOriginalElementList()), s || (s = this.getOriginalPositionList());
const r = t.pageNo ?? this.draw.getPageNo(), l = r;
if (!o) {
const S = this.getFloatPositionByXY({
...t,
imgDisplays: [Rt.FLOAT_TOP, Rt.SURROUND]
});
if (S) return S;
}
for (let S = 0; S < s.length; S++) {
const {
index: W,
pageNo: c,
left: T,
isFirstLetter: H,
coordinate: { leftTop: f, rightTop: D, leftBottom: K }
} = s[S];
if (l === c) {
if (c > l) break;
if (f[0] - T <= R && D[0] >= R && f[1] <= e && K[1] >= e) {
let Z = S;
const U = n[S];
if (U.type === V.TABLE) {
const p = this._getTableChildPositionByXY({
x: R,
y: e,
pageNo: r,
element: U,
index: W,
tablePosition: s[S]
});
if (p) return p;
}
if (U.type === V.IMAGE || U.type === V.LATEX)
return {
index: Z,
isDirectHit: !0,
isImage: !0
};
if (U.type === V.CHECKBOX || U.controlComponent === j.CHECKBOX)
return {
index: Z,
isDirectHit: !0,
isCheckbox: !0
};
if (U.type === V.LABEL)
return {
index: Z,
isDirectHit: !0,
isLabel: !0
};
if (U.type === V.TAB && U.listStyle === Vt.CHECKBOX) {
let p = Z - 1;
for (; p > 0; ) {
const g = n[p];
if (g.value === q && g.listStyle === Vt.CHECKBOX)
break;
p--;
}
return {
index: p,
isDirectHit: !0,
isCheckbox: !0
};
}
if (U.type === V.RADIO || U.controlComponent === j.RADIO)
return {
index: Z,
isDirectHit: !0,
isRadio: !0
};
let I;
if (n[W].value !== q) {
const p = D[0] - f[0];
R < f[0] + p / 2 && (Z = S - 1, H && (I = S));
}
return {
isDirectHit: !0,
hitLineStartIndex: I,
index: Z,
isControl: !!U.controlId
};
}
}
}
if (!o) {
const S = this.tablePagingPositionMap.get(r) || [];
for (const W of S) {
const {
index: c,
coordinate: { leftTop: T, rightTop: H, leftBottom: f }
} = W;
if (T[0] <= R && H[0] >= R && T[1] <= e && f[1] >= e) {
const D = n[c];
if ((D == null ? void 0 : D.type) === V.TABLE) {
const K = this._getTableChildPositionByXY({
x: R,
y: e,
pageNo: r,
element: D,
index: c,
tablePosition: W
});
if (K) return K;
}
}
}
}
if (!o) {
const S = this.getFloatPositionByXY({
...t,
imgDisplays: [Rt.FLOAT_BOTTOM]
});
if (S) return S;
}
let a = !1, O = -1, M;
if (o) {
const { scale: S } = this.options, { td: W, tablePosition: c } = t;
if (W && c) {
const { leftTop: T } = c.coordinate, H = c.tableFragment;
let f = 0;
if (H) {
const I = H.startSplitTrOffset && W.trIndex > H.startTrIndex ? H.startSplitTrOffset : 0;
f = (H.repeatHeight - H.skipHeight - I) * S;
}
const D = W.x * S + T[0], K = W.y * S + T[1] + f, Z = W.width * S, U = W.height * S;
if (!(D < R && R < D + Z && K < e && e < K + U))
return {
index: O
};
}
}
const X = (
//isMainActive
s.filter((S) => S.isLastLetter && S.pageNo === l)
), P = this._getColumnIndexByX(R), N = P === void 0 ? X : X.filter(
(S) => S.columnIndex === void 0 || P === S.columnIndex
);
s.filter((S) => S.isLastLetter && S.pageNo === l);
for (let S = 0; S < N.length; S++) {
const {
index: W,
rowNo: c,
coordinate: { leftTop: T, leftBottom: H }
} = N[S];
if (e > T[1] && e <= H[1]) {
const f = (
//isMainActive
// ?
s.findIndex(
(U) => U.pageNo === l && U.rowNo === c
)
), D = n[f], K = s[f], Z = D.listStyle === Vt.CHECKBOX ? this.draw.getMargins()[3] : K.coordinate.leftTop[0];
if (R < Z)
~f ? K.value === q ? O = f : (O = f - 1, M = f) : O = W;
else {
if (D.listStyle === Vt.CHECKBOX && R < T[0])
return {
index: f,
isDirectHit: !0,
isCheckbox: !0
};
O = W;
}
a = !0;
break;
}
}
if (!a) {
const S = this.draw.getHeader(), W = S.isDisabled(r), c = W ? 0 : S.getHeaderTop(r) + S.getHeight(r), T = this.draw.getFooter(), H = T.isDisabled(r), f = this.draw.getHeight(), D = H ? f : f - (T.getFooterBottom(r) + T.getHeight(r));
if (!W && e < c)
return {
index: -1,
zone: Qt.HEADER
};
if (!H && e > D)
return {
index: -1,
zone: Qt.FOOTER
};
const K = this.draw.getMargins();
if (e <= K[0])
for (let Z = 0; Z < s.length; Z++) {
const U = s[Z];
if (U.pageNo !== l || U.rowNo !== 0) continue;
const { leftTop: I, rightTop: p } = U.coordinate;
if (R <= K[3] || R >= I[0] && R <= p[0] || ((u = s[Z + 1]) == null ? void 0 : u.rowNo) !== 0)
return {
index: U.index
};
}
else {
const Z = N[N.length - 1];
if (Z) {
const U = Z.rowNo;
for (let I = 0; I < s.length; I++) {
const p = s[I];
if (p.pageNo !== l || p.rowNo !== U)
continue;
const { leftTop: g, rightTop: J } = p.coordinate;
if (R <= K[3] || R >= g[0] && R <= J[0] || ((h = s[I + 1]) == null ? void 0 : h.rowNo) !== U)
return {
index: p.index
};
}
}
}
return {
index: ((L = N[N.length - 1]) == null ? void 0 : L.index) || s.length - 1
};
}
return {
hitLineStartIndex: M,
index: O,
isControl: !!((Y = n[O]) != null && Y.controlId)
};
}
getFloatPositionByXY(t) {
const { x: R, y: e } = t, o = t.pageNo ?? this.draw.getPageNo(), { scale: n } = this.options;
for (let s = 0; s < this.floatPositionList.length; s++) {
const {
position: r,
element: l,
isTable: a,
index: O,
trIndex: M,
tdIndex: X,
tdValueIndex: P,
// zone: floatElementZone,
pageNo: N
} = this.floatPositionList[s];
if (o === N && l.type === V.IMAGE && l.imgDisplay && t.imgDisplays.includes(l.imgDisplay)) {
const { x: u, y: h } = this.getFloatPositionCoordinate(this.floatPositionList[s]), L = l.width * n, Y = l.height * n;
if (R >= u && R <= u + L && e >= h && e <= h + Y)
return a ? {
index: O,
isDirectHit: !0,
isImage: !0,
isTable: a,
trIndex: M,
tdIndex: X,
tdValueIndex: P,
tdId: l.tdId,
trId: l.trId,
tableId: l.tableId
} : {
index: r.index,
isDirectHit: !0,
isImage: !0
};
}
}
}
adjustPositionContext(t) {
const R = this.getPositionByXY(t);
if (!~R.index) return null;
R.isControl && (this.draw.getMode(), dt.READONLY);
const {
index: e,
isCheckbox: o,
isRadio: n,
isControl: s,
isImage: r,
isLabel: l,
isDirectHit: a,
isTable: O,
trIndex: M,
tdIndex: X,
tdId: P,
trId: N,
tableId: u,
tablePath: h
} = R;
return this.setPositionContext({
isTable: O || !1,
isCheckbox: o || !1,
isRadio: n || !1,
isControl: s || !1,
isImage: r || !1,
isLabel: l || !1,
isDirectHit: a || !1,
index: e,
trIndex: M,
tdIndex: X,
tdId: P,
trId: N,
tableId: u,
tablePath: h
}), R;
}
setSurroundPosition(t) {
var M;
const { scale: R } = this.options, {
pageNo: e,
row: o,
rowElement: n,
rowElementRect: s,
surroundElementList: r,
availableWidth: l
} = t;
let a = s.x, O = 0;
if (r.length && !re(n) && !((M = n.control) != null && M.minWidth))
for (let X = 0; X < r.length; X++) {
const P = r[X], N = P.imgFloatPosition;
if (N.pageNo !== e) continue;
const u = {
...N,
x: N.x * R,
y: N.y * R,
width: P.width * R,
height: P.height * R
};
if (Ze(s, u)) {
o.isSurround = !0;
const h = u.width + u.x - s.x;
if (n.left = h, o.width += h, O += h, a = u.x + u.width, o.width + n.metrics.width > l) {
n.left = 0, o.width -= O;
break;
}
}
}
return { x: a, rowIncreaseWidth: O };
}
}
var bR = /* @__PURE__ */ ((i) => (i.CONTAIN = "contain", i.COVER = "cover", i))(bR || {}), yt = /* @__PURE__ */ ((i) => (i.REPEAT = "repeat", i.NO_REPEAT = "no-repeat", i.REPEAT_X = "repeat-x", i.REPEAT_Y = "repeat-y", i))(yt || {});
class qe {
constructor(t) {
F(this, "draw");
F(this, "options");
this.draw = t, this.options = t.getOptions();
}
_renderBackgroundColor(t, R, e, o) {
t.save(), t.fillStyle = R, t.fillRect(0, 0, e, o), t.restore();
}
_drawImage(t, R, e) {
const { background: o, scale: n } = this.options;
if (o.size === bR.CONTAIN) {
const s = R * n, r = e * n;
if (!o.repeat || o.repeat === yt.NO_REPEAT)
t.drawImage(o.image, 0, 0, s, r);
else {
let l = 0, a = 0;
const O = o.repeat === yt.REPEAT || o.repeat === yt.REPEAT_X ? Math.ceil(R * n / s) : 1, M = o.repeat === yt.REPEAT || o.repeat === yt.REPEAT_Y ? Math.ceil(e * n / r) : 1;
for (let X = 0; X < O; X++) {
for (let P = 0; P < M; P++)
t.drawImage(o.image, l, a, s, r), a += r;
a = 0, l += s;
}
}
} else
t.drawImage(o.image, 0, 0, R * n, e * n);
}
_renderBackgroundImage(t, R, e) {
this._drawImage(t, R, e);
}
render(t, R) {
const {
background: { image: e, color: o, applyPageNumbers: n }
} = this.options;
if (e && (!(n != null && n.length) || n.includes(R))) {
const { width: s, height: r } = this.options;
this._renderBackgroundImage(t, s, r);
} else {
const s = this.draw.getCanvasWidth(R), r = this.draw.getCanvasHeight(R);
this._renderBackgroundColor(t, o, s, r);
}
}
}
class mR {
constructor() {
F(this, "fillRect");
F(this, "fillColor");
F(this, "fillDecorationStyle");
this.fillRect = this.clearFillInfo();
}
clearFillInfo() {
return this.fillColor = void 0, this.fillDecorationStyle = void 0, this.fillRect = {
x: 0,
y: 0,
width: 0,
height: 0
}, this.fillRect;
}
recordFillInfo(t, R, e, o, n, s, r) {
const l = !this.fillRect.width;
if (!l && (this.fillColor !== s || this.fillDecorationStyle !== r)) {
this.render(t), this.clearFillInfo(), this.recordFillInfo(t, R, e, o, n, s, r);
return;
}
l && (this.fillRect.x = R, this.fillRect.y = e), n && this.fillRect.height < n && (this.fillRect.height = n), this.fillRect.width += o, this.fillColor = s, this.fillDecorationStyle = r;
}
}
class ti extends mR {
constructor(R) {
super();
F(this, "draw");
F(this, "options");
this.draw = R, this.options = R.getOptions();
}
render(R) {
if (!this.fillRect.width) return;
const { highlightAlpha: e } = this.options, { x: o, y: n, width: s, height: r } = this.fillRect;
R.save(), this.draw.getPdf().setGState(new tR({
opacity: e
})), R.globalAlpha = e, R.fillStyle = this.fillColor, R.fillRect(o, n, s, r), this.draw.getPdf().setGState(new tR({
opacity: 1
})), R.restore(), this.clearFillInfo();
}
}
class Ri {
constructor(t) {
F(this, "draw");
F(this, "options");
this.draw = t, this.options = t.getOptions();
}
render(t, R) {
const { marginIndicatorColor: e, pageMode: o } = this.options, n = this.draw.getWidth(), s = o === bt.CONTINUITY ? this.draw.getCanvasHeight(R) / this.draw.getPagePixelRatio() : this.draw.getHeight(), r = this.draw.getMargins(), l = this.draw.getMarginIndicatorSize();
t.save(), t.translate(0.5, 0.5), t.strokeStyle = e, t.beginPath();
const a = [r[3], r[0]], O = [n - r[1], r[0]], M = [r[3], s - r[2]], X = [
n - r[1],
s - r[2]
];
t.moveTo(a[0] - l, a[1]), t.lineTo(...a), t.lineTo(a[0], a[1] - l), t.moveTo(O[0] + l, O[1]), t.lineTo(...O), t.lineTo(O[0], O[1] - l), t.moveTo(M[0] - l, M[1]), t.lineTo(...M), t.lineTo(M[0], M[1] + l), t.moveTo(X[0] + l, X[1]), t.lineTo(...X), t.lineTo(X[0], X[1] + l), t.stroke(), t.restore();
}
}
class ei extends mR {
constructor(R) {
super();
F(this, "options");
this.options = R.getOptions();
}
render(R) {
if (!this.fillRect.width) return;
const { scale: e, strikeoutColor: o } = this.options, { x: n, y: s, width: r } = this.fillRect;
R.save(), R.lineWidth = e, R.strokeStyle = o;
const l = s + 0.5;
R.beginPath(), R.moveTo(n, l), R.lineTo(n + r, l), R.stroke(), R.restore(), this.clearFillInfo();
}
}
var rR = /* @__PURE__ */ ((i) => (i.SOLID = "solid", i.DOUBLE = "double", i.DASHED = "dashed", i.DOTTED = "dotted", i.WAVY = "wavy", i))(rR || {}), lR = /* @__PURE__ */ ((i) => (i.SOLID = "solid", i.DASHED = "dashed", i.DOTTED = "dotted", i))(lR || {});
class ii extends mR {
constructor(R) {
super();
F(this, "options");
this.options = R.getOptions();
}
// 下划线
_drawLine(R, e, o, n, s) {
const r = e + n;
switch (R.beginPath(), s) {
case lR.DASHED:
break;
case lR.DOTTED:
break;
}
R.moveTo(e, o), R.lineTo(r, o), R.stroke();
}
// 双实线
_drawDouble(R, e, o, n) {
const r = e + n, l = o + 3 * this.options.scale;
R.beginPath(), R.moveTo(e, o), R.lineTo(r, o), R.stroke(), R.beginPath(), R.moveTo(e, l), R.lineTo(r, l), R.stroke();
}
// 波浪线
_drawWave(R, e, o, n) {
const { scale: s } = this.options, r = 1.2 * s, l = 1 / s, a = o + 2 * r;
R.beginPath();
for (let O = 0; O < n; O++) {
const M = r * Math.sin(l * O);
R.lineTo(e + O, a + M);
}
R.stroke();
}
render(R) {
if (!this.fillRect.width) return;
const { underlineColor: e, scale: o } = this.options, { x: n, y: s, width: r } = this.fillRect;
R.save(), R.strokeStyle = this.fillColor || e, R.lineWidth = o;
const l = Math.floor(s + 2 * R.lineWidth) + 0.5;
switch (this.fillDecorationStyle) {
case rR.WAVY:
this._drawWave(R, n, l, r);
break;
case rR.DOUBLE:
this._drawDouble(R, n, l, r);
break;
case rR.DASHED:
this._drawLine(R, n, l, r, lR.DASHED);
break;
case rR.DOTTED:
this._drawLine(R, n, l, r, lR.DOTTED);
break;
default:
this._drawLine(R, n, l, r);
break;
}
R.restore(), this.clearFillInfo();
}
}
class si {
constructor(t) {
F(this, "draw");
F(this, "options");
F(this, "ctx2d");
F(this, "curX");
F(this, "curY");
F(this, "text");
F(this, "bold");
// private size: number
F(this, "italic");
F(this, "curStyle");
F(this, "curColor");
F(this, "cacheMeasureText");
this.draw = t, this.options = t.getOptions(), this.ctx2d = t.getCtx2d(), this.curX = -1, this.curY = -1, this.text = "", this.bold = !1, this.italic = !1, this.curStyle = "", this.cacheMeasureText = /* @__PURE__ */ new Map();
}
measureBasisWord(t, R) {
t.save(), t.font = R;
const e = this.measureText(t, {
value: Le
});
return t.restore(), e;
}
measureWord(t, R, e) {
const o = this.draw.getLetterReg();
let n = 0, s = null, r = e;
for (; r < R.length; ) {
const l = R[r];
if (l.type && l.type !== V.TEXT || !o.test(l.value)) {
s = l;
break;
}
n += this.measureText(t, l).width, r++;
}
return {
width: n,
endElement: s
};
}
measurePunctuationWidth(t, R) {
return !R || !ue.includes(R.value) ? 0 : (t.font = this.draw.getFont(R), this.measureText(t, R).width);
}
measureText(t, R) {
const e = this.draw.getFont(R), o = R.value === `
` ? "" : R.value;
if (R.width) {
const l = this.draw.measureText(e, R.value);
return {
width: R.width,
actualBoundingBoxAscent: l.actualBoundingBoxAscent,
actualBoundingBoxDescent: l.actualBoundingBoxDescent,
actualBoundingBoxLeft: l.actualBoundingBoxLeft,
actualBoundingBoxRight: l.actualBoundingBoxRight,
fontBoundingBoxAscent: l.fontBoundingBoxAscent,
fontBoundingBoxDescent: l.fontBoundingBoxDescent
};
}
const n = `${R.value}${t.font}`, s = this.cacheMeasureText.get(n);
if (s)
return s;
const r = this.draw.measureText(e, o);
return this.cacheMeasureText.set(n, r), r;
}
getBasisWordBoundingBoxAscent(t, R) {
return this.measureBasisWord(t, R).actualBoundingBoxAscent;
}
complete() {
this._render(), this.text = "";
}
record(t, R, e, o) {
if (this.ctx2d = t, this.options.renderMode === JR.COMPATIBILITY) {
this._setCurXY(e, o), this.text = R.value, this.curStyle = R.style, this.curColor = R.color, this.bold = R.bold, this.italic = R.italic, this.complete();
return;
}
this.text || this._setCurXY(e, o), (this.curStyle && R.style !== this.curStyle || R.color !== this.curColor) && (this.complete(), this._setCurXY(e, o)), this.text += R.value, this.curStyle = R.style.toLocaleLowerCase(), this.curColor = R.color, this.bold = R.bold, this.italic = R.italic;
}
_setCurXY(t, R) {
this.curX = t, this.curY = R;
}
_render() {
if (!this.text || !~this.curX || !~this.curY) return;
this.ctx2d.save(), this.ctx2d.font = this.curStyle.toLowerCase();
const t = this.bold ? "bold" : "normal", R = this.italic ? "italic" : "";
this.draw.getPdf().setFont(this.curStyle.split("px ")[1], R, t), this.draw.getPdf().setCharSpace(0.1), this.ctx2d.save(), this.ctx2d.fillStyle = this.curColor || this.options.defaultColor, this.ctx2d.fillText(this.text, this.curX, this.curY), this.ctx2d.restore();
}
}
const OR = {
PAGE_NO: "{pageNo}",
PAGE_COUNT: "{pageCount}"
}, oi = {
bottom: 60,
size: 12,
font: "Microsoft YaHei",
color: "#000000",
rowFlex: Gt.CENTER,
format: OR.PAGE_NO,
numberType: WR.ARABIC,
disabled: !1,
startPageNo: 1,
fromPageNo: 0,
maxPageNo: null
};
class RR {
constructor(t) {
F(this, "draw");
F(this, "options");
this.draw = t, this.options = t.getOptions();
}
static formatNumberPlaceholder(t, R, e, o) {
const n = o === WR.CHINESE ? Ve(R) : `${R}`;
return t.replace(e, n);
}
render(t, R) {
const {
scale: e,
pageNumber: {
size: o,
font: n,
color: s,
rowFlex: r,
numberType: l,
format: a,
startPageNo: O,
fromPageNo: M
}
} = this.options;
if (R < M) return;
let X = a;
const P = new RegExp(OR.PAGE_NO);
P.test(X) && (X = RR.formatNumberPlaceholder(
X,
R + O - M,
P,
l
));
const N = new RegExp(OR.PAGE_COUNT);
N.test(X) && (X = RR.formatNumberPlaceholder(
X,
this.draw.getPageCount() - M,
N,
l
));
const u = this.draw.getWidth(), h = this.draw.getHeight(), L = this.draw.getPageNumberBottom(), Y = h - L;
t.save(), t.fillStyle = s;
const S = n.toLowerCase(), W = `${o * e}px ${S}`;
t.font = W, this.draw.getPdf().setFont(S, "", "normal");
let c = 0;
const T = this.draw.getMargins(), { width: H } = this.draw.measureText(W, X);
r === Gt.CENTER ? c = (u - H) / 2 : r === Gt.RIGHT ? c = u - H - T[1] : c = T[3], t.fillText(X, c, Y), t.restore();
}
}
class ni {
constructor(t) {
// private draw: DrawPdf
// private range: RangeManager
F(this, "options");
// 片段内容高度缓存(片段对象随每次渲染重建,无过期风险)
F(this, "fragmentContentHeightCache");
// 单元格内容行高前缀和缓存(按 rowList 数组身份,每次渲染重建无过期风险)
F(this, "tdLineHeightPrefixCache");
// 片段单元格枚举缓存(片段对象随每次渲染重建,命中/绘制高频复用)
F(this, "fragmentTdListCache");
this.options = t.getOptions(), this.fragmentContentHeightCache = /* @__PURE__ */ new WeakMap(), this.tdLineHeightPrefixCache = /* @__PURE__ */ new WeakMap(), this.fragmentTdListCache = /* @__PURE__ */ new WeakMap();
}
getTrListGroupByCol(t) {
var e;
const R = mt(t);
for (let o = 0; o < t.length; o++) {
const n = R[o];
for (let s = n.tdList.length - 1; s >= 0; s--) {
const r = n.tdList[s], { rowspan: l, rowIndex: a, colIndex: O } = r, M = a + l - 1;
if (M !== o) {
const X = n.tdList.splice(s, 1)[0];
(e = R[M]) == null || e.tdList.splice(O, 0, X);
}
}
}
return R;
}
_drawOuterBorder(t) {
const {
ctx2d: R,
startX: e,
startY: o,
width: n,
height: s,
isDrawFullBorder: r,
borderExternalWidth: l
} = t, { scale: a } = this.options, O = R.lineWidth;
l && (R.lineWidth = l * a), R.beginPath();
const M = Math.round(e), X = Math.round(o);
R.translate(0.5, 0.5), r ? R.rect(M, X, n, s) : (R.moveTo(M, X + s), R.lineTo(M, X), R.lineTo(M + n, X)), R.stroke(), l && (R.lineWidth = O), R.translate(-0.5, -0.5);
}
// 枚举片段涉及的单元格:进位合并单元格(覆盖片段起始行的跨行单元格)
// + 片段范围行单元格。直接遍历行区间与缓存的进位单元格,避免全表扫描;
// 结果按片段对象缓存(td 对象共享于 trList,枚举结果与传入 element 包装无关)
getFragmentTdList(t, R) {
const e = this.fragmentTdListCache.get(R);
if (e) return e;
const { startTrIndex: o, endTrIndex: n, carriedTds: s } = R, r = [...s || []], l = t.trList;
for (let a = o; a < n; a++)
r.push(...l[a].tdList);
return this.fragmentTdListCache.set(R, r), r;
}
// 枚举跨页片段内需绘制的单元格:续页回显表头 + 片段范围行 + 进位合并单元格
// 纵坐标与高度均按单元格窗口裁剪(合并/拆分/普通单元格统一处理)
_getDrawTdList(t, R) {
const { scale: e } = this.options, o = t.trList, n = [];
if (!R) {
for (const l of o)
for (const a of l.tdList)
n.push({
td: a,
offsetY: 0,
height: a.height * e,
isRepeat: !1,
isCarried: !1
});
return n;
}
const { startTrIndex: s, repeatTrIndexes: r } = R;
if (r != null && r.length) {
let l = 0;
for (const a of r) {
const O = o[a];
for (const M of O.tdList)
n.push({
td: M,
offsetY: (l - M.y) * e,
height: M.height * e,
isRepeat: !0,
isCarried: !1
});
l += O.height;
}
}
for (const l of this.getFragmentTdList(t, R)) {
const [a, O] = this.getTdWindowInFragment(
l,
t,
R
);
O <= a || n.push({
td: l,
offsetY: this.getTdWindowOffsetY(a, R),
height: (O - a) * e,
isRepeat: !1,
isCarried: l.rowIndex < s
});
}
return n;
}
_drawSlash(t, R, e, o) {
var X, P;
const { scale: n } = this.options, { td: s, offsetY: r, height: l } = R;
t.save();
const a = s.width * n, O = Math.round(s.x * n + e), M = Math.round(s.y * n + o + r);
(X = s.slashTypes) != null && X.includes(DR.FORWARD) && (t.moveTo(O + a, M), t.lineTo(O, M + l)), (P = s.slashTypes) != null && P.includes(DR.BACK) && (t.moveTo(O, M), t.lineTo(O + a, M + l)), t.stroke(), t.restore();
}
_drawBorder(t, R, e, o, n, s) {
var W, c, T, H, f, D;
const {
colgroup: r,
trList: l,
borderType: a,
borderColor: O,
borderWidth: M = 1,
borderExternalWidth: X
} = R;
if (!r || !l) return;
const {
scale: P,
table: { defaultBorderColor: N }
} = this.options, u = R.width * P, h = s ? (s.repeatHeight + this.getFragmentContentHeight(R, s)) * P : R.height * P, L = a === nR.EMPTY, Y = a === nR.EXTERNAL, S = a === nR.INTERNAL;
t.save(), nR.DASH, t.lineWidth = M * P, t.strokeStyle = O || N, !L && !S && this._drawOuterBorder({
ctx2d: t,
startX: e,
startY: o,
width: u,
height: h,
borderExternalWidth: X,
isDrawFullBorder: Y
});
for (const K of n) {
const { td: Z, offsetY: U, height: I } = K;
if ((W = Z.slashTypes) != null && W.length && this._drawSlash(t, K, e, o), !((c = Z.borderTypes) != null && c.length) && (L || Y))
continue;
const p = Z.width * P, g = Math.round(Z.x * P + e + p), J = Math.round(Z.y * P + o + U);
if (t.translate(0.5, 0.5), t.beginPath(), (T = Z.borderTypes) != null && T.includes(aR.TOP) && (t.moveTo(g - p, J), t.lineTo(g, J), t.stroke()), (H = Z.borderTypes) != null && H.includes(aR.RIGHT) && (t.moveTo(g, J), t.lineTo(g, J + I), t.stroke()), (f = Z.borderTypes) != null && f.includes(aR.BOTTOM) && (t.moveTo(g, J + I), t.lineTo(g - p, J + I), t.stroke()), (D = Z.borderTypes) != null && D.includes(aR.LEFT) && (t.moveTo(g - p, J), t.lineTo(g - p, J + I), t.stroke()), !L && !Y) {
if ((!S || Z.colIndex + Z.colspan < r.length) && (t.moveTo(g, J), t.lineTo(g, J + I), X && X !== M && Z.colIndex + Z.colspan === r.length)) {
const y = t.lineWidth;
t.lineWidth = X * P, t.stroke(), t.beginPath(), t.lineWidth = y;
}
if (!S || Z.rowIndex + Z.rowspan < l.length) {
const y = Z.rowIndex + Z.rowspan === ((s == null ? void 0 : s.endTrIndex) ?? l.length), v = X && X !== M && y;
if (v && (t.stroke(), t.beginPath()), t.moveTo(g, J + I), t.lineTo(g - p, J + I), v) {
const B = t.lineWidth;
t.lineWidth = X * P, t.stroke(), t.beginPath(), t.lineWidth = B;
}
}
t.stroke();
}
t.translate(-0.5, -0.5);
}
t.restore();
}
_drawBackgroundColor(t, R, e, o) {
const { scale: n } = this.options;
for (const { td: s, offsetY: r, height: l } of o) {
if (!s.backgroundColor) continue;
t.save();
const a = s.width * n, O = Math.round(s.x * n + R), M = Math.round(s.y * n + e + r);
t.fillStyle = s.backgroundColor, t.fillRect(O, M, a, l), t.restore();
}
}
getTableWidth(t) {
return t.colgroup.reduce((R, e) => R + e.width, 0);
}
// 行内拆分行在片段内的可见高度(未缩放;未拆分返回行原始高度)
getFragmentTrHeight(t, R, e) {
if (!e) return t.height;
let o = t.height;
return R === e.startTrIndex && e.startSplitTrOffset && (o -= e.startSplitTrOffset), R === e.endTrIndex - 1 && e.endSplitTrHeight !== void 0 && (o -= Math.max(0, t.height - e.endSplitTrHeight)), o;
}
// 片段内容高度(未缩放):范围内行按可见高度求和(不含回显表头)
getFragmentContentHeight(t, R) {
const e = this.fragmentContentHeightCache.get(R);
if (e !== void 0) return e;
const { startTrIndex: o, endTrIndex: n, startSplitTrOffset: s, endSplitTrHeight: r } = R, l = t.trList;
let a = 0;
for (let O = o; O < n; O++) {
let M = l[O].height;
O === o && s && (M -= s), O === n - 1 && r !== void 0 && (M -= Math.max(0, l[O].height - r)), a += M;
}
return this.fragmentContentHeightCache.set(R, a), a;
}
// 计算单元格在片段内的可见窗口(未缩放,相对单元格顶部)
// 合并/拆分/普通单元格通用:窗口为片段可视区与单元格区域的交集
getTdWindowInFragment(t, R, e) {
const { skipHeight: o, startSplitTrOffset: n } = e, s = o + (n ?? 0), r = s + this.getFragmentContentHeight(R, e), l = Math.max(0, s - t.y), a = Math.min(t.height, r - t.y);
return [l, a];
}
// 单元格窗口顶部在片段内的纵坐标偏移(缩放后像素;
// td.y 相对整表,片段内需平移到窗口位置)
getTdWindowOffsetY(t, R) {
const { scale: e } = this.options;
return (t - R.skipHeight - (R.startSplitTrOffset ?? 0) + R.repeatHeight) * e;
}
// 窗口内可见内容行切片:返回行列表与首行在单元格内的起始行号/元素索引
getTdVisibleRowListByWindow(t, R, e) {
var r;
const o = t.rowList, [n, s] = this.getTdLineRangeBySplitWindow(
t,
R,
e
);
return {
rowList: o.slice(n, s),
startIndex: ((r = o[n]) == null ? void 0 : r.startIndex) ?? 0,
startRowIndex: n
};
}
// 计算单元格内容行在垂直窗口内的行范围(行内拆分使用)
// windowStart/windowEnd 未缩放、相对行顶;返回 [起始行, 结束行)(按整行取舍不裁剪行)
getTdLineRangeBySplitWindow(t, R, e) {
const { scale: o } = this.options, n = t.rowList || [];
let s = this.tdLineHeightPrefixCache.get(n);
if (!s) {
const {
table: { tdPadding: O }
} = this.options;
s = [O[0] * o];
for (let M = 0; M < n.length; M++)
s.push(s[M] + n[M].height);
this.tdLineHeightPrefixCache.set(n, s);
}
const r = R * o, l = e * o, a = (O) => {
let M = 0, X = n.length;
for (; M < X; ) {
const P = M + X + 1 >> 1;
s[P] <= O ? M = P : X = P - 1;
}
return M;
};
return [a(r), a(l)];
}
getTableHeight(t) {
const R = t.trList;
return R != null && R.length ? this.getTdListByColIndex(R, 0).reduce(
(e, o) => e + o.height,
0
) : 0;
}
getRowCountByColIndex(t, R) {
return this.getTdListByColIndex(t, R).reduce(
(e, o) => e + o.rowspan,
0
);
}
getTdListByColIndex(t, R) {
const e = [];
for (let o = 0; o < t.length; o++) {
const n = t[o].tdList;
for (let s = 0; s < n.length; s++) {
const r = n[s], l = r.colIndex, a = l + r.colspan - 1;
R >= l && R <= a && e.push(r);
}
}
return e;
}
getTdListByRowIndex(t, R) {
const e = [];
for (let o = 0; o < t.length; o++) {
const n = t[o].tdList;
for (let s = 0; s < n.length; s++) {
const r = n[s], l = r.rowIndex, a = l + r.rowspan - 1;
R >= l && R <= a && e.push(r);
}
}
return e;
}
computeRowColInfo(t) {
const { colgroup: R, trList: e } = t;
if (!R || !e) return;
let o = 0;
for (let n = 0; n < e.length; n++) {
const s = e[n], r = e.length - 1 === n;
for (let l = 0; l < s.tdList.length; l++) {
const a = s.tdList[l];
let O = 0;
if (e.length > 1 && n !== 0) {
const L = s.tdList[l - 1], Y = L ? L.colIndex + L.colspan : l;
for (let S = Y; S < R.length; S++)
if (this.getRowCountByColIndex(e.slice(0, n), S) === n) {
O = S;
let c = 0;
for (let T = 0; T < S; T++)
c += R[T].width;
o = c;
break;
}
} else {
const L = s.tdList[l - 1];
L && (O = L.colIndex + L.colspan);
}
let M = 0;
for (let L = 0; L < a.colspan; L++)
M += R[L + O].width;
let X = 0;
for (let L = 0; L < a.rowspan; L++) {
const Y = e[L + n] || e[n];
X += Y.height;
}
const P = s.tdList.length - 1 === l;
let N = r;
if (!N && a.rowspan > 1) {
const L = e.length - 1 - n;
N = a.rowspan - 1 === L;
}
const u = r && P;
a.isLastRowTd = P, a.isLastColTd = N, a.isLastTd = u, a.x = o;
let h = 0;
for (let L = 0; L < n; L++) {
const Y = e[L].tdList;
for (let S = 0; S < Y.length; S++) {
const W = Y[S];
if (O >= W.colIndex && O < W.colIndex + W.colspan) {
h += W.height;
break;
}
}
}
a.y = h, a.width = M, a.height = X, a.rowIndex = n, a.colIndex = O, a.trIndex = n, a.tdIndex = l, o += M, P && !u && (o = 0);
}
}
}
render(t, R, e, o, n) {
const s = this._getDrawTdList(R, n);
this._drawBackgroundColor(t, e, o, s), this._drawBorder(t, R, e, o, s, n);
}
}
class ai {
constructor(t) {
F(this, "draw");
F(this, "options");
F(this, "tableParticle");
this.draw = t, this.options = t.getOptions(), this.tableParticle = t.getTableParticle();
}
// 表格跨页时在渲染层拆分行:数据层始终保持单一表格,
// 仅将跨页表格的行记录拆分为按页片段(超高单元格按内容行行内拆分)
splitTableRowAcrossPages(t) {
var X, P, N, u;
const { scale: R } = this.options, e = this.draw.getHeight(), o = this.draw.getColumnLayout(), n = (o == null ? void 0 : o.count) || 1, s = n > 1;
let r = 0, l = 0, a = this.draw.getMainOuterHeight(0);
const O = [];
let M = !1;
for (let h = 0; h < t.length; h++) {
const L = t[h], Y = L.elementList[0], S = Y == null ? void 0 : Y.trList, W = !!((X = t[h - 1]) != null && X.isPageBreak), c = () => {
s && l < n - 1 ? l++ : (r++, l = 0), a = this.draw.getMainOuterHeight(r);
}, T = () => {
s && L.columnIndex !== void 0 && L.columnIndex > l && !M && (l = L.columnIndex, a = this.draw.getMainOuterHeight(r)), (L.height + (L.offsetY || 0) + a > e || W) && c(), s && (L.columnIndex = l), a += L.height + (L.offsetY || 0), O.push(L);
}, H = (Y == null ? void 0 : Y.type) === V.TABLE && (Y.hide || ((P = Y.control) == null ? void 0 : P.hide) || ((N = Y.area) == null ? void 0 : N.hide) && !this.draw.isAreaHideDisabled()) && !this.draw.isDesignMode();
if (!(L.elementList.length === 1 && (Y == null ? void 0 : Y.type) === V.TABLE && !!(S != null && S.length) && !H)) {
T();
continue;
}
const D = this.draw.getElementRowMargin(Y), K = D * 2, Z = [0];
for (let _ = 0; _ < S.length; _++)
Z.push(Z[_] + S[_].height);
const U = [];
for (const _ of S)
for (const $ of _.tdList)
$.rowspan > 1 && U.push($);
const I = (_) => S[_].tdList.every(($) => {
var A;
return !!((A = $.rowList) != null && A.length);
}), p = (_) => {
const $ = [...S[_].tdList];
for (const A of U)
A.rowIndex < _ && A.rowIndex + A.rowspan > _ && $.push(A);
return $;
}, {
table: { tdPadding: g },
defaultSize: J
} = this.options, y = g[0] + g[2] + J, v = (_, $, A) => {
const z = Z[_];
let m = 0, at = !1, Ot = 0;
for (const Ft of p(_)) {
const Wt = Math.min(Ft.height, z + $ - Ft.y), St = Math.max(0, A - Ft.y);
if (Wt <= St) continue;
const [Xt, G] = this.tableParticle.getTdLineRangeBySplitWindow(
Ft,
St,
Wt
);
m = Math.max(m, G - Xt), G < Ft.rowList.length && (at = !0);
const E = Ft.rowList.slice(0, G).reduce((C, lt) => C + lt.height, 0), b = Ft.y + g[0] + g[2] + E / R - z;
Ot = Math.max(Ot, b);
}
return { fit: m, hasRemaining: at, consumedHeight: Ot };
};
let B = r, tt = l, st = a;
s && L.columnIndex !== void 0 && L.columnIndex > l && (tt = L.columnIndex, st = this.draw.getMainOuterHeight(B));
const Mt = () => {
s && tt < n - 1 ? tt++ : (B++, tt = 0), st = this.draw.getMainOuterHeight(B);
};
if (W)
Mt();
else if (st + S[0].height * R + K > e) {
const _ = e - st - K, { fit: $, hasRemaining: A, consumedHeight: z } = I(0) ? v(0, _ / R, 0) : { fit: 0, hasRemaining: !1, consumedHeight: 0 };
let m = -1;
$ >= 1 && (A ? (m = Math.min(z, _ / R), S[0].height - m < y && (m = S[0].height - y)) : S[0].height - _ / R >= y && (m = _ / R)), m <= 0 && Mt();
}
const Nt = Y.height * R;
if (st + K + Nt <= e) {
T();
continue;
}
const rt = [];
let ot = 0, nt = 0, Jt = B, Zt = tt, k = st;
const w = [];
let Q = 0, Tt = !1;
for (; ot < S.length; ) {
const _ = rt.length === 0;
if (!_ && (s && Zt < n - 1 ? Zt++ : (Jt++, Zt = 0), k = this.draw.getMainOuterHeight(Jt), rt.length === 1)) {
for (let St = 0; St < rt[0].endTrIndex; St++) {
const Xt = S[St];
Xt.pagingRepeat && (w.push(St), Q += Xt.height);
}
w.length && e - k - K - Q * R < y * R && (w.length = 0, Q = 0);
}
const $ = K + (_ ? 0 : Q * R), A = e - k - $;
if (A < y * R) {
Tt = !0;
break;
}
const z = Z[ot] + nt;
if (nt > 0 && (S[ot].height - nt) * R > A) {
const Xt = nt + A / R, { fit: G, hasRemaining: E, consumedHeight: b } = v(
ot,
Xt,
z
);
let C = Xt;
G >= 1 && E && (C = Math.min(b, Xt), S[ot].height - C < y && (C = Math.max(
nt + 1,
S[ot].height - y
))), C <= nt && (C = nt + 1), rt.push({
startTrIndex: ot,
endTrIndex: ot + 1,
startSplitTrOffset: nt,
endSplitTrHeight: C,
columnIndex: Zt
}), nt = C;
continue;
}
let m = nt > 0 ? (S[ot].height - nt) * R : 0, at = nt > 0 ? ot + 1 : ot, Ot, Ft = !1, Wt = !1;
for (; ; ) {
if (at >= S.length) {
Wt = !0;
break;
}
const St = S[at].height * R;
if (m + St <= A) {
m += St, at++;
continue;
}
const Xt = A - m;
if (I(at)) {
const { fit: G, hasRemaining: E, consumedHeight: b } = v(
at,
Xt / R,
z
);
let C = -1;
if (G >= 1 && (E ? (C = Math.min(b, Xt / R), S[at].height - C < y && (C = S[at].height - y)) : S[at].height - Xt / R >= y && (C = Xt / R)), C > 0) {
Ot = C;
break;
}
}
at <= ot && (rt.length ? (at = S.length, Wt = !0) : Ft = !0);
break;
}
if (Ft) {
Tt = !0;
break;
}
if (rt.push({
startTrIndex: ot,
endTrIndex: Ot !== void 0 ? at + 1 : at,
startSplitTrOffset: nt || void 0,
endSplitTrHeight: Ot,
columnIndex: Zt
}), ot = at, nt = Ot ?? 0, Wt) break;
}
if (Tt) {
T();
continue;
}
M = !0;
const d = L.elementList[0];
let eR = 0, PR = 0;
for (let _ = 0; _ < rt.length; _++) {
const $ = rt[_], A = _ === 0, z = !A && w.length ? w : void 0, m = z ? Q : 0, Ot = (this.tableParticle.getFragmentContentHeight(
Y,
$
) + m) * R;
O.push({
...L,
height: Ot + D,
offsetY: A ? L.offsetY : 0,
// 列表标记仅在首片段绘制
isList: A ? L.isList : !1,
// 分栏布局下片段落位到对应栏
...s ? { columnIndex: $.columnIndex } : {},
elementList: [
{
...d,
metrics: {
width: d.metrics.width,
height: Ot,
boundingBoxAscent: d.metrics.boundingBoxAscent,
boundingBoxDescent: Ot
}
}
],
tableFragment: {
startTrIndex: $.startTrIndex,
endTrIndex: $.endTrIndex,
skipHeight: eR,
repeatHeight: m,
repeatTrIndexes: z,
startSplitTrOffset: $.startSplitTrOffset,
endSplitTrHeight: $.endSplitTrHeight,
// 带入片段的跨行合并单元格(覆盖片段起始行)
carriedTds: U.length ? U.filter(
(Wt) => Wt.rowIndex < $.startTrIndex && Wt.rowIndex + Wt.rowspan > $.startTrIndex
) : void 0
}
});
const Ft = ((u = rt[_ + 1]) == null ? void 0 : u.startTrIndex) ?? 0;
for (; PR < Ft; )
eR += S[PR].height, PR++;
}
r = Jt, l = Zt;
const et = O[O.length - 1];
a = this.draw.getMainOuterHeight(r) + et.height + (et.offsetY || 0);
}
for (let h = 0; h < O.length; h++)
O[h].rowIndex = h;
return O;
}
// maxPageNo 截断:按片段边界裁剪表格,保留已展示片段内容。
// 处理拆分行部分内容、跨越裁剪点的 rowspan 收缩;
// 返回是否有内容被保留(首个片段即超限时返回 false,应整体删除)
// Upstream also migrates the cursor context / selection here; this fork
// has no cursor, so that part is dropped (hence the unused _elementList).
truncateTableByFragment(t, R, e) {
const { startTrIndex: o, startSplitTrOffset: n, skipHeight: s } = R, r = t.trList, l = /* @__PURE__ */ new Set();
let a = o;
if (n) {
const M = r[o];
for (const P of M.tdList)
this._trimTdContentToWindow(P, n) && l.add(P), P.height = n;
M.height = n, M.minHeight = Math.min(
M.minHeight ?? n,
n
);
const X = s + n;
for (let P = 0; P < o; P++)
for (const N of r[P].tdList) {
if (N.rowIndex + N.rowspan <= o) continue;
const u = X - N.y;
u >= N.height || this._trimTdContentToWindow(N, u) && l.add(N);
}
a = o + 1;
}
if (!a) return !1;
const O = [0];
for (let M = 0; M < a; M++)
O.push(O[M] + r[M].height);
for (let M = 0; M < a; M++)
for (const X of r[M].tdList)
X.rowIndex + X.rowspan > a && (X.rowspan = a - X.rowIndex), X.height = O[X.rowIndex + X.rowspan] - O[X.rowIndex];
return t.trList = r.slice(0, a), t.height = this.tableParticle.getTableHeight(t), !0;
}
// 按可见窗口裁剪单元格内容与内容行(至少保留一个补偿节点,维持单元格非空约定)
_trimTdContentToWindow(t, R) {
const e = t.value.length, {
scale: o,
table: { tdPadding: n }
} = this.options;
let [, s] = this.tableParticle.getTdLineRangeBySplitWindow(
t,
0,
Math.max(0, R)
);
const r = t.rowList, l = n[0] + n[2];
let a = 0, O = 0;
for (let X = 0; X < s; X++) {
const P = a + r[X].height / o;
if (l + P > R) break;
a = P, O = X + 1;
}
s = O;
const M = s < r.length ? r[s].startIndex : t.value.length;
if (!M) {
const { trId: X, tableId: P } = t.value[0] || {};
return t.value = [{ value: q, tdId: t.id, trId: X, tableId: P }], t.rowList = this.draw.computeRowList({
innerWidth: (t.width - (n[1] + n[3])) * o,
elementList: t.value,
isFromTable: !0,
isPagingMode: this.draw.getIsPagingMode()
}), !0;
}
return t.value = t.value.slice(0, M), t.rowList = r.slice(0, s), M < e;
}
// maxPageNo 截断后修复表格光标上下文与选区:
// 被裁剪行的光标迁移到末尾可见单元格并重建干净上下文;
// 嵌套表格路径失效时折叠到外层单元格;选区索引收缩到保留范围内
}
class ri {
constructor(t) {
F(this, "draw");
F(this, "options");
// private container: HTMLDivElement
// The popup pair is only used by the editor's interactive hyperlink hover —
// never touched on the PDF render path. In Node (no DOM) we leave these
// null, and the popup methods below short-circuit. See _createHyperlinkPopupDom.
F(this, "hyperlinkPopupContainer");
F(this, "hyperlinkDom");
this.draw = t, this.options = t.getOptions();
const { hyperlinkPopupContainer: R, hyperlinkDom: e } = this._createHyperlinkPopupDom();
this.hyperlinkDom = e, this.hyperlinkPopupContainer = R;
}
_createHyperlinkPopupDom() {
if (typeof document > "u")
return { hyperlinkPopupContainer: null, hyperlinkDom: null };
const t = document.createElement("div");
t.classList.add(`${it}-hyperlink-popup`);
const R = document.createElement("a");
return R.target = "_blank", R.rel = "noopener", t.append(R), { hyperlinkPopupContainer: t, hyperlinkDom: R };
}
drawHyperlinkPopup(t, R) {
if (!this.hyperlinkPopupContainer || !this.hyperlinkDom) return;
const {
coordinate: {
leftTop: [e, o]
},
lineHeight: n
} = R, s = this.draw.getHeight(), r = this.draw.getPageGap(), l = this.draw.getPageNo() * (s + r);
this.hyperlinkPopupContainer.style.display = "block", this.hyperlinkPopupContainer.style.left = `${e}px`, this.hyperlinkPopupContainer.style.top = `${o + l + n}px`;
const a = t.url || "#";
this.hyperlinkDom.href = a, this.hyperlinkDom.title = a, this.hyperlinkDom.innerText = a;
}
clearHyperlinkPopup() {
this.hyperlinkPopupContainer && (this.hyperlinkPopupContainer.style.display = "none");
}
openHyperlink(t) {
const R = window.open(t.url, "_blank");
R && (R.opener = null);
}
render(t, R, e, o) {
t.save(), t.font = R.style.toLowerCase();
const n = R.style.toLowerCase(), s = R.bold ? "bold" : "normal", r = R.italic ? "italic" : "";
this.draw.getPdf().setFont(n.split("px ")[1], r, s), R.color || (R.color = this.options.defaultHyperlinkColor), t.fillStyle = R.color, R.underline === void 0 && (R.underline = !0), t.fillText(R.value, e, o), t.restore();
}
}
class li {
constructor(t) {
F(this, "options");
F(this, "draw");
this.options = t.getOptions(), this.draw = t;
}
render(t, R, e, o) {
var W, c, T, H;
const {
scale: n,
label: {
defaultBackgroundColor: s,
defaultColor: r,
defaultBorderRadius: l,
defaultPadding: a
}
} = this.options, O = ((W = R.label) == null ? void 0 : W.backgroundColor) || s, M = ((c = R.label) == null ? void 0 : c.color) || r, X = ((T = R.label) == null ? void 0 : T.borderRadius) || l, P = ((H = R.label) == null ? void 0 : H.padding) || a;
t.save(), t.font = R.style, t.font = R.style.toLowerCase();
const N = R.style.toLowerCase(), u = R.bold ? "bold" : "normal", h = R.italic ? "italic" : "";
this.draw.getPdf().setFont(N.split("px ")[1], h, u);
const { width: L, height: Y, boundingBoxAscent: S } = R.metrics;
t.fillStyle = O, this._drawRoundedRect(
t,
e,
o - S,
L,
Y + (P[0] + P[3]) * n,
X * n
), t.fill(), t.fillStyle = M, t.fillText(R.value, e + P[3] * n, o), t.restore();
}
_drawRoundedRect(t, R, e, o, n, s) {
t.beginPath(), t.moveTo(R + s, e), t.lineTo(R + o - s, e), t.quadraticCurveTo(R + o, e, R + o, e + s), t.lineTo(R + o, e + n - s), t.quadraticCurveTo(R + o, e + n, R + o - s, e + n), t.lineTo(R + s, e + n), t.quadraticCurveTo(R, e + n, R, e + n - s), t.lineTo(R, e + s), t.quadraticCurveTo(R, e, R + s, e), t.closePath();
}
}
class Mi {
constructor(t, R) {
F(this, "draw");
F(this, "position");
F(this, "options");
F(this, "elementList");
F(this, "rowList");
F(this, "positionList");
this.draw = t, this.position = t.getPosition(), this.options = t.getOptions(), this.elementList = R || [], this.rowList = [], this.positionList = [];
}
getRowList() {
return this.rowList;
}
setElementList(t) {
this.elementList = t;
}
getElementList() {
return this.elementList;
}
getPositionList() {
return this.positionList;
}
compute() {
this.recovery(), this._computeRowList(), this._computePositionList();
}
recovery() {
this.rowList = [], this.positionList = [];
}
_computeRowList() {
const t = this.draw.getInnerWidth(), R = this.draw.getMargins(), e = le(this.elementList);
this.rowList = this.draw.computeRowList({
startX: R[3],
startY: this.getHeaderTop(),
innerWidth: t,
elementList: this.elementList,
surroundElementList: e
});
}
_computePositionList() {
const t = this.getHeaderTop(), R = this.draw.getInnerWidth(), o = this.draw.getMargins()[3], n = t;
this.position.computePageRowPosition({
positionList: this.positionList,
rowList: this.rowList,
pageNo: 0,
startRowIndex: 0,
startIndex: 0,
startX: o,
startY: n,
innerWidth: R,
zone: Qt.HEADER
});
}
getHeaderTop(t) {
if (this.isDisabled(t)) return 0;
const {
header: { top: R },
scale: e
} = this.options;
return Math.floor(R * e);
}
getMaxHeight() {
const {
header: { maxHeightRadio: t }
} = this.options, R = this.draw.getHeight();
return Math.floor(R * qR[t]);
}
getHeight(t) {
if (this.isDisabled(t)) return 0;
const R = this.getMaxHeight(), e = this.getRowHeight();
return e > R ? R : e;
}
getRowHeight() {
return this.rowList.reduce((t, R) => t + R.height, 0);
}
getExtraHeight(t) {
const R = this.draw.getMargins(), e = this.getHeight(t), n = this.getHeaderTop(t) + e - R[0];
return n <= 0 ? 0 : n;
}
isDisabled(t) {
return !!(this.options.header.disabled || t !== void 0 && this.options.header.disabledPages.includes(t));
}
render(t, R) {
if (this.options.header.disabledPages.includes(R)) return;
t.globalAlpha = 1;
const e = this.draw.getInnerWidth(), o = this.getMaxHeight(), n = [];
let s = 0;
for (let r = 0; r < this.rowList.length; r++) {
const l = this.rowList[r];
if (s + l.height > o)
break;
n.push(l), s += l.height;
}
this.draw.drawRow(t, {
elementList: this.elementList,
positionList: this.draw.getHeader().getPositionList(),
rowList: n,
pageNo: R,
startIndex: 0,
innerWidth: e,
zone: Qt.HEADER
});
}
}
class Oi {
// 向上偏移字高的一半
getOffsetY(t) {
return -t.metrics.height / 2;
}
render(t, R, e, o) {
t.save(), t.font = R.style, R.color && (t.fillStyle = R.color), t.fillText(R.value, e, o + this.getOffsetY(R)), t.restore();
}
}
class Xi {
// 向下偏移字高的一半
getOffsetY(t) {
return t.metrics.height / 2;
}
render(t, R, e, o) {
t.save(), t.font = R.style, R.color && (t.fillStyle = R.color), t.fillText(R.value, e, o + this.getOffsetY(R)), t.restore();
}
}
class Pi {
constructor(t) {
F(this, "options");
this.options = t.getOptions();
}
render(t, R, e, o) {
var a;
t.save();
const {
scale: n,
separator: { lineWidth: s, strokeStyle: r }
} = this.options;
t.lineWidth = (R.lineWidth || s) * n, t.strokeStyle = R.color || r, (a = R.dashArray) != null && a.length;
const l = Math.round(o);
t.translate(0, t.lineWidth / 2), t.beginPath(), t.moveTo(e, l), t.lineTo(e + R.width * n, l), t.stroke(), t.restore();
}
}
var ER = /* @__PURE__ */ ((i) => (i.TEXT = "text", i.IMAGE = "image", i))(ER || {}), TR = /* @__PURE__ */ ((i) => (i.BOTTOM = "bottom", i.TOP = "top", i))(TR || {});
class Ni {
constructor(t) {
F(this, "draw");
F(this, "options");
F(this, "imageCache");
this.draw = t, this.options = t.getOptions(), this.imageCache = /* @__PURE__ */ new Map();
}
renderText(t, R) {
const {
watermark: { data: e, opacity: o, font: n, size: s, color: r, repeat: l, gap: a, numberType: O },
scale: M
} = this.options, X = this.draw.getWidth(), P = this.draw.getHeight(), N = `${s * M}px ${n}`;
t.save(), this.draw.getPdf().setGState(new tR({
opacity: o
})), t.globalAlpha = o, t.font = N, t.fillStyle = r;
let u = e;
const h = new RegExp(OR.PAGE_NO);
h.test(u) && (u = RR.formatNumberPlaceholder(
u,
R + 1,
h,
O
));
const L = new RegExp(OR.PAGE_COUNT);
L.test(u) && (u = RR.formatNumberPlaceholder(
u,
this.draw.getPageCount(),
L,
O
));
const Y = this.draw.measureText(N, u), S = Y.width, W = Y.actualBoundingBoxAscent + Y.actualBoundingBoxDescent, c = (T, H) => {
t.save(), t.translate(T, H), t.rotate(-45 * Math.PI / 180), t.fillText(
u,
-S / 2,
(Y.actualBoundingBoxAscent - Y.actualBoundingBoxDescent) / 2
), t.restore();
};
if (l) {
const T = Math.sqrt(
Math.pow(S, 2) + Math.pow(W, 2)
), H = T + 2 * a[0] * M, f = T + 2 * a[1] * M;
for (let D = f / 2; D < P + f; D += f)
for (let K = H / 2; K < X + H; K += H)
c(K, D);
} else
c(X / 2, P / 2);
this.draw.getPdf().setGState(new tR({
opacity: 1
})), t.restore();
}
renderImage(t) {
const {
watermark: { width: R, height: e, data: o, opacity: n, repeat: s, gap: r },
scale: l
} = this.options;
this.imageCache.has(o);
const a = this.draw.getWidth(), O = this.draw.getHeight(), M = R * l, X = e * l;
if (t.save(), t.globalAlpha = n, s) {
const P = this.draw.getPagePixelRatio(), N = At.createCanvas(1, 1), u = N.getContext("2d"), h = Math.sqrt(
Math.pow(M, 2) + Math.pow(X, 2)
), L = h + 2 * r[0] * l, Y = h + 2 * r[1] * l;
N.width = L, N.height = Y, N.style && (N.style.width = `${L * P}px`, N.style.height = `${Y * P}px`), u.translate(L / 2, Y / 2), u.rotate(-45 * Math.PI / 180), u.translate(-L / 2, -Y / 2), u.drawImage(
this.imageCache.get(o),
(L - M) / 2,
(Y - X) / 2,
M,
X
), t.createPattern(), t.fillRect(0, 0, a, O);
} else
this.draw.getPdf().addImage(
o,
"PNG",
// ou outro formato
a * 45 / 100,
O * 35 / 100,
M,
X,
void 0,
"FAST",
45
);
t.restore();
}
render(t, R) {
this.options.watermark.type === ER.IMAGE ? this.renderImage(t) : this.renderText(t, R);
}
}
class Fi {
constructor(t) {
F(this, "draw");
F(this, "options");
this.draw = t, this.options = t.getOptions();
}
setSelect(t) {
const { checkbox: R } = t;
R ? R.value = !R.value : t.checkbox = {
value: !0
}, this.draw.render({
isCompute: !1,
isSetCursor: !1
});
}
render(t) {
const { ctx2d: R, x: e, index: o, row: n } = t;
let { y: s } = t;
const {
checkbox: { gap: r, lineWidth: l, fillStyle: a, strokeStyle: O, verticalAlign: M },
scale: X
} = this.options, { metrics: P, checkbox: N } = n.elementList[o];
if (M === ht.TOP || M === ht.MIDDLE) {
let S = o + 1, W = null;
for (; S < n.elementList.length && (W = n.elementList[S], !(W.value !== q && W.value !== jR)); )
S++;
if (W) {
const {
metrics: { boundingBoxAscent: c, boundingBoxDescent: T }
} = W, H = c + T;
H > P.height && (M === ht.TOP ? s -= c - P.height : M === ht.MIDDLE && (s -= (H - P.height) / 2));
}
}
const u = Math.round(e + r * X), h = Math.round(s - P.height + l), L = P.width - r * 2 * X, Y = P.height;
R.save(), R.beginPath(), R.translate(0.5, 0.5), N != null && N.value ? (R.lineWidth = l, R.strokeStyle = a, R.rect(u, h, L, Y), R.stroke(), R.beginPath(), R.fillStyle = a, R.fillRect(u, h, L, Y), R.beginPath(), R.strokeStyle = O, R.lineWidth = l * 2 * X, R.moveTo(u + 2 * X, h + Y / 2), R.lineTo(u + L / 2, h + Y - 3 * X), R.lineTo(u + L - 2 * X, h + 3 * X), R.stroke()) : (R.lineWidth = l, R.rect(u, h, L, Y), R.stroke()), R.closePath(), R.restore();
}
}
class ui {
constructor(t) {
F(this, "draw");
F(this, "options");
this.draw = t, this.options = t.getOptions();
}
setSelect(t) {
const { radio: R } = t;
R ? R.value = !R.value : t.radio = {
value: !0
}, this.draw.render({
isCompute: !1,
isSetCursor: !1
});
}
render(t) {
const { ctx2d: R, x: e, index: o, row: n } = t;
let { y: s } = t;
const {
radio: { gap: r, lineWidth: l, fillStyle: a, strokeStyle: O, verticalAlign: M },
scale: X
} = this.options, { metrics: P, radio: N } = n.elementList[o];
if (M === ht.TOP || M === ht.MIDDLE) {
let S = o + 1, W = null;
for (; S < n.elementList.length && (W = n.elementList[S], !(W.value !== q && W.value !== jR)); )
S++;
if (W) {
const {
metrics: { boundingBoxAscent: c, boundingBoxDescent: T }
} = W, H = c + T;
H > P.height && (M === ht.TOP ? s -= c - P.height : M === ht.MIDDLE && (s -= (H - P.height) / 2));
}
}
const u = Math.round(e + r * X), h = Math.round(s - P.height + l), L = P.width - r * 2 * X, Y = P.height;
R.save(), R.beginPath(), R.translate(0.5, 0.5), R.strokeStyle = N != null && N.value ? a : O, R.lineWidth = l, R.arc(u + L / 2, h + Y / 2, L / 2, 0, Math.PI * 2, !0), R.stroke(), N != null && N.value && (R.beginPath(), R.fillStyle = a, R.arc(u + L / 2, h + Y / 2, L / 3, 0, Math.PI * 2, !0), R.fill()), R.closePath(), R.restore();
}
}
class Si {
constructor(t, R = {}) {
F(this, "draw");
F(this, "options");
F(this, "now");
F(this, "dom");
F(this, "renderOptions");
F(this, "isDatePicker");
F(this, "pickDate");
F(this, "lang");
this.draw = t, this.options = R, this.lang = this._getLang(), this.now = /* @__PURE__ */ new Date(), this.dom = this._createDom(), this.renderOptions = null, this.isDatePicker = !0, this.pickDate = null, this._bindEvent();
}
_createDom() {
const t = document.createElement("div");
t.classList.add(`${it}-date-container`), t.setAttribute(de, ee.POPUP);
const R = document.createElement("div");
R.classList.add(`${it}-date-wrap`);
const e = document.createElement("div");
e.classList.add(`${it}-date-title`);
const o = document.createElement("span");
o.classList.add(`${it}-date-title__pre-year`), o.innerText = "<<";
const n = document.createElement("span");
n.classList.add(`${it}-date-title__pre-month`), n.innerText = "<";
const s = document.createElement("span");
s.classList.add(`${it}-date-title__now`);
const r = document.createElement("span");
r.classList.add(`${it}-date-title__next-month`), r.innerText = ">";
const l = document.createElement("span");
l.classList.add(`${it}-date-title__next-year`), l.innerText = ">>", e.append(o), e.append(n), e.append(s), e.append(r), e.append(l);
const a = document.createElement("div");
a.classList.add(`${it}-date-week`);
const {
weeks: { sun: O, mon: M, tue: X, wed: P, thu: N, fri: u, sat: h }
} = this.lang;
[O, M, X, P, N, u, h].forEach((U) => {
const I = document.createElement("span");
I.innerText = `${U}`, a.append(I);
});
const Y = document.createElement("div");
Y.classList.add(`${it}-date-day`), R.append(e), R.append(a), R.append(Y);
const S = document.createElement("ul");
S.classList.add(`${it}-time-wrap`);
let W, c, T;
[this.lang.hour, this.lang.minute, this.lang.second].forEach((U, I) => {
const p = document.createElement("li"), g = document.createElement("span");
g.innerText = U, p.append(g);
const J = document.createElement("ol"), y = I === 0, v = I === 1, B = y ? 24 : 60;
for (let tt = 0; tt < B; tt++) {
const st = document.createElement("li");
st.innerText = `${String(tt).padStart(2, "0")}`, st.setAttribute("data-id", `${tt}`), J.append(st);
}
y ? W = J : v ? c = J : T = J, p.append(J), S.append(p);
});
const f = document.createElement("div");
f.classList.add(`${it}-date-menu`);
const D = document.createElement("button");
D.classList.add(`${it}-date-menu__time`), D.innerText = this.lang.timeSelect;
const K = document.createElement("button");
K.classList.add(`${it}-date-menu__now`), K.innerText = this.lang.now;
const Z = document.createElement("button");
return Z.classList.add(`${it}-date-menu__submit`), Z.innerText = this.lang.confirm, f.append(D), f.append(K), f.append(Z), t.append(R), t.append(S), t.append(f), {
container: t,
dateWrap: R,
datePickerWeek: a,
timeWrap: S,
title: {
preYear: o,
preMonth: n,
now: s,
nextMonth: r,
nextYear: l
},
day: Y,
time: {
hour: W,
minute: c,
second: T
},
menu: {
time: D,
now: K,
submit: Z
}
};
}
_bindEvent() {
this.dom.title.preYear.onclick = () => {
this._preYear();
}, this.dom.title.preMonth.onclick = () => {
this._preMonth();
}, this.dom.title.nextMonth.onclick = () => {
this._nextMonth();
}, this.dom.title.nextYear.onclick = () => {
this._nextYear();
}, this.dom.menu.time.onclick = () => {
this.isDatePicker = !this.isDatePicker, this._toggleDateTimePicker();
}, this.dom.menu.now.onclick = () => {
this._now(), this._submit();
}, this.dom.menu.submit.onclick = () => {
this.dispose(), this._submit();
}, this.dom.time.hour.onclick = (t) => {
if (!this.pickDate) return;
const e = t.target.dataset.id;
e && (this.pickDate.setHours(Number(e)), this._setTimePick(!1));
}, this.dom.time.minute.onclick = (t) => {
if (!this.pickDate) return;
const e = t.target.dataset.id;
e && (this.pickDate.setMinutes(Number(e)), this._setTimePick(!1));
}, this.dom.time.second.onclick = (t) => {
if (!this.pickDate) return;
const e = t.target.dataset.id;
e && (this.pickDate.setSeconds(Number(e)), this._setTimePick(!1));
};
}
_setPosition() {
if (!this.renderOptions) return;
const {
position: {
coordinate: {
leftTop: [t, R]
},
lineHeight: e,
pageNo: o
}
} = this.renderOptions, n = this.draw.getHeight(), s = this.draw.getPageGap(), l = (o ?? this.draw.getPageNo()) * (n + s);
this.dom.container.style.left = `${t}px`, this.dom.container.style.top = `${R + l + e}px`;
}
isInvalidDate(t) {
return t.toDateString() === "Invalid Date";
}
_setValue() {
var R;
const t = (R = this.renderOptions) == null ? void 0 : R.value;
if (t) {
const e = new Date(t);
this.now = this.isInvalidDate(e) ? /* @__PURE__ */ new Date() : e;
} else
this.now = /* @__PURE__ */ new Date();
this.pickDate = new Date(this.now);
}
_getLang() {
const t = this.draw.getI18n(), R = t.t.bind(t);
return {
now: R("datePicker.now"),
confirm: R("datePicker.confirm"),
return: R("datePicker.return"),
timeSelect: R("datePicker.timeSelect"),
weeks: {
sun: R("datePicker.weeks.sun"),
mon: R("datePicker.weeks.mon"),
tue: R("datePicker.weeks.tue"),
wed: R("datePicker.weeks.wed"),
thu: R("datePicker.weeks.thu"),
fri: R("datePicker.weeks.fri"),
sat: R("datePicker.weeks.sat")
},
year: R("datePicker.year"),
month: R("datePicker.month"),
hour: R("datePicker.hour"),
minute: R("datePicker.minute"),
second: R("datePicker.second")
};
}
_setLangChange() {
this.dom.menu.time.innerText = this.lang.timeSelect, this.dom.menu.now.innerText = this.lang.now, this.dom.menu.submit.innerText = this.lang.confirm;
const {
weeks: { sun: t, mon: R, tue: e, wed: o, thu: n, fri: s, sat: r }
} = this.lang, l = [t, R, e, o, n, s, r];
this.dom.datePickerWeek.childNodes.forEach((X, P) => {
const N = X;
N.innerText = l[P];
});
const a = this.dom.time.hour.previousElementSibling;
a.innerText = this.lang.hour;
const O = this.dom.time.minute.previousElementSibling;
O.innerText = this.lang.minute;
const M = this.dom.time.second.previousElementSibling;
M.innerText = this.lang.second;
}
_update() {
const t = /* @__PURE__ */ new Date(), R = t.getFullYear(), e = t.getMonth() + 1, o = t.getDate();
let n = null, s = null, r = null;
this.pickDate && (n = this.pickDate.getFullYear(), s = this.pickDate.getMonth() + 1, r = this.pickDate.getDate());
const l = this.now.getFullYear(), a = this.now.getMonth() + 1;
this.dom.title.now.innerText = `${l}${this.lang.year} ${String(
a
).padStart(2, "0")}${this.lang.month}`;
const M = new Date(l, a, 0).getDate();
let X = new Date(l, a - 1, 1).getDay();
X === 0 && (X = 7);
const P = new Date(l, a - 1, 0).getDate();
this.dom.day.innerHTML = "";
const N = P - X + 1;
for (let h = N; h <= P; h++) {
const L = document.createElement("div");
L.classList.add("disable"), L.innerText = `${h}`, L.onclick = () => {
const Y = a - 2;
this.now = new Date(l, Y, h), this._setDatePick(l, Y, h);
}, this.dom.day.append(L);
}
for (let h = 1; h <= M; h++) {
const L = document.createElement("div");
R === l && e === a && o === h && L.classList.add("active"), this.pickDate && n === l && s === a && r === h && L.classList.add("select"), L.innerText = `${h}`, L.onclick = (Y) => {
const S = a - 1;
this.now = new Date(l, S, h), this._setDatePick(l, S, h), Y.stopPropagation();
}, this.dom.day.append(L);
}
const u = 6 * 7 - X - M;
for (let h = 1; h <= u; h++) {
const L = document.createElement("div");
L.classList.add("disable"), L.innerText = `${h}`, L.onclick = () => {
this.now = new Date(l, a, h), this._setDatePick(l, a, h);
}, this.dom.day.append(L);
}
}
_toggleDateTimePicker() {
this.isDatePicker ? (this.dom.dateWrap.classList.add("active"), this.dom.timeWrap.classList.remove("active"), this.dom.menu.time.innerText = this.lang.timeSelect) : (this.dom.dateWrap.classList.remove("active"), this.dom.timeWrap.classList.add("active"), this.dom.menu.time.innerText = this.lang.return, this._setTimePick());
}
_setDatePick(t, R, e) {
var o, n, s;
this.now = new Date(t, R, e), (o = this.pickDate) == null || o.setFullYear(t), (n = this.pickDate) == null || n.setMonth(R), (s = this.pickDate) == null || s.setDate(e), this._update();
}
_setTimePick(t = !0) {
var O, M, X;
const R = ((O = this.pickDate) == null ? void 0 : O.getHours()) || 0, e = ((M = this.pickDate) == null ? void 0 : M.getMinutes()) || 0, o = ((X = this.pickDate) == null ? void 0 : X.getSeconds()) || 0, {
hour: n,
minute: s,
second: r
} = this.dom.time;
[n, s, r].forEach((P) => {
P.querySelectorAll("li").forEach((N) => N.classList.remove("active"));
}), [
[n, R],
[s, e],
[r, o]
].forEach(([P, N]) => {
const u = P.querySelector(`[data-id='${N}']`);
u.classList.add("active"), t && this._scrollIntoView(P, u);
});
}
_scrollIntoView(t, R) {
if (!R) {
t.scrollTop = 0;
return;
}
const e = [];
let o = R.offsetParent;
for (; o && t !== o && t.contains(o); )
e.push(o), o = o.offsetParent;
const n = R.offsetTop + e.reduce((a, O) => a + O.offsetTop, 0), s = n + R.offsetHeight, r = t.scrollTop, l = r + t.clientHeight;
n < r ? t.scrollTop = n : s > l && (t.scrollTop = s - t.clientHeight);
}
_preMonth() {
this.now.setMonth(this.now.getMonth() - 1), this._update();
}
_nextMonth() {
this.now.setMonth(this.now.getMonth() + 1), this._update();
}
_preYear() {
this.now.setFullYear(this.now.getFullYear() - 1), this._update();
}
_nextYear() {
this.now.setFullYear(this.now.getFullYear() + 1), this._update();
}
_now() {
this.pickDate = /* @__PURE__ */ new Date(), this.dispose();
}
_toggleVisible(t) {
t ? this.dom.container.classList.add("active") : this.dom.container.classList.remove("active");
}
_submit() {
var t;
if (this.options.onSubmit && this.pickDate) {
const R = (t = this.renderOptions) == null ? void 0 : t.dateFormat, e = this.formatDate(this.pickDate, R);
this.options.onSubmit(e);
}
}
formatDate(t, R = "YYYY-MM-DD HH:mm:ss") {
let e = R;
const o = t.getFullYear().toString(), n = (t.getMonth() + 1).toString(), s = t.getDate().toString(), r = t.getHours(), l = r % 12 === 0 ? 12 : r % 12, a = t.getMinutes().toString(), O = t.getSeconds().toString(), M = t.getMilliseconds().toString(), X = {
"y+": o,
"Y+": o,
"M+": n,
"d+": s,
"D+": s,
"h+": l.toString(),
"H+": r.toString(),
"m+": a,
"s+": O,
"S+": M
};
for (const P in X) {
const N = new RegExp("(" + P + ")").exec(R), u = P;
N && (e = e.replace(
N[1],
N[1].length === 1 ? X[u] : X[u].padStart(N[1].length, "0")
));
}
return e;
}
render(t) {
this.renderOptions = t, this.lang = this._getLang(), this._setLangChange(), this._setValue(), this._update(), this._setPosition(), this.isDatePicker = !0, this._toggleDateTimePicker(), this._toggleVisible(!0);
}
dispose() {
this._toggleVisible(!1);
}
destroy() {
this.dom.container.remove();
}
}
class Li {
// private options: DeepRequired<IEditorOption>
constructor(t) {
// private draw: DrawPdf
// private range: RangeManager
// DatePicker is the editor-mode popup UI built out of dozens of DOM nodes.
// Skipped entirely in non-browser environments — the PDF render path never
// calls renderDatePicker/clearDatePicker.
F(this, "datePicker");
this.datePicker = typeof document < "u" ? new Si(t, {
// onSubmit: this._setValue.bind(this)
}) : null;
}
// private _setValue(date: string) {
// if (!date) return
// const range = this.getDateElementRange()
// if (!range) return
// const [leftIndex, rightIndex] = range
// const elementList = this.draw.getElementList()
// const startElement = elementList[leftIndex + 1]
// // 删除旧时间
// this.draw.spliceElementList(
// elementList,
// leftIndex + 1,
// rightIndex - leftIndex
// )
// this.range.setRange(leftIndex, leftIndex)
// // 插入新时间
// const dateElement: IElement = {
// type: ElementType.DATE,
// value: '',
// dateFormat: startElement.dateFormat,
// valueList: [
// {
// value: date
// }
// ]
// }
// formatElementContext(elementList, [dateElement], leftIndex, {
// editorOptions: this.draw.getOptions()
// })
// this.draw.insertElementList([dateElement])
// }
// public getDateElementRange(): [number, number] | null {
// let leftIndex = -1
// let rightIndex = -1
// const { startIndex, endIndex } = this.range.getRange()
// if (!~startIndex && !~endIndex) return null
// const elementList = this.draw.getElementList()
// const startElement = elementList[startIndex]
// if (startElement.type !== ElementType.DATE) return null
// // 向左查找
// let preIndex = startIndex
// while (preIndex > 0) {
// const preElement = elementList[preIndex]
// if (preElement.dateId !== startElement.dateId) {
// leftIndex = preIndex
// break
// }
// preIndex--
// }
// // 向右查找
// let nextIndex = startIndex + 1
// while (nextIndex < elementList.length) {
// const nextElement = elementList[nextIndex]
// if (nextElement.dateId !== startElement.dateId) {
// rightIndex = nextIndex - 1
// break
// }
// nextIndex++
// }
// // 控件在最后
// if (nextIndex === elementList.length) {
// rightIndex = nextIndex - 1
// }
// if (!~leftIndex || !~rightIndex) return null
// return [leftIndex, rightIndex]
// }
clearDatePicker() {
var t;
(t = this.datePicker) == null || t.dispose();
}
renderDatePicker(t, R) {
console.log(t, R);
}
}
var qt = /* @__PURE__ */ ((i) => (i.IFRAME = "iframe", i.VIDEO = "video", i))(qt || {});
const kt = class kt {
constructor(t) {
F(this, "element");
F(this, "iframe", null);
F(this, "isReadonly");
this.element = t, this.isReadonly = !1;
}
getIframe() {
return this.iframe;
}
_defineIframeProperties(t) {
Object.defineProperties(t, {
// 禁止获取parent避免安全漏洞
parent: {
get: () => null
},
// 用于区分上下文
__POWERED_BY_CANVAS_EDITOR__: {
get: () => !0
}
});
}
render(t) {
const { iframeBlock: R } = this.element.block || {}, e = document.createElement("iframe");
e.setAttribute("data-id", this.element.id), e.sandbox.add(...(R == null ? void 0 : R.sandbox) || kt.sandbox), e.setAttribute(
"allow",
[(R == null ? void 0 : R.allow) || kt.allow].join(" ")
), e.style.border = "none", e.style.width = "100%", e.style.height = "100%", R != null && R.src ? e.src = R.src : R != null && R.srcdoc && (e.srcdoc = R.srcdoc), t.append(e), this._defineIframeProperties(e.contentWindow), this.iframe = e;
}
setReadonly(t) {
!this.iframe || this.isReadonly === t || (this.isReadonly = t, t ? (this.iframe.style.pointerEvents = "none", this.iframe.setAttribute("tabindex", "-1")) : (this.iframe.style.pointerEvents = "", this.iframe.removeAttribute("tabindex")));
}
};
F(kt, "sandbox", ["allow-scripts", "allow-same-origin"]), F(kt, "allow", ["fullscreen"]);
let MR = kt;
class kR {
constructor(t) {
F(this, "element");
F(this, "videoCache");
this.element = t, this.videoCache = /* @__PURE__ */ new Map();
}
snapshot(t, R, e) {
return new Promise((o, n) => {
var r, l;
const s = ((l = (r = this.element.block) == null ? void 0 : r.videoBlock) == null ? void 0 : l.src) || "";
if (this.videoCache.has(s)) {
const a = this.videoCache.get(s);
t.drawImage(
a,
R,
e,
this.element.metrics.width,
this.element.metrics.height
), o(this.element);
} else {
const a = document.createElement("video");
a.src = s, a.muted = !0, a.crossOrigin = "anonymous", a.onloadeddata = () => {
t.drawImage(
a,
R,
e,
this.element.metrics.width,
this.element.metrics.height
), this.videoCache.set(s, a), o(this.element);
}, a.onerror = (O) => {
n(O);
}, a.play().then(() => {
a.pause();
});
}
});
}
render(t) {
var o;
const R = this.element.block, e = document.createElement("video");
e.style.width = "100%", e.style.height = "100%", e.style.objectFit = "contain", e.src = ((o = R.videoBlock) == null ? void 0 : o.src) || "", e.controls = !0, e.crossOrigin = "anonymous", t.append(e);
}
}
class hi {
constructor(t, R) {
F(this, "draw");
F(this, "options");
F(this, "element");
F(this, "block");
F(this, "blockContainer");
F(this, "blockItem");
F(this, "positionInfo", null);
F(this, "blockCache");
// 缩放业务
F(this, "resizerMask");
F(this, "resizerSelection");
F(this, "resizerHandleList");
F(this, "width");
F(this, "height");
F(this, "mousedownX");
F(this, "mousedownY");
F(this, "curHandleIndex");
F(this, "isAllowResize");
this.draw = t.getDraw(), this.options = this.draw.getOptions(), this.blockContainer = t.getBlockContainer(), this.blockCache = /* @__PURE__ */ new Map(), this.element = R, this.block = null;
const { blockItem: e, resizerMask: o, resizerSelection: n, resizerHandleList: s } = this._createBlockItem();
this.blockItem = e, this.blockContainer.append(this.blockItem), this.resizerMask = o, this.resizerSelection = n, this.resizerHandleList = s, this.width = 0, this.height = 0, this.mousedownX = 0, this.mousedownY = 0, this.curHandleIndex = 0, this.isAllowResize = !1;
}
getBlockElement() {
return this.element;
}
getBlockWidth() {
return this.element.width || this.element.metrics.width;
}
getIFrameBlock() {
return this.block instanceof MR ? this.block : null;
}
getPositionInfo() {
return this.positionInfo;
}
_createBlockItem() {
const { scale: t, resizerColor: R } = this.options, e = document.createElement("div");
e.classList.add(`${it}-block-item`);
const o = document.createElement("div");
o.style.display = "none", o.classList.add(`${it}-resizer-selection`), o.style.borderColor = R, o.style.borderWidth = `${t}px`;
const n = [];
for (let r = 0; r < 8; r++) {
const l = document.createElement("div");
l.style.background = R, l.classList.add("resizer-handle"), l.classList.add(`handle-${r}`), l.setAttribute("data-index", String(r)), l.onmousedown = this._mousedown.bind(this), o.append(l), n.push(l);
}
const s = document.createElement("div");
return s.classList.add(`${it}-resizer-mask`), s.style.display = "none", e.append(s), e.onmouseenter = () => {
const { width: r, height: l } = this.element.metrics;
this._updateResizerRect(r, l), o.style.display = "block";
}, e.onmouseleave = () => {
this.isAllowResize || (o.style.display = "none");
}, e.append(o), {
blockItem: e,
resizerMask: s,
resizerSelection: o,
resizerHandleList: n
};
}
_updateResizerRect(t, R) {
const { resizerSize: e, scale: o } = this.options;
this.resizerSelection.style.width = `${t}px`, this.resizerSelection.style.height = `${R}px`;
for (let n = 0; n < 8; n++) {
const s = n === 0 || n === 6 || n === 7 ? -e : n === 1 || n === 5 ? t / 2 : t - e, r = n === 0 || n === 1 || n === 2 ? -e : n === 3 || n === 7 ? R / 2 - e : R - e;
this.resizerHandleList[n].style.transform = `scale(${o})`, this.resizerHandleList[n].style.left = `${s}px`, this.resizerHandleList[n].style.top = `${r}px`;
}
}
_mousedown(t) {
const R = this.draw.getPage();
this.mousedownX = t.x, this.mousedownY = t.y, this.isAllowResize = !0;
const e = t.target;
this.curHandleIndex = Number(e.dataset.index), this.resizerMask.style.display = "block";
const o = window.getComputedStyle(e).cursor;
document.body.style.cursor = o, R.style.cursor = o;
const n = this._mousemove.bind(this);
document.addEventListener("mousemove", n), document.addEventListener(
"mouseup",
() => {
this.element.width = Math.min(this.width, this.draw.getInnerWidth()), this.element.height = this.height, this.isAllowResize = !1, this.resizerSelection.style.display = "none", this.resizerMask.style.display = "none", document.removeEventListener("mousemove", n), document.body.style.cursor = "", R.style.cursor = "text", this.draw.render();
},
{
once: !0
}
), t.preventDefault();
}
_mousemove(t) {
if (!this.isAllowResize) return;
const { scale: R } = this.options;
let e = 0, o = 0;
switch (this.curHandleIndex) {
case 0:
{
const a = this.mousedownX - t.x, O = this.mousedownY - t.y;
e = Math.cbrt(a ** 3 + O ** 3), o = this.element.height * e / this.getBlockWidth();
}
break;
case 1:
o = this.mousedownY - t.y;
break;
case 2:
{
const a = t.x - this.mousedownX, O = this.mousedownY - t.y;
e = Math.cbrt(a ** 3 + O ** 3), o = this.element.height * e / this.getBlockWidth();
}
break;
case 4:
{
const a = t.x - this.mousedownX, O = t.y - this.mousedownY;
e = Math.cbrt(a ** 3 + O ** 3), o = this.element.height * e / this.getBlockWidth();
}
break;
case 3:
e = t.x - this.mousedownX;
break;
case 5:
o = t.y - this.mousedownY;
break;
case 6:
{
const a = this.mousedownX - t.x, O = t.y - this.mousedownY;
e = Math.cbrt(a ** 3 + O ** 3), o = this.element.height * e / this.getBlockWidth();
}
break;
case 7:
e = this.mousedownX - t.x;
break;
}
const n = this.getBlockWidth() + e / R, s = this.element.height + o / R;
if (n <= 0 || s <= 0) return;
this.width = n, this.height = s;
const r = n * R, l = s * R;
this._updateResizerRect(r, l), this.blockItem.style.width = `${r}px`, this.blockItem.style.height = `${l}px`, t.preventDefault();
}
snapshot(t, R, e) {
if (this.element.block.type === qt.VIDEO)
if (this.blockItem.style.display = "none", this.blockCache.has(this.element.id))
this.blockCache.get(this.element.id).snapshot(t, R, e);
else {
this.block = new kR(this.element);
const n = this.block.snapshot(t, R, e);
this.draw.getImageObserver().add(n), this.blockCache.set(this.element.id, this.block);
}
}
render() {
const t = this.element.block;
t.type === qt.IFRAME ? (this.block = new MR(this.element), this.block.render(this.blockItem)) : t.type === qt.VIDEO && (this.block = new kR(this.element), this.block.render(this.blockItem));
}
setClientRects(t, R, e) {
const o = this.draw.getHeight(), n = this.draw.getPageGap(), s = t * (o + n), { metrics: r } = this.element;
this.blockItem.style.display = "block", this.blockItem.style.width = `${r.width}px`, this.blockItem.style.height = `${r.height}px`, this.blockItem.style.left = `${R}px`, this.blockItem.style.top = `${s + e}px`, this.positionInfo = { pageNo: t, x: R, y: e };
}
setStatus() {
this.block instanceof MR;
}
remove() {
this.blockItem.remove();
}
}
class Ti {
constructor(t) {
F(this, "draw");
// private container: HTMLDivElement
// BLOCK elements (iframe, video, etc.) don't render to PDF — they need a
// live DOM to host an <iframe>/<video>. In non-browser environments the
// container stays null and the rendering code paths skip it.
F(this, "blockContainer");
F(this, "blockMap");
this.draw = t, this.blockMap = /* @__PURE__ */ new Map(), this.blockContainer = this._createBlockContainer();
}
_createBlockContainer() {
if (typeof document > "u") return null;
const t = document.createElement("div");
return t.classList.add(`${it}-block-container`), t;
}
getDraw() {
return this.draw;
}
getBlockContainer() {
return this.blockContainer;
}
render(t, R, e, o, n) {
const s = e.id;
let r = this.blockMap.get(s);
r || (r = new hi(this, e), r.render(), this.blockMap.set(s, r)), r.setClientRects(R, o, n);
}
clear() {
if (!this.blockMap.size) return;
const t = this.draw.getOriginalMainElementList(), R = [];
for (let e = 0; e < t.length; e++) {
const o = t[e];
o.type === V.BLOCK && R.push(o.id);
}
this.blockMap.forEach((e) => {
const o = e.getBlockElement().id;
R.includes(o) || (e.remove(), this.blockMap.delete(o));
});
}
update() {
this.blockMap.forEach((t) => {
var e, o, n, s, r;
const R = t.getBlockElement();
if (((e = R.block) == null ? void 0 : e.type) === qt.IFRAME && ((o = R.block.iframeBlock) != null && o.srcdoc)) {
const l = (r = (s = (n = t.getIFrameBlock) == null ? void 0 : n.call(t)) == null ? void 0 : s.getIframe) == null ? void 0 : r.call(s);
l != null && l.contentDocument && (R.block.iframeBlock.srcdoc = l.contentDocument.documentElement.outerHTML);
}
});
}
async drawIframeToPage(t, R) {
const e = [];
this.blockMap.forEach((o) => {
var P, N, u;
if (((P = o.getBlockElement().block) == null ? void 0 : P.type) !== qt.IFRAME) return;
const n = o.getPositionInfo();
if (!n) return;
const s = (N = o.getIFrameBlock()) == null ? void 0 : N.getIframe();
if (!s) return;
const { pageNo: r, x: l, y: a } = n, O = (u = t[r]) == null ? void 0 : u.getContext("2d");
if (!O) return;
const { width: M, height: X } = o.getBlockElement().metrics;
e.push(
R(s).then((h) => Ke(h)).then((h) => O.drawImage(h, l, a, M, X))
);
}), await Promise.allSettled(e);
}
// public pickIframeInfo(): IIframeInfo[][] {
// const result: IIframeInfo[][] = []
// const { scale } = this.options
// this.blockMap.forEach(cacheBlock => {
// const element = cacheBlock.getBlockElement()
// if (
// !element.block?.iframeBlock ||
// element.block.type !== BlockType.IFRAME
// ) {
// return
// }
// // 获取位置信息
// const positionInfo = cacheBlock.getPositionInfo()
// if (!positionInfo) return
// const { pageNo, x, y } = positionInfo
// if (!result[pageNo]) {
// result[pageNo] = []
// }
// result[pageNo].push({
// x,
// y,
// width: element.metrics.width / scale,
// height: element.metrics.height / scale,
// src: element.block.iframeBlock.src,
// srcdoc: element.block.iframeBlock.srcdoc
// })
// })
// return result
// }
}
const Wi = {
now: "此刻",
confirm: "确定",
return: "返回日期",
timeSelect: "时间选择",
weeks: {
sun: "日",
mon: "一",
tue: "二",
wed: "三",
thu: "四",
fri: "五",
sat: "六"
},
year: "年",
month: "月",
hour: "时",
minute: "分",
second: "秒"
}, Yi = {
header: "页眉",
footer: "页脚"
}, Vi = {
displayName: "分页符"
}, ci = {
headerTip: "双击编辑页眉",
footerTip: "双击编辑页脚"
}, KR = {
datePicker: Wi,
frame: Yi,
pageBreak: Vi,
zone: ci
}, Qi = {
now: "Now",
confirm: "Confirm",
return: "Return",
timeSelect: "Time select",
weeks: {
sun: "Sun",
mon: "Mon",
tue: "Tue",
wed: "Wed",
thu: "Thu",
fri: "Fri",
sat: "Sat"
},
year: " ",
month: " ",
hour: "Hour",
minute: "Minute",
second: "Second"
}, Zi = {
header: "Header",
footer: "Footer"
}, Ui = {
displayName: "Page Break"
}, Ki = {
headerTip: "Double click to edit header",
footerTip: "Double click to edit footer"
}, di = {
datePicker: Qi,
frame: Zi,
pageBreak: Ui,
zone: Ki
};
class gi {
constructor() {
F(this, "langMap", /* @__PURE__ */ new Map([
["zhCN", KR],
["en", di]
]));
F(this, "currentLocale", "zhCN");
}
registerLangMap(t, R) {
const e = this.langMap.get(t);
this.langMap.set(t, te(e || KR, R));
}
getLocale() {
return this.currentLocale;
}
setLocale(t) {
this.currentLocale = t;
}
getLang() {
return this.langMap.get(this.currentLocale) || KR;
}
t(t) {
const R = t.split(".");
let e = "", o = this.getLang();
for (let n = 0; n < R.length; n++) {
const s = R[n], r = Reflect.get(o, s);
if (r)
e = o = r;
else
return "";
}
return e;
}
}
class Ii {
constructor() {
F(this, "promiseList");
this.promiseList = [];
}
add(t) {
this.promiseList.push(t);
}
clearAll() {
this.promiseList = [];
}
allSettled() {
return Promise.allSettled(this.promiseList);
}
}
class Di {
constructor(t, R) {
F(this, "draw");
F(this, "position");
F(this, "options");
F(this, "elementList");
F(this, "rowList");
F(this, "positionList");
this.draw = t, this.position = t.getPosition(), this.options = t.getOptions(), this.elementList = R || [], this.rowList = [], this.positionList = [];
}
getRowList() {
return this.rowList;
}
setElementList(t) {
this.elementList = t;
}
getElementList() {
return this.elementList;
}
getPositionList() {
return this.positionList;
}
compute() {
this.recovery(), this._computeRowList(), this._computePositionList();
}
recovery() {
this.rowList = [], this.positionList = [];
}
_computeRowList() {
const t = this.draw.getInnerWidth();
this.rowList = this.draw.computeRowList({
innerWidth: t,
elementList: this.elementList
});
}
_computePositionList() {
const t = this.getFooterBottom(), R = this.draw.getInnerWidth(), o = this.draw.getMargins()[3], n = this.draw.getHeight(), s = this.getHeight(), r = n - t - s;
this.position.computePageRowPosition({
positionList: this.positionList,
rowList: this.rowList,
pageNo: 0,
startRowIndex: 0,
startIndex: 0,
startX: o,
startY: r,
innerWidth: R,
zone: Qt.FOOTER
});
}
getFooterBottom(t) {
if (this.isDisabled(t)) return 0;
const {
footer: { bottom: R },
scale: e
} = this.options;
return Math.floor(R * e);
}
getMaxHeight() {
const {
footer: { maxHeightRadio: t }
} = this.options, R = this.draw.getHeight();
return Math.floor(R * qR[t]);
}
getHeight(t) {
if (this.isDisabled(t)) return 0;
const R = this.getMaxHeight(), e = this.getRowHeight();
return e > R ? R : e;
}
getRowHeight() {
return this.rowList.reduce((t, R) => t + R.height, 0);
}
getExtraHeight(t) {
const R = this.draw.getMargins(), e = this.getHeight(t), n = this.getFooterBottom(t) + e - R[2];
return n <= 0 ? 0 : n;
}
isDisabled(t) {
return !!(this.options.footer.disabled || t !== void 0 && this.options.footer.disabledPages.includes(t));
}
render(t, R) {
if (this.options.footer.disabledPages.includes(R)) return;
t.globalAlpha = 1;
const e = this.draw.getInnerWidth(), o = this.getMaxHeight(), n = [];
let s = 0;
for (let r = 0; r < this.rowList.length; r++) {
const l = this.rowList[r];
if (s + l.height > o)
break;
n.push(l), s += l.height;
}
this.draw.drawRow(t, {
elementList: this.elementList,
positionList: this.positionList,
rowList: n,
pageNo: R,
startIndex: 0,
innerWidth: e,
zone: Qt.FOOTER
});
}
}
var fR = /* @__PURE__ */ ((i) => (i.Delete = "Delete", i.Backspace = "Backspace", i.Enter = "Enter", i.Left = "ArrowLeft", i.Right = "ArrowRight", i.Up = "ArrowUp", i.Down = "ArrowDown", i.ESC = "Escape", i.TAB = "Tab", i.META = "Meta", i.LEFT_BRACKET = "[", i.RIGHT_BRACKET = "]", i.COMMA = ",", i.PERIOD = ".", i.LEFT_ANGLE_BRACKET = "<", i.RIGHT_ANGLE_BRACKET = ">", i.EQUAL = "=", i.MINUS = "-", i.PLUS = "+", i.A = "a", i.B = "b", i.C = "c", i.D = "d", i.E = "e", i.F = "f", i.G = "g", i.H = "h", i.I = "i", i.J = "j", i.K = "k", i.L = "l", i.M = "m", i.N = "n", i.O = "o", i.P = "p", i.Q = "q", i.R = "r", i.S = "s", i.T = "t", i.U = "u", i.V = "v", i.W = "w", i.X = "x", i.Y = "y", i.Z = "z", i.A_UPPERCASE = "A", i.B_UPPERCASE = "B", i.C_UPPERCASE = "C", i.D_UPPERCASE = "D", i.E_UPPERCASE = "E", i.F_UPPERCASE = "F", i.G_UPPERCASE = "G", i.H_UPPERCASE = "H", i.I_UPPERCASE = "I", i.J_UPPERCASE = "J", i.K_UPPERCASE = "K", i.L_UPPERCASE = "L", i.M_UPPERCASE = "M", i.N_UPPERCASE = "N", i.O_UPPERCASE = "O", i.P_UPPERCASE = "P", i.Q_UPPERCASE = "Q", i.R_UPPERCASE = "R", i.S_UPPERCASE = "S", i.T_UPPERCASE = "T", i.U_UPPERCASE = "U", i.V_UPPERCASE = "V", i.W_UPPERCASE = "W", i.X_UPPERCASE = "X", i.Y_UPPERCASE = "Y", i.Z_UPPERCASE = "Z", i.ZERO = "0", i.ONE = "1", i.TWO = "2", i.THREE = "3", i.FOUR = "4", i.FIVE = "5", i.SIX = "6", i.SEVEN = "7", i.EIGHT = "8", i.NINE = "9", i))(fR || {});
class fi {
constructor(t) {
F(this, "draw");
// private range: RangeManager
F(this, "options");
// 非递增样式直接返回默认值
F(this, "UN_COUNT_STYLE_WIDTH", 20);
F(this, "MEASURE_BASE_TEXT", "0");
F(this, "LIST_GAP", 10);
// 每一级列表的缩进宽度(用于嵌套列表)
F(this, "LIST_INDENT_WIDTH", 30);
this.draw = t, this.options = t.getOptions();
}
// public setList(listType: ListType | null, listStyle?: ListStyle) {
// const isReadonly = this.draw.isReadonly()
// if (isReadonly) return
// const { startIndex, endIndex } = this.range.getRange()
// if (!~startIndex && !~endIndex) return
// // 需要改变的元素列表
// const changeElementList = this.range.getRangeParagraphElementList()
// if (!changeElementList || !changeElementList.length) return
// // 如果包含列表则设置为取消列表
// const isUnsetList = changeElementList.find(
// el => el.listType === listType && el.listStyle === listStyle
// )
// if (isUnsetList || !listType) {
// this.unsetList()
// return
// }
// // 设置值
// const listId = getUUID()
// changeElementList.forEach(el => {
// el.listId = listId
// el.listType = listType
// el.listStyle = listStyle
// })
// // 光标定位
// const isSetCursor = startIndex === endIndex
// const curIndex = isSetCursor ? endIndex : startIndex
// this.draw.render({ curIndex, isSetCursor })
// }
// public unsetList() {
// const isReadonly = this.draw.isReadonly()
// if (isReadonly) return
// const { startIndex, endIndex } = this.range.getRange()
// if (!~startIndex && !~endIndex) return
// // 需要改变的元素列表
// const changeElementList = this.range
// .getRangeParagraphElementList()
// ?.filter(el => el.listId)
// if (!changeElementList || !changeElementList.length) return
// // 如果列表最后字符不是换行符则需插入换行符
// const elementList = this.draw.getElementList()
// const endElement = elementList[endIndex]
// if (endElement.listId) {
// let start = endIndex + 1
// while (start < elementList.length) {
// const element = elementList[start]
// if (element.value === ZERO && !element.listWrap) break
// if (element.listId !== endElement.listId) {
// this.draw.spliceElementList(elementList, start, 0, {
// value: ZERO
// })
// break
// }
// start++
// }
// }
// // 取消设置
// changeElementList.forEach(el => {
// delete el.listId
// delete el.listType
// delete el.listStyle
// delete el.listWrap
// })
// // 光标定位
// const isSetCursor = startIndex === endIndex
// const curIndex = isSetCursor ? endIndex : startIndex
// this.draw.render({ curIndex, isSetCursor })
// }
computeListStyle(t, R) {
const e = /* @__PURE__ */ new Map();
let o = 0;
if (!R[o]) return e;
let n = R[o].listId, s = [];
const r = R.length;
for (; o < r; ) {
const l = R[o];
if (n && n === l.listId)
s.push(l);
else if (l.listId && l.listId !== n) {
if (s.length) {
const a = this.getListStyleWidth(t, s);
e.set(n, a);
}
n = l.listId, s = n ? [l] : [];
}
o++;
}
if (s.length) {
const l = this.getListStyleWidth(t, s);
e.set(n, l);
}
return e;
}
findStyledElement(t) {
let R = t[0];
for (let e = 1; e < t.length; e++) {
const o = t[e];
if (o.font || o.size || o.bold || o.italic) {
R = o;
break;
}
}
return R;
}
getListFontStyle(t, R) {
if (this.options.list.inheritStyle) {
const e = this.findStyledElement(t);
return this.draw.getFont(e, R);
} else {
const { defaultFont: e, defaultSize: o } = this.options;
return `${o * R}px ${e}`;
}
}
getListStyleWidth(t, R) {
const { scale: e, checkbox: o } = this.options, n = R[0];
if (n.listStyle && n.listStyle !== Vt.DECIMAL)
return n.listStyle === Vt.CHECKBOX ? (o.width + this.LIST_GAP) * e : this.UN_COUNT_STYLE_WIDTH * e;
const s = R.reduce((a, O) => (O.value === q && (a += 1), a), 0);
if (!s) return 0;
t.save(), t.font = this.getListFontStyle(R, e);
const r = `${this.MEASURE_BASE_TEXT.repeat(String(s).length - 1 || 1)}${fR.PERIOD}`, l = this.draw.getFakeCtx().measureText(r);
return t.restore(), Math.ceil((l.width + this.LIST_GAP) * e);
}
drawListStyle(t, R, e) {
var L;
const { elementList: o, offsetX: n, listIndex: s, ascent: r } = R, l = o[0];
if (l.value !== q || l.listWrap) return;
let a = 0;
const { defaultTabWidth: O, scale: M } = this.options;
for (let Y = 1; Y < o.length; Y++) {
const S = o[Y];
if ((S == null ? void 0 : S.type) !== V.TAB) break;
a += O * M;
}
const {
coordinate: {
leftTop: [X, P]
}
} = e, N = l.listLevel ? this.LIST_INDENT_WIDTH * l.listLevel * M : 0, u = X - n + N + a, h = P + r;
if (l.listStyle === Vt.CHECKBOX) {
const { width: Y, height: S, gap: W } = this.options.checkbox, c = {
...l,
checkbox: {
value: !!((L = l.checkbox) != null && L.value)
},
metrics: {
...l.metrics,
width: (Y + W * 2) * M,
height: S * M
}
};
this.draw.getCheckboxParticle().render({
ctx2d: t,
x: u - W * M,
y: h,
index: 0,
row: {
...R,
elementList: [c, ...R.elementList]
}
});
} else {
let Y = "";
if (l.listType === hR.UL) {
const S = l.listLevel ?? 0, W = [Ht.DISC, Ht.CIRCLE, Ht.SQUARE], c = W[S % W.length], T = S === 0 ? l.listStyle || Ht.DISC : c;
Y = AR[T] || AR[Ht.DISC];
} else
Y = `${s + 1}${fR.PERIOD}`;
if (!Y) return;
t.save(), t.font = this.getListFontStyle(o, M), t.fillText(Y, u, h), t.restore();
}
}
}
const zt = class zt {
// 距离左边间隙
constructor(t) {
F(this, "options");
this.options = t.getOptions();
}
render(t, R, e, o) {
const {
scale: n,
lineBreak: { color: s, lineWidth: r }
} = this.options;
t.save(), t.beginPath();
const l = o - zt.HEIGHT * n / 2, a = e + R.metrics.width;
t.translate(a, l), t.scale(n, n), t.strokeStyle = s, t.lineWidth = r, t.lineCap = "round", t.lineJoin = "round", t.beginPath(), t.moveTo(8, 0), t.lineTo(12, 0), t.lineTo(12, 6), t.lineTo(3, 6), t.moveTo(3, 6), t.lineTo(6, 3), t.moveTo(3, 6), t.lineTo(6, 9), t.stroke(), t.closePath(), t.restore();
}
};
F(zt, "WIDTH", 12), F(zt, "HEIGHT", 9), F(zt, "GAP", 3);
let XR = zt;
class Me {
constructor(t) {
F(this, "draw");
F(this, "position");
F(this, "options");
F(this, "elementList");
F(this, "rowList");
F(this, "positionList");
this.draw = t, this.position = t.getPosition(), this.options = t.getOptions(), this.elementList = [], this.rowList = [], this.positionList = [];
}
_recovery() {
this.elementList = [], this.rowList = [], this.positionList = [];
}
_compute(t) {
this._computeRowList(), this._computePositionList(t);
}
_computeRowList() {
const t = this.draw.getInnerWidth();
this.rowList = this.draw.computeRowList({
innerWidth: t,
elementList: this.elementList
});
}
_computePositionList(t) {
const { lineBreak: R, scale: e } = this.options, o = this.draw.getHeader().getExtraHeight(), n = this.draw.getInnerWidth(), s = this.draw.getMargins();
let r = s[3];
R.disabled || (r += (XR.WIDTH + XR.GAP) * e);
const l = (t == null ? void 0 : t.startY) || s[0] + o;
this.position.computePageRowPosition({
positionList: this.positionList,
rowList: this.rowList,
pageNo: 0,
startRowIndex: 0,
startIndex: 0,
startX: r,
startY: l,
innerWidth: n
});
}
render(t, R) {
const { placeholder: e = this.options.placeholder } = R || {}, { data: o, font: n, size: s, color: r, opacity: l } = e;
this._recovery(), this.elementList = [
{
value: o,
font: n,
size: s,
color: r
}
], Ct(this.elementList, {
editorOptions: this.options,
isForceCompensation: !0
}), this._compute(R);
const a = this.draw.getInnerWidth();
t.save(), t.globalAlpha = l, this.draw.drawRow(t, {
elementList: this.elementList,
positionList: this.positionList,
rowList: this.rowList,
pageNo: 0,
startIndex: 0,
innerWidth: a,
isDrawLineBreak: !1
}), t.restore();
}
}
class Hi {
constructor(t) {
F(this, "draw");
F(this, "options");
// private range: RangeManager
F(this, "fillRectMap");
this.draw = t, this.options = t.getOptions(), this.fillRectMap = /* @__PURE__ */ new Map();
}
setGroup() {
return this.draw.render({
isSetCursor: !1,
isCompute: !1
}), null;
}
getElementListByGroupId(t, R) {
var o, n;
const e = [];
for (let s = 0; s < t.length; s++) {
const r = t[s];
if (r.type === V.TABLE) {
const l = r.trList;
for (let a = 0; a < l.length; a++) {
const O = l[a];
for (let M = 0; M < O.tdList.length; M++) {
const X = O.tdList[M], P = this.getElementListByGroupId(
X.value,
R
);
if (P.length)
return e.push(...P), e;
}
}
}
if ((o = r == null ? void 0 : r.groupIds) != null && o.includes(R)) {
e.push(r);
const l = t[s + 1];
if (!((n = l == null ? void 0 : l.groupIds) != null && n.includes(R))) break;
}
}
return e;
}
deleteGroup(t) {
const R = this.draw.getOriginalMainElementList(), e = this.getElementListByGroupId(R, t);
if (e.length) {
for (let o = 0; o < e.length; o++) {
const n = e[o], s = n.groupIds, r = s.findIndex((l) => l === t);
s.splice(r, 1), s.length || delete n.groupIds;
}
this.draw.render({
isSetCursor: !1,
isCompute: !1
});
}
}
getContextByGroupId(t, R) {
var e, o;
for (let n = 0; n < t.length; n++) {
const s = t[n];
if (s.type === V.TABLE) {
const l = s.trList;
for (let a = 0; a < l.length; a++) {
const O = l[a];
for (let M = 0; M < O.tdList.length; M++) {
const X = O.tdList[M], P = this.getContextByGroupId(X.value, R);
if (P)
return {
...P,
isTable: !0,
index: n,
trIndex: a,
tdIndex: M,
tdId: X.id,
trId: O.id,
tableId: s.tableId
};
}
}
}
const r = t[n + 1];
if ((e = s.groupIds) != null && e.includes(R) && !((o = r == null ? void 0 : r.groupIds) != null && o.includes(R)))
return {
isTable: !1,
startIndex: n,
endIndex: n
};
}
return null;
}
clearFillInfo() {
this.fillRectMap.clear();
}
recordFillInfo(t, R, e, o, n) {
const s = t.groupIds;
if (s)
for (const r of s) {
const l = this.fillRectMap.get(r);
l ? l.width += o : this.fillRectMap.set(r, {
x: R,
y: e,
width: o,
height: n
});
}
}
render(t) {
if (!this.fillRectMap.size) return;
const {
group: { backgroundColor: R, opacity: e, activeOpacity: o, activeBackgroundColor: n }
} = this.options, l = this.draw.getElementList().filter((a) => a.groupIds).reduce((a, O) => {
var M;
return (M = O.groupIds) == null || M.forEach((X) => a.push(X)), a;
}, []);
t.save(), this.draw.getPdf().setGState(new tR({
opacity: e
})), this.fillRectMap.forEach((a, O) => {
const { x: M, y: X, width: P, height: N } = a;
l != null && l.includes(O) ? (t.globalAlpha = o, t.fillStyle = n) : (t.globalAlpha = e, t.fillStyle = R), t.fillRect(M, X, P, N);
}), this.draw.getPdf().setGState(new tR({
opacity: 1
})), t.restore(), this.clearFillInfo();
}
}
var CR = /* @__PURE__ */ ((i) => (i.PAGE = "page", i.CONTINUITY = "continuity", i))(CR || {});
class Gi {
constructor(t) {
F(this, "draw");
F(this, "options");
this.draw = t, this.options = t.getOptions();
}
render(t, R) {
const {
scale: e,
lineNumber: { color: o, size: n, font: s, right: r, type: l }
} = this.options, a = this.draw.getTextParticle(), O = this.draw.getMargins(), M = this.draw.getPosition().getOriginalMainPositionList(), P = this.draw.getPageRowList()[R];
t.save(), t.fillStyle = o, t.font = `${n * e}px ${s}`;
for (let N = 0; N < P.length; N++) {
const u = P[N], {
coordinate: { leftBottom: h }
} = M[u.startIndex], L = l === CR.PAGE ? N + 1 : u.rowIndex + 1, Y = a.measureText(t, {
value: `${L}`
}), S = O[3] - (Y.width + r) * e, W = h[1] - Y.actualBoundingBoxAscent * e;
t.fillText(`${L}`, S, W);
}
t.restore();
}
}
class Ji {
constructor(t) {
F(this, "draw");
F(this, "header");
F(this, "footer");
F(this, "options");
this.draw = t, this.header = t.getHeader(), this.footer = t.getFooter(), this.options = t.getOptions();
}
render(t) {
const {
scale: R,
pageBorder: { color: e, lineWidth: o, padding: n }
} = this.options;
t.save(), t.translate(0.5, 0.5), t.strokeStyle = e, t.lineWidth = o * R;
const s = this.draw.getMargins(), r = s[3] - n[3] * R, l = s[0] + this.header.getExtraHeight() - n[0] * R, a = this.draw.getInnerWidth() + (n[1] + n[3]) * R, O = this.draw.getHeight() - l - this.footer.getExtraHeight() - s[2] + n[2] * R;
t.rect(r, l, a, O), t.stroke(), t.restore();
}
}
class pi {
constructor(t) {
F(this, "draw");
F(this, "options");
F(this, "layout");
this.draw = t, this.options = t.getOptions(), this.layout = null;
}
// 根据可用宽度和分栏配置计算布局;count<=1 或无配置时返回 null
computeLayout(t, R) {
if (!R) return null;
const e = Math.max(1, Math.floor(R.count));
if (e === 1) return null;
const o = (R.gap ?? this.options.column.gap) * this.options.scale, n = t / e * 0.5, s = Math.max(0, Math.min(o, n)), r = (t - s * (e - 1)) / e, l = [];
for (let a = 0; a < e; a++)
l.push(a * (r + s));
return { count: e, width: r, gap: s, separator: R.separator ?? !1, offsets: l };
}
// 重算布局
compute() {
this.layout = this.computeLayout(
this.draw.getInnerWidth(),
this.options.column
);
}
getLayout() {
return this.layout;
}
// 设置分栏配置
setConfig(t) {
!t || t.count <= 1 ? this.options.column = { ...this.options.column, count: 1 } : this.options.column = {
...this.options.column,
...t,
count: Math.max(1, Math.floor(t.count))
};
}
// 根据栏索引获取 X 偏移;无布局或索引非法时返回 0
getOffset(t) {
return !this.layout || t === void 0 || t < 0 || t >= this.layout.count ? 0 : this.layout.offsets[t];
}
// 绘制栏间分隔线;仅在 separator 开启且 count>=2 时实际绘制
drawSeparator(t, R) {
const e = this.layout;
if (!e || !e.separator || e.count < 2) return;
const { column: o, scale: n } = this.options, s = this.draw.getMargins(), r = s[3], l = s[0] + this.draw.getHeader().getExtraHeight(R), a = this.draw.getHeight() - s[2] - this.draw.getFooter().getExtraHeight(R);
t.save(), t.strokeStyle = o.separatorColor, t.lineWidth = o.separatorWidth * n, t.beginPath();
for (let O = 1; O < e.count; O++) {
const M = r + e.offsets[O] - e.gap / 2;
t.moveTo(M + 0.5, l), t.lineTo(M + 0.5, a);
}
t.stroke(), t.restore();
}
}
const bi = {
color: "#FFFFFF",
image: "",
size: bR.COVER,
repeat: yt.NO_REPEAT,
applyPageNumbers: []
}, mi = {
width: 14,
height: 14,
gap: 5,
lineWidth: 1,
fillStyle: "#5175f4",
strokeStyle: "#ffffff",
verticalAlign: ht.BOTTOM
}, Ei = {
placeholderColor: "#9c9b9b",
bracketColor: "#000000",
prefix: "{",
postfix: "}",
borderWidth: 1,
borderColor: "#000000",
activeBackgroundColor: "",
disabledBackgroundColor: "",
existValueBackgroundColor: "",
noValueBackgroundColor: ""
}, Ci = {
width: 1,
color: "#000",
dragWidth: 3,
dragColor: "#007fff"
}, wi = {
bottom: 30,
inactiveAlpha: 1,
maxHeightRadio: jt.HALF,
disabled: !1,
editable: !0,
disabledPages: []
}, yi = {
opacity: 0.1,
backgroundColor: "#E99D00",
activeOpacity: 0.5,
activeBackgroundColor: "#E99D00",
disabled: !1
}, xi = {
top: 30,
inactiveAlpha: 1,
maxHeightRadio: jt.HALF,
disabled: !1,
editable: !0,
disabledPages: []
}, Bi = {
defaultColor: "#1976d2",
defaultBackgroundColor: "#e3f2fd",
defaultBorderRadius: 4,
defaultPadding: [4, 4, 4, 4]
}, _i = {
color: "#666666",
font: "Microsoft YaHei",
size: 12,
top: 5
}, Ai = {
disabled: !0,
color: "#CCCCCC",
lineWidth: 1.5
}, vi = {
font: "Microsoft YaHei",
fontSize: 12,
lineDash: [3, 1]
}, Oe = {
data: "",
color: "#DCDFE6",
opacity: 1,
size: 16,
font: "Microsoft YaHei"
}, ki = {
width: 14,
height: 14,
gap: 5,
lineWidth: 1,
fillStyle: "#5175f4",
strokeStyle: "#000000",
verticalAlign: ht.BOTTOM
}, zi = {
lineWidth: 1,
strokeStyle: "#000000"
}, $i = {
tdPadding: [0, 5, 5, 5],
defaultTrMinHeight: 42,
defaultColMinWidth: 40,
defaultBorderColor: "#000000",
overflow: !1
}, ji = {
data: "",
type: ER.TEXT,
width: 0,
height: 0,
color: "#AEB5C0",
opacity: 0.3,
size: 200,
font: "Microsoft YaHei",
repeat: !1,
gap: [10, 10],
numberType: WR.ARABIC,
layer: TR.BOTTOM
}, qi = {
tipDisabled: !0
}, ts = {
size: 12,
font: "Microsoft YaHei",
color: "#000000",
disabled: !0,
right: 20,
type: CR.CONTINUITY
}, Rs = {
count: 1,
gap: 20,
separator: !1,
separatorColor: "#000000",
separatorWidth: 1
}, es = {
color: "#000000",
lineWidth: 1,
padding: [0, 5, 0, 5],
disabled: !0
}, is = {
top: 0,
left: 5
}, ss = {
defaultLineColor: "#000000",
defaultLineWidth: 2
};
function zR(i = {}) {
var Z, U, I;
const t = {
...$i,
...i.table
}, R = {
...xi,
...i.header
}, e = {
...wi,
...i.footer
}, o = {
...oi,
...i.pageNumber
}, n = {
...ji,
...i.watermark
}, s = {
...Ei,
...i.control
}, r = {
...mi,
...i.checkbox
}, l = {
...ki,
...i.radio
}, a = {
...Ci,
...i.cursor
}, O = {
...ve,
...i.title
}, M = {
...Oe,
...i.placeholder
}, X = {
...yi,
...i.group
}, P = {
...vi,
...i.pageBreak
}, N = {
...qi,
...i.zone
}, u = {
...bi,
...i.background
}, h = {
...Ai,
...i.lineBreak
}, L = {
...zi,
...i.separator
}, Y = {
...ts,
...i.lineNumber
}, S = {
...es,
...i.pageBorder
}, W = {
...is,
...i.badge
}, c = {
...ss,
...i.graffiti
}, T = {
...Bi,
...i.label
}, H = {
..._i,
...i.imgCaption
}, f = {
..._e,
...i.list
}, D = {
...Rs,
...i.column
}, K = {
print: {
...QR.print,
...(Z = i.modeRule) == null ? void 0 : Z.print
},
readonly: {
...QR.readonly,
...(U = i.modeRule) == null ? void 0 : U.readonly
},
form: {
...QR.form,
...(I = i.modeRule) == null ? void 0 : I.form
}
};
return {
mode: dt.EDIT,
locale: "zhCN",
defaultType: "TEXT",
defaultColor: "#000000",
defaultFont: "Microsoft YaHei",
defaultSize: 16,
minSize: 5,
maxSize: 72,
defaultRowMargin: 1,
defaultBasicRowMarginHeight: 8,
defaultTabWidth: 32,
width: 794,
height: 1123,
scale: 1,
pageGap: 20,
underlineColor: "#000000",
strikeoutColor: "#FF0000",
rangeAlpha: 0.6,
rangeColor: "#AECBFA",
rangeMinWidth: 5,
searchMatchAlpha: 0.6,
searchMatchColor: "#FFFF00",
searchNavigateMatchColor: "#AAD280",
highlightAlpha: 0.6,
highlightMarginHeight: 8,
resizerColor: "#4182D9",
resizerSize: 5,
marginIndicatorSize: 35,
marginIndicatorColor: "#BABABA",
margins: [100, 120, 100, 120],
pageMode: bt.PAGING,
renderMode: JR.SPEED,
defaultHyperlinkColor: "#0000FF",
paperDirection: _t.VERTICAL,
inactiveAlpha: 0.6,
historyMaxRecordCount: 100,
wordBreak: GR.BREAK_WORD,
printPixelRatio: 3,
maskMargin: [0, 0, 0, 0],
letterClass: [Se.ENGLISH],
contextMenuDisableKeys: [],
shortcutDisableKeys: [],
scrollContainerSelector: "",
pageOuterSelectionDisable: !1,
...i,
table: t,
header: R,
footer: e,
pageNumber: o,
watermark: n,
control: s,
checkbox: r,
radio: l,
cursor: a,
title: O,
placeholder: M,
group: X,
pageBreak: P,
zone: N,
background: u,
lineBreak: h,
// whiteSpace: whiteSpaceOptions,
separator: L,
lineNumber: Y,
pageBorder: S,
badge: W,
modeRule: K,
graffiti: c,
label: T,
imgCaption: H,
list: f,
// magnifier: magnifierOptions,
// accessibility: accessibilityOptions,
column: D
};
}
function dR(i) {
return i.reduce((t, R) => t + R.width, 0);
}
function os(i, t, R) {
let e = dR(i);
for (; e > t; ) {
const o = i.filter((a) => a.width > R);
if (!o.length) return;
const n = dR(o), s = t - (e - n);
if (s <= 0) {
o.forEach((a) => a.width = R);
return;
}
const r = s / n;
o.forEach((a) => {
a.width = Math.max(R, a.width * r);
});
const l = dR(i);
if (l >= e) return;
e = l;
}
}
var HR = /* @__PURE__ */ ((i) => (i.EDIT = "edit", i.READONLY = "readonly", i.FORM = "form", i))(HR || {});
class ns {
constructor(t) {
F(this, "draw");
// private zone: Zone
// private range: RangeManager
F(this, "position");
F(this, "options");
F(this, "areaInfoMap", /* @__PURE__ */ new Map());
this.draw = t, this.options = t.getOptions(), this.position = t.getPosition();
}
getAreaInfo() {
return this.areaInfoMap;
}
getActiveAreaId() {
return this.areaInfoMap.size, null;
}
getActiveAreaInfo() {
const t = this.getActiveAreaId();
return t && this.areaInfoMap.get(t) || null;
}
isReadonly() {
const t = this.getActiveAreaInfo();
if (!t) return !1;
switch (t.area.mode) {
case HR.EDIT:
return !1;
case HR.READONLY:
return !0;
default:
return !1;
}
}
insertArea() {
return Yt();
}
render(t, R) {
if (!this.areaInfoMap.size) return;
t.save();
const e = this.draw.getMargins(), o = this.draw.getInnerWidth();
for (const n of this.areaInfoMap) {
const { area: s, positionList: r } = n[1];
if (s != null && s.hide || !(s != null && s.backgroundColor) && !(s != null && s.borderColor) && !(s != null && s.placeholder))
continue;
const l = r.filter((Y) => Y.pageNo === R);
if (!l.length) continue;
t.translate(0.5, 0.5);
const a = l[0], O = l[l.length - 1], M = n[1].tableCell, X = !!M, P = this.draw.getTdPadding(), N = X ? M.tablePosition.coordinate.leftTop[0] + M.td.x * this.options.scale + P[3] : e[3], u = Math.ceil(a.coordinate.leftTop[1]), h = Math.ceil(O.coordinate.rightBottom[1] - u), L = X ? M.td.width * this.options.scale - P[1] - P[3] : o;
s.backgroundColor && (t.fillStyle = s.backgroundColor, t.fillRect(N, u, L, h)), s.borderColor && (t.strokeStyle = s.borderColor, t.strokeRect(N, u, L, h)), s.placeholder && r.length <= 1 && new Me(this.draw).render(t, {
placeholder: {
...Oe,
...s.placeholder
},
startY: a.coordinate.leftTop[1]
}), t.translate(-0.5, -0.5);
}
t.restore();
}
compute() {
this.areaInfoMap.clear();
const t = this.draw.getOriginalMainElementList(), R = this.position.getOriginalMainPositionList();
this.computeAreaInfo(t, R, t);
}
computeAreaInfo(t, R = [], e, o, n) {
for (let s = 0; s < t.length; s++) {
const r = t[s], l = r.areaId, a = R[s];
if (l && l !== o) {
const O = this.areaInfoMap.get(l);
O ? (O.elementList.push(r), a && O.positionList.push(a)) : this.areaInfoMap.set(l, {
id: l,
area: r.area,
elementList: [r],
positionList: a ? [a] : [],
sourceElementList: e,
tableCell: n
});
}
r.type === V.TABLE && r.trList && this.computeTableAreaInfo(r, a, l);
}
}
computeTableAreaInfo(t, R, e) {
const o = t.trList;
for (let n = 0; n < o.length; n++) {
const s = o[n];
for (let r = 0; r < s.tdList.length; r++) {
const l = s.tdList[r];
this.computeAreaInfo(
l.value,
l.positionList,
l.value,
e,
R ? {
td: l,
tablePosition: R
} : void 0
);
}
}
}
getAreaValue(t = {}) {
const R = t.id || this.getActiveAreaId();
if (!R) return null;
const e = this.areaInfoMap.get(R);
return e ? {
area: e.area,
id: e.id,
startPageNo: e.positionList[0].pageNo,
endPageNo: e.positionList[e.positionList.length - 1].pageNo,
value: gt(e.elementList)
} : null;
}
setAreaProperties(t) {
const R = t.id || this.getActiveAreaId();
if (!R) return;
const e = this.areaInfoMap.get(R);
if (!e) return;
e.area || (e.area = {});
let o = !1;
const n = ["top", "hide"];
Object.entries(t.properties).forEach(([s, r]) => {
if (Ue(r)) return;
const l = s;
e.area[l] = r, n.includes(l) && (o = !0);
}), this.draw.render({
isCompute: o,
isSetCursor: !1
});
}
}
class as {
// private pageContainer: HTMLDivElement
// private isDrawing = false
// private startStroke: IGraffitiStroke | null = null
constructor(t, R) {
F(this, "draw");
F(this, "options");
F(this, "data");
this.draw = t, this.options = t.getOptions(), this.data = R || [], this.register();
}
register() {
}
// private start(evt: MouseEvent) {
// if (!this.draw.isGraffitiMode()) return
// this.isDrawing = true
// // 缓存起始数据
// const { scale } = this.options
// this.startStroke = {
// lineColor: this.options.graffiti.defaultLineColor,
// lineWidth: this.options.graffiti.defaultLineWidth,
// points: [evt.offsetX / scale, evt.offsetY / scale]
// }
// }
// private stop() {
// this.isDrawing = false
// }
// private drawing(evt: MouseEvent) {
// if (!this.isDrawing || !this.draw.isGraffitiMode()) return
// // 移动超过至少2个像素后开始绘制
// const { offsetX, offsetY } = evt
// const DISTANCE = 2
// if (
// this.startStroke &&
// Math.abs(this.startStroke.points[0] - offsetX) < DISTANCE &&
// Math.abs(this.startStroke.points[1] - offsetY) < DISTANCE
// ) {
// return
// }
// // 修改数据
// const pageNo = this.draw.getPageNo()
// let currentValue = this.data.find(item => item.pageNo === pageNo)
// if (this.startStroke) {
// if (!currentValue) {
// currentValue = {
// pageNo,
// strokes: []
// }
// this.data.push(currentValue)
// }
// currentValue.strokes.push(this.startStroke)
// // 清空起始数据
// this.startStroke = null
// }
// if (!currentValue?.strokes?.length) return
// const { scale } = this.options
// const lastPoints =
// currentValue.strokes[currentValue.strokes.length - 1].points
// lastPoints.push(offsetX / scale, offsetY / scale)
// // 重新渲染
// this.draw.render({
// isCompute: false,
// isSetCursor: false,
// isSubmitHistory: false
// })
// }
getValue() {
return this.data;
}
// 页面减少时清空对应页面涂鸦信息
compute() {
const t = this.draw.getPageRowList().length;
for (let R = this.data.length - 1; R >= 0; R--)
this.data[R].pageNo > t - 1 && this.data.splice(R, 1);
}
clear() {
this.data = [];
}
render(t, R) {
var r;
const e = (r = this.data.find((l) => l.pageNo === R)) == null ? void 0 : r.strokes;
if (!(e != null && e.length)) return;
const {
graffiti: { defaultLineColor: o, defaultLineWidth: n },
scale: s
} = this.options;
t.save();
for (let l = 0; l < e.length; l++) {
const a = e[l];
t.beginPath(), t.strokeStyle = a.lineColor || o, t.lineWidth = (a.lineWidth || n) * s, t.moveTo(a.points[0] * s, a.points[1] * s);
for (let O = 2; O < a.points.length; O += 2)
t.lineTo(a.points[O] * s, a.points[O + 1] * s);
t.stroke();
}
t.restore();
}
}
class rs {
constructor(t) {
F(this, "draw");
F(this, "options");
F(this, "imageCache");
F(this, "mainBadge");
F(this, "areaBadgeMap");
this.draw = t, this.options = t.getOptions(), this.imageCache = /* @__PURE__ */ new Map(), this.mainBadge = null, this.areaBadgeMap = /* @__PURE__ */ new Map();
}
setMainBadge(t) {
this.mainBadge = t;
}
setAreaBadgeMap(t) {
this.areaBadgeMap.clear(), t.forEach((R) => {
this.areaBadgeMap.set(R.areaId, R.badge);
});
}
_drawImage(t, R, e, o, n, s, r) {
if (this.imageCache.has(r))
t.drawImage(R.value, e, o, n, s);
else {
const l = new Image();
l.setAttribute("crossOrigin", "Anonymous"), l.src = r, l.onload = () => {
this.imageCache.set(r, l), t.drawImage(R.value, e, o, n, s);
};
}
}
render(t, R, e) {
if (e === 0 && this.mainBadge) {
const { scale: o, badge: n } = this.options, { left: s, top: r, width: l, height: a, value: O } = this.mainBadge, M = this.draw.getMargins()[0] + this.draw.getHeader().getExtraHeight(), X = (s || n.left) * o, P = (r || n.top) * o + M;
this._drawImage(t, R, X, P, l * o, a * o, O);
}
if (this.areaBadgeMap.size) {
const o = this.draw.getArea().getAreaInfo();
if (o.size) {
const { scale: n, badge: s } = this.options;
for (const r of o) {
const { positionList: l } = r[1], a = l[0];
if (a.pageNo !== e) continue;
const O = this.areaBadgeMap.get(r[0]);
if (!O) continue;
const { left: M, top: X, width: P, height: N, value: u } = O, h = (M || s.left) * n, L = (X || s.top) * n + a.coordinate.leftTop[1];
this._drawImage(t, R, h, L, P * n, N * n, u);
}
}
}
}
}
const $t = class $t {
constructor(t, R, e = {}) {
// private draw: Draw
F(this, "fakeCanvas");
F(this, "fakeCtx");
// private container: HTMLDivElement
F(this, "pageList");
F(this, "ctxListInfos");
F(this, "pageNo");
F(this, "mode");
F(this, "options");
F(this, "position");
F(this, "elementList");
F(this, "pdf");
F(this, "fontCache", []);
F(this, "fontSource", "cdn");
F(this, "i18n");
F(this, "margin");
F(this, "background");
F(this, "badge");
F(this, "group");
F(this, "area");
F(this, "underline");
F(this, "strikeout");
F(this, "highlight");
F(this, "imageParticle");
F(this, "laTexParticle");
F(this, "textParticle");
F(this, "tableParticle");
F(this, "tablePaging");
F(this, "pageNumber");
F(this, "lineNumber");
F(this, "waterMark");
F(this, "placeholder");
F(this, "header");
F(this, "footer");
F(this, "hyperlinkParticle");
F(this, "labelParticle");
F(this, "dateParticle");
F(this, "separatorParticle");
// private pageBreakParticle: PageBreakParticle
F(this, "superscriptParticle");
F(this, "subscriptParticle");
F(this, "checkboxParticle");
F(this, "radioParticle");
F(this, "blockParticle");
F(this, "listParticle");
F(this, "lineBreakParticle");
// private control: Control
F(this, "pageBorder");
F(this, "imageObserver");
F(this, "graffiti");
F(this, "LETTER_REG");
F(this, "WORD_LIKE_REG");
F(this, "rowList");
F(this, "pageRowList");
F(this, "printModeData");
F(this, "controlMinWidthPlaceholderElementListSet");
F(this, "columnManager");
F(this, "defaultFontsLoadedPromise");
this.fakeCanvas = At.createMeasurementCanvas(), this.fakeCtx = this.fakeCanvas.getContext("2d"), this.pageList = [], this.ctxListInfos = [], this.pageNo = 0, this.options = zR(t), this.mode = this.options.mode, R = R;
let o = [], n = [], s = [];
R = mt(R), Array.isArray(R) ? n = R : (o = R.header || [], n = R.main, s = R.footer || []);
const r = [
o,
n,
s
];
r.forEach((a) => {
Ct(a, {
editorOptions: this.getOptions(),
isForceCompensation: !0
});
}), r.forEach((a) => {
a && (a = this.filterAssistElement(a));
}), this.elementList = R.main, this._formatContainer(), this._resetPdf(), this.fontSource = e.fontSource ?? At.defaultFontSource, e.loadDefaultFonts ? this.defaultFontsLoadedPromise = this._addDefaultFont() : this.defaultFontsLoadedPromise = Promise.resolve(!1), this.i18n = new gi(), this.position = new je(this), this.margin = new Ri(this), this.background = new qe(this), this.badge = new rs(this), this.group = new Hi(this), this.area = new ns(this), this.underline = new ii(this), this.strikeout = new ei(this), this.highlight = new ti(this), this.imageParticle = new ie(this), this.laTexParticle = new YR(this), this.textParticle = new si(this), this.tableParticle = new ni(this), this.tablePaging = new ai(this), this.pageNumber = new RR(this), this.lineNumber = new Gi(this), this.waterMark = new Ni(this), this.placeholder = new Me(this), this.header = new Mi(this, R.header), this.footer = new Di(this, R.footer), this.hyperlinkParticle = new ri(this), this.labelParticle = new li(this), this.dateParticle = new Li(this), this.separatorParticle = new Pi(this), this.superscriptParticle = new Oi(), this.subscriptParticle = new Xi(), this.checkboxParticle = new Fi(this), this.radioParticle = new ui(this), this.blockParticle = new Ti(this), this.listParticle = new fi(this), this.lineBreakParticle = new XR(this), this.pageBorder = new Ji(this), this.graffiti = new as(this, R.graffiti), this.columnManager = new pi(this), this.imageObserver = new Ii();
const { letterClass: l } = this.options;
this.LETTER_REG = new RegExp(`[${l.join("")}]`), this.WORD_LIKE_REG = new RegExp(
`${l.map((a) => `[^${a}][${a}]`).join("|")}`
), this.rowList = [], this.pageRowList = [], this.printModeData = null, this.controlMinWidthPlaceholderElementListSet = /* @__PURE__ */ new WeakSet();
}
getCtx2d() {
return this.pdf.context2d;
}
getFakeCtx() {
return this.fakeCtx;
}
measureText(t, R) {
this.fakeCtx.save(), this.fakeCtx.font = t;
const e = this.fakeCtx.measureText(R);
return this.fakeCtx.restore(), e;
}
/**
* Load a single TTF font and register it with the PDF. In the browser, `source`
* must be an http(s) URL. In Node, `source` may be either an https URL in the
* font allowlist or an absolute filesystem path — see src/platform/node.ts for
* the SSRF/path-traversal checks applied.
*/
async downloadFont(t, R, e, o) {
const n = await At.loadFontAsBase64(t), s = { fileName: R, base64: n, id: e, type: o };
return this.fontCache.push(s), this._applyFont(this.pdf, s), n;
}
_applyFont(t, R) {
t.addFileToVFS(R.fileName, R.base64), t.addFont(R.fileName, R.id, R.type);
}
_resolveDefaultFontSource(t) {
return this.fontSource === "cdn" ? `${$t.CDN_FONT_BASE}/${t}` : this.fontSource === "bundled" ? At.getBundledFontPath(t) : `${this.fontSource.dir.replace(/\/+$/, "")}/${t}`;
}
async _addDefaultFont() {
return await Promise.all(
$t.DEFAULT_FONTS.map(
(t) => this.downloadFont(
this._resolveDefaultFontSource(t.fileName),
t.fileName,
t.id,
t.type
)
)
), !0;
}
loadDefaultFonts() {
return this.defaultFontsLoadedPromise = this._addDefaultFont();
}
async addFont(t, R, e, o) {
return await this.downloadFont(t, R, e, o), !0;
}
getFont(t, R = 1) {
const { defaultSize: e, defaultFont: o } = this.options, n = t.font || o, s = (t.actualSize || t.size || e) * R;
return `${t.italic ? "italic " : ""}${t.bold ? "bold " : ""}${s}px ${n}`;
}
getLetterReg() {
return this.LETTER_REG;
}
getPagePixelRatio() {
return 1;
}
getMode() {
return this.mode;
}
// public isReadonly() {
// if (this.area.getActiveAreaInfo()?.area?.mode) {
// return this.area.isReadonly()
// }
// switch (this.mode) {
// case EditorMode.DESIGN:
// return false
// case EditorMode.READONLY:
// case EditorMode.PRINT:
// case EditorMode.GRAFFITI:
// return true
// case EditorMode.FORM:
// return !this.control.getIsRangeWithinControl()
// default:
// return false
// }
// }
getArea() {
return this.area;
}
getBadge() {
return this.badge;
}
filterAssistElement(t) {
return t.filter((R) => {
if (R.type === V.TABLE) {
const e = R.trList;
for (let o = 0; o < e.length; o++) {
const n = e[o];
for (let s = 0; s < n.tdList.length; s++) {
const r = n.tdList[s];
r.value = this.filterAssistElement(r.value);
}
}
}
return R.controlId && (R.controlComponent === j.PREFIX || R.controlComponent === j.POSTFIX || R.controlComponent === j.PLACEHOLDER) && (R.value = ""), !0;
});
}
setMode(t) {
if (t === dt.PRINT) {
this.printModeData = {
header: this.header.getElementList(),
main: this.elementList,
footer: this.footer.getElementList()
};
const R = mt(this.printModeData);
["header", "main", "footer"].forEach((o) => {
R[o] = this.filterAssistElement(
R[o]
);
});
}
this.clearSideEffect(), this.mode = t, this.options.mode = t;
}
isDesignMode() {
return this.mode === dt.DESIGN;
}
isPrintMode() {
return this.mode === dt.PRINT;
}
isGraffitiMode() {
return this.mode === dt.GRAFFITI;
}
isAreaHideDisabled() {
return this.isDesignMode() || this.isPrintMode() && this.options.modeRule[dt.PRINT].areaHideDisabled;
}
getIsPagingMode() {
return this.options.pageMode === bt.PAGING;
}
getOriginalWidth() {
const { paperDirection: t, width: R, height: e } = this.options;
return t === _t.VERTICAL ? R : e;
}
getOriginalHeight() {
const { paperDirection: t, width: R, height: e } = this.options;
return t === _t.VERTICAL ? e : R;
}
getWidth() {
return Math.floor(this.getOriginalWidth() * this.options.scale);
}
getHeight() {
return Math.floor(this.getOriginalHeight() * this.options.scale);
}
getMainHeight() {
return this.getHeight() - this.getMainOuterHeight();
}
getMainOuterHeight(t) {
const R = this.getMargins(), e = this.header.getExtraHeight(t), o = this.footer.getExtraHeight(t);
return R[0] + R[2] + e + o;
}
getCanvasWidth(t = -1) {
return this.ctxListInfos[t].width;
}
getCanvasHeight(t = -1) {
return this.ctxListInfos[t].height;
}
getInnerWidth() {
const t = this.getWidth(), R = this.getMargins();
return t - R[1] - R[3];
}
getColumnLayout() {
return this.columnManager.getLayout();
}
setColumnConfig(t) {
this.options.pageMode !== bt.CONTINUITY && this.columnManager.setConfig(t);
}
getOriginalInnerWidth() {
const t = this.getOriginalWidth(), R = this.getOriginalMargins();
return t - R[1] - R[3];
}
getContextInnerWidth() {
const t = this.position.getPositionContext();
if (t.isTable) {
const e = this.getOriginalElementList(), o = this.position.getTableTdByContext(e, t), n = this.getTdPadding();
return o.width - n[1] - n[3];
}
const R = this.getColumnLayout();
return R && R.count > 1 ? R.width / this.options.scale : this.getOriginalInnerWidth();
}
getMargins() {
return this.getOriginalMargins().map((t) => t * this.options.scale);
}
getOriginalMargins() {
const { margins: t, paperDirection: R } = this.options;
return R === _t.VERTICAL ? t : [t[1], t[2], t[3], t[0]];
}
getPageGap() {
return this.options.pageGap * this.options.scale;
}
getOriginalPageGap() {
return this.options.pageGap;
}
getPageNumberBottom() {
const {
pageNumber: { bottom: t },
scale: R
} = this.options;
return t * R;
}
getMarginIndicatorSize() {
return this.options.marginIndicatorSize * this.options.scale;
}
getDefaultBasicRowMarginHeight() {
return this.options.defaultBasicRowMarginHeight * this.options.scale;
}
getHighlightMarginHeight() {
return this.options.highlightMarginHeight * this.options.scale;
}
getTdPadding() {
const {
table: { tdPadding: t },
scale: R
} = this.options;
return t.map((e) => e * R);
}
// public getContainer(): HTMLDivElement {
// return this.container
// }
getPageNo() {
return this.pageNo;
}
setPageNo(t) {
this.pageNo = t;
}
getPage(t = -1) {
return this.pageList[~t ? t : this.pageNo];
}
getPageList() {
return this.pageList;
}
getPageCount() {
return this.pageList.length;
}
getTableRowList(t) {
const R = this.position.getPositionContext();
return this.position.getTableTdByContext(
t,
R
).rowList;
}
getOriginalRowList() {
return this.rowList;
}
getRowList() {
return this.position.getPositionContext().isTable ? this.getTableRowList(this.getOriginalElementList()) : this.getOriginalRowList();
}
getPageRowList() {
return this.pageRowList;
}
getPdf() {
return this.pdf;
}
getOptions() {
return this.options;
}
// Merge new options into the current ones at runtime. Kept as public API
// (documented) even though the PDF-only fork usually configures via the
// constructor; call render() afterwards to reflect changes.
updateOptions(t) {
const R = zR(t);
Object.entries(R).forEach(([e, o]) => {
Reflect.set(this.options, e, o);
}), this.setColumnConfig(this.options.column);
}
getGroup() {
return this.group;
}
getPosition() {
return this.position;
}
getColumnManager() {
return this.columnManager;
}
getLineBreakParticle() {
return this.lineBreakParticle;
}
getTextParticle() {
return this.textParticle;
}
getHeaderElementList() {
return this.header.getElementList();
}
getTableElementList(t) {
var e;
const R = this.position.getPositionContext();
return ((e = this.position.getTableTdByContext(t, R)) == null ? void 0 : e.value) || [];
}
getElementList() {
const t = this.position.getPositionContext(), R = this.getOriginalElementList();
return t.isTable ? this.getTableElementList(R) : R;
}
getMainElementList() {
return this.position.getPositionContext().isTable ? this.getTableElementList(this.elementList) : this.elementList;
}
getOriginalElementList() {
return this.elementList;
}
getOriginalMainElementList() {
return this.elementList;
}
getFooterElementList() {
return this.footer.getElementList();
}
getTd() {
const t = this.position.getPositionContext();
return t.isTable ? this.position.getTableTdByContext(
this.getOriginalElementList(),
t
) : null;
}
spliceElementList(t, R, e, ...o) {
var n;
if (e > 0) {
const s = R + e, r = t[s], l = r == null ? void 0 : r.listId;
if (l && ((n = t[R - 1]) == null ? void 0 : n.listId) !== l) {
let a = s;
for (; a < t.length; ) {
const O = t[a];
if (O.listId !== l || O.value === q)
break;
delete O.listId, delete O.listType, delete O.listStyle, a++;
}
}
}
if (o != null && o.length)
for (let s = 0; s < o.length; s++)
t.splice(R + s, 0, o[s]);
}
getImageParticle() {
return this.imageParticle;
}
getTableParticle() {
return this.tableParticle;
}
getHeader() {
return this.header;
}
getFooter() {
return this.footer;
}
getHyperlinkParticle() {
return this.hyperlinkParticle;
}
getDateParticle() {
return this.dateParticle;
}
getListParticle() {
return this.listParticle;
}
getCheckboxParticle() {
return this.checkboxParticle;
}
getRadioParticle() {
return this.radioParticle;
}
// public getControl(): Control {
// return this.control
// }
getImageObserver() {
return this.imageObserver;
}
getI18n() {
return this.i18n;
}
getGraffiti() {
return this.graffiti;
}
async setValue(t) {
const { header: R, main: e, footer: o } = mt(t);
if (!R && !e && !o) return;
const n = [R, e, o];
for (let s = 0; s < n.length; s++) {
const r = n[s];
r && await Ct(r, {
editorOptions: this.options,
isForceCompensation: !0
});
}
n.forEach((s) => {
s && (s = this.filterAssistElement(s));
}), this.setEditorData({
header: R,
main: e,
footer: o
});
}
getOriginValue(t = {}) {
const { pageNo: R } = t;
let e = this.elementList;
return Number.isInteger(R) && R >= 0 && R < this.pageRowList.length && (e = this.pageRowList[R].flatMap(
(n) => n.elementList
)), {
header: this.getHeaderElementList(),
main: e,
footer: this.getFooterElementList(),
graffiti: this.graffiti.getValue()
};
}
getValue(t = {}) {
const R = this.getOriginValue({ pageNo: t.pageNo }), { extraPickAttrs: e } = t;
return {
header: gt(R.header, {
extraPickAttrs: e
}),
main: gt(R.main, {
extraPickAttrs: e,
isClassifyArea: !0
}),
footer: gt(R.footer, {
extraPickAttrs: e
}),
graffiti: R.graffiti
};
}
setEditorData(t) {
const { header: R, main: e, footer: o } = t;
R && this.header.setElementList(R), e && (this.elementList = e), o && this.footer.setElementList(o);
}
_formatContainer() {
}
_createPage(t) {
const R = this.getWidth(), e = this.getHeight(), o = 1, n = this.getOptions().paperDirection === _t.VERTICAL ? "p" : "l";
this.ctxListInfos.push({
width: R,
height: e,
background: "#ffffff",
marginBottom: `${this.getPageGap()}px`,
index: String(t)
}), this.pageList.push({
width: R,
height: e,
background: "#ffffff",
marginBottom: `${this.getPageGap()}px`,
index: String(t)
}), this.pdf.addPage([R, e], n).context2d.scale(o, o);
}
getElementSize(t) {
return t.actualSize || t.size || this.options.defaultSize;
}
getElementRowMargin(t) {
const {
defaultSize: R,
defaultBasicRowMarginHeight: e,
defaultRowMargin: o,
scale: n
} = this.options, s = t.size || R;
let r = 1;
return s < 12 ? r = s / 12 : s > 30 && (r = 1 + (s - 30) / 30), e * r * (t.rowMargin ?? o) * n;
}
computeRowList(t) {
var I, p, g, J, y, v, B, tt, st, Mt, Nt, rt, ot, nt, Jt, Zt;
const {
innerWidth: R,
elementList: e,
isPagingMode: o = !1,
isFromTable: n = !1,
startX: s = 0,
startY: r = 0,
pageHeight: l = 0,
surroundElementList: a = []
} = t, {
defaultSize: O,
scale: M,
imgCaption: X,
table: { tdPadding: P, defaultColMinWidth: N, overflow: u },
defaultTabWidth: h
} = this.options, L = this.getDefaultBasicRowMarginHeight();
if (this.controlMinWidthPlaceholderElementListSet.has(e)) {
for (let k = e.length - 1; k >= 0; k--)
e[k].isControlMinWidthPlaceholder && e.splice(k, 1);
this.controlMinWidthPlaceholderElementListSet.delete(e);
}
const Y = this.listParticle.computeListStyle(
this.getCtx2d(),
e
), S = [], W = o && !n ? this.columnManager.getLayout() : null, c = !!W && W.count > 1;
e.length && S.push({
width: 0,
height: 0,
ascent: 0,
elementList: [],
startIndex: 0,
rowIndex: 0,
rowFlex: ((I = e == null ? void 0 : e[0]) == null ? void 0 : I.rowFlex) || ((p = e == null ? void 0 : e[1]) == null ? void 0 : p.rowFlex),
...c ? { columnIndex: 0 } : {}
});
let T = s, H = r, f = 0, D = r;
o && !n && (D = this.getMargins()[0] + this.getHeader().getExtraHeight(0), H = D);
const K = /* @__PURE__ */ new Map();
let Z = 0, U = 0;
for (let k = 0; k < e.length; k++) {
const w = S[S.length - 1], Q = e[k], Tt = this.getElementRowMargin(Q), d = {
width: 0,
height: 0,
boundingBoxAscent: 0,
boundingBoxDescent: 0
}, eR = w.offsetX || Q.listId && (Y.get(Q.listId) || 0) + (Q.listLevel ? this.listParticle.LIST_INDENT_WIDTH * Q.listLevel * M : 0) || 0, et = (c && W ? W.width : R) - eR, _ = w.elementList.length === 1;
if (T += _ ? eR : 0, H += _ && w.offsetY || 0, (Q.hide || (g = Q.control) != null && g.hide || (J = Q.area) != null && J.hide) && !this.isDesignMode()) {
const G = w.elementList[w.elementList.length - 1];
d.height = (G == null ? void 0 : G.metrics.height) || this.options.defaultSize * M, d.boundingBoxAscent = (G == null ? void 0 : G.metrics.boundingBoxAscent) || 0, d.boundingBoxDescent = (G == null ? void 0 : G.metrics.boundingBoxDescent) || 0;
} else if (Q.type === V.IMAGE || Q.type === V.LATEX)
if (Q.imgDisplay === Rt.SURROUND || Q.imgDisplay === Rt.FLOAT_TOP || Q.imgDisplay === Rt.FLOAT_BOTTOM)
d.width = 0, d.height = 0, d.boundingBoxDescent = 0;
else {
const G = Q.width * M, E = Q.height * M;
if (G > et) {
const b = E * et / G;
Q.width = et / M, Q.height = b / M, d.width = et, d.height = b, d.boundingBoxDescent = b;
} else
d.width = G, d.height = E, d.boundingBoxDescent = E;
if ((y = Q.imgCaption) != null && y.value) {
const b = Q.imgCaption.size || X.size, C = Q.imgCaption.top ?? X.top, lt = (b + C) * M;
d.boundingBoxAscent += lt;
}
}
else if (Q.type === V.TABLE) {
const G = P[1] + P[3], E = P[0] + P[2], b = Q.trList, C = E + O + Tt * 2 / M;
for (let ut = 0; ut < b.length; ut++) {
const It = b[ut];
It.height = Math.max(C, It.minHeight || 0), It.minHeight = It.height;
}
u || (os(
Q.colgroup,
this.getOriginalInnerWidth(),
N
), Q.translateX = 0), this.tableParticle.computeRowColInfo(Q);
for (let ut = 0; ut < b.length; ut++) {
const It = b[ut];
for (let Kt = 0; Kt < It.tdList.length; Kt++) {
const Pt = It.tdList[Kt], pt = this.computeRowList({
innerWidth: (Pt.width - G) * M,
elementList: Pt.value,
isFromTable: !0,
isPagingMode: o
}), NR = pt.reduce((Et, FR) => Et + FR.height, 0);
Pt.rowList = pt;
const xt = NR / M + E;
if (Pt.height < xt) {
const Et = xt - Pt.height, FR = b[ut + Pt.rowspan - 1];
FR.height += Et, FR.tdList.forEach((oR) => {
oR.height += Et, oR.realHeight ? oR.realHeight += Et : oR.realHeight = oR.height;
});
}
let iR = 0, sR = 0, VR = 0;
for (; VR < Pt.rowspan; ) {
const Et = b[VR + ut] || b[ut];
iR += Et.minHeight, sR += Et.height, VR++;
}
Pt.realMinHeight = iR, Pt.realHeight = sR, Pt.mainHeight = xt;
}
}
const lt = this.tableParticle.getTrListGroupByCol(b);
for (let ut = 0; ut < lt.length; ut++) {
const It = lt[ut];
let Kt = -1;
for (let Pt = 0; Pt < It.tdList.length; Pt++) {
const pt = It.tdList[Pt], NR = pt.realHeight, xt = pt.mainHeight, iR = pt.realMinHeight, sR = xt < iR ? NR - iR : NR - xt;
(!~Kt || sR < Kt) && (Kt = sR);
}
if (Kt > 0) {
const Pt = b[ut];
Pt.height -= Kt, Pt.tdList.forEach((pt) => {
pt.height -= Kt, pt.realHeight -= Kt;
});
}
}
this.tableParticle.computeRowColInfo(Q);
const Ut = this.tableParticle.getTableHeight(Q), wR = this.tableParticle.getTableWidth(Q);
Q.width = wR, Q.height = Ut;
const Xe = wR * M, yR = Ut * M;
d.width = Xe, d.height = yR, d.boundingBoxDescent = yR, d.boundingBoxAscent = -Tt, ((v = e[k + 1]) == null ? void 0 : v.type) === V.TABLE && (d.boundingBoxAscent -= Tt);
} else if (Q.type === V.SEPARATOR) {
const {
separator: { lineWidth: G }
} = this.options, E = Q.lineWidth || G;
Q.width = et / M, d.width = et, d.height = E * M, d.boundingBoxAscent = -Tt, d.boundingBoxDescent = -Tt + d.height;
} else if (Q.type === V.PAGE_BREAK)
Q.width = et / M, d.width = et, d.height = O;
else if (Q.type === V.RADIO || Q.controlComponent === j.RADIO) {
const { width: G, height: E, gap: b } = this.options.radio, C = G + b * 2;
Q.width = C, d.width = C * M, d.height = E * M;
} else if (Q.type === V.CHECKBOX || Q.controlComponent === j.CHECKBOX) {
const { width: G, height: E, gap: b } = this.options.checkbox, C = G + b * 2;
Q.width = C, d.width = C * M, d.height = E * M;
} else if (Q.type === V.TAB)
d.width = h * M, d.height = O * M, d.boundingBoxDescent = 0, d.boundingBoxAscent = this.textParticle.getBasisWordBoundingBoxAscent(
this.getCtx2d(),
this.getCtx2d().font
);
else if (Q.isControlMinWidthPlaceholder) {
d.width = (Q.width || 0) * M, d.height = O * M, this.getCtx2d().font = this.getFont(Q);
const G = this.textParticle.measureBasisWord(
this.getCtx2d(),
Q.font
);
d.boundingBoxAscent = G.actualBoundingBoxAscent * M, d.boundingBoxDescent = G.actualBoundingBoxDescent * M;
} else if (Q.type === V.BLOCK) {
if (!Q.width)
d.width = et;
else {
const G = Q.width * M;
d.width = Math.min(G, et);
}
d.height = Q.height * M, d.boundingBoxDescent = d.height, d.boundingBoxAscent = 0;
} else if (Q.type === V.LABEL) {
const {
defaultSize: G,
label: { defaultPadding: E }
} = this.options;
this.getCtx2d().font = this.getFont(Q);
const b = this.textParticle.measureText(
this.getCtx2d(),
Q
);
d.width = (b.width + E[1] + E[3]) * M, d.height = (Q.size || G) * M, d.boundingBoxDescent = 0, d.boundingBoxAscent = (E[0] + b.actualBoundingBoxAscent) * M;
} else {
const G = Q.size || O;
(Q.type === V.SUPERSCRIPT || Q.type === V.SUBSCRIPT) && (Q.actualSize = Math.ceil(G * 0.6)), d.height = (Q.actualSize || G) * M, this.getCtx2d().font = this.getFont(Q);
const E = this.textParticle.measureText(
this.getCtx2d(),
Q
);
d.width = E.width * M, Q.letterSpacing && (d.width += Q.letterSpacing * M), d.boundingBoxAscent = (Q.value === q ? this.textParticle.getBasisWordBoundingBoxAscent(
this.getCtx2d(),
Q.font
) : E.actualBoundingBoxAscent) * M, d.boundingBoxDescent = E.actualBoundingBoxDescent * M, Q.type === V.SUPERSCRIPT ? d.boundingBoxAscent += d.height / 2 : Q.type === V.SUBSCRIPT && (d.boundingBoxDescent += d.height / 2);
}
const $ = !Q.hide && (Q.imgDisplay !== Rt.INLINE && Q.type === V.IMAGE || Q.type === V.LATEX) ? d.height + Tt : d.boundingBoxAscent + Tt, A = Tt + d.boundingBoxAscent + d.boundingBoxDescent + Tt, z = Object.assign(Q, {
metrics: d,
left: 0,
style: this.getFont(Q, M)
});
if ((B = z.control) != null && B.minWidth && !z.isControlMinWidthPlaceholder && (z.controlComponent && (Z += d.width), z.controlComponent === j.POSTFIX)) {
const E = z.control.minWidth * M - Z, b = Math.max(
et - w.width - z.metrics.width,
0
);
if (E > 0) {
const Ut = Math.min(b, E) * M;
z.left = Ut, w.width += Ut;
}
let C = E - b;
const lt = [];
for (; C > 0; ) {
const Ut = Math.min(C, et);
lt.push({
...z,
value: "",
width: Ut / M,
left: 0,
isControlMinWidthPlaceholder: !0
}), C -= Ut;
}
lt.length && (e.splice(k + 1, 0, ...lt), this.controlMinWidthPlaceholderElementListSet.add(e)), Z = 0;
}
const m = e[k - 1];
let at = e[k + 1], Ot = w.width + d.width;
if (this.options.wordBreak === GR.BREAK_WORD && (!(m != null && m.type) || (m == null ? void 0 : m.type) === V.TEXT) && (!Q.type || Q.type === V.TEXT)) {
const G = `${(m == null ? void 0 : m.value) || ""}${Q.value}`;
if (this.WORD_LIKE_REG.test(G)) {
const { width: b, endElement: C } = this.textParticle.measureWord(
this.getCtx2d(),
e,
k
), lt = b * M;
C && lt <= et && (Ot += lt, at = C);
}
const E = this.textParticle.measurePunctuationWidth(
this.getCtx2d(),
at
);
Ot += E * M;
}
Q.listId && Q.value === q && !Q.listWrap && (K.has(Q.listId) ? K.set(
Q.listId,
(K.get(Q.listId) ?? 0) + 1
) : K.set(Q.listId, 0));
const Ft = this.position.setSurroundPosition({
pageNo: f,
rowElement: z,
row: w,
rowElementRect: {
x: T,
y: H,
height: A,
width: d.width
},
availableWidth: et,
surroundElementList: a
});
T = Ft.x, Ot += Ft.rowIncreaseWidth, T += d.width;
const Wt = Q.type === V.SEPARATOR || Q.type === V.TABLE || (m == null ? void 0 : m.type) === V.TABLE || (m == null ? void 0 : m.type) === V.BLOCK || Q.type === V.BLOCK || (m == null ? void 0 : m.imgDisplay) === Rt.INLINE || Q.imgDisplay === Rt.INLINE || (m == null ? void 0 : m.listId) !== Q.listId || (m == null ? void 0 : m.areaId) !== Q.areaId && !((tt = Q.area) != null && tt.hide) || k !== 0 && Q.value === q && !((st = Q.area) != null && st.hide), St = Ot > et, Xt = Wt || St;
if (Xt) {
const G = {
width: d.width,
height: A,
startIndex: k,
elementList: [z],
ascent: $,
rowIndex: w.rowIndex + 1,
rowFlex: ((Mt = e[k]) == null ? void 0 : Mt.rowFlex) || ((Nt = e[k + 1]) == null ? void 0 : Nt.rowFlex),
isPageBreak: Q.type === V.PAGE_BREAK,
...c ? { columnIndex: U } : {}
};
if (z.controlComponent !== j.PREFIX && ((rt = z.control) == null ? void 0 : rt.indentation) === Re.VALUE_START) {
const E = w.elementList.findIndex(
(b) => b.controlId === z.controlId && b.controlComponent !== j.PREFIX
);
if (~E) {
const C = this.position.computeRowPosition({
row: w,
innerWidth: this.getInnerWidth()
})[E];
C && (G.offsetX = C.coordinate.leftTop[0]);
}
}
Q.listId && (G.isList = !0, G.offsetX = (Y.get(Q.listId) || 0) + (Q.listLevel ? this.listParticle.LIST_INDENT_WIDTH * Q.listLevel * M : 0), G.listIndex = K.get(Q.listId) ?? 0), G.offsetY = !n && ((ot = Q.area) != null && ot.top) && Q.areaId !== ((nt = e[k - 1]) == null ? void 0 : nt.areaId) ? Q.area.top * M : 0, S.push(G);
} else
w.width += d.width, k === 0 && (re(e[1]) || (Jt = e[1]) != null && Jt.areaId) ? (w.height = L, w.ascent = L) : w.height < A && (w.height = A, w.ascent = $), w.elementList.push(z);
if (Xt || k === e.length - 1) {
if (!this.isDesignMode() && w.height > 0) {
const G = w.elementList.filter(
(b) => b.value !== q
);
G.length > 0 && G.every(
(b) => {
var C, lt;
return b.hide || ((C = b.control) == null ? void 0 : C.hide) || ((lt = b.area) == null ? void 0 : lt.hide);
}
) && (w.height = 0, w.ascent = 0);
}
if (w.isWidthNotEnough = St && !Wt, !w.isSurround && ((m == null ? void 0 : m.rowFlex) === Gt.JUSTIFY || (m == null ? void 0 : m.rowFlex) === Gt.ALIGNMENT && w.isWidthNotEnough)) {
const G = ((Zt = w.elementList[0]) == null ? void 0 : Zt.value) === q ? w.elementList.slice(1) : w.elementList, E = (et - w.width) / (G.length - 1);
for (let b = 0; b < G.length - 1; b++) {
const C = G[b];
C.metrics.width += E;
}
w.width = et;
}
}
if (Xt) {
const G = W && W.offsets[U] || 0;
if (T = s + G, H += w.height, o && !n && l) {
const C = this.getMainOuterHeight(f), lt = H - D + C + A > l, Ut = Q.type === V.PAGE_BREAK;
(lt || Ut) && (!Ut && c && W && U < W.count - 1 ? (U += 1, H = D, T = s + (W.offsets[U] || 0)) : ($e(a, f), f += 1, U = 0, D = this.getMargins()[0] + this.getHeader().getExtraHeight(f), H = D, T = s + (W && W.offsets[0] || 0)));
}
const E = S[S.length - 1];
E && c && E.columnIndex !== void 0 && (E.columnIndex = U), z.left = 0, T = this.position.setSurroundPosition({
pageNo: f,
rowElement: z,
row: E,
rowElementRect: {
x: T,
y: H,
height: A,
width: d.width
},
availableWidth: et,
surroundElementList: a
}).x, T += d.width;
}
}
return S;
}
_computePageList() {
var s;
const t = [[]], {
pageMode: R,
pageNumber: { maxPageNo: e }
} = this.options, o = this.getHeight();
let n = 0;
if (R === bt.CONTINUITY) {
let l = this.getMainOuterHeight(0);
t[0] = this.rowList, l += this.rowList.reduce(
(X, P) => X + P.height + (P.offsetY || 0),
0
);
const a = this.getPagePixelRatio(), O = this.pageList[0], M = Number(O.style.height.replace("px", ""));
if (l > M)
O.style.height = `${l}px`, O.height = l * a;
else {
const X = l < o ? o : l;
O.style.height = `${X}px`, O.height = X * a;
}
} else {
let r = this.getMainOuterHeight(0), l;
for (let a = 0; a < this.rowList.length; a++) {
const O = this.rowList[a], M = O.offsetY || 0;
if (l !== void 0 && O.columnIndex !== void 0 && O.columnIndex > 0 && O.columnIndex !== l)
r = this.getMainOuterHeight(n) + O.height + M, t[n].push(O);
else if (O.height + M + r > o || (s = this.rowList[a - 1]) != null && s.isPageBreak) {
if (Number.isInteger(e) && n >= e) {
const P = O.tableFragment, N = this.elementList[O.startIndex];
P && (N == null ? void 0 : N.type) === V.TABLE && this.tablePaging.truncateTableByFragment(
N,
P,
this.elementList
) ? this.elementList = this.elementList.slice(0, O.startIndex + 1) : this.elementList = this.elementList.slice(0, O.startIndex);
break;
}
n++, r = this.getMainOuterHeight(n) + O.height + M, t.push([O]);
} else
r += O.height + M, t[n].push(O);
l = O.columnIndex;
}
}
return t;
}
_drawHighlight(t, R) {
const {
control: { activeBackgroundColor: e }
} = this.options, {
rowList: o,
positionList: n
/*, elementList */
} = R, s = this.getDefaultBasicRowMarginHeight(), r = this.getHighlightMarginHeight();
for (let l = 0; l < o.length; l++) {
const a = o[l];
for (let O = 0; O < a.elementList.length; O++) {
const M = a.elementList[O];
if (M.highlight) {
const {
coordinate: {
leftTop: [X, P]
}
} = a.fragmentPosition || n[a.startIndex + O], N = M.left || 0;
this.highlight.recordFillInfo(
t,
X - N,
P + s - r,
// 先减去行margin,再加上高亮margin
M.metrics.width + N,
a.height - 2 * s + 2 * r,
M.highlight || e
), this.highlight.render(t);
}
}
}
}
drawRow(t, R) {
var P, N, u, h, L, Y;
this._drawHighlight(t, R);
const {
scale: e,
table: { tdPadding: o },
group: n,
lineBreak: s
} = this.options, {
rowList: r,
pageNo: l,
// elementList,
positionList: a,
// startIndex,
zone: O,
isDrawLineBreak: M = !s.disabled
} = R, X = this.isPrintMode();
for (let S = 0; S < r.length; S++) {
const W = r[S];
for (let c = 0; c < W.elementList.length; c++) {
const T = W.elementList[c], H = T.metrics, {
ascent: f,
coordinate: {
leftTop: [D, K]
}
} = W.fragmentPosition || a[W.startIndex + c], Z = W.elementList[c - 1];
if ((T.hide || (P = T.control) != null && P.hide || (N = T.area) != null && N.hide) && !this.isDesignMode())
this.textParticle.complete();
else if (T.type === V.IMAGE)
this.textParticle.complete(), T.imgDisplay !== Rt.SURROUND && T.imgDisplay !== Rt.FLOAT_TOP && T.imgDisplay !== Rt.FLOAT_BOTTOM && this.imageParticle.render(this.getCtx2d(), T, D, K + f);
else if (T.type === V.LATEX)
this.textParticle.complete(), this.laTexParticle.render(this.getCtx2d(), T, D, K + f);
else if (T.type === V.TABLE)
this.tableParticle.render(
this.getCtx2d(),
T,
D,
K,
W.tableFragment
);
else if (T.type === V.HYPERLINK)
this.textParticle.complete(), this.hyperlinkParticle.render(
this.getCtx2d(),
T,
D,
K + f
);
else if (T.type === V.LABEL)
this.textParticle.complete(), this.labelParticle.render(this.getCtx2d(), T, D, K + f);
else if (T.type === V.DATE) {
const U = W.elementList[c + 1];
(!Z || Z.dateId !== T.dateId) && this.textParticle.complete(), this.textParticle.record(this.getCtx2d(), T, D, K + f), (!U || U.dateId !== T.dateId) && this.textParticle.complete();
} else T.type === V.SUPERSCRIPT ? (this.textParticle.complete(), this.superscriptParticle.render(
this.getCtx2d(),
T,
D,
K + f
)) : T.type === V.SUBSCRIPT ? (this.underline.render(this.getCtx2d()), this.textParticle.complete(), this.subscriptParticle.render(
this.getCtx2d(),
T,
D,
K + f
)) : T.type === V.SEPARATOR ? this.separatorParticle.render(this.getCtx2d(), T, D, K) : T.type === V.PAGE_BREAK || (T.type === V.CHECKBOX || T.controlComponent === j.CHECKBOX ? (this.textParticle.complete(), this.checkboxParticle.render({
ctx2d: this.getCtx2d(),
x: D,
y: K + f,
index: c,
row: W
})) : T.type === V.RADIO || T.controlComponent === j.RADIO ? (this.textParticle.complete(), this.radioParticle.render({
ctx2d: this.getCtx2d(),
x: D,
y: K + f,
index: c,
row: W
})) : T.type === V.TAB ? this.textParticle.complete() : T.rowFlex === Gt.ALIGNMENT || T.rowFlex === Gt.JUSTIFY ? (this.textParticle.record(this.getCtx2d(), T, D, K + f), this.textParticle.complete()) : T.type === V.BLOCK ? (this.textParticle.complete(), this.blockParticle.render(t, l, T, D, K + f)) : (T.left && this.textParticle.complete(), this.textParticle.record(this.getCtx2d(), T, D, K + f), (T.width || T.letterSpacing || Ye.test(T.value)) && this.textParticle.complete()));
if (M && !X && this.mode !== dt.CLEAN && !W.isWidthNotEnough && c === W.elementList.length - 1 && this.lineBreakParticle.render(
this.getCtx2d(),
T,
D,
K + W.height / 2
), T.underline || (u = T.control) != null && u.underline) {
(Z == null ? void 0 : Z.type) === V.SUBSCRIPT && T.type !== V.SUBSCRIPT && this.underline.render(this.getCtx2d());
const U = this.getElementRowMargin(T), I = T.left || 0;
let p = 0;
T.type === V.SUBSCRIPT && (p = this.subscriptParticle.getOffsetY(T));
const g = T.controlComponent === j.PLACEHOLDER ? void 0 : T.color;
this.underline.recordFillInfo(
this.getCtx2d(),
D - I,
K + W.height - U + p,
H.width + I,
0,
g,
(h = T.textDecoration) == null ? void 0 : h.style
);
} else (Z != null && Z.underline || (L = Z == null ? void 0 : Z.control) != null && L.underline) && this.underline.render(this.getCtx2d());
if (T.strikeout) {
if (!T.type || pR.includes(T.type)) {
Z && (Z.type === V.SUBSCRIPT && T.type !== V.SUBSCRIPT || Z.type === V.SUPERSCRIPT && T.type !== V.SUPERSCRIPT || this.getElementSize(Z) !== this.getElementSize(T)) && this.strikeout.render(this.getCtx2d());
const U = this.textParticle.measureBasisWord(
this.getCtx2d(),
this.getFont(T)
);
let I = K + f + U.actualBoundingBoxDescent * e - H.height / 2;
T.type === V.SUBSCRIPT ? I += this.subscriptParticle.getOffsetY(T) : T.type === V.SUPERSCRIPT && (I += this.superscriptParticle.getOffsetY(T)), this.strikeout.recordFillInfo(
this.getCtx2d(),
D,
I,
H.width
);
}
} else Z != null && Z.strikeout && this.strikeout.render(this.getCtx2d());
if (!n.disabled && T.groupIds && this.group.recordFillInfo(T, D, K, H.width, W.height), T.type === V.TABLE) {
const U = o[1] + o[3], I = W.tableFragment;
if ((Y = W.repeatTdPositionList) != null && Y.length)
for (const {
td: g,
positionList: J
} of W.repeatTdPositionList)
this.drawRow(t, {
elementList: g.value,
positionList: J,
rowList: g.rowList,
pageNo: l,
startIndex: 0,
innerWidth: (g.width - U) * e,
zone: O,
isDrawLineBreak: M
});
const p = I ? this.tableParticle.getFragmentTdList(T, I) : T.trList.flatMap((g) => g.tdList);
for (const g of p) {
let J = g.rowList, y = 0;
if (I) {
const [v, B] = this.tableParticle.getTdWindowInFragment(g, T, I);
if (B <= v) continue;
if (v > 0 || B < g.height) {
const tt = this.tableParticle.getTdVisibleRowListByWindow(
g,
v,
B
);
J = tt.rowList, y = tt.startIndex;
}
}
this.drawRow(t, {
elementList: g.value,
positionList: g.positionList,
rowList: J,
pageNo: l,
startIndex: y,
innerWidth: (g.width - U) * e,
zone: O,
isDrawLineBreak: M
});
}
}
}
W.isList && this.listParticle.drawListStyle(
t,
W,
a[W.startIndex]
), this.textParticle.complete(), this.underline.render(this.getCtx2d()), this.strikeout.render(this.getCtx2d()), this.group.render(this.getCtx2d());
}
}
_drawFloat(t, R) {
const { scale: e } = this.options, o = this.position.getFloatPositionList(), { imgDisplays: n, pageNo: s } = R;
for (let r = 0; r < o.length; r++) {
const l = o[r], a = l.element;
if ((s === l.pageNo || l.zone === Qt.HEADER || l.zone == Qt.FOOTER) && a.imgDisplay && n.includes(a.imgDisplay) && a.type === V.IMAGE) {
const O = a.imgFloatPosition;
this.imageParticle.render(
t,
a,
O.x * e,
O.y * e
);
}
}
}
_clearPage(t) {
const R = this.getCtx2d(), e = this.getPageList()[t];
e && R.clearRect(
0,
0,
Math.max(e.width, this.getWidth()),
Math.max(e.height, this.getHeight())
), this.blockParticle.clear();
}
_drawPage(t) {
var L, Y, S;
const { elementList: R, positionList: e, rowList: o, pageNo: n } = t, {
// inactiveAlpha,
pageMode: s,
header: r,
footer: l,
pageNumber: a,
lineNumber: O,
pageBorder: M
} = this.options, X = this.mode === dt.PRINT, P = s === bt.CONTINUITY, N = this.getInnerWidth(), u = this.getCtx2d();
this.getPdf().setPage(n + 1), this._clearPage(n), (!X || !((L = this.options.modeRule[dt.PRINT]) != null && L.backgroundDisabled)) && this.background.render(u, n), X || this.area.render(u, n), !P && this.options.watermark.data && this.options.watermark.layer === TR.BOTTOM && this.waterMark.render(u, n), X || this.margin.render(u, n), this.columnManager.drawSeparator(u, n), this._drawFloat(u, {
pageNo: n,
imgDisplays: [Rt.FLOAT_BOTTOM]
});
const h = (Y = o[0]) == null ? void 0 : Y.startIndex;
this.drawRow(u, {
elementList: R,
positionList: e,
rowList: o,
pageNo: n,
startIndex: h,
innerWidth: N,
zone: Qt.MAIN
}), this.getOptions().pageMode === bt.PAGING && (r.disabled || this.header.render(u, n), a.disabled || this.pageNumber.render(u, n), l.disabled || this.footer.render(u, n)), this._drawFloat(u, {
pageNo: n,
imgDisplays: [Rt.FLOAT_TOP, Rt.SURROUND]
}), this.elementList.length <= 1 && !((S = this.elementList[0]) != null && S.listId) && this.placeholder.render(u), O.disabled || this.lineNumber.render(u, n), M.disabled || this.pageBorder.render(u), this.badge.render(u, this.elementList[0], n), this.isGraffitiMode() && this.graffiti.render(u, n), !P && this.options.watermark.data && this.options.watermark.layer === TR.TOP && this.waterMark.render(u, n);
}
_immediateRender() {
const t = this.getPosition().getOriginalMainPositionList(), R = this.getOriginalMainElementList();
for (let e = 0; e < this.pageRowList.length; e++)
this._drawPage({
elementList: R,
positionList: t,
rowList: this.pageRowList[e],
pageNo: e
});
}
_syncPageCount() {
const t = this.pageRowList.length;
for (let e = 0; e < t; e++)
this.pageList[e] || this._createPage(e);
this.pageList.length > t && this.pageList.splice(t).forEach((e) => {
e.remove && e.remove();
});
const R = this.getPdf().getNumberOfPages();
if (R > t)
for (let e = R; e > t; e--)
this.getPdf().deletePage(e);
else if (R < t)
for (let e = R; e < t; e++)
this.getPdf().addPage();
}
render(t) {
this._resetPdf();
const { header: R, footer: e } = this.options, { isCompute: o = !0 } = t || {}, n = this.getInnerWidth(), s = this.getOptions().pageMode === bt.PAGING;
if (o) {
this.position.setFloatPositionList([]), s && (this.columnManager.compute(), R.disabled || this.header.compute(), e.disabled || this.footer.compute());
const r = this.getMargins(), l = this.getHeight(), a = this.header.getExtraHeight(), O = r[3], M = r[0] + a, X = le(this.elementList);
this.rowList = this.computeRowList({
startX: O,
startY: M,
pageHeight: l,
isPagingMode: s,
innerWidth: n,
surroundElementList: X,
elementList: this.elementList
}), s && (this.rowList = this.tablePaging.splitTableRowAcrossPages(this.rowList)), this.pageRowList = this._computePageList(), this.position.computePositionList(), this.area.compute(), this.isGraffitiMode() && this.graffiti.compute();
}
this._syncPageCount(), this._immediateRender();
}
// Recreates the jsPDF instance with each render to prevent internal state accumulation
// between exports (e.g., the putImage bug in jsPDF that mutates the global filter array
// via splice, causing the 2nd save onwards to exit without
// FlatEncode and ~3x larger). Fonts loaded via downloadFont are
// reapplied from fontCache in the new instance.
_resetPdf() {
this.pdf = new Fe({
orientation: "p",
unit: "px",
format: [this.getWidth(), this.getHeight()],
hotfixes: ["px_scaling"],
compress: !0
}), this.pdf.setDocumentProperties({
author: "canvas-editor"
}), this.fontCache.forEach((t) => this._applyFont(this.pdf, t)), this.pageList = [], this.ctxListInfos = [];
}
destroy() {
}
clearSideEffect() {
this.getHyperlinkParticle().clearHyperlinkPopup(), this.getDateParticle().clearDatePicker();
}
};
// Declarative list of the fonts shipped in dist/font/ and also hosted at
// cdn.jsdelivr.net under the same names. To add a font: drop the TTF in
// public/font/, add a row here, no other code changes needed.
F($t, "DEFAULT_FONTS", [
{ fileName: "msyh.ttf", id: "microsoft yahei", type: "normal" },
// Bold msyh shares the 'msyh.ttf' VFS name with the normal weight — that's
// the existing behavior pre-0.4.0 (see git history). jsPDF keys fonts by
// (id, type), so this works, but it means addFileToVFS overwrites once.
{ fileName: "msyh-bold.ttf", id: "microsoft yahei", type: "bold" },
{ fileName: "Arial.ttf", id: "arial", type: "normal" },
{ fileName: "Arial_Bold.ttf", id: "arial", type: "bold" },
{ fileName: "Arial_Italic.ttf", id: "arial", type: "italic" },
{ fileName: "Arial_Bold_Italic.ttf", id: "arial", type: "bolditalic" },
{ fileName: "calibri-regular.ttf", id: "calibri", type: "normal" },
{ fileName: "calibri-bold.ttf", id: "calibri", type: "bold" },
{ fileName: "calibri-italic.ttf", id: "calibri", type: "italic" },
{ fileName: "calibri-bold-italic.ttf", id: "calibri", type: "bolditalic" },
{ fileName: "Cambria.ttf", id: "cambria", type: "normal" },
{ fileName: "cambriab.ttf", id: "cambria", type: "bold" },
{ fileName: "cambriai.ttf", id: "cambria", type: "italic" },
{ fileName: "cambriaz.ttf", id: "cambria", type: "bolditalic" },
{ fileName: "Verdana.ttf", id: "verdana", type: "normal" },
{ fileName: "Verdana_Bold.ttf", id: "verdana", type: "bold" },
{ fileName: "Verdana_Italic.ttf", id: "verdana", type: "italic" },
{ fileName: "Verdana_Bold_Italic.ttf", id: "verdana", type: "bolditalic" },
{ fileName: "Inkfree.ttf", id: "ink free", type: "normal" },
{ fileName: "segoe-ui.ttf", id: "segoe ui", type: "normal" },
{ fileName: "segoe-ui-bold.ttf", id: "segoe ui", type: "bold" },
{ fileName: "segoeuii.ttf", id: "segoe ui", type: "italic" }
]), // Same version-pinned CDN base used pre-0.4.0. Pinning to 0.2.7 means the
// fonts hosted there never change under us — bumping the package version
// doesn't move the font URLs.
F($t, "CDN_FONT_BASE", "https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font");
let $R = $t;
export {
$R as DrawPdf,
Os as svgString2Image
};
//# sourceMappingURL=canvas-editor-pdf.es.js.map