/** * @licstart The following is the entire license notice for the * JavaScript code in this page * * Copyright 2023 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @licend The above is the entire license notice for the * JavaScript code in this page */ var e = { 9306: (e, t, i) => { var a = i(4901), r = i(6823), s = TypeError; e.exports = function (e) { if (a(e)) return e; throw new s(r(e) + ' is not a function'); }; }, 3506: (e, t, i) => { var a = i(3925), r = String, s = TypeError; e.exports = function (e) { if (a(e)) return e; throw new s("Can't set " + r(e) + ' as a prototype'); }; }, 7080: (e, t, i) => { var a = i(4402).has; e.exports = function (e) { a(e); return e; }; }, 679: (e, t, i) => { var a = i(1625), r = TypeError; e.exports = function (e, t) { if (a(t, e)) return e; throw new r('Incorrect invocation'); }; }, 8551: (e, t, i) => { var a = i(34), r = String, s = TypeError; e.exports = function (e) { if (a(e)) return e; throw new s(r(e) + ' is not an object'); }; }, 7811: (e) => { e.exports = 'undefined' != typeof ArrayBuffer && 'undefined' != typeof DataView; }, 7394: (e, t, i) => { var a = i(6706), r = i(4576), s = TypeError; e.exports = a(ArrayBuffer.prototype, 'byteLength', 'get') || function (e) { if ('ArrayBuffer' !== r(e)) throw new s('ArrayBuffer expected'); return e.byteLength; }; }, 3238: (e, t, i) => { var a = i(9504), r = i(7394), s = a(ArrayBuffer.prototype.slice); e.exports = function (e) { if (0 !== r(e)) return !1; try { s(e, 0, 0); return !1; } catch (e) { return !0; } }; }, 5636: (e, t, i) => { var a = i(4475), r = i(9504), s = i(6706), n = i(7696), o = i(3238), g = i(7394), c = i(4483), C = i(1548), h = a.structuredClone, l = a.ArrayBuffer, Q = a.DataView, E = a.TypeError, u = Math.min, d = l.prototype, f = Q.prototype, p = r(d.slice), m = s(d, 'resizable', 'get'), y = s(d, 'maxByteLength', 'get'), w = r(f.getInt8), b = r(f.setInt8); e.exports = (C || c) && function (e, t, i) { var a, r = g(e), s = void 0 === t ? r : n(t), d = !m || !m(e); if (o(e)) throw new E('ArrayBuffer is detached'); if (C) { e = h(e, { transfer: [e] }); if (r === s && (i || d)) return e; } if (r >= s && (!i || d)) a = p(e, 0, s); else { var f = i && !d && y ? { maxByteLength: y(e) } : void 0; a = new l(s, f); for (var D = new Q(e), S = new Q(a), k = u(s, r), R = 0; R < k; R++) b(S, R, w(D, R)); } C || c(e); return a; }; }, 4644: (e, t, i) => { var a, r, s, n = i(7811), o = i(3724), g = i(4475), c = i(4901), C = i(34), h = i(9297), l = i(6955), Q = i(6823), E = i(6699), u = i(6840), d = i(2106), f = i(1625), p = i(2787), m = i(2967), y = i(8227), w = i(3392), b = i(1181), D = b.enforce, S = b.get, k = g.Int8Array, R = k && k.prototype, N = g.Uint8ClampedArray, G = N && N.prototype, x = k && p(k), U = R && p(R), M = Object.prototype, L = g.TypeError, H = y('toStringTag'), J = w('TYPED_ARRAY_TAG'), Y = 'TypedArrayConstructor', v = n && !!m && 'Opera' !== l(g.opera), T = !1, K = { Int8Array: 1, Uint8Array: 1, Uint8ClampedArray: 1, Int16Array: 2, Uint16Array: 2, Int32Array: 4, Uint32Array: 4, Float32Array: 4, Float64Array: 8, }, q = { BigInt64Array: 8, BigUint64Array: 8 }, getTypedArrayConstructor = function (e) { var t = p(e); if (C(t)) { var i = S(t); return i && h(i, Y) ? i[Y] : getTypedArrayConstructor(t); } }, isTypedArray = function (e) { if (!C(e)) return !1; var t = l(e); return h(K, t) || h(q, t); }; for (a in K) (s = (r = g[a]) && r.prototype) ? (D(s)[Y] = r) : (v = !1); for (a in q) (s = (r = g[a]) && r.prototype) && (D(s)[Y] = r); if (!v || !c(x) || x === Function.prototype) { x = function TypedArray() { throw new L('Incorrect invocation'); }; if (v) for (a in K) g[a] && m(g[a], x); } if (!v || !U || U === M) { U = x.prototype; if (v) for (a in K) g[a] && m(g[a].prototype, U); } v && p(G) !== U && m(G, U); if (o && !h(U, H)) { T = !0; d(U, H, { configurable: !0, get: function () { return C(this) ? this[J] : void 0; }, }); for (a in K) g[a] && E(g[a], J, a); } e.exports = { NATIVE_ARRAY_BUFFER_VIEWS: v, TYPED_ARRAY_TAG: T && J, aTypedArray: function (e) { if (isTypedArray(e)) return e; throw new L('Target is not a typed array'); }, aTypedArrayConstructor: function (e) { if (c(e) && (!m || f(x, e))) return e; throw new L(Q(e) + ' is not a typed array constructor'); }, exportTypedArrayMethod: function (e, t, i, a) { if (o) { if (i) for (var r in K) { var s = g[r]; if (s && h(s.prototype, e)) try { delete s.prototype[e]; } catch (i) { try { s.prototype[e] = t; } catch (e) {} } } (U[e] && !i) || u(U, e, i ? t : (v && R[e]) || t, a); } }, exportTypedArrayStaticMethod: function (e, t, i) { var a, r; if (o) { if (m) { if (i) for (a in K) if ((r = g[a]) && h(r, e)) try { delete r[e]; } catch (e) {} if (x[e] && !i) return; try { return u(x, e, i ? t : (v && x[e]) || t); } catch (e) {} } for (a in K) !(r = g[a]) || (r[e] && !i) || u(r, e, t); } }, getTypedArrayConstructor, isView: function isView(e) { if (!C(e)) return !1; var t = l(e); return 'DataView' === t || h(K, t) || h(q, t); }, isTypedArray, TypedArray: x, TypedArrayPrototype: U, }; }, 5370: (e, t, i) => { var a = i(6198); e.exports = function (e, t, i) { for ( var r = 0, s = arguments.length > 2 ? i : a(t), n = new e(s); s > r; ) n[r] = t[r++]; return n; }; }, 9617: (e, t, i) => { var a = i(5397), r = i(5610), s = i(6198), createMethod = function (e) { return function (t, i, n) { var o = a(t), g = s(o); if (0 === g) return !e && -1; var c, C = r(n, g); if (e && i != i) { for (; g > C; ) if ((c = o[C++]) != c) return !0; } else for (; g > C; C++) if ((e || C in o) && o[C] === i) return e || C || 0; return !e && -1; }; }; e.exports = { includes: createMethod(!0), indexOf: createMethod(!1) }; }, 4527: (e, t, i) => { var a = i(3724), r = i(4376), s = TypeError, n = Object.getOwnPropertyDescriptor, o = a && !(function () { if (void 0 !== this) return !0; try { Object.defineProperty([], 'length', { writable: !1 }).length = 1; } catch (e) { return e instanceof TypeError; } })(); e.exports = o ? function (e, t) { if (r(e) && !n(e, 'length').writable) throw new s('Cannot set read only .length'); return (e.length = t); } : function (e, t) { return (e.length = t); }; }, 7628: (e, t, i) => { var a = i(6198); e.exports = function (e, t) { for (var i = a(e), r = new t(i), s = 0; s < i; s++) r[s] = e[i - s - 1]; return r; }; }, 9928: (e, t, i) => { var a = i(6198), r = i(1291), s = RangeError; e.exports = function (e, t, i, n) { var o = a(e), g = r(i), c = g < 0 ? o + g : g; if (c >= o || c < 0) throw new s('Incorrect index'); for (var C = new t(o), h = 0; h < o; h++) C[h] = h === c ? n : e[h]; return C; }; }, 6319: (e, t, i) => { var a = i(8551), r = i(9539); e.exports = function (e, t, i, s) { try { return s ? t(a(i)[0], i[1]) : t(i); } catch (t) { r(e, 'throw', t); } }; }, 4576: (e, t, i) => { var a = i(9504), r = a({}.toString), s = a(''.slice); e.exports = function (e) { return s(r(e), 8, -1); }; }, 6955: (e, t, i) => { var a = i(2140), r = i(4901), s = i(4576), n = i(8227)('toStringTag'), o = Object, g = 'Arguments' === s( (function () { return arguments; })(), ); e.exports = a ? s : function (e) { var t, i, a; return void 0 === e ? 'Undefined' : null === e ? 'Null' : 'string' == typeof (i = (function (e, t) { try { return e[t]; } catch (e) {} })((t = o(e)), n)) ? i : g ? s(t) : 'Object' === (a = s(t)) && r(t.callee) ? 'Arguments' : a; }; }, 7740: (e, t, i) => { var a = i(9297), r = i(5031), s = i(7347), n = i(4913); e.exports = function (e, t, i) { for (var o = r(t), g = n.f, c = s.f, C = 0; C < o.length; C++) { var h = o[C]; a(e, h) || (i && a(i, h)) || g(e, h, c(t, h)); } }; }, 2211: (e, t, i) => { var a = i(9039); e.exports = !a(function () { function F() {} F.prototype.constructor = null; return Object.getPrototypeOf(new F()) !== F.prototype; }); }, 2529: (e) => { e.exports = function (e, t) { return { value: e, done: t }; }; }, 6699: (e, t, i) => { var a = i(3724), r = i(4913), s = i(6980); e.exports = a ? function (e, t, i) { return r.f(e, t, s(1, i)); } : function (e, t, i) { e[t] = i; return e; }; }, 6980: (e) => { e.exports = function (e, t) { return { enumerable: !(1 & e), configurable: !(2 & e), writable: !(4 & e), value: t, }; }; }, 4659: (e, t, i) => { var a = i(3724), r = i(4913), s = i(6980); e.exports = function (e, t, i) { a ? r.f(e, t, s(0, i)) : (e[t] = i); }; }, 2106: (e, t, i) => { var a = i(283), r = i(4913); e.exports = function (e, t, i) { i.get && a(i.get, t, { getter: !0 }); i.set && a(i.set, t, { setter: !0 }); return r.f(e, t, i); }; }, 6840: (e, t, i) => { var a = i(4901), r = i(4913), s = i(283), n = i(9433); e.exports = function (e, t, i, o) { o || (o = {}); var g = o.enumerable, c = void 0 !== o.name ? o.name : t; a(i) && s(i, c, o); if (o.global) g ? (e[t] = i) : n(t, i); else { try { o.unsafe ? e[t] && (g = !0) : delete e[t]; } catch (e) {} g ? (e[t] = i) : r.f(e, t, { value: i, enumerable: !1, configurable: !o.nonConfigurable, writable: !o.nonWritable, }); } return e; }; }, 6279: (e, t, i) => { var a = i(6840); e.exports = function (e, t, i) { for (var r in t) a(e, r, t[r], i); return e; }; }, 9433: (e, t, i) => { var a = i(4475), r = Object.defineProperty; e.exports = function (e, t) { try { r(a, e, { value: t, configurable: !0, writable: !0 }); } catch (i) { a[e] = t; } return t; }; }, 3724: (e, t, i) => { var a = i(9039); e.exports = !a(function () { return ( 7 !== Object.defineProperty({}, 1, { get: function () { return 7; }, })[1] ); }); }, 4483: (e, t, i) => { var a, r, s, n, o = i(4475), g = i(9714), c = i(1548), C = o.structuredClone, h = o.ArrayBuffer, l = o.MessageChannel, Q = !1; if (c) Q = function (e) { C(e, { transfer: [e] }); }; else if (h) try { l || ((a = g('worker_threads')) && (l = a.MessageChannel)); if (l) { r = new l(); s = new h(2); n = function (e) { r.port1.postMessage(null, [e]); }; if (2 === s.byteLength) { n(s); 0 === s.byteLength && (Q = n); } } } catch (e) {} e.exports = Q; }, 4055: (e, t, i) => { var a = i(4475), r = i(34), s = a.document, n = r(s) && r(s.createElement); e.exports = function (e) { return n ? s.createElement(e) : {}; }; }, 6837: (e) => { var t = TypeError; e.exports = function (e) { if (e > 9007199254740991) throw t('Maximum allowed index exceeded'); return e; }; }, 5002: (e) => { e.exports = { IndexSizeError: { s: 'INDEX_SIZE_ERR', c: 1, m: 1 }, DOMStringSizeError: { s: 'DOMSTRING_SIZE_ERR', c: 2, m: 0 }, HierarchyRequestError: { s: 'HIERARCHY_REQUEST_ERR', c: 3, m: 1 }, WrongDocumentError: { s: 'WRONG_DOCUMENT_ERR', c: 4, m: 1 }, InvalidCharacterError: { s: 'INVALID_CHARACTER_ERR', c: 5, m: 1 }, NoDataAllowedError: { s: 'NO_DATA_ALLOWED_ERR', c: 6, m: 0 }, NoModificationAllowedError: { s: 'NO_MODIFICATION_ALLOWED_ERR', c: 7, m: 1, }, NotFoundError: { s: 'NOT_FOUND_ERR', c: 8, m: 1 }, NotSupportedError: { s: 'NOT_SUPPORTED_ERR', c: 9, m: 1 }, InUseAttributeError: { s: 'INUSE_ATTRIBUTE_ERR', c: 10, m: 1 }, InvalidStateError: { s: 'INVALID_STATE_ERR', c: 11, m: 1 }, SyntaxError: { s: 'SYNTAX_ERR', c: 12, m: 1 }, InvalidModificationError: { s: 'INVALID_MODIFICATION_ERR', c: 13, m: 1, }, NamespaceError: { s: 'NAMESPACE_ERR', c: 14, m: 1 }, InvalidAccessError: { s: 'INVALID_ACCESS_ERR', c: 15, m: 1 }, ValidationError: { s: 'VALIDATION_ERR', c: 16, m: 0 }, TypeMismatchError: { s: 'TYPE_MISMATCH_ERR', c: 17, m: 1 }, SecurityError: { s: 'SECURITY_ERR', c: 18, m: 1 }, NetworkError: { s: 'NETWORK_ERR', c: 19, m: 1 }, AbortError: { s: 'ABORT_ERR', c: 20, m: 1 }, URLMismatchError: { s: 'URL_MISMATCH_ERR', c: 21, m: 1 }, QuotaExceededError: { s: 'QUOTA_EXCEEDED_ERR', c: 22, m: 1 }, TimeoutError: { s: 'TIMEOUT_ERR', c: 23, m: 1 }, InvalidNodeTypeError: { s: 'INVALID_NODE_TYPE_ERR', c: 24, m: 1 }, DataCloneError: { s: 'DATA_CLONE_ERR', c: 25, m: 1 }, }; }, 7290: (e, t, i) => { var a = i(516), r = i(9088); e.exports = !a && !r && 'object' == typeof window && 'object' == typeof document; }, 516: (e) => { e.exports = 'object' == typeof Deno && Deno && 'object' == typeof Deno.version; }, 9088: (e, t, i) => { var a = i(4475), r = i(4576); e.exports = 'process' === r(a.process); }, 9392: (e) => { e.exports = ('undefined' != typeof navigator && String(navigator.userAgent)) || ''; }, 7388: (e, t, i) => { var a, r, s = i(4475), n = i(9392), o = s.process, g = s.Deno, c = (o && o.versions) || (g && g.version), C = c && c.v8; C && (r = (a = C.split('.'))[0] > 0 && a[0] < 4 ? 1 : +(a[0] + a[1])); !r && n && (!(a = n.match(/Edge\/(\d+)/)) || a[1] >= 74) && (a = n.match(/Chrome\/(\d+)/)) && (r = +a[1]); e.exports = r; }, 8727: (e) => { e.exports = [ 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf', ]; }, 6193: (e, t, i) => { var a = i(9504), r = Error, s = a(''.replace), n = String(new r('zxcasd').stack), o = /\n\s*at [^:]*:[^\n]*/, g = o.test(n); e.exports = function (e, t) { if (g && 'string' == typeof e && !r.prepareStackTrace) for (; t--; ) e = s(e, o, ''); return e; }; }, 6518: (e, t, i) => { var a = i(4475), r = i(7347).f, s = i(6699), n = i(6840), o = i(9433), g = i(7740), c = i(2796); e.exports = function (e, t) { var i, C, h, l, Q, E = e.target, u = e.global, d = e.stat; if ((i = u ? a : d ? a[E] || o(E, {}) : a[E] && a[E].prototype)) for (C in t) { l = t[C]; h = e.dontCallGetSet ? (Q = r(i, C)) && Q.value : i[C]; if (!c(u ? C : E + (d ? '.' : '#') + C, e.forced) && void 0 !== h) { if (typeof l == typeof h) continue; g(l, h); } (e.sham || (h && h.sham)) && s(l, 'sham', !0); n(i, C, l, e); } }; }, 9039: (e) => { e.exports = function (e) { try { return !!e(); } catch (e) { return !0; } }; }, 6080: (e, t, i) => { var a = i(7476), r = i(9306), s = i(616), n = a(a.bind); e.exports = function (e, t) { r(e); return void 0 === t ? e : s ? n(e, t) : function () { return e.apply(t, arguments); }; }; }, 616: (e, t, i) => { var a = i(9039); e.exports = !a(function () { var e = function () {}.bind(); return 'function' != typeof e || e.hasOwnProperty('prototype'); }); }, 9565: (e, t, i) => { var a = i(616), r = Function.prototype.call; e.exports = a ? r.bind(r) : function () { return r.apply(r, arguments); }; }, 350: (e, t, i) => { var a = i(3724), r = i(9297), s = Function.prototype, n = a && Object.getOwnPropertyDescriptor, o = r(s, 'name'), g = o && 'something' === function something() {}.name, c = o && (!a || (a && n(s, 'name').configurable)); e.exports = { EXISTS: o, PROPER: g, CONFIGURABLE: c }; }, 6706: (e, t, i) => { var a = i(9504), r = i(9306); e.exports = function (e, t, i) { try { return a(r(Object.getOwnPropertyDescriptor(e, t)[i])); } catch (e) {} }; }, 7476: (e, t, i) => { var a = i(4576), r = i(9504); e.exports = function (e) { if ('Function' === a(e)) return r(e); }; }, 9504: (e, t, i) => { var a = i(616), r = Function.prototype, s = r.call, n = a && r.bind.bind(s, s); e.exports = a ? n : function (e) { return function () { return s.apply(e, arguments); }; }; }, 7751: (e, t, i) => { var a = i(4475), r = i(4901); e.exports = function (e, t) { return arguments.length < 2 ? ((i = a[e]), r(i) ? i : void 0) : a[e] && a[e][t]; var i; }; }, 1767: (e) => { e.exports = function (e) { return { iterator: e, next: e.next, done: !1 }; }; }, 851: (e, t, i) => { var a = i(6955), r = i(5966), s = i(4117), n = i(6269), o = i(8227)('iterator'); e.exports = function (e) { if (!s(e)) return r(e, o) || r(e, '@@iterator') || n[a(e)]; }; }, 81: (e, t, i) => { var a = i(9565), r = i(9306), s = i(8551), n = i(6823), o = i(851), g = TypeError; e.exports = function (e, t) { var i = arguments.length < 2 ? o(e) : t; if (r(i)) return s(a(i, e)); throw new g(n(e) + ' is not iterable'); }; }, 5966: (e, t, i) => { var a = i(9306), r = i(4117); e.exports = function (e, t) { var i = e[t]; return r(i) ? void 0 : a(i); }; }, 3789: (e, t, i) => { var a = i(9306), r = i(8551), s = i(9565), n = i(1291), o = i(1767), g = 'Invalid size', c = RangeError, C = TypeError, h = Math.max, SetRecord = function (e, t) { this.set = e; this.size = h(t, 0); this.has = a(e.has); this.keys = a(e.keys); }; SetRecord.prototype = { getIterator: function () { return o(r(s(this.keys, this.set))); }, includes: function (e) { return s(this.has, this.set, e); }, }; e.exports = function (e) { r(e); var t = +e.size; if (t != t) throw new C(g); var i = n(t); if (i < 0) throw new c(g); return new SetRecord(e, i); }; }, 4475: function (e) { var check = function (e) { return e && e.Math === Math && e; }; e.exports = check('object' == typeof globalThis && globalThis) || check('object' == typeof window && window) || check('object' == typeof self && self) || check('object' == typeof global && global) || check('object' == typeof this && this) || (function () { return this; })() || Function('return this')(); }, 9297: (e, t, i) => { var a = i(9504), r = i(8981), s = a({}.hasOwnProperty); e.exports = Object.hasOwn || function hasOwn(e, t) { return s(r(e), t); }; }, 421: (e) => { e.exports = {}; }, 397: (e, t, i) => { var a = i(7751); e.exports = a('document', 'documentElement'); }, 5917: (e, t, i) => { var a = i(3724), r = i(9039), s = i(4055); e.exports = !a && !r(function () { return ( 7 !== Object.defineProperty(s('div'), 'a', { get: function () { return 7; }, }).a ); }); }, 7055: (e, t, i) => { var a = i(9504), r = i(9039), s = i(4576), n = Object, o = a(''.split); e.exports = r(function () { return !n('z').propertyIsEnumerable(0); }) ? function (e) { return 'String' === s(e) ? o(e, '') : n(e); } : n; }, 3167: (e, t, i) => { var a = i(4901), r = i(34), s = i(2967); e.exports = function (e, t, i) { var n, o; s && a((n = t.constructor)) && n !== i && r((o = n.prototype)) && o !== i.prototype && s(e, o); return e; }; }, 3706: (e, t, i) => { var a = i(9504), r = i(4901), s = i(7629), n = a(Function.toString); r(s.inspectSource) || (s.inspectSource = function (e) { return n(e); }); e.exports = s.inspectSource; }, 1181: (e, t, i) => { var a, r, s, n = i(8622), o = i(4475), g = i(34), c = i(6699), C = i(9297), h = i(7629), l = i(6119), Q = i(421), E = 'Object already initialized', u = o.TypeError, d = o.WeakMap; if (n || h.state) { var f = h.state || (h.state = new d()); f.get = f.get; f.has = f.has; f.set = f.set; a = function (e, t) { if (f.has(e)) throw new u(E); t.facade = e; f.set(e, t); return t; }; r = function (e) { return f.get(e) || {}; }; s = function (e) { return f.has(e); }; } else { var p = l('state'); Q[p] = !0; a = function (e, t) { if (C(e, p)) throw new u(E); t.facade = e; c(e, p, t); return t; }; r = function (e) { return C(e, p) ? e[p] : {}; }; s = function (e) { return C(e, p); }; } e.exports = { set: a, get: r, has: s, enforce: function (e) { return s(e) ? r(e) : a(e, {}); }, getterFor: function (e) { return function (t) { var i; if (!g(t) || (i = r(t)).type !== e) throw new u('Incompatible receiver, ' + e + ' required'); return i; }; }, }; }, 4209: (e, t, i) => { var a = i(8227), r = i(6269), s = a('iterator'), n = Array.prototype; e.exports = function (e) { return void 0 !== e && (r.Array === e || n[s] === e); }; }, 4376: (e, t, i) => { var a = i(4576); e.exports = Array.isArray || function isArray(e) { return 'Array' === a(e); }; }, 1108: (e, t, i) => { var a = i(6955); e.exports = function (e) { var t = a(e); return 'BigInt64Array' === t || 'BigUint64Array' === t; }; }, 4901: (e) => { var t = 'object' == typeof document && document.all; e.exports = void 0 === t && void 0 !== t ? function (e) { return 'function' == typeof e || e === t; } : function (e) { return 'function' == typeof e; }; }, 2796: (e, t, i) => { var a = i(9039), r = i(4901), s = /#|\.prototype\./, isForced = function (e, t) { var i = o[n(e)]; return i === c || (i !== g && (r(t) ? a(t) : !!t)); }, n = (isForced.normalize = function (e) { return String(e).replace(s, '.').toLowerCase(); }), o = (isForced.data = {}), g = (isForced.NATIVE = 'N'), c = (isForced.POLYFILL = 'P'); e.exports = isForced; }, 4117: (e) => { e.exports = function (e) { return null == e; }; }, 34: (e, t, i) => { var a = i(4901); e.exports = function (e) { return 'object' == typeof e ? null !== e : a(e); }; }, 3925: (e, t, i) => { var a = i(34); e.exports = function (e) { return a(e) || null === e; }; }, 6395: (e) => { e.exports = !1; }, 757: (e, t, i) => { var a = i(7751), r = i(4901), s = i(1625), n = i(7040), o = Object; e.exports = n ? function (e) { return 'symbol' == typeof e; } : function (e) { var t = a('Symbol'); return r(t) && s(t.prototype, o(e)); }; }, 507: (e, t, i) => { var a = i(9565); e.exports = function (e, t, i) { for ( var r, s, n = i ? e : e.iterator, o = e.next; !(r = a(o, n)).done; ) if (void 0 !== (s = t(r.value))) return s; }; }, 2652: (e, t, i) => { var a = i(6080), r = i(9565), s = i(8551), n = i(6823), o = i(4209), g = i(6198), c = i(1625), C = i(81), h = i(851), l = i(9539), Q = TypeError, Result = function (e, t) { this.stopped = e; this.result = t; }, E = Result.prototype; e.exports = function (e, t, i) { var u, d, f, p, m, y, w, b = i && i.that, D = !(!i || !i.AS_ENTRIES), S = !(!i || !i.IS_RECORD), k = !(!i || !i.IS_ITERATOR), R = !(!i || !i.INTERRUPTED), N = a(t, b), stop = function (e) { u && l(u, 'normal', e); return new Result(!0, e); }, callFn = function (e) { if (D) { s(e); return R ? N(e[0], e[1], stop) : N(e[0], e[1]); } return R ? N(e, stop) : N(e); }; if (S) u = e.iterator; else if (k) u = e; else { if (!(d = h(e))) throw new Q(n(e) + ' is not iterable'); if (o(d)) { for (f = 0, p = g(e); p > f; f++) if ((m = callFn(e[f])) && c(E, m)) return m; return new Result(!1); } u = C(e, d); } y = S ? e.next : u.next; for (; !(w = r(y, u)).done; ) { try { m = callFn(w.value); } catch (e) { l(u, 'throw', e); } if ('object' == typeof m && m && c(E, m)) return m; } return new Result(!1); }; }, 9539: (e, t, i) => { var a = i(9565), r = i(8551), s = i(5966); e.exports = function (e, t, i) { var n, o; r(e); try { if (!(n = s(e, 'return'))) { if ('throw' === t) throw i; return i; } n = a(n, e); } catch (e) { o = !0; n = e; } if ('throw' === t) throw i; if (o) throw n; r(n); return i; }; }, 9462: (e, t, i) => { var a = i(9565), r = i(2360), s = i(6699), n = i(6279), o = i(8227), g = i(1181), c = i(5966), C = i(7657).IteratorPrototype, h = i(2529), l = i(9539), Q = o('toStringTag'), E = 'IteratorHelper', u = 'WrapForValidIterator', d = g.set, createIteratorProxyPrototype = function (e) { var t = g.getterFor(e ? u : E); return n(r(C), { next: function next() { var i = t(this); if (e) return i.nextHandler(); try { var a = i.done ? void 0 : i.nextHandler(); return h(a, i.done); } catch (e) { i.done = !0; throw e; } }, return: function () { var i = t(this), r = i.iterator; i.done = !0; if (e) { var s = c(r, 'return'); return s ? a(s, r) : h(void 0, !0); } if (i.inner) try { l(i.inner.iterator, 'normal'); } catch (e) { return l(r, 'throw', e); } l(r, 'normal'); return h(void 0, !0); }, }); }, f = createIteratorProxyPrototype(!0), p = createIteratorProxyPrototype(!1); s(p, Q, 'Iterator Helper'); e.exports = function (e, t) { var i = function Iterator(i, a) { if (a) { a.iterator = i.iterator; a.next = i.next; } else a = i; a.type = t ? u : E; a.nextHandler = e; a.counter = 0; a.done = !1; d(this, a); }; i.prototype = t ? f : p; return i; }; }, 713: (e, t, i) => { var a = i(9565), r = i(9306), s = i(8551), n = i(1767), o = i(9462), g = i(6319), c = o(function () { var e = this.iterator, t = s(a(this.next, e)); if (!(this.done = !!t.done)) return g(e, this.mapper, [t.value, this.counter++], !0); }); e.exports = function map(e) { s(this); r(e); return new c(n(this), { mapper: e }); }; }, 7657: (e, t, i) => { var a, r, s, n = i(9039), o = i(4901), g = i(34), c = i(2360), C = i(2787), h = i(6840), l = i(8227), Q = i(6395), E = l('iterator'), u = !1; [].keys && ('next' in (s = [].keys()) ? (r = C(C(s))) !== Object.prototype && (a = r) : (u = !0)); !g(a) || n(function () { var e = {}; return a[E].call(e) !== e; }) ? (a = {}) : Q && (a = c(a)); o(a[E]) || h(a, E, function () { return this; }); e.exports = { IteratorPrototype: a, BUGGY_SAFARI_ITERATORS: u }; }, 6269: (e) => { e.exports = {}; }, 6198: (e, t, i) => { var a = i(8014); e.exports = function (e) { return a(e.length); }; }, 283: (e, t, i) => { var a = i(9504), r = i(9039), s = i(4901), n = i(9297), o = i(3724), g = i(350).CONFIGURABLE, c = i(3706), C = i(1181), h = C.enforce, l = C.get, Q = String, E = Object.defineProperty, u = a(''.slice), d = a(''.replace), f = a([].join), p = o && !r(function () { return 8 !== E(function () {}, 'length', { value: 8 }).length; }), m = String(String).split('String'), y = (e.exports = function (e, t, i) { 'Symbol(' === u(Q(t), 0, 7) && (t = '[' + d(Q(t), /^Symbol\(([^)]*)\).*$/, '$1') + ']'); i && i.getter && (t = 'get ' + t); i && i.setter && (t = 'set ' + t); (!n(e, 'name') || (g && e.name !== t)) && (o ? E(e, 'name', { value: t, configurable: !0 }) : (e.name = t)); p && i && n(i, 'arity') && e.length !== i.arity && E(e, 'length', { value: i.arity }); try { i && n(i, 'constructor') && i.constructor ? o && E(e, 'prototype', { writable: !1 }) : e.prototype && (e.prototype = void 0); } catch (e) {} var a = h(e); n(a, 'source') || (a.source = f(m, 'string' == typeof t ? t : '')); return e; }); Function.prototype.toString = y(function toString() { return (s(this) && l(this).source) || c(this); }, 'toString'); }, 741: (e) => { var t = Math.ceil, i = Math.floor; e.exports = Math.trunc || function trunc(e) { var a = +e; return (a > 0 ? i : t)(a); }; }, 6043: (e, t, i) => { var a = i(9306), r = TypeError, PromiseCapability = function (e) { var t, i; this.promise = new e(function (e, a) { if (void 0 !== t || void 0 !== i) throw new r('Bad Promise constructor'); t = e; i = a; }); this.resolve = a(t); this.reject = a(i); }; e.exports.f = function (e) { return new PromiseCapability(e); }; }, 2603: (e, t, i) => { var a = i(655); e.exports = function (e, t) { return void 0 === e ? (arguments.length < 2 ? '' : t) : a(e); }; }, 2360: (e, t, i) => { var a, r = i(8551), s = i(6801), n = i(8727), o = i(421), g = i(397), c = i(4055), C = i(6119), h = 'prototype', l = 'script', Q = C('IE_PROTO'), EmptyConstructor = function () {}, scriptTag = function (e) { return '<' + l + '>' + e + ''; }, NullProtoObjectViaActiveX = function (e) { e.write(scriptTag('')); e.close(); var t = e.parentWindow.Object; e = null; return t; }, NullProtoObject = function () { try { a = new ActiveXObject('htmlfile'); } catch (e) {} NullProtoObject = 'undefined' != typeof document ? document.domain && a ? NullProtoObjectViaActiveX(a) : (function () { var e, t = c('iframe'), i = 'java' + l + ':'; t.style.display = 'none'; g.appendChild(t); t.src = String(i); (e = t.contentWindow.document).open(); e.write(scriptTag('document.F=Object')); e.close(); return e.F; })() : NullProtoObjectViaActiveX(a); for (var e = n.length; e--; ) delete NullProtoObject[h][n[e]]; return NullProtoObject(); }; o[Q] = !0; e.exports = Object.create || function create(e, t) { var i; if (null !== e) { EmptyConstructor[h] = r(e); i = new EmptyConstructor(); EmptyConstructor[h] = null; i[Q] = e; } else i = NullProtoObject(); return void 0 === t ? i : s.f(i, t); }; }, 6801: (e, t, i) => { var a = i(3724), r = i(8686), s = i(4913), n = i(8551), o = i(5397), g = i(1072); t.f = a && !r ? Object.defineProperties : function defineProperties(e, t) { n(e); for (var i, a = o(t), r = g(t), c = r.length, C = 0; c > C; ) s.f(e, (i = r[C++]), a[i]); return e; }; }, 4913: (e, t, i) => { var a = i(3724), r = i(5917), s = i(8686), n = i(8551), o = i(6969), g = TypeError, c = Object.defineProperty, C = Object.getOwnPropertyDescriptor, h = 'enumerable', l = 'configurable', Q = 'writable'; t.f = a ? s ? function defineProperty(e, t, i) { n(e); t = o(t); n(i); if ( 'function' == typeof e && 'prototype' === t && 'value' in i && Q in i && !i[Q] ) { var a = C(e, t); if (a && a[Q]) { e[t] = i.value; i = { configurable: l in i ? i[l] : a[l], enumerable: h in i ? i[h] : a[h], writable: !1, }; } } return c(e, t, i); } : c : function defineProperty(e, t, i) { n(e); t = o(t); n(i); if (r) try { return c(e, t, i); } catch (e) {} if ('get' in i || 'set' in i) throw new g('Accessors not supported'); 'value' in i && (e[t] = i.value); return e; }; }, 7347: (e, t, i) => { var a = i(3724), r = i(9565), s = i(8773), n = i(6980), o = i(5397), g = i(6969), c = i(9297), C = i(5917), h = Object.getOwnPropertyDescriptor; t.f = a ? h : function getOwnPropertyDescriptor(e, t) { e = o(e); t = g(t); if (C) try { return h(e, t); } catch (e) {} if (c(e, t)) return n(!r(s.f, e, t), e[t]); }; }, 8480: (e, t, i) => { var a = i(1828), r = i(8727).concat('length', 'prototype'); t.f = Object.getOwnPropertyNames || function getOwnPropertyNames(e) { return a(e, r); }; }, 3717: (e, t) => { t.f = Object.getOwnPropertySymbols; }, 2787: (e, t, i) => { var a = i(9297), r = i(4901), s = i(8981), n = i(6119), o = i(2211), g = n('IE_PROTO'), c = Object, C = c.prototype; e.exports = o ? c.getPrototypeOf : function (e) { var t = s(e); if (a(t, g)) return t[g]; var i = t.constructor; return r(i) && t instanceof i ? i.prototype : t instanceof c ? C : null; }; }, 1625: (e, t, i) => { var a = i(9504); e.exports = a({}.isPrototypeOf); }, 1828: (e, t, i) => { var a = i(9504), r = i(9297), s = i(5397), n = i(9617).indexOf, o = i(421), g = a([].push); e.exports = function (e, t) { var i, a = s(e), c = 0, C = []; for (i in a) !r(o, i) && r(a, i) && g(C, i); for (; t.length > c; ) r(a, (i = t[c++])) && (~n(C, i) || g(C, i)); return C; }; }, 1072: (e, t, i) => { var a = i(1828), r = i(8727); e.exports = Object.keys || function keys(e) { return a(e, r); }; }, 8773: (e, t) => { var i = {}.propertyIsEnumerable, a = Object.getOwnPropertyDescriptor, r = a && !i.call({ 1: 2 }, 1); t.f = r ? function propertyIsEnumerable(e) { var t = a(this, e); return !!t && t.enumerable; } : i; }, 2967: (e, t, i) => { var a = i(6706), r = i(34), s = i(7750), n = i(3506); e.exports = Object.setPrototypeOf || ('__proto__' in {} ? (function () { var e, t = !1, i = {}; try { (e = a(Object.prototype, '__proto__', 'set'))(i, []); t = i instanceof Array; } catch (e) {} return function setPrototypeOf(i, a) { s(i); n(a); if (!r(i)) return i; t ? e(i, a) : (i.__proto__ = a); return i; }; })() : void 0); }, 4270: (e, t, i) => { var a = i(9565), r = i(4901), s = i(34), n = TypeError; e.exports = function (e, t) { var i, o; if ('string' === t && r((i = e.toString)) && !s((o = a(i, e)))) return o; if (r((i = e.valueOf)) && !s((o = a(i, e)))) return o; if ('string' !== t && r((i = e.toString)) && !s((o = a(i, e)))) return o; throw new n("Can't convert object to primitive value"); }; }, 5031: (e, t, i) => { var a = i(7751), r = i(9504), s = i(8480), n = i(3717), o = i(8551), g = r([].concat); e.exports = a('Reflect', 'ownKeys') || function ownKeys(e) { var t = s.f(o(e)), i = n.f; return i ? g(t, i(e)) : t; }; }, 7979: (e, t, i) => { var a = i(8551); e.exports = function () { var e = a(this), t = ''; e.hasIndices && (t += 'd'); e.global && (t += 'g'); e.ignoreCase && (t += 'i'); e.multiline && (t += 'm'); e.dotAll && (t += 's'); e.unicode && (t += 'u'); e.unicodeSets && (t += 'v'); e.sticky && (t += 'y'); return t; }; }, 7750: (e, t, i) => { var a = i(4117), r = TypeError; e.exports = function (e) { if (a(e)) throw new r("Can't call method on " + e); return e; }; }, 9286: (e, t, i) => { var a = i(4402), r = i(8469), s = a.Set, n = a.add; e.exports = function (e) { var t = new s(); r(e, function (e) { n(t, e); }); return t; }; }, 3440: (e, t, i) => { var a = i(7080), r = i(4402), s = i(9286), n = i(5170), o = i(3789), g = i(8469), c = i(507), C = r.has, h = r.remove; e.exports = function difference(e) { var t = a(this), i = o(e), r = s(t); n(t) <= i.size ? g(t, function (e) { i.includes(e) && h(r, e); }) : c(i.getIterator(), function (e) { C(t, e) && h(r, e); }); return r; }; }, 4402: (e, t, i) => { var a = i(9504), r = Set.prototype; e.exports = { Set, add: a(r.add), has: a(r.has), remove: a(r.delete), proto: r, }; }, 8750: (e, t, i) => { var a = i(7080), r = i(4402), s = i(5170), n = i(3789), o = i(8469), g = i(507), c = r.Set, C = r.add, h = r.has; e.exports = function intersection(e) { var t = a(this), i = n(e), r = new c(); s(t) > i.size ? g(i.getIterator(), function (e) { h(t, e) && C(r, e); }) : o(t, function (e) { i.includes(e) && C(r, e); }); return r; }; }, 4449: (e, t, i) => { var a = i(7080), r = i(4402).has, s = i(5170), n = i(3789), o = i(8469), g = i(507), c = i(9539); e.exports = function isDisjointFrom(e) { var t = a(this), i = n(e); if (s(t) <= i.size) return ( !1 !== o( t, function (e) { if (i.includes(e)) return !1; }, !0, ) ); var C = i.getIterator(); return ( !1 !== g(C, function (e) { if (r(t, e)) return c(C, 'normal', !1); }) ); }; }, 3838: (e, t, i) => { var a = i(7080), r = i(5170), s = i(8469), n = i(3789); e.exports = function isSubsetOf(e) { var t = a(this), i = n(e); return ( !(r(t) > i.size) && !1 !== s( t, function (e) { if (!i.includes(e)) return !1; }, !0, ) ); }; }, 8527: (e, t, i) => { var a = i(7080), r = i(4402).has, s = i(5170), n = i(3789), o = i(507), g = i(9539); e.exports = function isSupersetOf(e) { var t = a(this), i = n(e); if (s(t) < i.size) return !1; var c = i.getIterator(); return ( !1 !== o(c, function (e) { if (!r(t, e)) return g(c, 'normal', !1); }) ); }; }, 8469: (e, t, i) => { var a = i(9504), r = i(507), s = i(4402), n = s.Set, o = s.proto, g = a(o.forEach), c = a(o.keys), C = c(new n()).next; e.exports = function (e, t, i) { return i ? r({ iterator: c(e), next: C }, t) : g(e, t); }; }, 4916: (e, t, i) => { var a = i(7751), createSetLike = function (e) { return { size: e, has: function () { return !1; }, keys: function () { return { next: function () { return { done: !0 }; }, }; }, }; }; e.exports = function (e) { var t = a('Set'); try { new t()[e](createSetLike(0)); try { new t()[e](createSetLike(-1)); return !1; } catch (e) { return !0; } } catch (e) { return !1; } }; }, 5170: (e, t, i) => { var a = i(6706), r = i(4402); e.exports = a(r.proto, 'size', 'get') || function (e) { return e.size; }; }, 3650: (e, t, i) => { var a = i(7080), r = i(4402), s = i(9286), n = i(3789), o = i(507), g = r.add, c = r.has, C = r.remove; e.exports = function symmetricDifference(e) { var t = a(this), i = n(e).getIterator(), r = s(t); o(i, function (e) { c(t, e) ? C(r, e) : g(r, e); }); return r; }; }, 4204: (e, t, i) => { var a = i(7080), r = i(4402).add, s = i(9286), n = i(3789), o = i(507); e.exports = function union(e) { var t = a(this), i = n(e).getIterator(), g = s(t); o(i, function (e) { r(g, e); }); return g; }; }, 6119: (e, t, i) => { var a = i(5745), r = i(3392), s = a('keys'); e.exports = function (e) { return s[e] || (s[e] = r(e)); }; }, 7629: (e, t, i) => { var a = i(6395), r = i(4475), s = i(9433), n = '__core-js_shared__', o = (e.exports = r[n] || s(n, {})); (o.versions || (o.versions = [])).push({ version: '3.37.1', mode: a ? 'pure' : 'global', copyright: '© 2014-2024 Denis Pushkarev (zloirock.ru)', license: 'https://github.com/zloirock/core-js/blob/v3.37.1/LICENSE', source: 'https://github.com/zloirock/core-js', }); }, 5745: (e, t, i) => { var a = i(7629); e.exports = function (e, t) { return a[e] || (a[e] = t || {}); }; }, 1548: (e, t, i) => { var a = i(4475), r = i(9039), s = i(7388), n = i(7290), o = i(516), g = i(9088), c = a.structuredClone; e.exports = !!c && !r(function () { if ((o && s > 92) || (g && s > 94) || (n && s > 97)) return !1; var e = new ArrayBuffer(8), t = c(e, { transfer: [e] }); return 0 !== e.byteLength || 8 !== t.byteLength; }); }, 4495: (e, t, i) => { var a = i(7388), r = i(9039), s = i(4475).String; e.exports = !!Object.getOwnPropertySymbols && !r(function () { var e = Symbol('symbol detection'); return ( !s(e) || !(Object(e) instanceof Symbol) || (!Symbol.sham && a && a < 41) ); }); }, 5610: (e, t, i) => { var a = i(1291), r = Math.max, s = Math.min; e.exports = function (e, t) { var i = a(e); return i < 0 ? r(i + t, 0) : s(i, t); }; }, 5854: (e, t, i) => { var a = i(2777), r = TypeError; e.exports = function (e) { var t = a(e, 'number'); if ('number' == typeof t) throw new r("Can't convert number to bigint"); return BigInt(t); }; }, 7696: (e, t, i) => { var a = i(1291), r = i(8014), s = RangeError; e.exports = function (e) { if (void 0 === e) return 0; var t = a(e), i = r(t); if (t !== i) throw new s('Wrong length or index'); return i; }; }, 5397: (e, t, i) => { var a = i(7055), r = i(7750); e.exports = function (e) { return a(r(e)); }; }, 1291: (e, t, i) => { var a = i(741); e.exports = function (e) { var t = +e; return t != t || 0 === t ? 0 : a(t); }; }, 8014: (e, t, i) => { var a = i(1291), r = Math.min; e.exports = function (e) { var t = a(e); return t > 0 ? r(t, 9007199254740991) : 0; }; }, 8981: (e, t, i) => { var a = i(7750), r = Object; e.exports = function (e) { return r(a(e)); }; }, 2777: (e, t, i) => { var a = i(9565), r = i(34), s = i(757), n = i(5966), o = i(4270), g = i(8227), c = TypeError, C = g('toPrimitive'); e.exports = function (e, t) { if (!r(e) || s(e)) return e; var i, g = n(e, C); if (g) { void 0 === t && (t = 'default'); i = a(g, e, t); if (!r(i) || s(i)) return i; throw new c("Can't convert object to primitive value"); } void 0 === t && (t = 'number'); return o(e, t); }; }, 6969: (e, t, i) => { var a = i(2777), r = i(757); e.exports = function (e) { var t = a(e, 'string'); return r(t) ? t : t + ''; }; }, 2140: (e, t, i) => { var a = {}; a[i(8227)('toStringTag')] = 'z'; e.exports = '[object z]' === String(a); }, 655: (e, t, i) => { var a = i(6955), r = String; e.exports = function (e) { if ('Symbol' === a(e)) throw new TypeError('Cannot convert a Symbol value to a string'); return r(e); }; }, 9714: (e, t, i) => { var a = i(9088); e.exports = function (e) { try { if (a) return Function('return require("' + e + '")')(); } catch (e) {} }; }, 6823: (e) => { var t = String; e.exports = function (e) { try { return t(e); } catch (e) { return 'Object'; } }; }, 3392: (e, t, i) => { var a = i(9504), r = 0, s = Math.random(), n = a((1).toString); e.exports = function (e) { return 'Symbol(' + (void 0 === e ? '' : e) + ')_' + n(++r + s, 36); }; }, 7040: (e, t, i) => { var a = i(4495); e.exports = a && !Symbol.sham && 'symbol' == typeof Symbol.iterator; }, 8686: (e, t, i) => { var a = i(3724), r = i(9039); e.exports = a && r(function () { return ( 42 !== Object.defineProperty(function () {}, 'prototype', { value: 42, writable: !1, }).prototype ); }); }, 2812: (e) => { var t = TypeError; e.exports = function (e, i) { if (e < i) throw new t('Not enough arguments'); return e; }; }, 8622: (e, t, i) => { var a = i(4475), r = i(4901), s = a.WeakMap; e.exports = r(s) && /native code/.test(String(s)); }, 8227: (e, t, i) => { var a = i(4475), r = i(5745), s = i(9297), n = i(3392), o = i(4495), g = i(7040), c = a.Symbol, C = r('wks'), h = g ? c.for || c : (c && c.withoutSetter) || n; e.exports = function (e) { s(C, e) || (C[e] = o && s(c, e) ? c[e] : h('Symbol.' + e)); return C[e]; }; }, 6573: (e, t, i) => { var a = i(3724), r = i(2106), s = i(3238), n = ArrayBuffer.prototype; a && !('detached' in n) && r(n, 'detached', { configurable: !0, get: function detached() { return s(this); }, }); }, 7936: (e, t, i) => { var a = i(6518), r = i(5636); r && a( { target: 'ArrayBuffer', proto: !0 }, { transferToFixedLength: function transferToFixedLength() { return r(this, arguments.length ? arguments[0] : void 0, !1); }, }, ); }, 8100: (e, t, i) => { var a = i(6518), r = i(5636); r && a( { target: 'ArrayBuffer', proto: !0 }, { transfer: function transfer() { return r(this, arguments.length ? arguments[0] : void 0, !0); }, }, ); }, 4114: (e, t, i) => { var a = i(6518), r = i(8981), s = i(6198), n = i(4527), o = i(6837); a( { target: 'Array', proto: !0, arity: 1, forced: i(9039)(function () { return 4294967297 !== [].push.call({ length: 4294967296 }, 1); }) || !(function () { try { Object.defineProperty([], 'length', { writable: !1 }).push(); } catch (e) { return e instanceof TypeError; } })(), }, { push: function push(e) { var t = r(this), i = s(t), a = arguments.length; o(i + a); for (var g = 0; g < a; g++) { t[i] = arguments[g]; i++; } n(t, i); return i; }, }, ); }, 4628: (e, t, i) => { var a = i(6518), r = i(6043); a( { target: 'Promise', stat: !0 }, { withResolvers: function withResolvers() { var e = r.f(this); return { promise: e.promise, resolve: e.resolve, reject: e.reject }; }, }, ); }, 9479: (e, t, i) => { var a = i(4475), r = i(3724), s = i(2106), n = i(7979), o = i(9039), g = a.RegExp, c = g.prototype; r && o(function () { var e = !0; try { g('.', 'd'); } catch (t) { e = !1; } var t = {}, i = '', a = e ? 'dgimsy' : 'gimsy', addGetter = function (e, a) { Object.defineProperty(t, e, { get: function () { i += a; return !0; }, }); }, r = { dotAll: 's', global: 'g', ignoreCase: 'i', multiline: 'm', sticky: 'y', }; e && (r.hasIndices = 'd'); for (var s in r) addGetter(s, r[s]); return ( Object.getOwnPropertyDescriptor(c, 'flags').get.call(t) !== a || i !== a ); }) && s(c, 'flags', { configurable: !0, get: n }); }, 7642: (e, t, i) => { var a = i(6518), r = i(3440); a( { target: 'Set', proto: !0, real: !0, forced: !i(4916)('difference') }, { difference: r }, ); }, 8004: (e, t, i) => { var a = i(6518), r = i(9039), s = i(8750); a( { target: 'Set', proto: !0, real: !0, forced: !i(4916)('intersection') || r(function () { return ( '3,2' !== String( Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2]))), ) ); }), }, { intersection: s }, ); }, 3853: (e, t, i) => { var a = i(6518), r = i(4449); a( { target: 'Set', proto: !0, real: !0, forced: !i(4916)('isDisjointFrom'), }, { isDisjointFrom: r }, ); }, 5876: (e, t, i) => { var a = i(6518), r = i(3838); a( { target: 'Set', proto: !0, real: !0, forced: !i(4916)('isSubsetOf') }, { isSubsetOf: r }, ); }, 2475: (e, t, i) => { var a = i(6518), r = i(8527); a( { target: 'Set', proto: !0, real: !0, forced: !i(4916)('isSupersetOf'), }, { isSupersetOf: r }, ); }, 5024: (e, t, i) => { var a = i(6518), r = i(3650); a( { target: 'Set', proto: !0, real: !0, forced: !i(4916)('symmetricDifference'), }, { symmetricDifference: r }, ); }, 1698: (e, t, i) => { var a = i(6518), r = i(4204); a( { target: 'Set', proto: !0, real: !0, forced: !i(4916)('union') }, { union: r }, ); }, 7467: (e, t, i) => { var a = i(7628), r = i(4644), s = r.aTypedArray, n = r.exportTypedArrayMethod, o = r.getTypedArrayConstructor; n('toReversed', function toReversed() { return a(s(this), o(this)); }); }, 4732: (e, t, i) => { var a = i(4644), r = i(9504), s = i(9306), n = i(5370), o = a.aTypedArray, g = a.getTypedArrayConstructor, c = a.exportTypedArrayMethod, C = r(a.TypedArrayPrototype.sort); c('toSorted', function toSorted(e) { void 0 !== e && s(e); var t = o(this), i = n(g(t), t); return C(i, e); }); }, 9577: (e, t, i) => { var a = i(9928), r = i(4644), s = i(1108), n = i(1291), o = i(5854), g = r.aTypedArray, c = r.getTypedArrayConstructor, C = r.exportTypedArrayMethod, h = !!(function () { try { new Int8Array(1).with(2, { valueOf: function () { throw 8; }, }); } catch (e) { return 8 === e; } })(); C( 'with', { with: function (e, t) { var i = g(this), r = n(e), C = s(i) ? o(t) : +t; return a(i, c(i), r, C); }, }.with, !h, ); }, 8992: (e, t, i) => { var a = i(6518), r = i(4475), s = i(679), n = i(8551), o = i(4901), g = i(2787), c = i(2106), C = i(4659), h = i(9039), l = i(9297), Q = i(8227), E = i(7657).IteratorPrototype, u = i(3724), d = i(6395), f = 'constructor', p = 'Iterator', m = Q('toStringTag'), y = TypeError, w = r[p], b = d || !o(w) || w.prototype !== E || !h(function () { w({}); }), D = function Iterator() { s(this, E); if (g(this) === E) throw new y('Abstract class Iterator not directly constructable'); }, defineIteratorPrototypeAccessor = function (e, t) { u ? c(E, e, { configurable: !0, get: function () { return t; }, set: function (t) { n(this); if (this === E) throw new y("You can't redefine this property"); l(this, e) ? (this[e] = t) : C(this, e, t); }, }) : (E[e] = t); }; l(E, m) || defineIteratorPrototypeAccessor(m, p); (!b && l(E, f) && E[f] !== Object) || defineIteratorPrototypeAccessor(f, D); D.prototype = E; a({ global: !0, constructor: !0, forced: b }, { Iterator: D }); }, 3215: (e, t, i) => { var a = i(6518), r = i(2652), s = i(9306), n = i(8551), o = i(1767); a( { target: 'Iterator', proto: !0, real: !0 }, { every: function every(e) { n(this); s(e); var t = o(this), i = 0; return !r( t, function (t, a) { if (!e(t, i++)) return a(); }, { IS_RECORD: !0, INTERRUPTED: !0 }, ).stopped; }, }, ); }, 4520: (e, t, i) => { var a = i(6518), r = i(9565), s = i(9306), n = i(8551), o = i(1767), g = i(9462), c = i(6319), C = i(6395), h = g(function () { for ( var e, t, i = this.iterator, a = this.predicate, s = this.next; ; ) { e = n(r(s, i)); if ((this.done = !!e.done)) return; t = e.value; if (c(i, a, [t, this.counter++], !0)) return t; } }); a( { target: 'Iterator', proto: !0, real: !0, forced: C }, { filter: function filter(e) { n(this); s(e); return new h(o(this), { predicate: e }); }, }, ); }, 2577: (e, t, i) => { var a = i(6518), r = i(2652), s = i(9306), n = i(8551), o = i(1767); a( { target: 'Iterator', proto: !0, real: !0 }, { find: function find(e) { n(this); s(e); var t = o(this), i = 0; return r( t, function (t, a) { if (e(t, i++)) return a(t); }, { IS_RECORD: !0, INTERRUPTED: !0 }, ).result; }, }, ); }, 3949: (e, t, i) => { var a = i(6518), r = i(2652), s = i(9306), n = i(8551), o = i(1767); a( { target: 'Iterator', proto: !0, real: !0 }, { forEach: function forEach(e) { n(this); s(e); var t = o(this), i = 0; r( t, function (t) { e(t, i++); }, { IS_RECORD: !0 }, ); }, }, ); }, 1454: (e, t, i) => { var a = i(6518), r = i(713); a( { target: 'Iterator', proto: !0, real: !0, forced: i(6395) }, { map: r }, ); }, 8872: (e, t, i) => { var a = i(6518), r = i(2652), s = i(9306), n = i(8551), o = i(1767), g = TypeError; a( { target: 'Iterator', proto: !0, real: !0 }, { reduce: function reduce(e) { n(this); s(e); var t = o(this), i = arguments.length < 2, a = i ? void 0 : arguments[1], c = 0; r( t, function (t) { if (i) { i = !1; a = t; } else a = e(a, t, c); c++; }, { IS_RECORD: !0 }, ); if (i) throw new g('Reduce of empty iterator with no initial value'); return a; }, }, ); }, 7550: (e, t, i) => { var a = i(6518), r = i(2652), s = i(9306), n = i(8551), o = i(1767); a( { target: 'Iterator', proto: !0, real: !0 }, { some: function some(e) { n(this); s(e); var t = o(this), i = 0; return r( t, function (t, a) { if (e(t, i++)) return a(); }, { IS_RECORD: !0, INTERRUPTED: !0 }, ).stopped; }, }, ); }, 1795: (e, t, i) => { var a = i(6518), r = i(8551), s = i(2652), n = i(1767), o = [].push; a( { target: 'Iterator', proto: !0, real: !0 }, { toArray: function toArray() { var e = []; s(n(r(this)), o, { that: e, IS_RECORD: !0 }); return e; }, }, ); }, 3375: (e, t, i) => { i(7642); }, 9225: (e, t, i) => { i(8004); }, 3972: (e, t, i) => { i(3853); }, 9209: (e, t, i) => { i(5876); }, 5714: (e, t, i) => { i(2475); }, 7561: (e, t, i) => { i(5024); }, 6197: (e, t, i) => { i(1698); }, 4979: (e, t, i) => { var a = i(6518), r = i(4475), s = i(7751), n = i(6980), o = i(4913).f, g = i(9297), c = i(679), C = i(3167), h = i(2603), l = i(5002), Q = i(6193), E = i(3724), u = i(6395), d = 'DOMException', f = s('Error'), p = s(d), m = function DOMException() { c(this, y); var e = arguments.length, t = h(e < 1 ? void 0 : arguments[0]), i = h(e < 2 ? void 0 : arguments[1], 'Error'), a = new p(t, i), r = new f(t); r.name = d; o(a, 'stack', n(1, Q(r.stack, 1))); C(a, this, m); return a; }, y = (m.prototype = p.prototype), w = 'stack' in new f(d), b = 'stack' in new p(1, 2), D = p && E && Object.getOwnPropertyDescriptor(r, d), S = !(!D || (D.writable && D.configurable)), k = w && !S && !b; a( { global: !0, constructor: !0, forced: u || k }, { DOMException: k ? m : p }, ); var R = s(d), N = R.prototype; if (N.constructor !== R) { u || o(N, 'constructor', n(1, R)); for (var G in l) if (g(l, G)) { var x = l[G], U = x.s; g(R, U) || o(R, U, n(6, x.c)); } } }, 3611: (e, t, i) => { var a = i(6518), r = i(4475), s = i(2106), n = i(3724), o = TypeError, g = Object.defineProperty, c = r.self !== r; try { if (n) { var C = Object.getOwnPropertyDescriptor(r, 'self'); (!c && C && C.get && C.enumerable) || s(r, 'self', { get: function self() { return r; }, set: function self(e) { if (this !== r) throw new o('Illegal invocation'); g(r, 'self', { value: e, writable: !0, configurable: !0, enumerable: !0, }); }, configurable: !0, enumerable: !0, }); } else a({ global: !0, simple: !0, forced: c }, { self: r }); } catch (e) {} }, 4603: (e, t, i) => { var a = i(6840), r = i(9504), s = i(655), n = i(2812), o = URLSearchParams, g = o.prototype, c = r(g.append), C = r(g.delete), h = r(g.forEach), l = r([].push), Q = new o('a=1&a=2&b=3'); Q.delete('a', 1); Q.delete('b', void 0); Q + '' != 'a=2' && a( g, 'delete', function (e) { var t = arguments.length, i = t < 2 ? void 0 : arguments[1]; if (t && void 0 === i) return C(this, e); var a = []; h(this, function (e, t) { l(a, { key: t, value: e }); }); n(t, 1); for ( var r, o = s(e), g = s(i), Q = 0, E = 0, u = !1, d = a.length; Q < d; ) { r = a[Q++]; if (u || r.key === o) { u = !0; C(this, r.key); } else E++; } for (; E < d; ) ((r = a[E++]).key === o && r.value === g) || c(this, r.key, r.value); }, { enumerable: !0, unsafe: !0 }, ); }, 7566: (e, t, i) => { var a = i(6840), r = i(9504), s = i(655), n = i(2812), o = URLSearchParams, g = o.prototype, c = r(g.getAll), C = r(g.has), h = new o('a=1'); (!h.has('a', 2) && h.has('a', void 0)) || a( g, 'has', function has(e) { var t = arguments.length, i = t < 2 ? void 0 : arguments[1]; if (t && void 0 === i) return C(this, e); var a = c(this, e); n(t, 1); for (var r = s(i), o = 0; o < a.length; ) if (a[o++] === r) return !0; return !1; }, { enumerable: !0, unsafe: !0 }, ); }, 8721: (e, t, i) => { var a = i(3724), r = i(9504), s = i(2106), n = URLSearchParams.prototype, o = r(n.forEach); a && !('size' in n) && s(n, 'size', { get: function size() { var e = 0; o(this, function () { e++; }); return e; }, configurable: !0, enumerable: !0, }); }, }, t = {}; function __webpack_require__(i) { var a = t[i]; if (void 0 !== a) return a.exports; var r = (t[i] = { exports: {} }); e[i].call(r.exports, r, r.exports, __webpack_require__); return r.exports; } __webpack_require__.d = (e, t) => { for (var i in t) __webpack_require__.o(t, i) && !__webpack_require__.o(e, i) && Object.defineProperty(e, i, { enumerable: !0, get: t[i] }); }; __webpack_require__.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t); var __webpack_exports__ = (globalThis.pdfjsWorker = {}); __webpack_require__.d(__webpack_exports__, { WorkerMessageHandler: () => WorkerMessageHandler, }); __webpack_require__(4114), __webpack_require__(6573), __webpack_require__(8100), __webpack_require__(7936), __webpack_require__(4628), __webpack_require__(7467), __webpack_require__(4732), __webpack_require__(9577), __webpack_require__(8992), __webpack_require__(3949), __webpack_require__(1454), __webpack_require__(7550), __webpack_require__(3375), __webpack_require__(9225), __webpack_require__(3972), __webpack_require__(9209), __webpack_require__(5714), __webpack_require__(7561), __webpack_require__(6197), __webpack_require__(3611), __webpack_require__(4603), __webpack_require__(7566), __webpack_require__(8721); const i = !( 'object' != typeof process || process + '' != '[object process]' || process.versions.nw || (process.versions.electron && process.type && 'browser' !== process.type) ), a = [1, 0, 0, 1, 0, 0], r = [0.001, 0, 0, 0.001, 0, 0], s = 1.35, n = 0.35, o = 0.25925925925925924, g = 1, c = 2, C = 4, h = 8, l = 16, Q = 64, E = 256, u = 'pdfjs_internal_editor_', d = 3, f = 9, p = 13, m = 15, y = { PRINT: 4, MODIFY_CONTENTS: 8, COPY: 16, MODIFY_ANNOTATIONS: 32, FILL_INTERACTIVE_FORMS: 256, COPY_FOR_ACCESSIBILITY: 512, ASSEMBLE: 1024, PRINT_HIGH_QUALITY: 2048, }, w = 0, b = 4, D = 1, S = 2, k = 3, R = 1, N = 2, G = 3, x = 4, U = 5, M = 6, L = 7, H = 8, J = 9, Y = 10, v = 11, T = 12, K = 13, q = 14, O = 15, W = 16, j = 17, X = 20, Z = 'Group', V = 'R', _ = 1, z = 2, $ = 4, AA = 16, eA = 32, tA = 128, iA = 512, aA = 1, rA = 2, sA = 4096, nA = 8192, oA = 32768, gA = 65536, IA = 131072, cA = 1048576, CA = 2097152, hA = 8388608, lA = 16777216, BA = 1, QA = 2, EA = 3, uA = 4, dA = 5, fA = { E: 'Mouse Enter', X: 'Mouse Exit', D: 'Mouse Down', U: 'Mouse Up', Fo: 'Focus', Bl: 'Blur', PO: 'PageOpen', PC: 'PageClose', PV: 'PageVisible', PI: 'PageInvisible', K: 'Keystroke', F: 'Format', V: 'Validate', C: 'Calculate', }, pA = { WC: 'WillClose', WS: 'WillSave', DS: 'DidSave', WP: 'WillPrint', DP: 'DidPrint', }, mA = { O: 'PageOpen', C: 'PageClose' }, yA = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }, wA = { NONE: 0, BINARY: 1 }, bA = 1, DA = 2, FA = 3, SA = 4, kA = 5, RA = 6, NA = 7, GA = 8, xA = 9, UA = 10, MA = 11, LA = 12, HA = 13, JA = 14, YA = 15, vA = 16, TA = 17, KA = 18, qA = 19, OA = 20, PA = 21, WA = 22, jA = 23, XA = 24, ZA = 25, VA = 26, _A = 27, zA = 28, $A = 29, Ae = 30, ee = 31, te = 32, ie = 33, ae = 34, re = 35, se = 36, ne = 37, oe = 38, ge = 39, Ie = 40, ce = 41, Ce = 42, he = 43, le = 44, Be = 45, Qe = 46, Ee = 47, ue = 48, de = 49, fe = 50, pe = 51, me = 52, ye = 53, we = 54, be = 55, De = 56, Fe = 57, Se = 58, ke = 59, Re = 60, Ne = 61, Ge = 62, xe = 63, Ue = 64, Me = 65, Le = 66, He = 67, Je = 68, Ye = 69, ve = 70, Te = 71, Ke = 72, qe = 73, Oe = 74, Pe = 75, We = 76, je = 77, Xe = 80, Ze = 81, Ve = 83, _e = 84, ze = 85, $e = 86, At = 87, et = 88, tt = 89, it = 90, at = 91, rt = 1, st = 2; let nt = yA.WARNINGS; function getVerbosityLevel() { return nt; } function info(e) { nt >= yA.INFOS && console.log(`Info: ${e}`); } function warn(e) { nt >= yA.WARNINGS && console.log(`Warning: ${e}`); } function unreachable(e) { throw new Error(e); } function assert(e, t) { e || unreachable(t); } function createValidAbsoluteUrl(e, t = null, i = null) { if (!e) return null; try { if (i && 'string' == typeof e) { if (i.addDefaultProtocol && e.startsWith('www.')) { const t = e.match(/\./g); t?.length >= 2 && (e = `http://${e}`); } if (i.tryConvertEncoding) try { e = stringToUTF8String(e); } catch {} } const a = t ? new URL(e, t) : new URL(e); if ( (function _isValidProtocol(e) { switch (e?.protocol) { case 'http:': case 'https:': case 'ftp:': case 'mailto:': case 'tel:': return !0; default: return !1; } })(a) ) return a; } catch {} return null; } function shadow(e, t, i, a = !1) { Object.defineProperty(e, t, { value: i, enumerable: !a, configurable: !0, writable: !1, }); return i; } const ot = (function BaseExceptionClosure() { function BaseException(e, t) { this.constructor === BaseException && unreachable('Cannot initialize BaseException.'); this.message = e; this.name = t; } BaseException.prototype = new Error(); BaseException.constructor = BaseException; return BaseException; })(); class PasswordException extends ot { constructor(e, t) { super(e, 'PasswordException'); this.code = t; } } class UnknownErrorException extends ot { constructor(e, t) { super(e, 'UnknownErrorException'); this.details = t; } } class InvalidPDFException extends ot { constructor(e) { super(e, 'InvalidPDFException'); } } class MissingPDFException extends ot { constructor(e) { super(e, 'MissingPDFException'); } } class UnexpectedResponseException extends ot { constructor(e, t) { super(e, 'UnexpectedResponseException'); this.status = t; } } class FormatError extends ot { constructor(e) { super(e, 'FormatError'); } } class AbortException extends ot { constructor(e) { super(e, 'AbortException'); } } function bytesToString(e) { ('object' == typeof e && void 0 !== e?.length) || unreachable('Invalid argument for bytesToString'); const t = e.length, i = 8192; if (t < i) return String.fromCharCode.apply(null, e); const a = []; for (let r = 0; r < t; r += i) { const s = Math.min(r + i, t), n = e.subarray(r, s); a.push(String.fromCharCode.apply(null, n)); } return a.join(''); } function stringToBytes(e) { 'string' != typeof e && unreachable('Invalid argument for stringToBytes'); const t = e.length, i = new Uint8Array(t); for (let a = 0; a < t; ++a) i[a] = 255 & e.charCodeAt(a); return i; } function string32(e) { return String.fromCharCode( (e >> 24) & 255, (e >> 16) & 255, (e >> 8) & 255, 255 & e, ); } function objectSize(e) { return Object.keys(e).length; } class FeatureTest { static get isLittleEndian() { return shadow( this, 'isLittleEndian', (function isLittleEndian() { const e = new Uint8Array(4); e[0] = 1; return 1 === new Uint32Array(e.buffer, 0, 1)[0]; })(), ); } static get isEvalSupported() { return shadow( this, 'isEvalSupported', (function isEvalSupported() { try { new Function(''); return !0; } catch { return !1; } })(), ); } static get isOffscreenCanvasSupported() { return shadow( this, 'isOffscreenCanvasSupported', 'undefined' != typeof OffscreenCanvas, ); } static get platform() { return 'undefined' != typeof navigator && 'string' == typeof navigator?.platform ? shadow(this, 'platform', { isMac: navigator.platform.includes('Mac') }) : shadow(this, 'platform', { isMac: !1 }); } static get isCSSRoundSupported() { return shadow( this, 'isCSSRoundSupported', globalThis.CSS?.supports?.('width: round(1.5px, 1px)'), ); } } const gt = Array.from(Array(256).keys(), (e) => e.toString(16).padStart(2, '0'), ); class Util { static makeHexColor(e, t, i) { return `#${gt[e]}${gt[t]}${gt[i]}`; } static scaleMinMax(e, t) { let i; if (e[0]) { if (e[0] < 0) { i = t[0]; t[0] = t[2]; t[2] = i; } t[0] *= e[0]; t[2] *= e[0]; if (e[3] < 0) { i = t[1]; t[1] = t[3]; t[3] = i; } t[1] *= e[3]; t[3] *= e[3]; } else { i = t[0]; t[0] = t[1]; t[1] = i; i = t[2]; t[2] = t[3]; t[3] = i; if (e[1] < 0) { i = t[1]; t[1] = t[3]; t[3] = i; } t[1] *= e[1]; t[3] *= e[1]; if (e[2] < 0) { i = t[0]; t[0] = t[2]; t[2] = i; } t[0] *= e[2]; t[2] *= e[2]; } t[0] += e[4]; t[1] += e[5]; t[2] += e[4]; t[3] += e[5]; } static transform(e, t) { return [ e[0] * t[0] + e[2] * t[1], e[1] * t[0] + e[3] * t[1], e[0] * t[2] + e[2] * t[3], e[1] * t[2] + e[3] * t[3], e[0] * t[4] + e[2] * t[5] + e[4], e[1] * t[4] + e[3] * t[5] + e[5], ]; } static applyTransform(e, t) { return [e[0] * t[0] + e[1] * t[2] + t[4], e[0] * t[1] + e[1] * t[3] + t[5]]; } static applyInverseTransform(e, t) { const i = t[0] * t[3] - t[1] * t[2]; return [ (e[0] * t[3] - e[1] * t[2] + t[2] * t[5] - t[4] * t[3]) / i, (-e[0] * t[1] + e[1] * t[0] + t[4] * t[1] - t[5] * t[0]) / i, ]; } static getAxialAlignedBoundingBox(e, t) { const i = this.applyTransform(e, t), a = this.applyTransform(e.slice(2, 4), t), r = this.applyTransform([e[0], e[3]], t), s = this.applyTransform([e[2], e[1]], t); return [ Math.min(i[0], a[0], r[0], s[0]), Math.min(i[1], a[1], r[1], s[1]), Math.max(i[0], a[0], r[0], s[0]), Math.max(i[1], a[1], r[1], s[1]), ]; } static inverseTransform(e) { const t = e[0] * e[3] - e[1] * e[2]; return [ e[3] / t, -e[1] / t, -e[2] / t, e[0] / t, (e[2] * e[5] - e[4] * e[3]) / t, (e[4] * e[1] - e[5] * e[0]) / t, ]; } static singularValueDecompose2dScale(e) { const t = [e[0], e[2], e[1], e[3]], i = e[0] * t[0] + e[1] * t[2], a = e[0] * t[1] + e[1] * t[3], r = e[2] * t[0] + e[3] * t[2], s = e[2] * t[1] + e[3] * t[3], n = (i + s) / 2, o = Math.sqrt((i + s) ** 2 - 4 * (i * s - r * a)) / 2, g = n + o || 1, c = n - o || 1; return [Math.sqrt(g), Math.sqrt(c)]; } static normalizeRect(e) { const t = e.slice(0); if (e[0] > e[2]) { t[0] = e[2]; t[2] = e[0]; } if (e[1] > e[3]) { t[1] = e[3]; t[3] = e[1]; } return t; } static intersect(e, t) { const i = Math.max(Math.min(e[0], e[2]), Math.min(t[0], t[2])), a = Math.min(Math.max(e[0], e[2]), Math.max(t[0], t[2])); if (i > a) return null; const r = Math.max(Math.min(e[1], e[3]), Math.min(t[1], t[3])), s = Math.min(Math.max(e[1], e[3]), Math.max(t[1], t[3])); return r > s ? null : [i, r, a, s]; } static #A(e, t, i, a, r, s, n, o, g, c) { if (g <= 0 || g >= 1) return; const C = 1 - g, h = g * g, l = h * g, Q = C * (C * (C * e + 3 * g * t) + 3 * h * i) + l * a, E = C * (C * (C * r + 3 * g * s) + 3 * h * n) + l * o; c[0] = Math.min(c[0], Q); c[1] = Math.min(c[1], E); c[2] = Math.max(c[2], Q); c[3] = Math.max(c[3], E); } static #e(e, t, i, a, r, s, n, o, g, c, C, h) { if (Math.abs(g) < 1e-12) { Math.abs(c) >= 1e-12 && this.#A(e, t, i, a, r, s, n, o, -C / c, h); return; } const l = c ** 2 - 4 * C * g; if (l < 0) return; const Q = Math.sqrt(l), E = 2 * g; this.#A(e, t, i, a, r, s, n, o, (-c + Q) / E, h); this.#A(e, t, i, a, r, s, n, o, (-c - Q) / E, h); } static bezierBoundingBox(e, t, i, a, r, s, n, o, g) { if (g) { g[0] = Math.min(g[0], e, n); g[1] = Math.min(g[1], t, o); g[2] = Math.max(g[2], e, n); g[3] = Math.max(g[3], t, o); } else g = [Math.min(e, n), Math.min(t, o), Math.max(e, n), Math.max(t, o)]; this.#e( e, i, r, n, t, a, s, o, 3 * (3 * (i - r) - e + n), 6 * (e - 2 * i + r), 3 * (i - e), g, ); this.#e( e, i, r, n, t, a, s, o, 3 * (3 * (a - s) - t + o), 6 * (t - 2 * a + s), 3 * (a - t), g, ); return g; } } const It = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 711, 710, 729, 733, 731, 730, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8226, 8224, 8225, 8230, 8212, 8211, 402, 8260, 8249, 8250, 8722, 8240, 8222, 8220, 8221, 8216, 8217, 8218, 8482, 64257, 64258, 321, 338, 352, 376, 381, 305, 322, 339, 353, 382, 0, 8364, ]; function stringToPDFString(e) { if (e[0] >= 'ï') { let t; if ('þ' === e[0] && 'ÿ' === e[1]) { t = 'utf-16be'; e.length % 2 == 1 && (e = e.slice(0, -1)); } else if ('ÿ' === e[0] && 'þ' === e[1]) { t = 'utf-16le'; e.length % 2 == 1 && (e = e.slice(0, -1)); } else 'ï' === e[0] && '»' === e[1] && '¿' === e[2] && (t = 'utf-8'); if (t) try { const i = new TextDecoder(t, { fatal: !0 }), a = stringToBytes(e), r = i.decode(a); return r.includes('') ? r.replaceAll(/\x1b[^\x1b]*(?:\x1b|$)/g, '') : r; } catch (e) { warn(`stringToPDFString: "${e}".`); } } const t = []; for (let i = 0, a = e.length; i < a; i++) { const r = e.charCodeAt(i); if (27 === r) { for (; ++i < a && 27 !== e.charCodeAt(i); ); continue; } const s = It[r]; t.push(s ? String.fromCharCode(s) : e.charAt(i)); } return t.join(''); } function stringToUTF8String(e) { return decodeURIComponent(escape(e)); } function utf8StringToString(e) { return unescape(encodeURIComponent(e)); } function isArrayEqual(e, t) { if (e.length !== t.length) return !1; for (let i = 0, a = e.length; i < a; i++) if (e[i] !== t[i]) return !1; return !0; } function getModificationDate(e = new Date()) { return [ e.getUTCFullYear().toString(), (e.getUTCMonth() + 1).toString().padStart(2, '0'), e.getUTCDate().toString().padStart(2, '0'), e.getUTCHours().toString().padStart(2, '0'), e.getUTCMinutes().toString().padStart(2, '0'), e.getUTCSeconds().toString().padStart(2, '0'), ].join(''); } let ct = null, Ct = null; const ht = 0, lt = 1, Bt = 2, Qt = 3, Et = 4, ut = 5, dt = 6, ft = 7, pt = 8; __webpack_require__(3215); const mt = Symbol('CIRCULAR_REF'), yt = Symbol('EOF'); let wt = Object.create(null), bt = Object.create(null), Dt = Object.create(null); class Name { constructor(e) { this.name = e; } static get(e) { return (bt[e] ||= new Name(e)); } } class Cmd { constructor(e) { this.cmd = e; } static get(e) { return (wt[e] ||= new Cmd(e)); } } const Ft = function nonSerializableClosure() { return Ft; }; class Dict { constructor(e = null) { this._map = Object.create(null); this.xref = e; this.objId = null; this.suppressEncryption = !1; this.__nonSerializable__ = Ft; } assignXref(e) { this.xref = e; } get size() { return Object.keys(this._map).length; } get(e, t, i) { let a = this._map[e]; if (void 0 === a && void 0 !== t) { a = this._map[t]; void 0 === a && void 0 !== i && (a = this._map[i]); } return a instanceof Ref && this.xref ? this.xref.fetch(a, this.suppressEncryption) : a; } async getAsync(e, t, i) { let a = this._map[e]; if (void 0 === a && void 0 !== t) { a = this._map[t]; void 0 === a && void 0 !== i && (a = this._map[i]); } return a instanceof Ref && this.xref ? this.xref.fetchAsync(a, this.suppressEncryption) : a; } getArray(e, t, i) { let a = this._map[e]; if (void 0 === a && void 0 !== t) { a = this._map[t]; void 0 === a && void 0 !== i && (a = this._map[i]); } a instanceof Ref && this.xref && (a = this.xref.fetch(a, this.suppressEncryption)); if (Array.isArray(a)) { a = a.slice(); for (let e = 0, t = a.length; e < t; e++) a[e] instanceof Ref && this.xref && (a[e] = this.xref.fetch(a[e], this.suppressEncryption)); } return a; } getRaw(e) { return this._map[e]; } getKeys() { return Object.keys(this._map); } getRawValues() { return Object.values(this._map); } set(e, t) { this._map[e] = t; } has(e) { return void 0 !== this._map[e]; } forEach(e) { for (const t in this._map) e(t, this.get(t)); } static get empty() { const e = new Dict(null); e.set = (e, t) => { unreachable('Should not call `set` on the empty dictionary.'); }; return shadow(this, 'empty', e); } static merge({ xref: e, dictArray: t, mergeSubDicts: i = !1 }) { const a = new Dict(e), r = new Map(); for (const e of t) if (e instanceof Dict) for (const [t, a] of Object.entries(e._map)) { let e = r.get(t); if (void 0 === e) { e = []; r.set(t, e); } else if (!(i && a instanceof Dict)) continue; e.push(a); } for (const [t, i] of r) { if (1 === i.length || !(i[0] instanceof Dict)) { a._map[t] = i[0]; continue; } const r = new Dict(e); for (const e of i) for (const [t, i] of Object.entries(e._map)) void 0 === r._map[t] && (r._map[t] = i); r.size > 0 && (a._map[t] = r); } r.clear(); return a.size > 0 ? a : Dict.empty; } clone() { const e = new Dict(this.xref); for (const t of this.getKeys()) e.set(t, this.getRaw(t)); return e; } } class Ref { constructor(e, t) { this.num = e; this.gen = t; } toString() { return 0 === this.gen ? `${this.num}R` : `${this.num}R${this.gen}`; } static fromString(e) { const t = Dt[e]; if (t) return t; const i = /^(\d+)R(\d*)$/.exec(e); return i && '0' !== i[1] ? (Dt[e] = new Ref(parseInt(i[1]), i[2] ? parseInt(i[2]) : 0)) : null; } static get(e, t) { const i = 0 === t ? `${e}R` : `${e}R${t}`; return (Dt[i] ||= new Ref(e, t)); } } class RefSet { constructor(e = null) { this._set = new Set(e?._set); } has(e) { return this._set.has(e.toString()); } put(e) { this._set.add(e.toString()); } remove(e) { this._set.delete(e.toString()); } [Symbol.iterator]() { return this._set.values(); } clear() { this._set.clear(); } } class RefSetCache { constructor() { this._map = new Map(); } get size() { return this._map.size; } get(e) { return this._map.get(e.toString()); } has(e) { return this._map.has(e.toString()); } put(e, t) { this._map.set(e.toString(), t); } putAlias(e, t) { this._map.set(e.toString(), this.get(t)); } [Symbol.iterator]() { return this._map.values(); } clear() { this._map.clear(); } *items() { for (const [e, t] of this._map) yield [Ref.fromString(e), t]; } } function isName(e, t) { return e instanceof Name && (void 0 === t || e.name === t); } function isCmd(e, t) { return e instanceof Cmd && (void 0 === t || e.cmd === t); } function isDict(e, t) { return e instanceof Dict && (void 0 === t || isName(e.get('Type'), t)); } function isRefsEqual(e, t) { return e.num === t.num && e.gen === t.gen; } class BaseStream { constructor() { this.constructor === BaseStream && unreachable('Cannot initialize BaseStream.'); } get length() { unreachable('Abstract getter `length` accessed'); } get isEmpty() { unreachable('Abstract getter `isEmpty` accessed'); } get isDataLoaded() { return shadow(this, 'isDataLoaded', !0); } getByte() { unreachable('Abstract method `getByte` called'); } getBytes(e) { unreachable('Abstract method `getBytes` called'); } async getImageData(e, t) { return this.getBytes(e, t); } async asyncGetBytes() { unreachable('Abstract method `asyncGetBytes` called'); } get isAsync() { return !1; } get canAsyncDecodeImageFromBuffer() { return !1; } peekByte() { const e = this.getByte(); -1 !== e && this.pos--; return e; } peekBytes(e) { const t = this.getBytes(e); this.pos -= t.length; return t; } getUint16() { const e = this.getByte(), t = this.getByte(); return -1 === e || -1 === t ? -1 : (e << 8) + t; } getInt32() { return ( (this.getByte() << 24) + (this.getByte() << 16) + (this.getByte() << 8) + this.getByte() ); } getByteRange(e, t) { unreachable('Abstract method `getByteRange` called'); } getString(e) { return bytesToString(this.getBytes(e)); } skip(e) { this.pos += e || 1; } reset() { unreachable('Abstract method `reset` called'); } moveStart() { unreachable('Abstract method `moveStart` called'); } makeSubStream(e, t, i = null) { unreachable('Abstract method `makeSubStream` called'); } getBaseStreams() { return null; } } const St = /^[1-9]\.\d$/; function getLookupTableFactory(e) { let t; return function () { if (e) { t = Object.create(null); e(t); e = null; } return t; }; } class MissingDataException extends ot { constructor(e, t) { super(`Missing data [${e}, ${t})`, 'MissingDataException'); this.begin = e; this.end = t; } } class ParserEOFException extends ot { constructor(e) { super(e, 'ParserEOFException'); } } class XRefEntryException extends ot { constructor(e) { super(e, 'XRefEntryException'); } } class XRefParseException extends ot { constructor(e) { super(e, 'XRefParseException'); } } function arrayBuffersToBytes(e) { const t = e.length; if (0 === t) return new Uint8Array(0); if (1 === t) return new Uint8Array(e[0]); let i = 0; for (let a = 0; a < t; a++) i += e[a].byteLength; const a = new Uint8Array(i); let r = 0; for (let i = 0; i < t; i++) { const t = new Uint8Array(e[i]); a.set(t, r); r += t.byteLength; } return a; } function getInheritableProperty({ dict: e, key: t, getArray: i = !1, stopWhenFound: a = !0, }) { let r; const s = new RefSet(); for (; e instanceof Dict && (!e.objId || !s.has(e.objId)); ) { e.objId && s.put(e.objId); const n = i ? e.getArray(t) : e.get(t); if (void 0 !== n) { if (a) return n; (r ||= []).push(n); } e = e.get('Parent'); } return r; } const kt = [ '', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', ]; function toRomanNumerals(e, t = !1) { assert( Number.isInteger(e) && e > 0, 'The number should be a positive integer.', ); const i = []; let a; for (; e >= 1e3; ) { e -= 1e3; i.push('M'); } a = (e / 100) | 0; e %= 100; i.push(kt[a]); a = (e / 10) | 0; e %= 10; i.push(kt[10 + a]); i.push(kt[20 + e]); const r = i.join(''); return t ? r.toLowerCase() : r; } function log2(e) { return e <= 0 ? 0 : Math.ceil(Math.log2(e)); } function readInt8(e, t) { return (e[t] << 24) >> 24; } function readUint16(e, t) { return (e[t] << 8) | e[t + 1]; } function readUint32(e, t) { return ((e[t] << 24) | (e[t + 1] << 16) | (e[t + 2] << 8) | e[t + 3]) >>> 0; } function isWhiteSpace(e) { return 32 === e || 9 === e || 13 === e || 10 === e; } function isNumberArray(e, t) { return ( Array.isArray(e) && (null === t || e.length === t) && e.every((e) => 'number' == typeof e) ); } function lookupMatrix(e, t) { return isNumberArray(e, 6) ? e : t; } function lookupRect(e, t) { return isNumberArray(e, 4) ? e : t; } function lookupNormalRect(e, t) { return isNumberArray(e, 4) ? Util.normalizeRect(e) : t; } function parseXFAPath(e) { const t = /(.+)\[(\d+)\]$/; return e.split('.').map((e) => { const i = e.match(t); return i ? { name: i[1], pos: parseInt(i[2], 10) } : { name: e, pos: 0 }; }); } function escapePDFName(e) { const t = []; let i = 0; for (let a = 0, r = e.length; a < r; a++) { const r = e.charCodeAt(a); if ( r < 33 || r > 126 || 35 === r || 40 === r || 41 === r || 60 === r || 62 === r || 91 === r || 93 === r || 123 === r || 125 === r || 47 === r || 37 === r ) { i < a && t.push(e.substring(i, a)); t.push(`#${r.toString(16)}`); i = a + 1; } } if (0 === t.length) return e; i < e.length && t.push(e.substring(i, e.length)); return t.join(''); } function escapeString(e) { return e.replaceAll(/([()\\\n\r])/g, (e) => '\n' === e ? '\\n' : '\r' === e ? '\\r' : `\\${e}`, ); } function _collectJS(e, t, i, a) { if (!e) return; let r = null; if (e instanceof Ref) { if (a.has(e)) return; r = e; a.put(r); e = t.fetch(e); } if (Array.isArray(e)) for (const r of e) _collectJS(r, t, i, a); else if (e instanceof Dict) { if (isName(e.get('S'), 'JavaScript')) { const t = e.get('JS'); let a; t instanceof BaseStream ? (a = t.getString()) : 'string' == typeof t && (a = t); a &&= stringToPDFString(a).replaceAll('\0', ''); a && i.push(a); } _collectJS(e.getRaw('Next'), t, i, a); } r && a.remove(r); } function collectActions(e, t, i) { const a = Object.create(null), r = getInheritableProperty({ dict: t, key: 'AA', stopWhenFound: !1 }); if (r) for (let t = r.length - 1; t >= 0; t--) { const s = r[t]; if (s instanceof Dict) for (const t of s.getKeys()) { const r = i[t]; if (!r) continue; const n = []; _collectJS(s.getRaw(t), e, n, new RefSet()); n.length > 0 && (a[r] = n); } } if (t.has('A')) { const i = []; _collectJS(t.get('A'), e, i, new RefSet()); i.length > 0 && (a.Action = i); } return objectSize(a) > 0 ? a : null; } const Rt = { 60: '<', 62: '>', 38: '&', 34: '"', 39: ''' }; function* codePointIter(e) { for (let t = 0, i = e.length; t < i; t++) { const i = e.codePointAt(t); i > 55295 && (i < 57344 || i > 65533) && t++; yield i; } } function encodeToXmlString(e) { const t = []; let i = 0; for (let a = 0, r = e.length; a < r; a++) { const r = e.codePointAt(a); if (32 <= r && r <= 126) { const s = Rt[r]; if (s) { i < a && t.push(e.substring(i, a)); t.push(s); i = a + 1; } } else { i < a && t.push(e.substring(i, a)); t.push(`&#x${r.toString(16).toUpperCase()};`); r > 55295 && (r < 57344 || r > 65533) && a++; i = a + 1; } } if (0 === t.length) return e; i < e.length && t.push(e.substring(i, e.length)); return t.join(''); } function validateFontName(e, t = !1) { const i = /^("|').*("|')$/.exec(e); if (i && i[1] === i[2]) { if (new RegExp(`[^\\\\]${i[1]}`).test(e.slice(1, -1))) { t && warn(`FontFamily contains unescaped ${i[1]}: ${e}.`); return !1; } } else for (const i of e.split(/[ \t]+/)) if (/^(\d|(-(\d|-)))/.test(i) || !/^[\w-\\]+$/.test(i)) { t && warn(`FontFamily contains invalid : ${e}.`); return !1; } return !0; } function validateCSSFont(e) { const t = new Set([ '100', '200', '300', '400', '500', '600', '700', '800', '900', '1000', 'normal', 'bold', 'bolder', 'lighter', ]), { fontFamily: i, fontWeight: a, italicAngle: r } = e; if (!validateFontName(i, !0)) return !1; const s = a ? a.toString() : ''; e.fontWeight = t.has(s) ? s : '400'; const n = parseFloat(r); e.italicAngle = isNaN(n) || n < -90 || n > 90 ? '14' : r.toString(); return !0; } function recoverJsURL(e) { const t = new RegExp( '^\\s*(' + ['app.launchURL', 'window.open', 'xfa.host.gotoURL'] .join('|') .replaceAll('.', '\\.') + ')\\((?:\'|")([^\'"]*)(?:\'|")(?:,\\s*(\\w+)\\)|\\))', 'i', ).exec(e); if (t?.[2]) { const e = t[2]; let i = !1; 'true' === t[3] && 'app.launchURL' === t[1] && (i = !0); return { url: e, newWindow: i }; } return null; } function numberToString(e) { if (Number.isInteger(e)) return e.toString(); const t = Math.round(100 * e); return t % 100 == 0 ? (t / 100).toString() : t % 10 == 0 ? e.toFixed(1) : e.toFixed(2); } function getNewAnnotationsMap(e) { if (!e) return null; const t = new Map(); for (const [i, a] of e) { if (!i.startsWith(u)) continue; let e = t.get(a.pageIndex); if (!e) { e = []; t.set(a.pageIndex, e); } e.push(a); } return t.size > 0 ? t : null; } function isAscii(e) { return /^[\x00-\x7F]*$/.test(e); } function stringToUTF16HexString(e) { const t = []; for (let i = 0, a = e.length; i < a; i++) { const a = e.charCodeAt(i); t.push( ((a >> 8) & 255).toString(16).padStart(2, '0'), (255 & a).toString(16).padStart(2, '0'), ); } return t.join(''); } function stringToUTF16String(e, t = !1) { const i = []; t && i.push('þÿ'); for (let t = 0, a = e.length; t < a; t++) { const a = e.charCodeAt(t); i.push(String.fromCharCode((a >> 8) & 255), String.fromCharCode(255 & a)); } return i.join(''); } function getRotationMatrix(e, t, i) { switch (e) { case 90: return [0, 1, -1, 0, t, 0]; case 180: return [-1, 0, 0, -1, t, i]; case 270: return [0, -1, 1, 0, 0, i]; default: throw new Error('Invalid rotation'); } } function getSizeInBytes(e) { return Math.ceil(Math.ceil(Math.log2(1 + e)) / 8); } class Stream extends BaseStream { constructor(e, t, i, a) { super(); this.bytes = e instanceof Uint8Array ? e : new Uint8Array(e); this.start = t || 0; this.pos = this.start; this.end = t + i || this.bytes.length; this.dict = a; } get length() { return this.end - this.start; } get isEmpty() { return 0 === this.length; } getByte() { return this.pos >= this.end ? -1 : this.bytes[this.pos++]; } getBytes(e) { const t = this.bytes, i = this.pos, a = this.end; if (!e) return t.subarray(i, a); let r = i + e; r > a && (r = a); this.pos = r; return t.subarray(i, r); } getByteRange(e, t) { e < 0 && (e = 0); t > this.end && (t = this.end); return this.bytes.subarray(e, t); } reset() { this.pos = this.start; } moveStart() { this.start = this.pos; } makeSubStream(e, t, i = null) { return new Stream(this.bytes.buffer, e, t, i); } } class StringStream extends Stream { constructor(e) { super(stringToBytes(e)); } } class NullStream extends Stream { constructor() { super(new Uint8Array(0)); } } class ChunkedStream extends Stream { constructor(e, t, i) { super(new Uint8Array(e), 0, e, null); this.chunkSize = t; this._loadedChunks = new Set(); this.numChunks = Math.ceil(e / t); this.manager = i; this.progressiveDataLength = 0; this.lastSuccessfulEnsureByteChunk = -1; } getMissingChunks() { const e = []; for (let t = 0, i = this.numChunks; t < i; ++t) this._loadedChunks.has(t) || e.push(t); return e; } get numChunksLoaded() { return this._loadedChunks.size; } get isDataLoaded() { return this.numChunksLoaded === this.numChunks; } onReceiveData(e, t) { const i = this.chunkSize; if (e % i != 0) throw new Error(`Bad begin offset: ${e}`); const a = e + t.byteLength; if (a % i != 0 && a !== this.bytes.length) throw new Error(`Bad end offset: ${a}`); this.bytes.set(new Uint8Array(t), e); const r = Math.floor(e / i), s = Math.floor((a - 1) / i) + 1; for (let e = r; e < s; ++e) this._loadedChunks.add(e); } onReceiveProgressiveData(e) { let t = this.progressiveDataLength; const i = Math.floor(t / this.chunkSize); this.bytes.set(new Uint8Array(e), t); t += e.byteLength; this.progressiveDataLength = t; const a = t >= this.end ? this.numChunks : Math.floor(t / this.chunkSize); for (let e = i; e < a; ++e) this._loadedChunks.add(e); } ensureByte(e) { if (e < this.progressiveDataLength) return; const t = Math.floor(e / this.chunkSize); if (!(t > this.numChunks) && t !== this.lastSuccessfulEnsureByteChunk) { if (!this._loadedChunks.has(t)) throw new MissingDataException(e, e + 1); this.lastSuccessfulEnsureByteChunk = t; } } ensureRange(e, t) { if (e >= t) return; if (t <= this.progressiveDataLength) return; const i = Math.floor(e / this.chunkSize); if (i > this.numChunks) return; const a = Math.min( Math.floor((t - 1) / this.chunkSize) + 1, this.numChunks, ); for (let r = i; r < a; ++r) if (!this._loadedChunks.has(r)) throw new MissingDataException(e, t); } nextEmptyChunk(e) { const t = this.numChunks; for (let i = 0; i < t; ++i) { const a = (e + i) % t; if (!this._loadedChunks.has(a)) return a; } return null; } hasChunk(e) { return this._loadedChunks.has(e); } getByte() { const e = this.pos; if (e >= this.end) return -1; e >= this.progressiveDataLength && this.ensureByte(e); return this.bytes[this.pos++]; } getBytes(e) { const t = this.bytes, i = this.pos, a = this.end; if (!e) { a > this.progressiveDataLength && this.ensureRange(i, a); return t.subarray(i, a); } let r = i + e; r > a && (r = a); r > this.progressiveDataLength && this.ensureRange(i, r); this.pos = r; return t.subarray(i, r); } getByteRange(e, t) { e < 0 && (e = 0); t > this.end && (t = this.end); t > this.progressiveDataLength && this.ensureRange(e, t); return this.bytes.subarray(e, t); } makeSubStream(e, t, i = null) { t ? e + t > this.progressiveDataLength && this.ensureRange(e, e + t) : e >= this.progressiveDataLength && this.ensureByte(e); function ChunkedStreamSubstream() {} ChunkedStreamSubstream.prototype = Object.create(this); ChunkedStreamSubstream.prototype.getMissingChunks = function () { const e = this.chunkSize, t = Math.floor(this.start / e), i = Math.floor((this.end - 1) / e) + 1, a = []; for (let e = t; e < i; ++e) this._loadedChunks.has(e) || a.push(e); return a; }; Object.defineProperty(ChunkedStreamSubstream.prototype, 'isDataLoaded', { get() { return ( this.numChunksLoaded === this.numChunks || 0 === this.getMissingChunks().length ); }, configurable: !0, }); const a = new ChunkedStreamSubstream(); a.pos = a.start = e; a.end = e + t || this.end; a.dict = i; return a; } getBaseStreams() { return [this]; } } class ChunkedStreamManager { constructor(e, t) { this.length = t.length; this.chunkSize = t.rangeChunkSize; this.stream = new ChunkedStream(this.length, this.chunkSize, this); this.pdfNetworkStream = e; this.disableAutoFetch = t.disableAutoFetch; this.msgHandler = t.msgHandler; this.currRequestId = 0; this._chunksNeededByRequest = new Map(); this._requestsByChunk = new Map(); this._promisesByRequest = new Map(); this.progressiveDataLength = 0; this.aborted = !1; this._loadedStreamCapability = Promise.withResolvers(); } sendRequest(e, t) { const i = this.pdfNetworkStream.getRangeReader(e, t); i.isStreamingSupported || (i.onProgress = this.onProgress.bind(this)); let a = [], r = 0; return new Promise((e, t) => { const readChunk = ({ value: s, done: n }) => { try { if (n) { const t = arrayBuffersToBytes(a); a = null; e(t); return; } r += s.byteLength; i.isStreamingSupported && this.onProgress({ loaded: r }); a.push(s); i.read().then(readChunk, t); } catch (e) { t(e); } }; i.read().then(readChunk, t); }).then((t) => { this.aborted || this.onReceiveData({ chunk: t, begin: e }); }); } requestAllChunks(e = !1) { if (!e) { const e = this.stream.getMissingChunks(); this._requestChunks(e); } return this._loadedStreamCapability.promise; } _requestChunks(e) { const t = this.currRequestId++, i = new Set(); this._chunksNeededByRequest.set(t, i); for (const t of e) this.stream.hasChunk(t) || i.add(t); if (0 === i.size) return Promise.resolve(); const a = Promise.withResolvers(); this._promisesByRequest.set(t, a); const r = []; for (const e of i) { let i = this._requestsByChunk.get(e); if (!i) { i = []; this._requestsByChunk.set(e, i); r.push(e); } i.push(t); } if (r.length > 0) { const e = this.groupChunks(r); for (const t of e) { const e = t.beginChunk * this.chunkSize, i = Math.min(t.endChunk * this.chunkSize, this.length); this.sendRequest(e, i).catch(a.reject); } } return a.promise.catch((e) => { if (!this.aborted) throw e; }); } getStream() { return this.stream; } requestRange(e, t) { t = Math.min(t, this.length); const i = this.getBeginChunk(e), a = this.getEndChunk(t), r = []; for (let e = i; e < a; ++e) r.push(e); return this._requestChunks(r); } requestRanges(e = []) { const t = []; for (const i of e) { const e = this.getBeginChunk(i.begin), a = this.getEndChunk(i.end); for (let i = e; i < a; ++i) t.includes(i) || t.push(i); } t.sort(function (e, t) { return e - t; }); return this._requestChunks(t); } groupChunks(e) { const t = []; let i = -1, a = -1; for (let r = 0, s = e.length; r < s; ++r) { const s = e[r]; i < 0 && (i = s); if (a >= 0 && a + 1 !== s) { t.push({ beginChunk: i, endChunk: a + 1 }); i = s; } r + 1 === e.length && t.push({ beginChunk: i, endChunk: s + 1 }); a = s; } return t; } onProgress(e) { this.msgHandler.send('DocProgress', { loaded: this.stream.numChunksLoaded * this.chunkSize + e.loaded, total: this.length, }); } onReceiveData(e) { const t = e.chunk, i = void 0 === e.begin, a = i ? this.progressiveDataLength : e.begin, r = a + t.byteLength, s = Math.floor(a / this.chunkSize), n = r < this.length ? Math.floor(r / this.chunkSize) : Math.ceil(r / this.chunkSize); if (i) { this.stream.onReceiveProgressiveData(t); this.progressiveDataLength = r; } else this.stream.onReceiveData(a, t); this.stream.isDataLoaded && this._loadedStreamCapability.resolve(this.stream); const o = []; for (let e = s; e < n; ++e) { const t = this._requestsByChunk.get(e); if (t) { this._requestsByChunk.delete(e); for (const i of t) { const t = this._chunksNeededByRequest.get(i); t.has(e) && t.delete(e); t.size > 0 || o.push(i); } } } if (!this.disableAutoFetch && 0 === this._requestsByChunk.size) { let e; if (1 === this.stream.numChunksLoaded) { const t = this.stream.numChunks - 1; this.stream.hasChunk(t) || (e = t); } else e = this.stream.nextEmptyChunk(n); Number.isInteger(e) && this._requestChunks([e]); } for (const e of o) { const t = this._promisesByRequest.get(e); this._promisesByRequest.delete(e); t.resolve(); } this.msgHandler.send('DocProgress', { loaded: this.stream.numChunksLoaded * this.chunkSize, total: this.length, }); } onError(e) { this._loadedStreamCapability.reject(e); } getBeginChunk(e) { return Math.floor(e / this.chunkSize); } getEndChunk(e) { return Math.floor((e - 1) / this.chunkSize) + 1; } abort(e) { this.aborted = !0; this.pdfNetworkStream?.cancelAllRequests(e); for (const t of this._promisesByRequest.values()) t.reject(e); } } __webpack_require__(4520), __webpack_require__(9479), __webpack_require__(2577), __webpack_require__(8872); class ColorSpace { constructor(e, t) { this.constructor === ColorSpace && unreachable('Cannot initialize ColorSpace.'); this.name = e; this.numComps = t; } getRgb(e, t) { const i = new Uint8ClampedArray(3); this.getRgbItem(e, t, i, 0); return i; } getRgbItem(e, t, i, a) { unreachable('Should not call ColorSpace.getRgbItem'); } getRgbBuffer(e, t, i, a, r, s, n) { unreachable('Should not call ColorSpace.getRgbBuffer'); } getOutputLength(e, t) { unreachable('Should not call ColorSpace.getOutputLength'); } isPassthrough(e) { return !1; } isDefaultDecode(e, t) { return ColorSpace.isDefaultDecode(e, this.numComps); } fillRgb(e, t, i, a, r, s, n, o, g) { const c = t * i; let C = null; const h = 1 << n, l = i !== r || t !== a; if (this.isPassthrough(n)) C = o; else if ( 1 === this.numComps && c > h && 'DeviceGray' !== this.name && 'DeviceRGB' !== this.name ) { const t = n <= 8 ? new Uint8Array(h) : new Uint16Array(h); for (let e = 0; e < h; e++) t[e] = e; const i = new Uint8ClampedArray(3 * h); this.getRgbBuffer(t, 0, h, i, 0, n, 0); if (l) { C = new Uint8Array(3 * c); let e = 0; for (let t = 0; t < c; ++t) { const a = 3 * o[t]; C[e++] = i[a]; C[e++] = i[a + 1]; C[e++] = i[a + 2]; } } else { let t = 0; for (let a = 0; a < c; ++a) { const r = 3 * o[a]; e[t++] = i[r]; e[t++] = i[r + 1]; e[t++] = i[r + 2]; t += g; } } } else if (l) { C = new Uint8ClampedArray(3 * c); this.getRgbBuffer(o, 0, c, C, 0, n, 0); } else this.getRgbBuffer(o, 0, a * s, e, 0, n, g); if (C) if (l) !(function resizeRgbImage(e, t, i, a, r, s, n) { n = 1 !== n ? 0 : n; const o = i / r, g = a / s; let c, C = 0; const h = new Uint16Array(r), l = 3 * i; for (let e = 0; e < r; e++) h[e] = 3 * Math.floor(e * o); for (let i = 0; i < s; i++) { const a = Math.floor(i * g) * l; for (let i = 0; i < r; i++) { c = a + h[i]; t[C++] = e[c++]; t[C++] = e[c++]; t[C++] = e[c++]; C += n; } } })(C, e, t, i, a, r, g); else { let t = 0, i = 0; for (let r = 0, n = a * s; r < n; r++) { e[t++] = C[i++]; e[t++] = C[i++]; e[t++] = C[i++]; t += g; } } } get usesZeroToOneRange() { return shadow(this, 'usesZeroToOneRange', !0); } static _cache(e, t, i, a) { if (!i) throw new Error( 'ColorSpace._cache - expected "localColorSpaceCache" argument.', ); if (!a) throw new Error( 'ColorSpace._cache - expected "parsedColorSpace" argument.', ); let r, s; if (e instanceof Ref) { s = e; e = t.fetch(e); } e instanceof Name && (r = e.name); (r || s) && i.set(r, s, a); } static getCached(e, t, i) { if (!i) throw new Error( 'ColorSpace.getCached - expected "localColorSpaceCache" argument.', ); if (e instanceof Ref) { const a = i.getByRef(e); if (a) return a; try { e = t.fetch(e); } catch (e) { if (e instanceof MissingDataException) throw e; } } if (e instanceof Name) { const t = i.getByName(e.name); if (t) return t; } return null; } static async parseAsync({ cs: e, xref: t, resources: i = null, pdfFunctionFactory: a, localColorSpaceCache: r, }) { const s = this._parse(e, t, i, a); this._cache(e, t, r, s); return s; } static parse({ cs: e, xref: t, resources: i = null, pdfFunctionFactory: a, localColorSpaceCache: r, }) { const s = this.getCached(e, t, r); if (s) return s; const n = this._parse(e, t, i, a); this._cache(e, t, r, n); return n; } static _parse(e, t, i = null, a) { if ((e = t.fetchIfRef(e)) instanceof Name) switch (e.name) { case 'G': case 'DeviceGray': return this.singletons.gray; case 'RGB': case 'DeviceRGB': return this.singletons.rgb; case 'DeviceRGBA': return this.singletons.rgba; case 'CMYK': case 'DeviceCMYK': return this.singletons.cmyk; case 'Pattern': return new PatternCS(null); default: if (i instanceof Dict) { const r = i.get('ColorSpace'); if (r instanceof Dict) { const s = r.get(e.name); if (s) { if (s instanceof Name) return this._parse(s, t, i, a); e = s; break; } } } throw new FormatError(`Unrecognized ColorSpace: ${e.name}`); } if (Array.isArray(e)) { const r = t.fetchIfRef(e[0]).name; let s, n, o, g, c, C; switch (r) { case 'G': case 'DeviceGray': return this.singletons.gray; case 'RGB': case 'DeviceRGB': return this.singletons.rgb; case 'CMYK': case 'DeviceCMYK': return this.singletons.cmyk; case 'CalGray': s = t.fetchIfRef(e[1]); g = s.getArray('WhitePoint'); c = s.getArray('BlackPoint'); C = s.get('Gamma'); return new CalGrayCS(g, c, C); case 'CalRGB': s = t.fetchIfRef(e[1]); g = s.getArray('WhitePoint'); c = s.getArray('BlackPoint'); C = s.getArray('Gamma'); const h = s.getArray('Matrix'); return new CalRGBCS(g, c, C, h); case 'ICCBased': const l = t.fetchIfRef(e[1]).dict; n = l.get('N'); const Q = l.get('Alternate'); if (Q) { const e = this._parse(Q, t, i, a); if (e.numComps === n) return e; warn('ICCBased color space: Ignoring incorrect /Alternate entry.'); } if (1 === n) return this.singletons.gray; if (3 === n) return this.singletons.rgb; if (4 === n) return this.singletons.cmyk; break; case 'Pattern': o = e[1] || null; o && (o = this._parse(o, t, i, a)); return new PatternCS(o); case 'I': case 'Indexed': o = this._parse(e[1], t, i, a); const E = t.fetchIfRef(e[2]) + 1, u = t.fetchIfRef(e[3]); return new IndexedCS(o, E, u); case 'Separation': case 'DeviceN': const d = t.fetchIfRef(e[1]); n = Array.isArray(d) ? d.length : 1; o = this._parse(e[2], t, i, a); const f = a.create(e[3]); return new AlternateCS(n, o, f); case 'Lab': s = t.fetchIfRef(e[1]); g = s.getArray('WhitePoint'); c = s.getArray('BlackPoint'); const p = s.getArray('Range'); return new LabCS(g, c, p); default: throw new FormatError(`Unimplemented ColorSpace object: ${r}`); } } throw new FormatError(`Unrecognized ColorSpace object: ${e}`); } static isDefaultDecode(e, t) { if (!Array.isArray(e)) return !0; if (2 * t !== e.length) { warn('The decode map is not the correct length'); return !0; } for (let t = 0, i = e.length; t < i; t += 2) if (0 !== e[t] || 1 !== e[t + 1]) return !1; return !0; } static get singletons() { return shadow(this, 'singletons', { get gray() { return shadow(this, 'gray', new DeviceGrayCS()); }, get rgb() { return shadow(this, 'rgb', new DeviceRgbCS()); }, get rgba() { return shadow(this, 'rgba', new DeviceRgbaCS()); }, get cmyk() { return shadow(this, 'cmyk', new DeviceCmykCS()); }, }); } } class AlternateCS extends ColorSpace { constructor(e, t, i) { super('Alternate', e); this.base = t; this.tintFn = i; this.tmpBuf = new Float32Array(t.numComps); } getRgbItem(e, t, i, a) { const r = this.tmpBuf; this.tintFn(e, t, r, 0); this.base.getRgbItem(r, 0, i, a); } getRgbBuffer(e, t, i, a, r, s, n) { const o = this.tintFn, g = this.base, c = 1 / ((1 << s) - 1), C = g.numComps, h = g.usesZeroToOneRange, l = (g.isPassthrough(8) || !h) && 0 === n; let Q = l ? r : 0; const E = l ? a : new Uint8ClampedArray(C * i), u = this.numComps, d = new Float32Array(u), f = new Float32Array(C); let p, m; for (p = 0; p < i; p++) { for (m = 0; m < u; m++) d[m] = e[t++] * c; o(d, 0, f, 0); if (h) for (m = 0; m < C; m++) E[Q++] = 255 * f[m]; else { g.getRgbItem(f, 0, E, Q); Q += C; } } l || g.getRgbBuffer(E, 0, i, a, r, 8, n); } getOutputLength(e, t) { return this.base.getOutputLength( (e * this.base.numComps) / this.numComps, t, ); } } class PatternCS extends ColorSpace { constructor(e) { super('Pattern', null); this.base = e; } isDefaultDecode(e, t) { unreachable('Should not call PatternCS.isDefaultDecode'); } } class IndexedCS extends ColorSpace { constructor(e, t, i) { super('Indexed', 1); this.base = e; this.highVal = t; const a = e.numComps * t; this.lookup = new Uint8Array(a); if (i instanceof BaseStream) { const e = i.getBytes(a); this.lookup.set(e); } else { if ('string' != typeof i) throw new FormatError(`IndexedCS - unrecognized lookup table: ${i}`); for (let e = 0; e < a; ++e) this.lookup[e] = 255 & i.charCodeAt(e); } } getRgbItem(e, t, i, a) { const r = this.base.numComps, s = e[t] * r; this.base.getRgbBuffer(this.lookup, s, 1, i, a, 8, 0); } getRgbBuffer(e, t, i, a, r, s, n) { const o = this.base, g = o.numComps, c = o.getOutputLength(g, n), C = this.lookup; for (let s = 0; s < i; ++s) { const i = e[t++] * g; o.getRgbBuffer(C, i, 1, a, r, 8, n); r += c; } } getOutputLength(e, t) { return this.base.getOutputLength(e * this.base.numComps, t); } isDefaultDecode(e, t) { if (!Array.isArray(e)) return !0; if (2 !== e.length) { warn('Decode map length is not correct'); return !0; } if (!Number.isInteger(t) || t < 1) { warn('Bits per component is not correct'); return !0; } return 0 === e[0] && e[1] === (1 << t) - 1; } } class DeviceGrayCS extends ColorSpace { constructor() { super('DeviceGray', 1); } getRgbItem(e, t, i, a) { const r = 255 * e[t]; i[a] = i[a + 1] = i[a + 2] = r; } getRgbBuffer(e, t, i, a, r, s, n) { const o = 255 / ((1 << s) - 1); let g = t, c = r; for (let t = 0; t < i; ++t) { const t = o * e[g++]; a[c++] = t; a[c++] = t; a[c++] = t; c += n; } } getOutputLength(e, t) { return e * (3 + t); } } class DeviceRgbCS extends ColorSpace { constructor() { super('DeviceRGB', 3); } getRgbItem(e, t, i, a) { i[a] = 255 * e[t]; i[a + 1] = 255 * e[t + 1]; i[a + 2] = 255 * e[t + 2]; } getRgbBuffer(e, t, i, a, r, s, n) { if (8 === s && 0 === n) { a.set(e.subarray(t, t + 3 * i), r); return; } const o = 255 / ((1 << s) - 1); let g = t, c = r; for (let t = 0; t < i; ++t) { a[c++] = o * e[g++]; a[c++] = o * e[g++]; a[c++] = o * e[g++]; c += n; } } getOutputLength(e, t) { return ((e * (3 + t)) / 3) | 0; } isPassthrough(e) { return 8 === e; } } class DeviceRgbaCS extends ColorSpace { constructor() { super('DeviceRGBA', 4); } getOutputLength(e, t) { return 4 * e; } isPassthrough(e) { return 8 === e; } } class DeviceCmykCS extends ColorSpace { constructor() { super('DeviceCMYK', 4); } #t(e, t, i, a, r) { const s = e[t] * i, n = e[t + 1] * i, o = e[t + 2] * i, g = e[t + 3] * i; a[r] = 255 + s * (-4.387332384609988 * s + 54.48615194189176 * n + 18.82290502165302 * o + 212.25662451639585 * g - 285.2331026137004) + n * (1.7149763477362134 * n - 5.6096736904047315 * o + -17.873870861415444 * g - 5.497006427196366) + o * (-2.5217340131683033 * o - 21.248923337353073 * g + 17.5119270841813) + g * (-21.86122147463605 * g - 189.48180835922747); a[r + 1] = 255 + s * (8.841041422036149 * s + 60.118027045597366 * n + 6.871425592049007 * o + 31.159100130055922 * g - 79.2970844816548) + n * (-15.310361306967817 * n + 17.575251261109482 * o + 131.35250912493976 * g - 190.9453302588951) + o * (4.444339102852739 * o + 9.8632861493405 * g - 24.86741582555878) + g * (-20.737325471181034 * g - 187.80453709719578); a[r + 2] = 255 + s * (0.8842522430003296 * s + 8.078677503112928 * n + 30.89978309703729 * o - 0.23883238689178934 * g - 14.183576799673286) + n * (10.49593273432072 * n + 63.02378494754052 * o + 50.606957656360734 * g - 112.23884253719248) + o * (0.03296041114873217 * o + 115.60384449646641 * g - 193.58209356861505) + g * (-22.33816807309886 * g - 180.12613974708367); } getRgbItem(e, t, i, a) { this.#t(e, t, 1, i, a); } getRgbBuffer(e, t, i, a, r, s, n) { const o = 1 / ((1 << s) - 1); for (let s = 0; s < i; s++) { this.#t(e, t, o, a, r); t += 4; r += 3 + n; } } getOutputLength(e, t) { return ((e / 4) * (3 + t)) | 0; } } class CalGrayCS extends ColorSpace { constructor(e, t, i) { super('CalGray', 1); if (!e) throw new FormatError( 'WhitePoint missing - required for color space CalGray', ); [this.XW, this.YW, this.ZW] = e; [this.XB, this.YB, this.ZB] = t || [0, 0, 0]; this.G = i || 1; if (this.XW < 0 || this.ZW < 0 || 1 !== this.YW) throw new FormatError( `Invalid WhitePoint components for ${this.name}, no fallback available`, ); if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { info(`Invalid BlackPoint for ${this.name}, falling back to default.`); this.XB = this.YB = this.ZB = 0; } (0 === this.XB && 0 === this.YB && 0 === this.ZB) || warn( `${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ZB: ${this.ZB}, only default values are supported.`, ); if (this.G < 1) { info( `Invalid Gamma: ${this.G} for ${this.name}, falling back to default.`, ); this.G = 1; } } #t(e, t, i, a, r) { const s = (e[t] * r) ** this.G, n = this.YW * s, o = Math.max(295.8 * n ** 0.3333333333333333 - 40.8, 0); i[a] = o; i[a + 1] = o; i[a + 2] = o; } getRgbItem(e, t, i, a) { this.#t(e, t, i, a, 1); } getRgbBuffer(e, t, i, a, r, s, n) { const o = 1 / ((1 << s) - 1); for (let s = 0; s < i; ++s) { this.#t(e, t, a, r, o); t += 1; r += 3 + n; } } getOutputLength(e, t) { return e * (3 + t); } } class CalRGBCS extends ColorSpace { static #i = new Float32Array([ 0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296, ]); static #a = new Float32Array([ 0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867, ]); static #r = new Float32Array([ 3.2404542, -1.5371385, -0.4985314, -0.969266, 1.8760108, 0.041556, 0.0556434, -0.2040259, 1.0572252, ]); static #s = new Float32Array([1, 1, 1]); static #n = new Float32Array(3); static #o = new Float32Array(3); static #g = new Float32Array(3); static #I = (24 / 116) ** 3 / 8; constructor(e, t, i, a) { super('CalRGB', 3); if (!e) throw new FormatError( 'WhitePoint missing - required for color space CalRGB', ); const [r, s, n] = (this.whitePoint = e), [o, g, c] = (this.blackPoint = t || new Float32Array(3)); [this.GR, this.GG, this.GB] = i || new Float32Array([1, 1, 1]); [ this.MXA, this.MYA, this.MZA, this.MXB, this.MYB, this.MZB, this.MXC, this.MYC, this.MZC, ] = a || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]); if (r < 0 || n < 0 || 1 !== s) throw new FormatError( `Invalid WhitePoint components for ${this.name}, no fallback available`, ); if (o < 0 || g < 0 || c < 0) { info( `Invalid BlackPoint for ${this.name} [${o}, ${g}, ${c}], falling back to default.`, ); this.blackPoint = new Float32Array(3); } if (this.GR < 0 || this.GG < 0 || this.GB < 0) { info( `Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ${this.name}, falling back to default.`, ); this.GR = this.GG = this.GB = 1; } } #c(e, t, i) { i[0] = e[0] * t[0] + e[1] * t[1] + e[2] * t[2]; i[1] = e[3] * t[0] + e[4] * t[1] + e[5] * t[2]; i[2] = e[6] * t[0] + e[7] * t[1] + e[8] * t[2]; } #C(e, t, i) { i[0] = (1 * t[0]) / e[0]; i[1] = (1 * t[1]) / e[1]; i[2] = (1 * t[2]) / e[2]; } #h(e, t, i) { i[0] = (0.95047 * t[0]) / e[0]; i[1] = (1 * t[1]) / e[1]; i[2] = (1.08883 * t[2]) / e[2]; } #l(e) { return e <= 0.0031308 ? this.#B(0, 1, 12.92 * e) : e >= 0.99554525 ? 1 : this.#B(0, 1, 1.055 * e ** (1 / 2.4) - 0.055); } #B(e, t, i) { return Math.max(e, Math.min(t, i)); } #Q(e) { return e < 0 ? -this.#Q(-e) : e > 8 ? ((e + 16) / 116) ** 3 : e * CalRGBCS.#I; } #E(e, t, i) { if (0 === e[0] && 0 === e[1] && 0 === e[2]) { i[0] = t[0]; i[1] = t[1]; i[2] = t[2]; return; } const a = this.#Q(0), r = (1 - a) / (1 - this.#Q(e[0])), s = 1 - r, n = (1 - a) / (1 - this.#Q(e[1])), o = 1 - n, g = (1 - a) / (1 - this.#Q(e[2])), c = 1 - g; i[0] = t[0] * r + s; i[1] = t[1] * n + o; i[2] = t[2] * g + c; } #u(e, t, i) { if (1 === e[0] && 1 === e[2]) { i[0] = t[0]; i[1] = t[1]; i[2] = t[2]; return; } const a = i; this.#c(CalRGBCS.#i, t, a); const r = CalRGBCS.#n; this.#C(e, a, r); this.#c(CalRGBCS.#a, r, i); } #d(e, t, i) { const a = i; this.#c(CalRGBCS.#i, t, a); const r = CalRGBCS.#n; this.#h(e, a, r); this.#c(CalRGBCS.#a, r, i); } #t(e, t, i, a, r) { const s = this.#B(0, 1, e[t] * r), n = this.#B(0, 1, e[t + 1] * r), o = this.#B(0, 1, e[t + 2] * r), g = 1 === s ? 1 : s ** this.GR, c = 1 === n ? 1 : n ** this.GG, C = 1 === o ? 1 : o ** this.GB, h = this.MXA * g + this.MXB * c + this.MXC * C, l = this.MYA * g + this.MYB * c + this.MYC * C, Q = this.MZA * g + this.MZB * c + this.MZC * C, E = CalRGBCS.#o; E[0] = h; E[1] = l; E[2] = Q; const u = CalRGBCS.#g; this.#u(this.whitePoint, E, u); const d = CalRGBCS.#o; this.#E(this.blackPoint, u, d); const f = CalRGBCS.#g; this.#d(CalRGBCS.#s, d, f); const p = CalRGBCS.#o; this.#c(CalRGBCS.#r, f, p); i[a] = 255 * this.#l(p[0]); i[a + 1] = 255 * this.#l(p[1]); i[a + 2] = 255 * this.#l(p[2]); } getRgbItem(e, t, i, a) { this.#t(e, t, i, a, 1); } getRgbBuffer(e, t, i, a, r, s, n) { const o = 1 / ((1 << s) - 1); for (let s = 0; s < i; ++s) { this.#t(e, t, a, r, o); t += 3; r += 3 + n; } } getOutputLength(e, t) { return ((e * (3 + t)) / 3) | 0; } } class LabCS extends ColorSpace { constructor(e, t, i) { super('Lab', 3); if (!e) throw new FormatError( 'WhitePoint missing - required for color space Lab', ); [this.XW, this.YW, this.ZW] = e; [this.amin, this.amax, this.bmin, this.bmax] = i || [-100, 100, -100, 100]; [this.XB, this.YB, this.ZB] = t || [0, 0, 0]; if (this.XW < 0 || this.ZW < 0 || 1 !== this.YW) throw new FormatError( 'Invalid WhitePoint components, no fallback available', ); if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { info('Invalid BlackPoint, falling back to default'); this.XB = this.YB = this.ZB = 0; } if (this.amin > this.amax || this.bmin > this.bmax) { info('Invalid Range, falling back to defaults'); this.amin = -100; this.amax = 100; this.bmin = -100; this.bmax = 100; } } #f(e) { return e >= 6 / 29 ? e ** 3 : (108 / 841) * (e - 4 / 29); } #p(e, t, i, a) { return i + (e * (a - i)) / t; } #t(e, t, i, a, r) { let s = e[t], n = e[t + 1], o = e[t + 2]; if (!1 !== i) { s = this.#p(s, i, 0, 100); n = this.#p(n, i, this.amin, this.amax); o = this.#p(o, i, this.bmin, this.bmax); } n > this.amax ? (n = this.amax) : n < this.amin && (n = this.amin); o > this.bmax ? (o = this.bmax) : o < this.bmin && (o = this.bmin); const g = (s + 16) / 116, c = g + n / 500, C = g - o / 200, h = this.XW * this.#f(c), l = this.YW * this.#f(g), Q = this.ZW * this.#f(C); let E, u, d; if (this.ZW < 1) { E = 3.1339 * h + -1.617 * l + -0.4906 * Q; u = -0.9785 * h + 1.916 * l + 0.0333 * Q; d = 0.072 * h + -0.229 * l + 1.4057 * Q; } else { E = 3.2406 * h + -1.5372 * l + -0.4986 * Q; u = -0.9689 * h + 1.8758 * l + 0.0415 * Q; d = 0.0557 * h + -0.204 * l + 1.057 * Q; } a[r] = 255 * Math.sqrt(E); a[r + 1] = 255 * Math.sqrt(u); a[r + 2] = 255 * Math.sqrt(d); } getRgbItem(e, t, i, a) { this.#t(e, t, !1, i, a); } getRgbBuffer(e, t, i, a, r, s, n) { const o = (1 << s) - 1; for (let s = 0; s < i; s++) { this.#t(e, t, o, a, r); t += 3; r += 3 + n; } } getOutputLength(e, t) { return ((e * (3 + t)) / 3) | 0; } isDefaultDecode(e, t) { return !0; } get usesZeroToOneRange() { return shadow(this, 'usesZeroToOneRange', !1); } } function hexToInt(e, t) { let i = 0; for (let a = 0; a <= t; a++) i = (i << 8) | e[a]; return i >>> 0; } function hexToStr(e, t) { return 1 === t ? String.fromCharCode(e[0], e[1]) : 3 === t ? String.fromCharCode(e[0], e[1], e[2], e[3]) : String.fromCharCode(...e.subarray(0, t + 1)); } function addHex(e, t, i) { let a = 0; for (let r = i; r >= 0; r--) { a += e[r] + t[r]; e[r] = 255 & a; a >>= 8; } } function incHex(e, t) { let i = 1; for (let a = t; a >= 0 && i > 0; a--) { i += e[a]; e[a] = 255 & i; i >>= 8; } } const Nt = 16; class BinaryCMapStream { constructor(e) { this.buffer = e; this.pos = 0; this.end = e.length; this.tmpBuf = new Uint8Array(19); } readByte() { return this.pos >= this.end ? -1 : this.buffer[this.pos++]; } readNumber() { let e, t = 0; do { const i = this.readByte(); if (i < 0) throw new FormatError('unexpected EOF in bcmap'); e = !(128 & i); t = (t << 7) | (127 & i); } while (!e); return t; } readSigned() { const e = this.readNumber(); return 1 & e ? ~(e >>> 1) : e >>> 1; } readHex(e, t) { e.set(this.buffer.subarray(this.pos, this.pos + t + 1)); this.pos += t + 1; } readHexNumber(e, t) { let i; const a = this.tmpBuf; let r = 0; do { const e = this.readByte(); if (e < 0) throw new FormatError('unexpected EOF in bcmap'); i = !(128 & e); a[r++] = 127 & e; } while (!i); let s = t, n = 0, o = 0; for (; s >= 0; ) { for (; o < 8 && a.length > 0; ) { n |= a[--r] << o; o += 7; } e[s] = 255 & n; s--; n >>= 8; o -= 8; } } readHexSigned(e, t) { this.readHexNumber(e, t); const i = 1 & e[t] ? 255 : 0; let a = 0; for (let r = 0; r <= t; r++) { a = ((1 & a) << 8) | e[r]; e[r] = (a >> 1) ^ i; } } readString() { const e = this.readNumber(), t = new Array(e); for (let i = 0; i < e; i++) t[i] = this.readNumber(); return String.fromCharCode(...t); } } class BinaryCMapReader { async process(e, t, i) { const a = new BinaryCMapStream(e), r = a.readByte(); t.vertical = !!(1 & r); let s = null; const n = new Uint8Array(Nt), o = new Uint8Array(Nt), g = new Uint8Array(Nt), c = new Uint8Array(Nt), C = new Uint8Array(Nt); let h, l; for (; (l = a.readByte()) >= 0; ) { const e = l >> 5; if (7 === e) { switch (31 & l) { case 0: a.readString(); break; case 1: s = a.readString(); } continue; } const i = !!(16 & l), r = 15 & l; if (r + 1 > Nt) throw new Error('BinaryCMapReader.process: Invalid dataSize.'); const Q = 1, E = a.readNumber(); switch (e) { case 0: a.readHex(n, r); a.readHexNumber(o, r); addHex(o, n, r); t.addCodespaceRange(r + 1, hexToInt(n, r), hexToInt(o, r)); for (let e = 1; e < E; e++) { incHex(o, r); a.readHexNumber(n, r); addHex(n, o, r); a.readHexNumber(o, r); addHex(o, n, r); t.addCodespaceRange(r + 1, hexToInt(n, r), hexToInt(o, r)); } break; case 1: a.readHex(n, r); a.readHexNumber(o, r); addHex(o, n, r); a.readNumber(); for (let e = 1; e < E; e++) { incHex(o, r); a.readHexNumber(n, r); addHex(n, o, r); a.readHexNumber(o, r); addHex(o, n, r); a.readNumber(); } break; case 2: a.readHex(g, r); h = a.readNumber(); t.mapOne(hexToInt(g, r), h); for (let e = 1; e < E; e++) { incHex(g, r); if (!i) { a.readHexNumber(C, r); addHex(g, C, r); } h = a.readSigned() + (h + 1); t.mapOne(hexToInt(g, r), h); } break; case 3: a.readHex(n, r); a.readHexNumber(o, r); addHex(o, n, r); h = a.readNumber(); t.mapCidRange(hexToInt(n, r), hexToInt(o, r), h); for (let e = 1; e < E; e++) { incHex(o, r); if (i) n.set(o); else { a.readHexNumber(n, r); addHex(n, o, r); } a.readHexNumber(o, r); addHex(o, n, r); h = a.readNumber(); t.mapCidRange(hexToInt(n, r), hexToInt(o, r), h); } break; case 4: a.readHex(g, Q); a.readHex(c, r); t.mapOne(hexToInt(g, Q), hexToStr(c, r)); for (let e = 1; e < E; e++) { incHex(g, Q); if (!i) { a.readHexNumber(C, Q); addHex(g, C, Q); } incHex(c, r); a.readHexSigned(C, r); addHex(c, C, r); t.mapOne(hexToInt(g, Q), hexToStr(c, r)); } break; case 5: a.readHex(n, Q); a.readHexNumber(o, Q); addHex(o, n, Q); a.readHex(c, r); t.mapBfRange(hexToInt(n, Q), hexToInt(o, Q), hexToStr(c, r)); for (let e = 1; e < E; e++) { incHex(o, Q); if (i) n.set(o); else { a.readHexNumber(n, Q); addHex(n, o, Q); } a.readHexNumber(o, Q); addHex(o, n, Q); a.readHex(c, r); t.mapBfRange(hexToInt(n, Q), hexToInt(o, Q), hexToStr(c, r)); } break; default: throw new Error(`BinaryCMapReader.process - unknown type: ${e}`); } } return s ? i(s) : t; } } const Gt = new Uint8Array(0); class DecodeStream extends BaseStream { constructor(e) { super(); this._rawMinBufferLength = e || 0; this.pos = 0; this.bufferLength = 0; this.eof = !1; this.buffer = Gt; this.minBufferLength = 512; if (e) for (; this.minBufferLength < e; ) this.minBufferLength *= 2; } get isEmpty() { for (; !this.eof && 0 === this.bufferLength; ) this.readBlock(); return 0 === this.bufferLength; } ensureBuffer(e) { const t = this.buffer; if (e <= t.byteLength) return t; let i = this.minBufferLength; for (; i < e; ) i *= 2; const a = new Uint8Array(i); a.set(t); return (this.buffer = a); } getByte() { const e = this.pos; for (; this.bufferLength <= e; ) { if (this.eof) return -1; this.readBlock(); } return this.buffer[this.pos++]; } getBytes(e, t = null) { const i = this.pos; let a; if (e) { this.ensureBuffer(i + e); a = i + e; for (; !this.eof && this.bufferLength < a; ) this.readBlock(t); const r = this.bufferLength; a > r && (a = r); } else { for (; !this.eof; ) this.readBlock(t); a = this.bufferLength; } this.pos = a; return this.buffer.subarray(i, a); } async getImageData(e, t = null) { if (!this.canAsyncDecodeImageFromBuffer) return this.getBytes(e, t); const i = await this.stream.asyncGetBytes(); return this.decodeImage(i, t); } reset() { this.pos = 0; } makeSubStream(e, t, i = null) { if (void 0 === t) for (; !this.eof; ) this.readBlock(); else { const i = e + t; for (; this.bufferLength <= i && !this.eof; ) this.readBlock(); } return new Stream(this.buffer, e, t, i); } getBaseStreams() { return this.str ? this.str.getBaseStreams() : null; } } class StreamsSequenceStream extends DecodeStream { constructor(e, t = null) { let i = 0; for (const t of e) i += t instanceof DecodeStream ? t._rawMinBufferLength : t.length; super(i); this.streams = e; this._onError = t; } readBlock() { const e = this.streams; if (0 === e.length) { this.eof = !0; return; } const t = e.shift(); let i; try { i = t.getBytes(); } catch (e) { if (this._onError) { this._onError(e, t.dict?.objId); return; } throw e; } const a = this.bufferLength, r = a + i.length; this.ensureBuffer(r).set(i, a); this.bufferLength = r; } getBaseStreams() { const e = []; for (const t of this.streams) { const i = t.getBaseStreams(); i && e.push(...i); } return e.length > 0 ? e : null; } } class Ascii85Stream extends DecodeStream { constructor(e, t) { t && (t *= 0.8); super(t); this.str = e; this.dict = e.dict; this.input = new Uint8Array(5); } readBlock() { const e = this.str; let t = e.getByte(); for (; isWhiteSpace(t); ) t = e.getByte(); if (-1 === t || 126 === t) { this.eof = !0; return; } const i = this.bufferLength; let a, r; if (122 === t) { a = this.ensureBuffer(i + 4); for (r = 0; r < 4; ++r) a[i + r] = 0; this.bufferLength += 4; } else { const s = this.input; s[0] = t; for (r = 1; r < 5; ++r) { t = e.getByte(); for (; isWhiteSpace(t); ) t = e.getByte(); s[r] = t; if (-1 === t || 126 === t) break; } a = this.ensureBuffer(i + r - 1); this.bufferLength += r - 1; if (r < 5) { for (; r < 5; ++r) s[r] = 117; this.eof = !0; } let n = 0; for (r = 0; r < 5; ++r) n = 85 * n + (s[r] - 33); for (r = 3; r >= 0; --r) { a[i + r] = 255 & n; n >>= 8; } } } } class AsciiHexStream extends DecodeStream { constructor(e, t) { t && (t *= 0.5); super(t); this.str = e; this.dict = e.dict; this.firstDigit = -1; } readBlock() { const e = this.str.getBytes(8e3); if (!e.length) { this.eof = !0; return; } const t = (e.length + 1) >> 1, i = this.ensureBuffer(this.bufferLength + t); let a = this.bufferLength, r = this.firstDigit; for (const t of e) { let e; if (t >= 48 && t <= 57) e = 15 & t; else { if (!((t >= 65 && t <= 70) || (t >= 97 && t <= 102))) { if (62 === t) { this.eof = !0; break; } continue; } e = 9 + (15 & t); } if (r < 0) r = e; else { i[a++] = (r << 4) | e; r = -1; } } if (r >= 0 && this.eof) { i[a++] = r << 4; r = -1; } this.firstDigit = r; this.bufferLength = a; } } const xt = -1, Ut = [ [-1, -1], [-1, -1], [7, 8], [7, 7], [6, 6], [6, 6], [6, 5], [6, 5], [4, 0], [4, 0], [4, 0], [4, 0], [4, 0], [4, 0], [4, 0], [4, 0], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], ], Mt = [ [-1, -1], [12, -2], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560], ], Lt = [ [-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], ], Ht = [ [-1, -1], [-1, -1], [12, -2], [12, -2], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], ], Jt = [ [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], ], Yt = [ [-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], ]; class CCITTFaxDecoder { constructor(e, t = {}) { if (!e || 'function' != typeof e.next) throw new Error('CCITTFaxDecoder - invalid "source" parameter.'); this.source = e; this.eof = !1; this.encoding = t.K || 0; this.eoline = t.EndOfLine || !1; this.byteAlign = t.EncodedByteAlign || !1; this.columns = t.Columns || 1728; this.rows = t.Rows || 0; this.eoblock = t.EndOfBlock ?? !0; this.black = t.BlackIs1 || !1; this.codingLine = new Uint32Array(this.columns + 1); this.refLine = new Uint32Array(this.columns + 2); this.codingLine[0] = this.columns; this.codingPos = 0; this.row = 0; this.nextLine2D = this.encoding < 0; this.inputBits = 0; this.inputBuf = 0; this.outputBits = 0; this.rowsDone = !1; let i; for (; 0 === (i = this._lookBits(12)); ) this._eatBits(1); 1 === i && this._eatBits(12); if (this.encoding > 0) { this.nextLine2D = !this._lookBits(1); this._eatBits(1); } } readNextChar() { if (this.eof) return -1; const e = this.refLine, t = this.codingLine, i = this.columns; let a, r, s, n, o; if (0 === this.outputBits) { this.rowsDone && (this.eof = !0); if (this.eof) return -1; this.err = !1; let s, o, g; if (this.nextLine2D) { for (n = 0; t[n] < i; ++n) e[n] = t[n]; e[n++] = i; e[n] = i; t[0] = 0; this.codingPos = 0; a = 0; r = 0; for (; t[this.codingPos] < i; ) { s = this._getTwoDimCode(); switch (s) { case 0: this._addPixels(e[a + 1], r); e[a + 1] < i && (a += 2); break; case 1: s = o = 0; if (r) { do { s += g = this._getBlackCode(); } while (g >= 64); do { o += g = this._getWhiteCode(); } while (g >= 64); } else { do { s += g = this._getWhiteCode(); } while (g >= 64); do { o += g = this._getBlackCode(); } while (g >= 64); } this._addPixels(t[this.codingPos] + s, r); t[this.codingPos] < i && this._addPixels(t[this.codingPos] + o, 1 ^ r); for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; break; case 7: this._addPixels(e[a] + 3, r); r ^= 1; if (t[this.codingPos] < i) { ++a; for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; } break; case 5: this._addPixels(e[a] + 2, r); r ^= 1; if (t[this.codingPos] < i) { ++a; for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; } break; case 3: this._addPixels(e[a] + 1, r); r ^= 1; if (t[this.codingPos] < i) { ++a; for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; } break; case 2: this._addPixels(e[a], r); r ^= 1; if (t[this.codingPos] < i) { ++a; for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; } break; case 8: this._addPixelsNeg(e[a] - 3, r); r ^= 1; if (t[this.codingPos] < i) { a > 0 ? --a : ++a; for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; } break; case 6: this._addPixelsNeg(e[a] - 2, r); r ^= 1; if (t[this.codingPos] < i) { a > 0 ? --a : ++a; for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; } break; case 4: this._addPixelsNeg(e[a] - 1, r); r ^= 1; if (t[this.codingPos] < i) { a > 0 ? --a : ++a; for (; e[a] <= t[this.codingPos] && e[a] < i; ) a += 2; } break; case xt: this._addPixels(i, 0); this.eof = !0; break; default: info('bad 2d code'); this._addPixels(i, 0); this.err = !0; } } } else { t[0] = 0; this.codingPos = 0; r = 0; for (; t[this.codingPos] < i; ) { s = 0; if (r) do { s += g = this._getBlackCode(); } while (g >= 64); else do { s += g = this._getWhiteCode(); } while (g >= 64); this._addPixels(t[this.codingPos] + s, r); r ^= 1; } } let c = !1; this.byteAlign && (this.inputBits &= -8); if (this.eoblock || this.row !== this.rows - 1) { s = this._lookBits(12); if (this.eoline) for (; s !== xt && 1 !== s; ) { this._eatBits(1); s = this._lookBits(12); } else for (; 0 === s; ) { this._eatBits(1); s = this._lookBits(12); } if (1 === s) { this._eatBits(12); c = !0; } else s === xt && (this.eof = !0); } else this.rowsDone = !0; if (!this.eof && this.encoding > 0 && !this.rowsDone) { this.nextLine2D = !this._lookBits(1); this._eatBits(1); } if (this.eoblock && c && this.byteAlign) { s = this._lookBits(12); if (1 === s) { this._eatBits(12); if (this.encoding > 0) { this._lookBits(1); this._eatBits(1); } if (this.encoding >= 0) for (n = 0; n < 4; ++n) { s = this._lookBits(12); 1 !== s && info('bad rtc code: ' + s); this._eatBits(12); if (this.encoding > 0) { this._lookBits(1); this._eatBits(1); } } this.eof = !0; } } else if (this.err && this.eoline) { for (;;) { s = this._lookBits(13); if (s === xt) { this.eof = !0; return -1; } if (s >> 1 == 1) break; this._eatBits(1); } this._eatBits(12); if (this.encoding > 0) { this._eatBits(1); this.nextLine2D = !(1 & s); } } this.outputBits = t[0] > 0 ? t[(this.codingPos = 0)] : t[(this.codingPos = 1)]; this.row++; } if (this.outputBits >= 8) { o = 1 & this.codingPos ? 0 : 255; this.outputBits -= 8; if (0 === this.outputBits && t[this.codingPos] < i) { this.codingPos++; this.outputBits = t[this.codingPos] - t[this.codingPos - 1]; } } else { s = 8; o = 0; do { if ('number' != typeof this.outputBits) throw new FormatError( 'Invalid /CCITTFaxDecode data, "outputBits" must be a number.', ); if (this.outputBits > s) { o <<= s; 1 & this.codingPos || (o |= 255 >> (8 - s)); this.outputBits -= s; s = 0; } else { o <<= this.outputBits; 1 & this.codingPos || (o |= 255 >> (8 - this.outputBits)); s -= this.outputBits; this.outputBits = 0; if (t[this.codingPos] < i) { this.codingPos++; this.outputBits = t[this.codingPos] - t[this.codingPos - 1]; } else if (s > 0) { o <<= s; s = 0; } } } while (s); } this.black && (o ^= 255); return o; } _addPixels(e, t) { const i = this.codingLine; let a = this.codingPos; if (e > i[a]) { if (e > this.columns) { info('row is wrong length'); this.err = !0; e = this.columns; } (1 & a) ^ t && ++a; i[a] = e; } this.codingPos = a; } _addPixelsNeg(e, t) { const i = this.codingLine; let a = this.codingPos; if (e > i[a]) { if (e > this.columns) { info('row is wrong length'); this.err = !0; e = this.columns; } (1 & a) ^ t && ++a; i[a] = e; } else if (e < i[a]) { if (e < 0) { info('invalid code'); this.err = !0; e = 0; } for (; a > 0 && e < i[a - 1]; ) --a; i[a] = e; } this.codingPos = a; } _findTableCode(e, t, i, a) { const r = a || 0; for (let a = e; a <= t; ++a) { let e = this._lookBits(a); if (e === xt) return [!0, 1, !1]; a < t && (e <<= t - a); if (!r || e >= r) { const t = i[e - r]; if (t[0] === a) { this._eatBits(a); return [!0, t[1], !0]; } } } return [!1, 0, !1]; } _getTwoDimCode() { let e, t = 0; if (this.eoblock) { t = this._lookBits(7); e = Ut[t]; if (e?.[0] > 0) { this._eatBits(e[0]); return e[1]; } } else { const e = this._findTableCode(1, 7, Ut); if (e[0] && e[2]) return e[1]; } info('Bad two dim code'); return xt; } _getWhiteCode() { let e, t = 0; if (this.eoblock) { t = this._lookBits(12); if (t === xt) return 1; e = t >> 5 == 0 ? Mt[t] : Lt[t >> 3]; if (e[0] > 0) { this._eatBits(e[0]); return e[1]; } } else { let e = this._findTableCode(1, 9, Lt); if (e[0]) return e[1]; e = this._findTableCode(11, 12, Mt); if (e[0]) return e[1]; } info('bad white code'); this._eatBits(1); return 1; } _getBlackCode() { let e, t; if (this.eoblock) { e = this._lookBits(13); if (e === xt) return 1; t = e >> 7 == 0 ? Ht[e] : e >> 9 == 0 && e >> 7 != 0 ? Jt[(e >> 1) - 64] : Yt[e >> 7]; if (t[0] > 0) { this._eatBits(t[0]); return t[1]; } } else { let e = this._findTableCode(2, 6, Yt); if (e[0]) return e[1]; e = this._findTableCode(7, 12, Jt, 64); if (e[0]) return e[1]; e = this._findTableCode(10, 13, Ht); if (e[0]) return e[1]; } info('bad black code'); this._eatBits(1); return 1; } _lookBits(e) { let t; for (; this.inputBits < e; ) { if (-1 === (t = this.source.next())) return 0 === this.inputBits ? xt : (this.inputBuf << (e - this.inputBits)) & (65535 >> (16 - e)); this.inputBuf = (this.inputBuf << 8) | t; this.inputBits += 8; } return (this.inputBuf >> (this.inputBits - e)) & (65535 >> (16 - e)); } _eatBits(e) { (this.inputBits -= e) < 0 && (this.inputBits = 0); } } class CCITTFaxStream extends DecodeStream { constructor(e, t, i) { super(t); this.str = e; this.dict = e.dict; i instanceof Dict || (i = Dict.empty); const a = { next: () => e.getByte() }; this.ccittFaxDecoder = new CCITTFaxDecoder(a, { K: i.get('K'), EndOfLine: i.get('EndOfLine'), EncodedByteAlign: i.get('EncodedByteAlign'), Columns: i.get('Columns'), Rows: i.get('Rows'), EndOfBlock: i.get('EndOfBlock'), BlackIs1: i.get('BlackIs1'), }); } readBlock() { for (; !this.eof; ) { const e = this.ccittFaxDecoder.readNextChar(); if (-1 === e) { this.eof = !0; return; } this.ensureBuffer(this.bufferLength + 1); this.buffer[this.bufferLength++] = e; } } } const vt = new Int32Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15, ]), Tt = new Int32Array([ 3, 4, 5, 6, 7, 8, 9, 10, 65547, 65549, 65551, 65553, 131091, 131095, 131099, 131103, 196643, 196651, 196659, 196667, 262211, 262227, 262243, 262259, 327811, 327843, 327875, 327907, 258, 258, 258, ]), Kt = new Int32Array([ 1, 2, 3, 4, 65541, 65543, 131081, 131085, 196625, 196633, 262177, 262193, 327745, 327777, 393345, 393409, 459009, 459137, 524801, 525057, 590849, 591361, 657409, 658433, 724993, 727041, 794625, 798721, 868353, 876545, ]), qt = [ new Int32Array([ 459008, 524368, 524304, 524568, 459024, 524400, 524336, 590016, 459016, 524384, 524320, 589984, 524288, 524416, 524352, 590048, 459012, 524376, 524312, 589968, 459028, 524408, 524344, 590032, 459020, 524392, 524328, 59e4, 524296, 524424, 524360, 590064, 459010, 524372, 524308, 524572, 459026, 524404, 524340, 590024, 459018, 524388, 524324, 589992, 524292, 524420, 524356, 590056, 459014, 524380, 524316, 589976, 459030, 524412, 524348, 590040, 459022, 524396, 524332, 590008, 524300, 524428, 524364, 590072, 459009, 524370, 524306, 524570, 459025, 524402, 524338, 590020, 459017, 524386, 524322, 589988, 524290, 524418, 524354, 590052, 459013, 524378, 524314, 589972, 459029, 524410, 524346, 590036, 459021, 524394, 524330, 590004, 524298, 524426, 524362, 590068, 459011, 524374, 524310, 524574, 459027, 524406, 524342, 590028, 459019, 524390, 524326, 589996, 524294, 524422, 524358, 590060, 459015, 524382, 524318, 589980, 459031, 524414, 524350, 590044, 459023, 524398, 524334, 590012, 524302, 524430, 524366, 590076, 459008, 524369, 524305, 524569, 459024, 524401, 524337, 590018, 459016, 524385, 524321, 589986, 524289, 524417, 524353, 590050, 459012, 524377, 524313, 589970, 459028, 524409, 524345, 590034, 459020, 524393, 524329, 590002, 524297, 524425, 524361, 590066, 459010, 524373, 524309, 524573, 459026, 524405, 524341, 590026, 459018, 524389, 524325, 589994, 524293, 524421, 524357, 590058, 459014, 524381, 524317, 589978, 459030, 524413, 524349, 590042, 459022, 524397, 524333, 590010, 524301, 524429, 524365, 590074, 459009, 524371, 524307, 524571, 459025, 524403, 524339, 590022, 459017, 524387, 524323, 589990, 524291, 524419, 524355, 590054, 459013, 524379, 524315, 589974, 459029, 524411, 524347, 590038, 459021, 524395, 524331, 590006, 524299, 524427, 524363, 590070, 459011, 524375, 524311, 524575, 459027, 524407, 524343, 590030, 459019, 524391, 524327, 589998, 524295, 524423, 524359, 590062, 459015, 524383, 524319, 589982, 459031, 524415, 524351, 590046, 459023, 524399, 524335, 590014, 524303, 524431, 524367, 590078, 459008, 524368, 524304, 524568, 459024, 524400, 524336, 590017, 459016, 524384, 524320, 589985, 524288, 524416, 524352, 590049, 459012, 524376, 524312, 589969, 459028, 524408, 524344, 590033, 459020, 524392, 524328, 590001, 524296, 524424, 524360, 590065, 459010, 524372, 524308, 524572, 459026, 524404, 524340, 590025, 459018, 524388, 524324, 589993, 524292, 524420, 524356, 590057, 459014, 524380, 524316, 589977, 459030, 524412, 524348, 590041, 459022, 524396, 524332, 590009, 524300, 524428, 524364, 590073, 459009, 524370, 524306, 524570, 459025, 524402, 524338, 590021, 459017, 524386, 524322, 589989, 524290, 524418, 524354, 590053, 459013, 524378, 524314, 589973, 459029, 524410, 524346, 590037, 459021, 524394, 524330, 590005, 524298, 524426, 524362, 590069, 459011, 524374, 524310, 524574, 459027, 524406, 524342, 590029, 459019, 524390, 524326, 589997, 524294, 524422, 524358, 590061, 459015, 524382, 524318, 589981, 459031, 524414, 524350, 590045, 459023, 524398, 524334, 590013, 524302, 524430, 524366, 590077, 459008, 524369, 524305, 524569, 459024, 524401, 524337, 590019, 459016, 524385, 524321, 589987, 524289, 524417, 524353, 590051, 459012, 524377, 524313, 589971, 459028, 524409, 524345, 590035, 459020, 524393, 524329, 590003, 524297, 524425, 524361, 590067, 459010, 524373, 524309, 524573, 459026, 524405, 524341, 590027, 459018, 524389, 524325, 589995, 524293, 524421, 524357, 590059, 459014, 524381, 524317, 589979, 459030, 524413, 524349, 590043, 459022, 524397, 524333, 590011, 524301, 524429, 524365, 590075, 459009, 524371, 524307, 524571, 459025, 524403, 524339, 590023, 459017, 524387, 524323, 589991, 524291, 524419, 524355, 590055, 459013, 524379, 524315, 589975, 459029, 524411, 524347, 590039, 459021, 524395, 524331, 590007, 524299, 524427, 524363, 590071, 459011, 524375, 524311, 524575, 459027, 524407, 524343, 590031, 459019, 524391, 524327, 589999, 524295, 524423, 524359, 590063, 459015, 524383, 524319, 589983, 459031, 524415, 524351, 590047, 459023, 524399, 524335, 590015, 524303, 524431, 524367, 590079, ]), 9, ], Ot = [ new Int32Array([ 327680, 327696, 327688, 327704, 327684, 327700, 327692, 327708, 327682, 327698, 327690, 327706, 327686, 327702, 327694, 0, 327681, 327697, 327689, 327705, 327685, 327701, 327693, 327709, 327683, 327699, 327691, 327707, 327687, 327703, 327695, 0, ]), 5, ]; class FlateStream extends DecodeStream { constructor(e, t) { super(t); this.str = e; this.dict = e.dict; const i = e.getByte(), a = e.getByte(); if (-1 === i || -1 === a) throw new FormatError(`Invalid header in flate stream: ${i}, ${a}`); if (8 != (15 & i)) throw new FormatError( `Unknown compression method in flate stream: ${i}, ${a}`, ); if (((i << 8) + a) % 31 != 0) throw new FormatError(`Bad FCHECK in flate stream: ${i}, ${a}`); if (32 & a) throw new FormatError(`FDICT bit set in flate stream: ${i}, ${a}`); this.codeSize = 0; this.codeBuf = 0; } async getImageData(e, t) { const i = await this.asyncGetBytes(); return i?.subarray(0, e) || this.getBytes(e); } async asyncGetBytes() { this.str.reset(); const e = this.str.getBytes(); try { const { readable: t, writable: i } = new DecompressionStream('deflate'), a = i.getWriter(); a.write(e); a.close(); const r = []; let s = 0; for await (const e of t) { r.push(e); s += e.byteLength; } const n = new Uint8Array(s); let o = 0; for (const e of r) { n.set(e, o); o += e.byteLength; } return n; } catch { this.str = new Stream(e, 2, e.length, this.str.dict); this.reset(); return null; } } get isAsync() { return !0; } getBits(e) { const t = this.str; let i, a = this.codeSize, r = this.codeBuf; for (; a < e; ) { if (-1 === (i = t.getByte())) throw new FormatError('Bad encoding in flate stream'); r |= i << a; a += 8; } i = r & ((1 << e) - 1); this.codeBuf = r >> e; this.codeSize = a -= e; return i; } getCode(e) { const t = this.str, i = e[0], a = e[1]; let r, s = this.codeSize, n = this.codeBuf; for (; s < a && -1 !== (r = t.getByte()); ) { n |= r << s; s += 8; } const o = i[n & ((1 << a) - 1)], g = o >> 16, c = 65535 & o; if (g < 1 || s < g) throw new FormatError('Bad encoding in flate stream'); this.codeBuf = n >> g; this.codeSize = s - g; return c; } generateHuffmanTable(e) { const t = e.length; let i, a = 0; for (i = 0; i < t; ++i) e[i] > a && (a = e[i]); const r = 1 << a, s = new Int32Array(r); for (let n = 1, o = 0, g = 2; n <= a; ++n, o <<= 1, g <<= 1) for (let a = 0; a < t; ++a) if (e[a] === n) { let e = 0, t = o; for (i = 0; i < n; ++i) { e = (e << 1) | (1 & t); t >>= 1; } for (i = e; i < r; i += g) s[i] = (n << 16) | a; ++o; } return [s, a]; } #m(e) { info(e); this.eof = !0; } readBlock() { let e, t, i; const a = this.str; try { t = this.getBits(3); } catch (e) { this.#m(e.message); return; } 1 & t && (this.eof = !0); t >>= 1; if (0 === t) { let t; if (-1 === (t = a.getByte())) { this.#m('Bad block header in flate stream'); return; } let i = t; if (-1 === (t = a.getByte())) { this.#m('Bad block header in flate stream'); return; } i |= t << 8; if (-1 === (t = a.getByte())) { this.#m('Bad block header in flate stream'); return; } let r = t; if (-1 === (t = a.getByte())) { this.#m('Bad block header in flate stream'); return; } r |= t << 8; if (r !== (65535 & ~i) && (0 !== i || 0 !== r)) throw new FormatError('Bad uncompressed block length in flate stream'); this.codeBuf = 0; this.codeSize = 0; const s = this.bufferLength, n = s + i; e = this.ensureBuffer(n); this.bufferLength = n; if (0 === i) -1 === a.peekByte() && (this.eof = !0); else { const t = a.getBytes(i); e.set(t, s); t.length < i && (this.eof = !0); } return; } let r, s; if (1 === t) { r = qt; s = Ot; } else { if (2 !== t) throw new FormatError('Unknown block type in flate stream'); { const e = this.getBits(5) + 257, t = this.getBits(5) + 1, a = this.getBits(4) + 4, n = new Uint8Array(vt.length); let o; for (o = 0; o < a; ++o) n[vt[o]] = this.getBits(3); const g = this.generateHuffmanTable(n); i = 0; o = 0; const c = e + t, C = new Uint8Array(c); let h, l, Q; for (; o < c; ) { const e = this.getCode(g); if (16 === e) { h = 2; l = 3; Q = i; } else if (17 === e) { h = 3; l = 3; Q = i = 0; } else { if (18 !== e) { C[o++] = i = e; continue; } h = 7; l = 11; Q = i = 0; } let t = this.getBits(h) + l; for (; t-- > 0; ) C[o++] = Q; } r = this.generateHuffmanTable(C.subarray(0, e)); s = this.generateHuffmanTable(C.subarray(e, c)); } } e = this.buffer; let n = e ? e.length : 0, o = this.bufferLength; for (;;) { let t = this.getCode(r); if (t < 256) { if (o + 1 >= n) { e = this.ensureBuffer(o + 1); n = e.length; } e[o++] = t; continue; } if (256 === t) { this.bufferLength = o; return; } t -= 257; t = Tt[t]; let a = t >> 16; a > 0 && (a = this.getBits(a)); i = (65535 & t) + a; t = this.getCode(s); t = Kt[t]; a = t >> 16; a > 0 && (a = this.getBits(a)); const g = (65535 & t) + a; if (o + i >= n) { e = this.ensureBuffer(o + i); n = e.length; } for (let t = 0; t < i; ++t, ++o) e[o] = e[o - g]; } } } const Pt = [ { qe: 22017, nmps: 1, nlps: 1, switchFlag: 1 }, { qe: 13313, nmps: 2, nlps: 6, switchFlag: 0 }, { qe: 6145, nmps: 3, nlps: 9, switchFlag: 0 }, { qe: 2753, nmps: 4, nlps: 12, switchFlag: 0 }, { qe: 1313, nmps: 5, nlps: 29, switchFlag: 0 }, { qe: 545, nmps: 38, nlps: 33, switchFlag: 0 }, { qe: 22017, nmps: 7, nlps: 6, switchFlag: 1 }, { qe: 21505, nmps: 8, nlps: 14, switchFlag: 0 }, { qe: 18433, nmps: 9, nlps: 14, switchFlag: 0 }, { qe: 14337, nmps: 10, nlps: 14, switchFlag: 0 }, { qe: 12289, nmps: 11, nlps: 17, switchFlag: 0 }, { qe: 9217, nmps: 12, nlps: 18, switchFlag: 0 }, { qe: 7169, nmps: 13, nlps: 20, switchFlag: 0 }, { qe: 5633, nmps: 29, nlps: 21, switchFlag: 0 }, { qe: 22017, nmps: 15, nlps: 14, switchFlag: 1 }, { qe: 21505, nmps: 16, nlps: 14, switchFlag: 0 }, { qe: 20737, nmps: 17, nlps: 15, switchFlag: 0 }, { qe: 18433, nmps: 18, nlps: 16, switchFlag: 0 }, { qe: 14337, nmps: 19, nlps: 17, switchFlag: 0 }, { qe: 13313, nmps: 20, nlps: 18, switchFlag: 0 }, { qe: 12289, nmps: 21, nlps: 19, switchFlag: 0 }, { qe: 10241, nmps: 22, nlps: 19, switchFlag: 0 }, { qe: 9217, nmps: 23, nlps: 20, switchFlag: 0 }, { qe: 8705, nmps: 24, nlps: 21, switchFlag: 0 }, { qe: 7169, nmps: 25, nlps: 22, switchFlag: 0 }, { qe: 6145, nmps: 26, nlps: 23, switchFlag: 0 }, { qe: 5633, nmps: 27, nlps: 24, switchFlag: 0 }, { qe: 5121, nmps: 28, nlps: 25, switchFlag: 0 }, { qe: 4609, nmps: 29, nlps: 26, switchFlag: 0 }, { qe: 4353, nmps: 30, nlps: 27, switchFlag: 0 }, { qe: 2753, nmps: 31, nlps: 28, switchFlag: 0 }, { qe: 2497, nmps: 32, nlps: 29, switchFlag: 0 }, { qe: 2209, nmps: 33, nlps: 30, switchFlag: 0 }, { qe: 1313, nmps: 34, nlps: 31, switchFlag: 0 }, { qe: 1089, nmps: 35, nlps: 32, switchFlag: 0 }, { qe: 673, nmps: 36, nlps: 33, switchFlag: 0 }, { qe: 545, nmps: 37, nlps: 34, switchFlag: 0 }, { qe: 321, nmps: 38, nlps: 35, switchFlag: 0 }, { qe: 273, nmps: 39, nlps: 36, switchFlag: 0 }, { qe: 133, nmps: 40, nlps: 37, switchFlag: 0 }, { qe: 73, nmps: 41, nlps: 38, switchFlag: 0 }, { qe: 37, nmps: 42, nlps: 39, switchFlag: 0 }, { qe: 21, nmps: 43, nlps: 40, switchFlag: 0 }, { qe: 9, nmps: 44, nlps: 41, switchFlag: 0 }, { qe: 5, nmps: 45, nlps: 42, switchFlag: 0 }, { qe: 1, nmps: 45, nlps: 43, switchFlag: 0 }, { qe: 22017, nmps: 46, nlps: 46, switchFlag: 0 }, ]; class ArithmeticDecoder { constructor(e, t, i) { this.data = e; this.bp = t; this.dataEnd = i; this.chigh = e[t]; this.clow = 0; this.byteIn(); this.chigh = ((this.chigh << 7) & 65535) | ((this.clow >> 9) & 127); this.clow = (this.clow << 7) & 65535; this.ct -= 7; this.a = 32768; } byteIn() { const e = this.data; let t = this.bp; if (255 === e[t]) if (e[t + 1] > 143) { this.clow += 65280; this.ct = 8; } else { t++; this.clow += e[t] << 9; this.ct = 7; this.bp = t; } else { t++; this.clow += t < this.dataEnd ? e[t] << 8 : 65280; this.ct = 8; this.bp = t; } if (this.clow > 65535) { this.chigh += this.clow >> 16; this.clow &= 65535; } } readBit(e, t) { let i = e[t] >> 1, a = 1 & e[t]; const r = Pt[i], s = r.qe; let n, o = this.a - s; if (this.chigh < s) if (o < s) { o = s; n = a; i = r.nmps; } else { o = s; n = 1 ^ a; 1 === r.switchFlag && (a = n); i = r.nlps; } else { this.chigh -= s; if (0 != (32768 & o)) { this.a = o; return a; } if (o < s) { n = 1 ^ a; 1 === r.switchFlag && (a = n); i = r.nlps; } else { n = a; i = r.nmps; } } do { 0 === this.ct && this.byteIn(); o <<= 1; this.chigh = ((this.chigh << 1) & 65535) | ((this.clow >> 15) & 1); this.clow = (this.clow << 1) & 65535; this.ct--; } while (0 == (32768 & o)); this.a = o; e[t] = (i << 1) | a; return n; } } class Jbig2Error extends ot { constructor(e) { super(e, 'Jbig2Error'); } } class ContextCache { getContexts(e) { return e in this ? this[e] : (this[e] = new Int8Array(65536)); } } class DecodingContext { constructor(e, t, i) { this.data = e; this.start = t; this.end = i; } get decoder() { return shadow( this, 'decoder', new ArithmeticDecoder(this.data, this.start, this.end), ); } get contextCache() { return shadow(this, 'contextCache', new ContextCache()); } } const Wt = 2 ** 31 - 1, jt = -(2 ** 31); function decodeInteger(e, t, i) { const a = e.getContexts(t); let r = 1; function readBits(e) { let t = 0; for (let s = 0; s < e; s++) { const e = i.readBit(a, r); r = r < 256 ? (r << 1) | e : (511 & ((r << 1) | e)) | 256; t = (t << 1) | e; } return t >>> 0; } const s = readBits(1), n = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2); let o; 0 === s ? (o = n) : n > 0 && (o = -n); return o >= jt && o <= Wt ? o : null; } function decodeIAID(e, t, i) { const a = e.getContexts('IAID'); let r = 1; for (let e = 0; e < i; e++) { r = (r << 1) | t.readBit(a, r); } return i < 31 ? r & ((1 << i) - 1) : 2147483647 & r; } const Xt = [ 'SymbolDictionary', null, null, null, 'IntermediateTextRegion', null, 'ImmediateTextRegion', 'ImmediateLosslessTextRegion', null, null, null, null, null, null, null, null, 'PatternDictionary', null, null, null, 'IntermediateHalftoneRegion', null, 'ImmediateHalftoneRegion', 'ImmediateLosslessHalftoneRegion', null, null, null, null, null, null, null, null, null, null, null, null, 'IntermediateGenericRegion', null, 'ImmediateGenericRegion', 'ImmediateLosslessGenericRegion', 'IntermediateGenericRefinementRegion', null, 'ImmediateGenericRefinementRegion', 'ImmediateLosslessGenericRefinementRegion', null, null, null, null, 'PageInformation', 'EndOfPage', 'EndOfStripe', 'EndOfFile', 'Profiles', 'Tables', null, null, null, null, null, null, null, null, 'Extension', ], Zt = [ [ { x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: 2, y: -1 }, { x: -4, y: 0 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }, ], [ { x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: 2, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: 2, y: -1 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }, ], [ { x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -2, y: 0 }, { x: -1, y: 0 }, ], [ { x: -3, y: -1 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -4, y: 0 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }, ], ], Vt = [ { coding: [ { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }, ], reference: [ { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }, { x: 0, y: 0 }, { x: 1, y: 0 }, { x: -1, y: 1 }, { x: 0, y: 1 }, { x: 1, y: 1 }, ], }, { coding: [ { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }, ], reference: [ { x: 0, y: -1 }, { x: -1, y: 0 }, { x: 0, y: 0 }, { x: 1, y: 0 }, { x: 0, y: 1 }, { x: 1, y: 1 }, ], }, ], _t = [39717, 1941, 229, 405], zt = [32, 8]; function decodeBitmap(e, t, i, a, r, s, n, o) { if (e) { return decodeMMRBitmap(new Reader(o.data, o.start, o.end), t, i, !1); } if ( 0 === a && !s && !r && 4 === n.length && 3 === n[0].x && -1 === n[0].y && -3 === n[1].x && -1 === n[1].y && 2 === n[2].x && -2 === n[2].y && -2 === n[3].x && -2 === n[3].y ) return (function decodeBitmapTemplate0(e, t, i) { const a = i.decoder, r = i.contextCache.getContexts('GB'), s = []; let n, o, g, c, C, h, l; for (o = 0; o < t; o++) { C = s[o] = new Uint8Array(e); h = o < 1 ? C : s[o - 1]; l = o < 2 ? C : s[o - 2]; n = (l[0] << 13) | (l[1] << 12) | (l[2] << 11) | (h[0] << 7) | (h[1] << 6) | (h[2] << 5) | (h[3] << 4); for (g = 0; g < e; g++) { C[g] = c = a.readBit(r, n); n = ((31735 & n) << 1) | (g + 3 < e ? l[g + 3] << 11 : 0) | (g + 4 < e ? h[g + 4] << 4 : 0) | c; } } return s; })(t, i, o); const g = !!s, c = Zt[a].concat(n); c.sort(function (e, t) { return e.y - t.y || e.x - t.x; }); const C = c.length, h = new Int8Array(C), l = new Int8Array(C), Q = []; let E, u, d = 0, f = 0, p = 0, m = 0; for (u = 0; u < C; u++) { h[u] = c[u].x; l[u] = c[u].y; f = Math.min(f, c[u].x); p = Math.max(p, c[u].x); m = Math.min(m, c[u].y); u < C - 1 && c[u].y === c[u + 1].y && c[u].x === c[u + 1].x - 1 ? (d |= 1 << (C - 1 - u)) : Q.push(u); } const y = Q.length, w = new Int8Array(y), b = new Int8Array(y), D = new Uint16Array(y); for (E = 0; E < y; E++) { u = Q[E]; w[E] = c[u].x; b[E] = c[u].y; D[E] = 1 << (C - 1 - u); } const S = -f, k = -m, R = t - p, N = _t[a]; let G = new Uint8Array(t); const x = [], U = o.decoder, M = o.contextCache.getContexts('GB'); let L, H, J, Y, v, T = 0, K = 0; for (let e = 0; e < i; e++) { if (r) { T ^= U.readBit(M, N); if (T) { x.push(G); continue; } } G = new Uint8Array(G); x.push(G); for (L = 0; L < t; L++) { if (g && s[e][L]) { G[L] = 0; continue; } if (L >= S && L < R && e >= k) { K = (K << 1) & d; for (u = 0; u < y; u++) { H = e + b[u]; J = L + w[u]; Y = x[H][J]; if (Y) { Y = D[u]; K |= Y; } } } else { K = 0; v = C - 1; for (u = 0; u < C; u++, v--) { J = L + h[u]; if (J >= 0 && J < t) { H = e + l[u]; if (H >= 0) { Y = x[H][J]; Y && (K |= Y << v); } } } } const i = U.readBit(M, K); G[L] = i; } } return x; } function decodeRefinement(e, t, i, a, r, s, n, o, g) { let c = Vt[i].coding; 0 === i && (c = c.concat([o[0]])); const C = c.length, h = new Int32Array(C), l = new Int32Array(C); let Q; for (Q = 0; Q < C; Q++) { h[Q] = c[Q].x; l[Q] = c[Q].y; } let E = Vt[i].reference; 0 === i && (E = E.concat([o[1]])); const u = E.length, d = new Int32Array(u), f = new Int32Array(u); for (Q = 0; Q < u; Q++) { d[Q] = E[Q].x; f[Q] = E[Q].y; } const p = a[0].length, m = a.length, y = zt[i], w = [], b = g.decoder, D = g.contextCache.getContexts('GR'); let S = 0; for (let i = 0; i < t; i++) { if (n) { S ^= b.readBit(D, y); if (S) throw new Jbig2Error('prediction is not supported'); } const t = new Uint8Array(e); w.push(t); for (let n = 0; n < e; n++) { let o, g, c = 0; for (Q = 0; Q < C; Q++) { o = i + l[Q]; g = n + h[Q]; o < 0 || g < 0 || g >= e ? (c <<= 1) : (c = (c << 1) | w[o][g]); } for (Q = 0; Q < u; Q++) { o = i + f[Q] - s; g = n + d[Q] - r; o < 0 || o >= m || g < 0 || g >= p ? (c <<= 1) : (c = (c << 1) | a[o][g]); } const E = b.readBit(D, c); t[n] = E; } } return w; } function decodeTextRegion( e, t, i, a, r, s, n, o, g, c, C, h, l, Q, E, u, d, f, p, ) { if (e && t) throw new Jbig2Error('refinement with Huffman is not supported'); const m = []; let y, w; for (y = 0; y < a; y++) { w = new Uint8Array(i); if (r) for (let e = 0; e < i; e++) w[e] = r; m.push(w); } const b = d.decoder, D = d.contextCache; let S = e ? -Q.tableDeltaT.decode(p) : -decodeInteger(D, 'IADT', b), k = 0; y = 0; for (; y < s; ) { S += e ? Q.tableDeltaT.decode(p) : decodeInteger(D, 'IADT', b); k += e ? Q.tableFirstS.decode(p) : decodeInteger(D, 'IAFS', b); let a = k; for (;;) { let r = 0; n > 1 && (r = e ? p.readBits(f) : decodeInteger(D, 'IAIT', b)); const s = n * S + r, k = e ? Q.symbolIDTable.decode(p) : decodeIAID(D, b, g), R = t && (e ? p.readBit() : decodeInteger(D, 'IARI', b)); let N = o[k], G = N[0].length, x = N.length; if (R) { const e = decodeInteger(D, 'IARDW', b), t = decodeInteger(D, 'IARDH', b); G += e; x += t; N = decodeRefinement( G, x, E, N, (e >> 1) + decodeInteger(D, 'IARDX', b), (t >> 1) + decodeInteger(D, 'IARDY', b), !1, u, d, ); } let U = 0; c ? 1 & h ? (U = x - 1) : (a += x - 1) : h > 1 ? (a += G - 1) : (U = G - 1); const M = s - (1 & h ? 0 : x - 1), L = a - (2 & h ? G - 1 : 0); let H, J, Y; if (c) for (H = 0; H < x; H++) { w = m[L + H]; if (!w) continue; Y = N[H]; const e = Math.min(i - M, G); switch (l) { case 0: for (J = 0; J < e; J++) w[M + J] |= Y[J]; break; case 2: for (J = 0; J < e; J++) w[M + J] ^= Y[J]; break; default: throw new Jbig2Error(`operator ${l} is not supported`); } } else for (J = 0; J < x; J++) { w = m[M + J]; if (w) { Y = N[J]; switch (l) { case 0: for (H = 0; H < G; H++) w[L + H] |= Y[H]; break; case 2: for (H = 0; H < G; H++) w[L + H] ^= Y[H]; break; default: throw new Jbig2Error(`operator ${l} is not supported`); } } } y++; const v = e ? Q.tableDeltaS.decode(p) : decodeInteger(D, 'IADS', b); if (null === v) break; a += U + v + C; } } return m; } function readSegmentHeader(e, t) { const i = {}; i.number = readUint32(e, t); const a = e[t + 4], r = 63 & a; if (!Xt[r]) throw new Jbig2Error('invalid segment type: ' + r); i.type = r; i.typeName = Xt[r]; i.deferredNonRetain = !!(128 & a); const s = !!(64 & a), n = e[t + 5]; let o = (n >> 5) & 7; const g = [31 & n]; let c = t + 6; if (7 === n) { o = 536870911 & readUint32(e, c - 1); c += 3; let t = (o + 7) >> 3; g[0] = e[c++]; for (; --t > 0; ) g.push(e[c++]); } else if (5 === n || 6 === n) throw new Jbig2Error('invalid referred-to flags'); i.retainBits = g; let C = 4; i.number <= 256 ? (C = 1) : i.number <= 65536 && (C = 2); const h = []; let l, Q; for (l = 0; l < o; l++) { let t; t = 1 === C ? e[c] : 2 === C ? readUint16(e, c) : readUint32(e, c); h.push(t); c += C; } i.referredTo = h; if (s) { i.pageAssociation = readUint32(e, c); c += 4; } else i.pageAssociation = e[c++]; i.length = readUint32(e, c); c += 4; if (4294967295 === i.length) { if (38 !== r) throw new Jbig2Error('invalid unknown segment length'); { const t = readRegionSegmentInformation(e, c), a = !!(1 & e[c + $t]), r = 6, s = new Uint8Array(r); if (!a) { s[0] = 255; s[1] = 172; } s[2] = (t.height >>> 24) & 255; s[3] = (t.height >> 16) & 255; s[4] = (t.height >> 8) & 255; s[5] = 255 & t.height; for (l = c, Q = e.length; l < Q; l++) { let t = 0; for (; t < r && s[t] === e[l + t]; ) t++; if (t === r) { i.length = l + r; break; } } if (4294967295 === i.length) throw new Jbig2Error('segment end was not found'); } } i.headerEnd = c; return i; } function readSegments(e, t, i, a) { const r = []; let s = i; for (; s < a; ) { const i = readSegmentHeader(t, s); s = i.headerEnd; const a = { header: i, data: t }; if (!e.randomAccess) { a.start = s; s += i.length; a.end = s; } r.push(a); if (51 === i.type) break; } if (e.randomAccess) for (let e = 0, t = r.length; e < t; e++) { r[e].start = s; s += r[e].header.length; r[e].end = s; } return r; } function readRegionSegmentInformation(e, t) { return { width: readUint32(e, t), height: readUint32(e, t + 4), x: readUint32(e, t + 8), y: readUint32(e, t + 12), combinationOperator: 7 & e[t + 16], }; } const $t = 17; function processSegment(e, t) { const i = e.header, a = e.data, r = e.end; let s, n, o, g, c = e.start; switch (i.type) { case 0: const e = {}, t = readUint16(a, c); e.huffman = !!(1 & t); e.refinement = !!(2 & t); e.huffmanDHSelector = (t >> 2) & 3; e.huffmanDWSelector = (t >> 4) & 3; e.bitmapSizeSelector = (t >> 6) & 1; e.aggregationInstancesSelector = (t >> 7) & 1; e.bitmapCodingContextUsed = !!(256 & t); e.bitmapCodingContextRetained = !!(512 & t); e.template = (t >> 10) & 3; e.refinementTemplate = (t >> 12) & 1; c += 2; if (!e.huffman) { g = 0 === e.template ? 4 : 1; n = []; for (o = 0; o < g; o++) { n.push({ x: readInt8(a, c), y: readInt8(a, c + 1) }); c += 2; } e.at = n; } if (e.refinement && !e.refinementTemplate) { n = []; for (o = 0; o < 2; o++) { n.push({ x: readInt8(a, c), y: readInt8(a, c + 1) }); c += 2; } e.refinementAt = n; } e.numberOfExportedSymbols = readUint32(a, c); c += 4; e.numberOfNewSymbols = readUint32(a, c); c += 4; s = [e, i.number, i.referredTo, a, c, r]; break; case 6: case 7: const C = {}; C.info = readRegionSegmentInformation(a, c); c += $t; const h = readUint16(a, c); c += 2; C.huffman = !!(1 & h); C.refinement = !!(2 & h); C.logStripSize = (h >> 2) & 3; C.stripSize = 1 << C.logStripSize; C.referenceCorner = (h >> 4) & 3; C.transposed = !!(64 & h); C.combinationOperator = (h >> 7) & 3; C.defaultPixelValue = (h >> 9) & 1; C.dsOffset = (h << 17) >> 27; C.refinementTemplate = (h >> 15) & 1; if (C.huffman) { const e = readUint16(a, c); c += 2; C.huffmanFS = 3 & e; C.huffmanDS = (e >> 2) & 3; C.huffmanDT = (e >> 4) & 3; C.huffmanRefinementDW = (e >> 6) & 3; C.huffmanRefinementDH = (e >> 8) & 3; C.huffmanRefinementDX = (e >> 10) & 3; C.huffmanRefinementDY = (e >> 12) & 3; C.huffmanRefinementSizeSelector = !!(16384 & e); } if (C.refinement && !C.refinementTemplate) { n = []; for (o = 0; o < 2; o++) { n.push({ x: readInt8(a, c), y: readInt8(a, c + 1) }); c += 2; } C.refinementAt = n; } C.numberOfSymbolInstances = readUint32(a, c); c += 4; s = [C, i.referredTo, a, c, r]; break; case 16: const l = {}, Q = a[c++]; l.mmr = !!(1 & Q); l.template = (Q >> 1) & 3; l.patternWidth = a[c++]; l.patternHeight = a[c++]; l.maxPatternIndex = readUint32(a, c); c += 4; s = [l, i.number, a, c, r]; break; case 22: case 23: const E = {}; E.info = readRegionSegmentInformation(a, c); c += $t; const u = a[c++]; E.mmr = !!(1 & u); E.template = (u >> 1) & 3; E.enableSkip = !!(8 & u); E.combinationOperator = (u >> 4) & 7; E.defaultPixelValue = (u >> 7) & 1; E.gridWidth = readUint32(a, c); c += 4; E.gridHeight = readUint32(a, c); c += 4; E.gridOffsetX = 4294967295 & readUint32(a, c); c += 4; E.gridOffsetY = 4294967295 & readUint32(a, c); c += 4; E.gridVectorX = readUint16(a, c); c += 2; E.gridVectorY = readUint16(a, c); c += 2; s = [E, i.referredTo, a, c, r]; break; case 38: case 39: const d = {}; d.info = readRegionSegmentInformation(a, c); c += $t; const f = a[c++]; d.mmr = !!(1 & f); d.template = (f >> 1) & 3; d.prediction = !!(8 & f); if (!d.mmr) { g = 0 === d.template ? 4 : 1; n = []; for (o = 0; o < g; o++) { n.push({ x: readInt8(a, c), y: readInt8(a, c + 1) }); c += 2; } d.at = n; } s = [d, a, c, r]; break; case 48: const p = { width: readUint32(a, c), height: readUint32(a, c + 4), resolutionX: readUint32(a, c + 8), resolutionY: readUint32(a, c + 12), }; 4294967295 === p.height && delete p.height; const m = a[c + 16]; readUint16(a, c + 17); p.lossless = !!(1 & m); p.refinement = !!(2 & m); p.defaultPixelValue = (m >> 2) & 1; p.combinationOperator = (m >> 3) & 3; p.requiresBuffer = !!(32 & m); p.combinationOperatorOverride = !!(64 & m); s = [p]; break; case 49: case 50: case 51: case 62: break; case 53: s = [i.number, a, c, r]; break; default: throw new Jbig2Error( `segment type ${i.typeName}(${i.type}) is not implemented`, ); } const C = 'on' + i.typeName; C in t && t[C].apply(t, s); } function processSegments(e, t) { for (let i = 0, a = e.length; i < a; i++) processSegment(e[i], t); } class SimpleSegmentVisitor { onPageInformation(e) { this.currentPageInfo = e; const t = (e.width + 7) >> 3, i = new Uint8ClampedArray(t * e.height); e.defaultPixelValue && i.fill(255); this.buffer = i; } drawBitmap(e, t) { const i = this.currentPageInfo, a = e.width, r = e.height, s = (i.width + 7) >> 3, n = i.combinationOperatorOverride ? e.combinationOperator : i.combinationOperator, o = this.buffer, g = 128 >> (7 & e.x); let c, C, h, l, Q = e.y * s + (e.x >> 3); switch (n) { case 0: for (c = 0; c < r; c++) { h = g; l = Q; for (C = 0; C < a; C++) { t[c][C] && (o[l] |= h); h >>= 1; if (!h) { h = 128; l++; } } Q += s; } break; case 2: for (c = 0; c < r; c++) { h = g; l = Q; for (C = 0; C < a; C++) { t[c][C] && (o[l] ^= h); h >>= 1; if (!h) { h = 128; l++; } } Q += s; } break; default: throw new Jbig2Error(`operator ${n} is not supported`); } } onImmediateGenericRegion(e, t, i, a) { const r = e.info, s = new DecodingContext(t, i, a), n = decodeBitmap( e.mmr, r.width, r.height, e.template, e.prediction, null, e.at, s, ); this.drawBitmap(r, n); } onImmediateLosslessGenericRegion() { this.onImmediateGenericRegion(...arguments); } onSymbolDictionary(e, t, i, a, r, s) { let n, o; if (e.huffman) { n = (function getSymbolDictionaryHuffmanTables(e, t, i) { let a, r, s, n, o = 0; switch (e.huffmanDHSelector) { case 0: case 1: a = getStandardTable(e.huffmanDHSelector + 4); break; case 3: a = getCustomHuffmanTable(o, t, i); o++; break; default: throw new Jbig2Error('invalid Huffman DH selector'); } switch (e.huffmanDWSelector) { case 0: case 1: r = getStandardTable(e.huffmanDWSelector + 2); break; case 3: r = getCustomHuffmanTable(o, t, i); o++; break; default: throw new Jbig2Error('invalid Huffman DW selector'); } if (e.bitmapSizeSelector) { s = getCustomHuffmanTable(o, t, i); o++; } else s = getStandardTable(1); n = e.aggregationInstancesSelector ? getCustomHuffmanTable(o, t, i) : getStandardTable(1); return { tableDeltaHeight: a, tableDeltaWidth: r, tableBitmapSize: s, tableAggregateInstances: n, }; })(e, i, this.customTables); o = new Reader(a, r, s); } let g = this.symbols; g || (this.symbols = g = {}); const c = []; for (const e of i) { const t = g[e]; t && c.push(...t); } const C = new DecodingContext(a, r, s); g[t] = (function decodeSymbolDictionary( e, t, i, a, r, s, n, o, g, c, C, h, ) { if (e && t) throw new Jbig2Error('symbol refinement with Huffman is not supported'); const l = []; let Q = 0, E = log2(i.length + a); const u = C.decoder, d = C.contextCache; let f, p; if (e) { f = getStandardTable(1); p = []; E = Math.max(E, 1); } for (; l.length < a; ) { Q += e ? s.tableDeltaHeight.decode(h) : decodeInteger(d, 'IADH', u); let a = 0, r = 0; const f = e ? p.length : 0; for (;;) { const f = e ? s.tableDeltaWidth.decode(h) : decodeInteger(d, 'IADW', u); if (null === f) break; a += f; r += a; let m; if (t) { const r = decodeInteger(d, 'IAAI', u); if (r > 1) m = decodeTextRegion( e, t, a, Q, 0, r, 1, i.concat(l), E, 0, 0, 1, 0, s, g, c, C, 0, h, ); else { const e = decodeIAID(d, u, E), t = decodeInteger(d, 'IARDX', u), r = decodeInteger(d, 'IARDY', u); m = decodeRefinement( a, Q, g, e < i.length ? i[e] : l[e - i.length], t, r, !1, c, C, ); } l.push(m); } else if (e) p.push(a); else { m = decodeBitmap(!1, a, Q, n, !1, null, o, C); l.push(m); } } if (e && !t) { const e = s.tableBitmapSize.decode(h); h.byteAlign(); let t; if (0 === e) t = readUncompressedBitmap(h, r, Q); else { const i = h.end, a = h.position + e; h.end = a; t = decodeMMRBitmap(h, r, Q, !1); h.end = i; h.position = a; } const i = p.length; if (f === i - 1) l.push(t); else { let e, a, r, s, n, o = 0; for (e = f; e < i; e++) { s = p[e]; r = o + s; n = []; for (a = 0; a < Q; a++) n.push(t[a].subarray(o, r)); l.push(n); o = r; } } } } const m = [], y = []; let w, b, D = !1; const S = i.length + a; for (; y.length < S; ) { let t = e ? f.decode(h) : decodeInteger(d, 'IAEX', u); for (; t--; ) y.push(D); D = !D; } for (w = 0, b = i.length; w < b; w++) y[w] && m.push(i[w]); for (let e = 0; e < a; w++, e++) y[w] && m.push(l[e]); return m; })( e.huffman, e.refinement, c, e.numberOfNewSymbols, e.numberOfExportedSymbols, n, e.template, e.at, e.refinementTemplate, e.refinementAt, C, o, ); } onImmediateTextRegion(e, t, i, a, r) { const s = e.info; let n, o; const g = this.symbols, c = []; for (const e of t) { const t = g[e]; t && c.push(...t); } const C = log2(c.length); if (e.huffman) { o = new Reader(i, a, r); n = (function getTextRegionHuffmanTables(e, t, i, a, r) { const s = []; for (let e = 0; e <= 34; e++) { const t = r.readBits(4); s.push(new HuffmanLine([e, t, 0, 0])); } const n = new HuffmanTable(s, !1); s.length = 0; for (let e = 0; e < a; ) { const t = n.decode(r); if (t >= 32) { let i, a, n; switch (t) { case 32: if (0 === e) throw new Jbig2Error('no previous value in symbol ID table'); a = r.readBits(2) + 3; i = s[e - 1].prefixLength; break; case 33: a = r.readBits(3) + 3; i = 0; break; case 34: a = r.readBits(7) + 11; i = 0; break; default: throw new Jbig2Error('invalid code length in symbol ID table'); } for (n = 0; n < a; n++) { s.push(new HuffmanLine([e, i, 0, 0])); e++; } } else { s.push(new HuffmanLine([e, t, 0, 0])); e++; } } r.byteAlign(); const o = new HuffmanTable(s, !1); let g, c, C, h = 0; switch (e.huffmanFS) { case 0: case 1: g = getStandardTable(e.huffmanFS + 6); break; case 3: g = getCustomHuffmanTable(h, t, i); h++; break; default: throw new Jbig2Error('invalid Huffman FS selector'); } switch (e.huffmanDS) { case 0: case 1: case 2: c = getStandardTable(e.huffmanDS + 8); break; case 3: c = getCustomHuffmanTable(h, t, i); h++; break; default: throw new Jbig2Error('invalid Huffman DS selector'); } switch (e.huffmanDT) { case 0: case 1: case 2: C = getStandardTable(e.huffmanDT + 11); break; case 3: C = getCustomHuffmanTable(h, t, i); h++; break; default: throw new Jbig2Error('invalid Huffman DT selector'); } if (e.refinement) throw new Jbig2Error('refinement with Huffman is not supported'); return { symbolIDTable: o, tableFirstS: g, tableDeltaS: c, tableDeltaT: C, }; })(e, t, this.customTables, c.length, o); } const h = new DecodingContext(i, a, r), l = decodeTextRegion( e.huffman, e.refinement, s.width, s.height, e.defaultPixelValue, e.numberOfSymbolInstances, e.stripSize, c, C, e.transposed, e.dsOffset, e.referenceCorner, e.combinationOperator, n, e.refinementTemplate, e.refinementAt, h, e.logStripSize, o, ); this.drawBitmap(s, l); } onImmediateLosslessTextRegion() { this.onImmediateTextRegion(...arguments); } onPatternDictionary(e, t, i, a, r) { let s = this.patterns; s || (this.patterns = s = {}); const n = new DecodingContext(i, a, r); s[t] = (function decodePatternDictionary(e, t, i, a, r, s) { const n = []; if (!e) { n.push({ x: -t, y: 0 }); 0 === r && n.push({ x: -3, y: -1 }, { x: 2, y: -2 }, { x: -2, y: -2 }); } const o = decodeBitmap(e, (a + 1) * t, i, r, !1, null, n, s), g = []; for (let e = 0; e <= a; e++) { const a = [], r = t * e, s = r + t; for (let e = 0; e < i; e++) a.push(o[e].subarray(r, s)); g.push(a); } return g; })( e.mmr, e.patternWidth, e.patternHeight, e.maxPatternIndex, e.template, n, ); } onImmediateHalftoneRegion(e, t, i, a, r) { const s = this.patterns[t[0]], n = e.info, o = new DecodingContext(i, a, r), g = (function decodeHalftoneRegion( e, t, i, a, r, s, n, o, g, c, C, h, l, Q, E, ) { if (n) throw new Jbig2Error('skip is not supported'); if (0 !== o) throw new Jbig2Error( `operator "${o}" is not supported in halftone region`, ); const u = []; let d, f, p; for (d = 0; d < r; d++) { p = new Uint8Array(a); if (s) for (f = 0; f < a; f++) p[f] = s; u.push(p); } const m = t.length, y = t[0], w = y[0].length, b = y.length, D = log2(m), S = []; if (!e) { S.push({ x: i <= 1 ? 3 : 2, y: -1 }); 0 === i && S.push({ x: -3, y: -1 }, { x: 2, y: -2 }, { x: -2, y: -2 }); } const k = []; let R, N, G, x, U, M, L, H, J, Y, v; e && (R = new Reader(E.data, E.start, E.end)); for (d = D - 1; d >= 0; d--) { N = e ? decodeMMRBitmap(R, g, c, !0) : decodeBitmap(!1, g, c, i, !1, null, S, E); k[d] = N; } for (G = 0; G < c; G++) for (x = 0; x < g; x++) { U = 0; M = 0; for (f = D - 1; f >= 0; f--) { U ^= k[f][G][x]; M |= U << f; } L = t[M]; H = (C + G * Q + x * l) >> 8; J = (h + G * l - x * Q) >> 8; if (H >= 0 && H + w <= a && J >= 0 && J + b <= r) for (d = 0; d < b; d++) { v = u[J + d]; Y = L[d]; for (f = 0; f < w; f++) v[H + f] |= Y[f]; } else { let e, t; for (d = 0; d < b; d++) { t = J + d; if (!(t < 0 || t >= r)) { v = u[t]; Y = L[d]; for (f = 0; f < w; f++) { e = H + f; e >= 0 && e < a && (v[e] |= Y[f]); } } } } } return u; })( e.mmr, s, e.template, n.width, n.height, e.defaultPixelValue, e.enableSkip, e.combinationOperator, e.gridWidth, e.gridHeight, e.gridOffsetX, e.gridOffsetY, e.gridVectorX, e.gridVectorY, o, ); this.drawBitmap(n, g); } onImmediateLosslessHalftoneRegion() { this.onImmediateHalftoneRegion(...arguments); } onTables(e, t, i, a) { let r = this.customTables; r || (this.customTables = r = {}); r[e] = (function decodeTablesSegment(e, t, i) { const a = e[t], r = 4294967295 & readUint32(e, t + 1), s = 4294967295 & readUint32(e, t + 5), n = new Reader(e, t + 9, i), o = 1 + ((a >> 1) & 7), g = 1 + ((a >> 4) & 7), c = []; let C, h, l = r; do { C = n.readBits(o); h = n.readBits(g); c.push(new HuffmanLine([l, C, h, 0])); l += 1 << h; } while (l < s); C = n.readBits(o); c.push(new HuffmanLine([r - 1, C, 32, 0, 'lower'])); C = n.readBits(o); c.push(new HuffmanLine([s, C, 32, 0])); if (1 & a) { C = n.readBits(o); c.push(new HuffmanLine([C, 0])); } return new HuffmanTable(c, !1); })(t, i, a); } } class HuffmanLine { constructor(e) { if (2 === e.length) { this.isOOB = !0; this.rangeLow = 0; this.prefixLength = e[0]; this.rangeLength = 0; this.prefixCode = e[1]; this.isLowerRange = !1; } else { this.isOOB = !1; this.rangeLow = e[0]; this.prefixLength = e[1]; this.rangeLength = e[2]; this.prefixCode = e[3]; this.isLowerRange = 'lower' === e[4]; } } } class HuffmanTreeNode { constructor(e) { this.children = []; if (e) { this.isLeaf = !0; this.rangeLength = e.rangeLength; this.rangeLow = e.rangeLow; this.isLowerRange = e.isLowerRange; this.isOOB = e.isOOB; } else this.isLeaf = !1; } buildTree(e, t) { const i = (e.prefixCode >> t) & 1; if (t <= 0) this.children[i] = new HuffmanTreeNode(e); else { let a = this.children[i]; a || (this.children[i] = a = new HuffmanTreeNode(null)); a.buildTree(e, t - 1); } } decodeNode(e) { if (this.isLeaf) { if (this.isOOB) return null; const t = e.readBits(this.rangeLength); return this.rangeLow + (this.isLowerRange ? -t : t); } const t = this.children[e.readBit()]; if (!t) throw new Jbig2Error('invalid Huffman data'); return t.decodeNode(e); } } class HuffmanTable { constructor(e, t) { t || this.assignPrefixCodes(e); this.rootNode = new HuffmanTreeNode(null); for (let t = 0, i = e.length; t < i; t++) { const i = e[t]; i.prefixLength > 0 && this.rootNode.buildTree(i, i.prefixLength - 1); } } decode(e) { return this.rootNode.decodeNode(e); } assignPrefixCodes(e) { const t = e.length; let i = 0; for (let a = 0; a < t; a++) i = Math.max(i, e[a].prefixLength); const a = new Uint32Array(i + 1); for (let i = 0; i < t; i++) a[e[i].prefixLength]++; let r, s, n, o = 1, g = 0; a[0] = 0; for (; o <= i; ) { g = (g + a[o - 1]) << 1; r = g; s = 0; for (; s < t; ) { n = e[s]; if (n.prefixLength === o) { n.prefixCode = r; r++; } s++; } o++; } } } const Ai = {}; function getStandardTable(e) { let t, i = Ai[e]; if (i) return i; switch (e) { case 1: t = [ [0, 1, 4, 0], [16, 2, 8, 2], [272, 3, 16, 6], [65808, 3, 32, 7], ]; break; case 2: t = [ [0, 1, 0, 0], [1, 2, 0, 2], [2, 3, 0, 6], [3, 4, 3, 14], [11, 5, 6, 30], [75, 6, 32, 62], [6, 63], ]; break; case 3: t = [ [-256, 8, 8, 254], [0, 1, 0, 0], [1, 2, 0, 2], [2, 3, 0, 6], [3, 4, 3, 14], [11, 5, 6, 30], [-257, 8, 32, 255, 'lower'], [75, 7, 32, 126], [6, 62], ]; break; case 4: t = [ [1, 1, 0, 0], [2, 2, 0, 2], [3, 3, 0, 6], [4, 4, 3, 14], [12, 5, 6, 30], [76, 5, 32, 31], ]; break; case 5: t = [ [-255, 7, 8, 126], [1, 1, 0, 0], [2, 2, 0, 2], [3, 3, 0, 6], [4, 4, 3, 14], [12, 5, 6, 30], [-256, 7, 32, 127, 'lower'], [76, 6, 32, 62], ]; break; case 6: t = [ [-2048, 5, 10, 28], [-1024, 4, 9, 8], [-512, 4, 8, 9], [-256, 4, 7, 10], [-128, 5, 6, 29], [-64, 5, 5, 30], [-32, 4, 5, 11], [0, 2, 7, 0], [128, 3, 7, 2], [256, 3, 8, 3], [512, 4, 9, 12], [1024, 4, 10, 13], [-2049, 6, 32, 62, 'lower'], [2048, 6, 32, 63], ]; break; case 7: t = [ [-1024, 4, 9, 8], [-512, 3, 8, 0], [-256, 4, 7, 9], [-128, 5, 6, 26], [-64, 5, 5, 27], [-32, 4, 5, 10], [0, 4, 5, 11], [32, 5, 5, 28], [64, 5, 6, 29], [128, 4, 7, 12], [256, 3, 8, 1], [512, 3, 9, 2], [1024, 3, 10, 3], [-1025, 5, 32, 30, 'lower'], [2048, 5, 32, 31], ]; break; case 8: t = [ [-15, 8, 3, 252], [-7, 9, 1, 508], [-5, 8, 1, 253], [-3, 9, 0, 509], [-2, 7, 0, 124], [-1, 4, 0, 10], [0, 2, 1, 0], [2, 5, 0, 26], [3, 6, 0, 58], [4, 3, 4, 4], [20, 6, 1, 59], [22, 4, 4, 11], [38, 4, 5, 12], [70, 5, 6, 27], [134, 5, 7, 28], [262, 6, 7, 60], [390, 7, 8, 125], [646, 6, 10, 61], [-16, 9, 32, 510, 'lower'], [1670, 9, 32, 511], [2, 1], ]; break; case 9: t = [ [-31, 8, 4, 252], [-15, 9, 2, 508], [-11, 8, 2, 253], [-7, 9, 1, 509], [-5, 7, 1, 124], [-3, 4, 1, 10], [-1, 3, 1, 2], [1, 3, 1, 3], [3, 5, 1, 26], [5, 6, 1, 58], [7, 3, 5, 4], [39, 6, 2, 59], [43, 4, 5, 11], [75, 4, 6, 12], [139, 5, 7, 27], [267, 5, 8, 28], [523, 6, 8, 60], [779, 7, 9, 125], [1291, 6, 11, 61], [-32, 9, 32, 510, 'lower'], [3339, 9, 32, 511], [2, 0], ]; break; case 10: t = [ [-21, 7, 4, 122], [-5, 8, 0, 252], [-4, 7, 0, 123], [-3, 5, 0, 24], [-2, 2, 2, 0], [2, 5, 0, 25], [3, 6, 0, 54], [4, 7, 0, 124], [5, 8, 0, 253], [6, 2, 6, 1], [70, 5, 5, 26], [102, 6, 5, 55], [134, 6, 6, 56], [198, 6, 7, 57], [326, 6, 8, 58], [582, 6, 9, 59], [1094, 6, 10, 60], [2118, 7, 11, 125], [-22, 8, 32, 254, 'lower'], [4166, 8, 32, 255], [2, 2], ]; break; case 11: t = [ [1, 1, 0, 0], [2, 2, 1, 2], [4, 4, 0, 12], [5, 4, 1, 13], [7, 5, 1, 28], [9, 5, 2, 29], [13, 6, 2, 60], [17, 7, 2, 122], [21, 7, 3, 123], [29, 7, 4, 124], [45, 7, 5, 125], [77, 7, 6, 126], [141, 7, 32, 127], ]; break; case 12: t = [ [1, 1, 0, 0], [2, 2, 0, 2], [3, 3, 1, 6], [5, 5, 0, 28], [6, 5, 1, 29], [8, 6, 1, 60], [10, 7, 0, 122], [11, 7, 1, 123], [13, 7, 2, 124], [17, 7, 3, 125], [25, 7, 4, 126], [41, 8, 5, 254], [73, 8, 32, 255], ]; break; case 13: t = [ [1, 1, 0, 0], [2, 3, 0, 4], [3, 4, 0, 12], [4, 5, 0, 28], [5, 4, 1, 13], [7, 3, 3, 5], [15, 6, 1, 58], [17, 6, 2, 59], [21, 6, 3, 60], [29, 6, 4, 61], [45, 6, 5, 62], [77, 7, 6, 126], [141, 7, 32, 127], ]; break; case 14: t = [ [-2, 3, 0, 4], [-1, 3, 0, 5], [0, 1, 0, 0], [1, 3, 0, 6], [2, 3, 0, 7], ]; break; case 15: t = [ [-24, 7, 4, 124], [-8, 6, 2, 60], [-4, 5, 1, 28], [-2, 4, 0, 12], [-1, 3, 0, 4], [0, 1, 0, 0], [1, 3, 0, 5], [2, 4, 0, 13], [3, 5, 1, 29], [5, 6, 2, 61], [9, 7, 4, 125], [-25, 7, 32, 126, 'lower'], [25, 7, 32, 127], ]; break; default: throw new Jbig2Error(`standard table B.${e} does not exist`); } for (let e = 0, i = t.length; e < i; e++) t[e] = new HuffmanLine(t[e]); i = new HuffmanTable(t, !0); Ai[e] = i; return i; } class Reader { constructor(e, t, i) { this.data = e; this.start = t; this.end = i; this.position = t; this.shift = -1; this.currentByte = 0; } readBit() { if (this.shift < 0) { if (this.position >= this.end) throw new Jbig2Error('end of data while reading bit'); this.currentByte = this.data[this.position++]; this.shift = 7; } const e = (this.currentByte >> this.shift) & 1; this.shift--; return e; } readBits(e) { let t, i = 0; for (t = e - 1; t >= 0; t--) i |= this.readBit() << t; return i; } byteAlign() { this.shift = -1; } next() { return this.position >= this.end ? -1 : this.data[this.position++]; } } function getCustomHuffmanTable(e, t, i) { let a = 0; for (let r = 0, s = t.length; r < s; r++) { const s = i[t[r]]; if (s) { if (e === a) return s; a++; } } throw new Jbig2Error("can't find custom Huffman table"); } function readUncompressedBitmap(e, t, i) { const a = []; for (let r = 0; r < i; r++) { const i = new Uint8Array(t); a.push(i); for (let a = 0; a < t; a++) i[a] = e.readBit(); e.byteAlign(); } return a; } function decodeMMRBitmap(e, t, i, a) { const r = new CCITTFaxDecoder(e, { K: -1, Columns: t, Rows: i, BlackIs1: !0, EndOfBlock: a, }), s = []; let n, o = !1; for (let e = 0; e < i; e++) { const e = new Uint8Array(t); s.push(e); let i = -1; for (let a = 0; a < t; a++) { if (i < 0) { n = r.readNextChar(); if (-1 === n) { n = 0; o = !0; } i = 7; } e[a] = (n >> i) & 1; i--; } } if (a && !o) { const e = 5; for (let t = 0; t < e && -1 !== r.readNextChar(); t++); } return s; } class Jbig2Image { parseChunks(e) { return (function parseJbig2Chunks(e) { const t = new SimpleSegmentVisitor(); for (let i = 0, a = e.length; i < a; i++) { const a = e[i]; processSegments(readSegments({}, a.data, a.start, a.end), t); } return t.buffer; })(e); } parse(e) { throw new Error('Not implemented: Jbig2Image.parse'); } } class Jbig2Stream extends DecodeStream { constructor(e, t, i) { super(t); this.stream = e; this.dict = e.dict; this.maybeLength = t; this.params = i; } get bytes() { return shadow(this, 'bytes', this.stream.getBytes(this.maybeLength)); } ensureBuffer(e) {} readBlock() { this.decodeImage(); } decodeImage(e) { if (this.eof) return this.buffer; e ||= this.bytes; const t = new Jbig2Image(), i = []; if (this.params instanceof Dict) { const e = this.params.get('JBIG2Globals'); if (e instanceof BaseStream) { const t = e.getBytes(); i.push({ data: t, start: 0, end: t.length }); } } i.push({ data: e, start: 0, end: e.length }); const a = t.parseChunks(i), r = a.length; for (let e = 0; e < r; e++) a[e] ^= 255; this.buffer = a; this.bufferLength = r; this.eof = !0; return this.buffer; } get canAsyncDecodeImageFromBuffer() { return this.stream.isAsync; } } function convertToRGBA(e) { switch (e.kind) { case D: return convertBlackAndWhiteToRGBA(e); case S: return (function convertRGBToRGBA({ src: e, srcPos: t = 0, dest: i, destPos: a = 0, width: r, height: s, }) { let n = 0; const o = e.length >> 2, g = new Uint32Array(e.buffer, t, o); if (FeatureTest.isLittleEndian) { for (; n < o - 2; n += 3, a += 4) { const e = g[n], t = g[n + 1], r = g[n + 2]; i[a] = 4278190080 | e; i[a + 1] = (e >>> 24) | (t << 8) | 4278190080; i[a + 2] = (t >>> 16) | (r << 16) | 4278190080; i[a + 3] = (r >>> 8) | 4278190080; } for (let t = 4 * n, r = e.length; t < r; t += 3) i[a++] = e[t] | (e[t + 1] << 8) | (e[t + 2] << 16) | 4278190080; } else { for (; n < o - 2; n += 3, a += 4) { const e = g[n], t = g[n + 1], r = g[n + 2]; i[a] = 255 | e; i[a + 1] = (e << 24) | (t >>> 8) | 255; i[a + 2] = (t << 16) | (r >>> 16) | 255; i[a + 3] = (r << 8) | 255; } for (let t = 4 * n, r = e.length; t < r; t += 3) i[a++] = (e[t] << 24) | (e[t + 1] << 16) | (e[t + 2] << 8) | 255; } return { srcPos: t, destPos: a }; })(e); } return null; } function convertBlackAndWhiteToRGBA({ src: e, srcPos: t = 0, dest: i, width: a, height: r, nonBlackColor: s = 4294967295, inverseDecode: n = !1, }) { const o = FeatureTest.isLittleEndian ? 4278190080 : 255, [g, c] = n ? [s, o] : [o, s], C = a >> 3, h = 7 & a, l = e.length; i = new Uint32Array(i.buffer); let Q = 0; for (let a = 0; a < r; a++) { for (const a = t + C; t < a; t++) { const a = t < l ? e[t] : 255; i[Q++] = 128 & a ? c : g; i[Q++] = 64 & a ? c : g; i[Q++] = 32 & a ? c : g; i[Q++] = 16 & a ? c : g; i[Q++] = 8 & a ? c : g; i[Q++] = 4 & a ? c : g; i[Q++] = 2 & a ? c : g; i[Q++] = 1 & a ? c : g; } if (0 === h) continue; const a = t < l ? e[t++] : 255; for (let e = 0; e < h; e++) i[Q++] = a & (1 << (7 - e)) ? c : g; } return { srcPos: t, destPos: Q }; } class JpegError extends ot { constructor(e) { super(e, 'JpegError'); } } class DNLMarkerError extends ot { constructor(e, t) { super(e, 'DNLMarkerError'); this.scanLines = t; } } class EOIMarkerError extends ot { constructor(e) { super(e, 'EOIMarkerError'); } } const ei = new Uint8Array([ 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63, ]), ti = 4017, ii = 799, ai = 3406, ri = 2276, si = 1567, ni = 3784, oi = 5793, gi = 2896; function buildHuffmanTable(e, t) { let i, a, r = 0, s = 16; for (; s > 0 && !e[s - 1]; ) s--; const n = [{ children: [], index: 0 }]; let o, g = n[0]; for (i = 0; i < s; i++) { for (a = 0; a < e[i]; a++) { g = n.pop(); g.children[g.index] = t[r]; for (; g.index > 0; ) g = n.pop(); g.index++; n.push(g); for (; n.length <= i; ) { n.push((o = { children: [], index: 0 })); g.children[g.index] = o.children; g = o; } r++; } if (i + 1 < s) { n.push((o = { children: [], index: 0 })); g.children[g.index] = o.children; g = o; } } return n[0].children; } function getBlockBufferOffset(e, t, i) { return 64 * ((e.blocksPerLine + 1) * t + i); } function decodeScan(e, t, i, a, r, s, n, o, g, c = !1) { const C = i.mcusPerLine, h = i.progressive, l = t; let Q = 0, E = 0; function readBit() { if (E > 0) { E--; return (Q >> E) & 1; } Q = e[t++]; if (255 === Q) { const a = e[t++]; if (a) { if (220 === a && c) { const a = readUint16(e, (t += 2)); t += 2; if (a > 0 && a !== i.scanLines) throw new DNLMarkerError( 'Found DNL marker (0xFFDC) while parsing scan data', a, ); } else if (217 === a) { if (c) { const e = p * (8 === i.precision ? 8 : 0); if (e > 0 && Math.round(i.scanLines / e) >= 5) throw new DNLMarkerError( 'Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter', e, ); } throw new EOIMarkerError( 'Found EOI marker (0xFFD9) while parsing scan data', ); } throw new JpegError(`unexpected marker ${((Q << 8) | a).toString(16)}`); } } E = 7; return Q >>> 7; } function decodeHuffman(e) { let t = e; for (;;) { t = t[readBit()]; switch (typeof t) { case 'number': return t; case 'object': continue; } throw new JpegError('invalid huffman sequence'); } } function receive(e) { let t = 0; for (; e > 0; ) { t = (t << 1) | readBit(); e--; } return t; } function receiveAndExtend(e) { if (1 === e) return 1 === readBit() ? 1 : -1; const t = receive(e); return t >= 1 << (e - 1) ? t : t + (-1 << e) + 1; } let u = 0; let d, f = 0; let p = 0; function decodeMcu(e, t, i, a, r) { const s = i % C; p = ((i / C) | 0) * e.v + a; const n = s * e.h + r; t(e, getBlockBufferOffset(e, p, n)); } function decodeBlock(e, t, i) { p = (i / e.blocksPerLine) | 0; const a = i % e.blocksPerLine; t(e, getBlockBufferOffset(e, p, a)); } const m = a.length; let y, w, b, D, S, k; k = h ? 0 === s ? 0 === o ? function decodeDCFirst(e, t) { const i = decodeHuffman(e.huffmanTableDC), a = 0 === i ? 0 : receiveAndExtend(i) << g; e.blockData[t] = e.pred += a; } : function decodeDCSuccessive(e, t) { e.blockData[t] |= readBit() << g; } : 0 === o ? function decodeACFirst(e, t) { if (u > 0) { u--; return; } let i = s; const a = n; for (; i <= a; ) { const a = decodeHuffman(e.huffmanTableAC), r = 15 & a, s = a >> 4; if (0 === r) { if (s < 15) { u = receive(s) + (1 << s) - 1; break; } i += 16; continue; } i += s; const n = ei[i]; e.blockData[t + n] = receiveAndExtend(r) * (1 << g); i++; } } : function decodeACSuccessive(e, t) { let i = s; const a = n; let r, o, c = 0; for (; i <= a; ) { const a = t + ei[i], s = e.blockData[a] < 0 ? -1 : 1; switch (f) { case 0: o = decodeHuffman(e.huffmanTableAC); r = 15 & o; c = o >> 4; if (0 === r) if (c < 15) { u = receive(c) + (1 << c); f = 4; } else { c = 16; f = 1; } else { if (1 !== r) throw new JpegError('invalid ACn encoding'); d = receiveAndExtend(r); f = c ? 2 : 3; } continue; case 1: case 2: if (e.blockData[a]) e.blockData[a] += s * (readBit() << g); else { c--; 0 === c && (f = 2 === f ? 3 : 0); } break; case 3: if (e.blockData[a]) e.blockData[a] += s * (readBit() << g); else { e.blockData[a] = d << g; f = 0; } break; case 4: e.blockData[a] && (e.blockData[a] += s * (readBit() << g)); } i++; } if (4 === f) { u--; 0 === u && (f = 0); } } : function decodeBaseline(e, t) { const i = decodeHuffman(e.huffmanTableDC), a = 0 === i ? 0 : receiveAndExtend(i); e.blockData[t] = e.pred += a; let r = 1; for (; r < 64; ) { const i = decodeHuffman(e.huffmanTableAC), a = 15 & i, s = i >> 4; if (0 === a) { if (s < 15) break; r += 16; continue; } r += s; const n = ei[r]; e.blockData[t + n] = receiveAndExtend(a); r++; } }; let R, N = 0; const G = 1 === m ? a[0].blocksPerLine * a[0].blocksPerColumn : C * i.mcusPerColumn; let x, U; for (; N <= G; ) { const i = r ? Math.min(G - N, r) : G; if (i > 0) { for (w = 0; w < m; w++) a[w].pred = 0; u = 0; if (1 === m) { y = a[0]; for (S = 0; S < i; S++) { decodeBlock(y, k, N); N++; } } else for (S = 0; S < i; S++) { for (w = 0; w < m; w++) { y = a[w]; x = y.h; U = y.v; for (b = 0; b < U; b++) for (D = 0; D < x; D++) decodeMcu(y, k, N, b, D); } N++; } } E = 0; R = findNextFileMarker(e, t); if (!R) break; if (R.invalid) { warn( `decodeScan - ${ i > 0 ? 'unexpected' : 'excessive' } MCU data, current marker is: ${R.invalid}`, ); t = R.offset; } if (!(R.marker >= 65488 && R.marker <= 65495)) break; t += 2; } return t - l; } function quantizeAndInverse(e, t, i) { const a = e.quantizationTable, r = e.blockData; let s, n, o, g, c, C, h, l, Q, E, u, d, f, p, m, y, w; if (!a) throw new JpegError('missing required Quantization Table.'); for (let e = 0; e < 64; e += 8) { Q = r[t + e]; E = r[t + e + 1]; u = r[t + e + 2]; d = r[t + e + 3]; f = r[t + e + 4]; p = r[t + e + 5]; m = r[t + e + 6]; y = r[t + e + 7]; Q *= a[e]; if (0 != (E | u | d | f | p | m | y)) { E *= a[e + 1]; u *= a[e + 2]; d *= a[e + 3]; f *= a[e + 4]; p *= a[e + 5]; m *= a[e + 6]; y *= a[e + 7]; s = (oi * Q + 128) >> 8; n = (oi * f + 128) >> 8; o = u; g = m; c = (gi * (E - y) + 128) >> 8; l = (gi * (E + y) + 128) >> 8; C = d << 4; h = p << 4; s = (s + n + 1) >> 1; n = s - n; w = (o * ni + g * si + 128) >> 8; o = (o * si - g * ni + 128) >> 8; g = w; c = (c + h + 1) >> 1; h = c - h; l = (l + C + 1) >> 1; C = l - C; s = (s + g + 1) >> 1; g = s - g; n = (n + o + 1) >> 1; o = n - o; w = (c * ri + l * ai + 2048) >> 12; c = (c * ai - l * ri + 2048) >> 12; l = w; w = (C * ii + h * ti + 2048) >> 12; C = (C * ti - h * ii + 2048) >> 12; h = w; i[e] = s + l; i[e + 7] = s - l; i[e + 1] = n + h; i[e + 6] = n - h; i[e + 2] = o + C; i[e + 5] = o - C; i[e + 3] = g + c; i[e + 4] = g - c; } else { w = (oi * Q + 512) >> 10; i[e] = w; i[e + 1] = w; i[e + 2] = w; i[e + 3] = w; i[e + 4] = w; i[e + 5] = w; i[e + 6] = w; i[e + 7] = w; } } for (let e = 0; e < 8; ++e) { Q = i[e]; E = i[e + 8]; u = i[e + 16]; d = i[e + 24]; f = i[e + 32]; p = i[e + 40]; m = i[e + 48]; y = i[e + 56]; if (0 != (E | u | d | f | p | m | y)) { s = (oi * Q + 2048) >> 12; n = (oi * f + 2048) >> 12; o = u; g = m; c = (gi * (E - y) + 2048) >> 12; l = (gi * (E + y) + 2048) >> 12; C = d; h = p; s = 4112 + ((s + n + 1) >> 1); n = s - n; w = (o * ni + g * si + 2048) >> 12; o = (o * si - g * ni + 2048) >> 12; g = w; c = (c + h + 1) >> 1; h = c - h; l = (l + C + 1) >> 1; C = l - C; s = (s + g + 1) >> 1; g = s - g; n = (n + o + 1) >> 1; o = n - o; w = (c * ri + l * ai + 2048) >> 12; c = (c * ai - l * ri + 2048) >> 12; l = w; w = (C * ii + h * ti + 2048) >> 12; C = (C * ti - h * ii + 2048) >> 12; h = w; Q = s + l; y = s - l; E = n + h; m = n - h; u = o + C; p = o - C; d = g + c; f = g - c; Q < 16 ? (Q = 0) : Q >= 4080 ? (Q = 255) : (Q >>= 4); E < 16 ? (E = 0) : E >= 4080 ? (E = 255) : (E >>= 4); u < 16 ? (u = 0) : u >= 4080 ? (u = 255) : (u >>= 4); d < 16 ? (d = 0) : d >= 4080 ? (d = 255) : (d >>= 4); f < 16 ? (f = 0) : f >= 4080 ? (f = 255) : (f >>= 4); p < 16 ? (p = 0) : p >= 4080 ? (p = 255) : (p >>= 4); m < 16 ? (m = 0) : m >= 4080 ? (m = 255) : (m >>= 4); y < 16 ? (y = 0) : y >= 4080 ? (y = 255) : (y >>= 4); r[t + e] = Q; r[t + e + 8] = E; r[t + e + 16] = u; r[t + e + 24] = d; r[t + e + 32] = f; r[t + e + 40] = p; r[t + e + 48] = m; r[t + e + 56] = y; } else { w = (oi * Q + 8192) >> 14; w = w < -2040 ? 0 : w >= 2024 ? 255 : (w + 2056) >> 4; r[t + e] = w; r[t + e + 8] = w; r[t + e + 16] = w; r[t + e + 24] = w; r[t + e + 32] = w; r[t + e + 40] = w; r[t + e + 48] = w; r[t + e + 56] = w; } } } function buildComponentData(e, t) { const i = t.blocksPerLine, a = t.blocksPerColumn, r = new Int16Array(64); for (let e = 0; e < a; e++) for (let a = 0; a < i; a++) { quantizeAndInverse(t, getBlockBufferOffset(t, e, a), r); } return t.blockData; } function findNextFileMarker(e, t, i = t) { const a = e.length - 1; let r = i < t ? i : t; if (t >= a) return null; const s = readUint16(e, t); if (s >= 65472 && s <= 65534) return { invalid: null, marker: s, offset: t }; let n = readUint16(e, r); for (; !(n >= 65472 && n <= 65534); ) { if (++r >= a) return null; n = readUint16(e, r); } return { invalid: s.toString(16), marker: n, offset: r }; } class JpegImage { constructor({ decodeTransform: e = null, colorTransform: t = -1 } = {}) { this._decodeTransform = e; this._colorTransform = t; } parse(e, { dnlScanLines: t = null } = {}) { function readDataBlock() { const t = readUint16(e, r); r += 2; let i = r + t - 2; const a = findNextFileMarker(e, i, r); if (a?.invalid) { warn( 'readDataBlock - incorrect length, current marker is: ' + a.invalid, ); i = a.offset; } const s = e.subarray(r, i); r += s.length; return s; } function prepareComponents(e) { const t = Math.ceil(e.samplesPerLine / 8 / e.maxH), i = Math.ceil(e.scanLines / 8 / e.maxV); for (const a of e.components) { const r = Math.ceil((Math.ceil(e.samplesPerLine / 8) * a.h) / e.maxH), s = Math.ceil((Math.ceil(e.scanLines / 8) * a.v) / e.maxV), n = t * a.h, o = 64 * (i * a.v) * (n + 1); a.blockData = new Int16Array(o); a.blocksPerLine = r; a.blocksPerColumn = s; } e.mcusPerLine = t; e.mcusPerColumn = i; } let i, a, r = 0, s = null, n = null, o = 0; const g = [], c = [], C = []; let h = readUint16(e, r); r += 2; if (65496 !== h) throw new JpegError('SOI not found'); h = readUint16(e, r); r += 2; A: for (; 65497 !== h; ) { let l, Q, E; switch (h) { case 65504: case 65505: case 65506: case 65507: case 65508: case 65509: case 65510: case 65511: case 65512: case 65513: case 65514: case 65515: case 65516: case 65517: case 65518: case 65519: case 65534: const u = readDataBlock(); 65504 === h && 74 === u[0] && 70 === u[1] && 73 === u[2] && 70 === u[3] && 0 === u[4] && (s = { version: { major: u[5], minor: u[6] }, densityUnits: u[7], xDensity: (u[8] << 8) | u[9], yDensity: (u[10] << 8) | u[11], thumbWidth: u[12], thumbHeight: u[13], thumbData: u.subarray(14, 14 + 3 * u[12] * u[13]), }); 65518 === h && 65 === u[0] && 100 === u[1] && 111 === u[2] && 98 === u[3] && 101 === u[4] && (n = { version: (u[5] << 8) | u[6], flags0: (u[7] << 8) | u[8], flags1: (u[9] << 8) | u[10], transformCode: u[11], }); break; case 65499: const d = readUint16(e, r); r += 2; const f = d + r - 2; let p; for (; r < f; ) { const t = e[r++], i = new Uint16Array(64); if (t >> 4 == 0) for (Q = 0; Q < 64; Q++) { p = ei[Q]; i[p] = e[r++]; } else { if (t >> 4 != 1) throw new JpegError('DQT - invalid table spec'); for (Q = 0; Q < 64; Q++) { p = ei[Q]; i[p] = readUint16(e, r); r += 2; } } g[15 & t] = i; } break; case 65472: case 65473: case 65474: if (i) throw new JpegError('Only single frame JPEGs supported'); r += 2; i = {}; i.extended = 65473 === h; i.progressive = 65474 === h; i.precision = e[r++]; const m = readUint16(e, r); r += 2; i.scanLines = t || m; i.samplesPerLine = readUint16(e, r); r += 2; i.components = []; i.componentIds = {}; const y = e[r++]; let w = 0, b = 0; for (l = 0; l < y; l++) { const t = e[r], a = e[r + 1] >> 4, s = 15 & e[r + 1]; w < a && (w = a); b < s && (b = s); const n = e[r + 2]; E = i.components.push({ h: a, v: s, quantizationId: n, quantizationTable: null, }); i.componentIds[t] = E - 1; r += 3; } i.maxH = w; i.maxV = b; prepareComponents(i); break; case 65476: const D = readUint16(e, r); r += 2; for (l = 2; l < D; ) { const t = e[r++], i = new Uint8Array(16); let a = 0; for (Q = 0; Q < 16; Q++, r++) a += i[Q] = e[r]; const s = new Uint8Array(a); for (Q = 0; Q < a; Q++, r++) s[Q] = e[r]; l += 17 + a; (t >> 4 == 0 ? C : c)[15 & t] = buildHuffmanTable(i, s); } break; case 65501: r += 2; a = readUint16(e, r); r += 2; break; case 65498: const S = 1 == ++o && !t; r += 2; const k = e[r++], R = []; for (l = 0; l < k; l++) { const t = e[r++], a = i.componentIds[t], s = i.components[a]; s.index = t; const n = e[r++]; s.huffmanTableDC = C[n >> 4]; s.huffmanTableAC = c[15 & n]; R.push(s); } const N = e[r++], G = e[r++], x = e[r++]; try { const t = decodeScan(e, r, i, R, a, N, G, x >> 4, 15 & x, S); r += t; } catch (t) { if (t instanceof DNLMarkerError) { warn(`${t.message} -- attempting to re-parse the JPEG image.`); return this.parse(e, { dnlScanLines: t.scanLines }); } if (t instanceof EOIMarkerError) { warn(`${t.message} -- ignoring the rest of the image data.`); break A; } throw t; } break; case 65500: r += 4; break; case 65535: 255 !== e[r] && r--; break; default: const U = findNextFileMarker(e, r - 2, r - 3); if (U?.invalid) { warn( 'JpegImage.parse - unexpected data, current marker is: ' + U.invalid, ); r = U.offset; break; } if (!U || r >= e.length - 1) { warn( 'JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).', ); break A; } throw new JpegError( 'JpegImage.parse - unknown marker: ' + h.toString(16), ); } h = readUint16(e, r); r += 2; } if (!i) throw new JpegError('JpegImage.parse - no frame data found.'); this.width = i.samplesPerLine; this.height = i.scanLines; this.jfif = s; this.adobe = n; this.components = []; for (const e of i.components) { const t = g[e.quantizationId]; t && (e.quantizationTable = t); this.components.push({ index: e.index, output: buildComponentData(0, e), scaleX: e.h / i.maxH, scaleY: e.v / i.maxV, blocksPerLine: e.blocksPerLine, blocksPerColumn: e.blocksPerColumn, }); } this.numComponents = this.components.length; } _getLinearizedBlockData(e, t, i = !1) { const a = this.width / e, r = this.height / t; let s, n, o, g, c, C, h, l, Q, E, u, d = 0; const f = this.components.length, p = e * t * f, m = new Uint8ClampedArray(p), y = new Uint32Array(e), w = 4294967288; let b; for (h = 0; h < f; h++) { s = this.components[h]; n = s.scaleX * a; o = s.scaleY * r; d = h; u = s.output; g = (s.blocksPerLine + 1) << 3; if (n !== b) { for (c = 0; c < e; c++) { l = 0 | (c * n); y[c] = ((l & w) << 3) | (7 & l); } b = n; } for (C = 0; C < t; C++) { l = 0 | (C * o); E = (g * (l & w)) | ((7 & l) << 3); for (c = 0; c < e; c++) { m[d] = u[E + y[c]]; d += f; } } } let D = this._decodeTransform; i || 4 !== f || D || (D = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255])); if (D) for (h = 0; h < p; ) for (l = 0, Q = 0; l < f; l++, h++, Q += 2) m[h] = ((m[h] * D[Q]) >> 8) + D[Q + 1]; return m; } get _isColorConversionNeeded() { return this.adobe ? !!this.adobe.transformCode : 3 === this.numComponents ? 0 !== this._colorTransform && (82 !== this.components[0].index || 71 !== this.components[1].index || 66 !== this.components[2].index) : 1 === this._colorTransform; } _convertYccToRgb(e) { let t, i, a; for (let r = 0, s = e.length; r < s; r += 3) { t = e[r]; i = e[r + 1]; a = e[r + 2]; e[r] = t - 179.456 + 1.402 * a; e[r + 1] = t + 135.459 - 0.344 * i - 0.714 * a; e[r + 2] = t - 226.816 + 1.772 * i; } return e; } _convertYccToRgba(e, t) { for (let i = 0, a = 0, r = e.length; i < r; i += 3, a += 4) { const r = e[i], s = e[i + 1], n = e[i + 2]; t[a] = r - 179.456 + 1.402 * n; t[a + 1] = r + 135.459 - 0.344 * s - 0.714 * n; t[a + 2] = r - 226.816 + 1.772 * s; t[a + 3] = 255; } return t; } _convertYcckToRgb(e) { let t, i, a, r, s = 0; for (let n = 0, o = e.length; n < o; n += 4) { t = e[n]; i = e[n + 1]; a = e[n + 2]; r = e[n + 3]; e[s++] = i * (-660635669420364e-19 * i + 0.000437130475926232 * a - 54080610064599e-18 * t + 0.00048449797120281 * r - 0.154362151871126) - 122.67195406894 + a * (-0.000957964378445773 * a + 0.000817076911346625 * t - 0.00477271405408747 * r + 1.53380253221734) + t * (0.000961250184130688 * t - 0.00266257332283933 * r + 0.48357088451265) + r * (-0.000336197177618394 * r + 0.484791561490776); e[s++] = 107.268039397724 + i * (219927104525741e-19 * i - 0.000640992018297945 * a + 0.000659397001245577 * t + 0.000426105652938837 * r - 0.176491792462875) + a * (-0.000778269941513683 * a + 0.00130872261408275 * t + 0.000770482631801132 * r - 0.151051492775562) + t * (0.00126935368114843 * t - 0.00265090189010898 * r + 0.25802910206845) + r * (-0.000318913117588328 * r - 0.213742400323665); e[s++] = i * (-0.000570115196973677 * i - 263409051004589e-19 * a + 0.0020741088115012 * t - 0.00288260236853442 * r + 0.814272968359295) - 20.810012546947 + a * (-153496057440975e-19 * a - 0.000132689043961446 * t + 0.000560833691242812 * r - 0.195152027534049) + t * (0.00174418132927582 * t - 0.00255243321439347 * r + 0.116935020465145) + r * (-0.000343531996510555 * r + 0.24165260232407); } return e.subarray(0, s); } _convertYcckToRgba(e) { for (let t = 0, i = e.length; t < i; t += 4) { const i = e[t], a = e[t + 1], r = e[t + 2], s = e[t + 3]; e[t] = a * (-660635669420364e-19 * a + 0.000437130475926232 * r - 54080610064599e-18 * i + 0.00048449797120281 * s - 0.154362151871126) - 122.67195406894 + r * (-0.000957964378445773 * r + 0.000817076911346625 * i - 0.00477271405408747 * s + 1.53380253221734) + i * (0.000961250184130688 * i - 0.00266257332283933 * s + 0.48357088451265) + s * (-0.000336197177618394 * s + 0.484791561490776); e[t + 1] = 107.268039397724 + a * (219927104525741e-19 * a - 0.000640992018297945 * r + 0.000659397001245577 * i + 0.000426105652938837 * s - 0.176491792462875) + r * (-0.000778269941513683 * r + 0.00130872261408275 * i + 0.000770482631801132 * s - 0.151051492775562) + i * (0.00126935368114843 * i - 0.00265090189010898 * s + 0.25802910206845) + s * (-0.000318913117588328 * s - 0.213742400323665); e[t + 2] = a * (-0.000570115196973677 * a - 263409051004589e-19 * r + 0.0020741088115012 * i - 0.00288260236853442 * s + 0.814272968359295) - 20.810012546947 + r * (-153496057440975e-19 * r - 0.000132689043961446 * i + 0.000560833691242812 * s - 0.195152027534049) + i * (0.00174418132927582 * i - 0.00255243321439347 * s + 0.116935020465145) + s * (-0.000343531996510555 * s + 0.24165260232407); e[t + 3] = 255; } return e; } _convertYcckToCmyk(e) { let t, i, a; for (let r = 0, s = e.length; r < s; r += 4) { t = e[r]; i = e[r + 1]; a = e[r + 2]; e[r] = 434.456 - t - 1.402 * a; e[r + 1] = 119.541 - t + 0.344 * i + 0.714 * a; e[r + 2] = 481.816 - t - 1.772 * i; } return e; } _convertCmykToRgb(e) { let t, i, a, r, s = 0; for (let n = 0, o = e.length; n < o; n += 4) { t = e[n]; i = e[n + 1]; a = e[n + 2]; r = e[n + 3]; e[s++] = 255 + t * (-6747147073602441e-20 * t + 0.0008379262121013727 * i + 0.0002894718188643294 * a + 0.003264231057537806 * r - 1.1185611867203937) + i * (26374107616089405e-21 * i - 8626949158638572e-20 * a - 0.0002748769067499491 * r - 0.02155688794978967) + a * (-3878099212869363e-20 * a - 0.0003267808279485286 * r + 0.0686742238595345) - r * (0.0003361971776183937 * r + 0.7430659151342254); e[s++] = 255 + t * (0.00013596372813588848 * t + 0.000924537132573585 * i + 0.00010567359618683593 * a + 0.0004791864687436512 * r - 0.3109689587515875) + i * (-0.00023545346108370344 * i + 0.0002702845253534714 * a + 0.0020200308977307156 * r - 0.7488052167015494) + a * (6834815998235662e-20 * a + 0.00015168452363460973 * r - 0.09751927774728933) - r * (0.0003189131175883281 * r + 0.7364883807733168); e[s++] = 255 + t * (13598650411385307e-21 * t + 0.00012423956175490851 * i + 0.0004751985097583589 * a - 36729317476630422e-22 * r - 0.05562186980264034) + i * (0.00016141380598724676 * i + 0.0009692239130725186 * a + 0.0007782692450036253 * r - 0.44015232367526463) + a * (5.068882914068769e-7 * a + 0.0017778369011375071 * r - 0.7591454649749609) - r * (0.0003435319965105553 * r + 0.7063770186160144); } return e.subarray(0, s); } _convertCmykToRgba(e) { for (let t = 0, i = e.length; t < i; t += 4) { const i = e[t], a = e[t + 1], r = e[t + 2], s = e[t + 3]; e[t] = 255 + i * (-6747147073602441e-20 * i + 0.0008379262121013727 * a + 0.0002894718188643294 * r + 0.003264231057537806 * s - 1.1185611867203937) + a * (26374107616089405e-21 * a - 8626949158638572e-20 * r - 0.0002748769067499491 * s - 0.02155688794978967) + r * (-3878099212869363e-20 * r - 0.0003267808279485286 * s + 0.0686742238595345) - s * (0.0003361971776183937 * s + 0.7430659151342254); e[t + 1] = 255 + i * (0.00013596372813588848 * i + 0.000924537132573585 * a + 0.00010567359618683593 * r + 0.0004791864687436512 * s - 0.3109689587515875) + a * (-0.00023545346108370344 * a + 0.0002702845253534714 * r + 0.0020200308977307156 * s - 0.7488052167015494) + r * (6834815998235662e-20 * r + 0.00015168452363460973 * s - 0.09751927774728933) - s * (0.0003189131175883281 * s + 0.7364883807733168); e[t + 2] = 255 + i * (13598650411385307e-21 * i + 0.00012423956175490851 * a + 0.0004751985097583589 * r - 36729317476630422e-22 * s - 0.05562186980264034) + a * (0.00016141380598724676 * a + 0.0009692239130725186 * r + 0.0007782692450036253 * s - 0.44015232367526463) + r * (5.068882914068769e-7 * r + 0.0017778369011375071 * s - 0.7591454649749609) - s * (0.0003435319965105553 * s + 0.7063770186160144); e[t + 3] = 255; } return e; } getData({ width: e, height: t, forceRGBA: i = !1, forceRGB: a = !1, isSourcePDF: r = !1, }) { if (this.numComponents > 4) throw new JpegError('Unsupported color mode'); const s = this._getLinearizedBlockData(e, t, r); if (1 === this.numComponents && (i || a)) { const e = s.length * (i ? 4 : 3), t = new Uint8ClampedArray(e); let a = 0; if (i) !(function grayToRGBA(e, t) { if (FeatureTest.isLittleEndian) for (let i = 0, a = e.length; i < a; i++) t[i] = (65793 * e[i]) | 4278190080; else for (let i = 0, a = e.length; i < a; i++) t[i] = (16843008 * e[i]) | 255; })(s, new Uint32Array(t.buffer)); else for (const e of s) { t[a++] = e; t[a++] = e; t[a++] = e; } return t; } if (3 === this.numComponents && this._isColorConversionNeeded) { if (i) { const e = new Uint8ClampedArray((s.length / 3) * 4); return this._convertYccToRgba(s, e); } return this._convertYccToRgb(s); } if (4 === this.numComponents) { if (this._isColorConversionNeeded) return i ? this._convertYcckToRgba(s) : a ? this._convertYcckToRgb(s) : this._convertYcckToCmyk(s); if (i) return this._convertCmykToRgba(s); if (a) return this._convertCmykToRgb(s); } return s; } } class JpegStream extends DecodeStream { constructor(e, t, i) { super(t); this.stream = e; this.dict = e.dict; this.maybeLength = t; this.params = i; } get bytes() { return shadow(this, 'bytes', this.stream.getBytes(this.maybeLength)); } ensureBuffer(e) {} readBlock() { this.decodeImage(); } decodeImage(e) { if (this.eof) return this.buffer; e ||= this.bytes; for (let t = 0, i = e.length - 1; t < i; t++) if (255 === e[t] && 216 === e[t + 1]) { t > 0 && (e = e.subarray(t)); break; } const t = { decodeTransform: void 0, colorTransform: void 0 }, i = this.dict.getArray('D', 'Decode'); if ((this.forceRGBA || this.forceRGB) && Array.isArray(i)) { const e = this.dict.get('BPC', 'BitsPerComponent') || 8, a = i.length, r = new Int32Array(a); let s = !1; const n = (1 << e) - 1; for (let e = 0; e < a; e += 2) { r[e] = (256 * (i[e + 1] - i[e])) | 0; r[e + 1] = (i[e] * n) | 0; (256 === r[e] && 0 === r[e + 1]) || (s = !0); } s && (t.decodeTransform = r); } if (this.params instanceof Dict) { const e = this.params.get('ColorTransform'); Number.isInteger(e) && (t.colorTransform = e); } const a = new JpegImage(t); a.parse(e); const r = a.getData({ width: this.drawWidth, height: this.drawHeight, forceRGBA: this.forceRGBA, forceRGB: this.forceRGB, isSourcePDF: !0, }); this.buffer = r; this.bufferLength = r.length; this.eof = !0; return this.buffer; } get canAsyncDecodeImageFromBuffer() { return this.stream.isAsync; } } __webpack_require__(4979); var Ii, ci = ((Ii = 'undefined' != typeof document ? document.currentScript?.src : void 0), function (e = {}) { var t, i, a = e; new Promise((e, a) => { t = e; i = a; }); a.decode = function ( e, { numComponents: t = 4, isIndexedColormap: i = !1, smaskInData: r = !1, }, ) { const s = e.length, n = a._malloc(s); a.HEAPU8.set(e, n); const o = a._jp2_decode(n, s, t > 0 ? t : 0, !!i, !!r); a._free(n); if (o) { const { errorMessages: e } = a; if (e) { delete a.errorMessages; return e; } return 'Unknown error'; } const { imageData: g } = a; a.imageData = null; return g; }; var r, s = Object.assign({}, a), n = './this.program', o = ''; 'undefined' != typeof document && document.currentScript && (o = document.currentScript.src); Ii && (o = Ii); o = o.startsWith('blob:') ? '' : o.substr(0, o.replace(/[?#].*/, '').lastIndexOf('/') + 1); var g, c, C, h, l, Q = a.print || console.log.bind(console), E = a.printErr || console.error.bind(console); Object.assign(a, s); s = null; a.arguments && a.arguments; a.thisProgram && (n = a.thisProgram); a.quit && a.quit; a.wasmBinary && (g = a.wasmBinary); function tryParseAsDataURI(e) { if (isDataURI(e)) return (function intArrayFromBase64(e) { for ( var t = atob(e), i = new Uint8Array(t.length), a = 0; a < t.length; ++a ) i[a] = t.charCodeAt(a); return i; })(e.slice(b.length)); } function updateMemoryViews() { var e = c.buffer; a.HEAP8 = C = new Int8Array(e); a.HEAP16 = new Int16Array(e); a.HEAPU8 = h = new Uint8Array(e); a.HEAPU16 = new Uint16Array(e); a.HEAP32 = new Int32Array(e); a.HEAPU32 = l = new Uint32Array(e); a.HEAPF32 = new Float32Array(e); a.HEAPF64 = new Float64Array(e); } var u, d = [], f = [], p = [], m = 0, y = null, w = null, b = 'data:application/octet-stream;base64,', isDataURI = (e) => e.startsWith(b); function instantiateSync(e, t) { var i, a = (function getBinarySync(e) { if (e == u && g) return new Uint8Array(g); var t = tryParseAsDataURI(e); if (t) return t; if (r) return r(e); throw 'sync fetching of the wasm failed: you can preload it to Module["wasmBinary"] manually, or emcc.py will do that for you when generating HTML (but not JS)'; })(e); i = new WebAssembly.Module(a); return [new WebAssembly.Instance(i, t), i]; } var callRuntimeCallbacks = (e) => { for (; e.length > 0; ) e.shift()(a); }; a.noExitRuntime; var D, growMemory = (e) => { var t = (e - c.buffer.byteLength + 65535) / 65536; try { c.grow(t); updateMemoryViews(); return 1; } catch (e) {} }, S = {}, getEnvStrings = () => { if (!getEnvStrings.strings) { var e = { USER: 'web_user', LOGNAME: 'web_user', PATH: '/', PWD: '/', HOME: '/home/web_user', LANG: ( ('object' == typeof navigator && navigator.languages && navigator.languages[0]) || 'C' ).replace('-', '_') + '.UTF-8', _: n || './this.program', }; for (var t in S) void 0 === S[t] ? delete e[t] : (e[t] = S[t]); var i = []; for (var t in e) i.push(`${t}=${e[t]}`); getEnvStrings.strings = i; } return getEnvStrings.strings; }, k = [null, [], []], R = 'undefined' != typeof TextDecoder ? new TextDecoder('utf8') : void 0, UTF8ArrayToString = (e, t, i) => { for (var a = t + i, r = t; e[r] && !(r >= a); ) ++r; if (r - t > 16 && e.buffer && R) return R.decode(e.subarray(t, r)); for (var s = ''; t < r; ) { var n = e[t++]; if (128 & n) { var o = 63 & e[t++]; if (192 != (224 & n)) { var g = 63 & e[t++]; if ( (n = 224 == (240 & n) ? ((15 & n) << 12) | (o << 6) | g : ((7 & n) << 18) | (o << 12) | (g << 6) | (63 & e[t++])) < 65536 ) s += String.fromCharCode(n); else { var c = n - 65536; s += String.fromCharCode( 55296 | (c >> 10), 56320 | (1023 & c), ); } } else s += String.fromCharCode(((31 & n) << 6) | o); } else s += String.fromCharCode(n); } return s; }, printChar = (e, t) => { var i = k[e]; if (0 === t || 10 === t) { (1 === e ? Q : E)(UTF8ArrayToString(i, 0)); i.length = 0; } else i.push(t); }, UTF8ToString = (e, t) => (e ? UTF8ArrayToString(h, e, t) : ''), N = { c: (e, t, i) => h.copyWithin(e, t, t + i), g: function _copy_pixels_1(e, t) { e >>= 2; const i = (a.imageData = new Uint8ClampedArray(t)), r = a.HEAP32.subarray(e, e + t); i.set(r); }, f: function _copy_pixels_3(e, t, i, r) { e >>= 2; t >>= 2; i >>= 2; const s = (a.imageData = new Uint8ClampedArray(3 * r)), n = a.HEAP32.subarray(e, e + r), o = a.HEAP32.subarray(t, t + r), g = a.HEAP32.subarray(i, i + r); for (let e = 0; e < r; e++) { s[3 * e] = n[e]; s[3 * e + 1] = o[e]; s[3 * e + 2] = g[e]; } }, e: function _copy_pixels_4(e, t, i, r, s) { e >>= 2; t >>= 2; i >>= 2; r >>= 2; const n = (a.imageData = new Uint8ClampedArray(4 * s)), o = a.HEAP32.subarray(e, e + s), g = a.HEAP32.subarray(t, t + s), c = a.HEAP32.subarray(i, i + s), C = a.HEAP32.subarray(r, r + s); for (let e = 0; e < s; e++) { n[4 * e] = o[e]; n[4 * e + 1] = g[e]; n[4 * e + 2] = c[e]; n[4 * e + 3] = C[e]; } }, k: (e) => { var t = h.length, i = 2147483648; if ((e >>>= 0) > i) return !1; for (var a, r, s = 1; s <= 4; s *= 2) { var n = t * (1 + 0.2 / s); n = Math.min(n, e + 100663296); var o = Math.min( i, (a = Math.max(e, n)) + (((r = 65536) - (a % r)) % r), ); if (growMemory(o)) return !0; } return !1; }, l: (e, t) => { var i = 0; getEnvStrings().forEach((a, r) => { var s = t + i; l[(e + 4 * r) >> 2] = s; ((e, t) => { for (var i = 0; i < e.length; ++i) C[t++] = e.charCodeAt(i); C[t] = 0; })(a, s); i += a.length + 1; }); return 0; }, m: (e, t) => { var i = getEnvStrings(); l[e >> 2] = i.length; var a = 0; i.forEach((e) => (a += e.length + 1)); l[t >> 2] = a; return 0; }, n: (e) => 52, j: function _fd_seek(e, t, i, a, r) { return 70; }, b: (e, t, i, a) => { for (var r = 0, s = 0; s < i; s++) { var n = l[t >> 2], o = l[(t + 4) >> 2]; t += 8; for (var g = 0; g < o; g++) printChar(e, h[n + g]); r += o; } l[a >> 2] = r; return 0; }, o: function _gray_to_rgba(e, t) { e >>= 2; const i = (a.imageData = new Uint8ClampedArray(4 * t)), r = a.HEAP32.subarray(e, e + t); for (let e = 0; e < t; e++) { i[4 * e] = i[4 * e + 1] = i[4 * e + 2] = r[e]; i[4 * e + 3] = 255; } }, i: function _graya_to_rgba(e, t, i) { e >>= 2; t >>= 2; const r = (a.imageData = new Uint8ClampedArray(4 * i)), s = a.HEAP32.subarray(e, e + i), n = a.HEAP32.subarray(t, t + i); for (let e = 0; e < i; e++) { r[4 * e] = r[4 * e + 1] = r[4 * e + 2] = s[e]; r[4 * e + 3] = n[e]; } }, d: function _jsPrintWarning(e) { const t = UTF8ToString(e); (a.warn || console.warn)(`OpenJPEG: ${t}`); }, h: function _rgb_to_rgba(e, t, i, r) { e >>= 2; t >>= 2; i >>= 2; const s = (a.imageData = new Uint8ClampedArray(4 * r)), n = a.HEAP32.subarray(e, e + r), o = a.HEAP32.subarray(t, t + r), g = a.HEAP32.subarray(i, i + r); for (let e = 0; e < r; e++) { s[4 * e] = n[e]; s[4 * e + 1] = o[e]; s[4 * e + 2] = g[e]; s[4 * e + 3] = 255; } }, a: function _storeErrorMessage(e) { const t = UTF8ToString(e); a.errorMessages ? (a.errorMessages += '\n' + t) : (a.errorMessages = t); }, }, G = (function createWasm() { var e = (function getWasmImports() { return { a: N }; })(); function receiveInstance(e, t) { G = e.exports; c = G.p; updateMemoryViews(); !(function addOnInit(e) { f.unshift(e); })(G.q); !(function removeRunDependency(e) { m--; a.monitorRunDependencies?.(m); if (0 == m) { if (null !== y) { clearInterval(y); y = null; } if (w) { var t = w; w = null; t(); } } })(); return G; } !(function addRunDependency(e) { m++; a.monitorRunDependencies?.(m); })(); if (a.instantiateWasm) try { return a.instantiateWasm(e, receiveInstance); } catch (e) { E(`Module.instantiateWasm callback failed with error: ${e}`); i(e); } u || (u = 'data:application/octet-stream;base64,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A0kNAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAswAQF/AkAgAEUNACABRQ0AQQggACABbCIBECUiAARAIABBACABEBUaCyAAIQILIAILEQAgAEUEQEEADwtBCCAAECUL8gICAn8BfgJAIAJFDQAgACABOgAAIAAgAmoiA0EBayABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBA2sgAToAACADQQJrIAE6AAAgAkEHSQ0AIAAgAToAAyADQQRrIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBBGsgATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQQhrIAE2AgAgAkEMayABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa1CgYCAgBB+IQUgAyAEaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLIAALJwEBfyMAQRBrIgMkACADIAI2AgwgACABIAJBAEEAEGsgA0EQaiQAC+gFAQl/IAFFBEBBAA8LAn8gAEUE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ACAEIE5BCmpBAiAFEBpBAkcEQCAFQQFBAiAAKAK4ARtBlhJBABAPIAAoArgBRSFnDAELIE5BCmogTkEMakECEBEgTigCDCIBQZD/A0YNACABQdn/A0YEQCAAQYACNgIIIABBADYCzAEMAQsgBCkDCCKGAVAEfkIABSCGASAEKQM4fQtQBEAgAEHAADYCCCAFQQJBrD9BABAPDAELQQAhZyAFQQFB7D5BABAPCyBOQRBqJAAgZwsLACAABEAgABAQCwu0AQEBfyAAKAIMRQRAIAIgACgCJCABEQMADwsCQEEIEBQiA0UNACADIAI2AgQgAyABNgIAQQgQFCIBRQRAIAMQEA8LIAEgAzYCACAAIAAoAgRB5ABsIgI2AigDQCAAKAIYIAJKDQALIAEgACgCFDYCBCAAIAE2AhQgACAAKAIYQQFqNgIYIAAoAhwiAUUNACABKAIAQQA2AgggACABKAIENgIcIAAgACgCIEEBazYCICABEBALC/oCAQR/AkAgAEUNACAAKAKsKCIBBEAgACgCqCgiAgRAQQAhAQNAIAAoAqwoIAFBA3RqKAIAIgMEQCADEBAgACgCqCghAgsgAUEBaiIBIAJJDQALIAAoAqwoIQELIABBADYCqCggARAQIABBADYCrCgLIAAoArQoIgEEQCABEBAgAEEANgK0KAsgACgC0CsiAQRAIAEQECAAQQA2AtArCyAAKALsKyIBBEAgARAQIABBADYC7CsLIAAoAugrIgEEQCABEBAgAEEANgLoKwsgACgC/CsiAQRAIAEQECAAQQA2AoQsIABCADcC/CsLIAAoAvArIgEEQCAAKAL0KyIDBH9BACECA0AgASgCDCIEBEAgBBAQIAFBADYCDCAAKAL0KyEDCyABQRRqIQEgAkEBaiICIANJDQALIAAoAvArBSABCxAQIABBADYC8CsLIAAoAuQrIgEEQCABEBAgAEEANgLkKwsgACgC3CsiAUUNACABEBAgAEIANwLcKwsLyAcCEX8BfiAAKAIQIghBIE8EQCAAKQMIpw8LAkAgACgCFCIDQQROBEAgACgCACICQQNrKAIAIQEgACADQQRrIgM2AhQgACACQQRrNgIADAELIANBAEwEQAwBCyADQQFxIQ0gACgCACECAkAgA0EBRgRAQRghBAwBCyADQf7///8HcSEJQRghBANAIAAgAkEB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IABBADYCiAEgACgCZBAQIABBADYCZCAALQC8AUECcUUEQCAAKAKoARAQCyAAQdAAakEAQfAAEBUaIAAoAsABEDIgAEEANgLAASAAKALEARAyIABBADYCwAEgACgCyAEiAQRAIAEoAhwiAgRAIAIQECABQQA2AhwLIAEoAigiAgRAIAEoAiQEQANAIAIgBUEobCIDaigCJCIEBEAgBBAQIAEoAigiAiADakEANgIkCyACIANqKAIQIgQEQCAEEBAgASgCKCICIANqQQA2AhALIAIgA2ooAhgiBARAIAQQECABKAIoIgIgA2pBADYCGAsgBUEBaiIFIAEoAiRJDQALCyACEBAgAUEANgIoCyABEBALIABBADYCyAEgACgCSBAhIABBADYCSCAAKAJMECEgAEEANgJMIAAoAtQBIgMEQAJAIAMoAghFDQAgAygCDARAIANBADYCKANAIAMoAhhBAEoNAAsLIANBATYCECADKAIAEBAgAygCHCICRQ0AA0AgAigCBCEBIAIQECADIAE2AhwgASICDQALCyADKAIkIgIEQCACKAIEIgVBAEoEQEEAIQEDQCACKAIAIAFBDGxqIgQoAggiBgRAIAQoAgQgBhECACACKAIEIQULIAFBAWoiASAFSA0ACwsgAigCABAQIAIQEAsgAxAQCyAAQQA2AtQBIAAQEAsL5gMCCH8EfiAAKAIUKAIAKAIUIAFBzABsaiIJKAIMIgggACgCGCgCGCABQTRsaiIKNQIEIhBCAX0iEiAANQI8fCAQgKciCyAIIAtJGyEMIAkoAggiCCAKNQIAIhFCAX0iEyAANQI4fCARgKciCiAIIApJGyEKIAkoAgQiCCASIAA1AjR8IBCApyILIAggC0sbIQsgCSgCACIIIBMgADUCMHwgEYCnIg0gCCANSxshDUEAIQggACgCICgC0CsgAUG4CGxqKAIUIQ4CQCAJKAIUQQAgAmtBfyACG2oiAkUEQCAKIQAgDSEIIAshAQwBCyADQQFxIAJBAWsiD3QiCSANSQRAIA0gCWutQn8gAq0iEIZCf4V8IBCIpyEIC0EAIQBBACEBIANBAXYgD3QiAyALSQRAIAsgA2utQn8gAq0iEIZCf4V8IBCIpyEBCyAJIApJBEAgCiAJa61CfyACrSIQhkJ/hXwgEIinIQALIAMgDE8EQEEAIQwMAQsgDCAD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IABBADYCPCAAQucHNwI0IABBADYCLCAAQucHNwIkIABBADYCHCAAQucHNwIUIABBADYCDCAAQucHNwIEIABBQGshACACQQRqIgIgA0cNAAsLIAFBA3EiAUUNAEEAIQIDQCAAQQA2AgwgAELnBzcCBCAAQRBqIQAgAkEBaiICIAFHDQALCwv7BQEQfyMAQYACayIIJAACf0EBQRQQEyIGRQRAIAJBAUH0MEEAEA9BAAwBCyAGIAE2AgQgBiAANgIAIAggATYCACAIIAA2AoABA0AgCCAFIg1BAWoiBUECdCIHaiABQQFqQQJtIgM2AgAgCEGAAWogB2ogAEEBakECbSIHNgIAIAQgACABbCIJaiEEIAMhASAHIQAgCUEBSw0ACyAGIAQ2AgggBEUEQCAGEBBBAAwBCyAGIARBEBATIgM2AgwgA0UEQCACQQFB2hpBABAPIAYQEEEADAELIAYgBigCCCILQQR0NgIQIAMhACANBEAgAyAGKAIEIAYoAgBsQQR0aiIEIQEDQAJAIAggDkECdCICaigCACIJQQBMDQAgCUEBayEMQQAhBwJAIAhBgAFqIAJqKAIAIgJBAEwEQEEAIQUgCUEBRwRAIAlB/v///wdxIQoDQCAFIAxGIQ8gBUECaiEFIAEgBCAPGyIEIQEgB0ECaiIHIApHDQALCyAJQQFxDQEgBCEBDAILA0AgBCEFIAIhBANAAkAgACABNgIAIARBAUYEQCAAQRBqIQAgAUEQaiEBDAELIAAgATYCECABQRBqIQEgAEEgaiEAIARBAkohECAEQQJrIQQgEA0BCwsgASAFIAJBBHRqIAcgByAMRnJBAXEiChshBCABIAUgChshASAHQQFqIgcgCUcNAAsMAQsgASAEIAJBBHRqIAUgBSAMRnJBAXEiBRshESABIAQgBRshASARIQQLIA5BAWoiDiANRw0ACwsgAEEANgIAAkAgC0UNACALQQRPBEAgC0F8cSEAQQAhAQNAIANBADYCPCADQucHNwI0IANBADYCLCADQucHNwIkIANBADYCHCADQucHNwIUIANBADYCDCADQucHNwIEIANBQGshAyABQQRqIgEgAEcNAAsLIAtBA3EiAEUNAEEAIQEDQCADQQA2AgwgA0LnBzcCBCADQRBqIQMgAUEBaiIBIABHDQALCyAGCyESIAhBgAJqJAAgEgtTAQF/An8gAC0ADEH/AUYEQCAAQoD+g4DwADcCDEEAIAAoAggiASAAKAIETw0BGiAAIAFBAWo2AgggACABLQAAQYD+A3I2AgwLIABBADYCEEEBCwt+AgF/AX4gAL0iA0I0iKdB/w9xIgJB/w9HBHwgAkUEQCABIABEAAAAAAAAAABhBH9BAAUgAEQAAAAAAADwQ6IgARBlIQAgASgCAEFAags2AgAgAA8LIAEgAkH+B2s2AgAgA0L/////////h4B/g0KAgICAgICA8D+EvwUgAAsLSQEBfwJAQQFBLBATIgEEQCABQQA2AhACQCAAQQBMBEAgAUEBQQgQEyIANgIkIABFDQEMAwsgAUEANgIMCyABEBALQQAhAQsgAQuRAgAgAEUEQEEADwsCfwJAIAFB/wBNDQACQEGU0AEoAgAoAgBFBEAgAUGAf3FBgL8DRg0CDAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAAQQIMAwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMMAwsgAUGAgARrQf//P00EQCAAIAFBP3FBgAFyOgADIAAgAUESdkHwAXI6AAAgACABQQZ2QT9xQYABcjoAAiAAIAFBDHZBP3FBgAFyOgABQQQMAwsLQZTHAUEZNgIAQX8MAQsgACABOgAAQQELC7wCAAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAgJCggJAQIDBAoJCgoICQUGBwsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADwsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMwEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADwsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAwALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC3MBBn8gACgCACIDLAAAQTBrIgFBCUsE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AyAAQRh2NgIUIAMgBDYCECADIABBCHZB/wFxNgIcIAMgAEEQdkH/AXE2AhggAkEBQc31ACADQRBqEA8MBwsgBSAITQRAIAYhBAwECyAFIQggBiAFEBciBA0DIAYQECACQQFB/w9BABAPQQAMBwsgBEECcUUEQCACQQFBwg9BABAPIAYQEEEADAcLIAAgBEH/////B3I2AmQgASAHIAVrrSINIAIgASgCKBEIACANUQ0DIAAtAGRBCHFFDQEgAkECQZIcQQAQDwsgBhAQQQEMBQsgAkEBQZIcQQAQDyAGEBBBAAwECyABIAQgBSACEBogBUcEQCACQQFBxBxBABAPIAQQEEEADAQLIAAgBCIGIAUgAiAKKAIEEQEADQALIAQQEEEADAILIAJBAUGiJUEAEA9BAAwBCyAGEBBBAAshDCADQfAAaiQAIAwL5gEBBn8gACgCCEE1IAIQJARAAkAgACgCCCIGKAIAIQMgBigCCCEFAkACQAJ/AkAgAwRAQQEhBCADQQFxIQcgA0EBRw0BQQAMAgsgBkEANgIADAILIANBfnEhAwNAAn9BACAERQ0AGkEAIAAgASACIAUoAgARAABFDQAaIAAgASACIAUoAgQRAABBAEcLIQQgBUEIaiEFIAhBAmoiCCADRw0ACyAERQshAyAHBEAgAw0CIAAgASACIAUoAgARAABBAEchBAsgBkEANgIAIARFDQILIAAoAgAaQQEPCyAGQQA2AgALC0EACwoAIAAoAgAaQQALFAAgACgCACIABEAgACABNgK4AQsLIQAgACgCACABEFMgAEEAOgB8IAAgASgCuEBBAXE2AoABCzIAIAJFBEBBAA8LIAAoAgAgASACIAMQSEUEQCADQQFBqS9BABAPQQAPCyAAIAIgAxBxC2kCAn8BfCMAQRBrIgMkACACBEADQCAAIANBCGoQRCABAn8gAysDCCIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAs2AgAgAUEEaiEBIABBCGohACAEQQFqIgQgAkcNAAsLIANBEGokAAuEAQICfwF9IwBBEGsiAyQAIAIEQANAIAMgAC0AADoADyADIAAtAAE6AA4gAyAALQACOgANIAMgAC0AAzoADCABAn8gAyoCDCIFi0MAAABPXQRAIAWoDAELQYCAgIB4CzYCACABQQRqIQEgAEEEaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC0sBAn8jAEEQayIDJAAgAgRAA0AgACADQQxqQQQQESABIAMoAgw2AgAgAUEEaiEBIABBBGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtLAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EMakECEBEgASADKAIMNgIAIAFBBGohASAAQQJqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALSgECfyMAQRBrIgMkACACBEADQCAAIANBCGoQRCABIAMrAwi2OAIAIAFBBGohASAAQQhqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALaAECfyMAQRBrIgMkACACBEADQCADIAAtAAA6AA8gAyAALQABOgAOIAMgAC0AAjoADSADIAAtAAM6AAwgASADKgIMOAIAIAFBBGohASAAQQRqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALTAECfyMAQRBrIgMkACACBEADQCAAIANBDGpBBBARIAEgAygCDLM4AgAgAUEEaiEBIABBBGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtMAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EMakECEBEgASADKAIMszgCACABQQRqIQEgAEECaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC6oIAg1/AXsjAEEQayIIJAACfyAAKAIIQRBGBEAgACgCnAEgACgCzAFBjCxsagwBCyAAKAIMCyEJAkAgAkUEQCADQQFB8B9BABAPDAELIAAoAkghBkEBIQQgASAIQQhqQQEQESAIKAIIIgVBAk8EQCADQQJBxsgAQQAQDwwBCyACIAVBAWpHBEBBACEEIANBAkHwH0EAEA8MAQsCQCAGKAIQIgNFDQAgCSgC0CshBCADQQhPBEAgA0F4cSEGQQAhAgNAIARBADYCvEMgBEEANgKEOyAEQQA2AswyIARBADYClCogBEEANgLcISAEQQA2AqQZIARBADYC7BAgBEEANgK0CCAEQcDDAGohBCACQQhqIgIgBkcNAAsLIANBB3EiA0UNAEEAIQIDQCAEQQA2ArQIIARBuAhqIQQgAkEBaiICIANHDQALCyAJKALoKyICBH8gAhAQIAlBADYC6CsgCCgCCAUgBQtFBEBBASEEDAELA0AgAUEBaiIBIAhBDGpBARARAkAgCSgCgCxF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KT0ALgAobnVsbCkAKCVkLCVkKSAAJXN9CgAJCSB9CgBbREVWXSBEdW1wIGFuIGltYWdlX2NvbXBfaGVhZGVyIHN0cnVjdCB7CgBbREVWXSBEdW1wIGFuIGltYWdlX2hlYWRlciBzdHJ1Y3QgewoASW1hZ2UgaW5mbyB7CgAJIGRlZmF1bHQgdGlsZSB7CgAlcwkgY29tcG9uZW50ICVkIHsKAAkJIGNvbXAgJWQgewoACSBUaWxlIGluZGV4OiB7CgAJIE1hcmtlciBsaXN0OiB7CgBDb2Rlc3RyZWFtIGluZGV4IGZyb20gbWFpbiBoZWFkZXI6IHsKAENvZGVzdHJlYW0gaW5mbyBmcm9tIG1haW4gaGVhZGVyOiB7CgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveAoARm91bmQgYSBtaXNwbGFjZWQgJyVjJWMlYyVjJyBib3ggb3V0c2lkZSBqcDJoIGJveAoATWFsZm9ybWVkIEpQMiBmaWxlIGZvcm1hdDogZmlyc3QgYm94IG11c3QgYmUgSlBFRyAyMDAwIHNpZ25hdHVyZSBib3gKAE1hbGZvcm1lZCBKUDIgZmlsZSBmb3JtYXQ6IHNlY29uZCBib3ggbXVzdCBiZSBmaWxlIHR5cGUgYm94CgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUganBlZzIwMDAgYm94CgBOb3QgZW5vdWdoIG1lbW9yeSB3aXRoIEZUWVAgQm94CgBBIG1hcmtlciBJRCB3YXMgZXhwZWN0ZWQgKDB4ZmYtLSkgaW5zdGVhZCBvZiAlLjh4CgAJCSBtY3Q9JXgKAAkJCSBjYmxrc3R5PSUjeAoACQkJIGNzdHk9JSN4CgAJCSBwcmc9JSN4CgBJbnRlZ2VyIG92ZXJmbG93CgAJIHRkeD0ldSwgdGR5PSV1CgAJIHR3PSV1LCB0aD0ldQoACSB0eDA9JXUsIHR5MD0ldQoASW52YWxpZCBjb21wb25lbnQgaW5kZXg6ICV1CgBTdHJlYW0gdG9vIHNob3J0CgBNYXJrZXIgaGFuZGxlciBmdW5jdGlvbiBmYWlsZWQgdG8gcmVhZCB0aGUgbWFya2VyIHNlZ21lbnQKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjdXJyZW50IHByZWNpbmN0IGNvZGVibG9jayBlbGVtZW50CgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQKAEVycm9yIHJlYWRpbmcgU1FjZCBvciBTUWNjIGVsZW1lbnQKAEEgQlBDQyBoZWFkZXIgYm94IGlzIGF2YWlsYWJsZSBhbHRob3VnaCBCUEMgZ2l2ZW4gYnkgdGhlIElIRFIgYm94ICglZCkgaW5kaWNhdGUgY29tcG9uZW50cyBiaXQgZGVwdGggaXMgY29uc3RhbnQKAEVycm9yIHdpdGggU0laIG1hcmtlcjogaWxsZWdhbCB0aWxlIG9mZnNldAoASW52YWxpZCBwcmVjaW5jdAoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGJhbmQgcHJlY2ludHMKAEZhaWxlZCB0byBkZWNvZGUgYWxsIHVzZWQgY29tcG9uZW50cwoAU2l6ZSBvZiBjb2RlIGJsb2NrIGRhdGEgZXhjZWVkcyBzeXN0ZW0gbGltaXRzCgBTaXplIG9mIHRpbGUgZGF0YSBleGNlZWRzIHN5c3RlbSBsaW1pdHMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtdWx0aXBsZSBNQ1QgbWFya2VycwoAQ29ycnVwdGVkIFBQTSBtYXJrZXJzCgBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgdGlsZSByZXNvbHV0aW9ucwoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIGNvbGxlY3Rpb25zCgBJbnZhbGlkIFBDTFIgYm94LiBSZXBvcnRzIDAgcGFsZXR0ZSBjb2x1bW5zCgBXZSBkbyBub3Qgc3VwcG9ydCBST0kgaW4gZGVjb2RpbmcgSFQgY29kZWJsb2NrcwoAQ2Fubm90IGhhbmRsZSBib3ggb2YgdW5kZWZpbmVkIHNpemVzCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgY29sbGVjdGlvbnMgd2l0aG91dCBzYW1lIG51bWJlciBvZiBpbmRpeGVzCgBJbnZhbGlkIHRpbGVjLT53aW5feHh4IHZhbHVlcwoAQ2Fubm90IGhhbmRsZSBib3ggb2YgbGVzcyB0aGFuIDggYnl0ZXMKAENhbm5vdCBoYW5kbGUgWEwgYm94IG9mIGxlc3MgdGhhbiAxNiBieXRlcwoAQ29tcG9uZW50IGluZGV4ICV1IHVzZWQgc2V2ZXJhbCB0aW1lcwoASW52YWxpZCBQQ0xSIGJveC4gUmVwb3J0cyAlZCBlbnRyaWVzCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgVGFnLXRyZWUgbm9kZXMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtY3QgZGF0YSB3aXRoaW4gbXVsdGlwbGUgTUNUIHJlY29yZHMKAENhbm5vdCBkZWNvZGUgdGlsZSwgbWVtb3J5IGVycm9yCgBvcGpfajJrX2FwcGx5X25iX3RpbGVfcGFydHNfY29ycmVjdGlvbiBlcnJvcgoAUHJvYmxlbSB3aXRoIHNraXBwaW5nIEpQRUcyMDAwIGJveCwgc3RyZWFtIGVycm9yCgBQcm9ibGVtIHdpdGggcmVhZGluZyBKUEVHMjAwMCBib3gsIHN0cmVhbSBlcnJvcgoAVW5rbm93biBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCB0bCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBtaCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHRha2UgaW4gY2hhcmdlIFNJWiBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUFBUIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBQUFQgbWFya2VyCgBFcnJvciByZWFkaW5nIFNPVCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUExUIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ1QgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DVCBtYXJrZXIKAE5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4cGVjdGVkIFNPUCBtYXJrZXIKAEV4cGVjdGVkIFNPUCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgTUNPIG1hcmtlcgoARXJyb3IgcmVhZGluZyBSR04gbWFya2VyCgBFcnJvciByZWFkaW5nIFBQTSBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgUFBNIG1hcmtlcgoARXJyb3IgcmVhZGluZyBUTE0gbWFya2VyCgBFcnJvciByZWFkaW5nIFBMTSBtYXJrZXIKAE5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4cGVjdGVkIEVQSCBtYXJrZXIKAEV4cGVjdGVkIEVQSCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgQ1JHIG1hcmtlcgoAVW5rbm93biBwcm9ncmVzc2lvbiBvcmRlciBpbiBDT0QgbWFya2VyCgBVbmtub3duIFNjb2QgdmFsdWUgaW4gQ09EIG1hcmtlcgoARXJyb3IgcmVhZGluZyBDT0QgbWFya2VyCgBFcnJvciByZWFkaW5nIFFDRCBtYXJrZXIKAENycm9yIHJlYWRpbmcgQ0JEIG1hcmtlcgoARXJyb3IgcmVhZGluZyBQT0MgbWFya2VyCgBFcnJvciByZWFkaW5nIENPQyBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUUNDIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ0MgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DQyBtYXJrZXIKAHJlcXVpcmVkIFNJWiBtYXJrZXIgbm90IGZvdW5kIGluIG1haW4gaGVhZGVyCgByZXF1aXJlZCBDT0QgbWFya2VyIG5vdCBmb3VuZCBpbiBtYWluIGhlYWRlcgoAcmVxdWlyZWQgUUNEIG1hcmtlciBub3QgZm91bmQgaW4gbWFpbiBoZWFkZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGhhbmRsZSBqcGVnMjAwMCBmaWxlIGhlYWRlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBoZWFkZXIKAEVycm9yIHdpdGggSlAgU2lnbmF0dXJlIDogYmFkIG1hZ2ljIG51bWJlcgoASW4gU09UIG1hcmtlciwgVFBTb3QgKCVkKSBpcyBub3QgdmFsaWQgcmVnYXJkcyB0byB0aGUgY3VycmVudCBudW1iZXIgb2YgdGlsZS1wYXJ0ICglZCksIGdpdmluZyB1cAoASW4gU09UIG1hcmtlciwgVFBTb3QgKCVkKSBpcyBub3QgdmFsaWQgcmVnYXJkcyB0byB0aGUgcHJldmlvdXMgbnVtYmVyIG9mIHRpbGUtcGFydCAoJWQpLCBnaXZpbmcgdXAKAEluIFNPVCBtYXJrZXIsIFRQU290ICglZCkgaXMgbm90IHZhbGlkIHJlZ2FyZHMgdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHRpbGUtcGFydCAoaGVhZGVyKSAoJWQpLCBnaXZpbmcgdXAKAHRpbGVzIHJlcXVpcmUgYXQgbGVhc3Qgb25lIHJlc29sdXRpb24KAE1hcmtlciBpcyBub3QgY29tcGxpYW50IHdpdGggaXRzIHBvc2l0aW9uCgBQcm9ibGVtIHdpdGggc2VlayBmdW5jdGlvbgoARXJyb3IgcmVhZGluZyBTUENvZCBTUENvYyBlbGVtZW50LCBJbnZhbGlkIGNibGt3L2NibGtoIGNvbWJpbmF0aW9uCgBJbnZhbGlkIG11bHRpcGxlIGNvbXBvbmVudCB0cmFuc2Zvcm1hdGlvbgoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIGNvbGxlY3Rpb25zIG90aGVyIHRoYW4gYXJyYXkgZGVjb3JyZWxhdGlvbgoAVG9vIGxhcmdlIHZhbHVlIGZvciBOcHBtCgBOb3QgZW5vdWdoIGJ5dGVzIHRvIHJlYWQgTnBwbQoAYmFkIHBsYWNlZCBqcGVnIGNvZGVzdHJlYW0KAAkgTWFpbiBoZWFkZXIgc3RhcnQgcG9zaXRpb249JWxsaQoJIE1haW4gaGVhZGVyIGVuZCBwb3NpdGlvbj0lbGxpCgBNYXJrZXIgc2l6ZSBpbmNvbnNpc3RlbnQgd2l0aCBzdHJlYW0gbGVuZ3RoCgBUaWxlIHBhcnQgbGVuZ3RoIHNpemUgaW5jb25zaXN0ZW50IHdpdGggc3RyZWFtIGxlbmd0aAoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIGRhdGEgc3Bhbm5pbmcKAFdyb25nIGZsYWcKAEVycm9yIHdpdGggRlRZUCBzaWduYXR1cmUgQm94IHNpemUKAEVycm9yIHdpdGggSlAgc2lnbmF0dXJlIEJveCBzaXplCgBJbnZhbGlkIHByZWNpbmN0IHNpemUKAEluY29uc2lzdGVudCBtYXJrZXIgc2l6ZQoASW52YWxpZCBtYXJrZXIgc2l6ZQoARXJyb3Igd2l0aCBTSVogbWFya2VyIHNpemUKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBhIG5ldyB2YWxpZGF0aW9uIHByb2NlZHVyZQoATm90IGVub3VnaCBtZW1vcnkgdG8gZGVjb2RlIHRpbGUKAEZhaWxlZCB0byBkZWNvZGUgdGhlIGNvZGVzdHJlYW0gaW4gdGhlIEpQMiBmaWxlCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgY29sbGVjdGlvbnMgd2l0aCBpbmRpeCBzaHVmZmxlCgBDYW5ub3QgYWxsb2NhdGUgVGllciAxIGhhbmRsZQoATm8gZGVjb2RlZCBhcmVhIHBhcmFtZXRlcnMsIHNldCB0aGUgZGVjb2RlZCBhcmVhIHRvIHRoZSB3aG9sZSBpbWFnZQoATm90IGVub3VnaCBtZW1vcnkgdG8gY3JlYXRlIFRhZy10cmVlCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWluaXRpYWxpemUgdGhlIHRhZyB0cmVlCgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQsIEludmFsaWQgdHJhbnNmb3JtYXRpb24gZm91bmQKAEVycm9yIHJlYWRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudC4gVW5zdXBwb3J0ZWQgTWl4ZWQgSFQgY29kZS1ibG9jayBzdHlsZSBmb3VuZAoAVGlsZSBZIGNvb3JkaW5hdGVzIGFyZSBub3Qgc3VwcG9ydGVkCgBUaWxlIFggY29vcmRpbmF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKAEltYWdlIGNvb3JkaW5hdGVzIGFib3ZlIElOVF9NQVggYXJlIG5vdCBzdXBwb3J0ZWQKAEpQRUcyMDAwIEhlYWRlciBib3ggbm90IHJlYWQgeWV0LCAnJWMlYyVjJWMnIGJveCB3aWxsIGJlIGlnbm9yZWQKAG9wal9qMmtfbWVyZ2VfcHB0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgU09UIG1hcmtlci4gVGlsZSBpbmRleCBhbGxvY2F0aW9uIGZhaWxlZAoASWdub3JpbmcgaWhkciBib3guIEZpcnN0IGloZHIgYm94IGFscmVhZHkgcmVhZAoAWnBwdCAldSBhbHJlYWR5IHJlYWQKAFpwcG0gJXUgYWxyZWFkeSByZWFkCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCBzeW50aGV0aXplZCAweEZGIG1hcmtlcnMgcmVhZAoACQkJIGNibGt3PTJeJWQKAAkJCSBjYmxraD0yXiVkCgAJCQkgcW50c3R5PSVkCgAlcyBkeD0lZCwgZHk9JWQKAAkJCSByb2lzaGlmdD0lZAoACQkJIG51bWdiaXRzPSVkCgAJCSBudW1sYXllcnM9JWQKACVzIG51bWNvbXBzPSVkCgBvcGpfanAyX2FwcGx5X2NkZWY6IGFjbj0lZCwgbnVtY29tcHM9JWQKAG9wal9qcDJfYXBwbHlfY2RlZjogY249JWQsIG51bWNvbXBzPSVkCgAJCQkgbnVtcmVzb2x1dGlvbnM9JWQKAAkJIHR5cGU9JSN4LCBwb3M9JWxsaSwgbGVuPSVkCgAlcyBzZ25kPSVkCgAJCQkgcW1mYmlkPSVkCgAlcyBwcmVjPSVkCgAJCSBuYiBvZiB0aWxlLXBhcnQgaW4gdGlsZSBbJWRdPSVkCgAlcyB4MT0lZCwgeTE9JWQKACVzIHgwPSVkLCB5MD0lZAoARmFpbGVkIHRvIGRlY29kZSB0aWxlICVkLyVkCgBTZXR0aW5nIGRlY29kaW5nIGFyZWEgdG8gJWQsJWQsJWQsJWQKAEZhaWxlZCB0byBkZWNvZGUgY29tcG9uZW50ICVkCgBJbnZhbGlkIHZhbHVlIGZvciBudW1yZXNvbHV0aW9ucyA6ICVkLCBtYXggdmFsdWUgaXMgc2V0IGluIG9wZW5qcGVnLmggYXQgJWQKAEludmFsaWQgY29tcG9uZW50IG51bWJlcjogJWQsIHJlZ2FyZGluZyB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgJWQKAFRvbyBtYW55IFBPQ3MgJWQKAEludmFsaWQgdGlsZSBudW1iZXIgJWQKAEludmFsaWQgdGlsZSBwYXJ0IGluZGV4IGZvciB0aWxlIG51bWJlciAlZC4gR290ICVkLCBleHBlY3RlZCAlZAoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBudW1iZXIgb2YgY29tcG9uZW50IGlzIGlsbGVnYWwgLT4gJWQKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjaWVsYWIKAENhbm5vdCBhbGxvY2F0ZSBjYmxrLT5kZWNvZGVkX2RhdGEKAEZhaWxlZCB0byBtZXJnZSBQUFQgZGF0YQoARmFpbGVkIHRvIG1lcmdlIFBQTSBkYXRhCgBJbnZhbGlkIG51bWJlciBvZiBsYXllcnMgaW4gQ09EIG1hcmtlciA6ICVkIG5vdCBpbiByYW5nZSBbMS02NTUzNV0KACVzOiVkOmNvbG9yX2NteWtfdG9fcmdiCglDQU4gTk9UIENPTlZFUlQKACVzOiVkOmNvbG9yX2VzeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgAlczolZDpjb2xvcl9zeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgBTdHJlYW0gdG9vIHNob3J0LCBleHBlY3RlZCBTT1QKAFVuYWJsZSB0byBzZXQgdDEgaGFuZGxlIGFzIFRMUwoAU3RyZWFtIGRvZXMgbm90IGVuZCB3aXRoIEVPQwoAQ2Fubm90IGhhbmRsZSBib3ggc2l6ZXMgaGlnaGVyIHRoYW4gMl4zMgoAb3BqX3BpX25leHRfbHJjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcmxjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfY3BybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcGNybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcnBjbCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3QxX2RlY29kZV9jYmxrKCk6IHVuc3VwcG9ydGVkIGJwbm9fcGx1c19vbmUgPSAlZCA+PSAzMQoARmFpbGVkIHRvIGRlY29kZSB0aWxlIDEvMQoASW5zdWZmaWNpZW50IGRhdGEgZm9yIENNQVAgYm94LgoATmVlZCB0byByZWFkIGEgUENMUiBib3ggYmVmb3JlIHRoZSBDTUFQIGJveC4KAEluc3VmZmljaWVudCBkYXRhIGZvciBDREVGIGJveC4KAE51bWJlciBvZiBjaGFubmVsIGRlc2NyaXB0aW9uIGlzIGVxdWFsIHRvIHplcm8gaW4gQ0RFRiBib3guCgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveDogbm8gJ2loZHInIGJveC4KAE5vbiBjb25mb3JtYW50IGNvZGVzdHJlYW0gVFBzb3Q9PVROc290LgoAU3RyZWFtIGVycm9yIHdoaWxlIHJlYWRpbmcgSlAyIEhlYWRlciBib3g6IGJveCBsZW5ndGggaXMgaW5jb25zaXN0ZW50LgoAQm94IGxlbmd0aCBpcyBpbmNvbnNpc3RlbnQuCgBSZXNvbHV0aW9uIGZhY3RvciBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gcmVzb2x1dGlvbiBpbiB0aGUgY29tcG9uZW50LgoAQ29tcG9uZW50IG1hcHBpbmcgc2VlbXMgd3JvbmcuIFRyeWluZyB0byBjb3JyZWN0LgoASW5jb21wbGV0ZSBjaGFubmVsIGRlZmluaXRpb25zLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW52YWxpZCBjb2RlYmxvY2sgbGVuZ3RoIHZhbHVlcy4KAFdlIGRvIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiAzIGNvZGluZyBwYXNzZXMgaW4gYW4gSFQgY29kZWJsb2NrOyBUaGlzIGNvZGVibG9ja3MgaGFzICVkIHBhc3Nlcy4KAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFRoZXJlIGFyZSAlZCB6ZXJvIGJpdHBsYW5lcyBpbiAlZCBiaXRwbGFuZXMuCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgdHJhbnNmb3JtYXRpb24gc3RhZ2VzLgoAVW5rbm93biBtYXJrZXIgaGFzIGJlZW4gZGV0ZWN0ZWQgYW5kIGdlbmVyYXRlZCBlcnJvci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfc2V0dXBfZGVjb2RlciBmdW5jdGlvbiBpcyBub3QgYSBkZWNvbXByZXNzb3IgaGFuZGxlci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfcmVhZF9oZWFkZXIgZnVuY3Rpb24gaXMgbm90IGEgZGVjb21wcmVzc29yIGhhbmRsZXIuCgBUaWxlcyBkb24ndCBhbGwgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb24uIFNraXAgdGhlIE1DVCBzdGVwLgoATnVtYmVyIG9mIGNvbXBvbmVudHMgKCVkKSBpcyBpbmNvbnNpc3RlbnQgd2l0aCBhIE1DVC4gU2tpcCB0aGUgTUNUIHN0ZXAuCgBKUDIgYm94IHdoaWNoIGFyZSBhZnRlciB0aGUgY29kZXN0cmVhbSB3aWxsIG5vdCBiZSByZWFkIGJ5IHRoaXMgZnVuY3Rpb24uCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBXaGVuIHRoZSBudW1iZXIgb2YgemVybyBwbGFuZXMgYml0cGxhbmVzIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgYml0cGxhbmVzLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3MgbWFrZXMgc2Vuc2UsIGJ1dCB3ZSBoYXZlICVkIHBhc3NlcyBpbiB0aGlzIGNvZGVibG9jay4gVGhlcmVmb3JlLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3Mgd2lsbCBiZSBkZWNvZGVkLiBUaGlzIG1lc3NhZ2Ugd2lsbCBub3QgYmUgZGlzcGxheWVkIGFnYWluLgoASW1hZ2UgaGFzIGxlc3MgY29tcG9uZW50cyB0aGFuIGNvZGVzdHJlYW0uCgBOZWVkIHRvIGRlY29kZSB0aGUgbWFpbiBoZWFkZXIgYmVmb3JlIGJlZ2luIHRvIGRlY29kZSB0aGUgcmVtYWluaW5nIGNvZGVzdHJlYW0uCgBQc290IHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbGUtcGFydCBpcyBlcXVhbCB0byB6ZXJvLCB3ZSBhc3N1bWluZyBpdCBpcyB0aGUgbGFzdCB0aWxlLXBhcnQgb2YgdGhlIGNvZGVzdHJlYW0uCgBBIG1hbGZvcm1lZCBjb2RlYmxvY2sgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBjb2RpbmcgcGFzcywgYnV0IHplcm8gbGVuZ3RoIGZvciAybmQgYW5kIHBvdGVudGlhbGx5IHRoZSAzcmQgcGFzcyBpbiBhbiBIVCBjb2RlYmxvY2suCgAJCQkgdGlsZS1wYXJ0WyVkXTogc3Rhcl9wb3M9JWxsaSwgZW5kX2hlYWRlcj0lbGxpLCBlbmRfcG9zPSVsbGkuCgBUaWxlICV1IGhhcyBUUHNvdCA9PSAwIGFuZCBUTnNvdCA9PSAwLCBidXQgbm8gb3RoZXIgdGlsZS1wYXJ0cyB3ZXJlIGZvdW5kLiBFT0MgaXMgYWxzbyBtaXNzaW5nLgoAQ29tcG9uZW50ICVkIGRvZXNuJ3QgaGF2ZSBhIG1hcHBpbmcuCgBBIGNvbmZvcm1pbmcgSlAyIHJlYWRlciBzaGFsbCBpZ25vcmUgYWxsIENvbG91ciBTcGVjaWZpY2F0aW9uIGJveGVzIGFmdGVyIHRoZSBmaXJzdCwgc28gd2UgaWdub3JlIHRoaXMgb25lLgoAVGhlIHNpZ25hdHVyZSBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlICBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlIGZ0eXAgYm94IG11c3QgYmUgdGhlIHNlY29uZCBib3ggaW4gdGhlIGZpbGUuCgBGYWlsZWQgdG8gZGVjb2RlLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW5jb3JyZWN0IE1FTCBzZWdtZW50IHNlcXVlbmNlLgoAQ29tcG9uZW50ICVkIGlzIG1hcHBlZCB0d2ljZS4KAE9ubHkgb25lIENNQVAgYm94IGlzIGFsbG93ZWQuCgBXZSBuZWVkIGFuIGltYWdlIHByZXZpb3VzbHkgY3JlYXRlZC4KAElIRFIgYm94X21pc3NpbmcuIFJlcXVpcmVkLgoASlAySCBib3ggbWlzc2luZy4gUmVxdWlyZWQuCgBOb3Qgc3VyZSBob3cgdGhhdCBoYXBwZW5lZC4KAE1haW4gaGVhZGVyIGhhcyBiZWVuIGNvcnJlY3RseSBkZWNvZGVkLgoAVGlsZSAlZC8lZCBoYXMgYmVlbiBkZWNvZGVkLgoASGVhZGVyIG9mIHRpbGUgJWQgLyAlZCBoYXMgYmVlbiByZWFkLgoARW1wdHkgU09UIG1hcmtlciBkZXRlY3RlZDogUHNvdD0lZC4KAERpcmVjdCB1c2UgYXQgIyVkIGhvd2V2ZXIgcGNvbD0lZC4KAEltcGxlbWVudGF0aW9uIGxpbWl0YXRpb246IGZvciBwYWxldHRlIG1hcHBpbmcsIHBjb2xbJWRdIHNob3VsZCBiZSBlcXVhbCB0byAlZCwgYnV0IGlzIGVxdWFsIHRvICVkLgoASW52YWxpZCBjb21wb25lbnQvcGFsZXR0ZSBpbmRleCBmb3IgZGlyZWN0IG1hcHBpbmcgJWQuCgBJbnZhbGlkIHZhbHVlIGZvciBjbWFwWyVkXS5tdHlwID0gJWQuCgBQc290IHZhbHVlIGlzIG5vdCBjb3JyZWN0IHJlZ2FyZHMgdG8gdGhlIEpQRUcyMDAwIG5vcm06ICVkLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gVkxDIGNvZGUgcHJvZHVjZXMgc2lnbmlmaWNhbnQgc2FtcGxlcyBvdXRzaWRlIHRoZSBjb2RlYmxvY2sgYXJlYS4KAFVuZXhwZWN0ZWQgT09NLgoAMzIgYml0cyBhcmUgbm90IGVub3VnaCB0byBkZWNvZGUgdGhpcyBjb2RlYmxvY2ssIHNpbmNlIHRoZSBudW1iZXIgb2YgYml0cGxhbmUsICVkLCBpcyBsYXJnZXIgdGhhbiAzMC4KAEJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTE9JWQpIHNob3VsZCBiZSA+IDAuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIHNob3VsZCBiZSA+IDAuCgBVcCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTA9JWQpIHNob3VsZCBiZSA+PSAwLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIHNob3VsZCBiZSA+PSAwLgoARXJyb3IgcmVhZGluZyBQUFQgbWFya2VyOiBwYWNrZXQgaGVhZGVyIGhhdmUgYmVlbiBwcmV2aW91c2x5IGZvdW5kIGluIHRoZSBtYWluIGhlYWRlciAoUFBNIG1hcmtlcikuCgBTdGFydCB0byByZWFkIGoyayBtYWluIGhlYWRlciAoJWxsZCkuCgBCb3R0b20gcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kxPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZc2l6PSVkKS4KAFVwIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MD0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWXNpej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoAQm90dG9tIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MT0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWU9zaXo9JWQpLgoAVXAgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZT3Npej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhPc2l6PSVkKS4KAExlZnQgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3gwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChYT3Npej0lZCkuCgBTaXplIHggb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0udz0lZCkuCgBTaXplIHkgb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0uaD0lZCkuCgBUaWxlIHJlYWQsIGRlY29kZWQgYW5kIHVwZGF0ZWQgaXMgbm90IHRoZSBkZXNpcmVkIG9uZSAoJWQgdnMgJWQpLgoASW52YWxpZCBjb21wb25lbnQgaW5kZXggJWQgKD49ICVkKS4KAG9wal9yZWFkX2hlYWRlcigpIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIG9wal9zZXRfZGVjb2RlZF9jb21wb25lbnRzKCkuCgBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluIG9wal9qcDJfYXBwbHlfcGNscigpLgoAaW1hZ2UtPmNvbXBzWyVkXS5kYXRhID09IE5VTEwgaW4gb3BqX2pwMl9hcHBseV9wY2xyKCkuCgBpbnZhbGlkIGJveCBzaXplICVkICgleCkKAEZhaWwgdG8gcmVhZCB0aGUgY3VycmVudCBtYXJrZXIgc2VnbWVudCAoJSN4KQoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBJSERSIHcoJXUpIGgoJXUpIHZzLiBTSVogdygldSkgaCgldSkKAEVycm9yIHJlYWRpbmcgQ09DIG1hcmtlciAoYmFkIG51bWJlciBvZiBjb21wb25lbnRzKQoASW52YWxpZCBudW1iZXIgb2YgdGlsZXMgOiAldSB4ICV1IChtYXhpbXVtIGZpeGVkIGJ5IGpwZWcyMDAwIG5vcm0gaXMgNjU1MzUgdGlsZXMpCgBJbnZhbGlkIG51bWJlciBvZiBjb21wb25lbnRzIChpaGRyKQoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGltYWdlIGhlYWRlciAoaWhkcikKAFdyb25nIHZhbHVlcyBmb3I6IHcoJWQpIGgoJWQpIG51bWNvbXBzKCVkKSAoaWhkcikKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBkeD0ldSBkeT0ldSAoc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMjU1IGFjY29yZGluZyB0byB0aGUgSlBFRzIwMDAgbm9ybSkKAEJhZCBpbWFnZSBoZWFkZXIgYm94IChiYWQgc2l6ZSkKAEJhZCBDT0xSIGhlYWRlciBib3ggKGJhZCBzaXplKQoAQmFkIEJQQ0MgaGVhZGVyIGJveCAoYmFkIHNpemUpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG5lZ2F0aXZlIG9yIHplcm8gaW1hZ2Ugc2l6ZSAoJWxsZCB4ICVsbGQpCgBza2lwOiBzZWdtZW50IHRvbyBsb25nICglZCkgd2l0aCBtYXggKCVkKSBmb3IgY29kZWJsb2NrICVkIChwPSVkLCBiPSVkLCByPSVkLCBjPSVkKQoAcmVhZDogc2VnbWVudCB0b28gbG9uZyAoJWQpIHdpdGggbWF4ICglZCkgZm9yIGNvZGVibG9jayAlZCAocD0lZCwgYj0lZCwgcj0lZCwgYz0lZCkKAERlc3BpdGUgSlAyIEJQQyE9MjU1LCBwcmVjaXNpb24gYW5kL29yIHNnbmQgdmFsdWVzIGZvciBjb21wWyVkXSBpcyBkaWZmZXJlbnQgdGhhbiBjb21wWzBdOgogICAgICAgIFswXSBwcmVjKCVkKSBzZ25kKCVkKSBbJWRdIHByZWMoJWQpIHNnbmQoJWQpCgBiYWQgY29tcG9uZW50IG51bWJlciBpbiBSR04gKCVkIHdoZW4gdGhlcmUgYXJlIG9ubHkgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG51bWJlciBvZiBjb21wb25lbnQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBwYXJhbWV0ZXJzICggJWQgdnMgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IGludmFsaWQgdGlsZSBzaXplICh0ZHg6ICVkLCB0ZHk6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoYmFkIHNpemU6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoQ0lFTGFiLCBiYWQgc2l6ZTogJWQpCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCByZW1haW5pbmcgYnl0ZXMgaW4gY29kZSBibG9jayAoJWQgdXNlZCAvICVkKQoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gT25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQ6IDIgPD0gU2N1cCA8PSBtaW4oTGN1cCwgNDA3OSkKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBwcmVjPSV1IChzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzOCBhY2NvcmRpbmcgdG8gdGhlIEpQRUcyMDAwIG5vcm0uIE9wZW5KcGVnIG9ubHkgc3VwcG9ydHMgdXAgdG8gMzEpCgBJbnZhbGlkIGJpdCBudW1iZXIgJWQgaW4gb3BqX3QyX3JlYWRfcGFja2V0X2hlYWRlcigpCgBTdHJlYW0gZXJyb3IhCgBFcnJvciBvbiB3cml0aW5nIHN0cmVhbSEKAFN0cmVhbSByZWFjaGVkIGl0cyBlbmQgIQoARXhwZWN0ZWQgYSBTT0MgbWFya2VyIAoASW52YWxpZCBib3ggc2l6ZSAlZCBmb3IgYm94ICclYyVjJWMlYycuIE5lZWQgJWQgYnl0ZXMsICVkIGJ5dGVzIHJlbWFpbmluZyAKAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFVfcSBpcyBsYXJnZXIgdGhhbiB6ZXJvIGJpdHBsYW5lcyArIDEgCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBEZWNvZGluZyB0aGlzIGNvZGVibG9jayBpcyBzdG9wcGVkLiBVX3EgaXNsYXJnZXIgdGhhbiBiaXRwbGFuZXMgKyAxIAoAQ09MUiBCT1ggbWV0aCB2YWx1ZSBpcyBub3QgYSByZWd1bGFyIHZhbHVlICglZCksIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBlbnRpcmUgQ29sb3VyIFNwZWNpZmljYXRpb24gYm94LiAKAFdoaWxlIHJlYWRpbmcgQ0NQX1FOVFNUWSBlbGVtZW50IGluc2lkZSBRQ0Qgb3IgUUNDIG1hcmtlciBzZWdtZW50LCBudW1iZXIgb2Ygc3ViYmFuZHMgKCVkKSBpcyBncmVhdGVyIHRvIE9QSl9KMktfTUFYQkFORFMgKCVkKS4gU28gd2UgbGltaXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBzdG9yZWQgdG8gT1BKX0oyS19NQVhCQU5EUyAoJWQpIGFuZCBza2lwIHRoZSByZXN0LiAKAEpQMiBJSERSIGJveDogY29tcHJlc3Npb24gdHlwZSBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGlzIG5vdCBhIGNvbmZvcm1pbmcgSlAyIGZpbGUgKCVkKSAKAFRpbGUgaW5kZXggcHJvdmlkZWQgYnkgdGhlIHVzZXIgaXMgaW5jb3JyZWN0ICVkIChtYXggPSAlZCkgCgBFcnJvciBkZWNvZGluZyBjb21wb25lbnQgJWQuClRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgdG8gcmVtb3ZlICglZCkgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgb2YgdGhpcyBjb21wb25lbnQg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AAABVAAAAQAAAABQAADAUAAAAUgAAAAAAAAQUAAAsFAAAAFIAAABAAAAIFAAAMBQAAABOAAAAAAAADBQAACwUAAAATgAAAEAAABAUAAAwFAAAAEwAAAAAAAAUFAAABBRAAABMAAAAQAAAGBQAAAgUQAAASQAAAAAAABwUAAAMFEAAAEkAAABAAAAgFAAAEBRAAABHAAAAAAAAJBQAABwUQAAARwAAAEAAACgUAAAgFEAAAEWAAAAAAAAkFIAAJBRAAABFgAAAQAAAKBSAACgUQAAAVYAAAAAAADQUAAAwFAAAAFWAAABAAAA4FAAALBQAAABVAAAAAAAAPBQAACwUAAAAVQAAAEAAAAAUQAAwFAAAAFRAAAAAAAAEFEAANBQAAABUQAAAQAAACBRAADgUAAAAUgAAAAAAAAwUQAA8FAAAAFIAAABAAAAQFEAAABRAAABOAAAAAAAAFBRAAAQUQAAATgAAAEAAABgUQAAIFEAAAE0AAAAAAAAcFEAADBRAAABNAAAAQAAAIBRAABAUQAAATAAAAAAAACQUQAAUFEAAAEwAAABAAAAoFEAAGBRAAABKAAAAAAAALBRAABQUQAAASgAAAEAAADAUQAAYFEAAAEkAAAAAAAA0FEAAHBRAAABJAAAAQAAAOBRAACAUQAAASIAAAAAAADwUQAAkFEAAAEiAAABAAAAAFIAAKBRAAABHAAAAAAAABBSAACwUQAAARwAAAEAAAAgUgAAwFEAAAEYAAAAAAAAMFIAANBRAAABGAAAAQAAAEBSAADgUQAAARYAAAAAAABQUgAA8FEAAAEWAAABAAAAYFIAAABSAAABFAAAAAAAAHBSAAAQUgAAARQAAAEAAACAUgAAIFIAAAESAAAAAAAAkFIAADBSAAABEgAAAQAAAKBSAABAUgAAAREAAAAAAACwUgAAUFIAAAERAAABAAAAwFIAAGBSAADBCgAAAAAAANBSAABwUgAAwQoAAAEAAADgUgAAgFIAAMEJAAAAAAAA8FIAAJBSAADBCQAAAQAAAABTAACgUgAAoQgAAAAAAAAQUwAAsFIAAKEIAAABAAAAIFMAAMBSAAAhBQAAAAAAADBTAADQUgAAIQUAAAEAAABAUwAA4FIAAEEEAAAAAAAAUFMAAPBSAABBBAAAAQAAAGBTAAAAUwAAoQIAAAAAAABwUwAAEFMAAKECAAABAAAAgFMAACBTAAAhAgAAAAAAAJBTAAAwUwAAIQIAAAEAAACgUwAAQFMAAEEBAAAAAAAAsFMAAFBTAABBAQAAAQAAAMBTAABgUwAAEQEAAAAAAADQUwAAcFMAABEBAAABAAAA4FMAAIBTAACFAAAAAAAAAPBTAACQUwAAhQAAAAEAAAAAVAAAoFMAAEkAAAAAAAAAEFQAALBTAABJAAAAAQAAACBUAADAUwAAJQAAAAAAAAAwVAAA0FMAACUAAAABAAAAQFQAAOBTAAAVAAAAAAAAAFBUAADwUwAAFQAAAAEAAABgVAAAAFQAAAkAAAAAAAAAcFQAABBUAAAJAAAAAQAAAIBUAAAgVAAABQAAAAAAAACQVAAAMFQAAAUAAAABAAAAoFQAAEBUAAABAAAAAAAAAJBUAABQVAAAAQAAAAEAAACgVAAAYFQAAAFWAAAAAAAAsFQAALBUAAABVgAAAQAAAMBUAADAVAAAAAEDAwECAwMFBgcHBgYHBwABAwMBAgMDBQYHBwYGBwcFBgcHBgYHBwgICAgICAgIBQYHBwYGBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgCAgMDAgIDAwYGBwcGBgcHAgIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgAAQUGAQIGBgMDBwcDAwcHAAEFBgECBgYDAwcHAwMHBwMDBwcDAwcHBAQHBwQEBwcDAwcHAwMHBwQEBwcEBAcHAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwUGCAgGBggIBwcICAcHCAgFBggIBgYICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwICBgYCAgYGAwMHBwMDBwcCAgYGAgIGBgMDBwcDAwcHAwMHBwMDBwcEBAcHBAQHBwMDBwcDAwcHBAQHBwQEBwcGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAYGCAgGBggIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAABAwMBAgMDBQYHBwYGBwcAAQMDAQIDAwUGBwcGBgcHBQYHBwYGBwcICAgICAgICAUGBwcGBgcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAgIDAwICAwMGBgcHBgYHBwICAwMCAgMDBgYHBwYGBwcGBgcHBgYHBwgICAgICAgIBgYHBwYGBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAAMBBAMGBAcBBAIFBAcFBwADAQQDBgQHAQQCBQQHBQcBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwIFAgUFBwUHAgUCBQUHBQcCBQIFBQcFBwIFAgUFBwUHBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgGCAcICAgICAcIBwgICAgIBggHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgJCQoKCQkKCgwMDQsMDA0LCQkKCgkJCgoMDAsNDAwLDQwMDQ0MDAsLDAkNCgkMCgsMDAsLDAwNDQwJCwoJDAoNCQkKCgkJCgoMDA0LDAwNCwkJCgoJCQoKDAwLDQwMCw0MDA0NDAwLCwwJDQoJDAoLDAwLCwwMDQ0MCQsKCQwKDQoKCgoKCgoKDQsNCw0LDQsKCgkJCgoJCQ0LDAwNCwwMDQ0NDQsLCwsNCg0KCgsKCw0NDAwLCwwMDQoMCQoLCQwKCgkJCgoJCQsNDAwLDQwMCgoKCgoKCgoLDQsNCw0LDQsLDAwNDQwMCwoMCQoNCQwLCwsLDQ0NDQsKCwoKDQoNAEHZuwELNwEAAQABAAEAAAEBAAABAQABAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAQABAQEAQZm8AQs3AQABAAEAAQAAAQEAAAEBAAEAAQABAAEAAAAAAQEBAQAAAAAAAQABAAAAAAEBAQEAAAABAAEBAQBB2bwBCwcBAAEAAQABAEHpvAELlQIBAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAAABAAEBAQAAAQEAAAABAAEAAQABAQEBAQEBAQEAAQABAAEAAQAAAAABAQEBAAEAAAEBAAEAAAAAAQEBAQABAAEBAQEBAgAAAAQAAAAEAAAACAAAAJD/AAAMAAAAGAAAAFL/AAAUAAAAGQAAAFP/AAAUAAAAGgAAAF7/AAAUAAAAGwAAAFz/AAAUAAAAHAAAAF3/AAAUAAAAHQAAAF//AAAUAAAAHgAAAFH/AAACAAAAHwAAAFX/AAAEAAAAIAAAAFf/AAAEAAAAIQAAAFj/AAAQAAAAIgAAAGD/AAAEAAAAIwAAAGH/AAAQAAAAJAAAAJH/AEGIvwELZWP/AAAEAAAAJQAAAGT/AAAUAAAAJgAAAHT/AAAUAAAAJwAAAHj/AAAEAAAAKAAAAFD/AAAEAAAAKQAAAFn/AAAEAAAAKgAAAHX/AAAUAAAAKwAAAHf/AAAUAAAALAAAAAAAAAAUAEGAwAELNS0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAAICBQajYAAABweXRmNwAAAGgycGo4AEHAwAELMnJkaGk5AAAAcmxvYzoAAABjY3BiOwAAAHJsY3A8AAAAcGFtYz0AAABmZWRjPgAAAPhiAEGAwQELQRkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHRwQELIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBi8IBCwEMAEGXwgELFRMAAAAAEwAAAAAJDAAAAAAADAAADABBxcIBCwEQAEHRwgELFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABB/8IBCwESAEGLwwELHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBwsMBCw4aAAAAGhoaAAAAAAAACQBB88MBCwEUAEH/wwELFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBrcQBCwEWAEG5xAELJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBB4MQBCwmQbAEAAAAAAAUAQfTEAQsBaQBBjMUBCwpqAAAAawAAAHhoAEGkxQELAQIAQbTFAQsI//////////8AQfjFAQsBBQBBhMYBCwFsAEGcxgELDmoAAABtAAAAiGgAAAAEAEG0xgELAQEAQcTGAQsF/////wo='); return receiveInstance(instantiateSync(u, e)[0]); })(); G.q, (a._malloc = G.r), (a._free = G.s), (a._jp2_decode = G.u); w = function runCaller() { D || run(); D || (w = runCaller); }; function run() { if (!(m > 0)) { !(function preRun() { if (a.preRun) { 'function' == typeof a.preRun && (a.preRun = [a.preRun]); for (; a.preRun.length; ) (e = a.preRun.shift()), d.unshift(e); } var e; callRuntimeCallbacks(d); })(); if (!(m > 0)) if (a.setStatus) { a.setStatus('Running...'); setTimeout(function () { setTimeout(function () { a.setStatus(''); }, 1); doRun(); }, 1); } else doRun(); } function doRun() { if (!D) { D = !0; a.calledRun = !0; !(function initRuntime() { callRuntimeCallbacks(f); })(); t(a); a.onRuntimeInitialized && a.onRuntimeInitialized(); !(function postRun() { if (a.postRun) { 'function' == typeof a.postRun && (a.postRun = [a.postRun]); for (; a.postRun.length; ) (e = a.postRun.shift()), p.unshift(e); } var e; callRuntimeCallbacks(p); })(); } } } if (a.preInit) { 'function' == typeof a.preInit && (a.preInit = [a.preInit]); for (; a.preInit.length > 0; ) a.preInit.pop()(); } run(); return a; }); const Ci = ci; class JpxError extends ot { constructor(e) { super(e, 'JpxError'); } } class JpxImage { static #y = null; static decode(e, t) { t ||= {}; this.#y ||= Ci({ warn }); const i = this.#y.decode(e, t); if ('string' == typeof i) throw new JpxError(i); return i; } static cleanup() { this.#y = null; } static parseImageProperties(e) { let t = e.getByte(); for (; t >= 0; ) { const i = t; t = e.getByte(); if (65361 === ((i << 8) | t)) { e.skip(4); const t = e.getInt32() >>> 0, i = e.getInt32() >>> 0, a = e.getInt32() >>> 0, r = e.getInt32() >>> 0; e.skip(16); return { width: t - a, height: i - r, bitsPerComponent: 8, componentsCount: e.getUint16(), }; } } throw new JpxError('No size marker found in JPX stream'); } } class JpxStream extends DecodeStream { constructor(e, t, i) { super(t); this.stream = e; this.dict = e.dict; this.maybeLength = t; this.params = i; } get bytes() { return shadow(this, 'bytes', this.stream.getBytes(this.maybeLength)); } ensureBuffer(e) {} readBlock(e) { this.decodeImage(null, e); } decodeImage(e, t) { if (this.eof) return this.buffer; e ||= this.bytes; this.buffer = JpxImage.decode(e, t); this.bufferLength = this.buffer.length; this.eof = !0; return this.buffer; } get canAsyncDecodeImageFromBuffer() { return this.stream.isAsync; } } class LZWStream extends DecodeStream { constructor(e, t, i) { super(t); this.str = e; this.dict = e.dict; this.cachedData = 0; this.bitsCached = 0; const a = 4096, r = { earlyChange: i, codeLength: 9, nextCode: 258, dictionaryValues: new Uint8Array(a), dictionaryLengths: new Uint16Array(a), dictionaryPrevCodes: new Uint16Array(a), currentSequence: new Uint8Array(a), currentSequenceLength: 0, }; for (let e = 0; e < 256; ++e) { r.dictionaryValues[e] = e; r.dictionaryLengths[e] = 1; } this.lzwState = r; } readBits(e) { let t = this.bitsCached, i = this.cachedData; for (; t < e; ) { const e = this.str.getByte(); if (-1 === e) { this.eof = !0; return null; } i = (i << 8) | e; t += 8; } this.bitsCached = t -= e; this.cachedData = i; this.lastCode = null; return (i >>> t) & ((1 << e) - 1); } readBlock() { let e, t, i, a = 1024; const r = this.lzwState; if (!r) return; const s = r.earlyChange; let n = r.nextCode; const o = r.dictionaryValues, g = r.dictionaryLengths, c = r.dictionaryPrevCodes; let C = r.codeLength, h = r.prevCode; const l = r.currentSequence; let Q = r.currentSequenceLength, E = 0, u = this.bufferLength, d = this.ensureBuffer(this.bufferLength + a); for (e = 0; e < 512; e++) { const e = this.readBits(C), r = Q > 0; if (e < 256) { l[0] = e; Q = 1; } else { if (!(e >= 258)) { if (256 === e) { C = 9; n = 258; Q = 0; continue; } this.eof = !0; delete this.lzwState; break; } if (e < n) { Q = g[e]; for (t = Q - 1, i = e; t >= 0; t--) { l[t] = o[i]; i = c[i]; } } else l[Q++] = l[0]; } if (r) { c[n] = h; g[n] = g[h] + 1; o[n] = l[0]; n++; C = (n + s) & (n + s - 1) ? C : 0 | Math.min(Math.log(n + s) / 0.6931471805599453 + 1, 12); } h = e; E += Q; if (a < E) { do { a += 512; } while (a < E); d = this.ensureBuffer(this.bufferLength + a); } for (t = 0; t < Q; t++) d[u++] = l[t]; } r.nextCode = n; r.codeLength = C; r.prevCode = h; r.currentSequenceLength = Q; this.bufferLength = u; } } class PredictorStream extends DecodeStream { constructor(e, t, i) { super(t); if (!(i instanceof Dict)) return e; const a = (this.predictor = i.get('Predictor') || 1); if (a <= 1) return e; if (2 !== a && (a < 10 || a > 15)) throw new FormatError(`Unsupported predictor: ${a}`); this.readBlock = 2 === a ? this.readBlockTiff : this.readBlockPng; this.str = e; this.dict = e.dict; const r = (this.colors = i.get('Colors') || 1), s = (this.bits = i.get('BPC', 'BitsPerComponent') || 8), n = (this.columns = i.get('Columns') || 1); this.pixBytes = (r * s + 7) >> 3; this.rowBytes = (n * r * s + 7) >> 3; return this; } readBlockTiff() { const e = this.rowBytes, t = this.bufferLength, i = this.ensureBuffer(t + e), a = this.bits, r = this.colors, s = this.str.getBytes(e); this.eof = !s.length; if (this.eof) return; let n, o = 0, g = 0, c = 0, C = 0, h = t; if (1 === a && 1 === r) for (n = 0; n < e; ++n) { let e = s[n] ^ o; e ^= e >> 1; e ^= e >> 2; e ^= e >> 4; o = (1 & e) << 7; i[h++] = e; } else if (8 === a) { for (n = 0; n < r; ++n) i[h++] = s[n]; for (; n < e; ++n) { i[h] = i[h - r] + s[n]; h++; } } else if (16 === a) { const t = 2 * r; for (n = 0; n < t; ++n) i[h++] = s[n]; for (; n < e; n += 2) { const e = ((255 & s[n]) << 8) + (255 & s[n + 1]) + ((255 & i[h - t]) << 8) + (255 & i[h - t + 1]); i[h++] = (e >> 8) & 255; i[h++] = 255 & e; } } else { const e = new Uint8Array(r + 1), h = (1 << a) - 1; let l = 0, Q = t; const E = this.columns; for (n = 0; n < E; ++n) for (let t = 0; t < r; ++t) { if (c < a) { o = (o << 8) | (255 & s[l++]); c += 8; } e[t] = (e[t] + (o >> (c - a))) & h; c -= a; g = (g << a) | e[t]; C += a; if (C >= 8) { i[Q++] = (g >> (C - 8)) & 255; C -= 8; } } C > 0 && (i[Q++] = (g << (8 - C)) + (o & ((1 << (8 - C)) - 1))); } this.bufferLength += e; } readBlockPng() { const e = this.rowBytes, t = this.pixBytes, i = this.str.getByte(), a = this.str.getBytes(e); this.eof = !a.length; if (this.eof) return; const r = this.bufferLength, s = this.ensureBuffer(r + e); let n = s.subarray(r - e, r); 0 === n.length && (n = new Uint8Array(e)); let o, g, c, C = r; switch (i) { case 0: for (o = 0; o < e; ++o) s[C++] = a[o]; break; case 1: for (o = 0; o < t; ++o) s[C++] = a[o]; for (; o < e; ++o) { s[C] = (s[C - t] + a[o]) & 255; C++; } break; case 2: for (o = 0; o < e; ++o) s[C++] = (n[o] + a[o]) & 255; break; case 3: for (o = 0; o < t; ++o) s[C++] = (n[o] >> 1) + a[o]; for (; o < e; ++o) { s[C] = (((n[o] + s[C - t]) >> 1) + a[o]) & 255; C++; } break; case 4: for (o = 0; o < t; ++o) { g = n[o]; c = a[o]; s[C++] = g + c; } for (; o < e; ++o) { g = n[o]; const e = n[o - t], i = s[C - t], r = i + g - e; let h = r - i; h < 0 && (h = -h); let l = r - g; l < 0 && (l = -l); let Q = r - e; Q < 0 && (Q = -Q); c = a[o]; s[C++] = h <= l && h <= Q ? i + c : l <= Q ? g + c : e + c; } break; default: throw new FormatError(`Unsupported predictor: ${i}`); } this.bufferLength += e; } } class RunLengthStream extends DecodeStream { constructor(e, t) { super(t); this.str = e; this.dict = e.dict; } readBlock() { const e = this.str.getBytes(2); if (!e || e.length < 2 || 128 === e[0]) { this.eof = !0; return; } let t, i = this.bufferLength, a = e[0]; if (a < 128) { t = this.ensureBuffer(i + a + 1); t[i++] = e[1]; if (a > 0) { const e = this.str.getBytes(a); t.set(e, i); i += a; } } else { a = 257 - a; const r = e[1]; t = this.ensureBuffer(i + a + 1); for (let e = 0; e < a; e++) t[i++] = r; } this.bufferLength = i; } } class Parser { constructor({ lexer: e, xref: t, allowStreams: i = !1, recoveryMode: a = !1, }) { this.lexer = e; this.xref = t; this.allowStreams = i; this.recoveryMode = a; this.imageCache = Object.create(null); this._imageId = 0; this.refill(); } refill() { this.buf1 = this.lexer.getObj(); this.buf2 = this.lexer.getObj(); } shift() { if (this.buf2 instanceof Cmd && 'ID' === this.buf2.cmd) { this.buf1 = this.buf2; this.buf2 = null; } else { this.buf1 = this.buf2; this.buf2 = this.lexer.getObj(); } } tryShift() { try { this.shift(); return !0; } catch (e) { if (e instanceof MissingDataException) throw e; return !1; } } getObj(e = null) { const t = this.buf1; this.shift(); if (t instanceof Cmd) switch (t.cmd) { case 'BI': return this.makeInlineImage(e); case '[': const i = []; for (; !isCmd(this.buf1, ']') && this.buf1 !== yt; ) i.push(this.getObj(e)); if (this.buf1 === yt) { if (this.recoveryMode) return i; throw new ParserEOFException('End of file inside array.'); } this.shift(); return i; case '<<': const a = new Dict(this.xref); for (; !isCmd(this.buf1, '>>') && this.buf1 !== yt; ) { if (!(this.buf1 instanceof Name)) { info('Malformed dictionary: key must be a name object'); this.shift(); continue; } const t = this.buf1.name; this.shift(); if (this.buf1 === yt) break; a.set(t, this.getObj(e)); } if (this.buf1 === yt) { if (this.recoveryMode) return a; throw new ParserEOFException('End of file inside dictionary.'); } if (isCmd(this.buf2, 'stream')) return this.allowStreams ? this.makeStream(a, e) : a; this.shift(); return a; default: return t; } if (Number.isInteger(t)) { if (Number.isInteger(this.buf1) && isCmd(this.buf2, 'R')) { const e = Ref.get(t, this.buf1); this.shift(); this.shift(); return e; } return t; } return 'string' == typeof t && e ? e.decryptString(t) : t; } findDefaultInlineStreamEnd(e) { const { knownCommands: t } = this.lexer, i = e.pos; let a, r, s = 0; for (; -1 !== (a = e.getByte()); ) if (0 === s) s = 69 === a ? 1 : 0; else if (1 === s) s = 73 === a ? 2 : 0; else if (32 === a || 10 === a || 13 === a) { r = e.pos; const i = e.peekBytes(15), n = i.length; if (0 === n) break; for (let e = 0; e < n; e++) { a = i[e]; if ( (0 !== a || 0 === i[e + 1]) && 10 !== a && 13 !== a && (a < 32 || a > 127) ) { s = 0; break; } } if (2 !== s) continue; if (!t) { warn( 'findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.', ); continue; } const o = new Lexer(new Stream(i.slice()), t); o._hexStringWarn = () => {}; let g = 0; for (;;) { const e = o.getObj(); if (e === yt) { s = 0; break; } if (e instanceof Cmd) { const i = t[e.cmd]; if (!i) { s = 0; break; } if (i.variableArgs ? g <= i.numArgs : g === i.numArgs) break; g = 0; } else g++; } if (2 === s) break; } else s = 0; if (-1 === a) { warn( 'findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker', ); if (r) { warn('... trying to recover by using the last "EI" occurrence.'); e.skip(-(e.pos - r)); } } let n = 4; e.skip(-n); a = e.peekByte(); e.skip(n); isWhiteSpace(a) || n--; return e.pos - n - i; } findDCTDecodeInlineStreamEnd(e) { const t = e.pos; let i, a, r = !1; for (; -1 !== (i = e.getByte()); ) if (255 === i) { switch (e.getByte()) { case 0: break; case 255: e.skip(-1); break; case 217: r = !0; break; case 192: case 193: case 194: case 195: case 197: case 198: case 199: case 201: case 202: case 203: case 205: case 206: case 207: case 196: case 204: case 218: case 219: case 220: case 221: case 222: case 223: case 224: case 225: case 226: case 227: case 228: case 229: case 230: case 231: case 232: case 233: case 234: case 235: case 236: case 237: case 238: case 239: case 254: a = e.getUint16(); a > 2 ? e.skip(a - 2) : e.skip(-2); } if (r) break; } const s = e.pos - t; if (-1 === i) { warn( 'Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead.', ); e.skip(-s); return this.findDefaultInlineStreamEnd(e); } this.inlineStreamSkipEI(e); return s; } findASCII85DecodeInlineStreamEnd(e) { const t = e.pos; let i; for (; -1 !== (i = e.getByte()); ) if (126 === i) { const t = e.pos; i = e.peekByte(); for (; isWhiteSpace(i); ) { e.skip(); i = e.peekByte(); } if (62 === i) { e.skip(); break; } if (e.pos > t) { const t = e.peekBytes(2); if (69 === t[0] && 73 === t[1]) break; } } const a = e.pos - t; if (-1 === i) { warn( 'Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead.', ); e.skip(-a); return this.findDefaultInlineStreamEnd(e); } this.inlineStreamSkipEI(e); return a; } findASCIIHexDecodeInlineStreamEnd(e) { const t = e.pos; let i; for (; -1 !== (i = e.getByte()) && 62 !== i; ); const a = e.pos - t; if (-1 === i) { warn( 'Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead.', ); e.skip(-a); return this.findDefaultInlineStreamEnd(e); } this.inlineStreamSkipEI(e); return a; } inlineStreamSkipEI(e) { let t, i = 0; for (; -1 !== (t = e.getByte()); ) if (0 === i) i = 69 === t ? 1 : 0; else if (1 === i) i = 73 === t ? 2 : 0; else if (2 === i) break; } makeInlineImage(e) { const t = this.lexer, i = t.stream, a = Object.create(null); let r; for (; !isCmd(this.buf1, 'ID') && this.buf1 !== yt; ) { if (!(this.buf1 instanceof Name)) throw new FormatError('Dictionary key must be a name object'); const t = this.buf1.name; this.shift(); if (this.buf1 === yt) break; a[t] = this.getObj(e); } -1 !== t.beginInlineImagePos && (r = i.pos - t.beginInlineImagePos); const s = this.xref.fetchIfRef(a.F || a.Filter); let n; if (s instanceof Name) n = s.name; else if (Array.isArray(s)) { const e = this.xref.fetchIfRef(s[0]); e instanceof Name && (n = e.name); } const o = i.pos; let g, c; switch (n) { case 'DCT': case 'DCTDecode': g = this.findDCTDecodeInlineStreamEnd(i); break; case 'A85': case 'ASCII85Decode': g = this.findASCII85DecodeInlineStreamEnd(i); break; case 'AHx': case 'ASCIIHexDecode': g = this.findASCIIHexDecodeInlineStreamEnd(i); break; default: g = this.findDefaultInlineStreamEnd(i); } if (g < 1e3 && r > 0) { const e = i.pos; i.pos = t.beginInlineImagePos; c = (function getInlineImageCacheKey(e) { const t = [], i = e.length; let a = 0; for (; a < i - 1; ) t.push((e[a++] << 8) | e[a++]); a < i && t.push(e[a]); return i + '_' + String.fromCharCode.apply(null, t); })(i.getBytes(r + g)); i.pos = e; const a = this.imageCache[c]; if (void 0 !== a) { this.buf2 = Cmd.get('EI'); this.shift(); a.reset(); return a; } } const C = new Dict(this.xref); for (const e in a) C.set(e, a[e]); let h = i.makeSubStream(o, g, C); e && (h = e.createStream(h, g)); h = this.filter(h, C, g); h.dict = C; if (void 0 !== c) { h.cacheKey = 'inline_img_' + ++this._imageId; this.imageCache[c] = h; } this.buf2 = Cmd.get('EI'); this.shift(); return h; } #w(e) { const { stream: t } = this.lexer; t.pos = e; const i = new Uint8Array([101, 110, 100]), a = i.length, r = [ new Uint8Array([115, 116, 114, 101, 97, 109]), new Uint8Array([115, 116, 101, 97, 109]), new Uint8Array([115, 116, 114, 101, 97]), ], s = 9 - a; for (; t.pos < t.end; ) { const n = t.peekBytes(2048), o = n.length - 9; if (o <= 0) break; let g = 0; for (; g < o; ) { let o = 0; for (; o < a && n[g + o] === i[o]; ) o++; if (o >= a) { let a = !1; for (const e of r) { const t = e.length; let r = 0; for (; r < t && n[g + o + r] === e[r]; ) r++; if (r >= s) { a = !0; break; } if (r >= t) { if (isWhiteSpace(n[g + o + r])) { info( `Found "${bytesToString([ ...i, ...e, ])}" when searching for endstream command.`, ); a = !0; } break; } } if (a) { t.pos += g; return t.pos - e; } } g++; } t.pos += o; } return -1; } makeStream(e, t) { const i = this.lexer; let a = i.stream; i.skipToNextLine(); const r = a.pos - 1; let s = e.get('Length'); if (!Number.isInteger(s)) { info(`Bad length "${s && s.toString()}" in stream.`); s = 0; } a.pos = r + s; i.nextChar(); if (this.tryShift() && isCmd(this.buf2, 'endstream')) this.shift(); else { s = this.#w(r); if (s < 0) throw new FormatError('Missing endstream command.'); i.nextChar(); this.shift(); this.shift(); } this.shift(); a = a.makeSubStream(r, s, e); t && (a = t.createStream(a, s)); a = this.filter(a, e, s); a.dict = e; return a; } filter(e, t, i) { let a = t.get('F', 'Filter'), r = t.get('DP', 'DecodeParms'); if (a instanceof Name) { Array.isArray(r) && warn('/DecodeParms should not be an Array, when /Filter is a Name.'); return this.makeFilter(e, a.name, i, r); } let s = i; if (Array.isArray(a)) { const t = a, i = r; for (let n = 0, o = t.length; n < o; ++n) { a = this.xref.fetchIfRef(t[n]); if (!(a instanceof Name)) throw new FormatError(`Bad filter name "${a}"`); r = null; Array.isArray(i) && n in i && (r = this.xref.fetchIfRef(i[n])); e = this.makeFilter(e, a.name, s, r); s = null; } } return e; } makeFilter(e, t, i, a) { if (0 === i) { warn(`Empty "${t}" stream.`); return new NullStream(); } try { switch (t) { case 'Fl': case 'FlateDecode': return a ? new PredictorStream(new FlateStream(e, i), i, a) : new FlateStream(e, i); case 'LZW': case 'LZWDecode': let t = 1; if (a) { a.has('EarlyChange') && (t = a.get('EarlyChange')); return new PredictorStream(new LZWStream(e, i, t), i, a); } return new LZWStream(e, i, t); case 'DCT': case 'DCTDecode': return new JpegStream(e, i, a); case 'JPX': case 'JPXDecode': return new JpxStream(e, i, a); case 'A85': case 'ASCII85Decode': return new Ascii85Stream(e, i); case 'AHx': case 'ASCIIHexDecode': return new AsciiHexStream(e, i); case 'CCF': case 'CCITTFaxDecode': return new CCITTFaxStream(e, i, a); case 'RL': case 'RunLengthDecode': return new RunLengthStream(e, i); case 'JBIG2Decode': return new Jbig2Stream(e, i, a); } warn(`Filter "${t}" is not supported.`); return e; } catch (e) { if (e instanceof MissingDataException) throw e; warn(`Invalid stream: "${e}"`); return new NullStream(); } } } const hi = [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; function toHexDigit(e) { return e >= 48 && e <= 57 ? 15 & e : (e >= 65 && e <= 70) || (e >= 97 && e <= 102) ? 9 + (15 & e) : -1; } class Lexer { constructor(e, t = null) { this.stream = e; this.nextChar(); this.strBuf = []; this.knownCommands = t; this._hexStringNumWarn = 0; this.beginInlineImagePos = -1; } nextChar() { return (this.currentChar = this.stream.getByte()); } peekChar() { return this.stream.peekByte(); } getNumber() { let e = this.currentChar, t = !1, i = 0, a = 1; if (45 === e) { a = -1; e = this.nextChar(); 45 === e && (e = this.nextChar()); } else 43 === e && (e = this.nextChar()); if (10 === e || 13 === e) do { e = this.nextChar(); } while (10 === e || 13 === e); if (46 === e) { i = 10; e = this.nextChar(); } if (e < 48 || e > 57) { const t = `Invalid number: ${String.fromCharCode(e)} (charCode ${e})`; if (isWhiteSpace(e) || -1 === e) { info(`Lexer.getNumber - "${t}".`); return 0; } throw new FormatError(t); } let r = e - 48, s = 0, n = 1; for (; (e = this.nextChar()) >= 0; ) if (e >= 48 && e <= 57) { const a = e - 48; if (t) s = 10 * s + a; else { 0 !== i && (i *= 10); r = 10 * r + a; } } else if (46 === e) { if (0 !== i) break; i = 1; } else if (45 === e) warn('Badly formatted number: minus sign in the middle'); else { if (69 !== e && 101 !== e) break; e = this.peekChar(); if (43 === e || 45 === e) { n = 45 === e ? -1 : 1; this.nextChar(); } else if (e < 48 || e > 57) break; t = !0; } 0 !== i && (r /= i); t && (r *= 10 ** (n * s)); return a * r; } getString() { let e = 1, t = !1; const i = this.strBuf; i.length = 0; let a = this.nextChar(); for (;;) { let r = !1; switch (0 | a) { case -1: warn('Unterminated string'); t = !0; break; case 40: ++e; i.push('('); break; case 41: if (0 == --e) { this.nextChar(); t = !0; } else i.push(')'); break; case 92: a = this.nextChar(); switch (a) { case -1: warn('Unterminated string'); t = !0; break; case 110: i.push('\n'); break; case 114: i.push('\r'); break; case 116: i.push('\t'); break; case 98: i.push('\b'); break; case 102: i.push('\f'); break; case 92: case 40: case 41: i.push(String.fromCharCode(a)); break; case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: let e = 15 & a; a = this.nextChar(); r = !0; if (a >= 48 && a <= 55) { e = (e << 3) + (15 & a); a = this.nextChar(); if (a >= 48 && a <= 55) { r = !1; e = (e << 3) + (15 & a); } } i.push(String.fromCharCode(e)); break; case 13: 10 === this.peekChar() && this.nextChar(); break; case 10: break; default: i.push(String.fromCharCode(a)); } break; default: i.push(String.fromCharCode(a)); } if (t) break; r || (a = this.nextChar()); } return i.join(''); } getName() { let e, t; const i = this.strBuf; i.length = 0; for (; (e = this.nextChar()) >= 0 && !hi[e]; ) if (35 === e) { e = this.nextChar(); if (hi[e]) { warn( 'Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number.', ); i.push('#'); break; } const a = toHexDigit(e); if (-1 !== a) { t = e; e = this.nextChar(); const r = toHexDigit(e); if (-1 === r) { warn( `Lexer_getName: Illegal digit (${String.fromCharCode( e, )}) in hexadecimal number.`, ); i.push('#', String.fromCharCode(t)); if (hi[e]) break; i.push(String.fromCharCode(e)); continue; } i.push(String.fromCharCode((a << 4) | r)); } else i.push('#', String.fromCharCode(e)); } else i.push(String.fromCharCode(e)); i.length > 127 && warn(`Name token is longer than allowed by the spec: ${i.length}`); return Name.get(i.join('')); } _hexStringWarn(e) { 5 != this._hexStringNumWarn++ ? this._hexStringNumWarn > 5 || warn(`getHexString - ignoring invalid character: ${e}`) : warn('getHexString - ignoring additional invalid characters.'); } getHexString() { const e = this.strBuf; e.length = 0; let t, i, a = this.currentChar, r = !0; this._hexStringNumWarn = 0; for (;;) { if (a < 0) { warn('Unterminated hex string'); break; } if (62 === a) { this.nextChar(); break; } if (1 !== hi[a]) { if (r) { t = toHexDigit(a); if (-1 === t) { this._hexStringWarn(a); a = this.nextChar(); continue; } } else { i = toHexDigit(a); if (-1 === i) { this._hexStringWarn(a); a = this.nextChar(); continue; } e.push(String.fromCharCode((t << 4) | i)); } r = !r; a = this.nextChar(); } else a = this.nextChar(); } return e.join(''); } getObj() { let e = !1, t = this.currentChar; for (;;) { if (t < 0) return yt; if (e) (10 !== t && 13 !== t) || (e = !1); else if (37 === t) e = !0; else if (1 !== hi[t]) break; t = this.nextChar(); } switch (0 | t) { case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 43: case 45: case 46: return this.getNumber(); case 40: return this.getString(); case 47: return this.getName(); case 91: this.nextChar(); return Cmd.get('['); case 93: this.nextChar(); return Cmd.get(']'); case 60: t = this.nextChar(); if (60 === t) { this.nextChar(); return Cmd.get('<<'); } return this.getHexString(); case 62: t = this.nextChar(); if (62 === t) { this.nextChar(); return Cmd.get('>>'); } return Cmd.get('>'); case 123: this.nextChar(); return Cmd.get('{'); case 125: this.nextChar(); return Cmd.get('}'); case 41: this.nextChar(); throw new FormatError(`Illegal character: ${t}`); } let i = String.fromCharCode(t); if (t < 32 || t > 127) { const e = this.peekChar(); if (e >= 32 && e <= 127) { this.nextChar(); return Cmd.get(i); } } const a = this.knownCommands; let r = void 0 !== a?.[i]; for (; (t = this.nextChar()) >= 0 && !hi[t]; ) { const e = i + String.fromCharCode(t); if (r && void 0 === a[e]) break; if (128 === i.length) throw new FormatError(`Command token too long: ${i.length}`); i = e; r = void 0 !== a?.[i]; } if ('true' === i) return !0; if ('false' === i) return !1; if ('null' === i) return null; 'BI' === i && (this.beginInlineImagePos = this.stream.pos); return Cmd.get(i); } skipToNextLine() { let e = this.currentChar; for (; e >= 0; ) { if (13 === e) { e = this.nextChar(); 10 === e && this.nextChar(); break; } if (10 === e) { this.nextChar(); break; } e = this.nextChar(); } } } class Linearization { static create(e) { function getInt(e, t, i = !1) { const a = e.get(t); if (Number.isInteger(a) && (i ? a >= 0 : a > 0)) return a; throw new Error( `The "${t}" parameter in the linearization dictionary is invalid.`, ); } const t = new Parser({ lexer: new Lexer(e), xref: null }), i = t.getObj(), a = t.getObj(), r = t.getObj(), s = t.getObj(); let n, o; if ( !( Number.isInteger(i) && Number.isInteger(a) && isCmd(r, 'obj') && s instanceof Dict && 'number' == typeof (n = s.get('Linearized')) && n > 0 ) ) return null; if ((o = getInt(s, 'L')) !== e.length) throw new Error( 'The "L" parameter in the linearization dictionary does not equal the stream length.', ); return { length: o, hints: (function getHints(e) { const t = e.get('H'); let i; if (Array.isArray(t) && (2 === (i = t.length) || 4 === i)) { for (let e = 0; e < i; e++) { const i = t[e]; if (!(Number.isInteger(i) && i > 0)) throw new Error( `Hint (${e}) in the linearization dictionary is invalid.`, ); } return t; } throw new Error( 'Hint array in the linearization dictionary is invalid.', ); })(s), objectNumberFirst: getInt(s, 'O'), endFirst: getInt(s, 'E'), numPages: getInt(s, 'N'), mainXRefEntriesOffset: getInt(s, 'T'), pageFirst: s.has('P') ? getInt(s, 'P', !0) : 0, }; } } const li = [ 'Adobe-GB1-UCS2', 'Adobe-CNS1-UCS2', 'Adobe-Japan1-UCS2', 'Adobe-Korea1-UCS2', '78-EUC-H', '78-EUC-V', '78-H', '78-RKSJ-H', '78-RKSJ-V', '78-V', '78ms-RKSJ-H', '78ms-RKSJ-V', '83pv-RKSJ-H', '90ms-RKSJ-H', '90ms-RKSJ-V', '90msp-RKSJ-H', '90msp-RKSJ-V', '90pv-RKSJ-H', '90pv-RKSJ-V', 'Add-H', 'Add-RKSJ-H', 'Add-RKSJ-V', 'Add-V', 'Adobe-CNS1-0', 'Adobe-CNS1-1', 'Adobe-CNS1-2', 'Adobe-CNS1-3', 'Adobe-CNS1-4', 'Adobe-CNS1-5', 'Adobe-CNS1-6', 'Adobe-GB1-0', 'Adobe-GB1-1', 'Adobe-GB1-2', 'Adobe-GB1-3', 'Adobe-GB1-4', 'Adobe-GB1-5', 'Adobe-Japan1-0', 'Adobe-Japan1-1', 'Adobe-Japan1-2', 'Adobe-Japan1-3', 'Adobe-Japan1-4', 'Adobe-Japan1-5', 'Adobe-Japan1-6', 'Adobe-Korea1-0', 'Adobe-Korea1-1', 'Adobe-Korea1-2', 'B5-H', 'B5-V', 'B5pc-H', 'B5pc-V', 'CNS-EUC-H', 'CNS-EUC-V', 'CNS1-H', 'CNS1-V', 'CNS2-H', 'CNS2-V', 'ETHK-B5-H', 'ETHK-B5-V', 'ETen-B5-H', 'ETen-B5-V', 'ETenms-B5-H', 'ETenms-B5-V', 'EUC-H', 'EUC-V', 'Ext-H', 'Ext-RKSJ-H', 'Ext-RKSJ-V', 'Ext-V', 'GB-EUC-H', 'GB-EUC-V', 'GB-H', 'GB-V', 'GBK-EUC-H', 'GBK-EUC-V', 'GBK2K-H', 'GBK2K-V', 'GBKp-EUC-H', 'GBKp-EUC-V', 'GBT-EUC-H', 'GBT-EUC-V', 'GBT-H', 'GBT-V', 'GBTpc-EUC-H', 'GBTpc-EUC-V', 'GBpc-EUC-H', 'GBpc-EUC-V', 'H', 'HKdla-B5-H', 'HKdla-B5-V', 'HKdlb-B5-H', 'HKdlb-B5-V', 'HKgccs-B5-H', 'HKgccs-B5-V', 'HKm314-B5-H', 'HKm314-B5-V', 'HKm471-B5-H', 'HKm471-B5-V', 'HKscs-B5-H', 'HKscs-B5-V', 'Hankaku', 'Hiragana', 'KSC-EUC-H', 'KSC-EUC-V', 'KSC-H', 'KSC-Johab-H', 'KSC-Johab-V', 'KSC-V', 'KSCms-UHC-H', 'KSCms-UHC-HW-H', 'KSCms-UHC-HW-V', 'KSCms-UHC-V', 'KSCpc-EUC-H', 'KSCpc-EUC-V', 'Katakana', 'NWP-H', 'NWP-V', 'RKSJ-H', 'RKSJ-V', 'Roman', 'UniCNS-UCS2-H', 'UniCNS-UCS2-V', 'UniCNS-UTF16-H', 'UniCNS-UTF16-V', 'UniCNS-UTF32-H', 'UniCNS-UTF32-V', 'UniCNS-UTF8-H', 'UniCNS-UTF8-V', 'UniGB-UCS2-H', 'UniGB-UCS2-V', 'UniGB-UTF16-H', 'UniGB-UTF16-V', 'UniGB-UTF32-H', 'UniGB-UTF32-V', 'UniGB-UTF8-H', 'UniGB-UTF8-V', 'UniJIS-UCS2-H', 'UniJIS-UCS2-HW-H', 'UniJIS-UCS2-HW-V', 'UniJIS-UCS2-V', 'UniJIS-UTF16-H', 'UniJIS-UTF16-V', 'UniJIS-UTF32-H', 'UniJIS-UTF32-V', 'UniJIS-UTF8-H', 'UniJIS-UTF8-V', 'UniJIS2004-UTF16-H', 'UniJIS2004-UTF16-V', 'UniJIS2004-UTF32-H', 'UniJIS2004-UTF32-V', 'UniJIS2004-UTF8-H', 'UniJIS2004-UTF8-V', 'UniJISPro-UCS2-HW-V', 'UniJISPro-UCS2-V', 'UniJISPro-UTF8-V', 'UniJISX0213-UTF32-H', 'UniJISX0213-UTF32-V', 'UniJISX02132004-UTF32-H', 'UniJISX02132004-UTF32-V', 'UniKS-UCS2-H', 'UniKS-UCS2-V', 'UniKS-UTF16-H', 'UniKS-UTF16-V', 'UniKS-UTF32-H', 'UniKS-UTF32-V', 'UniKS-UTF8-H', 'UniKS-UTF8-V', 'V', 'WP-Symbol', ], Bi = 2 ** 24 - 1; class CMap { constructor(e = !1) { this.codespaceRanges = [[], [], [], []]; this.numCodespaceRanges = 0; this._map = []; this.name = ''; this.vertical = !1; this.useCMap = null; this.builtInCMap = e; } addCodespaceRange(e, t, i) { this.codespaceRanges[e - 1].push(t, i); this.numCodespaceRanges++; } mapCidRange(e, t, i) { if (t - e > Bi) throw new Error('mapCidRange - ignoring data above MAX_MAP_RANGE.'); for (; e <= t; ) this._map[e++] = i++; } mapBfRange(e, t, i) { if (t - e > Bi) throw new Error('mapBfRange - ignoring data above MAX_MAP_RANGE.'); const a = i.length - 1; for (; e <= t; ) { this._map[e++] = i; const t = i.charCodeAt(a) + 1; t > 255 ? (i = i.substring(0, a - 1) + String.fromCharCode(i.charCodeAt(a - 1) + 1) + '\0') : (i = i.substring(0, a) + String.fromCharCode(t)); } } mapBfRangeToArray(e, t, i) { if (t - e > Bi) throw new Error('mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.'); const a = i.length; let r = 0; for (; e <= t && r < a; ) { this._map[e] = i[r++]; ++e; } } mapOne(e, t) { this._map[e] = t; } lookup(e) { return this._map[e]; } contains(e) { return void 0 !== this._map[e]; } forEach(e) { const t = this._map, i = t.length; if (i <= 65536) for (let a = 0; a < i; a++) void 0 !== t[a] && e(a, t[a]); else for (const i in t) e(i, t[i]); } charCodeOf(e) { const t = this._map; if (t.length <= 65536) return t.indexOf(e); for (const i in t) if (t[i] === e) return 0 | i; return -1; } getMap() { return this._map; } readCharCode(e, t, i) { let a = 0; const r = this.codespaceRanges; for (let s = 0, n = r.length; s < n; s++) { a = ((a << 8) | e.charCodeAt(t + s)) >>> 0; const n = r[s]; for (let e = 0, t = n.length; e < t; ) { const t = n[e++], r = n[e++]; if (a >= t && a <= r) { i.charcode = a; i.length = s + 1; return; } } } i.charcode = 0; i.length = 1; } getCharCodeLength(e) { const t = this.codespaceRanges; for (let i = 0, a = t.length; i < a; i++) { const a = t[i]; for (let t = 0, r = a.length; t < r; ) { const r = a[t++], s = a[t++]; if (e >= r && e <= s) return i + 1; } } return 1; } get length() { return this._map.length; } get isIdentityCMap() { if ('Identity-H' !== this.name && 'Identity-V' !== this.name) return !1; if (65536 !== this._map.length) return !1; for (let e = 0; e < 65536; e++) if (this._map[e] !== e) return !1; return !0; } } class IdentityCMap extends CMap { constructor(e, t) { super(); this.vertical = e; this.addCodespaceRange(t, 0, 65535); } mapCidRange(e, t, i) { unreachable('should not call mapCidRange'); } mapBfRange(e, t, i) { unreachable('should not call mapBfRange'); } mapBfRangeToArray(e, t, i) { unreachable('should not call mapBfRangeToArray'); } mapOne(e, t) { unreachable('should not call mapCidOne'); } lookup(e) { return Number.isInteger(e) && e <= 65535 ? e : void 0; } contains(e) { return Number.isInteger(e) && e <= 65535; } forEach(e) { for (let t = 0; t <= 65535; t++) e(t, t); } charCodeOf(e) { return Number.isInteger(e) && e <= 65535 ? e : -1; } getMap() { const e = new Array(65536); for (let t = 0; t <= 65535; t++) e[t] = t; return e; } get length() { return 65536; } get isIdentityCMap() { unreachable('should not access .isIdentityCMap'); } } function strToInt(e) { let t = 0; for (let i = 0; i < e.length; i++) t = (t << 8) | e.charCodeAt(i); return t >>> 0; } function expectString(e) { if ('string' != typeof e) throw new FormatError('Malformed CMap: expected string.'); } function expectInt(e) { if (!Number.isInteger(e)) throw new FormatError('Malformed CMap: expected int.'); } function parseBfChar(e, t) { for (;;) { let i = t.getObj(); if (i === yt) break; if (isCmd(i, 'endbfchar')) return; expectString(i); const a = strToInt(i); i = t.getObj(); expectString(i); const r = i; e.mapOne(a, r); } } function parseBfRange(e, t) { for (;;) { let i = t.getObj(); if (i === yt) break; if (isCmd(i, 'endbfrange')) return; expectString(i); const a = strToInt(i); i = t.getObj(); expectString(i); const r = strToInt(i); i = t.getObj(); if (Number.isInteger(i) || 'string' == typeof i) { const t = Number.isInteger(i) ? String.fromCharCode(i) : i; e.mapBfRange(a, r, t); } else { if (!isCmd(i, '[')) break; { i = t.getObj(); const s = []; for (; !isCmd(i, ']') && i !== yt; ) { s.push(i); i = t.getObj(); } e.mapBfRangeToArray(a, r, s); } } } throw new FormatError('Invalid bf range.'); } function parseCidChar(e, t) { for (;;) { let i = t.getObj(); if (i === yt) break; if (isCmd(i, 'endcidchar')) return; expectString(i); const a = strToInt(i); i = t.getObj(); expectInt(i); const r = i; e.mapOne(a, r); } } function parseCidRange(e, t) { for (;;) { let i = t.getObj(); if (i === yt) break; if (isCmd(i, 'endcidrange')) return; expectString(i); const a = strToInt(i); i = t.getObj(); expectString(i); const r = strToInt(i); i = t.getObj(); expectInt(i); const s = i; e.mapCidRange(a, r, s); } } function parseCodespaceRange(e, t) { for (;;) { let i = t.getObj(); if (i === yt) break; if (isCmd(i, 'endcodespacerange')) return; if ('string' != typeof i) break; const a = strToInt(i); i = t.getObj(); if ('string' != typeof i) break; const r = strToInt(i); e.addCodespaceRange(i.length, a, r); } throw new FormatError('Invalid codespace range.'); } function parseWMode(e, t) { const i = t.getObj(); Number.isInteger(i) && (e.vertical = !!i); } function parseCMapName(e, t) { const i = t.getObj(); i instanceof Name && (e.name = i.name); } async function parseCMap(e, t, i, a) { let r, s; A: for (;;) try { const i = t.getObj(); if (i === yt) break; if (i instanceof Name) { 'WMode' === i.name ? parseWMode(e, t) : 'CMapName' === i.name && parseCMapName(e, t); r = i; } else if (i instanceof Cmd) switch (i.cmd) { case 'endcmap': break A; case 'usecmap': r instanceof Name && (s = r.name); break; case 'begincodespacerange': parseCodespaceRange(e, t); break; case 'beginbfchar': parseBfChar(e, t); break; case 'begincidchar': parseCidChar(e, t); break; case 'beginbfrange': parseBfRange(e, t); break; case 'begincidrange': parseCidRange(e, t); } } catch (e) { if (e instanceof MissingDataException) throw e; warn('Invalid cMap data: ' + e); continue; } !a && s && (a = s); return a ? extendCMap(e, i, a) : e; } async function extendCMap(e, t, i) { e.useCMap = await createBuiltInCMap(i, t); if (0 === e.numCodespaceRanges) { const t = e.useCMap.codespaceRanges; for (let i = 0; i < t.length; i++) e.codespaceRanges[i] = t[i].slice(); e.numCodespaceRanges = e.useCMap.numCodespaceRanges; } e.useCMap.forEach(function (t, i) { e.contains(t) || e.mapOne(t, e.useCMap.lookup(t)); }); return e; } async function createBuiltInCMap(e, t) { if ('Identity-H' === e) return new IdentityCMap(!1, 2); if ('Identity-V' === e) return new IdentityCMap(!0, 2); if (!li.includes(e)) throw new Error('Unknown CMap name: ' + e); if (!t) throw new Error('Built-in CMap parameters are not provided.'); const { cMapData: i, compressionType: a } = await t(e), r = new CMap(!0); if (a === wA.BINARY) return new BinaryCMapReader().process(i, r, (e) => extendCMap(r, t, e)); if (a === wA.NONE) { const e = new Lexer(new Stream(i)); return parseCMap(r, e, t, null); } throw new Error(`Invalid CMap "compressionType" value: ${a}`); } class CMapFactory { static async create({ encoding: e, fetchBuiltInCMap: t, useCMap: i }) { if (e instanceof Name) return createBuiltInCMap(e.name, t); if (e instanceof BaseStream) { const a = await parseCMap(new CMap(), new Lexer(e), t, i); return a.isIdentityCMap ? createBuiltInCMap(a.name, t) : a; } throw new Error('Encoding required.'); } } __webpack_require__(1795); const Qi = [ '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron', ], Ei = [ '.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall', ], ui = [ '.notdef', 'space', 'dollaroldstyle', 'dollarsuperior', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted', 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter', 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', ], di = [ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior', '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '', '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall', ], fi = [ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', 'centoldstyle', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', '', 'threequartersemdash', '', 'questionsmall', '', '', '', '', 'Ethsmall', '', '', 'onequarter', 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '', '', '', '', '', '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hypheninferior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', 'asuperior', 'centsuperior', '', '', '', '', 'Aacutesmall', 'Agravesmall', 'Acircumflexsmall', 'Adieresissmall', 'Atildesmall', 'Aringsmall', 'Ccedillasmall', 'Eacutesmall', 'Egravesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Iacutesmall', 'Igravesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ntildesmall', 'Oacutesmall', 'Ogravesmall', 'Ocircumflexsmall', 'Odieresissmall', 'Otildesmall', 'Uacutesmall', 'Ugravesmall', 'Ucircumflexsmall', 'Udieresissmall', '', 'eightsuperior', 'fourinferior', 'threeinferior', 'sixinferior', 'eightinferior', 'seveninferior', 'Scaronsmall', '', 'centinferior', 'twoinferior', '', 'Dieresissmall', '', 'Caronsmall', 'osuperior', 'fiveinferior', '', 'commainferior', 'periodinferior', 'Yacutesmall', '', 'dollarinferior', '', '', 'Thornsmall', '', 'nineinferior', 'zeroinferior', 'Zcaronsmall', 'AEsmall', 'Oslashsmall', 'questiondownsmall', 'oneinferior', 'Lslashsmall', '', '', '', '', '', '', 'Cedillasmall', '', '', '', '', '', 'OEsmall', 'figuredash', 'hyphensuperior', '', '', '', '', 'exclamdownsmall', '', 'Ydieresissmall', '', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'ninesuperior', 'zerosuperior', '', 'esuperior', 'rsuperior', 'tsuperior', '', '', 'isuperior', 'ssuperior', 'dsuperior', '', '', '', '', '', 'lsuperior', 'Ogoneksmall', 'Brevesmall', 'Macronsmall', 'bsuperior', 'nsuperior', 'msuperior', 'commasuperior', 'periodsuperior', 'Dotaccentsmall', 'Ringsmall', '', '', '', '', ], pi = [ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis', 'space', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', ], mi = [ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', 'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls', '', '', '', '', ], yi = [ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'bullet', 'Euro', 'bullet', 'quotesinglbase', 'florin', 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft', 'OE', 'bullet', 'Zcaron', 'bullet', 'bullet', 'quoteleft', 'quoteright', 'quotedblleft', 'quotedblright', 'bullet', 'endash', 'emdash', 'tilde', 'trademark', 'scaron', 'guilsinglright', 'oe', 'bullet', 'zcaron', 'Ydieresis', 'space', 'exclamdown', 'cent', 'sterling', 'currency', 'yen', 'brokenbar', 'section', 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', 'logicalnot', 'hyphen', 'registered', 'macron', 'degree', 'plusminus', 'twosuperior', 'threesuperior', 'acute', 'mu', 'paragraph', 'periodcentered', 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', 'onequarter', 'onehalf', 'threequarters', 'questiondown', 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', 'Adieresis', 'Aring', 'AE', 'Ccedilla', 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Eth', 'Ntilde', 'Ograve', 'Oacute', 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', 'Udieresis', 'Yacute', 'Thorn', 'germandbls', 'agrave', 'aacute', 'acircumflex', 'atilde', 'adieresis', 'aring', 'ae', 'ccedilla', 'egrave', 'eacute', 'ecircumflex', 'edieresis', 'igrave', 'iacute', 'icircumflex', 'idieresis', 'eth', 'ntilde', 'ograve', 'oacute', 'ocircumflex', 'otilde', 'odieresis', 'divide', 'oslash', 'ugrave', 'uacute', 'ucircumflex', 'udieresis', 'yacute', 'thorn', 'ydieresis', ], wi = [ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'universal', 'numbersign', 'existential', 'percent', 'ampersand', 'suchthat', 'parenleft', 'parenright', 'asteriskmath', 'plus', 'comma', 'minus', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'congruent', 'Alpha', 'Beta', 'Chi', 'Delta', 'Epsilon', 'Phi', 'Gamma', 'Eta', 'Iota', 'theta1', 'Kappa', 'Lambda', 'Mu', 'Nu', 'Omicron', 'Pi', 'Theta', 'Rho', 'Sigma', 'Tau', 'Upsilon', 'sigma1', 'Omega', 'Xi', 'Psi', 'Zeta', 'bracketleft', 'therefore', 'bracketright', 'perpendicular', 'underscore', 'radicalex', 'alpha', 'beta', 'chi', 'delta', 'epsilon', 'phi', 'gamma', 'eta', 'iota', 'phi1', 'kappa', 'lambda', 'mu', 'nu', 'omicron', 'pi', 'theta', 'rho', 'sigma', 'tau', 'upsilon', 'omega1', 'omega', 'xi', 'psi', 'zeta', 'braceleft', 'bar', 'braceright', 'similar', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Euro', 'Upsilon1', 'minute', 'lessequal', 'fraction', 'infinity', 'florin', 'club', 'diamond', 'heart', 'spade', 'arrowboth', 'arrowleft', 'arrowup', 'arrowright', 'arrowdown', 'degree', 'plusminus', 'second', 'greaterequal', 'multiply', 'proportional', 'partialdiff', 'bullet', 'divide', 'notequal', 'equivalence', 'approxequal', 'ellipsis', 'arrowvertex', 'arrowhorizex', 'carriagereturn', 'aleph', 'Ifraktur', 'Rfraktur', 'weierstrass', 'circlemultiply', 'circleplus', 'emptyset', 'intersection', 'union', 'propersuperset', 'reflexsuperset', 'notsubset', 'propersubset', 'reflexsubset', 'element', 'notelement', 'angle', 'gradient', 'registerserif', 'copyrightserif', 'trademarkserif', 'product', 'radical', 'dotmath', 'logicalnot', 'logicaland', 'logicalor', 'arrowdblboth', 'arrowdblleft', 'arrowdblup', 'arrowdblright', 'arrowdbldown', 'lozenge', 'angleleft', 'registersans', 'copyrightsans', 'trademarksans', 'summation', 'parenlefttp', 'parenleftex', 'parenleftbt', 'bracketlefttp', 'bracketleftex', 'bracketleftbt', 'bracelefttp', 'braceleftmid', 'braceleftbt', 'braceex', '', 'angleright', 'integral', 'integraltp', 'integralex', 'integralbt', 'parenrighttp', 'parenrightex', 'parenrightbt', 'bracketrighttp', 'bracketrightex', 'bracketrightbt', 'bracerighttp', 'bracerightmid', 'bracerightbt', '', ], bi = [ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'a1', 'a2', 'a202', 'a3', 'a4', 'a5', 'a119', 'a118', 'a117', 'a11', 'a12', 'a13', 'a14', 'a15', 'a16', 'a105', 'a17', 'a18', 'a19', 'a20', 'a21', 'a22', 'a23', 'a24', 'a25', 'a26', 'a27', 'a28', 'a6', 'a7', 'a8', 'a9', 'a10', 'a29', 'a30', 'a31', 'a32', 'a33', 'a34', 'a35', 'a36', 'a37', 'a38', 'a39', 'a40', 'a41', 'a42', 'a43', 'a44', 'a45', 'a46', 'a47', 'a48', 'a49', 'a50', 'a51', 'a52', 'a53', 'a54', 'a55', 'a56', 'a57', 'a58', 'a59', 'a60', 'a61', 'a62', 'a63', 'a64', 'a65', 'a66', 'a67', 'a68', 'a69', 'a70', 'a71', 'a72', 'a73', 'a74', 'a203', 'a75', 'a204', 'a76', 'a77', 'a78', 'a79', 'a81', 'a82', 'a83', 'a84', 'a97', 'a98', 'a99', 'a100', '', 'a89', 'a90', 'a93', 'a94', 'a91', 'a92', 'a205', 'a85', 'a206', 'a86', 'a87', 'a88', 'a95', 'a96', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'a101', 'a102', 'a103', 'a104', 'a106', 'a107', 'a108', 'a112', 'a111', 'a110', 'a109', 'a120', 'a121', 'a122', 'a123', 'a124', 'a125', 'a126', 'a127', 'a128', 'a129', 'a130', 'a131', 'a132', 'a133', 'a134', 'a135', 'a136', 'a137', 'a138', 'a139', 'a140', 'a141', 'a142', 'a143', 'a144', 'a145', 'a146', 'a147', 'a148', 'a149', 'a150', 'a151', 'a152', 'a153', 'a154', 'a155', 'a156', 'a157', 'a158', 'a159', 'a160', 'a161', 'a163', 'a164', 'a196', 'a165', 'a192', 'a166', 'a167', 'a168', 'a169', 'a170', 'a171', 'a172', 'a173', 'a162', 'a174', 'a175', 'a176', 'a177', 'a178', 'a179', 'a193', 'a180', 'a199', 'a181', 'a200', 'a182', '', 'a201', 'a183', 'a184', 'a197', 'a185', 'a194', 'a198', 'a186', 'a195', 'a187', 'a188', 'a189', 'a190', 'a191', '', ]; function getEncoding(e) { switch (e) { case 'WinAnsiEncoding': return yi; case 'StandardEncoding': return mi; case 'MacRomanEncoding': return pi; case 'SymbolSetEncoding': return wi; case 'ZapfDingbatsEncoding': return bi; case 'ExpertEncoding': return di; case 'MacExpertEncoding': return fi; default: return null; } } const Di = [ '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall', '001.000', '001.001', '001.002', '001.003', 'Black', 'Bold', 'Book', 'Light', 'Medium', 'Regular', 'Roman', 'Semibold', ], Fi = 391, Si = [ null, { id: 'hstem', min: 2, stackClearing: !0, stem: !0 }, null, { id: 'vstem', min: 2, stackClearing: !0, stem: !0 }, { id: 'vmoveto', min: 1, stackClearing: !0 }, { id: 'rlineto', min: 2, resetStack: !0 }, { id: 'hlineto', min: 1, resetStack: !0 }, { id: 'vlineto', min: 1, resetStack: !0 }, { id: 'rrcurveto', min: 6, resetStack: !0 }, null, { id: 'callsubr', min: 1, undefStack: !0 }, { id: 'return', min: 0, undefStack: !0 }, null, null, { id: 'endchar', min: 0, stackClearing: !0 }, null, null, null, { id: 'hstemhm', min: 2, stackClearing: !0, stem: !0 }, { id: 'hintmask', min: 0, stackClearing: !0 }, { id: 'cntrmask', min: 0, stackClearing: !0 }, { id: 'rmoveto', min: 2, stackClearing: !0 }, { id: 'hmoveto', min: 1, stackClearing: !0 }, { id: 'vstemhm', min: 2, stackClearing: !0, stem: !0 }, { id: 'rcurveline', min: 8, resetStack: !0 }, { id: 'rlinecurve', min: 8, resetStack: !0 }, { id: 'vvcurveto', min: 4, resetStack: !0 }, { id: 'hhcurveto', min: 4, resetStack: !0 }, null, { id: 'callgsubr', min: 1, undefStack: !0 }, { id: 'vhcurveto', min: 4, resetStack: !0 }, { id: 'hvcurveto', min: 4, resetStack: !0 }, ], ki = [ null, null, null, { id: 'and', min: 2, stackDelta: -1 }, { id: 'or', min: 2, stackDelta: -1 }, { id: 'not', min: 1, stackDelta: 0 }, null, null, null, { id: 'abs', min: 1, stackDelta: 0 }, { id: 'add', min: 2, stackDelta: -1, stackFn(e, t) { e[t - 2] = e[t - 2] + e[t - 1]; }, }, { id: 'sub', min: 2, stackDelta: -1, stackFn(e, t) { e[t - 2] = e[t - 2] - e[t - 1]; }, }, { id: 'div', min: 2, stackDelta: -1, stackFn(e, t) { e[t - 2] = e[t - 2] / e[t - 1]; }, }, null, { id: 'neg', min: 1, stackDelta: 0, stackFn(e, t) { e[t - 1] = -e[t - 1]; }, }, { id: 'eq', min: 2, stackDelta: -1 }, null, null, { id: 'drop', min: 1, stackDelta: -1 }, null, { id: 'put', min: 2, stackDelta: -2 }, { id: 'get', min: 1, stackDelta: 0 }, { id: 'ifelse', min: 4, stackDelta: -3 }, { id: 'random', min: 0, stackDelta: 1 }, { id: 'mul', min: 2, stackDelta: -1, stackFn(e, t) { e[t - 2] = e[t - 2] * e[t - 1]; }, }, null, { id: 'sqrt', min: 1, stackDelta: 0 }, { id: 'dup', min: 1, stackDelta: 1 }, { id: 'exch', min: 2, stackDelta: 0 }, { id: 'index', min: 2, stackDelta: 0 }, { id: 'roll', min: 3, stackDelta: -2 }, null, null, null, { id: 'hflex', min: 7, resetStack: !0 }, { id: 'flex', min: 13, resetStack: !0 }, { id: 'hflex1', min: 9, resetStack: !0 }, { id: 'flex1', min: 11, resetStack: !0 }, ]; class CFFParser { constructor(e, t, i) { this.bytes = e.getBytes(); this.properties = t; this.seacAnalysisEnabled = !!i; } parse() { const e = this.properties, t = new CFF(); this.cff = t; const i = this.parseHeader(), a = this.parseIndex(i.endPos), r = this.parseIndex(a.endPos), s = this.parseIndex(r.endPos), n = this.parseIndex(s.endPos), o = this.parseDict(r.obj.get(0)), g = this.createDict(CFFTopDict, o, t.strings); t.header = i.obj; t.names = this.parseNameIndex(a.obj); t.strings = this.parseStringIndex(s.obj); t.topDict = g; t.globalSubrIndex = n.obj; this.parsePrivateDict(t.topDict); t.isCIDFont = g.hasName('ROS'); const c = g.getByName('CharStrings'), C = this.parseIndex(c).obj, h = g.getByName('FontMatrix'); h && (e.fontMatrix = h); const l = g.getByName('FontBBox'); if (l) { e.ascent = Math.max(l[3], l[1]); e.descent = Math.min(l[1], l[3]); e.ascentScaled = !0; } let Q, E; if (t.isCIDFont) { const e = this.parseIndex(g.getByName('FDArray')).obj; for (let i = 0, a = e.count; i < a; ++i) { const a = e.get(i), r = this.createDict(CFFTopDict, this.parseDict(a), t.strings); this.parsePrivateDict(r); t.fdArray.push(r); } E = null; Q = this.parseCharsets(g.getByName('charset'), C.count, t.strings, !0); t.fdSelect = this.parseFDSelect(g.getByName('FDSelect'), C.count); } else { Q = this.parseCharsets(g.getByName('charset'), C.count, t.strings, !1); E = this.parseEncoding(g.getByName('Encoding'), e, t.strings, Q.charset); } t.charset = Q; t.encoding = E; const u = this.parseCharStrings({ charStrings: C, localSubrIndex: g.privateDict.subrsIndex, globalSubrIndex: n.obj, fdSelect: t.fdSelect, fdArray: t.fdArray, privateDict: g.privateDict, }); t.charStrings = u.charStrings; t.seacs = u.seacs; t.widths = u.widths; return t; } parseHeader() { let e = this.bytes; const t = e.length; let i = 0; for (; i < t && 1 !== e[i]; ) ++i; if (i >= t) throw new FormatError('Invalid CFF header'); if (0 !== i) { info('cff data is shifted'); e = e.subarray(i); this.bytes = e; } const a = e[0], r = e[1], s = e[2], n = e[3]; return { obj: new CFFHeader(a, r, s, n), endPos: s }; } parseDict(e) { let t = 0; function parseOperand() { let i = e[t++]; if (30 === i) return (function parseFloatOperand() { let i = ''; const a = 15, r = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'E', 'E-', null, '-', ], s = e.length; for (; t < s; ) { const s = e[t++], n = s >> 4, o = 15 & s; if (n === a) break; i += r[n]; if (o === a) break; i += r[o]; } return parseFloat(i); })(); if (28 === i) { i = e[t++]; i = ((i << 24) | (e[t++] << 16)) >> 16; return i; } if (29 === i) { i = e[t++]; i = (i << 8) | e[t++]; i = (i << 8) | e[t++]; i = (i << 8) | e[t++]; return i; } if (i >= 32 && i <= 246) return i - 139; if (i >= 247 && i <= 250) return 256 * (i - 247) + e[t++] + 108; if (i >= 251 && i <= 254) return -256 * (i - 251) - e[t++] - 108; warn('CFFParser_parseDict: "' + i + '" is a reserved command.'); return NaN; } let i = []; const a = []; t = 0; const r = e.length; for (; t < r; ) { let r = e[t]; if (r <= 21) { 12 === r && (r = (r << 8) | e[++t]); a.push([r, i]); i = []; ++t; } else i.push(parseOperand()); } return a; } parseIndex(e) { const t = new CFFIndex(), i = this.bytes, a = (i[e++] << 8) | i[e++], r = []; let s, n, o = e; if (0 !== a) { const t = i[e++], g = e + (a + 1) * t - 1; for (s = 0, n = a + 1; s < n; ++s) { let a = 0; for (let r = 0; r < t; ++r) { a <<= 8; a += i[e++]; } r.push(g + a); } o = r[a]; } for (s = 0, n = r.length - 1; s < n; ++s) { const e = r[s], a = r[s + 1]; t.add(i.subarray(e, a)); } return { obj: t, endPos: o }; } parseNameIndex(e) { const t = []; for (let i = 0, a = e.count; i < a; ++i) { const a = e.get(i); t.push(bytesToString(a)); } return t; } parseStringIndex(e) { const t = new CFFStrings(); for (let i = 0, a = e.count; i < a; ++i) { const a = e.get(i); t.add(bytesToString(a)); } return t; } createDict(e, t, i) { const a = new e(i); for (const [e, i] of t) a.setByKey(e, i); return a; } parseCharString(e, t, i, a) { if (!t || e.callDepth > 10) return !1; let r = e.stackSize; const s = e.stack; let n = t.length; for (let o = 0; o < n; ) { const g = t[o++]; let c = null; if (12 === g) { const e = t[o++]; if (0 === e) { t[o - 2] = 139; t[o - 1] = 22; r = 0; } else c = ki[e]; } else if (28 === g) { s[r] = ((t[o] << 24) | (t[o + 1] << 16)) >> 16; o += 2; r++; } else if (14 === g) { if (r >= 4) { r -= 4; if (this.seacAnalysisEnabled) { e.seac = s.slice(r, r + 4); return !1; } } c = Si[g]; } else if (g >= 32 && g <= 246) { s[r] = g - 139; r++; } else if (g >= 247 && g <= 254) { s[r] = g < 251 ? ((g - 247) << 8) + t[o] + 108 : -((g - 251) << 8) - t[o] - 108; o++; r++; } else if (255 === g) { s[r] = ((t[o] << 24) | (t[o + 1] << 16) | (t[o + 2] << 8) | t[o + 3]) / 65536; o += 4; r++; } else if (19 === g || 20 === g) { e.hints += r >> 1; if (0 === e.hints) { t.copyWithin(o - 1, o, -1); o -= 1; n -= 1; continue; } o += (e.hints + 7) >> 3; r %= 2; c = Si[g]; } else { if (10 === g || 29 === g) { const t = 10 === g ? i : a; if (!t) { c = Si[g]; warn('Missing subrsIndex for ' + c.id); return !1; } let n = 32768; t.count < 1240 ? (n = 107) : t.count < 33900 && (n = 1131); const o = s[--r] + n; if (o < 0 || o >= t.count || isNaN(o)) { c = Si[g]; warn('Out of bounds subrIndex for ' + c.id); return !1; } e.stackSize = r; e.callDepth++; if (!this.parseCharString(e, t.get(o), i, a)) return !1; e.callDepth--; r = e.stackSize; continue; } if (11 === g) { e.stackSize = r; return !0; } if (0 === g && o === t.length) { t[o - 1] = 14; c = Si[14]; } else { if (9 === g) { t.copyWithin(o - 1, o, -1); o -= 1; n -= 1; continue; } c = Si[g]; } } if (c) { if (c.stem) { e.hints += r >> 1; if (3 === g || 23 === g) e.hasVStems = !0; else if (e.hasVStems && (1 === g || 18 === g)) { warn('CFF stem hints are in wrong order'); t[o - 1] = 1 === g ? 3 : 23; } } if ('min' in c && !e.undefStack && r < c.min) { warn( 'Not enough parameters for ' + c.id + '; actual: ' + r + ', expected: ' + c.min, ); if (0 === r) { t[o - 1] = 14; return !0; } return !1; } if (e.firstStackClearing && c.stackClearing) { e.firstStackClearing = !1; r -= c.min; r >= 2 && c.stem ? (r %= 2) : r > 1 && warn('Found too many parameters for stack-clearing command'); r > 0 && (e.width = s[r - 1]); } if ('stackDelta' in c) { 'stackFn' in c && c.stackFn(s, r); r += c.stackDelta; } else if (c.stackClearing) r = 0; else if (c.resetStack) { r = 0; e.undefStack = !1; } else if (c.undefStack) { r = 0; e.undefStack = !0; e.firstStackClearing = !1; } } } n < t.length && t.fill(14, n); e.stackSize = r; return !0; } parseCharStrings({ charStrings: e, localSubrIndex: t, globalSubrIndex: i, fdSelect: a, fdArray: r, privateDict: s, }) { const n = [], o = [], g = e.count; for (let c = 0; c < g; c++) { const g = e.get(c), C = { callDepth: 0, stackSize: 0, stack: [], undefStack: !0, hints: 0, firstStackClearing: !0, seac: null, width: null, hasVStems: !1, }; let h = !0, l = null, Q = s; if (a && r.length) { const e = a.getFDIndex(c); if (-1 === e) { warn('Glyph index is not in fd select.'); h = !1; } if (e >= r.length) { warn('Invalid fd index for glyph index.'); h = !1; } if (h) { Q = r[e].privateDict; l = Q.subrsIndex; } } else t && (l = t); h && (h = this.parseCharString(C, g, l, i)); if (null !== C.width) { const e = Q.getByName('nominalWidthX'); o[c] = e + C.width; } else { const e = Q.getByName('defaultWidthX'); o[c] = e; } null !== C.seac && (n[c] = C.seac); h || e.set(c, new Uint8Array([14])); } return { charStrings: e, seacs: n, widths: o }; } emptyPrivateDictionary(e) { const t = this.createDict(CFFPrivateDict, [], e.strings); e.setByKey(18, [0, 0]); e.privateDict = t; } parsePrivateDict(e) { if (!e.hasName('Private')) { this.emptyPrivateDictionary(e); return; } const t = e.getByName('Private'); if (!Array.isArray(t) || 2 !== t.length) { e.removeByName('Private'); return; } const i = t[0], a = t[1]; if (0 === i || a >= this.bytes.length) { this.emptyPrivateDictionary(e); return; } const r = a + i, s = this.bytes.subarray(a, r), n = this.parseDict(s), o = this.createDict(CFFPrivateDict, n, e.strings); e.privateDict = o; 0 === o.getByName('ExpansionFactor') && o.setByName('ExpansionFactor', 0.06); if (!o.getByName('Subrs')) return; const g = o.getByName('Subrs'), c = a + g; if (0 === g || c >= this.bytes.length) { this.emptyPrivateDictionary(e); return; } const C = this.parseIndex(c); o.subrsIndex = C.obj; } parseCharsets(e, t, i, a) { if (0 === e) return new CFFCharset(!0, Gi.ISO_ADOBE, Qi); if (1 === e) return new CFFCharset(!0, Gi.EXPERT, Ei); if (2 === e) return new CFFCharset(!0, Gi.EXPERT_SUBSET, ui); const r = this.bytes, s = e, n = r[e++], o = [a ? 0 : '.notdef']; let g, c, C; t -= 1; switch (n) { case 0: for (C = 0; C < t; C++) { g = (r[e++] << 8) | r[e++]; o.push(a ? g : i.get(g)); } break; case 1: for (; o.length <= t; ) { g = (r[e++] << 8) | r[e++]; c = r[e++]; for (C = 0; C <= c; C++) o.push(a ? g++ : i.get(g++)); } break; case 2: for (; o.length <= t; ) { g = (r[e++] << 8) | r[e++]; c = (r[e++] << 8) | r[e++]; for (C = 0; C <= c; C++) o.push(a ? g++ : i.get(g++)); } break; default: throw new FormatError('Unknown charset format'); } const h = e, l = r.subarray(s, h); return new CFFCharset(!1, n, o, l); } parseEncoding(e, t, i, a) { const r = Object.create(null), s = this.bytes; let n, o, g, c = !1, C = null; if (0 === e || 1 === e) { c = !0; n = e; const t = e ? di : mi; for (o = 0, g = a.length; o < g; o++) { const e = t.indexOf(a[o]); -1 !== e && (r[e] = o); } } else { const t = e; n = s[e++]; switch (127 & n) { case 0: const t = s[e++]; for (o = 1; o <= t; o++) r[s[e++]] = o; break; case 1: const i = s[e++]; let a = 1; for (o = 0; o < i; o++) { const t = s[e++], i = s[e++]; for (let e = t; e <= t + i; e++) r[e] = a++; } break; default: throw new FormatError(`Unknown encoding format: ${n} in CFF`); } const g = e; if (128 & n) { s[t] &= 127; !(function readSupplement() { const t = s[e++]; for (o = 0; o < t; o++) { const t = s[e++], n = (s[e++] << 8) + (255 & s[e++]); r[t] = a.indexOf(i.get(n)); } })(); } C = s.subarray(t, g); } n &= 127; return new CFFEncoding(c, n, r, C); } parseFDSelect(e, t) { const i = this.bytes, a = i[e++], r = []; let s; switch (a) { case 0: for (s = 0; s < t; ++s) { const t = i[e++]; r.push(t); } break; case 3: const n = (i[e++] << 8) | i[e++]; for (s = 0; s < n; ++s) { let t = (i[e++] << 8) | i[e++]; if (0 === s && 0 !== t) { warn( 'parseFDSelect: The first range must have a first GID of 0 -- trying to recover.', ); t = 0; } const a = i[e++], n = (i[e] << 8) | i[e + 1]; for (let e = t; e < n; ++e) r.push(a); } e += 2; break; default: throw new FormatError(`parseFDSelect: Unknown format "${a}".`); } if (r.length !== t) throw new FormatError('parseFDSelect: Invalid font data.'); return new CFFFDSelect(a, r); } } class CFF { constructor() { this.header = null; this.names = []; this.topDict = null; this.strings = new CFFStrings(); this.globalSubrIndex = null; this.encoding = null; this.charset = null; this.charStrings = null; this.fdArray = []; this.fdSelect = null; this.isCIDFont = !1; } duplicateFirstGlyph() { if (this.charStrings.count >= 65535) { warn('Not enough space in charstrings to duplicate first glyph.'); return; } const e = this.charStrings.get(0); this.charStrings.add(e); this.isCIDFont && this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]); } hasGlyphId(e) { if (e < 0 || e >= this.charStrings.count) return !1; return this.charStrings.get(e).length > 0; } } class CFFHeader { constructor(e, t, i, a) { this.major = e; this.minor = t; this.hdrSize = i; this.offSize = a; } } class CFFStrings { constructor() { this.strings = []; } get(e) { return e >= 0 && e <= 390 ? Di[e] : e - Fi <= this.strings.length ? this.strings[e - Fi] : Di[0]; } getSID(e) { let t = Di.indexOf(e); if (-1 !== t) return t; t = this.strings.indexOf(e); return -1 !== t ? t + Fi : -1; } add(e) { this.strings.push(e); } get count() { return this.strings.length; } } class CFFIndex { constructor() { this.objects = []; this.length = 0; } add(e) { this.length += e.length; this.objects.push(e); } set(e, t) { this.length += t.length - this.objects[e].length; this.objects[e] = t; } get(e) { return this.objects[e]; } get count() { return this.objects.length; } } class CFFDict { constructor(e, t) { this.keyToNameMap = e.keyToNameMap; this.nameToKeyMap = e.nameToKeyMap; this.defaults = e.defaults; this.types = e.types; this.opcodes = e.opcodes; this.order = e.order; this.strings = t; this.values = Object.create(null); } setByKey(e, t) { if (!(e in this.keyToNameMap)) return !1; if (0 === t.length) return !0; for (const i of t) if (isNaN(i)) { warn(`Invalid CFFDict value: "${t}" for key "${e}".`); return !0; } const i = this.types[e]; ('num' !== i && 'sid' !== i && 'offset' !== i) || (t = t[0]); this.values[e] = t; return !0; } setByName(e, t) { if (!(e in this.nameToKeyMap)) throw new FormatError(`Invalid dictionary name "${e}"`); this.values[this.nameToKeyMap[e]] = t; } hasName(e) { return this.nameToKeyMap[e] in this.values; } getByName(e) { if (!(e in this.nameToKeyMap)) throw new FormatError(`Invalid dictionary name ${e}"`); const t = this.nameToKeyMap[e]; return t in this.values ? this.values[t] : this.defaults[t]; } removeByName(e) { delete this.values[this.nameToKeyMap[e]]; } static createTables(e) { const t = { keyToNameMap: {}, nameToKeyMap: {}, defaults: {}, types: {}, opcodes: {}, order: [], }; for (const i of e) { const e = Array.isArray(i[0]) ? (i[0][0] << 8) + i[0][1] : i[0]; t.keyToNameMap[e] = i[1]; t.nameToKeyMap[i[1]] = e; t.types[e] = i[2]; t.defaults[e] = i[3]; t.opcodes[e] = Array.isArray(i[0]) ? i[0] : [i[0]]; t.order.push(e); } return t; } } const Ri = [ [[12, 30], 'ROS', ['sid', 'sid', 'num'], null], [[12, 20], 'SyntheticBase', 'num', null], [0, 'version', 'sid', null], [1, 'Notice', 'sid', null], [[12, 0], 'Copyright', 'sid', null], [2, 'FullName', 'sid', null], [3, 'FamilyName', 'sid', null], [4, 'Weight', 'sid', null], [[12, 1], 'isFixedPitch', 'num', 0], [[12, 2], 'ItalicAngle', 'num', 0], [[12, 3], 'UnderlinePosition', 'num', -100], [[12, 4], 'UnderlineThickness', 'num', 50], [[12, 5], 'PaintType', 'num', 0], [[12, 6], 'CharstringType', 'num', 2], [ [12, 7], 'FontMatrix', ['num', 'num', 'num', 'num', 'num', 'num'], [0.001, 0, 0, 0.001, 0, 0], ], [13, 'UniqueID', 'num', null], [5, 'FontBBox', ['num', 'num', 'num', 'num'], [0, 0, 0, 0]], [[12, 8], 'StrokeWidth', 'num', 0], [14, 'XUID', 'array', null], [15, 'charset', 'offset', 0], [16, 'Encoding', 'offset', 0], [17, 'CharStrings', 'offset', 0], [18, 'Private', ['offset', 'offset'], null], [[12, 21], 'PostScript', 'sid', null], [[12, 22], 'BaseFontName', 'sid', null], [[12, 23], 'BaseFontBlend', 'delta', null], [[12, 31], 'CIDFontVersion', 'num', 0], [[12, 32], 'CIDFontRevision', 'num', 0], [[12, 33], 'CIDFontType', 'num', 0], [[12, 34], 'CIDCount', 'num', 8720], [[12, 35], 'UIDBase', 'num', null], [[12, 37], 'FDSelect', 'offset', null], [[12, 36], 'FDArray', 'offset', null], [[12, 38], 'FontName', 'sid', null], ]; class CFFTopDict extends CFFDict { static get tables() { return shadow(this, 'tables', this.createTables(Ri)); } constructor(e) { super(CFFTopDict.tables, e); this.privateDict = null; } } const Ni = [ [6, 'BlueValues', 'delta', null], [7, 'OtherBlues', 'delta', null], [8, 'FamilyBlues', 'delta', null], [9, 'FamilyOtherBlues', 'delta', null], [[12, 9], 'BlueScale', 'num', 0.039625], [[12, 10], 'BlueShift', 'num', 7], [[12, 11], 'BlueFuzz', 'num', 1], [10, 'StdHW', 'num', null], [11, 'StdVW', 'num', null], [[12, 12], 'StemSnapH', 'delta', null], [[12, 13], 'StemSnapV', 'delta', null], [[12, 14], 'ForceBold', 'num', 0], [[12, 17], 'LanguageGroup', 'num', 0], [[12, 18], 'ExpansionFactor', 'num', 0.06], [[12, 19], 'initialRandomSeed', 'num', 0], [20, 'defaultWidthX', 'num', 0], [21, 'nominalWidthX', 'num', 0], [19, 'Subrs', 'offset', null], ]; class CFFPrivateDict extends CFFDict { static get tables() { return shadow(this, 'tables', this.createTables(Ni)); } constructor(e) { super(CFFPrivateDict.tables, e); this.subrsIndex = null; } } const Gi = { ISO_ADOBE: 0, EXPERT: 1, EXPERT_SUBSET: 2 }; class CFFCharset { constructor(e, t, i, a) { this.predefined = e; this.format = t; this.charset = i; this.raw = a; } } class CFFEncoding { constructor(e, t, i, a) { this.predefined = e; this.format = t; this.encoding = i; this.raw = a; } } class CFFFDSelect { constructor(e, t) { this.format = e; this.fdSelect = t; } getFDIndex(e) { return e < 0 || e >= this.fdSelect.length ? -1 : this.fdSelect[e]; } } class CFFOffsetTracker { constructor() { this.offsets = Object.create(null); } isTracking(e) { return e in this.offsets; } track(e, t) { if (e in this.offsets) throw new FormatError(`Already tracking location of ${e}`); this.offsets[e] = t; } offset(e) { for (const t in this.offsets) this.offsets[t] += e; } setEntryLocation(e, t, i) { if (!(e in this.offsets)) throw new FormatError(`Not tracking location of ${e}`); const a = i.data, r = this.offsets[e]; for (let e = 0, i = t.length; e < i; ++e) { const i = 5 * e + r, s = i + 1, n = i + 2, o = i + 3, g = i + 4; if (29 !== a[i] || 0 !== a[s] || 0 !== a[n] || 0 !== a[o] || 0 !== a[g]) throw new FormatError('writing to an offset that is not empty'); const c = t[e]; a[i] = 29; a[s] = (c >> 24) & 255; a[n] = (c >> 16) & 255; a[o] = (c >> 8) & 255; a[g] = 255 & c; } } } class CFFCompiler { constructor(e) { this.cff = e; } compile() { const e = this.cff, t = { data: [], length: 0, add(e) { try { this.data.push(...e); } catch { this.data = this.data.concat(e); } this.length = this.data.length; }, }, i = this.compileHeader(e.header); t.add(i); const a = this.compileNameIndex(e.names); t.add(a); if (e.isCIDFont && e.topDict.hasName('FontMatrix')) { const t = e.topDict.getByName('FontMatrix'); e.topDict.removeByName('FontMatrix'); for (const i of e.fdArray) { let e = t.slice(0); i.hasName('FontMatrix') && (e = Util.transform(e, i.getByName('FontMatrix'))); i.setByName('FontMatrix', e); } } const r = e.topDict.getByName('XUID'); r?.length > 16 && e.topDict.removeByName('XUID'); e.topDict.setByName('charset', 0); let s = this.compileTopDicts([e.topDict], t.length, e.isCIDFont); t.add(s.output); const n = s.trackers[0], o = this.compileStringIndex(e.strings.strings); t.add(o); const g = this.compileIndex(e.globalSubrIndex); t.add(g); if (e.encoding && e.topDict.hasName('Encoding')) if (e.encoding.predefined) n.setEntryLocation('Encoding', [e.encoding.format], t); else { const i = this.compileEncoding(e.encoding); n.setEntryLocation('Encoding', [t.length], t); t.add(i); } const c = this.compileCharset( e.charset, e.charStrings.count, e.strings, e.isCIDFont, ); n.setEntryLocation('charset', [t.length], t); t.add(c); const C = this.compileCharStrings(e.charStrings); n.setEntryLocation('CharStrings', [t.length], t); t.add(C); if (e.isCIDFont) { n.setEntryLocation('FDSelect', [t.length], t); const i = this.compileFDSelect(e.fdSelect); t.add(i); s = this.compileTopDicts(e.fdArray, t.length, !0); n.setEntryLocation('FDArray', [t.length], t); t.add(s.output); const a = s.trackers; this.compilePrivateDicts(e.fdArray, a, t); } this.compilePrivateDicts([e.topDict], [n], t); t.add([0]); return t.data; } encodeNumber(e) { return Number.isInteger(e) ? this.encodeInteger(e) : this.encodeFloat(e); } static get EncodeFloatRegExp() { return shadow( this, 'EncodeFloatRegExp', /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/, ); } encodeFloat(e) { let t = e.toString(); const i = CFFCompiler.EncodeFloatRegExp.exec(t); if (i) { const a = parseFloat('1e' + ((i[2] ? +i[2] : 0) + i[1].length)); t = (Math.round(e * a) / a).toString(); } let a, r, s = ''; for (a = 0, r = t.length; a < r; ++a) { const e = t[a]; s += 'e' === e ? '-' === t[++a] ? 'c' : 'b' : '.' === e ? 'a' : '-' === e ? 'e' : e; } s += 1 & s.length ? 'f' : 'ff'; const n = [30]; for (a = 0, r = s.length; a < r; a += 2) n.push(parseInt(s.substring(a, a + 2), 16)); return n; } encodeInteger(e) { let t; t = e >= -107 && e <= 107 ? [e + 139] : e >= 108 && e <= 1131 ? [247 + ((e -= 108) >> 8), 255 & e] : e >= -1131 && e <= -108 ? [251 + ((e = -e - 108) >> 8), 255 & e] : e >= -32768 && e <= 32767 ? [28, (e >> 8) & 255, 255 & e] : [29, (e >> 24) & 255, (e >> 16) & 255, (e >> 8) & 255, 255 & e]; return t; } compileHeader(e) { return [e.major, e.minor, 4, e.offSize]; } compileNameIndex(e) { const t = new CFFIndex(); for (const i of e) { const e = Math.min(i.length, 127); let a = new Array(e); for (let t = 0; t < e; t++) { let e = i[t]; (e < '!' || e > '~' || '[' === e || ']' === e || '(' === e || ')' === e || '{' === e || '}' === e || '<' === e || '>' === e || '/' === e || '%' === e) && (e = '_'); a[t] = e; } a = a.join(''); '' === a && (a = 'Bad_Font_Name'); t.add(stringToBytes(a)); } return this.compileIndex(t); } compileTopDicts(e, t, i) { const a = []; let r = new CFFIndex(); for (const s of e) { if (i) { s.removeByName('CIDFontVersion'); s.removeByName('CIDFontRevision'); s.removeByName('CIDFontType'); s.removeByName('CIDCount'); s.removeByName('UIDBase'); } const e = new CFFOffsetTracker(), n = this.compileDict(s, e); a.push(e); r.add(n); e.offset(t); } r = this.compileIndex(r, a); return { trackers: a, output: r }; } compilePrivateDicts(e, t, i) { for (let a = 0, r = e.length; a < r; ++a) { const r = e[a], s = r.privateDict; if (!s || !r.hasName('Private')) throw new FormatError('There must be a private dictionary.'); const n = new CFFOffsetTracker(), o = this.compileDict(s, n); let g = i.length; n.offset(g); o.length || (g = 0); t[a].setEntryLocation('Private', [o.length, g], i); i.add(o); if (s.subrsIndex && s.hasName('Subrs')) { const e = this.compileIndex(s.subrsIndex); n.setEntryLocation('Subrs', [o.length], i); i.add(e); } } } compileDict(e, t) { const i = []; for (const a of e.order) { if (!(a in e.values)) continue; let r = e.values[a], s = e.types[a]; Array.isArray(s) || (s = [s]); Array.isArray(r) || (r = [r]); if (0 !== r.length) { for (let n = 0, o = s.length; n < o; ++n) { const o = s[n], g = r[n]; switch (o) { case 'num': case 'sid': i.push(...this.encodeNumber(g)); break; case 'offset': const s = e.keyToNameMap[a]; t.isTracking(s) || t.track(s, i.length); i.push(29, 0, 0, 0, 0); break; case 'array': case 'delta': i.push(...this.encodeNumber(g)); for (let e = 1, t = r.length; e < t; ++e) i.push(...this.encodeNumber(r[e])); break; default: throw new FormatError(`Unknown data type of ${o}`); } } i.push(...e.opcodes[a]); } } return i; } compileStringIndex(e) { const t = new CFFIndex(); for (const i of e) t.add(stringToBytes(i)); return this.compileIndex(t); } compileCharStrings(e) { const t = new CFFIndex(); for (let i = 0; i < e.count; i++) { const a = e.get(i); 0 !== a.length ? t.add(a) : t.add(new Uint8Array([139, 14])); } return this.compileIndex(t); } compileCharset(e, t, i, a) { let r; const s = t - 1; if (a) r = new Uint8Array([2, 0, 0, (s >> 8) & 255, 255 & s]); else { r = new Uint8Array(1 + 2 * s); r[0] = 0; let t = 0; const a = e.charset.length; let n = !1; for (let s = 1; s < r.length; s += 2) { let o = 0; if (t < a) { const a = e.charset[t++]; o = i.getSID(a); if (-1 === o) { o = 0; if (!n) { n = !0; warn(`Couldn't find ${a} in CFF strings`); } } } r[s] = (o >> 8) & 255; r[s + 1] = 255 & o; } } return this.compileTypedArray(r); } compileEncoding(e) { return this.compileTypedArray(e.raw); } compileFDSelect(e) { const t = e.format; let i, a; switch (t) { case 0: i = new Uint8Array(1 + e.fdSelect.length); i[0] = t; for (a = 0; a < e.fdSelect.length; a++) i[a + 1] = e.fdSelect[a]; break; case 3: const r = 0; let s = e.fdSelect[0]; const n = [t, 0, 0, (r >> 8) & 255, 255 & r, s]; for (a = 1; a < e.fdSelect.length; a++) { const t = e.fdSelect[a]; if (t !== s) { n.push((a >> 8) & 255, 255 & a, t); s = t; } } const o = (n.length - 3) / 3; n[1] = (o >> 8) & 255; n[2] = 255 & o; n.push((a >> 8) & 255, 255 & a); i = new Uint8Array(n); } return this.compileTypedArray(i); } compileTypedArray(e) { return Array.from(e); } compileIndex(e, t = []) { const i = e.objects, a = i.length; if (0 === a) return [0, 0]; const r = [(a >> 8) & 255, 255 & a]; let s, n, o = 1; for (s = 0; s < a; ++s) o += i[s].length; n = o < 256 ? 1 : o < 65536 ? 2 : o < 16777216 ? 3 : 4; r.push(n); let g = 1; for (s = 0; s < a + 1; s++) { 1 === n ? r.push(255 & g) : 2 === n ? r.push((g >> 8) & 255, 255 & g) : 3 === n ? r.push((g >> 16) & 255, (g >> 8) & 255, 255 & g) : r.push((g >>> 24) & 255, (g >> 16) & 255, (g >> 8) & 255, 255 & g); i[s] && (g += i[s].length); } for (s = 0; s < a; s++) { t[s] && t[s].offset(r.length); r.push(...i[s]); } return r; } } const xi = getLookupTableFactory(function (e) { e.A = 65; e.AE = 198; e.AEacute = 508; e.AEmacron = 482; e.AEsmall = 63462; e.Aacute = 193; e.Aacutesmall = 63457; e.Abreve = 258; e.Abreveacute = 7854; e.Abrevecyrillic = 1232; e.Abrevedotbelow = 7862; e.Abrevegrave = 7856; e.Abrevehookabove = 7858; e.Abrevetilde = 7860; e.Acaron = 461; e.Acircle = 9398; e.Acircumflex = 194; e.Acircumflexacute = 7844; e.Acircumflexdotbelow = 7852; e.Acircumflexgrave = 7846; e.Acircumflexhookabove = 7848; e.Acircumflexsmall = 63458; e.Acircumflextilde = 7850; e.Acute = 63177; e.Acutesmall = 63412; e.Acyrillic = 1040; e.Adblgrave = 512; e.Adieresis = 196; e.Adieresiscyrillic = 1234; e.Adieresismacron = 478; e.Adieresissmall = 63460; e.Adotbelow = 7840; e.Adotmacron = 480; e.Agrave = 192; e.Agravesmall = 63456; e.Ahookabove = 7842; e.Aiecyrillic = 1236; e.Ainvertedbreve = 514; e.Alpha = 913; e.Alphatonos = 902; e.Amacron = 256; e.Amonospace = 65313; e.Aogonek = 260; e.Aring = 197; e.Aringacute = 506; e.Aringbelow = 7680; e.Aringsmall = 63461; e.Asmall = 63329; e.Atilde = 195; e.Atildesmall = 63459; e.Aybarmenian = 1329; e.B = 66; e.Bcircle = 9399; e.Bdotaccent = 7682; e.Bdotbelow = 7684; e.Becyrillic = 1041; e.Benarmenian = 1330; e.Beta = 914; e.Bhook = 385; e.Blinebelow = 7686; e.Bmonospace = 65314; e.Brevesmall = 63220; e.Bsmall = 63330; e.Btopbar = 386; e.C = 67; e.Caarmenian = 1342; e.Cacute = 262; e.Caron = 63178; e.Caronsmall = 63221; e.Ccaron = 268; e.Ccedilla = 199; e.Ccedillaacute = 7688; e.Ccedillasmall = 63463; e.Ccircle = 9400; e.Ccircumflex = 264; e.Cdot = 266; e.Cdotaccent = 266; e.Cedillasmall = 63416; e.Chaarmenian = 1353; e.Cheabkhasiancyrillic = 1212; e.Checyrillic = 1063; e.Chedescenderabkhasiancyrillic = 1214; e.Chedescendercyrillic = 1206; e.Chedieresiscyrillic = 1268; e.Cheharmenian = 1347; e.Chekhakassiancyrillic = 1227; e.Cheverticalstrokecyrillic = 1208; e.Chi = 935; e.Chook = 391; e.Circumflexsmall = 63222; e.Cmonospace = 65315; e.Coarmenian = 1361; e.Csmall = 63331; e.D = 68; e.DZ = 497; e.DZcaron = 452; e.Daarmenian = 1332; e.Dafrican = 393; e.Dcaron = 270; e.Dcedilla = 7696; e.Dcircle = 9401; e.Dcircumflexbelow = 7698; e.Dcroat = 272; e.Ddotaccent = 7690; e.Ddotbelow = 7692; e.Decyrillic = 1044; e.Deicoptic = 1006; e.Delta = 8710; e.Deltagreek = 916; e.Dhook = 394; e.Dieresis = 63179; e.DieresisAcute = 63180; e.DieresisGrave = 63181; e.Dieresissmall = 63400; e.Digammagreek = 988; e.Djecyrillic = 1026; e.Dlinebelow = 7694; e.Dmonospace = 65316; e.Dotaccentsmall = 63223; e.Dslash = 272; e.Dsmall = 63332; e.Dtopbar = 395; e.Dz = 498; e.Dzcaron = 453; e.Dzeabkhasiancyrillic = 1248; e.Dzecyrillic = 1029; e.Dzhecyrillic = 1039; e.E = 69; e.Eacute = 201; e.Eacutesmall = 63465; e.Ebreve = 276; e.Ecaron = 282; e.Ecedillabreve = 7708; e.Echarmenian = 1333; e.Ecircle = 9402; e.Ecircumflex = 202; e.Ecircumflexacute = 7870; e.Ecircumflexbelow = 7704; e.Ecircumflexdotbelow = 7878; e.Ecircumflexgrave = 7872; e.Ecircumflexhookabove = 7874; e.Ecircumflexsmall = 63466; e.Ecircumflextilde = 7876; e.Ecyrillic = 1028; e.Edblgrave = 516; e.Edieresis = 203; e.Edieresissmall = 63467; e.Edot = 278; e.Edotaccent = 278; e.Edotbelow = 7864; e.Efcyrillic = 1060; e.Egrave = 200; e.Egravesmall = 63464; e.Eharmenian = 1335; e.Ehookabove = 7866; e.Eightroman = 8551; e.Einvertedbreve = 518; e.Eiotifiedcyrillic = 1124; e.Elcyrillic = 1051; e.Elevenroman = 8554; e.Emacron = 274; e.Emacronacute = 7702; e.Emacrongrave = 7700; e.Emcyrillic = 1052; e.Emonospace = 65317; e.Encyrillic = 1053; e.Endescendercyrillic = 1186; e.Eng = 330; e.Enghecyrillic = 1188; e.Enhookcyrillic = 1223; e.Eogonek = 280; e.Eopen = 400; e.Epsilon = 917; e.Epsilontonos = 904; e.Ercyrillic = 1056; e.Ereversed = 398; e.Ereversedcyrillic = 1069; e.Escyrillic = 1057; e.Esdescendercyrillic = 1194; e.Esh = 425; e.Esmall = 63333; e.Eta = 919; e.Etarmenian = 1336; e.Etatonos = 905; e.Eth = 208; e.Ethsmall = 63472; e.Etilde = 7868; e.Etildebelow = 7706; e.Euro = 8364; e.Ezh = 439; e.Ezhcaron = 494; e.Ezhreversed = 440; e.F = 70; e.Fcircle = 9403; e.Fdotaccent = 7710; e.Feharmenian = 1366; e.Feicoptic = 996; e.Fhook = 401; e.Fitacyrillic = 1138; e.Fiveroman = 8548; e.Fmonospace = 65318; e.Fourroman = 8547; e.Fsmall = 63334; e.G = 71; e.GBsquare = 13191; e.Gacute = 500; e.Gamma = 915; e.Gammaafrican = 404; e.Gangiacoptic = 1002; e.Gbreve = 286; e.Gcaron = 486; e.Gcedilla = 290; e.Gcircle = 9404; e.Gcircumflex = 284; e.Gcommaaccent = 290; e.Gdot = 288; e.Gdotaccent = 288; e.Gecyrillic = 1043; e.Ghadarmenian = 1346; e.Ghemiddlehookcyrillic = 1172; e.Ghestrokecyrillic = 1170; e.Gheupturncyrillic = 1168; e.Ghook = 403; e.Gimarmenian = 1331; e.Gjecyrillic = 1027; e.Gmacron = 7712; e.Gmonospace = 65319; e.Grave = 63182; e.Gravesmall = 63328; e.Gsmall = 63335; e.Gsmallhook = 667; e.Gstroke = 484; e.H = 72; e.H18533 = 9679; e.H18543 = 9642; e.H18551 = 9643; e.H22073 = 9633; e.HPsquare = 13259; e.Haabkhasiancyrillic = 1192; e.Hadescendercyrillic = 1202; e.Hardsigncyrillic = 1066; e.Hbar = 294; e.Hbrevebelow = 7722; e.Hcedilla = 7720; e.Hcircle = 9405; e.Hcircumflex = 292; e.Hdieresis = 7718; e.Hdotaccent = 7714; e.Hdotbelow = 7716; e.Hmonospace = 65320; e.Hoarmenian = 1344; e.Horicoptic = 1e3; e.Hsmall = 63336; e.Hungarumlaut = 63183; e.Hungarumlautsmall = 63224; e.Hzsquare = 13200; e.I = 73; e.IAcyrillic = 1071; e.IJ = 306; e.IUcyrillic = 1070; e.Iacute = 205; e.Iacutesmall = 63469; e.Ibreve = 300; e.Icaron = 463; e.Icircle = 9406; e.Icircumflex = 206; e.Icircumflexsmall = 63470; e.Icyrillic = 1030; e.Idblgrave = 520; e.Idieresis = 207; e.Idieresisacute = 7726; e.Idieresiscyrillic = 1252; e.Idieresissmall = 63471; e.Idot = 304; e.Idotaccent = 304; e.Idotbelow = 7882; e.Iebrevecyrillic = 1238; e.Iecyrillic = 1045; e.Ifraktur = 8465; e.Igrave = 204; e.Igravesmall = 63468; e.Ihookabove = 7880; e.Iicyrillic = 1048; e.Iinvertedbreve = 522; e.Iishortcyrillic = 1049; e.Imacron = 298; e.Imacroncyrillic = 1250; e.Imonospace = 65321; e.Iniarmenian = 1339; e.Iocyrillic = 1025; e.Iogonek = 302; e.Iota = 921; e.Iotaafrican = 406; e.Iotadieresis = 938; e.Iotatonos = 906; e.Ismall = 63337; e.Istroke = 407; e.Itilde = 296; e.Itildebelow = 7724; e.Izhitsacyrillic = 1140; e.Izhitsadblgravecyrillic = 1142; e.J = 74; e.Jaarmenian = 1345; e.Jcircle = 9407; e.Jcircumflex = 308; e.Jecyrillic = 1032; e.Jheharmenian = 1355; e.Jmonospace = 65322; e.Jsmall = 63338; e.K = 75; e.KBsquare = 13189; e.KKsquare = 13261; e.Kabashkircyrillic = 1184; e.Kacute = 7728; e.Kacyrillic = 1050; e.Kadescendercyrillic = 1178; e.Kahookcyrillic = 1219; e.Kappa = 922; e.Kastrokecyrillic = 1182; e.Kaverticalstrokecyrillic = 1180; e.Kcaron = 488; e.Kcedilla = 310; e.Kcircle = 9408; e.Kcommaaccent = 310; e.Kdotbelow = 7730; e.Keharmenian = 1364; e.Kenarmenian = 1343; e.Khacyrillic = 1061; e.Kheicoptic = 998; e.Khook = 408; e.Kjecyrillic = 1036; e.Klinebelow = 7732; e.Kmonospace = 65323; e.Koppacyrillic = 1152; e.Koppagreek = 990; e.Ksicyrillic = 1134; e.Ksmall = 63339; e.L = 76; e.LJ = 455; e.LL = 63167; e.Lacute = 313; e.Lambda = 923; e.Lcaron = 317; e.Lcedilla = 315; e.Lcircle = 9409; e.Lcircumflexbelow = 7740; e.Lcommaaccent = 315; e.Ldot = 319; e.Ldotaccent = 319; e.Ldotbelow = 7734; e.Ldotbelowmacron = 7736; e.Liwnarmenian = 1340; e.Lj = 456; e.Ljecyrillic = 1033; e.Llinebelow = 7738; e.Lmonospace = 65324; e.Lslash = 321; e.Lslashsmall = 63225; e.Lsmall = 63340; e.M = 77; e.MBsquare = 13190; e.Macron = 63184; e.Macronsmall = 63407; e.Macute = 7742; e.Mcircle = 9410; e.Mdotaccent = 7744; e.Mdotbelow = 7746; e.Menarmenian = 1348; e.Mmonospace = 65325; e.Msmall = 63341; e.Mturned = 412; e.Mu = 924; e.N = 78; e.NJ = 458; e.Nacute = 323; e.Ncaron = 327; e.Ncedilla = 325; e.Ncircle = 9411; e.Ncircumflexbelow = 7754; e.Ncommaaccent = 325; e.Ndotaccent = 7748; e.Ndotbelow = 7750; e.Nhookleft = 413; e.Nineroman = 8552; e.Nj = 459; e.Njecyrillic = 1034; e.Nlinebelow = 7752; e.Nmonospace = 65326; e.Nowarmenian = 1350; e.Nsmall = 63342; e.Ntilde = 209; e.Ntildesmall = 63473; e.Nu = 925; e.O = 79; e.OE = 338; e.OEsmall = 63226; e.Oacute = 211; e.Oacutesmall = 63475; e.Obarredcyrillic = 1256; e.Obarreddieresiscyrillic = 1258; e.Obreve = 334; e.Ocaron = 465; e.Ocenteredtilde = 415; e.Ocircle = 9412; e.Ocircumflex = 212; e.Ocircumflexacute = 7888; e.Ocircumflexdotbelow = 7896; e.Ocircumflexgrave = 7890; e.Ocircumflexhookabove = 7892; e.Ocircumflexsmall = 63476; e.Ocircumflextilde = 7894; e.Ocyrillic = 1054; e.Odblacute = 336; e.Odblgrave = 524; e.Odieresis = 214; e.Odieresiscyrillic = 1254; e.Odieresissmall = 63478; e.Odotbelow = 7884; e.Ogoneksmall = 63227; e.Ograve = 210; e.Ogravesmall = 63474; e.Oharmenian = 1365; e.Ohm = 8486; e.Ohookabove = 7886; e.Ohorn = 416; e.Ohornacute = 7898; e.Ohorndotbelow = 7906; e.Ohorngrave = 7900; e.Ohornhookabove = 7902; e.Ohorntilde = 7904; e.Ohungarumlaut = 336; e.Oi = 418; e.Oinvertedbreve = 526; e.Omacron = 332; e.Omacronacute = 7762; e.Omacrongrave = 7760; e.Omega = 8486; e.Omegacyrillic = 1120; e.Omegagreek = 937; e.Omegaroundcyrillic = 1146; e.Omegatitlocyrillic = 1148; e.Omegatonos = 911; e.Omicron = 927; e.Omicrontonos = 908; e.Omonospace = 65327; e.Oneroman = 8544; e.Oogonek = 490; e.Oogonekmacron = 492; e.Oopen = 390; e.Oslash = 216; e.Oslashacute = 510; e.Oslashsmall = 63480; e.Osmall = 63343; e.Ostrokeacute = 510; e.Otcyrillic = 1150; e.Otilde = 213; e.Otildeacute = 7756; e.Otildedieresis = 7758; e.Otildesmall = 63477; e.P = 80; e.Pacute = 7764; e.Pcircle = 9413; e.Pdotaccent = 7766; e.Pecyrillic = 1055; e.Peharmenian = 1354; e.Pemiddlehookcyrillic = 1190; e.Phi = 934; e.Phook = 420; e.Pi = 928; e.Piwrarmenian = 1363; e.Pmonospace = 65328; e.Psi = 936; e.Psicyrillic = 1136; e.Psmall = 63344; e.Q = 81; e.Qcircle = 9414; e.Qmonospace = 65329; e.Qsmall = 63345; e.R = 82; e.Raarmenian = 1356; e.Racute = 340; e.Rcaron = 344; e.Rcedilla = 342; e.Rcircle = 9415; e.Rcommaaccent = 342; e.Rdblgrave = 528; e.Rdotaccent = 7768; e.Rdotbelow = 7770; e.Rdotbelowmacron = 7772; e.Reharmenian = 1360; e.Rfraktur = 8476; e.Rho = 929; e.Ringsmall = 63228; e.Rinvertedbreve = 530; e.Rlinebelow = 7774; e.Rmonospace = 65330; e.Rsmall = 63346; e.Rsmallinverted = 641; e.Rsmallinvertedsuperior = 694; e.S = 83; e.SF010000 = 9484; e.SF020000 = 9492; e.SF030000 = 9488; e.SF040000 = 9496; e.SF050000 = 9532; e.SF060000 = 9516; e.SF070000 = 9524; e.SF080000 = 9500; e.SF090000 = 9508; e.SF100000 = 9472; e.SF110000 = 9474; e.SF190000 = 9569; e.SF200000 = 9570; e.SF210000 = 9558; e.SF220000 = 9557; e.SF230000 = 9571; e.SF240000 = 9553; e.SF250000 = 9559; e.SF260000 = 9565; e.SF270000 = 9564; e.SF280000 = 9563; e.SF360000 = 9566; e.SF370000 = 9567; e.SF380000 = 9562; e.SF390000 = 9556; e.SF400000 = 9577; e.SF410000 = 9574; e.SF420000 = 9568; e.SF430000 = 9552; e.SF440000 = 9580; e.SF450000 = 9575; e.SF460000 = 9576; e.SF470000 = 9572; e.SF480000 = 9573; e.SF490000 = 9561; e.SF500000 = 9560; e.SF510000 = 9554; e.SF520000 = 9555; e.SF530000 = 9579; e.SF540000 = 9578; e.Sacute = 346; e.Sacutedotaccent = 7780; e.Sampigreek = 992; e.Scaron = 352; e.Scarondotaccent = 7782; e.Scaronsmall = 63229; e.Scedilla = 350; e.Schwa = 399; e.Schwacyrillic = 1240; e.Schwadieresiscyrillic = 1242; e.Scircle = 9416; e.Scircumflex = 348; e.Scommaaccent = 536; e.Sdotaccent = 7776; e.Sdotbelow = 7778; e.Sdotbelowdotaccent = 7784; e.Seharmenian = 1357; e.Sevenroman = 8550; e.Shaarmenian = 1351; e.Shacyrillic = 1064; e.Shchacyrillic = 1065; e.Sheicoptic = 994; e.Shhacyrillic = 1210; e.Shimacoptic = 1004; e.Sigma = 931; e.Sixroman = 8549; e.Smonospace = 65331; e.Softsigncyrillic = 1068; e.Ssmall = 63347; e.Stigmagreek = 986; e.T = 84; e.Tau = 932; e.Tbar = 358; e.Tcaron = 356; e.Tcedilla = 354; e.Tcircle = 9417; e.Tcircumflexbelow = 7792; e.Tcommaaccent = 354; e.Tdotaccent = 7786; e.Tdotbelow = 7788; e.Tecyrillic = 1058; e.Tedescendercyrillic = 1196; e.Tenroman = 8553; e.Tetsecyrillic = 1204; e.Theta = 920; e.Thook = 428; e.Thorn = 222; e.Thornsmall = 63486; e.Threeroman = 8546; e.Tildesmall = 63230; e.Tiwnarmenian = 1359; e.Tlinebelow = 7790; e.Tmonospace = 65332; e.Toarmenian = 1337; e.Tonefive = 444; e.Tonesix = 388; e.Tonetwo = 423; e.Tretroflexhook = 430; e.Tsecyrillic = 1062; e.Tshecyrillic = 1035; e.Tsmall = 63348; e.Twelveroman = 8555; e.Tworoman = 8545; e.U = 85; e.Uacute = 218; e.Uacutesmall = 63482; e.Ubreve = 364; e.Ucaron = 467; e.Ucircle = 9418; e.Ucircumflex = 219; e.Ucircumflexbelow = 7798; e.Ucircumflexsmall = 63483; e.Ucyrillic = 1059; e.Udblacute = 368; e.Udblgrave = 532; e.Udieresis = 220; e.Udieresisacute = 471; e.Udieresisbelow = 7794; e.Udieresiscaron = 473; e.Udieresiscyrillic = 1264; e.Udieresisgrave = 475; e.Udieresismacron = 469; e.Udieresissmall = 63484; e.Udotbelow = 7908; e.Ugrave = 217; e.Ugravesmall = 63481; e.Uhookabove = 7910; e.Uhorn = 431; e.Uhornacute = 7912; e.Uhorndotbelow = 7920; e.Uhorngrave = 7914; e.Uhornhookabove = 7916; e.Uhorntilde = 7918; e.Uhungarumlaut = 368; e.Uhungarumlautcyrillic = 1266; e.Uinvertedbreve = 534; e.Ukcyrillic = 1144; e.Umacron = 362; e.Umacroncyrillic = 1262; e.Umacrondieresis = 7802; e.Umonospace = 65333; e.Uogonek = 370; e.Upsilon = 933; e.Upsilon1 = 978; e.Upsilonacutehooksymbolgreek = 979; e.Upsilonafrican = 433; e.Upsilondieresis = 939; e.Upsilondieresishooksymbolgreek = 980; e.Upsilonhooksymbol = 978; e.Upsilontonos = 910; e.Uring = 366; e.Ushortcyrillic = 1038; e.Usmall = 63349; e.Ustraightcyrillic = 1198; e.Ustraightstrokecyrillic = 1200; e.Utilde = 360; e.Utildeacute = 7800; e.Utildebelow = 7796; e.V = 86; e.Vcircle = 9419; e.Vdotbelow = 7806; e.Vecyrillic = 1042; e.Vewarmenian = 1358; e.Vhook = 434; e.Vmonospace = 65334; e.Voarmenian = 1352; e.Vsmall = 63350; e.Vtilde = 7804; e.W = 87; e.Wacute = 7810; e.Wcircle = 9420; e.Wcircumflex = 372; e.Wdieresis = 7812; e.Wdotaccent = 7814; e.Wdotbelow = 7816; e.Wgrave = 7808; e.Wmonospace = 65335; e.Wsmall = 63351; e.X = 88; e.Xcircle = 9421; e.Xdieresis = 7820; e.Xdotaccent = 7818; e.Xeharmenian = 1341; e.Xi = 926; e.Xmonospace = 65336; e.Xsmall = 63352; e.Y = 89; e.Yacute = 221; e.Yacutesmall = 63485; e.Yatcyrillic = 1122; e.Ycircle = 9422; e.Ycircumflex = 374; e.Ydieresis = 376; e.Ydieresissmall = 63487; e.Ydotaccent = 7822; e.Ydotbelow = 7924; e.Yericyrillic = 1067; e.Yerudieresiscyrillic = 1272; e.Ygrave = 7922; e.Yhook = 435; e.Yhookabove = 7926; e.Yiarmenian = 1349; e.Yicyrillic = 1031; e.Yiwnarmenian = 1362; e.Ymonospace = 65337; e.Ysmall = 63353; e.Ytilde = 7928; e.Yusbigcyrillic = 1130; e.Yusbigiotifiedcyrillic = 1132; e.Yuslittlecyrillic = 1126; e.Yuslittleiotifiedcyrillic = 1128; e.Z = 90; e.Zaarmenian = 1334; e.Zacute = 377; e.Zcaron = 381; e.Zcaronsmall = 63231; e.Zcircle = 9423; e.Zcircumflex = 7824; e.Zdot = 379; e.Zdotaccent = 379; e.Zdotbelow = 7826; e.Zecyrillic = 1047; e.Zedescendercyrillic = 1176; e.Zedieresiscyrillic = 1246; e.Zeta = 918; e.Zhearmenian = 1338; e.Zhebrevecyrillic = 1217; e.Zhecyrillic = 1046; e.Zhedescendercyrillic = 1174; e.Zhedieresiscyrillic = 1244; e.Zlinebelow = 7828; e.Zmonospace = 65338; e.Zsmall = 63354; e.Zstroke = 437; e.a = 97; e.aabengali = 2438; e.aacute = 225; e.aadeva = 2310; e.aagujarati = 2694; e.aagurmukhi = 2566; e.aamatragurmukhi = 2622; e.aarusquare = 13059; e.aavowelsignbengali = 2494; e.aavowelsigndeva = 2366; e.aavowelsigngujarati = 2750; e.abbreviationmarkarmenian = 1375; e.abbreviationsigndeva = 2416; e.abengali = 2437; e.abopomofo = 12570; e.abreve = 259; e.abreveacute = 7855; e.abrevecyrillic = 1233; e.abrevedotbelow = 7863; e.abrevegrave = 7857; e.abrevehookabove = 7859; e.abrevetilde = 7861; e.acaron = 462; e.acircle = 9424; e.acircumflex = 226; e.acircumflexacute = 7845; e.acircumflexdotbelow = 7853; e.acircumflexgrave = 7847; e.acircumflexhookabove = 7849; e.acircumflextilde = 7851; e.acute = 180; e.acutebelowcmb = 791; e.acutecmb = 769; e.acutecomb = 769; e.acutedeva = 2388; e.acutelowmod = 719; e.acutetonecmb = 833; e.acyrillic = 1072; e.adblgrave = 513; e.addakgurmukhi = 2673; e.adeva = 2309; e.adieresis = 228; e.adieresiscyrillic = 1235; e.adieresismacron = 479; e.adotbelow = 7841; e.adotmacron = 481; e.ae = 230; e.aeacute = 509; e.aekorean = 12624; e.aemacron = 483; e.afii00208 = 8213; e.afii08941 = 8356; e.afii10017 = 1040; e.afii10018 = 1041; e.afii10019 = 1042; e.afii10020 = 1043; e.afii10021 = 1044; e.afii10022 = 1045; e.afii10023 = 1025; e.afii10024 = 1046; e.afii10025 = 1047; e.afii10026 = 1048; e.afii10027 = 1049; e.afii10028 = 1050; e.afii10029 = 1051; e.afii10030 = 1052; e.afii10031 = 1053; e.afii10032 = 1054; e.afii10033 = 1055; e.afii10034 = 1056; e.afii10035 = 1057; e.afii10036 = 1058; e.afii10037 = 1059; e.afii10038 = 1060; e.afii10039 = 1061; e.afii10040 = 1062; e.afii10041 = 1063; e.afii10042 = 1064; e.afii10043 = 1065; e.afii10044 = 1066; e.afii10045 = 1067; e.afii10046 = 1068; e.afii10047 = 1069; e.afii10048 = 1070; e.afii10049 = 1071; e.afii10050 = 1168; e.afii10051 = 1026; e.afii10052 = 1027; e.afii10053 = 1028; e.afii10054 = 1029; e.afii10055 = 1030; e.afii10056 = 1031; e.afii10057 = 1032; e.afii10058 = 1033; e.afii10059 = 1034; e.afii10060 = 1035; e.afii10061 = 1036; e.afii10062 = 1038; e.afii10063 = 63172; e.afii10064 = 63173; e.afii10065 = 1072; e.afii10066 = 1073; e.afii10067 = 1074; e.afii10068 = 1075; e.afii10069 = 1076; e.afii10070 = 1077; e.afii10071 = 1105; e.afii10072 = 1078; e.afii10073 = 1079; e.afii10074 = 1080; e.afii10075 = 1081; e.afii10076 = 1082; e.afii10077 = 1083; e.afii10078 = 1084; e.afii10079 = 1085; e.afii10080 = 1086; e.afii10081 = 1087; e.afii10082 = 1088; e.afii10083 = 1089; e.afii10084 = 1090; e.afii10085 = 1091; e.afii10086 = 1092; e.afii10087 = 1093; e.afii10088 = 1094; e.afii10089 = 1095; e.afii10090 = 1096; e.afii10091 = 1097; e.afii10092 = 1098; e.afii10093 = 1099; e.afii10094 = 1100; e.afii10095 = 1101; e.afii10096 = 1102; e.afii10097 = 1103; e.afii10098 = 1169; e.afii10099 = 1106; e.afii10100 = 1107; e.afii10101 = 1108; e.afii10102 = 1109; e.afii10103 = 1110; e.afii10104 = 1111; e.afii10105 = 1112; e.afii10106 = 1113; e.afii10107 = 1114; e.afii10108 = 1115; e.afii10109 = 1116; e.afii10110 = 1118; e.afii10145 = 1039; e.afii10146 = 1122; e.afii10147 = 1138; e.afii10148 = 1140; e.afii10192 = 63174; e.afii10193 = 1119; e.afii10194 = 1123; e.afii10195 = 1139; e.afii10196 = 1141; e.afii10831 = 63175; e.afii10832 = 63176; e.afii10846 = 1241; e.afii299 = 8206; e.afii300 = 8207; e.afii301 = 8205; e.afii57381 = 1642; e.afii57388 = 1548; e.afii57392 = 1632; e.afii57393 = 1633; e.afii57394 = 1634; e.afii57395 = 1635; e.afii57396 = 1636; e.afii57397 = 1637; e.afii57398 = 1638; e.afii57399 = 1639; e.afii57400 = 1640; e.afii57401 = 1641; e.afii57403 = 1563; e.afii57407 = 1567; e.afii57409 = 1569; e.afii57410 = 1570; e.afii57411 = 1571; e.afii57412 = 1572; e.afii57413 = 1573; e.afii57414 = 1574; e.afii57415 = 1575; e.afii57416 = 1576; e.afii57417 = 1577; e.afii57418 = 1578; e.afii57419 = 1579; e.afii57420 = 1580; e.afii57421 = 1581; e.afii57422 = 1582; e.afii57423 = 1583; e.afii57424 = 1584; e.afii57425 = 1585; e.afii57426 = 1586; e.afii57427 = 1587; e.afii57428 = 1588; e.afii57429 = 1589; e.afii57430 = 1590; e.afii57431 = 1591; e.afii57432 = 1592; e.afii57433 = 1593; e.afii57434 = 1594; e.afii57440 = 1600; e.afii57441 = 1601; e.afii57442 = 1602; e.afii57443 = 1603; e.afii57444 = 1604; e.afii57445 = 1605; e.afii57446 = 1606; e.afii57448 = 1608; e.afii57449 = 1609; e.afii57450 = 1610; e.afii57451 = 1611; e.afii57452 = 1612; e.afii57453 = 1613; e.afii57454 = 1614; e.afii57455 = 1615; e.afii57456 = 1616; e.afii57457 = 1617; e.afii57458 = 1618; e.afii57470 = 1607; e.afii57505 = 1700; e.afii57506 = 1662; e.afii57507 = 1670; e.afii57508 = 1688; e.afii57509 = 1711; e.afii57511 = 1657; e.afii57512 = 1672; e.afii57513 = 1681; e.afii57514 = 1722; e.afii57519 = 1746; e.afii57534 = 1749; e.afii57636 = 8362; e.afii57645 = 1470; e.afii57658 = 1475; e.afii57664 = 1488; e.afii57665 = 1489; e.afii57666 = 1490; e.afii57667 = 1491; e.afii57668 = 1492; e.afii57669 = 1493; e.afii57670 = 1494; e.afii57671 = 1495; e.afii57672 = 1496; e.afii57673 = 1497; e.afii57674 = 1498; e.afii57675 = 1499; e.afii57676 = 1500; e.afii57677 = 1501; e.afii57678 = 1502; e.afii57679 = 1503; e.afii57680 = 1504; e.afii57681 = 1505; e.afii57682 = 1506; e.afii57683 = 1507; e.afii57684 = 1508; e.afii57685 = 1509; e.afii57686 = 1510; e.afii57687 = 1511; e.afii57688 = 1512; e.afii57689 = 1513; e.afii57690 = 1514; e.afii57694 = 64298; e.afii57695 = 64299; e.afii57700 = 64331; e.afii57705 = 64287; e.afii57716 = 1520; e.afii57717 = 1521; e.afii57718 = 1522; e.afii57723 = 64309; e.afii57793 = 1460; e.afii57794 = 1461; e.afii57795 = 1462; e.afii57796 = 1467; e.afii57797 = 1464; e.afii57798 = 1463; e.afii57799 = 1456; e.afii57800 = 1458; e.afii57801 = 1457; e.afii57802 = 1459; e.afii57803 = 1474; e.afii57804 = 1473; e.afii57806 = 1465; e.afii57807 = 1468; e.afii57839 = 1469; e.afii57841 = 1471; e.afii57842 = 1472; e.afii57929 = 700; e.afii61248 = 8453; e.afii61289 = 8467; e.afii61352 = 8470; e.afii61573 = 8236; e.afii61574 = 8237; e.afii61575 = 8238; e.afii61664 = 8204; e.afii63167 = 1645; e.afii64937 = 701; e.agrave = 224; e.agujarati = 2693; e.agurmukhi = 2565; e.ahiragana = 12354; e.ahookabove = 7843; e.aibengali = 2448; e.aibopomofo = 12574; e.aideva = 2320; e.aiecyrillic = 1237; e.aigujarati = 2704; e.aigurmukhi = 2576; e.aimatragurmukhi = 2632; e.ainarabic = 1593; e.ainfinalarabic = 65226; e.aininitialarabic = 65227; e.ainmedialarabic = 65228; e.ainvertedbreve = 515; e.aivowelsignbengali = 2504; e.aivowelsigndeva = 2376; e.aivowelsigngujarati = 2760; e.akatakana = 12450; e.akatakanahalfwidth = 65393; e.akorean = 12623; e.alef = 1488; e.alefarabic = 1575; e.alefdageshhebrew = 64304; e.aleffinalarabic = 65166; e.alefhamzaabovearabic = 1571; e.alefhamzaabovefinalarabic = 65156; e.alefhamzabelowarabic = 1573; e.alefhamzabelowfinalarabic = 65160; e.alefhebrew = 1488; e.aleflamedhebrew = 64335; e.alefmaddaabovearabic = 1570; e.alefmaddaabovefinalarabic = 65154; e.alefmaksuraarabic = 1609; e.alefmaksurafinalarabic = 65264; e.alefmaksurainitialarabic = 65267; e.alefmaksuramedialarabic = 65268; e.alefpatahhebrew = 64302; e.alefqamatshebrew = 64303; e.aleph = 8501; e.allequal = 8780; e.alpha = 945; e.alphatonos = 940; e.amacron = 257; e.amonospace = 65345; e.ampersand = 38; e.ampersandmonospace = 65286; e.ampersandsmall = 63270; e.amsquare = 13250; e.anbopomofo = 12578; e.angbopomofo = 12580; e.angbracketleft = 12296; e.angbracketright = 12297; e.angkhankhuthai = 3674; e.angle = 8736; e.anglebracketleft = 12296; e.anglebracketleftvertical = 65087; e.anglebracketright = 12297; e.anglebracketrightvertical = 65088; e.angleleft = 9001; e.angleright = 9002; e.angstrom = 8491; e.anoteleia = 903; e.anudattadeva = 2386; e.anusvarabengali = 2434; e.anusvaradeva = 2306; e.anusvaragujarati = 2690; e.aogonek = 261; e.apaatosquare = 13056; e.aparen = 9372; e.apostrophearmenian = 1370; e.apostrophemod = 700; e.apple = 63743; e.approaches = 8784; e.approxequal = 8776; e.approxequalorimage = 8786; e.approximatelyequal = 8773; e.araeaekorean = 12686; e.araeakorean = 12685; e.arc = 8978; e.arighthalfring = 7834; e.aring = 229; e.aringacute = 507; e.aringbelow = 7681; e.arrowboth = 8596; e.arrowdashdown = 8675; e.arrowdashleft = 8672; e.arrowdashright = 8674; e.arrowdashup = 8673; e.arrowdblboth = 8660; e.arrowdbldown = 8659; e.arrowdblleft = 8656; e.arrowdblright = 8658; e.arrowdblup = 8657; e.arrowdown = 8595; e.arrowdownleft = 8601; e.arrowdownright = 8600; e.arrowdownwhite = 8681; e.arrowheaddownmod = 709; e.arrowheadleftmod = 706; e.arrowheadrightmod = 707; e.arrowheadupmod = 708; e.arrowhorizex = 63719; e.arrowleft = 8592; e.arrowleftdbl = 8656; e.arrowleftdblstroke = 8653; e.arrowleftoverright = 8646; e.arrowleftwhite = 8678; e.arrowright = 8594; e.arrowrightdblstroke = 8655; e.arrowrightheavy = 10142; e.arrowrightoverleft = 8644; e.arrowrightwhite = 8680; e.arrowtableft = 8676; e.arrowtabright = 8677; e.arrowup = 8593; e.arrowupdn = 8597; e.arrowupdnbse = 8616; e.arrowupdownbase = 8616; e.arrowupleft = 8598; e.arrowupleftofdown = 8645; e.arrowupright = 8599; e.arrowupwhite = 8679; e.arrowvertex = 63718; e.asciicircum = 94; e.asciicircummonospace = 65342; e.asciitilde = 126; e.asciitildemonospace = 65374; e.ascript = 593; e.ascriptturned = 594; e.asmallhiragana = 12353; e.asmallkatakana = 12449; e.asmallkatakanahalfwidth = 65383; e.asterisk = 42; e.asteriskaltonearabic = 1645; e.asteriskarabic = 1645; e.asteriskmath = 8727; e.asteriskmonospace = 65290; e.asterisksmall = 65121; e.asterism = 8258; e.asuperior = 63209; e.asymptoticallyequal = 8771; e.at = 64; e.atilde = 227; e.atmonospace = 65312; e.atsmall = 65131; e.aturned = 592; e.aubengali = 2452; e.aubopomofo = 12576; e.audeva = 2324; e.augujarati = 2708; e.augurmukhi = 2580; e.aulengthmarkbengali = 2519; e.aumatragurmukhi = 2636; e.auvowelsignbengali = 2508; e.auvowelsigndeva = 2380; e.auvowelsigngujarati = 2764; e.avagrahadeva = 2365; e.aybarmenian = 1377; e.ayin = 1506; e.ayinaltonehebrew = 64288; e.ayinhebrew = 1506; e.b = 98; e.babengali = 2476; e.backslash = 92; e.backslashmonospace = 65340; e.badeva = 2348; e.bagujarati = 2732; e.bagurmukhi = 2604; e.bahiragana = 12400; e.bahtthai = 3647; e.bakatakana = 12496; e.bar = 124; e.barmonospace = 65372; e.bbopomofo = 12549; e.bcircle = 9425; e.bdotaccent = 7683; e.bdotbelow = 7685; e.beamedsixteenthnotes = 9836; e.because = 8757; e.becyrillic = 1073; e.beharabic = 1576; e.behfinalarabic = 65168; e.behinitialarabic = 65169; e.behiragana = 12409; e.behmedialarabic = 65170; e.behmeeminitialarabic = 64671; e.behmeemisolatedarabic = 64520; e.behnoonfinalarabic = 64621; e.bekatakana = 12505; e.benarmenian = 1378; e.bet = 1489; e.beta = 946; e.betasymbolgreek = 976; e.betdagesh = 64305; e.betdageshhebrew = 64305; e.bethebrew = 1489; e.betrafehebrew = 64332; e.bhabengali = 2477; e.bhadeva = 2349; e.bhagujarati = 2733; e.bhagurmukhi = 2605; e.bhook = 595; e.bihiragana = 12403; e.bikatakana = 12499; e.bilabialclick = 664; e.bindigurmukhi = 2562; e.birusquare = 13105; e.blackcircle = 9679; e.blackdiamond = 9670; e.blackdownpointingtriangle = 9660; e.blackleftpointingpointer = 9668; e.blackleftpointingtriangle = 9664; e.blacklenticularbracketleft = 12304; e.blacklenticularbracketleftvertical = 65083; e.blacklenticularbracketright = 12305; e.blacklenticularbracketrightvertical = 65084; e.blacklowerlefttriangle = 9699; e.blacklowerrighttriangle = 9698; e.blackrectangle = 9644; e.blackrightpointingpointer = 9658; e.blackrightpointingtriangle = 9654; e.blacksmallsquare = 9642; e.blacksmilingface = 9787; e.blacksquare = 9632; e.blackstar = 9733; e.blackupperlefttriangle = 9700; e.blackupperrighttriangle = 9701; e.blackuppointingsmalltriangle = 9652; e.blackuppointingtriangle = 9650; e.blank = 9251; e.blinebelow = 7687; e.block = 9608; e.bmonospace = 65346; e.bobaimaithai = 3610; e.bohiragana = 12412; e.bokatakana = 12508; e.bparen = 9373; e.bqsquare = 13251; e.braceex = 63732; e.braceleft = 123; e.braceleftbt = 63731; e.braceleftmid = 63730; e.braceleftmonospace = 65371; e.braceleftsmall = 65115; e.bracelefttp = 63729; e.braceleftvertical = 65079; e.braceright = 125; e.bracerightbt = 63742; e.bracerightmid = 63741; e.bracerightmonospace = 65373; e.bracerightsmall = 65116; e.bracerighttp = 63740; e.bracerightvertical = 65080; e.bracketleft = 91; e.bracketleftbt = 63728; e.bracketleftex = 63727; e.bracketleftmonospace = 65339; e.bracketlefttp = 63726; e.bracketright = 93; e.bracketrightbt = 63739; e.bracketrightex = 63738; e.bracketrightmonospace = 65341; e.bracketrighttp = 63737; e.breve = 728; e.brevebelowcmb = 814; e.brevecmb = 774; e.breveinvertedbelowcmb = 815; e.breveinvertedcmb = 785; e.breveinverteddoublecmb = 865; e.bridgebelowcmb = 810; e.bridgeinvertedbelowcmb = 826; e.brokenbar = 166; e.bstroke = 384; e.bsuperior = 63210; e.btopbar = 387; e.buhiragana = 12406; e.bukatakana = 12502; e.bullet = 8226; e.bulletinverse = 9688; e.bulletoperator = 8729; e.bullseye = 9678; e.c = 99; e.caarmenian = 1390; e.cabengali = 2458; e.cacute = 263; e.cadeva = 2330; e.cagujarati = 2714; e.cagurmukhi = 2586; e.calsquare = 13192; e.candrabindubengali = 2433; e.candrabinducmb = 784; e.candrabindudeva = 2305; e.candrabindugujarati = 2689; e.capslock = 8682; e.careof = 8453; e.caron = 711; e.caronbelowcmb = 812; e.caroncmb = 780; e.carriagereturn = 8629; e.cbopomofo = 12568; e.ccaron = 269; e.ccedilla = 231; e.ccedillaacute = 7689; e.ccircle = 9426; e.ccircumflex = 265; e.ccurl = 597; e.cdot = 267; e.cdotaccent = 267; e.cdsquare = 13253; e.cedilla = 184; e.cedillacmb = 807; e.cent = 162; e.centigrade = 8451; e.centinferior = 63199; e.centmonospace = 65504; e.centoldstyle = 63394; e.centsuperior = 63200; e.chaarmenian = 1401; e.chabengali = 2459; e.chadeva = 2331; e.chagujarati = 2715; e.chagurmukhi = 2587; e.chbopomofo = 12564; e.cheabkhasiancyrillic = 1213; e.checkmark = 10003; e.checyrillic = 1095; e.chedescenderabkhasiancyrillic = 1215; e.chedescendercyrillic = 1207; e.chedieresiscyrillic = 1269; e.cheharmenian = 1395; e.chekhakassiancyrillic = 1228; e.cheverticalstrokecyrillic = 1209; e.chi = 967; e.chieuchacirclekorean = 12919; e.chieuchaparenkorean = 12823; e.chieuchcirclekorean = 12905; e.chieuchkorean = 12618; e.chieuchparenkorean = 12809; e.chochangthai = 3594; e.chochanthai = 3592; e.chochingthai = 3593; e.chochoethai = 3596; e.chook = 392; e.cieucacirclekorean = 12918; e.cieucaparenkorean = 12822; e.cieuccirclekorean = 12904; e.cieuckorean = 12616; e.cieucparenkorean = 12808; e.cieucuparenkorean = 12828; e.circle = 9675; e.circlecopyrt = 169; e.circlemultiply = 8855; e.circleot = 8857; e.circleplus = 8853; e.circlepostalmark = 12342; e.circlewithlefthalfblack = 9680; e.circlewithrighthalfblack = 9681; e.circumflex = 710; e.circumflexbelowcmb = 813; e.circumflexcmb = 770; e.clear = 8999; e.clickalveolar = 450; e.clickdental = 448; e.clicklateral = 449; e.clickretroflex = 451; e.club = 9827; e.clubsuitblack = 9827; e.clubsuitwhite = 9831; e.cmcubedsquare = 13220; e.cmonospace = 65347; e.cmsquaredsquare = 13216; e.coarmenian = 1409; e.colon = 58; e.colonmonetary = 8353; e.colonmonospace = 65306; e.colonsign = 8353; e.colonsmall = 65109; e.colontriangularhalfmod = 721; e.colontriangularmod = 720; e.comma = 44; e.commaabovecmb = 787; e.commaaboverightcmb = 789; e.commaaccent = 63171; e.commaarabic = 1548; e.commaarmenian = 1373; e.commainferior = 63201; e.commamonospace = 65292; e.commareversedabovecmb = 788; e.commareversedmod = 701; e.commasmall = 65104; e.commasuperior = 63202; e.commaturnedabovecmb = 786; e.commaturnedmod = 699; e.compass = 9788; e.congruent = 8773; e.contourintegral = 8750; e.control = 8963; e.controlACK = 6; e.controlBEL = 7; e.controlBS = 8; e.controlCAN = 24; e.controlCR = 13; e.controlDC1 = 17; e.controlDC2 = 18; e.controlDC3 = 19; e.controlDC4 = 20; e.controlDEL = 127; e.controlDLE = 16; e.controlEM = 25; e.controlENQ = 5; e.controlEOT = 4; e.controlESC = 27; e.controlETB = 23; e.controlETX = 3; e.controlFF = 12; e.controlFS = 28; e.controlGS = 29; e.controlHT = 9; e.controlLF = 10; e.controlNAK = 21; e.controlNULL = 0; e.controlRS = 30; e.controlSI = 15; e.controlSO = 14; e.controlSOT = 2; e.controlSTX = 1; e.controlSUB = 26; e.controlSYN = 22; e.controlUS = 31; e.controlVT = 11; e.copyright = 169; e.copyrightsans = 63721; e.copyrightserif = 63193; e.cornerbracketleft = 12300; e.cornerbracketlefthalfwidth = 65378; e.cornerbracketleftvertical = 65089; e.cornerbracketright = 12301; e.cornerbracketrighthalfwidth = 65379; e.cornerbracketrightvertical = 65090; e.corporationsquare = 13183; e.cosquare = 13255; e.coverkgsquare = 13254; e.cparen = 9374; e.cruzeiro = 8354; e.cstretched = 663; e.curlyand = 8911; e.curlyor = 8910; e.currency = 164; e.cyrBreve = 63185; e.cyrFlex = 63186; e.cyrbreve = 63188; e.cyrflex = 63189; e.d = 100; e.daarmenian = 1380; e.dabengali = 2470; e.dadarabic = 1590; e.dadeva = 2342; e.dadfinalarabic = 65214; e.dadinitialarabic = 65215; e.dadmedialarabic = 65216; e.dagesh = 1468; e.dageshhebrew = 1468; e.dagger = 8224; e.daggerdbl = 8225; e.dagujarati = 2726; e.dagurmukhi = 2598; e.dahiragana = 12384; e.dakatakana = 12480; e.dalarabic = 1583; e.dalet = 1491; e.daletdagesh = 64307; e.daletdageshhebrew = 64307; e.dalethebrew = 1491; e.dalfinalarabic = 65194; e.dammaarabic = 1615; e.dammalowarabic = 1615; e.dammatanaltonearabic = 1612; e.dammatanarabic = 1612; e.danda = 2404; e.dargahebrew = 1447; e.dargalefthebrew = 1447; e.dasiapneumatacyrilliccmb = 1157; e.dblGrave = 63187; e.dblanglebracketleft = 12298; e.dblanglebracketleftvertical = 65085; e.dblanglebracketright = 12299; e.dblanglebracketrightvertical = 65086; e.dblarchinvertedbelowcmb = 811; e.dblarrowleft = 8660; e.dblarrowright = 8658; e.dbldanda = 2405; e.dblgrave = 63190; e.dblgravecmb = 783; e.dblintegral = 8748; e.dbllowline = 8215; e.dbllowlinecmb = 819; e.dbloverlinecmb = 831; e.dblprimemod = 698; e.dblverticalbar = 8214; e.dblverticallineabovecmb = 782; e.dbopomofo = 12553; e.dbsquare = 13256; e.dcaron = 271; e.dcedilla = 7697; e.dcircle = 9427; e.dcircumflexbelow = 7699; e.dcroat = 273; e.ddabengali = 2465; e.ddadeva = 2337; e.ddagujarati = 2721; e.ddagurmukhi = 2593; e.ddalarabic = 1672; e.ddalfinalarabic = 64393; e.dddhadeva = 2396; e.ddhabengali = 2466; e.ddhadeva = 2338; e.ddhagujarati = 2722; e.ddhagurmukhi = 2594; e.ddotaccent = 7691; e.ddotbelow = 7693; e.decimalseparatorarabic = 1643; e.decimalseparatorpersian = 1643; e.decyrillic = 1076; e.degree = 176; e.dehihebrew = 1453; e.dehiragana = 12391; e.deicoptic = 1007; e.dekatakana = 12487; e.deleteleft = 9003; e.deleteright = 8998; e.delta = 948; e.deltaturned = 397; e.denominatorminusonenumeratorbengali = 2552; e.dezh = 676; e.dhabengali = 2471; e.dhadeva = 2343; e.dhagujarati = 2727; e.dhagurmukhi = 2599; e.dhook = 599; e.dialytikatonos = 901; e.dialytikatonoscmb = 836; e.diamond = 9830; e.diamondsuitwhite = 9826; e.dieresis = 168; e.dieresisacute = 63191; e.dieresisbelowcmb = 804; e.dieresiscmb = 776; e.dieresisgrave = 63192; e.dieresistonos = 901; e.dihiragana = 12386; e.dikatakana = 12482; e.dittomark = 12291; e.divide = 247; e.divides = 8739; e.divisionslash = 8725; e.djecyrillic = 1106; e.dkshade = 9619; e.dlinebelow = 7695; e.dlsquare = 13207; e.dmacron = 273; e.dmonospace = 65348; e.dnblock = 9604; e.dochadathai = 3598; e.dodekthai = 3604; e.dohiragana = 12393; e.dokatakana = 12489; e.dollar = 36; e.dollarinferior = 63203; e.dollarmonospace = 65284; e.dollaroldstyle = 63268; e.dollarsmall = 65129; e.dollarsuperior = 63204; e.dong = 8363; e.dorusquare = 13094; e.dotaccent = 729; e.dotaccentcmb = 775; e.dotbelowcmb = 803; e.dotbelowcomb = 803; e.dotkatakana = 12539; e.dotlessi = 305; e.dotlessj = 63166; e.dotlessjstrokehook = 644; e.dotmath = 8901; e.dottedcircle = 9676; e.doubleyodpatah = 64287; e.doubleyodpatahhebrew = 64287; e.downtackbelowcmb = 798; e.downtackmod = 725; e.dparen = 9375; e.dsuperior = 63211; e.dtail = 598; e.dtopbar = 396; e.duhiragana = 12389; e.dukatakana = 12485; e.dz = 499; e.dzaltone = 675; e.dzcaron = 454; e.dzcurl = 677; e.dzeabkhasiancyrillic = 1249; e.dzecyrillic = 1109; e.dzhecyrillic = 1119; e.e = 101; e.eacute = 233; e.earth = 9793; e.ebengali = 2447; e.ebopomofo = 12572; e.ebreve = 277; e.ecandradeva = 2317; e.ecandragujarati = 2701; e.ecandravowelsigndeva = 2373; e.ecandravowelsigngujarati = 2757; e.ecaron = 283; e.ecedillabreve = 7709; e.echarmenian = 1381; e.echyiwnarmenian = 1415; e.ecircle = 9428; e.ecircumflex = 234; e.ecircumflexacute = 7871; e.ecircumflexbelow = 7705; e.ecircumflexdotbelow = 7879; e.ecircumflexgrave = 7873; e.ecircumflexhookabove = 7875; e.ecircumflextilde = 7877; e.ecyrillic = 1108; e.edblgrave = 517; e.edeva = 2319; e.edieresis = 235; e.edot = 279; e.edotaccent = 279; e.edotbelow = 7865; e.eegurmukhi = 2575; e.eematragurmukhi = 2631; e.efcyrillic = 1092; e.egrave = 232; e.egujarati = 2703; e.eharmenian = 1383; e.ehbopomofo = 12573; e.ehiragana = 12360; e.ehookabove = 7867; e.eibopomofo = 12575; e.eight = 56; e.eightarabic = 1640; e.eightbengali = 2542; e.eightcircle = 9319; e.eightcircleinversesansserif = 10129; e.eightdeva = 2414; e.eighteencircle = 9329; e.eighteenparen = 9349; e.eighteenperiod = 9369; e.eightgujarati = 2798; e.eightgurmukhi = 2670; e.eighthackarabic = 1640; e.eighthangzhou = 12328; e.eighthnotebeamed = 9835; e.eightideographicparen = 12839; e.eightinferior = 8328; e.eightmonospace = 65304; e.eightoldstyle = 63288; e.eightparen = 9339; e.eightperiod = 9359; e.eightpersian = 1784; e.eightroman = 8567; e.eightsuperior = 8312; e.eightthai = 3672; e.einvertedbreve = 519; e.eiotifiedcyrillic = 1125; e.ekatakana = 12456; e.ekatakanahalfwidth = 65396; e.ekonkargurmukhi = 2676; e.ekorean = 12628; e.elcyrillic = 1083; e.element = 8712; e.elevencircle = 9322; e.elevenparen = 9342; e.elevenperiod = 9362; e.elevenroman = 8570; e.ellipsis = 8230; e.ellipsisvertical = 8942; e.emacron = 275; e.emacronacute = 7703; e.emacrongrave = 7701; e.emcyrillic = 1084; e.emdash = 8212; e.emdashvertical = 65073; e.emonospace = 65349; e.emphasismarkarmenian = 1371; e.emptyset = 8709; e.enbopomofo = 12579; e.encyrillic = 1085; e.endash = 8211; e.endashvertical = 65074; e.endescendercyrillic = 1187; e.eng = 331; e.engbopomofo = 12581; e.enghecyrillic = 1189; e.enhookcyrillic = 1224; e.enspace = 8194; e.eogonek = 281; e.eokorean = 12627; e.eopen = 603; e.eopenclosed = 666; e.eopenreversed = 604; e.eopenreversedclosed = 606; e.eopenreversedhook = 605; e.eparen = 9376; e.epsilon = 949; e.epsilontonos = 941; e.equal = 61; e.equalmonospace = 65309; e.equalsmall = 65126; e.equalsuperior = 8316; e.equivalence = 8801; e.erbopomofo = 12582; e.ercyrillic = 1088; e.ereversed = 600; e.ereversedcyrillic = 1101; e.escyrillic = 1089; e.esdescendercyrillic = 1195; e.esh = 643; e.eshcurl = 646; e.eshortdeva = 2318; e.eshortvowelsigndeva = 2374; e.eshreversedloop = 426; e.eshsquatreversed = 645; e.esmallhiragana = 12359; e.esmallkatakana = 12455; e.esmallkatakanahalfwidth = 65386; e.estimated = 8494; e.esuperior = 63212; e.eta = 951; e.etarmenian = 1384; e.etatonos = 942; e.eth = 240; e.etilde = 7869; e.etildebelow = 7707; e.etnahtafoukhhebrew = 1425; e.etnahtafoukhlefthebrew = 1425; e.etnahtahebrew = 1425; e.etnahtalefthebrew = 1425; e.eturned = 477; e.eukorean = 12641; e.euro = 8364; e.evowelsignbengali = 2503; e.evowelsigndeva = 2375; e.evowelsigngujarati = 2759; e.exclam = 33; e.exclamarmenian = 1372; e.exclamdbl = 8252; e.exclamdown = 161; e.exclamdownsmall = 63393; e.exclammonospace = 65281; e.exclamsmall = 63265; e.existential = 8707; e.ezh = 658; e.ezhcaron = 495; e.ezhcurl = 659; e.ezhreversed = 441; e.ezhtail = 442; e.f = 102; e.fadeva = 2398; e.fagurmukhi = 2654; e.fahrenheit = 8457; e.fathaarabic = 1614; e.fathalowarabic = 1614; e.fathatanarabic = 1611; e.fbopomofo = 12552; e.fcircle = 9429; e.fdotaccent = 7711; e.feharabic = 1601; e.feharmenian = 1414; e.fehfinalarabic = 65234; e.fehinitialarabic = 65235; e.fehmedialarabic = 65236; e.feicoptic = 997; e.female = 9792; e.ff = 64256; e.f_f = 64256; e.ffi = 64259; e.f_f_i = 64259; e.ffl = 64260; e.f_f_l = 64260; e.fi = 64257; e.f_i = 64257; e.fifteencircle = 9326; e.fifteenparen = 9346; e.fifteenperiod = 9366; e.figuredash = 8210; e.filledbox = 9632; e.filledrect = 9644; e.finalkaf = 1498; e.finalkafdagesh = 64314; e.finalkafdageshhebrew = 64314; e.finalkafhebrew = 1498; e.finalmem = 1501; e.finalmemhebrew = 1501; e.finalnun = 1503; e.finalnunhebrew = 1503; e.finalpe = 1507; e.finalpehebrew = 1507; e.finaltsadi = 1509; e.finaltsadihebrew = 1509; e.firsttonechinese = 713; e.fisheye = 9673; e.fitacyrillic = 1139; e.five = 53; e.fivearabic = 1637; e.fivebengali = 2539; e.fivecircle = 9316; e.fivecircleinversesansserif = 10126; e.fivedeva = 2411; e.fiveeighths = 8541; e.fivegujarati = 2795; e.fivegurmukhi = 2667; e.fivehackarabic = 1637; e.fivehangzhou = 12325; e.fiveideographicparen = 12836; e.fiveinferior = 8325; e.fivemonospace = 65301; e.fiveoldstyle = 63285; e.fiveparen = 9336; e.fiveperiod = 9356; e.fivepersian = 1781; e.fiveroman = 8564; e.fivesuperior = 8309; e.fivethai = 3669; e.fl = 64258; e.f_l = 64258; e.florin = 402; e.fmonospace = 65350; e.fmsquare = 13209; e.fofanthai = 3615; e.fofathai = 3613; e.fongmanthai = 3663; e.forall = 8704; e.four = 52; e.fourarabic = 1636; e.fourbengali = 2538; e.fourcircle = 9315; e.fourcircleinversesansserif = 10125; e.fourdeva = 2410; e.fourgujarati = 2794; e.fourgurmukhi = 2666; e.fourhackarabic = 1636; e.fourhangzhou = 12324; e.fourideographicparen = 12835; e.fourinferior = 8324; e.fourmonospace = 65300; e.fournumeratorbengali = 2551; e.fouroldstyle = 63284; e.fourparen = 9335; e.fourperiod = 9355; e.fourpersian = 1780; e.fourroman = 8563; e.foursuperior = 8308; e.fourteencircle = 9325; e.fourteenparen = 9345; e.fourteenperiod = 9365; e.fourthai = 3668; e.fourthtonechinese = 715; e.fparen = 9377; e.fraction = 8260; e.franc = 8355; e.g = 103; e.gabengali = 2455; e.gacute = 501; e.gadeva = 2327; e.gafarabic = 1711; e.gaffinalarabic = 64403; e.gafinitialarabic = 64404; e.gafmedialarabic = 64405; e.gagujarati = 2711; e.gagurmukhi = 2583; e.gahiragana = 12364; e.gakatakana = 12460; e.gamma = 947; e.gammalatinsmall = 611; e.gammasuperior = 736; e.gangiacoptic = 1003; e.gbopomofo = 12557; e.gbreve = 287; e.gcaron = 487; e.gcedilla = 291; e.gcircle = 9430; e.gcircumflex = 285; e.gcommaaccent = 291; e.gdot = 289; e.gdotaccent = 289; e.gecyrillic = 1075; e.gehiragana = 12370; e.gekatakana = 12466; e.geometricallyequal = 8785; e.gereshaccenthebrew = 1436; e.gereshhebrew = 1523; e.gereshmuqdamhebrew = 1437; e.germandbls = 223; e.gershayimaccenthebrew = 1438; e.gershayimhebrew = 1524; e.getamark = 12307; e.ghabengali = 2456; e.ghadarmenian = 1394; e.ghadeva = 2328; e.ghagujarati = 2712; e.ghagurmukhi = 2584; e.ghainarabic = 1594; e.ghainfinalarabic = 65230; e.ghaininitialarabic = 65231; e.ghainmedialarabic = 65232; e.ghemiddlehookcyrillic = 1173; e.ghestrokecyrillic = 1171; e.gheupturncyrillic = 1169; e.ghhadeva = 2394; e.ghhagurmukhi = 2650; e.ghook = 608; e.ghzsquare = 13203; e.gihiragana = 12366; e.gikatakana = 12462; e.gimarmenian = 1379; e.gimel = 1490; e.gimeldagesh = 64306; e.gimeldageshhebrew = 64306; e.gimelhebrew = 1490; e.gjecyrillic = 1107; e.glottalinvertedstroke = 446; e.glottalstop = 660; e.glottalstopinverted = 662; e.glottalstopmod = 704; e.glottalstopreversed = 661; e.glottalstopreversedmod = 705; e.glottalstopreversedsuperior = 740; e.glottalstopstroke = 673; e.glottalstopstrokereversed = 674; e.gmacron = 7713; e.gmonospace = 65351; e.gohiragana = 12372; e.gokatakana = 12468; e.gparen = 9378; e.gpasquare = 13228; e.gradient = 8711; e.grave = 96; e.gravebelowcmb = 790; e.gravecmb = 768; e.gravecomb = 768; e.gravedeva = 2387; e.gravelowmod = 718; e.gravemonospace = 65344; e.gravetonecmb = 832; e.greater = 62; e.greaterequal = 8805; e.greaterequalorless = 8923; e.greatermonospace = 65310; e.greaterorequivalent = 8819; e.greaterorless = 8823; e.greateroverequal = 8807; e.greatersmall = 65125; e.gscript = 609; e.gstroke = 485; e.guhiragana = 12368; e.guillemotleft = 171; e.guillemotright = 187; e.guilsinglleft = 8249; e.guilsinglright = 8250; e.gukatakana = 12464; e.guramusquare = 13080; e.gysquare = 13257; e.h = 104; e.haabkhasiancyrillic = 1193; e.haaltonearabic = 1729; e.habengali = 2489; e.hadescendercyrillic = 1203; e.hadeva = 2361; e.hagujarati = 2745; e.hagurmukhi = 2617; e.haharabic = 1581; e.hahfinalarabic = 65186; e.hahinitialarabic = 65187; e.hahiragana = 12399; e.hahmedialarabic = 65188; e.haitusquare = 13098; e.hakatakana = 12495; e.hakatakanahalfwidth = 65418; e.halantgurmukhi = 2637; e.hamzaarabic = 1569; e.hamzalowarabic = 1569; e.hangulfiller = 12644; e.hardsigncyrillic = 1098; e.harpoonleftbarbup = 8636; e.harpoonrightbarbup = 8640; e.hasquare = 13258; e.hatafpatah = 1458; e.hatafpatah16 = 1458; e.hatafpatah23 = 1458; e.hatafpatah2f = 1458; e.hatafpatahhebrew = 1458; e.hatafpatahnarrowhebrew = 1458; e.hatafpatahquarterhebrew = 1458; e.hatafpatahwidehebrew = 1458; e.hatafqamats = 1459; e.hatafqamats1b = 1459; e.hatafqamats28 = 1459; e.hatafqamats34 = 1459; e.hatafqamatshebrew = 1459; e.hatafqamatsnarrowhebrew = 1459; e.hatafqamatsquarterhebrew = 1459; e.hatafqamatswidehebrew = 1459; e.hatafsegol = 1457; e.hatafsegol17 = 1457; e.hatafsegol24 = 1457; e.hatafsegol30 = 1457; e.hatafsegolhebrew = 1457; e.hatafsegolnarrowhebrew = 1457; e.hatafsegolquarterhebrew = 1457; e.hatafsegolwidehebrew = 1457; e.hbar = 295; e.hbopomofo = 12559; e.hbrevebelow = 7723; e.hcedilla = 7721; e.hcircle = 9431; e.hcircumflex = 293; e.hdieresis = 7719; e.hdotaccent = 7715; e.hdotbelow = 7717; e.he = 1492; e.heart = 9829; e.heartsuitblack = 9829; e.heartsuitwhite = 9825; e.hedagesh = 64308; e.hedageshhebrew = 64308; e.hehaltonearabic = 1729; e.heharabic = 1607; e.hehebrew = 1492; e.hehfinalaltonearabic = 64423; e.hehfinalalttwoarabic = 65258; e.hehfinalarabic = 65258; e.hehhamzaabovefinalarabic = 64421; e.hehhamzaaboveisolatedarabic = 64420; e.hehinitialaltonearabic = 64424; e.hehinitialarabic = 65259; e.hehiragana = 12408; e.hehmedialaltonearabic = 64425; e.hehmedialarabic = 65260; e.heiseierasquare = 13179; e.hekatakana = 12504; e.hekatakanahalfwidth = 65421; e.hekutaarusquare = 13110; e.henghook = 615; e.herutusquare = 13113; e.het = 1495; e.hethebrew = 1495; e.hhook = 614; e.hhooksuperior = 689; e.hieuhacirclekorean = 12923; e.hieuhaparenkorean = 12827; e.hieuhcirclekorean = 12909; e.hieuhkorean = 12622; e.hieuhparenkorean = 12813; e.hihiragana = 12402; e.hikatakana = 12498; e.hikatakanahalfwidth = 65419; e.hiriq = 1460; e.hiriq14 = 1460; e.hiriq21 = 1460; e.hiriq2d = 1460; e.hiriqhebrew = 1460; e.hiriqnarrowhebrew = 1460; e.hiriqquarterhebrew = 1460; e.hiriqwidehebrew = 1460; e.hlinebelow = 7830; e.hmonospace = 65352; e.hoarmenian = 1392; e.hohipthai = 3627; e.hohiragana = 12411; e.hokatakana = 12507; e.hokatakanahalfwidth = 65422; e.holam = 1465; e.holam19 = 1465; e.holam26 = 1465; e.holam32 = 1465; e.holamhebrew = 1465; e.holamnarrowhebrew = 1465; e.holamquarterhebrew = 1465; e.holamwidehebrew = 1465; e.honokhukthai = 3630; e.hookabovecomb = 777; e.hookcmb = 777; e.hookpalatalizedbelowcmb = 801; e.hookretroflexbelowcmb = 802; e.hoonsquare = 13122; e.horicoptic = 1001; e.horizontalbar = 8213; e.horncmb = 795; e.hotsprings = 9832; e.house = 8962; e.hparen = 9379; e.hsuperior = 688; e.hturned = 613; e.huhiragana = 12405; e.huiitosquare = 13107; e.hukatakana = 12501; e.hukatakanahalfwidth = 65420; e.hungarumlaut = 733; e.hungarumlautcmb = 779; e.hv = 405; e.hyphen = 45; e.hypheninferior = 63205; e.hyphenmonospace = 65293; e.hyphensmall = 65123; e.hyphensuperior = 63206; e.hyphentwo = 8208; e.i = 105; e.iacute = 237; e.iacyrillic = 1103; e.ibengali = 2439; e.ibopomofo = 12583; e.ibreve = 301; e.icaron = 464; e.icircle = 9432; e.icircumflex = 238; e.icyrillic = 1110; e.idblgrave = 521; e.ideographearthcircle = 12943; e.ideographfirecircle = 12939; e.ideographicallianceparen = 12863; e.ideographiccallparen = 12858; e.ideographiccentrecircle = 12965; e.ideographicclose = 12294; e.ideographiccomma = 12289; e.ideographiccommaleft = 65380; e.ideographiccongratulationparen = 12855; e.ideographiccorrectcircle = 12963; e.ideographicearthparen = 12847; e.ideographicenterpriseparen = 12861; e.ideographicexcellentcircle = 12957; e.ideographicfestivalparen = 12864; e.ideographicfinancialcircle = 12950; e.ideographicfinancialparen = 12854; e.ideographicfireparen = 12843; e.ideographichaveparen = 12850; e.ideographichighcircle = 12964; e.ideographiciterationmark = 12293; e.ideographiclaborcircle = 12952; e.ideographiclaborparen = 12856; e.ideographicleftcircle = 12967; e.ideographiclowcircle = 12966; e.ideographicmedicinecircle = 12969; e.ideographicmetalparen = 12846; e.ideographicmoonparen = 12842; e.ideographicnameparen = 12852; e.ideographicperiod = 12290; e.ideographicprintcircle = 12958; e.ideographicreachparen = 12867; e.ideographicrepresentparen = 12857; e.ideographicresourceparen = 12862; e.ideographicrightcircle = 12968; e.ideographicsecretcircle = 12953; e.ideographicselfparen = 12866; e.ideographicsocietyparen = 12851; e.ideographicspace = 12288; e.ideographicspecialparen = 12853; e.ideographicstockparen = 12849; e.ideographicstudyparen = 12859; e.ideographicsunparen = 12848; e.ideographicsuperviseparen = 12860; e.ideographicwaterparen = 12844; e.ideographicwoodparen = 12845; e.ideographiczero = 12295; e.ideographmetalcircle = 12942; e.ideographmooncircle = 12938; e.ideographnamecircle = 12948; e.ideographsuncircle = 12944; e.ideographwatercircle = 12940; e.ideographwoodcircle = 12941; e.ideva = 2311; e.idieresis = 239; e.idieresisacute = 7727; e.idieresiscyrillic = 1253; e.idotbelow = 7883; e.iebrevecyrillic = 1239; e.iecyrillic = 1077; e.ieungacirclekorean = 12917; e.ieungaparenkorean = 12821; e.ieungcirclekorean = 12903; e.ieungkorean = 12615; e.ieungparenkorean = 12807; e.igrave = 236; e.igujarati = 2695; e.igurmukhi = 2567; e.ihiragana = 12356; e.ihookabove = 7881; e.iibengali = 2440; e.iicyrillic = 1080; e.iideva = 2312; e.iigujarati = 2696; e.iigurmukhi = 2568; e.iimatragurmukhi = 2624; e.iinvertedbreve = 523; e.iishortcyrillic = 1081; e.iivowelsignbengali = 2496; e.iivowelsigndeva = 2368; e.iivowelsigngujarati = 2752; e.ij = 307; e.ikatakana = 12452; e.ikatakanahalfwidth = 65394; e.ikorean = 12643; e.ilde = 732; e.iluyhebrew = 1452; e.imacron = 299; e.imacroncyrillic = 1251; e.imageorapproximatelyequal = 8787; e.imatragurmukhi = 2623; e.imonospace = 65353; e.increment = 8710; e.infinity = 8734; e.iniarmenian = 1387; e.integral = 8747; e.integralbottom = 8993; e.integralbt = 8993; e.integralex = 63733; e.integraltop = 8992; e.integraltp = 8992; e.intersection = 8745; e.intisquare = 13061; e.invbullet = 9688; e.invcircle = 9689; e.invsmileface = 9787; e.iocyrillic = 1105; e.iogonek = 303; e.iota = 953; e.iotadieresis = 970; e.iotadieresistonos = 912; e.iotalatin = 617; e.iotatonos = 943; e.iparen = 9380; e.irigurmukhi = 2674; e.ismallhiragana = 12355; e.ismallkatakana = 12451; e.ismallkatakanahalfwidth = 65384; e.issharbengali = 2554; e.istroke = 616; e.isuperior = 63213; e.iterationhiragana = 12445; e.iterationkatakana = 12541; e.itilde = 297; e.itildebelow = 7725; e.iubopomofo = 12585; e.iucyrillic = 1102; e.ivowelsignbengali = 2495; e.ivowelsigndeva = 2367; e.ivowelsigngujarati = 2751; e.izhitsacyrillic = 1141; e.izhitsadblgravecyrillic = 1143; e.j = 106; e.jaarmenian = 1393; e.jabengali = 2460; e.jadeva = 2332; e.jagujarati = 2716; e.jagurmukhi = 2588; e.jbopomofo = 12560; e.jcaron = 496; e.jcircle = 9433; e.jcircumflex = 309; e.jcrossedtail = 669; e.jdotlessstroke = 607; e.jecyrillic = 1112; e.jeemarabic = 1580; e.jeemfinalarabic = 65182; e.jeeminitialarabic = 65183; e.jeemmedialarabic = 65184; e.jeharabic = 1688; e.jehfinalarabic = 64395; e.jhabengali = 2461; e.jhadeva = 2333; e.jhagujarati = 2717; e.jhagurmukhi = 2589; e.jheharmenian = 1403; e.jis = 12292; e.jmonospace = 65354; e.jparen = 9381; e.jsuperior = 690; e.k = 107; e.kabashkircyrillic = 1185; e.kabengali = 2453; e.kacute = 7729; e.kacyrillic = 1082; e.kadescendercyrillic = 1179; e.kadeva = 2325; e.kaf = 1499; e.kafarabic = 1603; e.kafdagesh = 64315; e.kafdageshhebrew = 64315; e.kaffinalarabic = 65242; e.kafhebrew = 1499; e.kafinitialarabic = 65243; e.kafmedialarabic = 65244; e.kafrafehebrew = 64333; e.kagujarati = 2709; e.kagurmukhi = 2581; e.kahiragana = 12363; e.kahookcyrillic = 1220; e.kakatakana = 12459; e.kakatakanahalfwidth = 65398; e.kappa = 954; e.kappasymbolgreek = 1008; e.kapyeounmieumkorean = 12657; e.kapyeounphieuphkorean = 12676; e.kapyeounpieupkorean = 12664; e.kapyeounssangpieupkorean = 12665; e.karoriisquare = 13069; e.kashidaautoarabic = 1600; e.kashidaautonosidebearingarabic = 1600; e.kasmallkatakana = 12533; e.kasquare = 13188; e.kasraarabic = 1616; e.kasratanarabic = 1613; e.kastrokecyrillic = 1183; e.katahiraprolongmarkhalfwidth = 65392; e.kaverticalstrokecyrillic = 1181; e.kbopomofo = 12558; e.kcalsquare = 13193; e.kcaron = 489; e.kcedilla = 311; e.kcircle = 9434; e.kcommaaccent = 311; e.kdotbelow = 7731; e.keharmenian = 1412; e.kehiragana = 12369; e.kekatakana = 12465; e.kekatakanahalfwidth = 65401; e.kenarmenian = 1391; e.kesmallkatakana = 12534; e.kgreenlandic = 312; e.khabengali = 2454; e.khacyrillic = 1093; e.khadeva = 2326; e.khagujarati = 2710; e.khagurmukhi = 2582; e.khaharabic = 1582; e.khahfinalarabic = 65190; e.khahinitialarabic = 65191; e.khahmedialarabic = 65192; e.kheicoptic = 999; e.khhadeva = 2393; e.khhagurmukhi = 2649; e.khieukhacirclekorean = 12920; e.khieukhaparenkorean = 12824; e.khieukhcirclekorean = 12906; e.khieukhkorean = 12619; e.khieukhparenkorean = 12810; e.khokhaithai = 3586; e.khokhonthai = 3589; e.khokhuatthai = 3587; e.khokhwaithai = 3588; e.khomutthai = 3675; e.khook = 409; e.khorakhangthai = 3590; e.khzsquare = 13201; e.kihiragana = 12365; e.kikatakana = 12461; e.kikatakanahalfwidth = 65399; e.kiroguramusquare = 13077; e.kiromeetorusquare = 13078; e.kirosquare = 13076; e.kiyeokacirclekorean = 12910; e.kiyeokaparenkorean = 12814; e.kiyeokcirclekorean = 12896; e.kiyeokkorean = 12593; e.kiyeokparenkorean = 12800; e.kiyeoksioskorean = 12595; e.kjecyrillic = 1116; e.klinebelow = 7733; e.klsquare = 13208; e.kmcubedsquare = 13222; e.kmonospace = 65355; e.kmsquaredsquare = 13218; e.kohiragana = 12371; e.kohmsquare = 13248; e.kokaithai = 3585; e.kokatakana = 12467; e.kokatakanahalfwidth = 65402; e.kooposquare = 13086; e.koppacyrillic = 1153; e.koreanstandardsymbol = 12927; e.koroniscmb = 835; e.kparen = 9382; e.kpasquare = 13226; e.ksicyrillic = 1135; e.ktsquare = 13263; e.kturned = 670; e.kuhiragana = 12367; e.kukatakana = 12463; e.kukatakanahalfwidth = 65400; e.kvsquare = 13240; e.kwsquare = 13246; e.l = 108; e.labengali = 2482; e.lacute = 314; e.ladeva = 2354; e.lagujarati = 2738; e.lagurmukhi = 2610; e.lakkhangyaothai = 3653; e.lamaleffinalarabic = 65276; e.lamalefhamzaabovefinalarabic = 65272; e.lamalefhamzaaboveisolatedarabic = 65271; e.lamalefhamzabelowfinalarabic = 65274; e.lamalefhamzabelowisolatedarabic = 65273; e.lamalefisolatedarabic = 65275; e.lamalefmaddaabovefinalarabic = 65270; e.lamalefmaddaaboveisolatedarabic = 65269; e.lamarabic = 1604; e.lambda = 955; e.lambdastroke = 411; e.lamed = 1500; e.lameddagesh = 64316; e.lameddageshhebrew = 64316; e.lamedhebrew = 1500; e.lamfinalarabic = 65246; e.lamhahinitialarabic = 64714; e.laminitialarabic = 65247; e.lamjeeminitialarabic = 64713; e.lamkhahinitialarabic = 64715; e.lamlamhehisolatedarabic = 65010; e.lammedialarabic = 65248; e.lammeemhahinitialarabic = 64904; e.lammeeminitialarabic = 64716; e.largecircle = 9711; e.lbar = 410; e.lbelt = 620; e.lbopomofo = 12556; e.lcaron = 318; e.lcedilla = 316; e.lcircle = 9435; e.lcircumflexbelow = 7741; e.lcommaaccent = 316; e.ldot = 320; e.ldotaccent = 320; e.ldotbelow = 7735; e.ldotbelowmacron = 7737; e.leftangleabovecmb = 794; e.lefttackbelowcmb = 792; e.less = 60; e.lessequal = 8804; e.lessequalorgreater = 8922; e.lessmonospace = 65308; e.lessorequivalent = 8818; e.lessorgreater = 8822; e.lessoverequal = 8806; e.lesssmall = 65124; e.lezh = 622; e.lfblock = 9612; e.lhookretroflex = 621; e.lira = 8356; e.liwnarmenian = 1388; e.lj = 457; e.ljecyrillic = 1113; e.ll = 63168; e.lladeva = 2355; e.llagujarati = 2739; e.llinebelow = 7739; e.llladeva = 2356; e.llvocalicbengali = 2529; e.llvocalicdeva = 2401; e.llvocalicvowelsignbengali = 2531; e.llvocalicvowelsigndeva = 2403; e.lmiddletilde = 619; e.lmonospace = 65356; e.lmsquare = 13264; e.lochulathai = 3628; e.logicaland = 8743; e.logicalnot = 172; e.logicalnotreversed = 8976; e.logicalor = 8744; e.lolingthai = 3621; e.longs = 383; e.lowlinecenterline = 65102; e.lowlinecmb = 818; e.lowlinedashed = 65101; e.lozenge = 9674; e.lparen = 9383; e.lslash = 322; e.lsquare = 8467; e.lsuperior = 63214; e.ltshade = 9617; e.luthai = 3622; e.lvocalicbengali = 2444; e.lvocalicdeva = 2316; e.lvocalicvowelsignbengali = 2530; e.lvocalicvowelsigndeva = 2402; e.lxsquare = 13267; e.m = 109; e.mabengali = 2478; e.macron = 175; e.macronbelowcmb = 817; e.macroncmb = 772; e.macronlowmod = 717; e.macronmonospace = 65507; e.macute = 7743; e.madeva = 2350; e.magujarati = 2734; e.magurmukhi = 2606; e.mahapakhhebrew = 1444; e.mahapakhlefthebrew = 1444; e.mahiragana = 12414; e.maichattawalowleftthai = 63637; e.maichattawalowrightthai = 63636; e.maichattawathai = 3659; e.maichattawaupperleftthai = 63635; e.maieklowleftthai = 63628; e.maieklowrightthai = 63627; e.maiekthai = 3656; e.maiekupperleftthai = 63626; e.maihanakatleftthai = 63620; e.maihanakatthai = 3633; e.maitaikhuleftthai = 63625; e.maitaikhuthai = 3655; e.maitholowleftthai = 63631; e.maitholowrightthai = 63630; e.maithothai = 3657; e.maithoupperleftthai = 63629; e.maitrilowleftthai = 63634; e.maitrilowrightthai = 63633; e.maitrithai = 3658; e.maitriupperleftthai = 63632; e.maiyamokthai = 3654; e.makatakana = 12510; e.makatakanahalfwidth = 65423; e.male = 9794; e.mansyonsquare = 13127; e.maqafhebrew = 1470; e.mars = 9794; e.masoracirclehebrew = 1455; e.masquare = 13187; e.mbopomofo = 12551; e.mbsquare = 13268; e.mcircle = 9436; e.mcubedsquare = 13221; e.mdotaccent = 7745; e.mdotbelow = 7747; e.meemarabic = 1605; e.meemfinalarabic = 65250; e.meeminitialarabic = 65251; e.meemmedialarabic = 65252; e.meemmeeminitialarabic = 64721; e.meemmeemisolatedarabic = 64584; e.meetorusquare = 13133; e.mehiragana = 12417; e.meizierasquare = 13182; e.mekatakana = 12513; e.mekatakanahalfwidth = 65426; e.mem = 1502; e.memdagesh = 64318; e.memdageshhebrew = 64318; e.memhebrew = 1502; e.menarmenian = 1396; e.merkhahebrew = 1445; e.merkhakefulahebrew = 1446; e.merkhakefulalefthebrew = 1446; e.merkhalefthebrew = 1445; e.mhook = 625; e.mhzsquare = 13202; e.middledotkatakanahalfwidth = 65381; e.middot = 183; e.mieumacirclekorean = 12914; e.mieumaparenkorean = 12818; e.mieumcirclekorean = 12900; e.mieumkorean = 12609; e.mieumpansioskorean = 12656; e.mieumparenkorean = 12804; e.mieumpieupkorean = 12654; e.mieumsioskorean = 12655; e.mihiragana = 12415; e.mikatakana = 12511; e.mikatakanahalfwidth = 65424; e.minus = 8722; e.minusbelowcmb = 800; e.minuscircle = 8854; e.minusmod = 727; e.minusplus = 8723; e.minute = 8242; e.miribaarusquare = 13130; e.mirisquare = 13129; e.mlonglegturned = 624; e.mlsquare = 13206; e.mmcubedsquare = 13219; e.mmonospace = 65357; e.mmsquaredsquare = 13215; e.mohiragana = 12418; e.mohmsquare = 13249; e.mokatakana = 12514; e.mokatakanahalfwidth = 65427; e.molsquare = 13270; e.momathai = 3617; e.moverssquare = 13223; e.moverssquaredsquare = 13224; e.mparen = 9384; e.mpasquare = 13227; e.mssquare = 13235; e.msuperior = 63215; e.mturned = 623; e.mu = 181; e.mu1 = 181; e.muasquare = 13186; e.muchgreater = 8811; e.muchless = 8810; e.mufsquare = 13196; e.mugreek = 956; e.mugsquare = 13197; e.muhiragana = 12416; e.mukatakana = 12512; e.mukatakanahalfwidth = 65425; e.mulsquare = 13205; e.multiply = 215; e.mumsquare = 13211; e.munahhebrew = 1443; e.munahlefthebrew = 1443; e.musicalnote = 9834; e.musicalnotedbl = 9835; e.musicflatsign = 9837; e.musicsharpsign = 9839; e.mussquare = 13234; e.muvsquare = 13238; e.muwsquare = 13244; e.mvmegasquare = 13241; e.mvsquare = 13239; e.mwmegasquare = 13247; e.mwsquare = 13245; e.n = 110; e.nabengali = 2472; e.nabla = 8711; e.nacute = 324; e.nadeva = 2344; e.nagujarati = 2728; e.nagurmukhi = 2600; e.nahiragana = 12394; e.nakatakana = 12490; e.nakatakanahalfwidth = 65413; e.napostrophe = 329; e.nasquare = 13185; e.nbopomofo = 12555; e.nbspace = 160; e.ncaron = 328; e.ncedilla = 326; e.ncircle = 9437; e.ncircumflexbelow = 7755; e.ncommaaccent = 326; e.ndotaccent = 7749; e.ndotbelow = 7751; e.nehiragana = 12397; e.nekatakana = 12493; e.nekatakanahalfwidth = 65416; e.newsheqelsign = 8362; e.nfsquare = 13195; e.ngabengali = 2457; e.ngadeva = 2329; e.ngagujarati = 2713; e.ngagurmukhi = 2585; e.ngonguthai = 3591; e.nhiragana = 12435; e.nhookleft = 626; e.nhookretroflex = 627; e.nieunacirclekorean = 12911; e.nieunaparenkorean = 12815; e.nieuncieuckorean = 12597; e.nieuncirclekorean = 12897; e.nieunhieuhkorean = 12598; e.nieunkorean = 12596; e.nieunpansioskorean = 12648; e.nieunparenkorean = 12801; e.nieunsioskorean = 12647; e.nieuntikeutkorean = 12646; e.nihiragana = 12395; e.nikatakana = 12491; e.nikatakanahalfwidth = 65414; e.nikhahitleftthai = 63641; e.nikhahitthai = 3661; e.nine = 57; e.ninearabic = 1641; e.ninebengali = 2543; e.ninecircle = 9320; e.ninecircleinversesansserif = 10130; e.ninedeva = 2415; e.ninegujarati = 2799; e.ninegurmukhi = 2671; e.ninehackarabic = 1641; e.ninehangzhou = 12329; e.nineideographicparen = 12840; e.nineinferior = 8329; e.ninemonospace = 65305; e.nineoldstyle = 63289; e.nineparen = 9340; e.nineperiod = 9360; e.ninepersian = 1785; e.nineroman = 8568; e.ninesuperior = 8313; e.nineteencircle = 9330; e.nineteenparen = 9350; e.nineteenperiod = 9370; e.ninethai = 3673; e.nj = 460; e.njecyrillic = 1114; e.nkatakana = 12531; e.nkatakanahalfwidth = 65437; e.nlegrightlong = 414; e.nlinebelow = 7753; e.nmonospace = 65358; e.nmsquare = 13210; e.nnabengali = 2467; e.nnadeva = 2339; e.nnagujarati = 2723; e.nnagurmukhi = 2595; e.nnnadeva = 2345; e.nohiragana = 12398; e.nokatakana = 12494; e.nokatakanahalfwidth = 65417; e.nonbreakingspace = 160; e.nonenthai = 3603; e.nonuthai = 3609; e.noonarabic = 1606; e.noonfinalarabic = 65254; e.noonghunnaarabic = 1722; e.noonghunnafinalarabic = 64415; e.nooninitialarabic = 65255; e.noonjeeminitialarabic = 64722; e.noonjeemisolatedarabic = 64587; e.noonmedialarabic = 65256; e.noonmeeminitialarabic = 64725; e.noonmeemisolatedarabic = 64590; e.noonnoonfinalarabic = 64653; e.notcontains = 8716; e.notelement = 8713; e.notelementof = 8713; e.notequal = 8800; e.notgreater = 8815; e.notgreaternorequal = 8817; e.notgreaternorless = 8825; e.notidentical = 8802; e.notless = 8814; e.notlessnorequal = 8816; e.notparallel = 8742; e.notprecedes = 8832; e.notsubset = 8836; e.notsucceeds = 8833; e.notsuperset = 8837; e.nowarmenian = 1398; e.nparen = 9385; e.nssquare = 13233; e.nsuperior = 8319; e.ntilde = 241; e.nu = 957; e.nuhiragana = 12396; e.nukatakana = 12492; e.nukatakanahalfwidth = 65415; e.nuktabengali = 2492; e.nuktadeva = 2364; e.nuktagujarati = 2748; e.nuktagurmukhi = 2620; e.numbersign = 35; e.numbersignmonospace = 65283; e.numbersignsmall = 65119; e.numeralsigngreek = 884; e.numeralsignlowergreek = 885; e.numero = 8470; e.nun = 1504; e.nundagesh = 64320; e.nundageshhebrew = 64320; e.nunhebrew = 1504; e.nvsquare = 13237; e.nwsquare = 13243; e.nyabengali = 2462; e.nyadeva = 2334; e.nyagujarati = 2718; e.nyagurmukhi = 2590; e.o = 111; e.oacute = 243; e.oangthai = 3629; e.obarred = 629; e.obarredcyrillic = 1257; e.obarreddieresiscyrillic = 1259; e.obengali = 2451; e.obopomofo = 12571; e.obreve = 335; e.ocandradeva = 2321; e.ocandragujarati = 2705; e.ocandravowelsigndeva = 2377; e.ocandravowelsigngujarati = 2761; e.ocaron = 466; e.ocircle = 9438; e.ocircumflex = 244; e.ocircumflexacute = 7889; e.ocircumflexdotbelow = 7897; e.ocircumflexgrave = 7891; e.ocircumflexhookabove = 7893; e.ocircumflextilde = 7895; e.ocyrillic = 1086; e.odblacute = 337; e.odblgrave = 525; e.odeva = 2323; e.odieresis = 246; e.odieresiscyrillic = 1255; e.odotbelow = 7885; e.oe = 339; e.oekorean = 12634; e.ogonek = 731; e.ogonekcmb = 808; e.ograve = 242; e.ogujarati = 2707; e.oharmenian = 1413; e.ohiragana = 12362; e.ohookabove = 7887; e.ohorn = 417; e.ohornacute = 7899; e.ohorndotbelow = 7907; e.ohorngrave = 7901; e.ohornhookabove = 7903; e.ohorntilde = 7905; e.ohungarumlaut = 337; e.oi = 419; e.oinvertedbreve = 527; e.okatakana = 12458; e.okatakanahalfwidth = 65397; e.okorean = 12631; e.olehebrew = 1451; e.omacron = 333; e.omacronacute = 7763; e.omacrongrave = 7761; e.omdeva = 2384; e.omega = 969; e.omega1 = 982; e.omegacyrillic = 1121; e.omegalatinclosed = 631; e.omegaroundcyrillic = 1147; e.omegatitlocyrillic = 1149; e.omegatonos = 974; e.omgujarati = 2768; e.omicron = 959; e.omicrontonos = 972; e.omonospace = 65359; e.one = 49; e.onearabic = 1633; e.onebengali = 2535; e.onecircle = 9312; e.onecircleinversesansserif = 10122; e.onedeva = 2407; e.onedotenleader = 8228; e.oneeighth = 8539; e.onefitted = 63196; e.onegujarati = 2791; e.onegurmukhi = 2663; e.onehackarabic = 1633; e.onehalf = 189; e.onehangzhou = 12321; e.oneideographicparen = 12832; e.oneinferior = 8321; e.onemonospace = 65297; e.onenumeratorbengali = 2548; e.oneoldstyle = 63281; e.oneparen = 9332; e.oneperiod = 9352; e.onepersian = 1777; e.onequarter = 188; e.oneroman = 8560; e.onesuperior = 185; e.onethai = 3665; e.onethird = 8531; e.oogonek = 491; e.oogonekmacron = 493; e.oogurmukhi = 2579; e.oomatragurmukhi = 2635; e.oopen = 596; e.oparen = 9386; e.openbullet = 9702; e.option = 8997; e.ordfeminine = 170; e.ordmasculine = 186; e.orthogonal = 8735; e.oshortdeva = 2322; e.oshortvowelsigndeva = 2378; e.oslash = 248; e.oslashacute = 511; e.osmallhiragana = 12361; e.osmallkatakana = 12457; e.osmallkatakanahalfwidth = 65387; e.ostrokeacute = 511; e.osuperior = 63216; e.otcyrillic = 1151; e.otilde = 245; e.otildeacute = 7757; e.otildedieresis = 7759; e.oubopomofo = 12577; e.overline = 8254; e.overlinecenterline = 65098; e.overlinecmb = 773; e.overlinedashed = 65097; e.overlinedblwavy = 65100; e.overlinewavy = 65099; e.overscore = 175; e.ovowelsignbengali = 2507; e.ovowelsigndeva = 2379; e.ovowelsigngujarati = 2763; e.p = 112; e.paampssquare = 13184; e.paasentosquare = 13099; e.pabengali = 2474; e.pacute = 7765; e.padeva = 2346; e.pagedown = 8671; e.pageup = 8670; e.pagujarati = 2730; e.pagurmukhi = 2602; e.pahiragana = 12401; e.paiyannoithai = 3631; e.pakatakana = 12497; e.palatalizationcyrilliccmb = 1156; e.palochkacyrillic = 1216; e.pansioskorean = 12671; e.paragraph = 182; e.parallel = 8741; e.parenleft = 40; e.parenleftaltonearabic = 64830; e.parenleftbt = 63725; e.parenleftex = 63724; e.parenleftinferior = 8333; e.parenleftmonospace = 65288; e.parenleftsmall = 65113; e.parenleftsuperior = 8317; e.parenlefttp = 63723; e.parenleftvertical = 65077; e.parenright = 41; e.parenrightaltonearabic = 64831; e.parenrightbt = 63736; e.parenrightex = 63735; e.parenrightinferior = 8334; e.parenrightmonospace = 65289; e.parenrightsmall = 65114; e.parenrightsuperior = 8318; e.parenrighttp = 63734; e.parenrightvertical = 65078; e.partialdiff = 8706; e.paseqhebrew = 1472; e.pashtahebrew = 1433; e.pasquare = 13225; e.patah = 1463; e.patah11 = 1463; e.patah1d = 1463; e.patah2a = 1463; e.patahhebrew = 1463; e.patahnarrowhebrew = 1463; e.patahquarterhebrew = 1463; e.patahwidehebrew = 1463; e.pazerhebrew = 1441; e.pbopomofo = 12550; e.pcircle = 9439; e.pdotaccent = 7767; e.pe = 1508; e.pecyrillic = 1087; e.pedagesh = 64324; e.pedageshhebrew = 64324; e.peezisquare = 13115; e.pefinaldageshhebrew = 64323; e.peharabic = 1662; e.peharmenian = 1402; e.pehebrew = 1508; e.pehfinalarabic = 64343; e.pehinitialarabic = 64344; e.pehiragana = 12410; e.pehmedialarabic = 64345; e.pekatakana = 12506; e.pemiddlehookcyrillic = 1191; e.perafehebrew = 64334; e.percent = 37; e.percentarabic = 1642; e.percentmonospace = 65285; e.percentsmall = 65130; e.period = 46; e.periodarmenian = 1417; e.periodcentered = 183; e.periodhalfwidth = 65377; e.periodinferior = 63207; e.periodmonospace = 65294; e.periodsmall = 65106; e.periodsuperior = 63208; e.perispomenigreekcmb = 834; e.perpendicular = 8869; e.perthousand = 8240; e.peseta = 8359; e.pfsquare = 13194; e.phabengali = 2475; e.phadeva = 2347; e.phagujarati = 2731; e.phagurmukhi = 2603; e.phi = 966; e.phi1 = 981; e.phieuphacirclekorean = 12922; e.phieuphaparenkorean = 12826; e.phieuphcirclekorean = 12908; e.phieuphkorean = 12621; e.phieuphparenkorean = 12812; e.philatin = 632; e.phinthuthai = 3642; e.phisymbolgreek = 981; e.phook = 421; e.phophanthai = 3614; e.phophungthai = 3612; e.phosamphaothai = 3616; e.pi = 960; e.pieupacirclekorean = 12915; e.pieupaparenkorean = 12819; e.pieupcieuckorean = 12662; e.pieupcirclekorean = 12901; e.pieupkiyeokkorean = 12658; e.pieupkorean = 12610; e.pieupparenkorean = 12805; e.pieupsioskiyeokkorean = 12660; e.pieupsioskorean = 12612; e.pieupsiostikeutkorean = 12661; e.pieupthieuthkorean = 12663; e.pieuptikeutkorean = 12659; e.pihiragana = 12404; e.pikatakana = 12500; e.pisymbolgreek = 982; e.piwrarmenian = 1411; e.planckover2pi = 8463; e.planckover2pi1 = 8463; e.plus = 43; e.plusbelowcmb = 799; e.pluscircle = 8853; e.plusminus = 177; e.plusmod = 726; e.plusmonospace = 65291; e.plussmall = 65122; e.plussuperior = 8314; e.pmonospace = 65360; e.pmsquare = 13272; e.pohiragana = 12413; e.pointingindexdownwhite = 9759; e.pointingindexleftwhite = 9756; e.pointingindexrightwhite = 9758; e.pointingindexupwhite = 9757; e.pokatakana = 12509; e.poplathai = 3611; e.postalmark = 12306; e.postalmarkface = 12320; e.pparen = 9387; e.precedes = 8826; e.prescription = 8478; e.primemod = 697; e.primereversed = 8245; e.product = 8719; e.projective = 8965; e.prolongedkana = 12540; e.propellor = 8984; e.propersubset = 8834; e.propersuperset = 8835; e.proportion = 8759; e.proportional = 8733; e.psi = 968; e.psicyrillic = 1137; e.psilipneumatacyrilliccmb = 1158; e.pssquare = 13232; e.puhiragana = 12407; e.pukatakana = 12503; e.pvsquare = 13236; e.pwsquare = 13242; e.q = 113; e.qadeva = 2392; e.qadmahebrew = 1448; e.qafarabic = 1602; e.qaffinalarabic = 65238; e.qafinitialarabic = 65239; e.qafmedialarabic = 65240; e.qamats = 1464; e.qamats10 = 1464; e.qamats1a = 1464; e.qamats1c = 1464; e.qamats27 = 1464; e.qamats29 = 1464; e.qamats33 = 1464; e.qamatsde = 1464; e.qamatshebrew = 1464; e.qamatsnarrowhebrew = 1464; e.qamatsqatanhebrew = 1464; e.qamatsqatannarrowhebrew = 1464; e.qamatsqatanquarterhebrew = 1464; e.qamatsqatanwidehebrew = 1464; e.qamatsquarterhebrew = 1464; e.qamatswidehebrew = 1464; e.qarneyparahebrew = 1439; e.qbopomofo = 12561; e.qcircle = 9440; e.qhook = 672; e.qmonospace = 65361; e.qof = 1511; e.qofdagesh = 64327; e.qofdageshhebrew = 64327; e.qofhebrew = 1511; e.qparen = 9388; e.quarternote = 9833; e.qubuts = 1467; e.qubuts18 = 1467; e.qubuts25 = 1467; e.qubuts31 = 1467; e.qubutshebrew = 1467; e.qubutsnarrowhebrew = 1467; e.qubutsquarterhebrew = 1467; e.qubutswidehebrew = 1467; e.question = 63; e.questionarabic = 1567; e.questionarmenian = 1374; e.questiondown = 191; e.questiondownsmall = 63423; e.questiongreek = 894; e.questionmonospace = 65311; e.questionsmall = 63295; e.quotedbl = 34; e.quotedblbase = 8222; e.quotedblleft = 8220; e.quotedblmonospace = 65282; e.quotedblprime = 12318; e.quotedblprimereversed = 12317; e.quotedblright = 8221; e.quoteleft = 8216; e.quoteleftreversed = 8219; e.quotereversed = 8219; e.quoteright = 8217; e.quoterightn = 329; e.quotesinglbase = 8218; e.quotesingle = 39; e.quotesinglemonospace = 65287; e.r = 114; e.raarmenian = 1404; e.rabengali = 2480; e.racute = 341; e.radeva = 2352; e.radical = 8730; e.radicalex = 63717; e.radoverssquare = 13230; e.radoverssquaredsquare = 13231; e.radsquare = 13229; e.rafe = 1471; e.rafehebrew = 1471; e.ragujarati = 2736; e.ragurmukhi = 2608; e.rahiragana = 12425; e.rakatakana = 12521; e.rakatakanahalfwidth = 65431; e.ralowerdiagonalbengali = 2545; e.ramiddlediagonalbengali = 2544; e.ramshorn = 612; e.ratio = 8758; e.rbopomofo = 12566; e.rcaron = 345; e.rcedilla = 343; e.rcircle = 9441; e.rcommaaccent = 343; e.rdblgrave = 529; e.rdotaccent = 7769; e.rdotbelow = 7771; e.rdotbelowmacron = 7773; e.referencemark = 8251; e.reflexsubset = 8838; e.reflexsuperset = 8839; e.registered = 174; e.registersans = 63720; e.registerserif = 63194; e.reharabic = 1585; e.reharmenian = 1408; e.rehfinalarabic = 65198; e.rehiragana = 12428; e.rekatakana = 12524; e.rekatakanahalfwidth = 65434; e.resh = 1512; e.reshdageshhebrew = 64328; e.reshhebrew = 1512; e.reversedtilde = 8765; e.reviahebrew = 1431; e.reviamugrashhebrew = 1431; e.revlogicalnot = 8976; e.rfishhook = 638; e.rfishhookreversed = 639; e.rhabengali = 2525; e.rhadeva = 2397; e.rho = 961; e.rhook = 637; e.rhookturned = 635; e.rhookturnedsuperior = 693; e.rhosymbolgreek = 1009; e.rhotichookmod = 734; e.rieulacirclekorean = 12913; e.rieulaparenkorean = 12817; e.rieulcirclekorean = 12899; e.rieulhieuhkorean = 12608; e.rieulkiyeokkorean = 12602; e.rieulkiyeoksioskorean = 12649; e.rieulkorean = 12601; e.rieulmieumkorean = 12603; e.rieulpansioskorean = 12652; e.rieulparenkorean = 12803; e.rieulphieuphkorean = 12607; e.rieulpieupkorean = 12604; e.rieulpieupsioskorean = 12651; e.rieulsioskorean = 12605; e.rieulthieuthkorean = 12606; e.rieultikeutkorean = 12650; e.rieulyeorinhieuhkorean = 12653; e.rightangle = 8735; e.righttackbelowcmb = 793; e.righttriangle = 8895; e.rihiragana = 12426; e.rikatakana = 12522; e.rikatakanahalfwidth = 65432; e.ring = 730; e.ringbelowcmb = 805; e.ringcmb = 778; e.ringhalfleft = 703; e.ringhalfleftarmenian = 1369; e.ringhalfleftbelowcmb = 796; e.ringhalfleftcentered = 723; e.ringhalfright = 702; e.ringhalfrightbelowcmb = 825; e.ringhalfrightcentered = 722; e.rinvertedbreve = 531; e.rittorusquare = 13137; e.rlinebelow = 7775; e.rlongleg = 636; e.rlonglegturned = 634; e.rmonospace = 65362; e.rohiragana = 12429; e.rokatakana = 12525; e.rokatakanahalfwidth = 65435; e.roruathai = 3619; e.rparen = 9389; e.rrabengali = 2524; e.rradeva = 2353; e.rragurmukhi = 2652; e.rreharabic = 1681; e.rrehfinalarabic = 64397; e.rrvocalicbengali = 2528; e.rrvocalicdeva = 2400; e.rrvocalicgujarati = 2784; e.rrvocalicvowelsignbengali = 2500; e.rrvocalicvowelsigndeva = 2372; e.rrvocalicvowelsigngujarati = 2756; e.rsuperior = 63217; e.rtblock = 9616; e.rturned = 633; e.rturnedsuperior = 692; e.ruhiragana = 12427; e.rukatakana = 12523; e.rukatakanahalfwidth = 65433; e.rupeemarkbengali = 2546; e.rupeesignbengali = 2547; e.rupiah = 63197; e.ruthai = 3620; e.rvocalicbengali = 2443; e.rvocalicdeva = 2315; e.rvocalicgujarati = 2699; e.rvocalicvowelsignbengali = 2499; e.rvocalicvowelsigndeva = 2371; e.rvocalicvowelsigngujarati = 2755; e.s = 115; e.sabengali = 2488; e.sacute = 347; e.sacutedotaccent = 7781; e.sadarabic = 1589; e.sadeva = 2360; e.sadfinalarabic = 65210; e.sadinitialarabic = 65211; e.sadmedialarabic = 65212; e.sagujarati = 2744; e.sagurmukhi = 2616; e.sahiragana = 12373; e.sakatakana = 12469; e.sakatakanahalfwidth = 65403; e.sallallahoualayhewasallamarabic = 65018; e.samekh = 1505; e.samekhdagesh = 64321; e.samekhdageshhebrew = 64321; e.samekhhebrew = 1505; e.saraaathai = 3634; e.saraaethai = 3649; e.saraaimaimalaithai = 3652; e.saraaimaimuanthai = 3651; e.saraamthai = 3635; e.saraathai = 3632; e.saraethai = 3648; e.saraiileftthai = 63622; e.saraiithai = 3637; e.saraileftthai = 63621; e.saraithai = 3636; e.saraothai = 3650; e.saraueeleftthai = 63624; e.saraueethai = 3639; e.saraueleftthai = 63623; e.sarauethai = 3638; e.sarauthai = 3640; e.sarauuthai = 3641; e.sbopomofo = 12569; e.scaron = 353; e.scarondotaccent = 7783; e.scedilla = 351; e.schwa = 601; e.schwacyrillic = 1241; e.schwadieresiscyrillic = 1243; e.schwahook = 602; e.scircle = 9442; e.scircumflex = 349; e.scommaaccent = 537; e.sdotaccent = 7777; e.sdotbelow = 7779; e.sdotbelowdotaccent = 7785; e.seagullbelowcmb = 828; e.second = 8243; e.secondtonechinese = 714; e.section = 167; e.seenarabic = 1587; e.seenfinalarabic = 65202; e.seeninitialarabic = 65203; e.seenmedialarabic = 65204; e.segol = 1462; e.segol13 = 1462; e.segol1f = 1462; e.segol2c = 1462; e.segolhebrew = 1462; e.segolnarrowhebrew = 1462; e.segolquarterhebrew = 1462; e.segoltahebrew = 1426; e.segolwidehebrew = 1462; e.seharmenian = 1405; e.sehiragana = 12379; e.sekatakana = 12475; e.sekatakanahalfwidth = 65406; e.semicolon = 59; e.semicolonarabic = 1563; e.semicolonmonospace = 65307; e.semicolonsmall = 65108; e.semivoicedmarkkana = 12444; e.semivoicedmarkkanahalfwidth = 65439; e.sentisquare = 13090; e.sentosquare = 13091; e.seven = 55; e.sevenarabic = 1639; e.sevenbengali = 2541; e.sevencircle = 9318; e.sevencircleinversesansserif = 10128; e.sevendeva = 2413; e.seveneighths = 8542; e.sevengujarati = 2797; e.sevengurmukhi = 2669; e.sevenhackarabic = 1639; e.sevenhangzhou = 12327; e.sevenideographicparen = 12838; e.seveninferior = 8327; e.sevenmonospace = 65303; e.sevenoldstyle = 63287; e.sevenparen = 9338; e.sevenperiod = 9358; e.sevenpersian = 1783; e.sevenroman = 8566; e.sevensuperior = 8311; e.seventeencircle = 9328; e.seventeenparen = 9348; e.seventeenperiod = 9368; e.seventhai = 3671; e.sfthyphen = 173; e.shaarmenian = 1399; e.shabengali = 2486; e.shacyrillic = 1096; e.shaddaarabic = 1617; e.shaddadammaarabic = 64609; e.shaddadammatanarabic = 64606; e.shaddafathaarabic = 64608; e.shaddakasraarabic = 64610; e.shaddakasratanarabic = 64607; e.shade = 9618; e.shadedark = 9619; e.shadelight = 9617; e.shademedium = 9618; e.shadeva = 2358; e.shagujarati = 2742; e.shagurmukhi = 2614; e.shalshelethebrew = 1427; e.shbopomofo = 12565; e.shchacyrillic = 1097; e.sheenarabic = 1588; e.sheenfinalarabic = 65206; e.sheeninitialarabic = 65207; e.sheenmedialarabic = 65208; e.sheicoptic = 995; e.sheqel = 8362; e.sheqelhebrew = 8362; e.sheva = 1456; e.sheva115 = 1456; e.sheva15 = 1456; e.sheva22 = 1456; e.sheva2e = 1456; e.shevahebrew = 1456; e.shevanarrowhebrew = 1456; e.shevaquarterhebrew = 1456; e.shevawidehebrew = 1456; e.shhacyrillic = 1211; e.shimacoptic = 1005; e.shin = 1513; e.shindagesh = 64329; e.shindageshhebrew = 64329; e.shindageshshindot = 64300; e.shindageshshindothebrew = 64300; e.shindageshsindot = 64301; e.shindageshsindothebrew = 64301; e.shindothebrew = 1473; e.shinhebrew = 1513; e.shinshindot = 64298; e.shinshindothebrew = 64298; e.shinsindot = 64299; e.shinsindothebrew = 64299; e.shook = 642; e.sigma = 963; e.sigma1 = 962; e.sigmafinal = 962; e.sigmalunatesymbolgreek = 1010; e.sihiragana = 12375; e.sikatakana = 12471; e.sikatakanahalfwidth = 65404; e.siluqhebrew = 1469; e.siluqlefthebrew = 1469; e.similar = 8764; e.sindothebrew = 1474; e.siosacirclekorean = 12916; e.siosaparenkorean = 12820; e.sioscieuckorean = 12670; e.sioscirclekorean = 12902; e.sioskiyeokkorean = 12666; e.sioskorean = 12613; e.siosnieunkorean = 12667; e.siosparenkorean = 12806; e.siospieupkorean = 12669; e.siostikeutkorean = 12668; e.six = 54; e.sixarabic = 1638; e.sixbengali = 2540; e.sixcircle = 9317; e.sixcircleinversesansserif = 10127; e.sixdeva = 2412; e.sixgujarati = 2796; e.sixgurmukhi = 2668; e.sixhackarabic = 1638; e.sixhangzhou = 12326; e.sixideographicparen = 12837; e.sixinferior = 8326; e.sixmonospace = 65302; e.sixoldstyle = 63286; e.sixparen = 9337; e.sixperiod = 9357; e.sixpersian = 1782; e.sixroman = 8565; e.sixsuperior = 8310; e.sixteencircle = 9327; e.sixteencurrencydenominatorbengali = 2553; e.sixteenparen = 9347; e.sixteenperiod = 9367; e.sixthai = 3670; e.slash = 47; e.slashmonospace = 65295; e.slong = 383; e.slongdotaccent = 7835; e.smileface = 9786; e.smonospace = 65363; e.sofpasuqhebrew = 1475; e.softhyphen = 173; e.softsigncyrillic = 1100; e.sohiragana = 12381; e.sokatakana = 12477; e.sokatakanahalfwidth = 65407; e.soliduslongoverlaycmb = 824; e.solidusshortoverlaycmb = 823; e.sorusithai = 3625; e.sosalathai = 3624; e.sosothai = 3595; e.sosuathai = 3626; e.space = 32; e.spacehackarabic = 32; e.spade = 9824; e.spadesuitblack = 9824; e.spadesuitwhite = 9828; e.sparen = 9390; e.squarebelowcmb = 827; e.squarecc = 13252; e.squarecm = 13213; e.squarediagonalcrosshatchfill = 9641; e.squarehorizontalfill = 9636; e.squarekg = 13199; e.squarekm = 13214; e.squarekmcapital = 13262; e.squareln = 13265; e.squarelog = 13266; e.squaremg = 13198; e.squaremil = 13269; e.squaremm = 13212; e.squaremsquared = 13217; e.squareorthogonalcrosshatchfill = 9638; e.squareupperlefttolowerrightfill = 9639; e.squareupperrighttolowerleftfill = 9640; e.squareverticalfill = 9637; e.squarewhitewithsmallblack = 9635; e.srsquare = 13275; e.ssabengali = 2487; e.ssadeva = 2359; e.ssagujarati = 2743; e.ssangcieuckorean = 12617; e.ssanghieuhkorean = 12677; e.ssangieungkorean = 12672; e.ssangkiyeokkorean = 12594; e.ssangnieunkorean = 12645; e.ssangpieupkorean = 12611; e.ssangsioskorean = 12614; e.ssangtikeutkorean = 12600; e.ssuperior = 63218; e.sterling = 163; e.sterlingmonospace = 65505; e.strokelongoverlaycmb = 822; e.strokeshortoverlaycmb = 821; e.subset = 8834; e.subsetnotequal = 8842; e.subsetorequal = 8838; e.succeeds = 8827; e.suchthat = 8715; e.suhiragana = 12377; e.sukatakana = 12473; e.sukatakanahalfwidth = 65405; e.sukunarabic = 1618; e.summation = 8721; e.sun = 9788; e.superset = 8835; e.supersetnotequal = 8843; e.supersetorequal = 8839; e.svsquare = 13276; e.syouwaerasquare = 13180; e.t = 116; e.tabengali = 2468; e.tackdown = 8868; e.tackleft = 8867; e.tadeva = 2340; e.tagujarati = 2724; e.tagurmukhi = 2596; e.taharabic = 1591; e.tahfinalarabic = 65218; e.tahinitialarabic = 65219; e.tahiragana = 12383; e.tahmedialarabic = 65220; e.taisyouerasquare = 13181; e.takatakana = 12479; e.takatakanahalfwidth = 65408; e.tatweelarabic = 1600; e.tau = 964; e.tav = 1514; e.tavdages = 64330; e.tavdagesh = 64330; e.tavdageshhebrew = 64330; e.tavhebrew = 1514; e.tbar = 359; e.tbopomofo = 12554; e.tcaron = 357; e.tccurl = 680; e.tcedilla = 355; e.tcheharabic = 1670; e.tchehfinalarabic = 64379; e.tchehinitialarabic = 64380; e.tchehmedialarabic = 64381; e.tcircle = 9443; e.tcircumflexbelow = 7793; e.tcommaaccent = 355; e.tdieresis = 7831; e.tdotaccent = 7787; e.tdotbelow = 7789; e.tecyrillic = 1090; e.tedescendercyrillic = 1197; e.teharabic = 1578; e.tehfinalarabic = 65174; e.tehhahinitialarabic = 64674; e.tehhahisolatedarabic = 64524; e.tehinitialarabic = 65175; e.tehiragana = 12390; e.tehjeeminitialarabic = 64673; e.tehjeemisolatedarabic = 64523; e.tehmarbutaarabic = 1577; e.tehmarbutafinalarabic = 65172; e.tehmedialarabic = 65176; e.tehmeeminitialarabic = 64676; e.tehmeemisolatedarabic = 64526; e.tehnoonfinalarabic = 64627; e.tekatakana = 12486; e.tekatakanahalfwidth = 65411; e.telephone = 8481; e.telephoneblack = 9742; e.telishagedolahebrew = 1440; e.telishaqetanahebrew = 1449; e.tencircle = 9321; e.tenideographicparen = 12841; e.tenparen = 9341; e.tenperiod = 9361; e.tenroman = 8569; e.tesh = 679; e.tet = 1496; e.tetdagesh = 64312; e.tetdageshhebrew = 64312; e.tethebrew = 1496; e.tetsecyrillic = 1205; e.tevirhebrew = 1435; e.tevirlefthebrew = 1435; e.thabengali = 2469; e.thadeva = 2341; e.thagujarati = 2725; e.thagurmukhi = 2597; e.thalarabic = 1584; e.thalfinalarabic = 65196; e.thanthakhatlowleftthai = 63640; e.thanthakhatlowrightthai = 63639; e.thanthakhatthai = 3660; e.thanthakhatupperleftthai = 63638; e.theharabic = 1579; e.thehfinalarabic = 65178; e.thehinitialarabic = 65179; e.thehmedialarabic = 65180; e.thereexists = 8707; e.therefore = 8756; e.theta = 952; e.theta1 = 977; e.thetasymbolgreek = 977; e.thieuthacirclekorean = 12921; e.thieuthaparenkorean = 12825; e.thieuthcirclekorean = 12907; e.thieuthkorean = 12620; e.thieuthparenkorean = 12811; e.thirteencircle = 9324; e.thirteenparen = 9344; e.thirteenperiod = 9364; e.thonangmonthothai = 3601; e.thook = 429; e.thophuthaothai = 3602; e.thorn = 254; e.thothahanthai = 3607; e.thothanthai = 3600; e.thothongthai = 3608; e.thothungthai = 3606; e.thousandcyrillic = 1154; e.thousandsseparatorarabic = 1644; e.thousandsseparatorpersian = 1644; e.three = 51; e.threearabic = 1635; e.threebengali = 2537; e.threecircle = 9314; e.threecircleinversesansserif = 10124; e.threedeva = 2409; e.threeeighths = 8540; e.threegujarati = 2793; e.threegurmukhi = 2665; e.threehackarabic = 1635; e.threehangzhou = 12323; e.threeideographicparen = 12834; e.threeinferior = 8323; e.threemonospace = 65299; e.threenumeratorbengali = 2550; e.threeoldstyle = 63283; e.threeparen = 9334; e.threeperiod = 9354; e.threepersian = 1779; e.threequarters = 190; e.threequartersemdash = 63198; e.threeroman = 8562; e.threesuperior = 179; e.threethai = 3667; e.thzsquare = 13204; e.tihiragana = 12385; e.tikatakana = 12481; e.tikatakanahalfwidth = 65409; e.tikeutacirclekorean = 12912; e.tikeutaparenkorean = 12816; e.tikeutcirclekorean = 12898; e.tikeutkorean = 12599; e.tikeutparenkorean = 12802; e.tilde = 732; e.tildebelowcmb = 816; e.tildecmb = 771; e.tildecomb = 771; e.tildedoublecmb = 864; e.tildeoperator = 8764; e.tildeoverlaycmb = 820; e.tildeverticalcmb = 830; e.timescircle = 8855; e.tipehahebrew = 1430; e.tipehalefthebrew = 1430; e.tippigurmukhi = 2672; e.titlocyrilliccmb = 1155; e.tiwnarmenian = 1407; e.tlinebelow = 7791; e.tmonospace = 65364; e.toarmenian = 1385; e.tohiragana = 12392; e.tokatakana = 12488; e.tokatakanahalfwidth = 65412; e.tonebarextrahighmod = 741; e.tonebarextralowmod = 745; e.tonebarhighmod = 742; e.tonebarlowmod = 744; e.tonebarmidmod = 743; e.tonefive = 445; e.tonesix = 389; e.tonetwo = 424; e.tonos = 900; e.tonsquare = 13095; e.topatakthai = 3599; e.tortoiseshellbracketleft = 12308; e.tortoiseshellbracketleftsmall = 65117; e.tortoiseshellbracketleftvertical = 65081; e.tortoiseshellbracketright = 12309; e.tortoiseshellbracketrightsmall = 65118; e.tortoiseshellbracketrightvertical = 65082; e.totaothai = 3605; e.tpalatalhook = 427; e.tparen = 9391; e.trademark = 8482; e.trademarksans = 63722; e.trademarkserif = 63195; e.tretroflexhook = 648; e.triagdn = 9660; e.triaglf = 9668; e.triagrt = 9658; e.triagup = 9650; e.ts = 678; e.tsadi = 1510; e.tsadidagesh = 64326; e.tsadidageshhebrew = 64326; e.tsadihebrew = 1510; e.tsecyrillic = 1094; e.tsere = 1461; e.tsere12 = 1461; e.tsere1e = 1461; e.tsere2b = 1461; e.tserehebrew = 1461; e.tserenarrowhebrew = 1461; e.tserequarterhebrew = 1461; e.tserewidehebrew = 1461; e.tshecyrillic = 1115; e.tsuperior = 63219; e.ttabengali = 2463; e.ttadeva = 2335; e.ttagujarati = 2719; e.ttagurmukhi = 2591; e.tteharabic = 1657; e.ttehfinalarabic = 64359; e.ttehinitialarabic = 64360; e.ttehmedialarabic = 64361; e.tthabengali = 2464; e.tthadeva = 2336; e.tthagujarati = 2720; e.tthagurmukhi = 2592; e.tturned = 647; e.tuhiragana = 12388; e.tukatakana = 12484; e.tukatakanahalfwidth = 65410; e.tusmallhiragana = 12387; e.tusmallkatakana = 12483; e.tusmallkatakanahalfwidth = 65391; e.twelvecircle = 9323; e.twelveparen = 9343; e.twelveperiod = 9363; e.twelveroman = 8571; e.twentycircle = 9331; e.twentyhangzhou = 21316; e.twentyparen = 9351; e.twentyperiod = 9371; e.two = 50; e.twoarabic = 1634; e.twobengali = 2536; e.twocircle = 9313; e.twocircleinversesansserif = 10123; e.twodeva = 2408; e.twodotenleader = 8229; e.twodotleader = 8229; e.twodotleadervertical = 65072; e.twogujarati = 2792; e.twogurmukhi = 2664; e.twohackarabic = 1634; e.twohangzhou = 12322; e.twoideographicparen = 12833; e.twoinferior = 8322; e.twomonospace = 65298; e.twonumeratorbengali = 2549; e.twooldstyle = 63282; e.twoparen = 9333; e.twoperiod = 9353; e.twopersian = 1778; e.tworoman = 8561; e.twostroke = 443; e.twosuperior = 178; e.twothai = 3666; e.twothirds = 8532; e.u = 117; e.uacute = 250; e.ubar = 649; e.ubengali = 2441; e.ubopomofo = 12584; e.ubreve = 365; e.ucaron = 468; e.ucircle = 9444; e.ucircumflex = 251; e.ucircumflexbelow = 7799; e.ucyrillic = 1091; e.udattadeva = 2385; e.udblacute = 369; e.udblgrave = 533; e.udeva = 2313; e.udieresis = 252; e.udieresisacute = 472; e.udieresisbelow = 7795; e.udieresiscaron = 474; e.udieresiscyrillic = 1265; e.udieresisgrave = 476; e.udieresismacron = 470; e.udotbelow = 7909; e.ugrave = 249; e.ugujarati = 2697; e.ugurmukhi = 2569; e.uhiragana = 12358; e.uhookabove = 7911; e.uhorn = 432; e.uhornacute = 7913; e.uhorndotbelow = 7921; e.uhorngrave = 7915; e.uhornhookabove = 7917; e.uhorntilde = 7919; e.uhungarumlaut = 369; e.uhungarumlautcyrillic = 1267; e.uinvertedbreve = 535; e.ukatakana = 12454; e.ukatakanahalfwidth = 65395; e.ukcyrillic = 1145; e.ukorean = 12636; e.umacron = 363; e.umacroncyrillic = 1263; e.umacrondieresis = 7803; e.umatragurmukhi = 2625; e.umonospace = 65365; e.underscore = 95; e.underscoredbl = 8215; e.underscoremonospace = 65343; e.underscorevertical = 65075; e.underscorewavy = 65103; e.union = 8746; e.universal = 8704; e.uogonek = 371; e.uparen = 9392; e.upblock = 9600; e.upperdothebrew = 1476; e.upsilon = 965; e.upsilondieresis = 971; e.upsilondieresistonos = 944; e.upsilonlatin = 650; e.upsilontonos = 973; e.uptackbelowcmb = 797; e.uptackmod = 724; e.uragurmukhi = 2675; e.uring = 367; e.ushortcyrillic = 1118; e.usmallhiragana = 12357; e.usmallkatakana = 12453; e.usmallkatakanahalfwidth = 65385; e.ustraightcyrillic = 1199; e.ustraightstrokecyrillic = 1201; e.utilde = 361; e.utildeacute = 7801; e.utildebelow = 7797; e.uubengali = 2442; e.uudeva = 2314; e.uugujarati = 2698; e.uugurmukhi = 2570; e.uumatragurmukhi = 2626; e.uuvowelsignbengali = 2498; e.uuvowelsigndeva = 2370; e.uuvowelsigngujarati = 2754; e.uvowelsignbengali = 2497; e.uvowelsigndeva = 2369; e.uvowelsigngujarati = 2753; e.v = 118; e.vadeva = 2357; e.vagujarati = 2741; e.vagurmukhi = 2613; e.vakatakana = 12535; e.vav = 1493; e.vavdagesh = 64309; e.vavdagesh65 = 64309; e.vavdageshhebrew = 64309; e.vavhebrew = 1493; e.vavholam = 64331; e.vavholamhebrew = 64331; e.vavvavhebrew = 1520; e.vavyodhebrew = 1521; e.vcircle = 9445; e.vdotbelow = 7807; e.vecyrillic = 1074; e.veharabic = 1700; e.vehfinalarabic = 64363; e.vehinitialarabic = 64364; e.vehmedialarabic = 64365; e.vekatakana = 12537; e.venus = 9792; e.verticalbar = 124; e.verticallineabovecmb = 781; e.verticallinebelowcmb = 809; e.verticallinelowmod = 716; e.verticallinemod = 712; e.vewarmenian = 1406; e.vhook = 651; e.vikatakana = 12536; e.viramabengali = 2509; e.viramadeva = 2381; e.viramagujarati = 2765; e.visargabengali = 2435; e.visargadeva = 2307; e.visargagujarati = 2691; e.vmonospace = 65366; e.voarmenian = 1400; e.voicediterationhiragana = 12446; e.voicediterationkatakana = 12542; e.voicedmarkkana = 12443; e.voicedmarkkanahalfwidth = 65438; e.vokatakana = 12538; e.vparen = 9393; e.vtilde = 7805; e.vturned = 652; e.vuhiragana = 12436; e.vukatakana = 12532; e.w = 119; e.wacute = 7811; e.waekorean = 12633; e.wahiragana = 12431; e.wakatakana = 12527; e.wakatakanahalfwidth = 65436; e.wakorean = 12632; e.wasmallhiragana = 12430; e.wasmallkatakana = 12526; e.wattosquare = 13143; e.wavedash = 12316; e.wavyunderscorevertical = 65076; e.wawarabic = 1608; e.wawfinalarabic = 65262; e.wawhamzaabovearabic = 1572; e.wawhamzaabovefinalarabic = 65158; e.wbsquare = 13277; e.wcircle = 9446; e.wcircumflex = 373; e.wdieresis = 7813; e.wdotaccent = 7815; e.wdotbelow = 7817; e.wehiragana = 12433; e.weierstrass = 8472; e.wekatakana = 12529; e.wekorean = 12638; e.weokorean = 12637; e.wgrave = 7809; e.whitebullet = 9702; e.whitecircle = 9675; e.whitecircleinverse = 9689; e.whitecornerbracketleft = 12302; e.whitecornerbracketleftvertical = 65091; e.whitecornerbracketright = 12303; e.whitecornerbracketrightvertical = 65092; e.whitediamond = 9671; e.whitediamondcontainingblacksmalldiamond = 9672; e.whitedownpointingsmalltriangle = 9663; e.whitedownpointingtriangle = 9661; e.whiteleftpointingsmalltriangle = 9667; e.whiteleftpointingtriangle = 9665; e.whitelenticularbracketleft = 12310; e.whitelenticularbracketright = 12311; e.whiterightpointingsmalltriangle = 9657; e.whiterightpointingtriangle = 9655; e.whitesmallsquare = 9643; e.whitesmilingface = 9786; e.whitesquare = 9633; e.whitestar = 9734; e.whitetelephone = 9743; e.whitetortoiseshellbracketleft = 12312; e.whitetortoiseshellbracketright = 12313; e.whiteuppointingsmalltriangle = 9653; e.whiteuppointingtriangle = 9651; e.wihiragana = 12432; e.wikatakana = 12528; e.wikorean = 12639; e.wmonospace = 65367; e.wohiragana = 12434; e.wokatakana = 12530; e.wokatakanahalfwidth = 65382; e.won = 8361; e.wonmonospace = 65510; e.wowaenthai = 3623; e.wparen = 9394; e.wring = 7832; e.wsuperior = 695; e.wturned = 653; e.wynn = 447; e.x = 120; e.xabovecmb = 829; e.xbopomofo = 12562; e.xcircle = 9447; e.xdieresis = 7821; e.xdotaccent = 7819; e.xeharmenian = 1389; e.xi = 958; e.xmonospace = 65368; e.xparen = 9395; e.xsuperior = 739; e.y = 121; e.yaadosquare = 13134; e.yabengali = 2479; e.yacute = 253; e.yadeva = 2351; e.yaekorean = 12626; e.yagujarati = 2735; e.yagurmukhi = 2607; e.yahiragana = 12420; e.yakatakana = 12516; e.yakatakanahalfwidth = 65428; e.yakorean = 12625; e.yamakkanthai = 3662; e.yasmallhiragana = 12419; e.yasmallkatakana = 12515; e.yasmallkatakanahalfwidth = 65388; e.yatcyrillic = 1123; e.ycircle = 9448; e.ycircumflex = 375; e.ydieresis = 255; e.ydotaccent = 7823; e.ydotbelow = 7925; e.yeharabic = 1610; e.yehbarreearabic = 1746; e.yehbarreefinalarabic = 64431; e.yehfinalarabic = 65266; e.yehhamzaabovearabic = 1574; e.yehhamzaabovefinalarabic = 65162; e.yehhamzaaboveinitialarabic = 65163; e.yehhamzaabovemedialarabic = 65164; e.yehinitialarabic = 65267; e.yehmedialarabic = 65268; e.yehmeeminitialarabic = 64733; e.yehmeemisolatedarabic = 64600; e.yehnoonfinalarabic = 64660; e.yehthreedotsbelowarabic = 1745; e.yekorean = 12630; e.yen = 165; e.yenmonospace = 65509; e.yeokorean = 12629; e.yeorinhieuhkorean = 12678; e.yerahbenyomohebrew = 1450; e.yerahbenyomolefthebrew = 1450; e.yericyrillic = 1099; e.yerudieresiscyrillic = 1273; e.yesieungkorean = 12673; e.yesieungpansioskorean = 12675; e.yesieungsioskorean = 12674; e.yetivhebrew = 1434; e.ygrave = 7923; e.yhook = 436; e.yhookabove = 7927; e.yiarmenian = 1397; e.yicyrillic = 1111; e.yikorean = 12642; e.yinyang = 9775; e.yiwnarmenian = 1410; e.ymonospace = 65369; e.yod = 1497; e.yoddagesh = 64313; e.yoddageshhebrew = 64313; e.yodhebrew = 1497; e.yodyodhebrew = 1522; e.yodyodpatahhebrew = 64287; e.yohiragana = 12424; e.yoikorean = 12681; e.yokatakana = 12520; e.yokatakanahalfwidth = 65430; e.yokorean = 12635; e.yosmallhiragana = 12423; e.yosmallkatakana = 12519; e.yosmallkatakanahalfwidth = 65390; e.yotgreek = 1011; e.yoyaekorean = 12680; e.yoyakorean = 12679; e.yoyakthai = 3618; e.yoyingthai = 3597; e.yparen = 9396; e.ypogegrammeni = 890; e.ypogegrammenigreekcmb = 837; e.yr = 422; e.yring = 7833; e.ysuperior = 696; e.ytilde = 7929; e.yturned = 654; e.yuhiragana = 12422; e.yuikorean = 12684; e.yukatakana = 12518; e.yukatakanahalfwidth = 65429; e.yukorean = 12640; e.yusbigcyrillic = 1131; e.yusbigiotifiedcyrillic = 1133; e.yuslittlecyrillic = 1127; e.yuslittleiotifiedcyrillic = 1129; e.yusmallhiragana = 12421; e.yusmallkatakana = 12517; e.yusmallkatakanahalfwidth = 65389; e.yuyekorean = 12683; e.yuyeokorean = 12682; e.yyabengali = 2527; e.yyadeva = 2399; e.z = 122; e.zaarmenian = 1382; e.zacute = 378; e.zadeva = 2395; e.zagurmukhi = 2651; e.zaharabic = 1592; e.zahfinalarabic = 65222; e.zahinitialarabic = 65223; e.zahiragana = 12374; e.zahmedialarabic = 65224; e.zainarabic = 1586; e.zainfinalarabic = 65200; e.zakatakana = 12470; e.zaqefgadolhebrew = 1429; e.zaqefqatanhebrew = 1428; e.zarqahebrew = 1432; e.zayin = 1494; e.zayindagesh = 64310; e.zayindageshhebrew = 64310; e.zayinhebrew = 1494; e.zbopomofo = 12567; e.zcaron = 382; e.zcircle = 9449; e.zcircumflex = 7825; e.zcurl = 657; e.zdot = 380; e.zdotaccent = 380; e.zdotbelow = 7827; e.zecyrillic = 1079; e.zedescendercyrillic = 1177; e.zedieresiscyrillic = 1247; e.zehiragana = 12380; e.zekatakana = 12476; e.zero = 48; e.zeroarabic = 1632; e.zerobengali = 2534; e.zerodeva = 2406; e.zerogujarati = 2790; e.zerogurmukhi = 2662; e.zerohackarabic = 1632; e.zeroinferior = 8320; e.zeromonospace = 65296; e.zerooldstyle = 63280; e.zeropersian = 1776; e.zerosuperior = 8304; e.zerothai = 3664; e.zerowidthjoiner = 65279; e.zerowidthnonjoiner = 8204; e.zerowidthspace = 8203; e.zeta = 950; e.zhbopomofo = 12563; e.zhearmenian = 1386; e.zhebrevecyrillic = 1218; e.zhecyrillic = 1078; e.zhedescendercyrillic = 1175; e.zhedieresiscyrillic = 1245; e.zihiragana = 12376; e.zikatakana = 12472; e.zinorhebrew = 1454; e.zlinebelow = 7829; e.zmonospace = 65370; e.zohiragana = 12382; e.zokatakana = 12478; e.zparen = 9397; e.zretroflexhook = 656; e.zstroke = 438; e.zuhiragana = 12378; e.zukatakana = 12474; e['.notdef'] = 0; e.angbracketleftbig = 9001; e.angbracketleftBig = 9001; e.angbracketleftbigg = 9001; e.angbracketleftBigg = 9001; e.angbracketrightBig = 9002; e.angbracketrightbig = 9002; e.angbracketrightBigg = 9002; e.angbracketrightbigg = 9002; e.arrowhookleft = 8618; e.arrowhookright = 8617; e.arrowlefttophalf = 8636; e.arrowleftbothalf = 8637; e.arrownortheast = 8599; e.arrownorthwest = 8598; e.arrowrighttophalf = 8640; e.arrowrightbothalf = 8641; e.arrowsoutheast = 8600; e.arrowsouthwest = 8601; e.backslashbig = 8726; e.backslashBig = 8726; e.backslashBigg = 8726; e.backslashbigg = 8726; e.bardbl = 8214; e.bracehtipdownleft = 65079; e.bracehtipdownright = 65079; e.bracehtipupleft = 65080; e.bracehtipupright = 65080; e.braceleftBig = 123; e.braceleftbig = 123; e.braceleftbigg = 123; e.braceleftBigg = 123; e.bracerightBig = 125; e.bracerightbig = 125; e.bracerightbigg = 125; e.bracerightBigg = 125; e.bracketleftbig = 91; e.bracketleftBig = 91; e.bracketleftbigg = 91; e.bracketleftBigg = 91; e.bracketrightBig = 93; e.bracketrightbig = 93; e.bracketrightbigg = 93; e.bracketrightBigg = 93; e.ceilingleftbig = 8968; e.ceilingleftBig = 8968; e.ceilingleftBigg = 8968; e.ceilingleftbigg = 8968; e.ceilingrightbig = 8969; e.ceilingrightBig = 8969; e.ceilingrightbigg = 8969; e.ceilingrightBigg = 8969; e.circledotdisplay = 8857; e.circledottext = 8857; e.circlemultiplydisplay = 8855; e.circlemultiplytext = 8855; e.circleplusdisplay = 8853; e.circleplustext = 8853; e.contintegraldisplay = 8750; e.contintegraltext = 8750; e.coproductdisplay = 8720; e.coproducttext = 8720; e.floorleftBig = 8970; e.floorleftbig = 8970; e.floorleftbigg = 8970; e.floorleftBigg = 8970; e.floorrightbig = 8971; e.floorrightBig = 8971; e.floorrightBigg = 8971; e.floorrightbigg = 8971; e.hatwide = 770; e.hatwider = 770; e.hatwidest = 770; e.intercal = 7488; e.integraldisplay = 8747; e.integraltext = 8747; e.intersectiondisplay = 8898; e.intersectiontext = 8898; e.logicalanddisplay = 8743; e.logicalandtext = 8743; e.logicalordisplay = 8744; e.logicalortext = 8744; e.parenleftBig = 40; e.parenleftbig = 40; e.parenleftBigg = 40; e.parenleftbigg = 40; e.parenrightBig = 41; e.parenrightbig = 41; e.parenrightBigg = 41; e.parenrightbigg = 41; e.prime = 8242; e.productdisplay = 8719; e.producttext = 8719; e.radicalbig = 8730; e.radicalBig = 8730; e.radicalBigg = 8730; e.radicalbigg = 8730; e.radicalbt = 8730; e.radicaltp = 8730; e.radicalvertex = 8730; e.slashbig = 47; e.slashBig = 47; e.slashBigg = 47; e.slashbigg = 47; e.summationdisplay = 8721; e.summationtext = 8721; e.tildewide = 732; e.tildewider = 732; e.tildewidest = 732; e.uniondisplay = 8899; e.unionmultidisplay = 8846; e.unionmultitext = 8846; e.unionsqdisplay = 8852; e.unionsqtext = 8852; e.uniontext = 8899; e.vextenddouble = 8741; e.vextendsingle = 8739; }), Mi = getLookupTableFactory(function (e) { e.space = 32; e.a1 = 9985; e.a2 = 9986; e.a202 = 9987; e.a3 = 9988; e.a4 = 9742; e.a5 = 9990; e.a119 = 9991; e.a118 = 9992; e.a117 = 9993; e.a11 = 9755; e.a12 = 9758; e.a13 = 9996; e.a14 = 9997; e.a15 = 9998; e.a16 = 9999; e.a105 = 1e4; e.a17 = 10001; e.a18 = 10002; e.a19 = 10003; e.a20 = 10004; e.a21 = 10005; e.a22 = 10006; e.a23 = 10007; e.a24 = 10008; e.a25 = 10009; e.a26 = 10010; e.a27 = 10011; e.a28 = 10012; e.a6 = 10013; e.a7 = 10014; e.a8 = 10015; e.a9 = 10016; e.a10 = 10017; e.a29 = 10018; e.a30 = 10019; e.a31 = 10020; e.a32 = 10021; e.a33 = 10022; e.a34 = 10023; e.a35 = 9733; e.a36 = 10025; e.a37 = 10026; e.a38 = 10027; e.a39 = 10028; e.a40 = 10029; e.a41 = 10030; e.a42 = 10031; e.a43 = 10032; e.a44 = 10033; e.a45 = 10034; e.a46 = 10035; e.a47 = 10036; e.a48 = 10037; e.a49 = 10038; e.a50 = 10039; e.a51 = 10040; e.a52 = 10041; e.a53 = 10042; e.a54 = 10043; e.a55 = 10044; e.a56 = 10045; e.a57 = 10046; e.a58 = 10047; e.a59 = 10048; e.a60 = 10049; e.a61 = 10050; e.a62 = 10051; e.a63 = 10052; e.a64 = 10053; e.a65 = 10054; e.a66 = 10055; e.a67 = 10056; e.a68 = 10057; e.a69 = 10058; e.a70 = 10059; e.a71 = 9679; e.a72 = 10061; e.a73 = 9632; e.a74 = 10063; e.a203 = 10064; e.a75 = 10065; e.a204 = 10066; e.a76 = 9650; e.a77 = 9660; e.a78 = 9670; e.a79 = 10070; e.a81 = 9687; e.a82 = 10072; e.a83 = 10073; e.a84 = 10074; e.a97 = 10075; e.a98 = 10076; e.a99 = 10077; e.a100 = 10078; e.a101 = 10081; e.a102 = 10082; e.a103 = 10083; e.a104 = 10084; e.a106 = 10085; e.a107 = 10086; e.a108 = 10087; e.a112 = 9827; e.a111 = 9830; e.a110 = 9829; e.a109 = 9824; e.a120 = 9312; e.a121 = 9313; e.a122 = 9314; e.a123 = 9315; e.a124 = 9316; e.a125 = 9317; e.a126 = 9318; e.a127 = 9319; e.a128 = 9320; e.a129 = 9321; e.a130 = 10102; e.a131 = 10103; e.a132 = 10104; e.a133 = 10105; e.a134 = 10106; e.a135 = 10107; e.a136 = 10108; e.a137 = 10109; e.a138 = 10110; e.a139 = 10111; e.a140 = 10112; e.a141 = 10113; e.a142 = 10114; e.a143 = 10115; e.a144 = 10116; e.a145 = 10117; e.a146 = 10118; e.a147 = 10119; e.a148 = 10120; e.a149 = 10121; e.a150 = 10122; e.a151 = 10123; e.a152 = 10124; e.a153 = 10125; e.a154 = 10126; e.a155 = 10127; e.a156 = 10128; e.a157 = 10129; e.a158 = 10130; e.a159 = 10131; e.a160 = 10132; e.a161 = 8594; e.a163 = 8596; e.a164 = 8597; e.a196 = 10136; e.a165 = 10137; e.a192 = 10138; e.a166 = 10139; e.a167 = 10140; e.a168 = 10141; e.a169 = 10142; e.a170 = 10143; e.a171 = 10144; e.a172 = 10145; e.a173 = 10146; e.a162 = 10147; e.a174 = 10148; e.a175 = 10149; e.a176 = 10150; e.a177 = 10151; e.a178 = 10152; e.a179 = 10153; e.a193 = 10154; e.a180 = 10155; e.a199 = 10156; e.a181 = 10157; e.a200 = 10158; e.a182 = 10159; e.a201 = 10161; e.a183 = 10162; e.a184 = 10163; e.a197 = 10164; e.a185 = 10165; e.a194 = 10166; e.a198 = 10167; e.a186 = 10168; e.a195 = 10169; e.a187 = 10170; e.a188 = 10171; e.a189 = 10172; e.a190 = 10173; e.a191 = 10174; e.a89 = 10088; e.a90 = 10089; e.a93 = 10090; e.a94 = 10091; e.a91 = 10092; e.a92 = 10093; e.a205 = 10094; e.a85 = 10095; e.a206 = 10096; e.a86 = 10097; e.a87 = 10098; e.a88 = 10099; e.a95 = 10100; e.a96 = 10101; e['.notdef'] = 0; }), Hi = getLookupTableFactory(function (e) { e[63721] = 169; e[63193] = 169; e[63720] = 174; e[63194] = 174; e[63722] = 8482; e[63195] = 8482; e[63729] = 9127; e[63730] = 9128; e[63731] = 9129; e[63740] = 9131; e[63741] = 9132; e[63742] = 9133; e[63726] = 9121; e[63727] = 9122; e[63728] = 9123; e[63737] = 9124; e[63738] = 9125; e[63739] = 9126; e[63723] = 9115; e[63724] = 9116; e[63725] = 9117; e[63734] = 9118; e[63735] = 9119; e[63736] = 9120; }); function getUnicodeForGlyph(e, t) { let i = t[e]; if (void 0 !== i) return i; if (!e) return -1; if ('u' === e[0]) { const t = e.length; let a; if (7 === t && 'n' === e[1] && 'i' === e[2]) a = e.substring(3); else { if (!(t >= 5 && t <= 7)) return -1; a = e.substring(1); } if (a === a.toUpperCase()) { i = parseInt(a, 16); if (i >= 0) return i; } } return -1; } const Ji = [ [0, 127], [128, 255], [256, 383], [384, 591], [592, 687, 7424, 7551, 7552, 7615], [688, 767, 42752, 42783], [768, 879, 7616, 7679], [880, 1023], [11392, 11519], [1024, 1279, 1280, 1327, 11744, 11775, 42560, 42655], [1328, 1423], [1424, 1535], [42240, 42559], [1536, 1791, 1872, 1919], [1984, 2047], [2304, 2431], [2432, 2559], [2560, 2687], [2688, 2815], [2816, 2943], [2944, 3071], [3072, 3199], [3200, 3327], [3328, 3455], [3584, 3711], [3712, 3839], [4256, 4351, 11520, 11567], [6912, 7039], [4352, 4607], [7680, 7935, 11360, 11391, 42784, 43007], [7936, 8191], [8192, 8303, 11776, 11903], [8304, 8351], [8352, 8399], [8400, 8447], [8448, 8527], [8528, 8591], [8592, 8703, 10224, 10239, 10496, 10623, 11008, 11263], [8704, 8959, 10752, 11007, 10176, 10223, 10624, 10751], [8960, 9215], [9216, 9279], [9280, 9311], [9312, 9471], [9472, 9599], [9600, 9631], [9632, 9727], [9728, 9983], [9984, 10175], [12288, 12351], [12352, 12447], [12448, 12543, 12784, 12799], [12544, 12591, 12704, 12735], [12592, 12687], [43072, 43135], [12800, 13055], [13056, 13311], [44032, 55215], [55296, 57343], [67840, 67871], [ 19968, 40959, 11904, 12031, 12032, 12255, 12272, 12287, 13312, 19903, 131072, 173791, 12688, 12703, ], [57344, 63743], [12736, 12783, 63744, 64255, 194560, 195103], [64256, 64335], [64336, 65023], [65056, 65071], [65040, 65055], [65104, 65135], [65136, 65279], [65280, 65519], [65520, 65535], [3840, 4095], [1792, 1871], [1920, 1983], [3456, 3583], [4096, 4255], [4608, 4991, 4992, 5023, 11648, 11743], [5024, 5119], [5120, 5759], [5760, 5791], [5792, 5887], [6016, 6143], [6144, 6319], [10240, 10495], [40960, 42127], [5888, 5919, 5920, 5951, 5952, 5983, 5984, 6015], [66304, 66351], [66352, 66383], [66560, 66639], [118784, 119039, 119040, 119295, 119296, 119375], [119808, 120831], [1044480, 1048573], [65024, 65039, 917760, 917999], [917504, 917631], [6400, 6479], [6480, 6527], [6528, 6623], [6656, 6687], [11264, 11359], [11568, 11647], [19904, 19967], [43008, 43055], [65536, 65663, 65664, 65791, 65792, 65855], [65856, 65935], [66432, 66463], [66464, 66527], [66640, 66687], [66688, 66735], [67584, 67647], [68096, 68191], [119552, 119647], [73728, 74751, 74752, 74879], [119648, 119679], [7040, 7103], [7168, 7247], [7248, 7295], [43136, 43231], [43264, 43311], [43312, 43359], [43520, 43615], [65936, 65999], [66e3, 66047], [66208, 66271, 66176, 66207, 67872, 67903], [127024, 127135, 126976, 127023], ]; function getUnicodeRangeFor(e, t = -1) { if (-1 !== t) { const i = Ji[t]; for (let a = 0, r = i.length; a < r; a += 2) if (e >= i[a] && e <= i[a + 1]) return t; } for (let t = 0, i = Ji.length; t < i; t++) { const i = Ji[t]; for (let a = 0, r = i.length; a < r; a += 2) if (e >= i[a] && e <= i[a + 1]) return t; } return -1; } const Yi = new RegExp('^(\\s)|(\\p{Mn})|(\\p{Cf})$', 'u'), vi = new Map(); const Ti = !0, Ki = 1, qi = 2, Oi = 4, Pi = 32, Wi = [ '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth', 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior', 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla', 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat', ]; function recoverGlyphName(e, t) { if (void 0 !== t[e]) return e; const i = getUnicodeForGlyph(e, t); if (-1 !== i) for (const e in t) if (t[e] === i) return e; info('Unable to recover a standard glyph name for: ' + e); return e; } function type1FontGlyphMapping(e, t, i) { const a = Object.create(null); let r, s, n; const o = !!(e.flags & Oi); if (e.isInternalFont) { n = t; for (s = 0; s < n.length; s++) { r = i.indexOf(n[s]); a[s] = r >= 0 ? r : 0; } } else if (e.baseEncodingName) { n = getEncoding(e.baseEncodingName); for (s = 0; s < n.length; s++) { r = i.indexOf(n[s]); a[s] = r >= 0 ? r : 0; } } else if (o) for (s in t) a[s] = t[s]; else { n = mi; for (s = 0; s < n.length; s++) { r = i.indexOf(n[s]); a[s] = r >= 0 ? r : 0; } } const g = e.differences; let c; if (g) for (s in g) { const e = g[s]; r = i.indexOf(e); if (-1 === r) { c || (c = xi()); const t = recoverGlyphName(e, c); t !== e && (r = i.indexOf(t)); } a[s] = r >= 0 ? r : 0; } return a; } function normalizeFontName(e) { return e.replaceAll(/[,_]/g, '-').replaceAll(/\s/g, ''); } const ji = getLookupTableFactory(function (e) { e['Times-Roman'] = 'Times-Roman'; e.Helvetica = 'Helvetica'; e.Courier = 'Courier'; e.Symbol = 'Symbol'; e['Times-Bold'] = 'Times-Bold'; e['Helvetica-Bold'] = 'Helvetica-Bold'; e['Courier-Bold'] = 'Courier-Bold'; e.ZapfDingbats = 'ZapfDingbats'; e['Times-Italic'] = 'Times-Italic'; e['Helvetica-Oblique'] = 'Helvetica-Oblique'; e['Courier-Oblique'] = 'Courier-Oblique'; e['Times-BoldItalic'] = 'Times-BoldItalic'; e['Helvetica-BoldOblique'] = 'Helvetica-BoldOblique'; e['Courier-BoldOblique'] = 'Courier-BoldOblique'; e.ArialNarrow = 'Helvetica'; e['ArialNarrow-Bold'] = 'Helvetica-Bold'; e['ArialNarrow-BoldItalic'] = 'Helvetica-BoldOblique'; e['ArialNarrow-Italic'] = 'Helvetica-Oblique'; e.ArialBlack = 'Helvetica'; e['ArialBlack-Bold'] = 'Helvetica-Bold'; e['ArialBlack-BoldItalic'] = 'Helvetica-BoldOblique'; e['ArialBlack-Italic'] = 'Helvetica-Oblique'; e['Arial-Black'] = 'Helvetica'; e['Arial-Black-Bold'] = 'Helvetica-Bold'; e['Arial-Black-BoldItalic'] = 'Helvetica-BoldOblique'; e['Arial-Black-Italic'] = 'Helvetica-Oblique'; e.Arial = 'Helvetica'; e['Arial-Bold'] = 'Helvetica-Bold'; e['Arial-BoldItalic'] = 'Helvetica-BoldOblique'; e['Arial-Italic'] = 'Helvetica-Oblique'; e.ArialMT = 'Helvetica'; e['Arial-BoldItalicMT'] = 'Helvetica-BoldOblique'; e['Arial-BoldMT'] = 'Helvetica-Bold'; e['Arial-ItalicMT'] = 'Helvetica-Oblique'; e['Arial-BoldItalicMT-BoldItalic'] = 'Helvetica-BoldOblique'; e['Arial-BoldMT-Bold'] = 'Helvetica-Bold'; e['Arial-ItalicMT-Italic'] = 'Helvetica-Oblique'; e.ArialUnicodeMS = 'Helvetica'; e['ArialUnicodeMS-Bold'] = 'Helvetica-Bold'; e['ArialUnicodeMS-BoldItalic'] = 'Helvetica-BoldOblique'; e['ArialUnicodeMS-Italic'] = 'Helvetica-Oblique'; e['Courier-BoldItalic'] = 'Courier-BoldOblique'; e['Courier-Italic'] = 'Courier-Oblique'; e.CourierNew = 'Courier'; e['CourierNew-Bold'] = 'Courier-Bold'; e['CourierNew-BoldItalic'] = 'Courier-BoldOblique'; e['CourierNew-Italic'] = 'Courier-Oblique'; e['CourierNewPS-BoldItalicMT'] = 'Courier-BoldOblique'; e['CourierNewPS-BoldMT'] = 'Courier-Bold'; e['CourierNewPS-ItalicMT'] = 'Courier-Oblique'; e.CourierNewPSMT = 'Courier'; e['Helvetica-BoldItalic'] = 'Helvetica-BoldOblique'; e['Helvetica-Italic'] = 'Helvetica-Oblique'; e['Symbol-Bold'] = 'Symbol'; e['Symbol-BoldItalic'] = 'Symbol'; e['Symbol-Italic'] = 'Symbol'; e.TimesNewRoman = 'Times-Roman'; e['TimesNewRoman-Bold'] = 'Times-Bold'; e['TimesNewRoman-BoldItalic'] = 'Times-BoldItalic'; e['TimesNewRoman-Italic'] = 'Times-Italic'; e.TimesNewRomanPS = 'Times-Roman'; e['TimesNewRomanPS-Bold'] = 'Times-Bold'; e['TimesNewRomanPS-BoldItalic'] = 'Times-BoldItalic'; e['TimesNewRomanPS-BoldItalicMT'] = 'Times-BoldItalic'; e['TimesNewRomanPS-BoldMT'] = 'Times-Bold'; e['TimesNewRomanPS-Italic'] = 'Times-Italic'; e['TimesNewRomanPS-ItalicMT'] = 'Times-Italic'; e.TimesNewRomanPSMT = 'Times-Roman'; e['TimesNewRomanPSMT-Bold'] = 'Times-Bold'; e['TimesNewRomanPSMT-BoldItalic'] = 'Times-BoldItalic'; e['TimesNewRomanPSMT-Italic'] = 'Times-Italic'; }), Xi = getLookupTableFactory(function (e) { e.Courier = 'FoxitFixed.pfb'; e['Courier-Bold'] = 'FoxitFixedBold.pfb'; e['Courier-BoldOblique'] = 'FoxitFixedBoldItalic.pfb'; e['Courier-Oblique'] = 'FoxitFixedItalic.pfb'; e.Helvetica = 'LiberationSans-Regular.ttf'; e['Helvetica-Bold'] = 'LiberationSans-Bold.ttf'; e['Helvetica-BoldOblique'] = 'LiberationSans-BoldItalic.ttf'; e['Helvetica-Oblique'] = 'LiberationSans-Italic.ttf'; e['Times-Roman'] = 'FoxitSerif.pfb'; e['Times-Bold'] = 'FoxitSerifBold.pfb'; e['Times-BoldItalic'] = 'FoxitSerifBoldItalic.pfb'; e['Times-Italic'] = 'FoxitSerifItalic.pfb'; e.Symbol = 'FoxitSymbol.pfb'; e.ZapfDingbats = 'FoxitDingbats.pfb'; e['LiberationSans-Regular'] = 'LiberationSans-Regular.ttf'; e['LiberationSans-Bold'] = 'LiberationSans-Bold.ttf'; e['LiberationSans-Italic'] = 'LiberationSans-Italic.ttf'; e['LiberationSans-BoldItalic'] = 'LiberationSans-BoldItalic.ttf'; }), Zi = getLookupTableFactory(function (e) { e.Calibri = 'Helvetica'; e['Calibri-Bold'] = 'Helvetica-Bold'; e['Calibri-BoldItalic'] = 'Helvetica-BoldOblique'; e['Calibri-Italic'] = 'Helvetica-Oblique'; e.CenturyGothic = 'Helvetica'; e['CenturyGothic-Bold'] = 'Helvetica-Bold'; e['CenturyGothic-BoldItalic'] = 'Helvetica-BoldOblique'; e['CenturyGothic-Italic'] = 'Helvetica-Oblique'; e.ComicSansMS = 'Comic Sans MS'; e['ComicSansMS-Bold'] = 'Comic Sans MS-Bold'; e['ComicSansMS-BoldItalic'] = 'Comic Sans MS-BoldItalic'; e['ComicSansMS-Italic'] = 'Comic Sans MS-Italic'; e.Impact = 'Helvetica'; e['ItcSymbol-Bold'] = 'Helvetica-Bold'; e['ItcSymbol-BoldItalic'] = 'Helvetica-BoldOblique'; e['ItcSymbol-Book'] = 'Helvetica'; e['ItcSymbol-BookItalic'] = 'Helvetica-Oblique'; e['ItcSymbol-Medium'] = 'Helvetica'; e['ItcSymbol-MediumItalic'] = 'Helvetica-Oblique'; e.LucidaConsole = 'Courier'; e['LucidaConsole-Bold'] = 'Courier-Bold'; e['LucidaConsole-BoldItalic'] = 'Courier-BoldOblique'; e['LucidaConsole-Italic'] = 'Courier-Oblique'; e['LucidaSans-Demi'] = 'Helvetica-Bold'; e['MS-Gothic'] = 'MS Gothic'; e['MS-Gothic-Bold'] = 'MS Gothic-Bold'; e['MS-Gothic-BoldItalic'] = 'MS Gothic-BoldItalic'; e['MS-Gothic-Italic'] = 'MS Gothic-Italic'; e['MS-Mincho'] = 'MS Mincho'; e['MS-Mincho-Bold'] = 'MS Mincho-Bold'; e['MS-Mincho-BoldItalic'] = 'MS Mincho-BoldItalic'; e['MS-Mincho-Italic'] = 'MS Mincho-Italic'; e['MS-PGothic'] = 'MS PGothic'; e['MS-PGothic-Bold'] = 'MS PGothic-Bold'; e['MS-PGothic-BoldItalic'] = 'MS PGothic-BoldItalic'; e['MS-PGothic-Italic'] = 'MS PGothic-Italic'; e['MS-PMincho'] = 'MS PMincho'; e['MS-PMincho-Bold'] = 'MS PMincho-Bold'; e['MS-PMincho-BoldItalic'] = 'MS PMincho-BoldItalic'; e['MS-PMincho-Italic'] = 'MS PMincho-Italic'; e.NuptialScript = 'Times-Italic'; e.SegoeUISymbol = 'Helvetica'; }), Vi = getLookupTableFactory(function (e) { e['Adobe Jenson'] = !0; e['Adobe Text'] = !0; e.Albertus = !0; e.Aldus = !0; e.Alexandria = !0; e.Algerian = !0; e['American Typewriter'] = !0; e.Antiqua = !0; e.Apex = !0; e.Arno = !0; e.Aster = !0; e.Aurora = !0; e.Baskerville = !0; e.Bell = !0; e.Bembo = !0; e['Bembo Schoolbook'] = !0; e.Benguiat = !0; e['Berkeley Old Style'] = !0; e['Bernhard Modern'] = !0; e['Berthold City'] = !0; e.Bodoni = !0; e['Bauer Bodoni'] = !0; e['Book Antiqua'] = !0; e.Bookman = !0; e['Bordeaux Roman'] = !0; e['Californian FB'] = !0; e.Calisto = !0; e.Calvert = !0; e.Capitals = !0; e.Cambria = !0; e.Cartier = !0; e.Caslon = !0; e.Catull = !0; e.Centaur = !0; e['Century Old Style'] = !0; e['Century Schoolbook'] = !0; e.Chaparral = !0; e['Charis SIL'] = !0; e.Cheltenham = !0; e['Cholla Slab'] = !0; e.Clarendon = !0; e.Clearface = !0; e.Cochin = !0; e.Colonna = !0; e['Computer Modern'] = !0; e['Concrete Roman'] = !0; e.Constantia = !0; e['Cooper Black'] = !0; e.Corona = !0; e.Ecotype = !0; e.Egyptienne = !0; e.Elephant = !0; e.Excelsior = !0; e.Fairfield = !0; e['FF Scala'] = !0; e.Folkard = !0; e.Footlight = !0; e.FreeSerif = !0; e['Friz Quadrata'] = !0; e.Garamond = !0; e.Gentium = !0; e.Georgia = !0; e.Gloucester = !0; e['Goudy Old Style'] = !0; e['Goudy Schoolbook'] = !0; e['Goudy Pro Font'] = !0; e.Granjon = !0; e['Guardian Egyptian'] = !0; e.Heather = !0; e.Hercules = !0; e['High Tower Text'] = !0; e.Hiroshige = !0; e['Hoefler Text'] = !0; e['Humana Serif'] = !0; e.Imprint = !0; e['Ionic No. 5'] = !0; e.Janson = !0; e.Joanna = !0; e.Korinna = !0; e.Lexicon = !0; e.LiberationSerif = !0; e['Liberation Serif'] = !0; e['Linux Libertine'] = !0; e.Literaturnaya = !0; e.Lucida = !0; e['Lucida Bright'] = !0; e.Melior = !0; e.Memphis = !0; e.Miller = !0; e.Minion = !0; e.Modern = !0; e['Mona Lisa'] = !0; e['Mrs Eaves'] = !0; e['MS Serif'] = !0; e['Museo Slab'] = !0; e['New York'] = !0; e['Nimbus Roman'] = !0; e['NPS Rawlinson Roadway'] = !0; e.NuptialScript = !0; e.Palatino = !0; e.Perpetua = !0; e.Plantin = !0; e['Plantin Schoolbook'] = !0; e.Playbill = !0; e['Poor Richard'] = !0; e['Rawlinson Roadway'] = !0; e.Renault = !0; e.Requiem = !0; e.Rockwell = !0; e.Roman = !0; e['Rotis Serif'] = !0; e.Sabon = !0; e.Scala = !0; e.Seagull = !0; e.Sistina = !0; e.Souvenir = !0; e.STIX = !0; e['Stone Informal'] = !0; e['Stone Serif'] = !0; e.Sylfaen = !0; e.Times = !0; e.Trajan = !0; e['Trinité'] = !0; e['Trump Mediaeval'] = !0; e.Utopia = !0; e['Vale Type'] = !0; e['Bitstream Vera'] = !0; e['Vera Serif'] = !0; e.Versailles = !0; e.Wanted = !0; e.Weiss = !0; e['Wide Latin'] = !0; e.Windsor = !0; e.XITS = !0; }), _i = getLookupTableFactory(function (e) { e.Dingbats = !0; e.Symbol = !0; e.ZapfDingbats = !0; e.Wingdings = !0; e['Wingdings-Bold'] = !0; e['Wingdings-Regular'] = !0; }), zi = getLookupTableFactory(function (e) { e[2] = 10; e[3] = 32; e[4] = 33; e[5] = 34; e[6] = 35; e[7] = 36; e[8] = 37; e[9] = 38; e[10] = 39; e[11] = 40; e[12] = 41; e[13] = 42; e[14] = 43; e[15] = 44; e[16] = 45; e[17] = 46; e[18] = 47; e[19] = 48; e[20] = 49; e[21] = 50; e[22] = 51; e[23] = 52; e[24] = 53; e[25] = 54; e[26] = 55; e[27] = 56; e[28] = 57; e[29] = 58; e[30] = 894; e[31] = 60; e[32] = 61; e[33] = 62; e[34] = 63; e[35] = 64; e[36] = 65; e[37] = 66; e[38] = 67; e[39] = 68; e[40] = 69; e[41] = 70; e[42] = 71; e[43] = 72; e[44] = 73; e[45] = 74; e[46] = 75; e[47] = 76; e[48] = 77; e[49] = 78; e[50] = 79; e[51] = 80; e[52] = 81; e[53] = 82; e[54] = 83; e[55] = 84; e[56] = 85; e[57] = 86; e[58] = 87; e[59] = 88; e[60] = 89; e[61] = 90; e[62] = 91; e[63] = 92; e[64] = 93; e[65] = 94; e[66] = 95; e[67] = 96; e[68] = 97; e[69] = 98; e[70] = 99; e[71] = 100; e[72] = 101; e[73] = 102; e[74] = 103; e[75] = 104; e[76] = 105; e[77] = 106; e[78] = 107; e[79] = 108; e[80] = 109; e[81] = 110; e[82] = 111; e[83] = 112; e[84] = 113; e[85] = 114; e[86] = 115; e[87] = 116; e[88] = 117; e[89] = 118; e[90] = 119; e[91] = 120; e[92] = 121; e[93] = 122; e[94] = 123; e[95] = 124; e[96] = 125; e[97] = 126; e[98] = 196; e[99] = 197; e[100] = 199; e[101] = 201; e[102] = 209; e[103] = 214; e[104] = 220; e[105] = 225; e[106] = 224; e[107] = 226; e[108] = 228; e[109] = 227; e[110] = 229; e[111] = 231; e[112] = 233; e[113] = 232; e[114] = 234; e[115] = 235; e[116] = 237; e[117] = 236; e[118] = 238; e[119] = 239; e[120] = 241; e[121] = 243; e[122] = 242; e[123] = 244; e[124] = 246; e[125] = 245; e[126] = 250; e[127] = 249; e[128] = 251; e[129] = 252; e[130] = 8224; e[131] = 176; e[132] = 162; e[133] = 163; e[134] = 167; e[135] = 8226; e[136] = 182; e[137] = 223; e[138] = 174; e[139] = 169; e[140] = 8482; e[141] = 180; e[142] = 168; e[143] = 8800; e[144] = 198; e[145] = 216; e[146] = 8734; e[147] = 177; e[148] = 8804; e[149] = 8805; e[150] = 165; e[151] = 181; e[152] = 8706; e[153] = 8721; e[154] = 8719; e[156] = 8747; e[157] = 170; e[158] = 186; e[159] = 8486; e[160] = 230; e[161] = 248; e[162] = 191; e[163] = 161; e[164] = 172; e[165] = 8730; e[166] = 402; e[167] = 8776; e[168] = 8710; e[169] = 171; e[170] = 187; e[171] = 8230; e[179] = 8220; e[180] = 8221; e[181] = 8216; e[182] = 8217; e[200] = 193; e[203] = 205; e[207] = 211; e[210] = 218; e[223] = 711; e[224] = 321; e[225] = 322; e[226] = 352; e[227] = 353; e[228] = 381; e[229] = 382; e[233] = 221; e[234] = 253; e[252] = 263; e[253] = 268; e[254] = 269; e[258] = 258; e[260] = 260; e[261] = 261; e[265] = 280; e[266] = 281; e[267] = 282; e[268] = 283; e[269] = 313; e[275] = 323; e[276] = 324; e[278] = 328; e[283] = 344; e[284] = 345; e[285] = 346; e[286] = 347; e[292] = 367; e[295] = 377; e[296] = 378; e[298] = 380; e[305] = 963; e[306] = 964; e[307] = 966; e[308] = 8215; e[309] = 8252; e[310] = 8319; e[311] = 8359; e[312] = 8592; e[313] = 8593; e[337] = 9552; e[493] = 1039; e[494] = 1040; e[672] = 1488; e[673] = 1489; e[674] = 1490; e[675] = 1491; e[676] = 1492; e[677] = 1493; e[678] = 1494; e[679] = 1495; e[680] = 1496; e[681] = 1497; e[682] = 1498; e[683] = 1499; e[684] = 1500; e[685] = 1501; e[686] = 1502; e[687] = 1503; e[688] = 1504; e[689] = 1505; e[690] = 1506; e[691] = 1507; e[692] = 1508; e[693] = 1509; e[694] = 1510; e[695] = 1511; e[696] = 1512; e[697] = 1513; e[698] = 1514; e[705] = 1524; e[706] = 8362; e[710] = 64288; e[711] = 64298; e[759] = 1617; e[761] = 1776; e[763] = 1778; e[775] = 1652; e[777] = 1764; e[778] = 1780; e[779] = 1781; e[780] = 1782; e[782] = 771; e[783] = 64726; e[786] = 8363; e[788] = 8532; e[790] = 768; e[791] = 769; e[792] = 768; e[795] = 803; e[797] = 64336; e[798] = 64337; e[799] = 64342; e[800] = 64343; e[801] = 64344; e[802] = 64345; e[803] = 64362; e[804] = 64363; e[805] = 64364; e[2424] = 7821; e[2425] = 7822; e[2426] = 7823; e[2427] = 7824; e[2428] = 7825; e[2429] = 7826; e[2430] = 7827; e[2433] = 7682; e[2678] = 8045; e[2679] = 8046; e[2830] = 1552; e[2838] = 686; e[2840] = 751; e[2842] = 753; e[2843] = 754; e[2844] = 755; e[2846] = 757; e[2856] = 767; e[2857] = 848; e[2858] = 849; e[2862] = 853; e[2863] = 854; e[2864] = 855; e[2865] = 861; e[2866] = 862; e[2906] = 7460; e[2908] = 7462; e[2909] = 7463; e[2910] = 7464; e[2912] = 7466; e[2913] = 7467; e[2914] = 7468; e[2916] = 7470; e[2917] = 7471; e[2918] = 7472; e[2920] = 7474; e[2921] = 7475; e[2922] = 7476; e[2924] = 7478; e[2925] = 7479; e[2926] = 7480; e[2928] = 7482; e[2929] = 7483; e[2930] = 7484; e[2932] = 7486; e[2933] = 7487; e[2934] = 7488; e[2936] = 7490; e[2937] = 7491; e[2938] = 7492; e[2940] = 7494; e[2941] = 7495; e[2942] = 7496; e[2944] = 7498; e[2946] = 7500; e[2948] = 7502; e[2950] = 7504; e[2951] = 7505; e[2952] = 7506; e[2954] = 7508; e[2955] = 7509; e[2956] = 7510; e[2958] = 7512; e[2959] = 7513; e[2960] = 7514; e[2962] = 7516; e[2963] = 7517; e[2964] = 7518; e[2966] = 7520; e[2967] = 7521; e[2968] = 7522; e[2970] = 7524; e[2971] = 7525; e[2972] = 7526; e[2974] = 7528; e[2975] = 7529; e[2976] = 7530; e[2978] = 1537; e[2979] = 1538; e[2980] = 1539; e[2982] = 1549; e[2983] = 1551; e[2984] = 1552; e[2986] = 1554; e[2987] = 1555; e[2988] = 1556; e[2990] = 1623; e[2991] = 1624; e[2995] = 1775; e[2999] = 1791; e[3002] = 64290; e[3003] = 64291; e[3004] = 64292; e[3006] = 64294; e[3007] = 64295; e[3008] = 64296; e[3011] = 1900; e[3014] = 8223; e[3015] = 8244; e[3017] = 7532; e[3018] = 7533; e[3019] = 7534; e[3075] = 7590; e[3076] = 7591; e[3079] = 7594; e[3080] = 7595; e[3083] = 7598; e[3084] = 7599; e[3087] = 7602; e[3088] = 7603; e[3091] = 7606; e[3092] = 7607; e[3095] = 7610; e[3096] = 7611; e[3099] = 7614; e[3100] = 7615; e[3103] = 7618; e[3104] = 7619; e[3107] = 8337; e[3108] = 8338; e[3116] = 1884; e[3119] = 1885; e[3120] = 1885; e[3123] = 1886; e[3124] = 1886; e[3127] = 1887; e[3128] = 1887; e[3131] = 1888; e[3132] = 1888; e[3135] = 1889; e[3136] = 1889; e[3139] = 1890; e[3140] = 1890; e[3143] = 1891; e[3144] = 1891; e[3147] = 1892; e[3148] = 1892; e[3153] = 580; e[3154] = 581; e[3157] = 584; e[3158] = 585; e[3161] = 588; e[3162] = 589; e[3165] = 891; e[3166] = 892; e[3169] = 1274; e[3170] = 1275; e[3173] = 1278; e[3174] = 1279; e[3181] = 7622; e[3182] = 7623; e[3282] = 11799; e[3316] = 578; e[3379] = 42785; e[3393] = 1159; e[3416] = 8377; }), $i = getLookupTableFactory(function (e) { e[227] = 322; e[264] = 261; e[291] = 346; }), Aa = getLookupTableFactory(function (e) { e[1] = 32; e[4] = 65; e[5] = 192; e[6] = 193; e[9] = 196; e[17] = 66; e[18] = 67; e[21] = 268; e[24] = 68; e[28] = 69; e[29] = 200; e[30] = 201; e[32] = 282; e[38] = 70; e[39] = 71; e[44] = 72; e[47] = 73; e[48] = 204; e[49] = 205; e[58] = 74; e[60] = 75; e[62] = 76; e[68] = 77; e[69] = 78; e[75] = 79; e[76] = 210; e[80] = 214; e[87] = 80; e[89] = 81; e[90] = 82; e[92] = 344; e[94] = 83; e[97] = 352; e[100] = 84; e[104] = 85; e[109] = 220; e[115] = 86; e[116] = 87; e[121] = 88; e[122] = 89; e[124] = 221; e[127] = 90; e[129] = 381; e[258] = 97; e[259] = 224; e[260] = 225; e[263] = 228; e[268] = 261; e[271] = 98; e[272] = 99; e[273] = 263; e[275] = 269; e[282] = 100; e[286] = 101; e[287] = 232; e[288] = 233; e[290] = 283; e[295] = 281; e[296] = 102; e[336] = 103; e[346] = 104; e[349] = 105; e[350] = 236; e[351] = 237; e[361] = 106; e[364] = 107; e[367] = 108; e[371] = 322; e[373] = 109; e[374] = 110; e[381] = 111; e[382] = 242; e[383] = 243; e[386] = 246; e[393] = 112; e[395] = 113; e[396] = 114; e[398] = 345; e[400] = 115; e[401] = 347; e[403] = 353; e[410] = 116; e[437] = 117; e[442] = 252; e[448] = 118; e[449] = 119; e[454] = 120; e[455] = 121; e[457] = 253; e[460] = 122; e[462] = 382; e[463] = 380; e[853] = 44; e[855] = 58; e[856] = 46; e[876] = 47; e[878] = 45; e[882] = 45; e[894] = 40; e[895] = 41; e[896] = 91; e[897] = 93; e[923] = 64; e[1004] = 48; e[1005] = 49; e[1006] = 50; e[1007] = 51; e[1008] = 52; e[1009] = 53; e[1010] = 54; e[1011] = 55; e[1012] = 56; e[1013] = 57; e[1081] = 37; e[1085] = 43; e[1086] = 45; }); function getStandardFontName(e) { const t = normalizeFontName(e); return ji()[t]; } function isKnownFontName(e) { const t = normalizeFontName(e); return !!(ji()[t] || Zi()[t] || Vi()[t] || _i()[t]); } class ToUnicodeMap { constructor(e = []) { this._map = e; } get length() { return this._map.length; } forEach(e) { for (const t in this._map) e(t, this._map[t].charCodeAt(0)); } has(e) { return void 0 !== this._map[e]; } get(e) { return this._map[e]; } charCodeOf(e) { const t = this._map; if (t.length <= 65536) return t.indexOf(e); for (const i in t) if (t[i] === e) return 0 | i; return -1; } amend(e) { for (const t in e) this._map[t] = e[t]; } } class IdentityToUnicodeMap { constructor(e, t) { this.firstChar = e; this.lastChar = t; } get length() { return this.lastChar + 1 - this.firstChar; } forEach(e) { for (let t = this.firstChar, i = this.lastChar; t <= i; t++) e(t, t); } has(e) { return this.firstChar <= e && e <= this.lastChar; } get(e) { if (this.firstChar <= e && e <= this.lastChar) return String.fromCharCode(e); } charCodeOf(e) { return Number.isInteger(e) && e >= this.firstChar && e <= this.lastChar ? e : -1; } amend(e) { unreachable('Should not call amend()'); } } class CFFFont { constructor(e, t) { this.properties = t; const i = new CFFParser(e, t, Ti); this.cff = i.parse(); this.cff.duplicateFirstGlyph(); const a = new CFFCompiler(this.cff); this.seacs = this.cff.seacs; try { this.data = a.compile(); } catch { warn('Failed to compile font ' + t.loadedName); this.data = e; } this._createBuiltInEncoding(); } get numGlyphs() { return this.cff.charStrings.count; } getCharset() { return this.cff.charset.charset; } getGlyphMapping() { const e = this.cff, t = this.properties, { cidToGidMap: i, cMap: a } = t, r = e.charset.charset; let s, n; if (t.composite) { let t, o; if (i?.length > 0) { t = Object.create(null); for (let e = 0, a = i.length; e < a; e++) { const a = i[e]; void 0 !== a && (t[a] = e); } } s = Object.create(null); if (e.isCIDFont) for (n = 0; n < r.length; n++) { const e = r[n]; o = a.charCodeOf(e); void 0 !== t?.[o] && (o = t[o]); s[o] = n; } else for (n = 0; n < e.charStrings.count; n++) { o = a.charCodeOf(n); s[o] = n; } return s; } let o = e.encoding ? e.encoding.encoding : null; t.isInternalFont && (o = t.defaultEncoding); s = type1FontGlyphMapping(t, o, r); return s; } hasGlyphId(e) { return this.cff.hasGlyphId(e); } _createBuiltInEncoding() { const { charset: e, encoding: t } = this.cff; if (!e || !t) return; const i = e.charset, a = t.encoding, r = []; for (const e in a) { const t = a[e]; if (t >= 0) { const a = i[t]; a && (r[e] = a); } } r.length > 0 && (this.properties.builtInEncoding = r); } } function getUint32(e, t) { return ((e[t] << 24) | (e[t + 1] << 16) | (e[t + 2] << 8) | e[t + 3]) >>> 0; } function getUint16(e, t) { return (e[t] << 8) | e[t + 1]; } function getInt16(e, t) { return ((e[t] << 24) | (e[t + 1] << 16)) >> 16; } function getInt8(e, t) { return (e[t] << 24) >> 24; } function getFloat214(e, t) { return getInt16(e, t) / 16384; } function getSubroutineBias(e) { const t = e.length; let i = 32768; t < 1240 ? (i = 107) : t < 33900 && (i = 1131); return i; } function parseCmap(e, t, i) { const a = 1 === getUint16(e, t + 2) ? getUint32(e, t + 8) : getUint32(e, t + 16), r = getUint16(e, t + a); let s, n, o; if (4 === r) { getUint16(e, t + a + 2); const i = getUint16(e, t + a + 6) >> 1; n = t + a + 14; s = []; for (o = 0; o < i; o++, n += 2) s[o] = { end: getUint16(e, n) }; n += 2; for (o = 0; o < i; o++, n += 2) s[o].start = getUint16(e, n); for (o = 0; o < i; o++, n += 2) s[o].idDelta = getUint16(e, n); for (o = 0; o < i; o++, n += 2) { let t = getUint16(e, n); if (0 !== t) { s[o].ids = []; for (let i = 0, a = s[o].end - s[o].start + 1; i < a; i++) { s[o].ids[i] = getUint16(e, n + t); t += 2; } } } return s; } if (12 === r) { const i = getUint32(e, t + a + 12); n = t + a + 16; s = []; for (o = 0; o < i; o++) { t = getUint32(e, n); s.push({ start: t, end: getUint32(e, n + 4), idDelta: getUint32(e, n + 8) - t, }); n += 12; } return s; } throw new FormatError(`unsupported cmap: ${r}`); } function parseCff(e, t, i, a) { const r = new CFFParser(new Stream(e, t, i - t), {}, a).parse(); return { glyphs: r.charStrings.objects, subrs: r.topDict.privateDict?.subrsIndex?.objects, gsubrs: r.globalSubrIndex?.objects, isCFFCIDFont: r.isCIDFont, fdSelect: r.fdSelect, fdArray: r.fdArray, }; } function lookupCmap(e, t) { const i = t.codePointAt(0); let a = 0, r = 0, s = e.length - 1; for (; r < s; ) { const t = (r + s + 1) >> 1; i < e[t].start ? (s = t - 1) : (r = t); } e[r].start <= i && i <= e[r].end && (a = (e[r].idDelta + (e[r].ids ? e[r].ids[i - e[r].start] : i)) & 65535); return { charCode: i, glyphId: a }; } function compileGlyf(e, t, i) { function moveTo(e, i) { t.add(lt, [e, i]); } function lineTo(e, i) { t.add(Bt, [e, i]); } function quadraticCurveTo(e, i, a, r) { t.add(Qt, [e, i, a, r]); } let a = 0; const r = getInt16(e, a); let s, n = 0, o = 0; a += 10; if (r < 0) do { s = getUint16(e, a); const r = getUint16(e, a + 2); a += 4; let g, c; if (1 & s) { if (2 & s) { g = getInt16(e, a); c = getInt16(e, a + 2); } else { g = getUint16(e, a); c = getUint16(e, a + 2); } a += 4; } else if (2 & s) { g = getInt8(e, a++); c = getInt8(e, a++); } else { g = e[a++]; c = e[a++]; } if (2 & s) { n = g; o = c; } else { n = 0; o = 0; } let C = 1, h = 1, l = 0, Q = 0; if (8 & s) { C = h = getFloat214(e, a); a += 2; } else if (64 & s) { C = getFloat214(e, a); h = getFloat214(e, a + 2); a += 4; } else if (128 & s) { C = getFloat214(e, a); l = getFloat214(e, a + 2); Q = getFloat214(e, a + 4); h = getFloat214(e, a + 6); a += 8; } const E = i.glyphs[r]; if (E) { t.add(ut); t.add(ft, [C, l, Q, h, n, o]); compileGlyf(E, t, i); t.add(Et); } } while (32 & s); else { const t = []; let i, g; for (i = 0; i < r; i++) { t.push(getUint16(e, a)); a += 2; } a += 2 + getUint16(e, a); const c = t.at(-1) + 1, C = []; for (; C.length < c; ) { s = e[a++]; let t = 1; 8 & s && (t += e[a++]); for (; t-- > 0; ) C.push({ flags: s }); } for (i = 0; i < c; i++) { switch (18 & C[i].flags) { case 0: n += getInt16(e, a); a += 2; break; case 2: n -= e[a++]; break; case 18: n += e[a++]; } C[i].x = n; } for (i = 0; i < c; i++) { switch (36 & C[i].flags) { case 0: o += getInt16(e, a); a += 2; break; case 4: o -= e[a++]; break; case 36: o += e[a++]; } C[i].y = o; } let h = 0; for (a = 0; a < r; a++) { const e = t[a], r = C.slice(h, e + 1); if (1 & r[0].flags) r.push(r[0]); else if (1 & r.at(-1).flags) r.unshift(r.at(-1)); else { const e = { flags: 1, x: (r[0].x + r.at(-1).x) / 2, y: (r[0].y + r.at(-1).y) / 2, }; r.unshift(e); r.push(e); } moveTo(r[0].x, r[0].y); for (i = 1, g = r.length; i < g; i++) if (1 & r[i].flags) lineTo(r[i].x, r[i].y); else if (1 & r[i + 1].flags) { quadraticCurveTo(r[i].x, r[i].y, r[i + 1].x, r[i + 1].y); i++; } else quadraticCurveTo( r[i].x, r[i].y, (r[i].x + r[i + 1].x) / 2, (r[i].y + r[i + 1].y) / 2, ); h = e + 1; } } } function compileCharString(e, t, i, a) { function moveTo(e, i) { t.add(lt, [e, i]); } function lineTo(e, i) { t.add(Bt, [e, i]); } function bezierCurveTo(e, i, a, r, s, n) { t.add(ht, [e, i, a, r, s, n]); } const r = []; let s = 0, n = 0, o = 0; !(function parse(e) { let g = 0; for (; g < e.length; ) { let c, C, h, l, Q, E, u, d, f, p = !1, m = e[g++]; switch (m) { case 1: case 3: case 18: case 23: o += r.length >> 1; p = !0; break; case 4: n += r.pop(); moveTo(s, n); p = !0; break; case 5: for (; r.length > 0; ) { s += r.shift(); n += r.shift(); lineTo(s, n); } break; case 6: for (; r.length > 0; ) { s += r.shift(); lineTo(s, n); if (0 === r.length) break; n += r.shift(); lineTo(s, n); } break; case 7: for (; r.length > 0; ) { n += r.shift(); lineTo(s, n); if (0 === r.length) break; s += r.shift(); lineTo(s, n); } break; case 8: for (; r.length > 0; ) { c = s + r.shift(); h = n + r.shift(); C = c + r.shift(); l = h + r.shift(); s = C + r.shift(); n = l + r.shift(); bezierCurveTo(c, h, C, l, s, n); } break; case 10: d = r.pop(); f = null; if (i.isCFFCIDFont) { const e = i.fdSelect.getFDIndex(a); if (e >= 0 && e < i.fdArray.length) { const t = i.fdArray[e]; let a; t.privateDict?.subrsIndex && (a = t.privateDict.subrsIndex.objects); if (a) { d += getSubroutineBias(a); f = a[d]; } } else warn('Invalid fd index for glyph index.'); } else f = i.subrs[d + i.subrsBias]; f && parse(f); break; case 11: return; case 12: m = e[g++]; switch (m) { case 34: c = s + r.shift(); C = c + r.shift(); Q = n + r.shift(); s = C + r.shift(); bezierCurveTo(c, n, C, Q, s, Q); c = s + r.shift(); C = c + r.shift(); s = C + r.shift(); bezierCurveTo(c, Q, C, n, s, n); break; case 35: c = s + r.shift(); h = n + r.shift(); C = c + r.shift(); l = h + r.shift(); s = C + r.shift(); n = l + r.shift(); bezierCurveTo(c, h, C, l, s, n); c = s + r.shift(); h = n + r.shift(); C = c + r.shift(); l = h + r.shift(); s = C + r.shift(); n = l + r.shift(); bezierCurveTo(c, h, C, l, s, n); r.pop(); break; case 36: c = s + r.shift(); Q = n + r.shift(); C = c + r.shift(); E = Q + r.shift(); s = C + r.shift(); bezierCurveTo(c, Q, C, E, s, E); c = s + r.shift(); C = c + r.shift(); u = E + r.shift(); s = C + r.shift(); bezierCurveTo(c, E, C, u, s, n); break; case 37: const e = s, t = n; c = s + r.shift(); h = n + r.shift(); C = c + r.shift(); l = h + r.shift(); s = C + r.shift(); n = l + r.shift(); bezierCurveTo(c, h, C, l, s, n); c = s + r.shift(); h = n + r.shift(); C = c + r.shift(); l = h + r.shift(); s = C; n = l; Math.abs(s - e) > Math.abs(n - t) ? (s += r.shift()) : (n += r.shift()); bezierCurveTo(c, h, C, l, s, n); break; default: throw new FormatError(`unknown operator: 12 ${m}`); } break; case 14: if (r.length >= 4) { const e = r.pop(), a = r.pop(); n = r.pop(); s = r.pop(); t.add(ut); t.add(pt, [s, n]); let o = lookupCmap( i.cmap, String.fromCharCode(i.glyphNameMap[mi[e]]), ); compileCharString(i.glyphs[o.glyphId], t, i, o.glyphId); t.add(Et); o = lookupCmap(i.cmap, String.fromCharCode(i.glyphNameMap[mi[a]])); compileCharString(i.glyphs[o.glyphId], t, i, o.glyphId); } return; case 19: case 20: o += r.length >> 1; g += (o + 7) >> 3; p = !0; break; case 21: n += r.pop(); s += r.pop(); moveTo(s, n); p = !0; break; case 22: s += r.pop(); moveTo(s, n); p = !0; break; case 24: for (; r.length > 2; ) { c = s + r.shift(); h = n + r.shift(); C = c + r.shift(); l = h + r.shift(); s = C + r.shift(); n = l + r.shift(); bezierCurveTo(c, h, C, l, s, n); } s += r.shift(); n += r.shift(); lineTo(s, n); break; case 25: for (; r.length > 6; ) { s += r.shift(); n += r.shift(); lineTo(s, n); } c = s + r.shift(); h = n + r.shift(); C = c + r.shift(); l = h + r.shift(); s = C + r.shift(); n = l + r.shift(); bezierCurveTo(c, h, C, l, s, n); break; case 26: r.length % 2 && (s += r.shift()); for (; r.length > 0; ) { c = s; h = n + r.shift(); C = c + r.shift(); l = h + r.shift(); s = C; n = l + r.shift(); bezierCurveTo(c, h, C, l, s, n); } break; case 27: r.length % 2 && (n += r.shift()); for (; r.length > 0; ) { c = s + r.shift(); h = n; C = c + r.shift(); l = h + r.shift(); s = C + r.shift(); n = l; bezierCurveTo(c, h, C, l, s, n); } break; case 28: r.push(((e[g] << 24) | (e[g + 1] << 16)) >> 16); g += 2; break; case 29: d = r.pop() + i.gsubrsBias; f = i.gsubrs[d]; f && parse(f); break; case 30: for (; r.length > 0; ) { c = s; h = n + r.shift(); C = c + r.shift(); l = h + r.shift(); s = C + r.shift(); n = l + (1 === r.length ? r.shift() : 0); bezierCurveTo(c, h, C, l, s, n); if (0 === r.length) break; c = s + r.shift(); h = n; C = c + r.shift(); l = h + r.shift(); n = l + r.shift(); s = C + (1 === r.length ? r.shift() : 0); bezierCurveTo(c, h, C, l, s, n); } break; case 31: for (; r.length > 0; ) { c = s + r.shift(); h = n; C = c + r.shift(); l = h + r.shift(); n = l + r.shift(); s = C + (1 === r.length ? r.shift() : 0); bezierCurveTo(c, h, C, l, s, n); if (0 === r.length) break; c = s; h = n + r.shift(); C = c + r.shift(); l = h + r.shift(); s = C + r.shift(); n = l + (1 === r.length ? r.shift() : 0); bezierCurveTo(c, h, C, l, s, n); } break; default: if (m < 32) throw new FormatError(`unknown operator: ${m}`); if (m < 247) r.push(m - 139); else if (m < 251) r.push(256 * (m - 247) + e[g++] + 108); else if (m < 255) r.push(256 * -(m - 251) - e[g++] - 108); else { r.push( ((e[g] << 24) | (e[g + 1] << 16) | (e[g + 2] << 8) | e[g + 3]) / 65536, ); g += 4; } } p && (r.length = 0); } })(e); } const ea = []; class Commands { cmds = []; add(e, t) { if (t) if (isNumberArray(t, null)) this.cmds.push(e, ...t); else { warn(`Commands.add - "${e}" has at least one non-number arg: "${t}".`); const i = t.map((e) => ('number' == typeof e ? e : 0)); this.cmds.push(e, ...i); } else this.cmds.push(e); } } class CompiledFont { constructor(e) { this.constructor === CompiledFont && unreachable('Cannot initialize CompiledFont.'); this.fontMatrix = e; this.compiledGlyphs = Object.create(null); this.compiledCharCodeToGlyphId = Object.create(null); } getPathJs(e) { const { charCode: t, glyphId: i } = lookupCmap(this.cmap, e); let a, r = this.compiledGlyphs[i]; if (!r) { try { r = this.compileGlyph(this.glyphs[i], i); } catch (e) { r = ea; a = e; } this.compiledGlyphs[i] = r; } this.compiledCharCodeToGlyphId[t] ??= i; if (a) throw a; return r; } compileGlyph(e, t) { if (!e || 0 === e.length || 14 === e[0]) return ea; let i = this.fontMatrix; if (this.isCFFCIDFont) { const e = this.fdSelect.getFDIndex(t); if (e >= 0 && e < this.fdArray.length) { i = this.fdArray[e].getByName('FontMatrix') || r; } else warn('Invalid fd index for glyph index.'); } const a = new Commands(); a.add(ut); a.add(ft, i.slice()); a.add(dt); this.compileGlyphImpl(e, a, t); a.add(Et); return a.cmds; } compileGlyphImpl() { unreachable('Children classes should implement this.'); } hasBuiltPath(e) { const { charCode: t, glyphId: i } = lookupCmap(this.cmap, e); return ( void 0 !== this.compiledGlyphs[i] && void 0 !== this.compiledCharCodeToGlyphId[t] ); } } class TrueTypeCompiled extends CompiledFont { constructor(e, t, i) { super(i || [488e-6, 0, 0, 488e-6, 0, 0]); this.glyphs = e; this.cmap = t; } compileGlyphImpl(e, t) { compileGlyf(e, t, this); } } class Type2Compiled extends CompiledFont { constructor(e, t, i, a) { super(i || [0.001, 0, 0, 0.001, 0, 0]); this.glyphs = e.glyphs; this.gsubrs = e.gsubrs || []; this.subrs = e.subrs || []; this.cmap = t; this.glyphNameMap = a || xi(); this.gsubrsBias = getSubroutineBias(this.gsubrs); this.subrsBias = getSubroutineBias(this.subrs); this.isCFFCIDFont = e.isCFFCIDFont; this.fdSelect = e.fdSelect; this.fdArray = e.fdArray; } compileGlyphImpl(e, t, i) { compileCharString(e, t, this, i); } } class FontRendererFactory { static create(e, t) { const i = new Uint8Array(e.data); let a, r, s, n, o, g; const c = getUint16(i, 4); for (let e = 0, C = 12; e < c; e++, C += 16) { const e = bytesToString(i.subarray(C, C + 4)), c = getUint32(i, C + 8), h = getUint32(i, C + 12); switch (e) { case 'cmap': a = parseCmap(i, c); break; case 'glyf': r = i.subarray(c, c + h); break; case 'loca': s = i.subarray(c, c + h); break; case 'head': g = getUint16(i, c + 18); o = getUint16(i, c + 50); break; case 'CFF ': n = parseCff(i, c, c + h, t); } } if (r) { const t = g ? [1 / g, 0, 0, 1 / g, 0, 0] : e.fontMatrix; return new TrueTypeCompiled( (function parseGlyfTable(e, t, i) { let a, r; if (i) { a = 4; r = getUint32; } else { a = 2; r = (e, t) => 2 * getUint16(e, t); } const s = []; let n = r(t, 0); for (let i = a; i < t.length; i += a) { const a = r(t, i); s.push(e.subarray(n, a)); n = a; } return s; })(r, s, o), a, t, ); } return new Type2Compiled(n, a, e.fontMatrix, e.glyphNameMap); } } const ta = getLookupTableFactory(function (e) { e.Courier = 600; e['Courier-Bold'] = 600; e['Courier-BoldOblique'] = 600; e['Courier-Oblique'] = 600; e.Helvetica = getLookupTableFactory(function (e) { e.space = 278; e.exclam = 278; e.quotedbl = 355; e.numbersign = 556; e.dollar = 556; e.percent = 889; e.ampersand = 667; e.quoteright = 222; e.parenleft = 333; e.parenright = 333; e.asterisk = 389; e.plus = 584; e.comma = 278; e.hyphen = 333; e.period = 278; e.slash = 278; e.zero = 556; e.one = 556; e.two = 556; e.three = 556; e.four = 556; e.five = 556; e.six = 556; e.seven = 556; e.eight = 556; e.nine = 556; e.colon = 278; e.semicolon = 278; e.less = 584; e.equal = 584; e.greater = 584; e.question = 556; e.at = 1015; e.A = 667; e.B = 667; e.C = 722; e.D = 722; e.E = 667; e.F = 611; e.G = 778; e.H = 722; e.I = 278; e.J = 500; e.K = 667; e.L = 556; e.M = 833; e.N = 722; e.O = 778; e.P = 667; e.Q = 778; e.R = 722; e.S = 667; e.T = 611; e.U = 722; e.V = 667; e.W = 944; e.X = 667; e.Y = 667; e.Z = 611; e.bracketleft = 278; e.backslash = 278; e.bracketright = 278; e.asciicircum = 469; e.underscore = 556; e.quoteleft = 222; e.a = 556; e.b = 556; e.c = 500; e.d = 556; e.e = 556; e.f = 278; e.g = 556; e.h = 556; e.i = 222; e.j = 222; e.k = 500; e.l = 222; e.m = 833; e.n = 556; e.o = 556; e.p = 556; e.q = 556; e.r = 333; e.s = 500; e.t = 278; e.u = 556; e.v = 500; e.w = 722; e.x = 500; e.y = 500; e.z = 500; e.braceleft = 334; e.bar = 260; e.braceright = 334; e.asciitilde = 584; e.exclamdown = 333; e.cent = 556; e.sterling = 556; e.fraction = 167; e.yen = 556; e.florin = 556; e.section = 556; e.currency = 556; e.quotesingle = 191; e.quotedblleft = 333; e.guillemotleft = 556; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 500; e.fl = 500; e.endash = 556; e.dagger = 556; e.daggerdbl = 556; e.periodcentered = 278; e.paragraph = 537; e.bullet = 350; e.quotesinglbase = 222; e.quotedblbase = 333; e.quotedblright = 333; e.guillemotright = 556; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 611; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 1e3; e.ordfeminine = 370; e.Lslash = 556; e.Oslash = 778; e.OE = 1e3; e.ordmasculine = 365; e.ae = 889; e.dotlessi = 278; e.lslash = 222; e.oslash = 611; e.oe = 944; e.germandbls = 611; e.Idieresis = 278; e.eacute = 556; e.abreve = 556; e.uhungarumlaut = 556; e.ecaron = 556; e.Ydieresis = 667; e.divide = 584; e.Yacute = 667; e.Acircumflex = 667; e.aacute = 556; e.Ucircumflex = 722; e.yacute = 500; e.scommaaccent = 500; e.ecircumflex = 556; e.Uring = 722; e.Udieresis = 722; e.aogonek = 556; e.Uacute = 722; e.uogonek = 556; e.Edieresis = 667; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 737; e.Emacron = 667; e.ccaron = 500; e.aring = 556; e.Ncommaaccent = 722; e.lacute = 222; e.agrave = 556; e.Tcommaaccent = 611; e.Cacute = 722; e.atilde = 556; e.Edotaccent = 667; e.scaron = 500; e.scedilla = 500; e.iacute = 278; e.lozenge = 471; e.Rcaron = 722; e.Gcommaaccent = 778; e.ucircumflex = 556; e.acircumflex = 556; e.Amacron = 667; e.rcaron = 333; e.ccedilla = 500; e.Zdotaccent = 611; e.Thorn = 667; e.Omacron = 778; e.Racute = 722; e.Sacute = 667; e.dcaron = 643; e.Umacron = 722; e.uring = 556; e.threesuperior = 333; e.Ograve = 778; e.Agrave = 667; e.Abreve = 667; e.multiply = 584; e.uacute = 556; e.Tcaron = 611; e.partialdiff = 476; e.ydieresis = 500; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 667; e.adieresis = 556; e.edieresis = 556; e.cacute = 500; e.nacute = 556; e.umacron = 556; e.Ncaron = 722; e.Iacute = 278; e.plusminus = 584; e.brokenbar = 260; e.registered = 737; e.Gbreve = 778; e.Idotaccent = 278; e.summation = 600; e.Egrave = 667; e.racute = 333; e.omacron = 556; e.Zacute = 611; e.Zcaron = 611; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 722; e.lcommaaccent = 222; e.tcaron = 317; e.eogonek = 556; e.Uogonek = 722; e.Aacute = 667; e.Adieresis = 667; e.egrave = 556; e.zacute = 500; e.iogonek = 222; e.Oacute = 778; e.oacute = 556; e.amacron = 556; e.sacute = 500; e.idieresis = 278; e.Ocircumflex = 778; e.Ugrave = 722; e.Delta = 612; e.thorn = 556; e.twosuperior = 333; e.Odieresis = 778; e.mu = 556; e.igrave = 278; e.ohungarumlaut = 556; e.Eogonek = 667; e.dcroat = 556; e.threequarters = 834; e.Scedilla = 667; e.lcaron = 299; e.Kcommaaccent = 667; e.Lacute = 556; e.trademark = 1e3; e.edotaccent = 556; e.Igrave = 278; e.Imacron = 278; e.Lcaron = 556; e.onehalf = 834; e.lessequal = 549; e.ocircumflex = 556; e.ntilde = 556; e.Uhungarumlaut = 722; e.Eacute = 667; e.emacron = 556; e.gbreve = 556; e.onequarter = 834; e.Scaron = 667; e.Scommaaccent = 667; e.Ohungarumlaut = 778; e.degree = 400; e.ograve = 556; e.Ccaron = 722; e.ugrave = 556; e.radical = 453; e.Dcaron = 722; e.rcommaaccent = 333; e.Ntilde = 722; e.otilde = 556; e.Rcommaaccent = 722; e.Lcommaaccent = 556; e.Atilde = 667; e.Aogonek = 667; e.Aring = 667; e.Otilde = 778; e.zdotaccent = 500; e.Ecaron = 667; e.Iogonek = 278; e.kcommaaccent = 500; e.minus = 584; e.Icircumflex = 278; e.ncaron = 556; e.tcommaaccent = 278; e.logicalnot = 584; e.odieresis = 556; e.udieresis = 556; e.notequal = 549; e.gcommaaccent = 556; e.eth = 556; e.zcaron = 500; e.ncommaaccent = 556; e.onesuperior = 333; e.imacron = 278; e.Euro = 556; }); e['Helvetica-Bold'] = getLookupTableFactory(function (e) { e.space = 278; e.exclam = 333; e.quotedbl = 474; e.numbersign = 556; e.dollar = 556; e.percent = 889; e.ampersand = 722; e.quoteright = 278; e.parenleft = 333; e.parenright = 333; e.asterisk = 389; e.plus = 584; e.comma = 278; e.hyphen = 333; e.period = 278; e.slash = 278; e.zero = 556; e.one = 556; e.two = 556; e.three = 556; e.four = 556; e.five = 556; e.six = 556; e.seven = 556; e.eight = 556; e.nine = 556; e.colon = 333; e.semicolon = 333; e.less = 584; e.equal = 584; e.greater = 584; e.question = 611; e.at = 975; e.A = 722; e.B = 722; e.C = 722; e.D = 722; e.E = 667; e.F = 611; e.G = 778; e.H = 722; e.I = 278; e.J = 556; e.K = 722; e.L = 611; e.M = 833; e.N = 722; e.O = 778; e.P = 667; e.Q = 778; e.R = 722; e.S = 667; e.T = 611; e.U = 722; e.V = 667; e.W = 944; e.X = 667; e.Y = 667; e.Z = 611; e.bracketleft = 333; e.backslash = 278; e.bracketright = 333; e.asciicircum = 584; e.underscore = 556; e.quoteleft = 278; e.a = 556; e.b = 611; e.c = 556; e.d = 611; e.e = 556; e.f = 333; e.g = 611; e.h = 611; e.i = 278; e.j = 278; e.k = 556; e.l = 278; e.m = 889; e.n = 611; e.o = 611; e.p = 611; e.q = 611; e.r = 389; e.s = 556; e.t = 333; e.u = 611; e.v = 556; e.w = 778; e.x = 556; e.y = 556; e.z = 500; e.braceleft = 389; e.bar = 280; e.braceright = 389; e.asciitilde = 584; e.exclamdown = 333; e.cent = 556; e.sterling = 556; e.fraction = 167; e.yen = 556; e.florin = 556; e.section = 556; e.currency = 556; e.quotesingle = 238; e.quotedblleft = 500; e.guillemotleft = 556; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 611; e.fl = 611; e.endash = 556; e.dagger = 556; e.daggerdbl = 556; e.periodcentered = 278; e.paragraph = 556; e.bullet = 350; e.quotesinglbase = 278; e.quotedblbase = 500; e.quotedblright = 500; e.guillemotright = 556; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 611; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 1e3; e.ordfeminine = 370; e.Lslash = 611; e.Oslash = 778; e.OE = 1e3; e.ordmasculine = 365; e.ae = 889; e.dotlessi = 278; e.lslash = 278; e.oslash = 611; e.oe = 944; e.germandbls = 611; e.Idieresis = 278; e.eacute = 556; e.abreve = 556; e.uhungarumlaut = 611; e.ecaron = 556; e.Ydieresis = 667; e.divide = 584; e.Yacute = 667; e.Acircumflex = 722; e.aacute = 556; e.Ucircumflex = 722; e.yacute = 556; e.scommaaccent = 556; e.ecircumflex = 556; e.Uring = 722; e.Udieresis = 722; e.aogonek = 556; e.Uacute = 722; e.uogonek = 611; e.Edieresis = 667; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 737; e.Emacron = 667; e.ccaron = 556; e.aring = 556; e.Ncommaaccent = 722; e.lacute = 278; e.agrave = 556; e.Tcommaaccent = 611; e.Cacute = 722; e.atilde = 556; e.Edotaccent = 667; e.scaron = 556; e.scedilla = 556; e.iacute = 278; e.lozenge = 494; e.Rcaron = 722; e.Gcommaaccent = 778; e.ucircumflex = 611; e.acircumflex = 556; e.Amacron = 722; e.rcaron = 389; e.ccedilla = 556; e.Zdotaccent = 611; e.Thorn = 667; e.Omacron = 778; e.Racute = 722; e.Sacute = 667; e.dcaron = 743; e.Umacron = 722; e.uring = 611; e.threesuperior = 333; e.Ograve = 778; e.Agrave = 722; e.Abreve = 722; e.multiply = 584; e.uacute = 611; e.Tcaron = 611; e.partialdiff = 494; e.ydieresis = 556; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 667; e.adieresis = 556; e.edieresis = 556; e.cacute = 556; e.nacute = 611; e.umacron = 611; e.Ncaron = 722; e.Iacute = 278; e.plusminus = 584; e.brokenbar = 280; e.registered = 737; e.Gbreve = 778; e.Idotaccent = 278; e.summation = 600; e.Egrave = 667; e.racute = 389; e.omacron = 611; e.Zacute = 611; e.Zcaron = 611; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 722; e.lcommaaccent = 278; e.tcaron = 389; e.eogonek = 556; e.Uogonek = 722; e.Aacute = 722; e.Adieresis = 722; e.egrave = 556; e.zacute = 500; e.iogonek = 278; e.Oacute = 778; e.oacute = 611; e.amacron = 556; e.sacute = 556; e.idieresis = 278; e.Ocircumflex = 778; e.Ugrave = 722; e.Delta = 612; e.thorn = 611; e.twosuperior = 333; e.Odieresis = 778; e.mu = 611; e.igrave = 278; e.ohungarumlaut = 611; e.Eogonek = 667; e.dcroat = 611; e.threequarters = 834; e.Scedilla = 667; e.lcaron = 400; e.Kcommaaccent = 722; e.Lacute = 611; e.trademark = 1e3; e.edotaccent = 556; e.Igrave = 278; e.Imacron = 278; e.Lcaron = 611; e.onehalf = 834; e.lessequal = 549; e.ocircumflex = 611; e.ntilde = 611; e.Uhungarumlaut = 722; e.Eacute = 667; e.emacron = 556; e.gbreve = 611; e.onequarter = 834; e.Scaron = 667; e.Scommaaccent = 667; e.Ohungarumlaut = 778; e.degree = 400; e.ograve = 611; e.Ccaron = 722; e.ugrave = 611; e.radical = 549; e.Dcaron = 722; e.rcommaaccent = 389; e.Ntilde = 722; e.otilde = 611; e.Rcommaaccent = 722; e.Lcommaaccent = 611; e.Atilde = 722; e.Aogonek = 722; e.Aring = 722; e.Otilde = 778; e.zdotaccent = 500; e.Ecaron = 667; e.Iogonek = 278; e.kcommaaccent = 556; e.minus = 584; e.Icircumflex = 278; e.ncaron = 611; e.tcommaaccent = 333; e.logicalnot = 584; e.odieresis = 611; e.udieresis = 611; e.notequal = 549; e.gcommaaccent = 611; e.eth = 611; e.zcaron = 500; e.ncommaaccent = 611; e.onesuperior = 333; e.imacron = 278; e.Euro = 556; }); e['Helvetica-BoldOblique'] = getLookupTableFactory(function (e) { e.space = 278; e.exclam = 333; e.quotedbl = 474; e.numbersign = 556; e.dollar = 556; e.percent = 889; e.ampersand = 722; e.quoteright = 278; e.parenleft = 333; e.parenright = 333; e.asterisk = 389; e.plus = 584; e.comma = 278; e.hyphen = 333; e.period = 278; e.slash = 278; e.zero = 556; e.one = 556; e.two = 556; e.three = 556; e.four = 556; e.five = 556; e.six = 556; e.seven = 556; e.eight = 556; e.nine = 556; e.colon = 333; e.semicolon = 333; e.less = 584; e.equal = 584; e.greater = 584; e.question = 611; e.at = 975; e.A = 722; e.B = 722; e.C = 722; e.D = 722; e.E = 667; e.F = 611; e.G = 778; e.H = 722; e.I = 278; e.J = 556; e.K = 722; e.L = 611; e.M = 833; e.N = 722; e.O = 778; e.P = 667; e.Q = 778; e.R = 722; e.S = 667; e.T = 611; e.U = 722; e.V = 667; e.W = 944; e.X = 667; e.Y = 667; e.Z = 611; e.bracketleft = 333; e.backslash = 278; e.bracketright = 333; e.asciicircum = 584; e.underscore = 556; e.quoteleft = 278; e.a = 556; e.b = 611; e.c = 556; e.d = 611; e.e = 556; e.f = 333; e.g = 611; e.h = 611; e.i = 278; e.j = 278; e.k = 556; e.l = 278; e.m = 889; e.n = 611; e.o = 611; e.p = 611; e.q = 611; e.r = 389; e.s = 556; e.t = 333; e.u = 611; e.v = 556; e.w = 778; e.x = 556; e.y = 556; e.z = 500; e.braceleft = 389; e.bar = 280; e.braceright = 389; e.asciitilde = 584; e.exclamdown = 333; e.cent = 556; e.sterling = 556; e.fraction = 167; e.yen = 556; e.florin = 556; e.section = 556; e.currency = 556; e.quotesingle = 238; e.quotedblleft = 500; e.guillemotleft = 556; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 611; e.fl = 611; e.endash = 556; e.dagger = 556; e.daggerdbl = 556; e.periodcentered = 278; e.paragraph = 556; e.bullet = 350; e.quotesinglbase = 278; e.quotedblbase = 500; e.quotedblright = 500; e.guillemotright = 556; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 611; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 1e3; e.ordfeminine = 370; e.Lslash = 611; e.Oslash = 778; e.OE = 1e3; e.ordmasculine = 365; e.ae = 889; e.dotlessi = 278; e.lslash = 278; e.oslash = 611; e.oe = 944; e.germandbls = 611; e.Idieresis = 278; e.eacute = 556; e.abreve = 556; e.uhungarumlaut = 611; e.ecaron = 556; e.Ydieresis = 667; e.divide = 584; e.Yacute = 667; e.Acircumflex = 722; e.aacute = 556; e.Ucircumflex = 722; e.yacute = 556; e.scommaaccent = 556; e.ecircumflex = 556; e.Uring = 722; e.Udieresis = 722; e.aogonek = 556; e.Uacute = 722; e.uogonek = 611; e.Edieresis = 667; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 737; e.Emacron = 667; e.ccaron = 556; e.aring = 556; e.Ncommaaccent = 722; e.lacute = 278; e.agrave = 556; e.Tcommaaccent = 611; e.Cacute = 722; e.atilde = 556; e.Edotaccent = 667; e.scaron = 556; e.scedilla = 556; e.iacute = 278; e.lozenge = 494; e.Rcaron = 722; e.Gcommaaccent = 778; e.ucircumflex = 611; e.acircumflex = 556; e.Amacron = 722; e.rcaron = 389; e.ccedilla = 556; e.Zdotaccent = 611; e.Thorn = 667; e.Omacron = 778; e.Racute = 722; e.Sacute = 667; e.dcaron = 743; e.Umacron = 722; e.uring = 611; e.threesuperior = 333; e.Ograve = 778; e.Agrave = 722; e.Abreve = 722; e.multiply = 584; e.uacute = 611; e.Tcaron = 611; e.partialdiff = 494; e.ydieresis = 556; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 667; e.adieresis = 556; e.edieresis = 556; e.cacute = 556; e.nacute = 611; e.umacron = 611; e.Ncaron = 722; e.Iacute = 278; e.plusminus = 584; e.brokenbar = 280; e.registered = 737; e.Gbreve = 778; e.Idotaccent = 278; e.summation = 600; e.Egrave = 667; e.racute = 389; e.omacron = 611; e.Zacute = 611; e.Zcaron = 611; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 722; e.lcommaaccent = 278; e.tcaron = 389; e.eogonek = 556; e.Uogonek = 722; e.Aacute = 722; e.Adieresis = 722; e.egrave = 556; e.zacute = 500; e.iogonek = 278; e.Oacute = 778; e.oacute = 611; e.amacron = 556; e.sacute = 556; e.idieresis = 278; e.Ocircumflex = 778; e.Ugrave = 722; e.Delta = 612; e.thorn = 611; e.twosuperior = 333; e.Odieresis = 778; e.mu = 611; e.igrave = 278; e.ohungarumlaut = 611; e.Eogonek = 667; e.dcroat = 611; e.threequarters = 834; e.Scedilla = 667; e.lcaron = 400; e.Kcommaaccent = 722; e.Lacute = 611; e.trademark = 1e3; e.edotaccent = 556; e.Igrave = 278; e.Imacron = 278; e.Lcaron = 611; e.onehalf = 834; e.lessequal = 549; e.ocircumflex = 611; e.ntilde = 611; e.Uhungarumlaut = 722; e.Eacute = 667; e.emacron = 556; e.gbreve = 611; e.onequarter = 834; e.Scaron = 667; e.Scommaaccent = 667; e.Ohungarumlaut = 778; e.degree = 400; e.ograve = 611; e.Ccaron = 722; e.ugrave = 611; e.radical = 549; e.Dcaron = 722; e.rcommaaccent = 389; e.Ntilde = 722; e.otilde = 611; e.Rcommaaccent = 722; e.Lcommaaccent = 611; e.Atilde = 722; e.Aogonek = 722; e.Aring = 722; e.Otilde = 778; e.zdotaccent = 500; e.Ecaron = 667; e.Iogonek = 278; e.kcommaaccent = 556; e.minus = 584; e.Icircumflex = 278; e.ncaron = 611; e.tcommaaccent = 333; e.logicalnot = 584; e.odieresis = 611; e.udieresis = 611; e.notequal = 549; e.gcommaaccent = 611; e.eth = 611; e.zcaron = 500; e.ncommaaccent = 611; e.onesuperior = 333; e.imacron = 278; e.Euro = 556; }); e['Helvetica-Oblique'] = getLookupTableFactory(function (e) { e.space = 278; e.exclam = 278; e.quotedbl = 355; e.numbersign = 556; e.dollar = 556; e.percent = 889; e.ampersand = 667; e.quoteright = 222; e.parenleft = 333; e.parenright = 333; e.asterisk = 389; e.plus = 584; e.comma = 278; e.hyphen = 333; e.period = 278; e.slash = 278; e.zero = 556; e.one = 556; e.two = 556; e.three = 556; e.four = 556; e.five = 556; e.six = 556; e.seven = 556; e.eight = 556; e.nine = 556; e.colon = 278; e.semicolon = 278; e.less = 584; e.equal = 584; e.greater = 584; e.question = 556; e.at = 1015; e.A = 667; e.B = 667; e.C = 722; e.D = 722; e.E = 667; e.F = 611; e.G = 778; e.H = 722; e.I = 278; e.J = 500; e.K = 667; e.L = 556; e.M = 833; e.N = 722; e.O = 778; e.P = 667; e.Q = 778; e.R = 722; e.S = 667; e.T = 611; e.U = 722; e.V = 667; e.W = 944; e.X = 667; e.Y = 667; e.Z = 611; e.bracketleft = 278; e.backslash = 278; e.bracketright = 278; e.asciicircum = 469; e.underscore = 556; e.quoteleft = 222; e.a = 556; e.b = 556; e.c = 500; e.d = 556; e.e = 556; e.f = 278; e.g = 556; e.h = 556; e.i = 222; e.j = 222; e.k = 500; e.l = 222; e.m = 833; e.n = 556; e.o = 556; e.p = 556; e.q = 556; e.r = 333; e.s = 500; e.t = 278; e.u = 556; e.v = 500; e.w = 722; e.x = 500; e.y = 500; e.z = 500; e.braceleft = 334; e.bar = 260; e.braceright = 334; e.asciitilde = 584; e.exclamdown = 333; e.cent = 556; e.sterling = 556; e.fraction = 167; e.yen = 556; e.florin = 556; e.section = 556; e.currency = 556; e.quotesingle = 191; e.quotedblleft = 333; e.guillemotleft = 556; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 500; e.fl = 500; e.endash = 556; e.dagger = 556; e.daggerdbl = 556; e.periodcentered = 278; e.paragraph = 537; e.bullet = 350; e.quotesinglbase = 222; e.quotedblbase = 333; e.quotedblright = 333; e.guillemotright = 556; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 611; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 1e3; e.ordfeminine = 370; e.Lslash = 556; e.Oslash = 778; e.OE = 1e3; e.ordmasculine = 365; e.ae = 889; e.dotlessi = 278; e.lslash = 222; e.oslash = 611; e.oe = 944; e.germandbls = 611; e.Idieresis = 278; e.eacute = 556; e.abreve = 556; e.uhungarumlaut = 556; e.ecaron = 556; e.Ydieresis = 667; e.divide = 584; e.Yacute = 667; e.Acircumflex = 667; e.aacute = 556; e.Ucircumflex = 722; e.yacute = 500; e.scommaaccent = 500; e.ecircumflex = 556; e.Uring = 722; e.Udieresis = 722; e.aogonek = 556; e.Uacute = 722; e.uogonek = 556; e.Edieresis = 667; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 737; e.Emacron = 667; e.ccaron = 500; e.aring = 556; e.Ncommaaccent = 722; e.lacute = 222; e.agrave = 556; e.Tcommaaccent = 611; e.Cacute = 722; e.atilde = 556; e.Edotaccent = 667; e.scaron = 500; e.scedilla = 500; e.iacute = 278; e.lozenge = 471; e.Rcaron = 722; e.Gcommaaccent = 778; e.ucircumflex = 556; e.acircumflex = 556; e.Amacron = 667; e.rcaron = 333; e.ccedilla = 500; e.Zdotaccent = 611; e.Thorn = 667; e.Omacron = 778; e.Racute = 722; e.Sacute = 667; e.dcaron = 643; e.Umacron = 722; e.uring = 556; e.threesuperior = 333; e.Ograve = 778; e.Agrave = 667; e.Abreve = 667; e.multiply = 584; e.uacute = 556; e.Tcaron = 611; e.partialdiff = 476; e.ydieresis = 500; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 667; e.adieresis = 556; e.edieresis = 556; e.cacute = 500; e.nacute = 556; e.umacron = 556; e.Ncaron = 722; e.Iacute = 278; e.plusminus = 584; e.brokenbar = 260; e.registered = 737; e.Gbreve = 778; e.Idotaccent = 278; e.summation = 600; e.Egrave = 667; e.racute = 333; e.omacron = 556; e.Zacute = 611; e.Zcaron = 611; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 722; e.lcommaaccent = 222; e.tcaron = 317; e.eogonek = 556; e.Uogonek = 722; e.Aacute = 667; e.Adieresis = 667; e.egrave = 556; e.zacute = 500; e.iogonek = 222; e.Oacute = 778; e.oacute = 556; e.amacron = 556; e.sacute = 500; e.idieresis = 278; e.Ocircumflex = 778; e.Ugrave = 722; e.Delta = 612; e.thorn = 556; e.twosuperior = 333; e.Odieresis = 778; e.mu = 556; e.igrave = 278; e.ohungarumlaut = 556; e.Eogonek = 667; e.dcroat = 556; e.threequarters = 834; e.Scedilla = 667; e.lcaron = 299; e.Kcommaaccent = 667; e.Lacute = 556; e.trademark = 1e3; e.edotaccent = 556; e.Igrave = 278; e.Imacron = 278; e.Lcaron = 556; e.onehalf = 834; e.lessequal = 549; e.ocircumflex = 556; e.ntilde = 556; e.Uhungarumlaut = 722; e.Eacute = 667; e.emacron = 556; e.gbreve = 556; e.onequarter = 834; e.Scaron = 667; e.Scommaaccent = 667; e.Ohungarumlaut = 778; e.degree = 400; e.ograve = 556; e.Ccaron = 722; e.ugrave = 556; e.radical = 453; e.Dcaron = 722; e.rcommaaccent = 333; e.Ntilde = 722; e.otilde = 556; e.Rcommaaccent = 722; e.Lcommaaccent = 556; e.Atilde = 667; e.Aogonek = 667; e.Aring = 667; e.Otilde = 778; e.zdotaccent = 500; e.Ecaron = 667; e.Iogonek = 278; e.kcommaaccent = 500; e.minus = 584; e.Icircumflex = 278; e.ncaron = 556; e.tcommaaccent = 278; e.logicalnot = 584; e.odieresis = 556; e.udieresis = 556; e.notequal = 549; e.gcommaaccent = 556; e.eth = 556; e.zcaron = 500; e.ncommaaccent = 556; e.onesuperior = 333; e.imacron = 278; e.Euro = 556; }); e.Symbol = getLookupTableFactory(function (e) { e.space = 250; e.exclam = 333; e.universal = 713; e.numbersign = 500; e.existential = 549; e.percent = 833; e.ampersand = 778; e.suchthat = 439; e.parenleft = 333; e.parenright = 333; e.asteriskmath = 500; e.plus = 549; e.comma = 250; e.minus = 549; e.period = 250; e.slash = 278; e.zero = 500; e.one = 500; e.two = 500; e.three = 500; e.four = 500; e.five = 500; e.six = 500; e.seven = 500; e.eight = 500; e.nine = 500; e.colon = 278; e.semicolon = 278; e.less = 549; e.equal = 549; e.greater = 549; e.question = 444; e.congruent = 549; e.Alpha = 722; e.Beta = 667; e.Chi = 722; e.Delta = 612; e.Epsilon = 611; e.Phi = 763; e.Gamma = 603; e.Eta = 722; e.Iota = 333; e.theta1 = 631; e.Kappa = 722; e.Lambda = 686; e.Mu = 889; e.Nu = 722; e.Omicron = 722; e.Pi = 768; e.Theta = 741; e.Rho = 556; e.Sigma = 592; e.Tau = 611; e.Upsilon = 690; e.sigma1 = 439; e.Omega = 768; e.Xi = 645; e.Psi = 795; e.Zeta = 611; e.bracketleft = 333; e.therefore = 863; e.bracketright = 333; e.perpendicular = 658; e.underscore = 500; e.radicalex = 500; e.alpha = 631; e.beta = 549; e.chi = 549; e.delta = 494; e.epsilon = 439; e.phi = 521; e.gamma = 411; e.eta = 603; e.iota = 329; e.phi1 = 603; e.kappa = 549; e.lambda = 549; e.mu = 576; e.nu = 521; e.omicron = 549; e.pi = 549; e.theta = 521; e.rho = 549; e.sigma = 603; e.tau = 439; e.upsilon = 576; e.omega1 = 713; e.omega = 686; e.xi = 493; e.psi = 686; e.zeta = 494; e.braceleft = 480; e.bar = 200; e.braceright = 480; e.similar = 549; e.Euro = 750; e.Upsilon1 = 620; e.minute = 247; e.lessequal = 549; e.fraction = 167; e.infinity = 713; e.florin = 500; e.club = 753; e.diamond = 753; e.heart = 753; e.spade = 753; e.arrowboth = 1042; e.arrowleft = 987; e.arrowup = 603; e.arrowright = 987; e.arrowdown = 603; e.degree = 400; e.plusminus = 549; e.second = 411; e.greaterequal = 549; e.multiply = 549; e.proportional = 713; e.partialdiff = 494; e.bullet = 460; e.divide = 549; e.notequal = 549; e.equivalence = 549; e.approxequal = 549; e.ellipsis = 1e3; e.arrowvertex = 603; e.arrowhorizex = 1e3; e.carriagereturn = 658; e.aleph = 823; e.Ifraktur = 686; e.Rfraktur = 795; e.weierstrass = 987; e.circlemultiply = 768; e.circleplus = 768; e.emptyset = 823; e.intersection = 768; e.union = 768; e.propersuperset = 713; e.reflexsuperset = 713; e.notsubset = 713; e.propersubset = 713; e.reflexsubset = 713; e.element = 713; e.notelement = 713; e.angle = 768; e.gradient = 713; e.registerserif = 790; e.copyrightserif = 790; e.trademarkserif = 890; e.product = 823; e.radical = 549; e.dotmath = 250; e.logicalnot = 713; e.logicaland = 603; e.logicalor = 603; e.arrowdblboth = 1042; e.arrowdblleft = 987; e.arrowdblup = 603; e.arrowdblright = 987; e.arrowdbldown = 603; e.lozenge = 494; e.angleleft = 329; e.registersans = 790; e.copyrightsans = 790; e.trademarksans = 786; e.summation = 713; e.parenlefttp = 384; e.parenleftex = 384; e.parenleftbt = 384; e.bracketlefttp = 384; e.bracketleftex = 384; e.bracketleftbt = 384; e.bracelefttp = 494; e.braceleftmid = 494; e.braceleftbt = 494; e.braceex = 494; e.angleright = 329; e.integral = 274; e.integraltp = 686; e.integralex = 686; e.integralbt = 686; e.parenrighttp = 384; e.parenrightex = 384; e.parenrightbt = 384; e.bracketrighttp = 384; e.bracketrightex = 384; e.bracketrightbt = 384; e.bracerighttp = 494; e.bracerightmid = 494; e.bracerightbt = 494; e.apple = 790; }); e['Times-Roman'] = getLookupTableFactory(function (e) { e.space = 250; e.exclam = 333; e.quotedbl = 408; e.numbersign = 500; e.dollar = 500; e.percent = 833; e.ampersand = 778; e.quoteright = 333; e.parenleft = 333; e.parenright = 333; e.asterisk = 500; e.plus = 564; e.comma = 250; e.hyphen = 333; e.period = 250; e.slash = 278; e.zero = 500; e.one = 500; e.two = 500; e.three = 500; e.four = 500; e.five = 500; e.six = 500; e.seven = 500; e.eight = 500; e.nine = 500; e.colon = 278; e.semicolon = 278; e.less = 564; e.equal = 564; e.greater = 564; e.question = 444; e.at = 921; e.A = 722; e.B = 667; e.C = 667; e.D = 722; e.E = 611; e.F = 556; e.G = 722; e.H = 722; e.I = 333; e.J = 389; e.K = 722; e.L = 611; e.M = 889; e.N = 722; e.O = 722; e.P = 556; e.Q = 722; e.R = 667; e.S = 556; e.T = 611; e.U = 722; e.V = 722; e.W = 944; e.X = 722; e.Y = 722; e.Z = 611; e.bracketleft = 333; e.backslash = 278; e.bracketright = 333; e.asciicircum = 469; e.underscore = 500; e.quoteleft = 333; e.a = 444; e.b = 500; e.c = 444; e.d = 500; e.e = 444; e.f = 333; e.g = 500; e.h = 500; e.i = 278; e.j = 278; e.k = 500; e.l = 278; e.m = 778; e.n = 500; e.o = 500; e.p = 500; e.q = 500; e.r = 333; e.s = 389; e.t = 278; e.u = 500; e.v = 500; e.w = 722; e.x = 500; e.y = 500; e.z = 444; e.braceleft = 480; e.bar = 200; e.braceright = 480; e.asciitilde = 541; e.exclamdown = 333; e.cent = 500; e.sterling = 500; e.fraction = 167; e.yen = 500; e.florin = 500; e.section = 500; e.currency = 500; e.quotesingle = 180; e.quotedblleft = 444; e.guillemotleft = 500; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 556; e.fl = 556; e.endash = 500; e.dagger = 500; e.daggerdbl = 500; e.periodcentered = 250; e.paragraph = 453; e.bullet = 350; e.quotesinglbase = 333; e.quotedblbase = 444; e.quotedblright = 444; e.guillemotright = 500; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 444; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 889; e.ordfeminine = 276; e.Lslash = 611; e.Oslash = 722; e.OE = 889; e.ordmasculine = 310; e.ae = 667; e.dotlessi = 278; e.lslash = 278; e.oslash = 500; e.oe = 722; e.germandbls = 500; e.Idieresis = 333; e.eacute = 444; e.abreve = 444; e.uhungarumlaut = 500; e.ecaron = 444; e.Ydieresis = 722; e.divide = 564; e.Yacute = 722; e.Acircumflex = 722; e.aacute = 444; e.Ucircumflex = 722; e.yacute = 500; e.scommaaccent = 389; e.ecircumflex = 444; e.Uring = 722; e.Udieresis = 722; e.aogonek = 444; e.Uacute = 722; e.uogonek = 500; e.Edieresis = 611; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 760; e.Emacron = 611; e.ccaron = 444; e.aring = 444; e.Ncommaaccent = 722; e.lacute = 278; e.agrave = 444; e.Tcommaaccent = 611; e.Cacute = 667; e.atilde = 444; e.Edotaccent = 611; e.scaron = 389; e.scedilla = 389; e.iacute = 278; e.lozenge = 471; e.Rcaron = 667; e.Gcommaaccent = 722; e.ucircumflex = 500; e.acircumflex = 444; e.Amacron = 722; e.rcaron = 333; e.ccedilla = 444; e.Zdotaccent = 611; e.Thorn = 556; e.Omacron = 722; e.Racute = 667; e.Sacute = 556; e.dcaron = 588; e.Umacron = 722; e.uring = 500; e.threesuperior = 300; e.Ograve = 722; e.Agrave = 722; e.Abreve = 722; e.multiply = 564; e.uacute = 500; e.Tcaron = 611; e.partialdiff = 476; e.ydieresis = 500; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 611; e.adieresis = 444; e.edieresis = 444; e.cacute = 444; e.nacute = 500; e.umacron = 500; e.Ncaron = 722; e.Iacute = 333; e.plusminus = 564; e.brokenbar = 200; e.registered = 760; e.Gbreve = 722; e.Idotaccent = 333; e.summation = 600; e.Egrave = 611; e.racute = 333; e.omacron = 500; e.Zacute = 611; e.Zcaron = 611; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 667; e.lcommaaccent = 278; e.tcaron = 326; e.eogonek = 444; e.Uogonek = 722; e.Aacute = 722; e.Adieresis = 722; e.egrave = 444; e.zacute = 444; e.iogonek = 278; e.Oacute = 722; e.oacute = 500; e.amacron = 444; e.sacute = 389; e.idieresis = 278; e.Ocircumflex = 722; e.Ugrave = 722; e.Delta = 612; e.thorn = 500; e.twosuperior = 300; e.Odieresis = 722; e.mu = 500; e.igrave = 278; e.ohungarumlaut = 500; e.Eogonek = 611; e.dcroat = 500; e.threequarters = 750; e.Scedilla = 556; e.lcaron = 344; e.Kcommaaccent = 722; e.Lacute = 611; e.trademark = 980; e.edotaccent = 444; e.Igrave = 333; e.Imacron = 333; e.Lcaron = 611; e.onehalf = 750; e.lessequal = 549; e.ocircumflex = 500; e.ntilde = 500; e.Uhungarumlaut = 722; e.Eacute = 611; e.emacron = 444; e.gbreve = 500; e.onequarter = 750; e.Scaron = 556; e.Scommaaccent = 556; e.Ohungarumlaut = 722; e.degree = 400; e.ograve = 500; e.Ccaron = 667; e.ugrave = 500; e.radical = 453; e.Dcaron = 722; e.rcommaaccent = 333; e.Ntilde = 722; e.otilde = 500; e.Rcommaaccent = 667; e.Lcommaaccent = 611; e.Atilde = 722; e.Aogonek = 722; e.Aring = 722; e.Otilde = 722; e.zdotaccent = 444; e.Ecaron = 611; e.Iogonek = 333; e.kcommaaccent = 500; e.minus = 564; e.Icircumflex = 333; e.ncaron = 500; e.tcommaaccent = 278; e.logicalnot = 564; e.odieresis = 500; e.udieresis = 500; e.notequal = 549; e.gcommaaccent = 500; e.eth = 500; e.zcaron = 444; e.ncommaaccent = 500; e.onesuperior = 300; e.imacron = 278; e.Euro = 500; }); e['Times-Bold'] = getLookupTableFactory(function (e) { e.space = 250; e.exclam = 333; e.quotedbl = 555; e.numbersign = 500; e.dollar = 500; e.percent = 1e3; e.ampersand = 833; e.quoteright = 333; e.parenleft = 333; e.parenright = 333; e.asterisk = 500; e.plus = 570; e.comma = 250; e.hyphen = 333; e.period = 250; e.slash = 278; e.zero = 500; e.one = 500; e.two = 500; e.three = 500; e.four = 500; e.five = 500; e.six = 500; e.seven = 500; e.eight = 500; e.nine = 500; e.colon = 333; e.semicolon = 333; e.less = 570; e.equal = 570; e.greater = 570; e.question = 500; e.at = 930; e.A = 722; e.B = 667; e.C = 722; e.D = 722; e.E = 667; e.F = 611; e.G = 778; e.H = 778; e.I = 389; e.J = 500; e.K = 778; e.L = 667; e.M = 944; e.N = 722; e.O = 778; e.P = 611; e.Q = 778; e.R = 722; e.S = 556; e.T = 667; e.U = 722; e.V = 722; e.W = 1e3; e.X = 722; e.Y = 722; e.Z = 667; e.bracketleft = 333; e.backslash = 278; e.bracketright = 333; e.asciicircum = 581; e.underscore = 500; e.quoteleft = 333; e.a = 500; e.b = 556; e.c = 444; e.d = 556; e.e = 444; e.f = 333; e.g = 500; e.h = 556; e.i = 278; e.j = 333; e.k = 556; e.l = 278; e.m = 833; e.n = 556; e.o = 500; e.p = 556; e.q = 556; e.r = 444; e.s = 389; e.t = 333; e.u = 556; e.v = 500; e.w = 722; e.x = 500; e.y = 500; e.z = 444; e.braceleft = 394; e.bar = 220; e.braceright = 394; e.asciitilde = 520; e.exclamdown = 333; e.cent = 500; e.sterling = 500; e.fraction = 167; e.yen = 500; e.florin = 500; e.section = 500; e.currency = 500; e.quotesingle = 278; e.quotedblleft = 500; e.guillemotleft = 500; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 556; e.fl = 556; e.endash = 500; e.dagger = 500; e.daggerdbl = 500; e.periodcentered = 250; e.paragraph = 540; e.bullet = 350; e.quotesinglbase = 333; e.quotedblbase = 500; e.quotedblright = 500; e.guillemotright = 500; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 500; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 1e3; e.ordfeminine = 300; e.Lslash = 667; e.Oslash = 778; e.OE = 1e3; e.ordmasculine = 330; e.ae = 722; e.dotlessi = 278; e.lslash = 278; e.oslash = 500; e.oe = 722; e.germandbls = 556; e.Idieresis = 389; e.eacute = 444; e.abreve = 500; e.uhungarumlaut = 556; e.ecaron = 444; e.Ydieresis = 722; e.divide = 570; e.Yacute = 722; e.Acircumflex = 722; e.aacute = 500; e.Ucircumflex = 722; e.yacute = 500; e.scommaaccent = 389; e.ecircumflex = 444; e.Uring = 722; e.Udieresis = 722; e.aogonek = 500; e.Uacute = 722; e.uogonek = 556; e.Edieresis = 667; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 747; e.Emacron = 667; e.ccaron = 444; e.aring = 500; e.Ncommaaccent = 722; e.lacute = 278; e.agrave = 500; e.Tcommaaccent = 667; e.Cacute = 722; e.atilde = 500; e.Edotaccent = 667; e.scaron = 389; e.scedilla = 389; e.iacute = 278; e.lozenge = 494; e.Rcaron = 722; e.Gcommaaccent = 778; e.ucircumflex = 556; e.acircumflex = 500; e.Amacron = 722; e.rcaron = 444; e.ccedilla = 444; e.Zdotaccent = 667; e.Thorn = 611; e.Omacron = 778; e.Racute = 722; e.Sacute = 556; e.dcaron = 672; e.Umacron = 722; e.uring = 556; e.threesuperior = 300; e.Ograve = 778; e.Agrave = 722; e.Abreve = 722; e.multiply = 570; e.uacute = 556; e.Tcaron = 667; e.partialdiff = 494; e.ydieresis = 500; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 667; e.adieresis = 500; e.edieresis = 444; e.cacute = 444; e.nacute = 556; e.umacron = 556; e.Ncaron = 722; e.Iacute = 389; e.plusminus = 570; e.brokenbar = 220; e.registered = 747; e.Gbreve = 778; e.Idotaccent = 389; e.summation = 600; e.Egrave = 667; e.racute = 444; e.omacron = 500; e.Zacute = 667; e.Zcaron = 667; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 722; e.lcommaaccent = 278; e.tcaron = 416; e.eogonek = 444; e.Uogonek = 722; e.Aacute = 722; e.Adieresis = 722; e.egrave = 444; e.zacute = 444; e.iogonek = 278; e.Oacute = 778; e.oacute = 500; e.amacron = 500; e.sacute = 389; e.idieresis = 278; e.Ocircumflex = 778; e.Ugrave = 722; e.Delta = 612; e.thorn = 556; e.twosuperior = 300; e.Odieresis = 778; e.mu = 556; e.igrave = 278; e.ohungarumlaut = 500; e.Eogonek = 667; e.dcroat = 556; e.threequarters = 750; e.Scedilla = 556; e.lcaron = 394; e.Kcommaaccent = 778; e.Lacute = 667; e.trademark = 1e3; e.edotaccent = 444; e.Igrave = 389; e.Imacron = 389; e.Lcaron = 667; e.onehalf = 750; e.lessequal = 549; e.ocircumflex = 500; e.ntilde = 556; e.Uhungarumlaut = 722; e.Eacute = 667; e.emacron = 444; e.gbreve = 500; e.onequarter = 750; e.Scaron = 556; e.Scommaaccent = 556; e.Ohungarumlaut = 778; e.degree = 400; e.ograve = 500; e.Ccaron = 722; e.ugrave = 556; e.radical = 549; e.Dcaron = 722; e.rcommaaccent = 444; e.Ntilde = 722; e.otilde = 500; e.Rcommaaccent = 722; e.Lcommaaccent = 667; e.Atilde = 722; e.Aogonek = 722; e.Aring = 722; e.Otilde = 778; e.zdotaccent = 444; e.Ecaron = 667; e.Iogonek = 389; e.kcommaaccent = 556; e.minus = 570; e.Icircumflex = 389; e.ncaron = 556; e.tcommaaccent = 333; e.logicalnot = 570; e.odieresis = 500; e.udieresis = 556; e.notequal = 549; e.gcommaaccent = 500; e.eth = 500; e.zcaron = 444; e.ncommaaccent = 556; e.onesuperior = 300; e.imacron = 278; e.Euro = 500; }); e['Times-BoldItalic'] = getLookupTableFactory(function (e) { e.space = 250; e.exclam = 389; e.quotedbl = 555; e.numbersign = 500; e.dollar = 500; e.percent = 833; e.ampersand = 778; e.quoteright = 333; e.parenleft = 333; e.parenright = 333; e.asterisk = 500; e.plus = 570; e.comma = 250; e.hyphen = 333; e.period = 250; e.slash = 278; e.zero = 500; e.one = 500; e.two = 500; e.three = 500; e.four = 500; e.five = 500; e.six = 500; e.seven = 500; e.eight = 500; e.nine = 500; e.colon = 333; e.semicolon = 333; e.less = 570; e.equal = 570; e.greater = 570; e.question = 500; e.at = 832; e.A = 667; e.B = 667; e.C = 667; e.D = 722; e.E = 667; e.F = 667; e.G = 722; e.H = 778; e.I = 389; e.J = 500; e.K = 667; e.L = 611; e.M = 889; e.N = 722; e.O = 722; e.P = 611; e.Q = 722; e.R = 667; e.S = 556; e.T = 611; e.U = 722; e.V = 667; e.W = 889; e.X = 667; e.Y = 611; e.Z = 611; e.bracketleft = 333; e.backslash = 278; e.bracketright = 333; e.asciicircum = 570; e.underscore = 500; e.quoteleft = 333; e.a = 500; e.b = 500; e.c = 444; e.d = 500; e.e = 444; e.f = 333; e.g = 500; e.h = 556; e.i = 278; e.j = 278; e.k = 500; e.l = 278; e.m = 778; e.n = 556; e.o = 500; e.p = 500; e.q = 500; e.r = 389; e.s = 389; e.t = 278; e.u = 556; e.v = 444; e.w = 667; e.x = 500; e.y = 444; e.z = 389; e.braceleft = 348; e.bar = 220; e.braceright = 348; e.asciitilde = 570; e.exclamdown = 389; e.cent = 500; e.sterling = 500; e.fraction = 167; e.yen = 500; e.florin = 500; e.section = 500; e.currency = 500; e.quotesingle = 278; e.quotedblleft = 500; e.guillemotleft = 500; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 556; e.fl = 556; e.endash = 500; e.dagger = 500; e.daggerdbl = 500; e.periodcentered = 250; e.paragraph = 500; e.bullet = 350; e.quotesinglbase = 333; e.quotedblbase = 500; e.quotedblright = 500; e.guillemotright = 500; e.ellipsis = 1e3; e.perthousand = 1e3; e.questiondown = 500; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 1e3; e.AE = 944; e.ordfeminine = 266; e.Lslash = 611; e.Oslash = 722; e.OE = 944; e.ordmasculine = 300; e.ae = 722; e.dotlessi = 278; e.lslash = 278; e.oslash = 500; e.oe = 722; e.germandbls = 500; e.Idieresis = 389; e.eacute = 444; e.abreve = 500; e.uhungarumlaut = 556; e.ecaron = 444; e.Ydieresis = 611; e.divide = 570; e.Yacute = 611; e.Acircumflex = 667; e.aacute = 500; e.Ucircumflex = 722; e.yacute = 444; e.scommaaccent = 389; e.ecircumflex = 444; e.Uring = 722; e.Udieresis = 722; e.aogonek = 500; e.Uacute = 722; e.uogonek = 556; e.Edieresis = 667; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 747; e.Emacron = 667; e.ccaron = 444; e.aring = 500; e.Ncommaaccent = 722; e.lacute = 278; e.agrave = 500; e.Tcommaaccent = 611; e.Cacute = 667; e.atilde = 500; e.Edotaccent = 667; e.scaron = 389; e.scedilla = 389; e.iacute = 278; e.lozenge = 494; e.Rcaron = 667; e.Gcommaaccent = 722; e.ucircumflex = 556; e.acircumflex = 500; e.Amacron = 667; e.rcaron = 389; e.ccedilla = 444; e.Zdotaccent = 611; e.Thorn = 611; e.Omacron = 722; e.Racute = 667; e.Sacute = 556; e.dcaron = 608; e.Umacron = 722; e.uring = 556; e.threesuperior = 300; e.Ograve = 722; e.Agrave = 667; e.Abreve = 667; e.multiply = 570; e.uacute = 556; e.Tcaron = 611; e.partialdiff = 494; e.ydieresis = 444; e.Nacute = 722; e.icircumflex = 278; e.Ecircumflex = 667; e.adieresis = 500; e.edieresis = 444; e.cacute = 444; e.nacute = 556; e.umacron = 556; e.Ncaron = 722; e.Iacute = 389; e.plusminus = 570; e.brokenbar = 220; e.registered = 747; e.Gbreve = 722; e.Idotaccent = 389; e.summation = 600; e.Egrave = 667; e.racute = 389; e.omacron = 500; e.Zacute = 611; e.Zcaron = 611; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 667; e.lcommaaccent = 278; e.tcaron = 366; e.eogonek = 444; e.Uogonek = 722; e.Aacute = 667; e.Adieresis = 667; e.egrave = 444; e.zacute = 389; e.iogonek = 278; e.Oacute = 722; e.oacute = 500; e.amacron = 500; e.sacute = 389; e.idieresis = 278; e.Ocircumflex = 722; e.Ugrave = 722; e.Delta = 612; e.thorn = 500; e.twosuperior = 300; e.Odieresis = 722; e.mu = 576; e.igrave = 278; e.ohungarumlaut = 500; e.Eogonek = 667; e.dcroat = 500; e.threequarters = 750; e.Scedilla = 556; e.lcaron = 382; e.Kcommaaccent = 667; e.Lacute = 611; e.trademark = 1e3; e.edotaccent = 444; e.Igrave = 389; e.Imacron = 389; e.Lcaron = 611; e.onehalf = 750; e.lessequal = 549; e.ocircumflex = 500; e.ntilde = 556; e.Uhungarumlaut = 722; e.Eacute = 667; e.emacron = 444; e.gbreve = 500; e.onequarter = 750; e.Scaron = 556; e.Scommaaccent = 556; e.Ohungarumlaut = 722; e.degree = 400; e.ograve = 500; e.Ccaron = 667; e.ugrave = 556; e.radical = 549; e.Dcaron = 722; e.rcommaaccent = 389; e.Ntilde = 722; e.otilde = 500; e.Rcommaaccent = 667; e.Lcommaaccent = 611; e.Atilde = 667; e.Aogonek = 667; e.Aring = 667; e.Otilde = 722; e.zdotaccent = 389; e.Ecaron = 667; e.Iogonek = 389; e.kcommaaccent = 500; e.minus = 606; e.Icircumflex = 389; e.ncaron = 556; e.tcommaaccent = 278; e.logicalnot = 606; e.odieresis = 500; e.udieresis = 556; e.notequal = 549; e.gcommaaccent = 500; e.eth = 500; e.zcaron = 389; e.ncommaaccent = 556; e.onesuperior = 300; e.imacron = 278; e.Euro = 500; }); e['Times-Italic'] = getLookupTableFactory(function (e) { e.space = 250; e.exclam = 333; e.quotedbl = 420; e.numbersign = 500; e.dollar = 500; e.percent = 833; e.ampersand = 778; e.quoteright = 333; e.parenleft = 333; e.parenright = 333; e.asterisk = 500; e.plus = 675; e.comma = 250; e.hyphen = 333; e.period = 250; e.slash = 278; e.zero = 500; e.one = 500; e.two = 500; e.three = 500; e.four = 500; e.five = 500; e.six = 500; e.seven = 500; e.eight = 500; e.nine = 500; e.colon = 333; e.semicolon = 333; e.less = 675; e.equal = 675; e.greater = 675; e.question = 500; e.at = 920; e.A = 611; e.B = 611; e.C = 667; e.D = 722; e.E = 611; e.F = 611; e.G = 722; e.H = 722; e.I = 333; e.J = 444; e.K = 667; e.L = 556; e.M = 833; e.N = 667; e.O = 722; e.P = 611; e.Q = 722; e.R = 611; e.S = 500; e.T = 556; e.U = 722; e.V = 611; e.W = 833; e.X = 611; e.Y = 556; e.Z = 556; e.bracketleft = 389; e.backslash = 278; e.bracketright = 389; e.asciicircum = 422; e.underscore = 500; e.quoteleft = 333; e.a = 500; e.b = 500; e.c = 444; e.d = 500; e.e = 444; e.f = 278; e.g = 500; e.h = 500; e.i = 278; e.j = 278; e.k = 444; e.l = 278; e.m = 722; e.n = 500; e.o = 500; e.p = 500; e.q = 500; e.r = 389; e.s = 389; e.t = 278; e.u = 500; e.v = 444; e.w = 667; e.x = 444; e.y = 444; e.z = 389; e.braceleft = 400; e.bar = 275; e.braceright = 400; e.asciitilde = 541; e.exclamdown = 389; e.cent = 500; e.sterling = 500; e.fraction = 167; e.yen = 500; e.florin = 500; e.section = 500; e.currency = 500; e.quotesingle = 214; e.quotedblleft = 556; e.guillemotleft = 500; e.guilsinglleft = 333; e.guilsinglright = 333; e.fi = 500; e.fl = 500; e.endash = 500; e.dagger = 500; e.daggerdbl = 500; e.periodcentered = 250; e.paragraph = 523; e.bullet = 350; e.quotesinglbase = 333; e.quotedblbase = 556; e.quotedblright = 556; e.guillemotright = 500; e.ellipsis = 889; e.perthousand = 1e3; e.questiondown = 500; e.grave = 333; e.acute = 333; e.circumflex = 333; e.tilde = 333; e.macron = 333; e.breve = 333; e.dotaccent = 333; e.dieresis = 333; e.ring = 333; e.cedilla = 333; e.hungarumlaut = 333; e.ogonek = 333; e.caron = 333; e.emdash = 889; e.AE = 889; e.ordfeminine = 276; e.Lslash = 556; e.Oslash = 722; e.OE = 944; e.ordmasculine = 310; e.ae = 667; e.dotlessi = 278; e.lslash = 278; e.oslash = 500; e.oe = 667; e.germandbls = 500; e.Idieresis = 333; e.eacute = 444; e.abreve = 500; e.uhungarumlaut = 500; e.ecaron = 444; e.Ydieresis = 556; e.divide = 675; e.Yacute = 556; e.Acircumflex = 611; e.aacute = 500; e.Ucircumflex = 722; e.yacute = 444; e.scommaaccent = 389; e.ecircumflex = 444; e.Uring = 722; e.Udieresis = 722; e.aogonek = 500; e.Uacute = 722; e.uogonek = 500; e.Edieresis = 611; e.Dcroat = 722; e.commaaccent = 250; e.copyright = 760; e.Emacron = 611; e.ccaron = 444; e.aring = 500; e.Ncommaaccent = 667; e.lacute = 278; e.agrave = 500; e.Tcommaaccent = 556; e.Cacute = 667; e.atilde = 500; e.Edotaccent = 611; e.scaron = 389; e.scedilla = 389; e.iacute = 278; e.lozenge = 471; e.Rcaron = 611; e.Gcommaaccent = 722; e.ucircumflex = 500; e.acircumflex = 500; e.Amacron = 611; e.rcaron = 389; e.ccedilla = 444; e.Zdotaccent = 556; e.Thorn = 611; e.Omacron = 722; e.Racute = 611; e.Sacute = 500; e.dcaron = 544; e.Umacron = 722; e.uring = 500; e.threesuperior = 300; e.Ograve = 722; e.Agrave = 611; e.Abreve = 611; e.multiply = 675; e.uacute = 500; e.Tcaron = 556; e.partialdiff = 476; e.ydieresis = 444; e.Nacute = 667; e.icircumflex = 278; e.Ecircumflex = 611; e.adieresis = 500; e.edieresis = 444; e.cacute = 444; e.nacute = 500; e.umacron = 500; e.Ncaron = 667; e.Iacute = 333; e.plusminus = 675; e.brokenbar = 275; e.registered = 760; e.Gbreve = 722; e.Idotaccent = 333; e.summation = 600; e.Egrave = 611; e.racute = 389; e.omacron = 500; e.Zacute = 556; e.Zcaron = 556; e.greaterequal = 549; e.Eth = 722; e.Ccedilla = 667; e.lcommaaccent = 278; e.tcaron = 300; e.eogonek = 444; e.Uogonek = 722; e.Aacute = 611; e.Adieresis = 611; e.egrave = 444; e.zacute = 389; e.iogonek = 278; e.Oacute = 722; e.oacute = 500; e.amacron = 500; e.sacute = 389; e.idieresis = 278; e.Ocircumflex = 722; e.Ugrave = 722; e.Delta = 612; e.thorn = 500; e.twosuperior = 300; e.Odieresis = 722; e.mu = 500; e.igrave = 278; e.ohungarumlaut = 500; e.Eogonek = 611; e.dcroat = 500; e.threequarters = 750; e.Scedilla = 500; e.lcaron = 300; e.Kcommaaccent = 667; e.Lacute = 556; e.trademark = 980; e.edotaccent = 444; e.Igrave = 333; e.Imacron = 333; e.Lcaron = 611; e.onehalf = 750; e.lessequal = 549; e.ocircumflex = 500; e.ntilde = 500; e.Uhungarumlaut = 722; e.Eacute = 611; e.emacron = 444; e.gbreve = 500; e.onequarter = 750; e.Scaron = 500; e.Scommaaccent = 500; e.Ohungarumlaut = 722; e.degree = 400; e.ograve = 500; e.Ccaron = 667; e.ugrave = 500; e.radical = 453; e.Dcaron = 722; e.rcommaaccent = 389; e.Ntilde = 667; e.otilde = 500; e.Rcommaaccent = 611; e.Lcommaaccent = 556; e.Atilde = 611; e.Aogonek = 611; e.Aring = 611; e.Otilde = 722; e.zdotaccent = 389; e.Ecaron = 611; e.Iogonek = 333; e.kcommaaccent = 444; e.minus = 675; e.Icircumflex = 333; e.ncaron = 500; e.tcommaaccent = 278; e.logicalnot = 675; e.odieresis = 500; e.udieresis = 500; e.notequal = 549; e.gcommaaccent = 500; e.eth = 500; e.zcaron = 389; e.ncommaaccent = 500; e.onesuperior = 300; e.imacron = 278; e.Euro = 500; }); e.ZapfDingbats = getLookupTableFactory(function (e) { e.space = 278; e.a1 = 974; e.a2 = 961; e.a202 = 974; e.a3 = 980; e.a4 = 719; e.a5 = 789; e.a119 = 790; e.a118 = 791; e.a117 = 690; e.a11 = 960; e.a12 = 939; e.a13 = 549; e.a14 = 855; e.a15 = 911; e.a16 = 933; e.a105 = 911; e.a17 = 945; e.a18 = 974; e.a19 = 755; e.a20 = 846; e.a21 = 762; e.a22 = 761; e.a23 = 571; e.a24 = 677; e.a25 = 763; e.a26 = 760; e.a27 = 759; e.a28 = 754; e.a6 = 494; e.a7 = 552; e.a8 = 537; e.a9 = 577; e.a10 = 692; e.a29 = 786; e.a30 = 788; e.a31 = 788; e.a32 = 790; e.a33 = 793; e.a34 = 794; e.a35 = 816; e.a36 = 823; e.a37 = 789; e.a38 = 841; e.a39 = 823; e.a40 = 833; e.a41 = 816; e.a42 = 831; e.a43 = 923; e.a44 = 744; e.a45 = 723; e.a46 = 749; e.a47 = 790; e.a48 = 792; e.a49 = 695; e.a50 = 776; e.a51 = 768; e.a52 = 792; e.a53 = 759; e.a54 = 707; e.a55 = 708; e.a56 = 682; e.a57 = 701; e.a58 = 826; e.a59 = 815; e.a60 = 789; e.a61 = 789; e.a62 = 707; e.a63 = 687; e.a64 = 696; e.a65 = 689; e.a66 = 786; e.a67 = 787; e.a68 = 713; e.a69 = 791; e.a70 = 785; e.a71 = 791; e.a72 = 873; e.a73 = 761; e.a74 = 762; e.a203 = 762; e.a75 = 759; e.a204 = 759; e.a76 = 892; e.a77 = 892; e.a78 = 788; e.a79 = 784; e.a81 = 438; e.a82 = 138; e.a83 = 277; e.a84 = 415; e.a97 = 392; e.a98 = 392; e.a99 = 668; e.a100 = 668; e.a89 = 390; e.a90 = 390; e.a93 = 317; e.a94 = 317; e.a91 = 276; e.a92 = 276; e.a205 = 509; e.a85 = 509; e.a206 = 410; e.a86 = 410; e.a87 = 234; e.a88 = 234; e.a95 = 334; e.a96 = 334; e.a101 = 732; e.a102 = 544; e.a103 = 544; e.a104 = 910; e.a106 = 667; e.a107 = 760; e.a108 = 760; e.a112 = 776; e.a111 = 595; e.a110 = 694; e.a109 = 626; e.a120 = 788; e.a121 = 788; e.a122 = 788; e.a123 = 788; e.a124 = 788; e.a125 = 788; e.a126 = 788; e.a127 = 788; e.a128 = 788; e.a129 = 788; e.a130 = 788; e.a131 = 788; e.a132 = 788; e.a133 = 788; e.a134 = 788; e.a135 = 788; e.a136 = 788; e.a137 = 788; e.a138 = 788; e.a139 = 788; e.a140 = 788; e.a141 = 788; e.a142 = 788; e.a143 = 788; e.a144 = 788; e.a145 = 788; e.a146 = 788; e.a147 = 788; e.a148 = 788; e.a149 = 788; e.a150 = 788; e.a151 = 788; e.a152 = 788; e.a153 = 788; e.a154 = 788; e.a155 = 788; e.a156 = 788; e.a157 = 788; e.a158 = 788; e.a159 = 788; e.a160 = 894; e.a161 = 838; e.a163 = 1016; e.a164 = 458; e.a196 = 748; e.a165 = 924; e.a192 = 748; e.a166 = 918; e.a167 = 927; e.a168 = 928; e.a169 = 928; e.a170 = 834; e.a171 = 873; e.a172 = 828; e.a173 = 924; e.a162 = 924; e.a174 = 917; e.a175 = 930; e.a176 = 931; e.a177 = 463; e.a178 = 883; e.a179 = 836; e.a193 = 836; e.a180 = 867; e.a199 = 867; e.a181 = 696; e.a200 = 696; e.a182 = 874; e.a201 = 874; e.a183 = 760; e.a184 = 946; e.a197 = 771; e.a185 = 865; e.a194 = 771; e.a198 = 888; e.a186 = 967; e.a195 = 888; e.a187 = 831; e.a188 = 873; e.a189 = 927; e.a190 = 970; e.a191 = 918; }); }), ia = getLookupTableFactory(function (e) { e.Courier = { ascent: 629, descent: -157, capHeight: 562, xHeight: -426 }; e['Courier-Bold'] = { ascent: 629, descent: -157, capHeight: 562, xHeight: 439, }; e['Courier-Oblique'] = { ascent: 629, descent: -157, capHeight: 562, xHeight: 426, }; e['Courier-BoldOblique'] = { ascent: 629, descent: -157, capHeight: 562, xHeight: 426, }; e.Helvetica = { ascent: 718, descent: -207, capHeight: 718, xHeight: 523 }; e['Helvetica-Bold'] = { ascent: 718, descent: -207, capHeight: 718, xHeight: 532, }; e['Helvetica-Oblique'] = { ascent: 718, descent: -207, capHeight: 718, xHeight: 523, }; e['Helvetica-BoldOblique'] = { ascent: 718, descent: -207, capHeight: 718, xHeight: 532, }; e['Times-Roman'] = { ascent: 683, descent: -217, capHeight: 662, xHeight: 450, }; e['Times-Bold'] = { ascent: 683, descent: -217, capHeight: 676, xHeight: 461, }; e['Times-Italic'] = { ascent: 683, descent: -217, capHeight: 653, xHeight: 441, }; e['Times-BoldItalic'] = { ascent: 683, descent: -217, capHeight: 669, xHeight: 462, }; e.Symbol = { ascent: Math.NaN, descent: Math.NaN, capHeight: Math.NaN, xHeight: Math.NaN, }; e.ZapfDingbats = { ascent: Math.NaN, descent: Math.NaN, capHeight: Math.NaN, xHeight: Math.NaN, }; }); class GlyfTable { constructor({ glyfTable: e, isGlyphLocationsLong: t, locaTable: i, numGlyphs: a, }) { this.glyphs = []; const r = new DataView(i.buffer, i.byteOffset, i.byteLength), s = new DataView(e.buffer, e.byteOffset, e.byteLength), n = t ? 4 : 2; let o = t ? r.getUint32(0) : 2 * r.getUint16(0), g = 0; for (let e = 0; e < a; e++) { g += n; const e = t ? r.getUint32(g) : 2 * r.getUint16(g); if (e === o) { this.glyphs.push(new Glyph({})); continue; } const i = Glyph.parse(o, s); this.glyphs.push(i); o = e; } } getSize() { return this.glyphs.reduce((e, t) => e + ((t.getSize() + 3) & -4), 0); } write() { const e = this.getSize(), t = new DataView(new ArrayBuffer(e)), i = e > 131070, a = i ? 4 : 2, r = new DataView(new ArrayBuffer((this.glyphs.length + 1) * a)); i ? r.setUint32(0, 0) : r.setUint16(0, 0); let s = 0, n = 0; for (const e of this.glyphs) { s += e.write(s, t); s = (s + 3) & -4; n += a; i ? r.setUint32(n, s) : r.setUint16(n, s >> 1); } return { isLocationLong: i, loca: new Uint8Array(r.buffer), glyf: new Uint8Array(t.buffer), }; } scale(e) { for (let t = 0, i = this.glyphs.length; t < i; t++) this.glyphs[t].scale(e[t]); } } class Glyph { constructor({ header: e = null, simple: t = null, composites: i = null }) { this.header = e; this.simple = t; this.composites = i; } static parse(e, t) { const [i, a] = GlyphHeader.parse(e, t); e += i; if (a.numberOfContours < 0) { const i = []; for (;;) { const [a, r] = CompositeGlyph.parse(e, t); e += a; i.push(r); if (!(32 & r.flags)) break; } return new Glyph({ header: a, composites: i }); } const r = SimpleGlyph.parse(e, t, a.numberOfContours); return new Glyph({ header: a, simple: r }); } getSize() { if (!this.header) return 0; const e = this.simple ? this.simple.getSize() : this.composites.reduce((e, t) => e + t.getSize(), 0); return this.header.getSize() + e; } write(e, t) { if (!this.header) return 0; const i = e; e += this.header.write(e, t); if (this.simple) e += this.simple.write(e, t); else for (const i of this.composites) e += i.write(e, t); return e - i; } scale(e) { if (!this.header) return; const t = (this.header.xMin + this.header.xMax) / 2; this.header.scale(t, e); if (this.simple) this.simple.scale(t, e); else for (const i of this.composites) i.scale(t, e); } } class GlyphHeader { constructor({ numberOfContours: e, xMin: t, yMin: i, xMax: a, yMax: r }) { this.numberOfContours = e; this.xMin = t; this.yMin = i; this.xMax = a; this.yMax = r; } static parse(e, t) { return [ 10, new GlyphHeader({ numberOfContours: t.getInt16(e), xMin: t.getInt16(e + 2), yMin: t.getInt16(e + 4), xMax: t.getInt16(e + 6), yMax: t.getInt16(e + 8), }), ]; } getSize() { return 10; } write(e, t) { t.setInt16(e, this.numberOfContours); t.setInt16(e + 2, this.xMin); t.setInt16(e + 4, this.yMin); t.setInt16(e + 6, this.xMax); t.setInt16(e + 8, this.yMax); return 10; } scale(e, t) { this.xMin = Math.round(e + (this.xMin - e) * t); this.xMax = Math.round(e + (this.xMax - e) * t); } } class Contour { constructor({ flags: e, xCoordinates: t, yCoordinates: i }) { this.xCoordinates = t; this.yCoordinates = i; this.flags = e; } } class SimpleGlyph { constructor({ contours: e, instructions: t }) { this.contours = e; this.instructions = t; } static parse(e, t, i) { const a = []; for (let r = 0; r < i; r++) { const i = t.getUint16(e); e += 2; a.push(i); } const r = a[i - 1] + 1, s = t.getUint16(e); e += 2; const n = new Uint8Array(t).slice(e, e + s); e += s; const o = []; for (let i = 0; i < r; e++, i++) { let a = t.getUint8(e); o.push(a); if (8 & a) { const r = t.getUint8(++e); a ^= 8; for (let e = 0; e < r; e++) o.push(a); i += r; } } const g = []; let c = [], C = [], h = []; const l = []; let Q = 0, E = 0; for (let i = 0; i < r; i++) { const r = o[i]; if (2 & r) { const i = t.getUint8(e++); E += 16 & r ? i : -i; c.push(E); } else if (16 & r) c.push(E); else { E += t.getInt16(e); e += 2; c.push(E); } if (a[Q] === i) { Q++; g.push(c); c = []; } } E = 0; Q = 0; for (let i = 0; i < r; i++) { const r = o[i]; if (4 & r) { const i = t.getUint8(e++); E += 32 & r ? i : -i; C.push(E); } else if (32 & r) C.push(E); else { E += t.getInt16(e); e += 2; C.push(E); } h.push((1 & r) | (64 & r)); if (a[Q] === i) { c = g[Q]; Q++; l.push(new Contour({ flags: h, xCoordinates: c, yCoordinates: C })); C = []; h = []; } } return new SimpleGlyph({ contours: l, instructions: n }); } getSize() { let e = 2 * this.contours.length + 2 + this.instructions.length, t = 0, i = 0; for (const a of this.contours) { e += a.flags.length; for (let r = 0, s = a.xCoordinates.length; r < s; r++) { const s = a.xCoordinates[r], n = a.yCoordinates[r]; let o = Math.abs(s - t); o > 255 ? (e += 2) : o > 0 && (e += 1); t = s; o = Math.abs(n - i); o > 255 ? (e += 2) : o > 0 && (e += 1); i = n; } } return e; } write(e, t) { const i = e, a = [], r = [], s = []; let n = 0, o = 0; for (const i of this.contours) { for (let e = 0, t = i.xCoordinates.length; e < t; e++) { let t = i.flags[e]; const g = i.xCoordinates[e]; let c = g - n; if (0 === c) { t |= 16; a.push(0); } else { const e = Math.abs(c); if (e <= 255) { t |= c >= 0 ? 18 : 2; a.push(e); } else a.push(c); } n = g; const C = i.yCoordinates[e]; c = C - o; if (0 === c) { t |= 32; r.push(0); } else { const e = Math.abs(c); if (e <= 255) { t |= c >= 0 ? 36 : 4; r.push(e); } else r.push(c); } o = C; s.push(t); } t.setUint16(e, a.length - 1); e += 2; } t.setUint16(e, this.instructions.length); e += 2; if (this.instructions.length) { new Uint8Array(t.buffer, 0, t.buffer.byteLength).set( this.instructions, e, ); e += this.instructions.length; } for (const i of s) t.setUint8(e++, i); for (let i = 0, r = a.length; i < r; i++) { const r = a[i], n = s[i]; if (2 & n) t.setUint8(e++, r); else if (!(16 & n)) { t.setInt16(e, r); e += 2; } } for (let i = 0, a = r.length; i < a; i++) { const a = r[i], n = s[i]; if (4 & n) t.setUint8(e++, a); else if (!(32 & n)) { t.setInt16(e, a); e += 2; } } return e - i; } scale(e, t) { for (const i of this.contours) if (0 !== i.xCoordinates.length) for (let a = 0, r = i.xCoordinates.length; a < r; a++) i.xCoordinates[a] = Math.round(e + (i.xCoordinates[a] - e) * t); } } class CompositeGlyph { constructor({ flags: e, glyphIndex: t, argument1: i, argument2: a, transf: r, instructions: s, }) { this.flags = e; this.glyphIndex = t; this.argument1 = i; this.argument2 = a; this.transf = r; this.instructions = s; } static parse(e, t) { const i = e, a = []; let r = t.getUint16(e); const s = t.getUint16(e + 2); e += 4; let n, o; if (1 & r) { if (2 & r) { n = t.getInt16(e); o = t.getInt16(e + 2); } else { n = t.getUint16(e); o = t.getUint16(e + 2); } e += 4; r ^= 1; } else { if (2 & r) { n = t.getInt8(e); o = t.getInt8(e + 1); } else { n = t.getUint8(e); o = t.getUint8(e + 1); } e += 2; } if (8 & r) { a.push(t.getUint16(e)); e += 2; } else if (64 & r) { a.push(t.getUint16(e), t.getUint16(e + 2)); e += 4; } else if (128 & r) { a.push( t.getUint16(e), t.getUint16(e + 2), t.getUint16(e + 4), t.getUint16(e + 6), ); e += 8; } let g = null; if (256 & r) { const i = t.getUint16(e); e += 2; g = new Uint8Array(t).slice(e, e + i); e += i; } return [ e - i, new CompositeGlyph({ flags: r, glyphIndex: s, argument1: n, argument2: o, transf: a, instructions: g, }), ]; } getSize() { let e = 4 + 2 * this.transf.length; 256 & this.flags && (e += 2 + this.instructions.length); e += 2; 2 & this.flags ? (this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127) || (e += 2) : (this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255) || (e += 2); return e; } write(e, t) { const i = e; 2 & this.flags ? (this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127) || (this.flags |= 1) : (this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255) || (this.flags |= 1); t.setUint16(e, this.flags); t.setUint16(e + 2, this.glyphIndex); e += 4; if (1 & this.flags) { if (2 & this.flags) { t.setInt16(e, this.argument1); t.setInt16(e + 2, this.argument2); } else { t.setUint16(e, this.argument1); t.setUint16(e + 2, this.argument2); } e += 4; } else { t.setUint8(e, this.argument1); t.setUint8(e + 1, this.argument2); e += 2; } if (256 & this.flags) { t.setUint16(e, this.instructions.length); e += 2; if (this.instructions.length) { new Uint8Array(t.buffer, 0, t.buffer.byteLength).set( this.instructions, e, ); e += this.instructions.length; } } return e - i; } scale(e, t) {} } function writeInt16(e, t, i) { e[t] = (i >> 8) & 255; e[t + 1] = 255 & i; } function writeInt32(e, t, i) { e[t] = (i >> 24) & 255; e[t + 1] = (i >> 16) & 255; e[t + 2] = (i >> 8) & 255; e[t + 3] = 255 & i; } function writeData(e, t, i) { if (i instanceof Uint8Array) e.set(i, t); else if ('string' == typeof i) for (let a = 0, r = i.length; a < r; a++) e[t++] = 255 & i.charCodeAt(a); else for (const a of i) e[t++] = 255 & a; } class OpenTypeFileBuilder { constructor(e) { this.sfnt = e; this.tables = Object.create(null); } static getSearchParams(e, t) { let i = 1, a = 0; for (; (i ^ e) > i; ) { i <<= 1; a++; } const r = i * t; return { range: r, entry: a, rangeShift: t * e - r }; } toArray() { let e = this.sfnt; const t = this.tables, i = Object.keys(t); i.sort(); const a = i.length; let r, s, n, o, g, c = 12 + 16 * a; const C = [c]; for (r = 0; r < a; r++) { o = t[i[r]]; c += ((o.length + 3) & -4) >>> 0; C.push(c); } const h = new Uint8Array(c); for (r = 0; r < a; r++) { o = t[i[r]]; writeData(h, C[r], o); } 'true' === e && (e = string32(65536)); h[0] = 255 & e.charCodeAt(0); h[1] = 255 & e.charCodeAt(1); h[2] = 255 & e.charCodeAt(2); h[3] = 255 & e.charCodeAt(3); writeInt16(h, 4, a); const l = OpenTypeFileBuilder.getSearchParams(a, 16); writeInt16(h, 6, l.range); writeInt16(h, 8, l.entry); writeInt16(h, 10, l.rangeShift); c = 12; for (r = 0; r < a; r++) { g = i[r]; h[c] = 255 & g.charCodeAt(0); h[c + 1] = 255 & g.charCodeAt(1); h[c + 2] = 255 & g.charCodeAt(2); h[c + 3] = 255 & g.charCodeAt(3); let e = 0; for (s = C[r], n = C[r + 1]; s < n; s += 4) { e = (e + readUint32(h, s)) >>> 0; } writeInt32(h, c + 4, e); writeInt32(h, c + 8, C[r]); writeInt32(h, c + 12, t[g].length); c += 16; } return h; } addTable(e, t) { if (e in this.tables) throw new Error('Table ' + e + ' already exists'); this.tables[e] = t; } } const aa = [4], ra = [5], sa = [6], na = [7], oa = [8], ga = [12, 35], Ia = [14], ca = [21], Ca = [22], ha = [30], la = [31]; class Type1CharString { constructor() { this.width = 0; this.lsb = 0; this.flexing = !1; this.output = []; this.stack = []; } convert(e, t, i) { const a = e.length; let r, s, n, o = !1; for (let g = 0; g < a; g++) { let a = e[g]; if (a < 32) { 12 === a && (a = (a << 8) + e[++g]); switch (a) { case 1: case 3: case 9: case 3072: case 3073: case 3074: case 3105: this.stack = []; break; case 4: if (this.flexing) { if (this.stack.length < 1) { o = !0; break; } const e = this.stack.pop(); this.stack.push(0, e); break; } o = this.executeCommand(1, aa); break; case 5: o = this.executeCommand(2, ra); break; case 6: o = this.executeCommand(1, sa); break; case 7: o = this.executeCommand(1, na); break; case 8: o = this.executeCommand(6, oa); break; case 10: if (this.stack.length < 1) { o = !0; break; } n = this.stack.pop(); if (!t[n]) { o = !0; break; } o = this.convert(t[n], t, i); break; case 11: return o; case 13: if (this.stack.length < 2) { o = !0; break; } r = this.stack.pop(); s = this.stack.pop(); this.lsb = s; this.width = r; this.stack.push(r, s); o = this.executeCommand(2, Ca); break; case 14: this.output.push(Ia[0]); break; case 21: if (this.flexing) break; o = this.executeCommand(2, ca); break; case 22: if (this.flexing) { this.stack.push(0); break; } o = this.executeCommand(1, Ca); break; case 30: o = this.executeCommand(4, ha); break; case 31: o = this.executeCommand(4, la); break; case 3078: if (i) { const e = this.stack.at(-5); this.seac = this.stack.splice(-4, 4); this.seac[0] += this.lsb - e; o = this.executeCommand(0, Ia); } else o = this.executeCommand(4, Ia); break; case 3079: if (this.stack.length < 4) { o = !0; break; } this.stack.pop(); r = this.stack.pop(); const e = this.stack.pop(); s = this.stack.pop(); this.lsb = s; this.width = r; this.stack.push(r, s, e); o = this.executeCommand(3, ca); break; case 3084: if (this.stack.length < 2) { o = !0; break; } const g = this.stack.pop(), c = this.stack.pop(); this.stack.push(c / g); break; case 3088: if (this.stack.length < 2) { o = !0; break; } n = this.stack.pop(); const C = this.stack.pop(); if (0 === n && 3 === C) { const e = this.stack.splice(-17, 17); this.stack.push( e[2] + e[0], e[3] + e[1], e[4], e[5], e[6], e[7], e[8], e[9], e[10], e[11], e[12], e[13], e[14], ); o = this.executeCommand(13, ga, !0); this.flexing = !1; this.stack.push(e[15], e[16]); } else 1 === n && 0 === C && (this.flexing = !0); break; case 3089: break; default: warn('Unknown type 1 charstring command of "' + a + '"'); } if (o) break; } else { a <= 246 ? (a -= 139) : (a = a <= 250 ? 256 * (a - 247) + e[++g] + 108 : a <= 254 ? -256 * (a - 251) - e[++g] - 108 : ((255 & e[++g]) << 24) | ((255 & e[++g]) << 16) | ((255 & e[++g]) << 8) | ((255 & e[++g]) << 0)); this.stack.push(a); } } return o; } executeCommand(e, t, i) { const a = this.stack.length; if (e > a) return !0; const r = a - e; for (let e = r; e < a; e++) { let t = this.stack[e]; if (Number.isInteger(t)) this.output.push(28, (t >> 8) & 255, 255 & t); else { t = (65536 * t) | 0; this.output.push( 255, (t >> 24) & 255, (t >> 16) & 255, (t >> 8) & 255, 255 & t, ); } } this.output.push(...t); i ? this.stack.splice(r, e) : (this.stack.length = 0); return !1; } } function isHexDigit(e) { return (e >= 48 && e <= 57) || (e >= 65 && e <= 70) || (e >= 97 && e <= 102); } function decrypt(e, t, i) { if (i >= e.length) return new Uint8Array(0); let a, r, s = 0 | t; for (a = 0; a < i; a++) s = (52845 * (e[a] + s) + 22719) & 65535; const n = e.length - i, o = new Uint8Array(n); for (a = i, r = 0; r < n; a++, r++) { const t = e[a]; o[r] = t ^ (s >> 8); s = (52845 * (t + s) + 22719) & 65535; } return o; } function isSpecial(e) { return ( 47 === e || 91 === e || 93 === e || 123 === e || 125 === e || 40 === e || 41 === e ); } class Type1Parser { constructor(e, t, i) { if (t) { const t = e.getBytes(), i = !( (isHexDigit(t[0]) || isWhiteSpace(t[0])) && isHexDigit(t[1]) && isHexDigit(t[2]) && isHexDigit(t[3]) && isHexDigit(t[4]) && isHexDigit(t[5]) && isHexDigit(t[6]) && isHexDigit(t[7]) ); e = new Stream( i ? decrypt(t, 55665, 4) : (function decryptAscii(e, t, i) { let a = 0 | t; const r = e.length, s = new Uint8Array(r >>> 1); let n, o; for (n = 0, o = 0; n < r; n++) { const t = e[n]; if (!isHexDigit(t)) continue; n++; let i; for (; n < r && !isHexDigit((i = e[n])); ) n++; if (n < r) { const e = parseInt(String.fromCharCode(t, i), 16); s[o++] = e ^ (a >> 8); a = (52845 * (e + a) + 22719) & 65535; } } return s.slice(i, o); })(t, 55665, 4), ); } this.seacAnalysisEnabled = !!i; this.stream = e; this.nextChar(); } readNumberArray() { this.getToken(); const e = []; for (;;) { const t = this.getToken(); if (null === t || ']' === t || '}' === t) break; e.push(parseFloat(t || 0)); } return e; } readNumber() { const e = this.getToken(); return parseFloat(e || 0); } readInt() { const e = this.getToken(); return 0 | parseInt(e || 0, 10); } readBoolean() { return 'true' === this.getToken() ? 1 : 0; } nextChar() { return (this.currentChar = this.stream.getByte()); } prevChar() { this.stream.skip(-2); return (this.currentChar = this.stream.getByte()); } getToken() { let e = !1, t = this.currentChar; for (;;) { if (-1 === t) return null; if (e) (10 !== t && 13 !== t) || (e = !1); else if (37 === t) e = !0; else if (!isWhiteSpace(t)) break; t = this.nextChar(); } if (isSpecial(t)) { this.nextChar(); return String.fromCharCode(t); } let i = ''; do { i += String.fromCharCode(t); t = this.nextChar(); } while (t >= 0 && !isWhiteSpace(t) && !isSpecial(t)); return i; } readCharStrings(e, t) { return -1 === t ? e : decrypt(e, 4330, t); } extractFontProgram(e) { const t = this.stream, i = [], a = [], r = Object.create(null); r.lenIV = 4; const s = { subrs: [], charstrings: [], properties: { privateData: r } }; let n, o, g, c; for (; null !== (n = this.getToken()); ) if ('/' === n) { n = this.getToken(); switch (n) { case 'CharStrings': this.getToken(); this.getToken(); this.getToken(); this.getToken(); for (;;) { n = this.getToken(); if (null === n || 'end' === n) break; if ('/' !== n) continue; const e = this.getToken(); o = this.readInt(); this.getToken(); g = o > 0 ? t.getBytes(o) : new Uint8Array(0); c = s.properties.privateData.lenIV; const i = this.readCharStrings(g, c); this.nextChar(); n = this.getToken(); 'noaccess' === n ? this.getToken() : '/' === n && this.prevChar(); a.push({ glyph: e, encoded: i }); } break; case 'Subrs': this.readInt(); this.getToken(); for (; 'dup' === this.getToken(); ) { const e = this.readInt(); o = this.readInt(); this.getToken(); g = o > 0 ? t.getBytes(o) : new Uint8Array(0); c = s.properties.privateData.lenIV; const a = this.readCharStrings(g, c); this.nextChar(); n = this.getToken(); 'noaccess' === n && this.getToken(); i[e] = a; } break; case 'BlueValues': case 'OtherBlues': case 'FamilyBlues': case 'FamilyOtherBlues': const e = this.readNumberArray(); e.length > 0 && e.length, 0; break; case 'StemSnapH': case 'StemSnapV': s.properties.privateData[n] = this.readNumberArray(); break; case 'StdHW': case 'StdVW': s.properties.privateData[n] = this.readNumberArray()[0]; break; case 'BlueShift': case 'lenIV': case 'BlueFuzz': case 'BlueScale': case 'LanguageGroup': s.properties.privateData[n] = this.readNumber(); break; case 'ExpansionFactor': s.properties.privateData[n] = this.readNumber() || 0.06; break; case 'ForceBold': s.properties.privateData[n] = this.readBoolean(); } } for (const { encoded: t, glyph: r } of a) { const a = new Type1CharString(), n = a.convert(t, i, this.seacAnalysisEnabled); let o = a.output; n && (o = [14]); const g = { glyphName: r, charstring: o, width: a.width, lsb: a.lsb, seac: a.seac, }; '.notdef' === r ? s.charstrings.unshift(g) : s.charstrings.push(g); if (e.builtInEncoding) { const t = e.builtInEncoding.indexOf(r); t > -1 && void 0 === e.widths[t] && t >= e.firstChar && t <= e.lastChar && (e.widths[t] = a.width); } } return s; } extractFontHeader(e) { let t; for (; null !== (t = this.getToken()); ) if ('/' === t) { t = this.getToken(); switch (t) { case 'FontMatrix': const i = this.readNumberArray(); e.fontMatrix = i; break; case 'Encoding': const a = this.getToken(); let r; if (/^\d+$/.test(a)) { r = []; const e = 0 | parseInt(a, 10); this.getToken(); for (let i = 0; i < e; i++) { t = this.getToken(); for (; 'dup' !== t && 'def' !== t; ) { t = this.getToken(); if (null === t) return; } if ('def' === t) break; const e = this.readInt(); this.getToken(); const i = this.getToken(); r[e] = i; this.getToken(); } } else r = getEncoding(a); e.builtInEncoding = r; break; case 'FontBBox': const s = this.readNumberArray(); e.ascent = Math.max(s[3], s[1]); e.descent = Math.min(s[1], s[3]); e.ascentScaled = !0; } } } } function findBlock(e, t, i) { const a = e.length, r = t.length, s = a - r; let n = i, o = !1; for (; n < s; ) { let i = 0; for (; i < r && e[n + i] === t[i]; ) i++; if (i >= r) { n += i; for (; n < a && isWhiteSpace(e[n]); ) n++; o = !0; break; } n++; } return { found: o, length: n }; } class Type1Font { constructor(e, t, i) { let a = i.length1, r = i.length2, s = t.peekBytes(6); const n = 128 === s[0] && 1 === s[1]; if (n) { t.skip(6); a = (s[5] << 24) | (s[4] << 16) | (s[3] << 8) | s[2]; } const o = (function getHeaderBlock(e, t) { const i = [101, 101, 120, 101, 99], a = e.pos; let r, s, n, o; try { r = e.getBytes(t); s = r.length; } catch {} if (s === t) { n = findBlock(r, i, t - 2 * i.length); if (n.found && n.length === t) return { stream: new Stream(r), length: t }; } warn('Invalid "Length1" property in Type1 font -- trying to recover.'); e.pos = a; for (;;) { n = findBlock(e.peekBytes(2048), i, 0); if (0 === n.length) break; e.pos += n.length; if (n.found) { o = e.pos - a; break; } } e.pos = a; if (o) return { stream: new Stream(e.getBytes(o)), length: o }; warn( 'Unable to recover "Length1" property in Type1 font -- using as is.', ); return { stream: new Stream(e.getBytes(t)), length: t }; })(t, a); new Type1Parser(o.stream, !1, Ti).extractFontHeader(i); if (n) { s = t.getBytes(6); r = (s[5] << 24) | (s[4] << 16) | (s[3] << 8) | s[2]; } const g = (function getEexecBlock(e, t) { const i = e.getBytes(); if (0 === i.length) throw new FormatError('getEexecBlock - no font program found.'); return { stream: new Stream(i), length: i.length }; })(t), c = new Type1Parser(g.stream, !0, Ti).extractFontProgram(i); for (const e in c.properties) i[e] = c.properties[e]; const C = c.charstrings, h = this.getType2Charstrings(C), l = this.getType2Subrs(c.subrs); this.charstrings = C; this.data = this.wrap(e, h, this.charstrings, l, i); this.seacs = this.getSeacs(c.charstrings); } get numGlyphs() { return this.charstrings.length + 1; } getCharset() { const e = ['.notdef']; for (const { glyphName: t } of this.charstrings) e.push(t); return e; } getGlyphMapping(e) { const t = this.charstrings; if (e.composite) { const i = Object.create(null); for (let a = 0, r = t.length; a < r; a++) { i[e.cMap.charCodeOf(a)] = a + 1; } return i; } const i = ['.notdef']; let a, r; for (r = 0; r < t.length; r++) i.push(t[r].glyphName); const s = e.builtInEncoding; if (s) { a = Object.create(null); for (const e in s) { r = i.indexOf(s[e]); r >= 0 && (a[e] = r); } } return type1FontGlyphMapping(e, a, i); } hasGlyphId(e) { if (e < 0 || e >= this.numGlyphs) return !1; if (0 === e) return !0; return this.charstrings[e - 1].charstring.length > 0; } getSeacs(e) { const t = []; for (let i = 0, a = e.length; i < a; i++) { const a = e[i]; a.seac && (t[i + 1] = a.seac); } return t; } getType2Charstrings(e) { const t = []; for (const i of e) t.push(i.charstring); return t; } getType2Subrs(e) { let t = 0; const i = e.length; t = i < 1133 ? 107 : i < 33769 ? 1131 : 32768; const a = []; let r; for (r = 0; r < t; r++) a.push([11]); for (r = 0; r < i; r++) a.push(e[r]); return a; } wrap(e, t, i, a, r) { const s = new CFF(); s.header = new CFFHeader(1, 0, 4, 4); s.names = [e]; const n = new CFFTopDict(); n.setByName('version', 391); n.setByName('Notice', 392); n.setByName('FullName', 393); n.setByName('FamilyName', 394); n.setByName('Weight', 395); n.setByName('Encoding', null); n.setByName('FontMatrix', r.fontMatrix); n.setByName('FontBBox', r.bbox); n.setByName('charset', null); n.setByName('CharStrings', null); n.setByName('Private', null); s.topDict = n; const o = new CFFStrings(); o.add('Version 0.11'); o.add('See original notice'); o.add(e); o.add(e); o.add('Medium'); s.strings = o; s.globalSubrIndex = new CFFIndex(); const g = t.length, c = ['.notdef']; let C, h; for (C = 0; C < g; C++) { const e = i[C].glyphName; -1 === Di.indexOf(e) && o.add(e); c.push(e); } s.charset = new CFFCharset(!1, 0, c); const l = new CFFIndex(); l.add([139, 14]); for (C = 0; C < g; C++) l.add(t[C]); s.charStrings = l; const Q = new CFFPrivateDict(); Q.setByName('Subrs', null); const E = [ 'BlueValues', 'OtherBlues', 'FamilyBlues', 'FamilyOtherBlues', 'StemSnapH', 'StemSnapV', 'BlueShift', 'BlueFuzz', 'BlueScale', 'LanguageGroup', 'ExpansionFactor', 'ForceBold', 'StdHW', 'StdVW', ]; for (C = 0, h = E.length; C < h; C++) { const e = E[C]; if (!(e in r.privateData)) continue; const t = r.privateData[e]; if (Array.isArray(t)) for (let e = t.length - 1; e > 0; e--) t[e] -= t[e - 1]; Q.setByName(e, t); } s.topDict.privateDict = Q; const u = new CFFIndex(); for (C = 0, h = a.length; C < h; C++) u.add(a[C]); Q.subrsIndex = u; return new CFFCompiler(s).compile(); } } const Ba = [ [57344, 63743], [1048576, 1114109], ], Qa = 1e3, Ea = [ 'ascent', 'bbox', 'black', 'bold', 'charProcOperatorList', 'composite', 'cssFontInfo', 'data', 'defaultVMetrics', 'defaultWidth', 'descent', 'fallbackName', 'fontMatrix', 'isInvalidPDFjsFont', 'isType3Font', 'italic', 'loadedName', 'mimetype', 'missingFile', 'name', 'remeasure', 'subtype', 'systemFontInfo', 'type', 'vertical', ], ua = [ 'cMap', 'defaultEncoding', 'differences', 'isMonospace', 'isSerifFont', 'isSymbolicFont', 'seacMap', 'toFontChar', 'toUnicode', 'vmetrics', 'widths', ]; function adjustWidths(e) { if (!e.fontMatrix) return; if (e.fontMatrix[0] === r[0]) return; const t = 0.001 / e.fontMatrix[0], i = e.widths; for (const e in i) i[e] *= t; e.defaultWidth *= t; } function amendFallbackToUnicode(e) { if (!e.fallbackToUnicode) return; if (e.toUnicode instanceof IdentityToUnicodeMap) return; const t = []; for (const i in e.fallbackToUnicode) e.toUnicode.has(i) || (t[i] = e.fallbackToUnicode[i]); t.length > 0 && e.toUnicode.amend(t); } class fonts_Glyph { constructor(e, t, i, a, r, s, n, o, g) { this.originalCharCode = e; this.fontChar = t; this.unicode = i; this.accent = a; this.width = r; this.vmetric = s; this.operatorListId = n; this.isSpace = o; this.isInFont = g; } get category() { return shadow( this, 'category', (function getCharUnicodeCategory(e) { const t = vi.get(e); if (t) return t; const i = e.match(Yi), a = { isWhitespace: !!i?.[1], isZeroWidthDiacritic: !!i?.[2], isInvisibleFormatMark: !!i?.[3], }; vi.set(e, a); return a; })(this.unicode), !0, ); } } function int16(e, t) { return (e << 8) + t; } function writeSignedInt16(e, t, i) { e[t + 1] = i; e[t] = i >>> 8; } function signedInt16(e, t) { const i = (e << 8) + t; return 32768 & i ? i - 65536 : i; } function string16(e) { return String.fromCharCode((e >> 8) & 255, 255 & e); } function safeString16(e) { e > 32767 ? (e = 32767) : e < -32768 && (e = -32768); return String.fromCharCode((e >> 8) & 255, 255 & e); } function isTrueTypeCollectionFile(e) { return 'ttcf' === bytesToString(e.peekBytes(4)); } function getFontFileType(e, { type: t, subtype: i, composite: a }) { let r, s; if ( (function isTrueTypeFile(e) { const t = e.peekBytes(4); return 65536 === readUint32(t, 0) || 'true' === bytesToString(t); })(e) || isTrueTypeCollectionFile(e) ) r = a ? 'CIDFontType2' : 'TrueType'; else if ( (function isOpenTypeFile(e) { return 'OTTO' === bytesToString(e.peekBytes(4)); })(e) ) r = a ? 'CIDFontType2' : 'OpenType'; else if ( (function isType1File(e) { const t = e.peekBytes(2); return (37 === t[0] && 33 === t[1]) || (128 === t[0] && 1 === t[1]); })(e) ) r = a ? 'CIDFontType0' : 'MMType1' === t ? 'MMType1' : 'Type1'; else if ( (function isCFFFile(e) { const t = e.peekBytes(4); return t[0] >= 1 && t[3] >= 1 && t[3] <= 4; })(e) ) if (a) { r = 'CIDFontType0'; s = 'CIDFontType0C'; } else { r = 'MMType1' === t ? 'MMType1' : 'Type1'; s = 'Type1C'; } else { warn('getFontFileType: Unable to detect correct font file Type/Subtype.'); r = t; s = i; } return [r, s]; } function applyStandardFontGlyphMap(e, t) { for (const i in t) e[+i] = t[i]; } function buildToFontChar(e, t, i) { const a = []; let r; for (let i = 0, s = e.length; i < s; i++) { r = getUnicodeForGlyph(e[i], t); -1 !== r && (a[i] = r); } for (const e in i) { r = getUnicodeForGlyph(i[e], t); -1 !== r && (a[+e] = r); } return a; } function isMacNameRecord(e) { return 1 === e.platform && 0 === e.encoding && 0 === e.language; } function isWinNameRecord(e) { return 3 === e.platform && 1 === e.encoding && 1033 === e.language; } function convertCidString(e, t, i = !1) { switch (t.length) { case 1: return t.charCodeAt(0); case 2: return (t.charCodeAt(0) << 8) | t.charCodeAt(1); } const a = `Unsupported CID string (charCode ${e}): "${t}".`; if (i) throw new FormatError(a); warn(a); return t; } function adjustMapping(e, t, i, a) { const r = Object.create(null), s = new Map(), n = [], o = new Set(); let g = 0; let c = Ba[g][0], C = Ba[g][1]; for (const l in e) { let Q = e[l]; if (!t(Q)) continue; if (c > C) { g++; if (g >= Ba.length) { warn('Ran out of space in font private use area.'); break; } c = Ba[g][0]; C = Ba[g][1]; } const E = c++; 0 === Q && (Q = i); let u = a.get(l); 'string' == typeof u && (u = u.codePointAt(0)); if ( u && !((h = u), (Ba[0][0] <= h && h <= Ba[0][1]) || (Ba[1][0] <= h && h <= Ba[1][1])) && !o.has(Q) ) { s.set(u, Q); o.add(Q); } r[E] = Q; n[l] = E; } var h; return { toFontChar: n, charCodeToGlyphId: r, toUnicodeExtraMap: s, nextAvailableFontCharCode: c, }; } function createCmapTable(e, t, i) { const a = (function getRanges(e, t, i) { const a = []; for (const t in e) e[t] >= i || a.push({ fontCharCode: 0 | t, glyphId: e[t] }); if (t) for (const [e, r] of t) r >= i || a.push({ fontCharCode: e, glyphId: r }); 0 === a.length && a.push({ fontCharCode: 0, glyphId: 0 }); a.sort(function fontGetRangesSort(e, t) { return e.fontCharCode - t.fontCharCode; }); const r = [], s = a.length; for (let e = 0; e < s; ) { const t = a[e].fontCharCode, i = [a[e].glyphId]; ++e; let n = t; for (; e < s && n + 1 === a[e].fontCharCode; ) { i.push(a[e].glyphId); ++n; ++e; if (65535 === n) break; } r.push([t, n, i]); } return r; })(e, t, i), r = a.at(-1)[1] > 65535 ? 2 : 1; let s, n, o, g, c = '\0\0' + string16(r) + '\0\0' + string32(4 + 8 * r); for (s = a.length - 1; s >= 0 && !(a[s][0] <= 65535); --s); const C = s + 1; a[s][0] < 65535 && 65535 === a[s][1] && (a[s][1] = 65534); const h = a[s][1] < 65535 ? 1 : 0, l = C + h, Q = OpenTypeFileBuilder.getSearchParams(l, 2); let E, u, d, f, p = '', m = '', y = '', w = '', b = '', D = 0; for (s = 0, n = C; s < n; s++) { E = a[s]; u = E[0]; d = E[1]; p += string16(u); m += string16(d); f = E[2]; let e = !0; for (o = 1, g = f.length; o < g; ++o) if (f[o] !== f[o - 1] + 1) { e = !1; break; } if (e) { y += string16((f[0] - u) & 65535); w += string16(0); } else { const e = 2 * (l - s) + 2 * D; D += d - u + 1; y += string16(0); w += string16(e); for (o = 0, g = f.length; o < g; ++o) b += string16(f[o]); } } if (h > 0) { m += 'ÿÿ'; p += 'ÿÿ'; y += '\0'; w += '\0\0'; } const S = '\0\0' + string16(2 * l) + string16(Q.range) + string16(Q.entry) + string16(Q.rangeShift) + m + '\0\0' + p + y + w + b; let k = '', R = ''; if (r > 1) { c += '\0\0\n' + string32(4 + 8 * r + 4 + S.length); k = ''; for (s = 0, n = a.length; s < n; s++) { E = a[s]; u = E[0]; f = E[2]; let e = f[0]; for (o = 1, g = f.length; o < g; ++o) if (f[o] !== f[o - 1] + 1) { d = E[0] + o - 1; k += string32(u) + string32(d) + string32(e); u = d + 1; e = f[o]; } k += string32(u) + string32(E[1]) + string32(e); } R = '\0\f\0\0' + string32(k.length + 16) + '\0\0\0\0' + string32(k.length / 12); } return c + '\0' + string16(S.length + 4) + S + R + k; } function createOS2Table(e, t, i) { i ||= { unitsPerEm: 0, yMax: 0, yMin: 0, ascent: 0, descent: 0 }; let a = 0, r = 0, s = 0, n = 0, o = null, g = 0, c = -1; if (t) { for (let e in t) { e |= 0; (o > e || !o) && (o = e); g < e && (g = e); c = getUnicodeRangeFor(e, c); if (c < 32) a |= 1 << c; else if (c < 64) r |= 1 << (c - 32); else if (c < 96) s |= 1 << (c - 64); else { if (!(c < 123)) throw new FormatError( 'Unicode ranges Bits > 123 are reserved for internal usage', ); n |= 1 << (c - 96); } } g > 65535 && (g = 65535); } else { o = 0; g = 255; } const C = e.bbox || [0, 0, 0, 0], h = i.unitsPerEm || (e.fontMatrix ? 1 / Math.max(...e.fontMatrix.slice(0, 4).map(Math.abs)) : 1e3), l = e.ascentScaled ? 1 : h / Qa, Q = i.ascent || Math.round(l * (e.ascent || C[3])); let E = i.descent || Math.round(l * (e.descent || C[1])); E > 0 && e.descent > 0 && C[1] < 0 && (E = -E); const u = i.yMax || Q, d = -i.yMin || -E; return ( '\0$ô\0\0\0Š»\0\0\0ŒŠ»\0\0ß\x001\0\0\0\0' + String.fromCharCode(e.fixedPitch ? 9 : 0) + '\0\0\0\0\0\0' + string32(a) + string32(r) + string32(s) + string32(n) + '*21*' + string16(e.italicAngle ? 1 : 0) + string16(o || e.firstChar) + string16(g || e.lastChar) + string16(Q) + string16(E) + '\0d' + string16(u) + string16(d) + '\0\0\0\0\0\0\0\0' + string16(e.xHeight) + string16(e.capHeight) + string16(0) + string16(o || e.firstChar) + '\0' ); } function createPostTable(e) { return ( '\0\0\0' + string32(Math.floor(65536 * e.italicAngle)) + '\0\0\0\0' + string32(e.fixedPitch ? 1 : 0) + '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0' ); } function createPostscriptName(e) { return e.replaceAll(/[^\x21-\x7E]|[[\](){}<>/%]/g, '').slice(0, 63); } function createNameTable(e, t) { t || (t = [[], []]); const i = [ t[0][0] || 'Original licence', t[0][1] || e, t[0][2] || 'Unknown', t[0][3] || 'uniqueID', t[0][4] || e, t[0][5] || 'Version 0.11', t[0][6] || createPostscriptName(e), t[0][7] || 'Unknown', t[0][8] || 'Unknown', t[0][9] || 'Unknown', ], a = []; let r, s, n, o, g; for (r = 0, s = i.length; r < s; r++) { g = t[1][r] || i[r]; const e = []; for (n = 0, o = g.length; n < o; n++) e.push(string16(g.charCodeAt(n))); a.push(e.join('')); } const c = [i, a], C = ['\0', '\0'], h = ['\0\0', '\0'], l = ['\0\0', '\t'], Q = i.length * C.length; let E = '\0\0' + string16(Q) + string16(12 * Q + 6), u = 0; for (r = 0, s = C.length; r < s; r++) { const e = c[r]; for (n = 0, o = e.length; n < o; n++) { g = e[n]; E += C[r] + h[r] + l[r] + string16(n) + string16(g.length) + string16(u); u += g.length; } } E += i.join('') + a.join(''); return E; } class Font { constructor(e, t, i) { this.name = e; this.psName = null; this.mimetype = null; this.disableFontFace = !1; this.loadedName = i.loadedName; this.isType3Font = i.isType3Font; this.missingFile = !1; this.cssFontInfo = i.cssFontInfo; this._charsCache = Object.create(null); this._glyphCache = Object.create(null); let a = !!(i.flags & qi); if (!a && !i.isSimulatedFlags) { const t = e.replaceAll(/[,_]/g, '-').split('-', 1)[0], i = Vi(); for (const e of t.split('+')) if (i[e]) { a = !0; break; } } this.isSerifFont = a; this.isSymbolicFont = !!(i.flags & Oi); this.isMonospace = !!(i.flags & Ki); let { type: r, subtype: s } = i; this.type = r; this.subtype = s; this.systemFontInfo = i.systemFontInfo; const n = e.match(/^InvalidPDFjsFont_(.*)_\d+$/); this.isInvalidPDFjsFont = !!n; this.isInvalidPDFjsFont ? (this.fallbackName = n[1]) : this.isMonospace ? (this.fallbackName = 'monospace') : this.isSerifFont ? (this.fallbackName = 'serif') : (this.fallbackName = 'sans-serif'); if (this.systemFontInfo?.guessFallback) { this.systemFontInfo.guessFallback = !1; this.systemFontInfo.css += `,${this.fallbackName}`; } this.differences = i.differences; this.widths = i.widths; this.defaultWidth = i.defaultWidth; this.composite = i.composite; this.cMap = i.cMap; this.capHeight = i.capHeight / Qa; this.ascent = i.ascent / Qa; this.descent = i.descent / Qa; this.lineHeight = this.ascent - this.descent; this.fontMatrix = i.fontMatrix; this.bbox = i.bbox; this.defaultEncoding = i.defaultEncoding; this.toUnicode = i.toUnicode; this.toFontChar = []; if ('Type3' === i.type) { for (let e = 0; e < 256; e++) this.toFontChar[e] = this.differences[e] || i.defaultEncoding[e]; return; } this.cidEncoding = i.cidEncoding || ''; this.vertical = !!i.vertical; if (this.vertical) { this.vmetrics = i.vmetrics; this.defaultVMetrics = i.defaultVMetrics; } if (!t || t.isEmpty) { t && warn('Font file is empty in "' + e + '" (' + this.loadedName + ')'); this.fallbackToSystemFont(i); return; } [r, s] = getFontFileType(t, i); (r === this.type && s === this.subtype) || info( `Inconsistent font file Type/SubType, expected: ${this.type}/${this.subtype} but found: ${r}/${s}.`, ); let o; try { switch (r) { case 'MMType1': info('MMType1 font (' + e + '), falling back to Type1.'); case 'Type1': case 'CIDFontType0': this.mimetype = 'font/opentype'; const a = 'Type1C' === s || 'CIDFontType0C' === s ? new CFFFont(t, i) : new Type1Font(e, t, i); adjustWidths(i); o = this.convert(e, a, i); break; case 'OpenType': case 'TrueType': case 'CIDFontType2': this.mimetype = 'font/opentype'; o = this.checkAndRepair(e, t, i); if (this.isOpenType) { adjustWidths(i); r = 'OpenType'; } break; default: throw new FormatError(`Font ${r} is not supported`); } } catch (e) { warn(e); this.fallbackToSystemFont(i); return; } amendFallbackToUnicode(i); this.data = o; this.type = r; this.subtype = s; this.fontMatrix = i.fontMatrix; this.widths = i.widths; this.defaultWidth = i.defaultWidth; this.toUnicode = i.toUnicode; this.seacMap = i.seacMap; } get renderer() { return shadow(this, 'renderer', FontRendererFactory.create(this, Ti)); } exportData(e = !1) { const t = e ? [...Ea, ...ua] : Ea, i = Object.create(null); let a, r; for (a of t) { r = this[a]; void 0 !== r && (i[a] = r); } return i; } fallbackToSystemFont(e) { this.missingFile = !0; const { name: t, type: i } = this; let a = normalizeFontName(t); const r = ji(), s = Zi(), n = !!r[a], o = !(!s[a] || !r[s[a]]); a = r[a] || s[a] || a; const g = ia()[a]; if (g) { isNaN(this.ascent) && (this.ascent = g.ascent / Qa); isNaN(this.descent) && (this.descent = g.descent / Qa); isNaN(this.capHeight) && (this.capHeight = g.capHeight / Qa); } this.bold = /bold/gi.test(a); this.italic = /oblique|italic/gi.test(a); this.black = /Black/g.test(t); const c = /Narrow/g.test(t); this.remeasure = (!n || c) && Object.keys(this.widths).length > 0; if ( (n || o) && 'CIDFontType2' === i && this.cidEncoding.startsWith('Identity-') ) { const i = e.cidToGidMap, a = []; applyStandardFontGlyphMap(a, zi()); /Arial-?Black/i.test(t) ? applyStandardFontGlyphMap(a, $i()) : /Calibri/i.test(t) && applyStandardFontGlyphMap(a, Aa()); if (i) { for (const e in a) { const t = a[e]; void 0 !== i[t] && (a[+e] = i[t]); } i.length !== this.toUnicode.length && e.hasIncludedToUnicodeMap && this.toUnicode instanceof IdentityToUnicodeMap && this.toUnicode.forEach(function (e, t) { const r = a[e]; void 0 === i[r] && (a[+e] = t); }); } this.toUnicode instanceof IdentityToUnicodeMap || this.toUnicode.forEach(function (e, t) { a[+e] = t; }); this.toFontChar = a; this.toUnicode = new ToUnicodeMap(a); } else if (/Symbol/i.test(a)) this.toFontChar = buildToFontChar(wi, xi(), this.differences); else if (/Dingbats/i.test(a)) this.toFontChar = buildToFontChar(bi, Mi(), this.differences); else if (n) { const e = buildToFontChar(this.defaultEncoding, xi(), this.differences); 'CIDFontType2' !== i || this.cidEncoding.startsWith('Identity-') || this.toUnicode instanceof IdentityToUnicodeMap || this.toUnicode.forEach(function (t, i) { e[+t] = i; }); this.toFontChar = e; } else { const e = xi(), i = []; this.toUnicode.forEach((t, a) => { if (!this.composite) { const i = getUnicodeForGlyph( this.differences[t] || this.defaultEncoding[t], e, ); -1 !== i && (a = i); } i[+t] = a; }); this.composite && this.toUnicode instanceof IdentityToUnicodeMap && /Tahoma|Verdana/i.test(t) && applyStandardFontGlyphMap(i, zi()); this.toFontChar = i; } amendFallbackToUnicode(e); this.loadedName = a.split('-', 1)[0]; } checkAndRepair(e, t, i) { const a = [ 'OS/2', 'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'post', 'loca', 'glyf', 'fpgm', 'prep', 'cvt ', 'CFF ', ]; function readTables(e, t) { const i = Object.create(null); i['OS/2'] = null; i.cmap = null; i.head = null; i.hhea = null; i.hmtx = null; i.maxp = null; i.name = null; i.post = null; for (let r = 0; r < t; r++) { const t = readTableEntry(e); a.includes(t.tag) && 0 !== t.length && (i[t.tag] = t); } return i; } function readTableEntry(e) { const t = e.getString(4), i = e.getInt32() >>> 0, a = e.getInt32() >>> 0, r = e.getInt32() >>> 0, s = e.pos; e.pos = e.start || 0; e.skip(a); const n = e.getBytes(r); e.pos = s; if ('head' === t) { n[8] = n[9] = n[10] = n[11] = 0; n[17] |= 32; } return { tag: t, checksum: i, length: r, offset: a, data: n }; } function readOpenTypeHeader(e) { return { version: e.getString(4), numTables: e.getUint16(), searchRange: e.getUint16(), entrySelector: e.getUint16(), rangeShift: e.getUint16(), }; } function sanitizeGlyph(e, t, i, a, r, s) { const n = { length: 0, sizeOfInstructions: 0 }; if (t < 0 || t >= e.length || i > e.length || i - t <= 12) return n; const o = e.subarray(t, i), g = signedInt16(o[2], o[3]), c = signedInt16(o[4], o[5]), C = signedInt16(o[6], o[7]), h = signedInt16(o[8], o[9]); if (g > C) { writeSignedInt16(o, 2, C); writeSignedInt16(o, 6, g); } if (c > h) { writeSignedInt16(o, 4, h); writeSignedInt16(o, 8, c); } const l = signedInt16(o[0], o[1]); if (l < 0) { if (l < -1) return n; a.set(o, r); n.length = o.length; return n; } let Q, E = 10, u = 0; for (Q = 0; Q < l; Q++) { u = ((o[E] << 8) | o[E + 1]) + 1; E += 2; } const d = E, f = (o[E] << 8) | o[E + 1]; n.sizeOfInstructions = f; E += 2 + f; const p = E; let m = 0; for (Q = 0; Q < u; Q++) { const e = o[E++]; 192 & e && (o[E - 1] = 63 & e); let t = 2; 2 & e ? (t = 1) : 16 & e && (t = 0); let i = 2; 4 & e ? (i = 1) : 32 & e && (i = 0); const a = t + i; m += a; if (8 & e) { const e = o[E++]; 0 === e && (o[E - 1] ^= 8); Q += e; m += e * a; } } if (0 === m) return n; let y = E + m; if (y > o.length) return n; if (!s && f > 0) { a.set(o.subarray(0, d), r); a.set([0, 0], r + d); a.set(o.subarray(p, y), r + d + 2); y -= f; o.length - y > 3 && (y = (y + 3) & -4); n.length = y; return n; } if (o.length - y > 3) { y = (y + 3) & -4; a.set(o.subarray(0, y), r); n.length = y; return n; } a.set(o, r); n.length = o.length; return n; } function readNameTable(e) { const i = (t.start || 0) + e.offset; t.pos = i; const a = [[], []], r = [], s = e.length, n = i + s; if (0 !== t.getUint16() || s < 6) return [a, r]; const o = t.getUint16(), g = t.getUint16(); let c, C; for (c = 0; c < o && t.pos + 12 <= n; c++) { const e = { platform: t.getUint16(), encoding: t.getUint16(), language: t.getUint16(), name: t.getUint16(), length: t.getUint16(), offset: t.getUint16(), }; (isMacNameRecord(e) || isWinNameRecord(e)) && r.push(e); } for (c = 0, C = r.length; c < C; c++) { const e = r[c]; if (e.length <= 0) continue; const s = i + g + e.offset; if (s + e.length > n) continue; t.pos = s; const o = e.name; if (e.encoding) { let i = ''; for (let a = 0, r = e.length; a < r; a += 2) i += String.fromCharCode(t.getUint16()); a[1][o] = i; } else a[0][o] = t.getString(e.length); } return [a, r]; } const r = [ 0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2, ]; function sanitizeTTProgram(e, t) { let i, a, s, n, o, g = e.data, c = 0, C = 0, h = 0; const l = [], Q = [], E = []; let u = t.tooComplexToFollowFunctions, d = !1, f = 0, p = 0; for (let e = g.length; c < e; ) { const e = g[c++]; if (64 === e) { a = g[c++]; if (d || p) c += a; else for (i = 0; i < a; i++) l.push(g[c++]); } else if (65 === e) { a = g[c++]; if (d || p) c += 2 * a; else for (i = 0; i < a; i++) { s = g[c++]; l.push((s << 8) | g[c++]); } } else if (176 == (248 & e)) { a = e - 176 + 1; if (d || p) c += a; else for (i = 0; i < a; i++) l.push(g[c++]); } else if (184 == (248 & e)) { a = e - 184 + 1; if (d || p) c += 2 * a; else for (i = 0; i < a; i++) { s = g[c++]; l.push((s << 8) | g[c++]); } } else if (43 !== e || u) if (44 !== e || u) { if (45 === e) if (d) { d = !1; C = c; } else { o = Q.pop(); if (!o) { warn('TT: ENDF bad stack'); t.hintsValid = !1; return; } n = E.pop(); g = o.data; c = o.i; t.functionsStackDeltas[n] = l.length - o.stackTop; } else if (137 === e) { if (d || p) { warn('TT: nested IDEFs not allowed'); u = !0; } d = !0; h = c; } else if (88 === e) ++f; else if (27 === e) p = f; else if (89 === e) { p === f && (p = 0); --f; } else if (28 === e && !d && !p) { const e = l.at(-1); e > 0 && (c += e - 1); } } else { if (d || p) { warn('TT: nested FDEFs not allowed'); u = !0; } d = !0; h = c; n = l.pop(); t.functionsDefined[n] = { data: g, i: c }; } else if (!d && !p) { n = l.at(-1); if (isNaN(n)) info('TT: CALL empty stack (or invalid entry).'); else { t.functionsUsed[n] = !0; if (n in t.functionsStackDeltas) { const e = l.length + t.functionsStackDeltas[n]; if (e < 0) { warn('TT: CALL invalid functions stack delta.'); t.hintsValid = !1; return; } l.length = e; } else if (n in t.functionsDefined && !E.includes(n)) { Q.push({ data: g, i: c, stackTop: l.length - 1 }); E.push(n); o = t.functionsDefined[n]; if (!o) { warn('TT: CALL non-existent function'); t.hintsValid = !1; return; } g = o.data; c = o.i; } } } if (!d && !p) { let t = 0; e <= 142 ? (t = r[e]) : e >= 192 && e <= 223 ? (t = -1) : e >= 224 && (t = -2); if (e >= 113 && e <= 117) { a = l.pop(); isNaN(a) || (t = 2 * -a); } for (; t < 0 && l.length > 0; ) { l.pop(); t++; } for (; t > 0; ) { l.push(NaN); t--; } } } t.tooComplexToFollowFunctions = u; const m = [g]; c > g.length && m.push(new Uint8Array(c - g.length)); if (h > C) { warn('TT: complementing a missing function tail'); m.push(new Uint8Array([34, 45])); } !(function foldTTTable(e, t) { if (t.length > 1) { let i, a, r = 0; for (i = 0, a = t.length; i < a; i++) r += t[i].length; r = (r + 3) & -4; const s = new Uint8Array(r); let n = 0; for (i = 0, a = t.length; i < a; i++) { s.set(t[i], n); n += t[i].length; } e.data = s; e.length = r; } })(e, m); } let s, n, o, g; if ( isTrueTypeCollectionFile((t = new Stream(new Uint8Array(t.getBytes())))) ) { const e = (function readTrueTypeCollectionData(e, t) { const { numFonts: i, offsetTable: a } = (function readTrueTypeCollectionHeader(e) { const t = e.getString(4); assert('ttcf' === t, 'Must be a TrueType Collection font.'); const i = e.getUint16(), a = e.getUint16(), r = e.getInt32() >>> 0, s = []; for (let t = 0; t < r; t++) s.push(e.getInt32() >>> 0); const n = { ttcTag: t, majorVersion: i, minorVersion: a, numFonts: r, offsetTable: s, }; switch (i) { case 1: return n; case 2: n.dsigTag = e.getInt32() >>> 0; n.dsigLength = e.getInt32() >>> 0; n.dsigOffset = e.getInt32() >>> 0; return n; } throw new FormatError( `Invalid TrueType Collection majorVersion: ${i}.`, ); })(e), r = t.split('+'); let s; for (let n = 0; n < i; n++) { e.pos = (e.start || 0) + a[n]; const i = readOpenTypeHeader(e), o = readTables(e, i.numTables); if (!o.name) throw new FormatError( 'TrueType Collection font must contain a "name" table.', ); const [g] = readNameTable(o.name); for (let e = 0, a = g.length; e < a; e++) for (let a = 0, n = g[e].length; a < n; a++) { const n = g[e][a]?.replaceAll(/\s/g, ''); if (n) { if (n === t) return { header: i, tables: o }; if (!(r.length < 2)) for (const e of r) n === e && (s = { name: e, header: i, tables: o }); } } } if (s) { warn( `TrueType Collection does not contain "${t}" font, falling back to "${s.name}" font instead.`, ); return { header: s.header, tables: s.tables }; } throw new FormatError( `TrueType Collection does not contain "${t}" font.`, ); })(t, this.name); s = e.header; n = e.tables; } else { s = readOpenTypeHeader(t); n = readTables(t, s.numTables); } const c = !n['CFF ']; if (c) { if (!n.loca) throw new FormatError('Required "loca" table is not found'); if (!n.glyf) { warn('Required "glyf" table is not found -- trying to recover.'); n.glyf = { tag: 'glyf', data: new Uint8Array(0) }; } this.isOpenType = !1; } else { const t = i.composite && (i.cidToGidMap?.length > 0 || !(i.cMap instanceof IdentityCMap)); if ( ('OTTO' === s.version && !t) || !n.head || !n.hhea || !n.maxp || !n.post ) { g = new Stream(n['CFF '].data); o = new CFFFont(g, i); adjustWidths(i); return this.convert(e, o, i); } delete n.glyf; delete n.loca; delete n.fpgm; delete n.prep; delete n['cvt ']; this.isOpenType = !0; } if (!n.maxp) throw new FormatError('Required "maxp" table is not found'); t.pos = (t.start || 0) + n.maxp.offset; let C = t.getInt32(); const h = t.getUint16(); if (65536 !== C && 20480 !== C) { if (6 === n.maxp.length) C = 20480; else { if (!(n.maxp.length >= 32)) throw new FormatError('"maxp" table has a wrong version number'); C = 65536; } !(function writeUint32(e, t, i) { e[t + 3] = 255 & i; e[t + 2] = i >>> 8; e[t + 1] = i >>> 16; e[t] = i >>> 24; })(n.maxp.data, 0, C); } if (i.scaleFactors?.length === h && c) { const { scaleFactors: e } = i, t = int16(n.head.data[50], n.head.data[51]), a = new GlyfTable({ glyfTable: n.glyf.data, isGlyphLocationsLong: t, locaTable: n.loca.data, numGlyphs: h, }); a.scale(e); const { glyf: r, loca: s, isLocationLong: o } = a.write(); n.glyf.data = r; n.loca.data = s; if (o !== !!t) { n.head.data[50] = 0; n.head.data[51] = o ? 1 : 0; } const g = n.hmtx.data; for (let t = 0; t < h; t++) { const i = 4 * t, a = Math.round(e[t] * int16(g[i], g[i + 1])); g[i] = (a >> 8) & 255; g[i + 1] = 255 & a; writeSignedInt16( g, i + 2, Math.round(e[t] * signedInt16(g[i + 2], g[i + 3])), ); } } let l = h + 1, Q = !0; if (l > 65535) { Q = !1; l = h; warn('Not enough space in glyfs to duplicate first glyph.'); } let E = 0, u = 0; if (C >= 65536 && n.maxp.length >= 32) { t.pos += 8; if (t.getUint16() > 2) { n.maxp.data[14] = 0; n.maxp.data[15] = 2; } t.pos += 4; E = t.getUint16(); t.pos += 4; u = t.getUint16(); } n.maxp.data[4] = l >> 8; n.maxp.data[5] = 255 & l; const d = (function sanitizeTTPrograms(e, t, i, a) { const r = { functionsDefined: [], functionsUsed: [], functionsStackDeltas: [], tooComplexToFollowFunctions: !1, hintsValid: !0, }; e && sanitizeTTProgram(e, r); t && sanitizeTTProgram(t, r); e && (function checkInvalidFunctions(e, t) { if (!e.tooComplexToFollowFunctions) if (e.functionsDefined.length > t) { warn('TT: more functions defined than expected'); e.hintsValid = !1; } else for (let i = 0, a = e.functionsUsed.length; i < a; i++) { if (i > t) { warn('TT: invalid function id: ' + i); e.hintsValid = !1; return; } if (e.functionsUsed[i] && !e.functionsDefined[i]) { warn('TT: undefined function: ' + i); e.hintsValid = !1; return; } } })(r, a); if (i && 1 & i.length) { const e = new Uint8Array(i.length + 1); e.set(i.data); i.data = e; } return r.hintsValid; })(n.fpgm, n.prep, n['cvt '], E); if (!d) { delete n.fpgm; delete n.prep; delete n['cvt ']; } !(function sanitizeMetrics(e, t, i, a, r, s) { if (!t) { i && (i.data = null); return; } e.pos = (e.start || 0) + t.offset; e.pos += 4; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 2; e.pos += 2; const n = e.getUint16(); e.pos += 8; e.pos += 2; let o = e.getUint16(); if (0 !== n) { if (!(2 & int16(a.data[44], a.data[45]))) { t.data[22] = 0; t.data[23] = 0; } } if (o > r) { info( `The numOfMetrics (${o}) should not be greater than the numGlyphs (${r}).`, ); o = r; t.data[34] = (65280 & o) >> 8; t.data[35] = 255 & o; } const g = r - o - ((i.length - 4 * o) >> 1); if (g > 0) { const e = new Uint8Array(i.length + 2 * g); e.set(i.data); if (s) { e[i.length] = i.data[2]; e[i.length + 1] = i.data[3]; } i.data = e; } })(t, n.hhea, n.hmtx, n.head, l, Q); if (!n.head) throw new FormatError('Required "head" table is not found'); !(function sanitizeHead(e, t, i) { const a = e.data, r = (function int32(e, t, i, a) { return (e << 24) + (t << 16) + (i << 8) + a; })(a[0], a[1], a[2], a[3]); if (r >> 16 != 1) { info('Attempting to fix invalid version in head table: ' + r); a[0] = 0; a[1] = 1; a[2] = 0; a[3] = 0; } const s = int16(a[50], a[51]); if (s < 0 || s > 1) { info('Attempting to fix invalid indexToLocFormat in head table: ' + s); const e = t + 1; if (i === e << 1) { a[50] = 0; a[51] = 0; } else { if (i !== e << 2) throw new FormatError('Could not fix indexToLocFormat: ' + s); a[50] = 0; a[51] = 1; } } })(n.head, h, c ? n.loca.length : 0); let f = Object.create(null); if (c) { const e = int16(n.head.data[50], n.head.data[51]), t = (function sanitizeGlyphLocations(e, t, i, a, r, s, n) { let o, g, c; if (a) { o = 4; g = function fontItemDecodeLong(e, t) { return ( (e[t] << 24) | (e[t + 1] << 16) | (e[t + 2] << 8) | e[t + 3] ); }; c = function fontItemEncodeLong(e, t, i) { e[t] = (i >>> 24) & 255; e[t + 1] = (i >> 16) & 255; e[t + 2] = (i >> 8) & 255; e[t + 3] = 255 & i; }; } else { o = 2; g = function fontItemDecode(e, t) { return (e[t] << 9) | (e[t + 1] << 1); }; c = function fontItemEncode(e, t, i) { e[t] = (i >> 9) & 255; e[t + 1] = (i >> 1) & 255; }; } const C = s ? i + 1 : i, h = o * (1 + C), l = new Uint8Array(h); l.set(e.data.subarray(0, h)); e.data = l; const Q = t.data, E = Q.length, u = new Uint8Array(E); let d, f; const p = []; for (d = 0, f = 0; d < i + 1; d++, f += o) { let e = g(l, f); e > E && (e = E); p.push({ index: d, offset: e, endOffset: 0 }); } p.sort((e, t) => e.offset - t.offset); for (d = 0; d < i; d++) p[d].endOffset = p[d + 1].offset; p.sort((e, t) => e.index - t.index); for (d = 0; d < i; d++) { const { offset: e, endOffset: t } = p[d]; if (0 !== e || 0 !== t) break; const i = p[d + 1].offset; if (0 !== i) { p[d].endOffset = i; break; } } const m = p.at(-2); 0 !== m.offset && 0 === m.endOffset && (m.endOffset = E); const y = Object.create(null); let w = 0; c(l, 0, w); for (d = 0, f = o; d < i; d++, f += o) { const e = sanitizeGlyph(Q, p[d].offset, p[d].endOffset, u, w, r), t = e.length; 0 === t && (y[d] = !0); e.sizeOfInstructions > n && (n = e.sizeOfInstructions); w += t; c(l, f, w); } if (0 === w) { const e = new Uint8Array([ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, ]); for (d = 0, f = o; d < C; d++, f += o) c(l, f, e.length); t.data = e; } else if (s) { const i = g(l, o); if (u.length > i + w) t.data = u.subarray(0, i + w); else { t.data = new Uint8Array(i + w); t.data.set(u.subarray(0, w)); } t.data.set(u.subarray(0, i), w); c(e.data, l.length - o, w + i); } else t.data = u.subarray(0, w); return { missingGlyphs: y, maxSizeOfInstructions: n }; })(n.loca, n.glyf, h, e, d, Q, u); f = t.missingGlyphs; if (C >= 65536 && n.maxp.length >= 32) { n.maxp.data[26] = t.maxSizeOfInstructions >> 8; n.maxp.data[27] = 255 & t.maxSizeOfInstructions; } } if (!n.hhea) throw new FormatError('Required "hhea" table is not found'); if (0 === n.hhea.data[10] && 0 === n.hhea.data[11]) { n.hhea.data[10] = 255; n.hhea.data[11] = 255; } const p = { unitsPerEm: int16(n.head.data[18], n.head.data[19]), yMax: signedInt16(n.head.data[42], n.head.data[43]), yMin: signedInt16(n.head.data[38], n.head.data[39]), ascent: signedInt16(n.hhea.data[4], n.hhea.data[5]), descent: signedInt16(n.hhea.data[6], n.hhea.data[7]), lineGap: signedInt16(n.hhea.data[8], n.hhea.data[9]), }; this.ascent = p.ascent / p.unitsPerEm; this.descent = p.descent / p.unitsPerEm; this.lineGap = p.lineGap / p.unitsPerEm; if (this.cssFontInfo?.lineHeight) { this.lineHeight = this.cssFontInfo.metrics.lineHeight; this.lineGap = this.cssFontInfo.metrics.lineGap; } else this.lineHeight = this.ascent - this.descent + this.lineGap; n.post && (function readPostScriptTable(e, i, a) { const r = (t.start || 0) + e.offset; t.pos = r; const s = r + e.length, n = t.getInt32(); t.skip(28); let o, g, c = !0; switch (n) { case 65536: o = Wi; break; case 131072: const e = t.getUint16(); if (e !== a) { c = !1; break; } const r = []; for (g = 0; g < e; ++g) { const e = t.getUint16(); if (e >= 32768) { c = !1; break; } r.push(e); } if (!c) break; const C = [], h = []; for (; t.pos < s; ) { const e = t.getByte(); h.length = e; for (g = 0; g < e; ++g) h[g] = String.fromCharCode(t.getByte()); C.push(h.join('')); } o = []; for (g = 0; g < e; ++g) { const e = r[g]; e < 258 ? o.push(Wi[e]) : o.push(C[e - 258]); } break; case 196608: break; default: warn('Unknown/unsupported post table version ' + n); c = !1; i.defaultEncoding && (o = i.defaultEncoding); } i.glyphNames = o; return c; })(n.post, i, h); n.post = { tag: 'post', data: createPostTable(i) }; const m = Object.create(null); function hasGlyph(e) { return !f[e]; } if (i.composite) { const e = i.cidToGidMap || [], t = 0 === e.length; i.cMap.forEach(function (i, a) { 'string' == typeof a && (a = convertCidString(i, a, !0)); if (a > 65535) throw new FormatError('Max size of CID is 65,535'); let r = -1; t ? (r = a) : void 0 !== e[a] && (r = e[a]); r >= 0 && r < h && hasGlyph(r) && (m[i] = r); }); } else { const e = (function readCmapTable(e, t, i, a) { if (!e) { warn('No cmap table available.'); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: !1, }; } let r, s = (t.start || 0) + e.offset; t.pos = s; t.skip(2); const n = t.getUint16(); let o, g = !1; for (let e = 0; e < n; e++) { const r = t.getUint16(), s = t.getUint16(), c = t.getInt32() >>> 0; let C = !1; if (o?.platformId !== r || o?.encodingId !== s) { if (0 !== r || (0 !== s && 1 !== s && 3 !== s)) if (1 === r && 0 === s) C = !0; else if (3 !== r || 1 !== s || (!a && o)) { if (i && 3 === r && 0 === s) { C = !0; let i = !0; if (e < n - 1) { const e = t.peekBytes(2); int16(e[0], e[1]) < r && (i = !1); } i && (g = !0); } } else { C = !0; i || (g = !0); } else C = !0; C && (o = { platformId: r, encodingId: s, offset: c }); if (g) break; } } o && (t.pos = s + o.offset); if (!o || -1 === t.peekByte()) { warn('Could not find a preferred cmap table.'); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: !1, }; } const c = t.getUint16(); let C = !1; const h = []; let l, Q; if (0 === c) { t.skip(4); for (l = 0; l < 256; l++) { const e = t.getByte(); e && h.push({ charCode: l, glyphId: e }); } C = !0; } else if (2 === c) { t.skip(4); const e = []; let i = 0; for (let a = 0; a < 256; a++) { const a = t.getUint16() >> 3; e.push(a); i = Math.max(a, i); } const a = []; for (let e = 0; e <= i; e++) a.push({ firstCode: t.getUint16(), entryCount: t.getUint16(), idDelta: signedInt16(t.getByte(), t.getByte()), idRangePos: t.pos + t.getUint16(), }); for (let i = 0; i < 256; i++) if (0 === e[i]) { t.pos = a[0].idRangePos + 2 * i; Q = t.getUint16(); h.push({ charCode: i, glyphId: Q }); } else { const r = a[e[i]]; for (l = 0; l < r.entryCount; l++) { const e = (i << 8) + l + r.firstCode; t.pos = r.idRangePos + 2 * l; Q = t.getUint16(); 0 !== Q && (Q = (Q + r.idDelta) % 65536); h.push({ charCode: e, glyphId: Q }); } } } else if (4 === c) { t.skip(4); const e = t.getUint16() >> 1; t.skip(6); const i = []; let a; for (a = 0; a < e; a++) i.push({ end: t.getUint16() }); t.skip(2); for (a = 0; a < e; a++) i[a].start = t.getUint16(); for (a = 0; a < e; a++) i[a].delta = t.getUint16(); let n, o = 0; for (a = 0; a < e; a++) { r = i[a]; const s = t.getUint16(); if (s) { n = (s >> 1) - (e - a); r.offsetIndex = n; o = Math.max(o, n + r.end - r.start + 1); } else r.offsetIndex = -1; } const g = []; for (l = 0; l < o; l++) g.push(t.getUint16()); for (a = 0; a < e; a++) { r = i[a]; s = r.start; const e = r.end, t = r.delta; n = r.offsetIndex; for (l = s; l <= e; l++) if (65535 !== l) { Q = n < 0 ? l : g[n + l - s]; Q = (Q + t) & 65535; h.push({ charCode: l, glyphId: Q }); } } } else if (6 === c) { t.skip(4); const e = t.getUint16(), i = t.getUint16(); for (l = 0; l < i; l++) { Q = t.getUint16(); const i = e + l; h.push({ charCode: i, glyphId: Q }); } } else { if (12 !== c) { warn('cmap table has unsupported format: ' + c); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: !1, }; } { t.skip(10); const e = t.getInt32() >>> 0; for (l = 0; l < e; l++) { const e = t.getInt32() >>> 0, i = t.getInt32() >>> 0; let a = t.getInt32() >>> 0; for (let t = e; t <= i; t++) h.push({ charCode: t, glyphId: a++ }); } } } h.sort(function (e, t) { return e.charCode - t.charCode; }); for (let e = 1; e < h.length; e++) if (h[e - 1].charCode === h[e].charCode) { h.splice(e, 1); e--; } return { platformId: o.platformId, encodingId: o.encodingId, mappings: h, hasShortCmap: C, }; })(n.cmap, t, this.isSymbolicFont, i.hasEncoding), a = e.platformId, r = e.encodingId, s = e.mappings; let o = [], g = !1; !i.hasEncoding || ('MacRomanEncoding' !== i.baseEncodingName && 'WinAnsiEncoding' !== i.baseEncodingName) || (o = getEncoding(i.baseEncodingName)); if ( i.hasEncoding && !this.isSymbolicFont && ((3 === a && 1 === r) || (1 === a && 0 === r)) ) { const e = xi(); for (let t = 0; t < 256; t++) { let n; n = void 0 !== this.differences[t] ? this.differences[t] : o.length && '' !== o[t] ? o[t] : mi[t]; if (!n) continue; const g = recoverGlyphName(n, e); let c; 3 === a && 1 === r ? (c = e[g]) : 1 === a && 0 === r && (c = pi.indexOf(g)); if (void 0 === c) { if ( !i.glyphNames && i.hasIncludedToUnicodeMap && !(this.toUnicode instanceof IdentityToUnicodeMap) ) { const e = this.toUnicode.get(t); e && (c = e.codePointAt(0)); } if (void 0 === c) continue; } for (const e of s) if (e.charCode === c) { m[t] = e.glyphId; break; } } } else if (0 === a) { for (const e of s) m[e.charCode] = e.glyphId; g = !0; } else if (3 === a && 0 === r) for (const e of s) { let t = e.charCode; t >= 61440 && t <= 61695 && (t &= 255); m[t] = e.glyphId; } else for (const e of s) m[e.charCode] = e.glyphId; if (i.glyphNames && (o.length || this.differences.length)) for (let e = 0; e < 256; ++e) { if (!g && void 0 !== m[e]) continue; const t = this.differences[e] || o[e]; if (!t) continue; const a = i.glyphNames.indexOf(t); a > 0 && hasGlyph(a) && (m[e] = a); } } 0 === m.length && (m[0] = 0); let y = l - 1; Q || (y = 0); if (!i.cssFontInfo) { const e = adjustMapping(m, hasGlyph, y, this.toUnicode); this.toFontChar = e.toFontChar; n.cmap = { tag: 'cmap', data: createCmapTable(e.charCodeToGlyphId, e.toUnicodeExtraMap, l), }; (n['OS/2'] && (function validateOS2Table(e, t) { t.pos = (t.start || 0) + e.offset; const i = t.getUint16(); t.skip(60); const a = t.getUint16(); if (i < 4 && 768 & a) return !1; if (t.getUint16() > t.getUint16()) return !1; t.skip(6); if (0 === t.getUint16()) return !1; e.data[8] = e.data[9] = 0; return !0; })(n['OS/2'], t)) || (n['OS/2'] = { tag: 'OS/2', data: createOS2Table(i, e.charCodeToGlyphId, p), }); } if (!c) try { g = new Stream(n['CFF '].data); o = new CFFParser(g, i, Ti).parse(); o.duplicateFirstGlyph(); const e = new CFFCompiler(o); n['CFF '].data = e.compile(); } catch { warn('Failed to compile font ' + i.loadedName); } if (n.name) { const [t, a] = readNameTable(n.name); n.name.data = createNameTable(e, t); this.psName = t[0][6] || null; i.composite || (function adjustTrueTypeToUnicode(e, t, i) { if (e.isInternalFont) return; if (e.hasIncludedToUnicodeMap) return; if (e.hasEncoding) return; if (e.toUnicode instanceof IdentityToUnicodeMap) return; if (!t) return; if (0 === i.length) return; if (e.defaultEncoding === yi) return; for (const e of i) if (!isWinNameRecord(e)) return; const a = yi, r = [], s = xi(); for (const e in a) { const t = a[e]; if ('' === t) continue; const i = s[t]; void 0 !== i && (r[e] = String.fromCharCode(i)); } r.length > 0 && e.toUnicode.amend(r); })(i, this.isSymbolicFont, a); } else n.name = { tag: 'name', data: createNameTable(this.name) }; const w = new OpenTypeFileBuilder(s.version); for (const e in n) w.addTable(e, n[e].data); return w.toArray(); } convert(e, t, i) { i.fixedPitch = !1; i.builtInEncoding && (function adjustType1ToUnicode(e, t) { if (e.isInternalFont) return; if (e.hasIncludedToUnicodeMap) return; if (t === e.defaultEncoding) return; if (e.toUnicode instanceof IdentityToUnicodeMap) return; const i = [], a = xi(); for (const r in t) { if ( e.hasEncoding && (e.baseEncodingName || void 0 !== e.differences[r]) ) continue; const s = getUnicodeForGlyph(t[r], a); -1 !== s && (i[r] = String.fromCharCode(s)); } i.length > 0 && e.toUnicode.amend(i); })(i, i.builtInEncoding); let a = 1; t instanceof CFFFont && (a = t.numGlyphs - 1); const s = t.getGlyphMapping(i); let n = null, o = s, g = null; if (!i.cssFontInfo) { n = adjustMapping(s, t.hasGlyphId.bind(t), a, this.toUnicode); this.toFontChar = n.toFontChar; o = n.charCodeToGlyphId; g = n.toUnicodeExtraMap; } const c = t.numGlyphs; function getCharCodes(e, t) { let i = null; for (const a in e) t === e[a] && (i ||= []).push(0 | a); return i; } function createCharCode(e, t) { for (const i in e) if (t === e[i]) return 0 | i; n.charCodeToGlyphId[n.nextAvailableFontCharCode] = t; return n.nextAvailableFontCharCode++; } const C = t.seacs; if (n && C?.length) { const e = i.fontMatrix || r, a = t.getCharset(), o = Object.create(null); for (let t in C) { t |= 0; const i = C[t], r = mi[i[2]], g = mi[i[3]], c = a.indexOf(r), h = a.indexOf(g); if (c < 0 || h < 0) continue; const l = { x: i[0] * e[0] + i[1] * e[2] + e[4], y: i[0] * e[1] + i[1] * e[3] + e[5], }, Q = getCharCodes(s, t); if (Q) for (const e of Q) { const t = n.charCodeToGlyphId, i = createCharCode(t, c), a = createCharCode(t, h); o[e] = { baseFontCharCode: i, accentFontCharCode: a, accentOffset: l, }; } } i.seacMap = o; } const h = i.fontMatrix ? 1 / Math.max(...i.fontMatrix.slice(0, 4).map(Math.abs)) : 1e3, l = new OpenTypeFileBuilder('OTTO'); l.addTable('CFF ', t.data); l.addTable('OS/2', createOS2Table(i, o)); l.addTable('cmap', createCmapTable(o, g, c)); l.addTable( 'head', '\0\0\0\0\0\0\0\0\0\0_<õ\0\0' + safeString16(h) + "\0\0\0\0ž\v~'\0\0\0\0ž\v~'\0\0" + safeString16(i.descent) + 'ÿ' + safeString16(i.ascent) + string16(i.italicAngle ? 2 : 0) + '\0\0\0\0\0\0\0', ); l.addTable( 'hhea', '\0\0\0' + safeString16(i.ascent) + safeString16(i.descent) + '\0\0ÿÿ\0\0\0\0\0\0' + safeString16(i.capHeight) + safeString16(Math.tan(i.italicAngle) * i.xHeight) + '\0\0\0\0\0\0\0\0\0\0\0\0' + string16(c), ); l.addTable( 'hmtx', (function fontFieldsHmtx() { const e = t.charstrings, i = t.cff ? t.cff.widths : null; let a = '\0\0\0\0'; for (let t = 1, r = c; t < r; t++) { let r = 0; if (e) { const i = e[t - 1]; r = 'width' in i ? i.width : 0; } else i && (r = Math.ceil(i[t] || 0)); a += string16(r) + string16(0); } return a; })(), ); l.addTable('maxp', '\0\0P\0' + string16(c)); l.addTable('name', createNameTable(e)); l.addTable('post', createPostTable(i)); return l.toArray(); } _charToGlyph(e, t = !1) { let i, a, r, s = this._glyphCache[e]; if (s?.isSpace === t) return s; let n = e; if (this.cMap?.contains(e)) { n = this.cMap.lookup(e); 'string' == typeof n && (n = convertCidString(e, n)); } a = this.widths[n]; 'number' != typeof a && (a = this.defaultWidth); const o = this.vmetrics?.[n]; let g = this.toUnicode.get(e) || e; 'number' == typeof g && (g = String.fromCharCode(g)); let c = void 0 !== this.toFontChar[e]; i = this.toFontChar[e] || e; if (this.missingFile) { const t = this.differences[e] || this.defaultEncoding[e]; ('.notdef' !== t && '' !== t) || 'Type1' !== this.type || (i = 32); i = (function mapSpecialUnicodeValues(e) { return e >= 65520 && e <= 65535 ? 0 : e >= 62976 && e <= 63743 ? Hi()[e] || e : 173 === e ? 45 : e; })(i); } this.isType3Font && (r = i); let C = null; if (this.seacMap?.[e]) { c = !0; const t = this.seacMap[e]; i = t.baseFontCharCode; C = { fontChar: String.fromCodePoint(t.accentFontCharCode), offset: t.accentOffset, }; } let h = ''; 'number' == typeof i && (i <= 1114111 ? (h = String.fromCodePoint(i)) : warn(`charToGlyph - invalid fontCharCode: ${i}`)); s = new fonts_Glyph(e, h, g, C, a, o, r, t, c); return (this._glyphCache[e] = s); } charsToGlyphs(e) { let t = this._charsCache[e]; if (t) return t; t = []; if (this.cMap) { const i = Object.create(null), a = e.length; let r = 0; for (; r < a; ) { this.cMap.readCharCode(e, r, i); const { charcode: a, length: s } = i; r += s; const n = this._charToGlyph(a, 1 === s && 32 === e.charCodeAt(r - 1)); t.push(n); } } else for (let i = 0, a = e.length; i < a; ++i) { const a = e.charCodeAt(i), r = this._charToGlyph(a, 32 === a); t.push(r); } return (this._charsCache[e] = t); } getCharPositions(e) { const t = []; if (this.cMap) { const i = Object.create(null); let a = 0; for (; a < e.length; ) { this.cMap.readCharCode(e, a, i); const r = i.length; t.push([a, a + r]); a += r; } } else for (let i = 0, a = e.length; i < a; ++i) t.push([i, i + 1]); return t; } get glyphCacheValues() { return Object.values(this._glyphCache); } encodeString(e) { const t = [], i = [], hasCurrentBufErrors = () => t.length % 2 == 1, a = this.toUnicode instanceof IdentityToUnicodeMap ? (e) => this.toUnicode.charCodeOf(e) : (e) => this.toUnicode.charCodeOf(String.fromCodePoint(e)); for (let r = 0, s = e.length; r < s; r++) { const s = e.codePointAt(r); s > 55295 && (s < 57344 || s > 65533) && r++; if (this.toUnicode) { const e = a(s); if (-1 !== e) { if (hasCurrentBufErrors()) { t.push(i.join('')); i.length = 0; } for ( let t = (this.cMap ? this.cMap.getCharCodeLength(e) : 1) - 1; t >= 0; t-- ) i.push(String.fromCharCode((e >> (8 * t)) & 255)); continue; } } if (!hasCurrentBufErrors()) { t.push(i.join('')); i.length = 0; } i.push(String.fromCodePoint(s)); } t.push(i.join('')); return t; } } class ErrorFont { constructor(e) { this.error = e; this.loadedName = 'g_font_error'; this.missingFile = !0; } charsToGlyphs() { return []; } encodeString(e) { return [e]; } exportData(e = !1) { return { error: this.error }; } } const da = 2, fa = 3, pa = 4, ma = 5, ya = 6, wa = 7; class Pattern { constructor() { unreachable('Cannot initialize Pattern.'); } static parseShading(e, t, i, a, r) { const s = e instanceof BaseStream ? e.dict : e, n = s.get('ShadingType'); try { switch (n) { case da: case fa: return new RadialAxialShading(s, t, i, a, r); case pa: case ma: case ya: case wa: return new MeshShading(e, t, i, a, r); default: throw new FormatError('Unsupported ShadingType: ' + n); } } catch (e) { if (e instanceof MissingDataException) throw e; warn(e); return new DummyShading(); } } } class BaseShading { static SMALL_NUMBER = 1e-6; constructor() { this.constructor === BaseShading && unreachable('Cannot initialize BaseShading.'); } getIR() { unreachable('Abstract method `getIR` called.'); } } class RadialAxialShading extends BaseShading { constructor(e, t, i, a, r) { super(); this.shadingType = e.get('ShadingType'); let s = 0; this.shadingType === da ? (s = 4) : this.shadingType === fa && (s = 6); this.coordsArr = e.getArray('Coords'); if (!isNumberArray(this.coordsArr, s)) throw new FormatError('RadialAxialShading: Invalid /Coords array.'); const n = ColorSpace.parse({ cs: e.getRaw('CS') || e.getRaw('ColorSpace'), xref: t, resources: i, pdfFunctionFactory: a, localColorSpaceCache: r, }); this.bbox = lookupNormalRect(e.getArray('BBox'), null); let o = 0, g = 1; const c = e.getArray('Domain'); isNumberArray(c, 2) && ([o, g] = c); let C = !1, h = !1; const l = e.getArray('Extend'); (function isBooleanArray(e, t) { return ( Array.isArray(e) && (null === t || e.length === t) && e.every((e) => 'boolean' == typeof e) ); })(l, 2) && ([C, h] = l); if (!(this.shadingType !== fa || (C && h))) { const [e, t, i, a, r, s] = this.coordsArr, n = Math.hypot(e - a, t - r); i <= s + n && s <= i + n && warn('Unsupported radial gradient.'); } this.extendStart = C; this.extendEnd = h; const Q = e.getRaw('Function'), E = a.createFromArray(Q), u = (g - o) / 840, d = (this.colorStops = []); if (o >= g || u <= 0) { info('Bad shading domain.'); return; } const f = new Float32Array(n.numComps), p = new Float32Array(1); let m, y = 0; p[0] = o; E(p, 0, f, 0); let w = n.getRgb(f, 0); const b = Util.makeHexColor(w[0], w[1], w[2]); d.push([0, b]); let D = 1; p[0] = o + u; E(p, 0, f, 0); let S = n.getRgb(f, 0), k = S[0] - w[0] + 1, R = S[1] - w[1] + 1, N = S[2] - w[2] + 1, G = S[0] - w[0] - 1, x = S[1] - w[1] - 1, U = S[2] - w[2] - 1; for (let e = 2; e < 840; e++) { p[0] = o + e * u; E(p, 0, f, 0); m = n.getRgb(f, 0); const t = e - y; k = Math.min(k, (m[0] - w[0] + 1) / t); R = Math.min(R, (m[1] - w[1] + 1) / t); N = Math.min(N, (m[2] - w[2] + 1) / t); G = Math.max(G, (m[0] - w[0] - 1) / t); x = Math.max(x, (m[1] - w[1] - 1) / t); U = Math.max(U, (m[2] - w[2] - 1) / t); if (!(G <= k && x <= R && U <= N)) { const e = Util.makeHexColor(S[0], S[1], S[2]); d.push([D / 840, e]); k = m[0] - S[0] + 1; R = m[1] - S[1] + 1; N = m[2] - S[2] + 1; G = m[0] - S[0] - 1; x = m[1] - S[1] - 1; U = m[2] - S[2] - 1; y = D; w = S; } D = e; S = m; } const M = Util.makeHexColor(S[0], S[1], S[2]); d.push([1, M]); let L = 'transparent'; if (e.has('Background')) { m = n.getRgb(e.get('Background'), 0); L = Util.makeHexColor(m[0], m[1], m[2]); } if (!C) { d.unshift([0, L]); d[1][0] += BaseShading.SMALL_NUMBER; } if (!h) { d.at(-1)[0] -= BaseShading.SMALL_NUMBER; d.push([1, L]); } this.colorStops = d; } getIR() { const { coordsArr: e, shadingType: t } = this; let i, a, r, s, n; if (t === da) { a = [e[0], e[1]]; r = [e[2], e[3]]; s = null; n = null; i = 'axial'; } else if (t === fa) { a = [e[0], e[1]]; r = [e[3], e[4]]; s = e[2]; n = e[5]; i = 'radial'; } else unreachable(`getPattern type unknown: ${t}`); return ['RadialAxial', i, this.bbox, this.colorStops, a, r, s, n]; } } class MeshStreamReader { constructor(e, t) { this.stream = e; this.context = t; this.buffer = 0; this.bufferLength = 0; const i = t.numComps; this.tmpCompsBuf = new Float32Array(i); const a = t.colorSpace.numComps; this.tmpCsCompsBuf = t.colorFn ? new Float32Array(a) : this.tmpCompsBuf; } get hasData() { if (this.stream.end) return this.stream.pos < this.stream.end; if (this.bufferLength > 0) return !0; const e = this.stream.getByte(); if (e < 0) return !1; this.buffer = e; this.bufferLength = 8; return !0; } readBits(e) { let t = this.buffer, i = this.bufferLength; if (32 === e) { if (0 === i) return ( ((this.stream.getByte() << 24) | (this.stream.getByte() << 16) | (this.stream.getByte() << 8) | this.stream.getByte()) >>> 0 ); t = (t << 24) | (this.stream.getByte() << 16) | (this.stream.getByte() << 8) | this.stream.getByte(); const e = this.stream.getByte(); this.buffer = e & ((1 << i) - 1); return ((t << (8 - i)) | ((255 & e) >> i)) >>> 0; } if (8 === e && 0 === i) return this.stream.getByte(); for (; i < e; ) { t = (t << 8) | this.stream.getByte(); i += 8; } i -= e; this.bufferLength = i; this.buffer = t & ((1 << i) - 1); return t >> i; } align() { this.buffer = 0; this.bufferLength = 0; } readFlag() { return this.readBits(this.context.bitsPerFlag); } readCoordinate() { const e = this.context.bitsPerCoordinate, t = this.readBits(e), i = this.readBits(e), a = this.context.decode, r = e < 32 ? 1 / ((1 << e) - 1) : 2.3283064365386963e-10; return [t * r * (a[1] - a[0]) + a[0], i * r * (a[3] - a[2]) + a[2]]; } readComponents() { const e = this.context.numComps, t = this.context.bitsPerComponent, i = t < 32 ? 1 / ((1 << t) - 1) : 2.3283064365386963e-10, a = this.context.decode, r = this.tmpCompsBuf; for (let s = 0, n = 4; s < e; s++, n += 2) { const e = this.readBits(t); r[s] = e * i * (a[n + 1] - a[n]) + a[n]; } const s = this.tmpCsCompsBuf; this.context.colorFn && this.context.colorFn(r, 0, s, 0); return this.context.colorSpace.getRgb(s, 0); } } let ba = Object.create(null); function getB(e) { return (ba[e] ||= (function buildB(e) { const t = []; for (let i = 0; i <= e; i++) { const a = i / e, r = 1 - a; t.push( new Float32Array([r ** 3, 3 * a * r ** 2, 3 * a ** 2 * r, a ** 3]), ); } return t; })(e)); } class MeshShading extends BaseShading { static MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3; static MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20; static TRIANGLE_DENSITY = 20; constructor(e, t, i, a, r) { super(); if (!(e instanceof BaseStream)) throw new FormatError('Mesh data is not a stream'); const s = e.dict; this.shadingType = s.get('ShadingType'); this.bbox = lookupNormalRect(s.getArray('BBox'), null); const n = ColorSpace.parse({ cs: s.getRaw('CS') || s.getRaw('ColorSpace'), xref: t, resources: i, pdfFunctionFactory: a, localColorSpaceCache: r, }); this.background = s.has('Background') ? n.getRgb(s.get('Background'), 0) : null; const o = s.getRaw('Function'), g = o ? a.createFromArray(o) : null; this.coords = []; this.colors = []; this.figures = []; const c = { bitsPerCoordinate: s.get('BitsPerCoordinate'), bitsPerComponent: s.get('BitsPerComponent'), bitsPerFlag: s.get('BitsPerFlag'), decode: s.getArray('Decode'), colorFn: g, colorSpace: n, numComps: g ? 1 : n.numComps, }, C = new MeshStreamReader(e, c); let h = !1; switch (this.shadingType) { case pa: this._decodeType4Shading(C); break; case ma: const e = 0 | s.get('VerticesPerRow'); if (e < 2) throw new FormatError('Invalid VerticesPerRow'); this._decodeType5Shading(C, e); break; case ya: this._decodeType6Shading(C); h = !0; break; case wa: this._decodeType7Shading(C); h = !0; break; default: unreachable('Unsupported mesh type.'); } if (h) { this._updateBounds(); for (let e = 0, t = this.figures.length; e < t; e++) this._buildFigureFromPatch(e); } this._updateBounds(); this._packData(); } _decodeType4Shading(e) { const t = this.coords, i = this.colors, a = [], r = []; let s = 0; for (; e.hasData; ) { const n = e.readFlag(), o = e.readCoordinate(), g = e.readComponents(); if (0 === s) { if (!(0 <= n && n <= 2)) throw new FormatError('Unknown type4 flag'); switch (n) { case 0: s = 3; break; case 1: r.push(r.at(-2), r.at(-1)); s = 1; break; case 2: r.push(r.at(-3), r.at(-1)); s = 1; } a.push(n); } r.push(t.length); t.push(o); i.push(g); s--; e.align(); } this.figures.push({ type: 'triangles', coords: new Int32Array(r), colors: new Int32Array(r), }); } _decodeType5Shading(e, t) { const i = this.coords, a = this.colors, r = []; for (; e.hasData; ) { const t = e.readCoordinate(), s = e.readComponents(); r.push(i.length); i.push(t); a.push(s); } this.figures.push({ type: 'lattice', coords: new Int32Array(r), colors: new Int32Array(r), verticesPerRow: t, }); } _decodeType6Shading(e) { const t = this.coords, i = this.colors, a = new Int32Array(16), r = new Int32Array(4); for (; e.hasData; ) { const s = e.readFlag(); if (!(0 <= s && s <= 3)) throw new FormatError('Unknown type6 flag'); const n = t.length; for (let i = 0, a = 0 !== s ? 8 : 12; i < a; i++) t.push(e.readCoordinate()); const o = i.length; for (let t = 0, a = 0 !== s ? 2 : 4; t < a; t++) i.push(e.readComponents()); let g, c, C, h; switch (s) { case 0: a[12] = n + 3; a[13] = n + 4; a[14] = n + 5; a[15] = n + 6; a[8] = n + 2; a[11] = n + 7; a[4] = n + 1; a[7] = n + 8; a[0] = n; a[1] = n + 11; a[2] = n + 10; a[3] = n + 9; r[2] = o + 1; r[3] = o + 2; r[0] = o; r[1] = o + 3; break; case 1: g = a[12]; c = a[13]; C = a[14]; h = a[15]; a[12] = h; a[13] = n + 0; a[14] = n + 1; a[15] = n + 2; a[8] = C; a[11] = n + 3; a[4] = c; a[7] = n + 4; a[0] = g; a[1] = n + 7; a[2] = n + 6; a[3] = n + 5; g = r[2]; c = r[3]; r[2] = c; r[3] = o; r[0] = g; r[1] = o + 1; break; case 2: g = a[15]; c = a[11]; a[12] = a[3]; a[13] = n + 0; a[14] = n + 1; a[15] = n + 2; a[8] = a[7]; a[11] = n + 3; a[4] = c; a[7] = n + 4; a[0] = g; a[1] = n + 7; a[2] = n + 6; a[3] = n + 5; g = r[3]; r[2] = r[1]; r[3] = o; r[0] = g; r[1] = o + 1; break; case 3: a[12] = a[0]; a[13] = n + 0; a[14] = n + 1; a[15] = n + 2; a[8] = a[1]; a[11] = n + 3; a[4] = a[2]; a[7] = n + 4; a[0] = a[3]; a[1] = n + 7; a[2] = n + 6; a[3] = n + 5; r[2] = r[0]; r[3] = o; r[0] = r[1]; r[1] = o + 1; } a[5] = t.length; t.push([ (-4 * t[a[0]][0] - t[a[15]][0] + 6 * (t[a[4]][0] + t[a[1]][0]) - 2 * (t[a[12]][0] + t[a[3]][0]) + 3 * (t[a[13]][0] + t[a[7]][0])) / 9, (-4 * t[a[0]][1] - t[a[15]][1] + 6 * (t[a[4]][1] + t[a[1]][1]) - 2 * (t[a[12]][1] + t[a[3]][1]) + 3 * (t[a[13]][1] + t[a[7]][1])) / 9, ]); a[6] = t.length; t.push([ (-4 * t[a[3]][0] - t[a[12]][0] + 6 * (t[a[2]][0] + t[a[7]][0]) - 2 * (t[a[0]][0] + t[a[15]][0]) + 3 * (t[a[4]][0] + t[a[14]][0])) / 9, (-4 * t[a[3]][1] - t[a[12]][1] + 6 * (t[a[2]][1] + t[a[7]][1]) - 2 * (t[a[0]][1] + t[a[15]][1]) + 3 * (t[a[4]][1] + t[a[14]][1])) / 9, ]); a[9] = t.length; t.push([ (-4 * t[a[12]][0] - t[a[3]][0] + 6 * (t[a[8]][0] + t[a[13]][0]) - 2 * (t[a[0]][0] + t[a[15]][0]) + 3 * (t[a[11]][0] + t[a[1]][0])) / 9, (-4 * t[a[12]][1] - t[a[3]][1] + 6 * (t[a[8]][1] + t[a[13]][1]) - 2 * (t[a[0]][1] + t[a[15]][1]) + 3 * (t[a[11]][1] + t[a[1]][1])) / 9, ]); a[10] = t.length; t.push([ (-4 * t[a[15]][0] - t[a[0]][0] + 6 * (t[a[11]][0] + t[a[14]][0]) - 2 * (t[a[12]][0] + t[a[3]][0]) + 3 * (t[a[2]][0] + t[a[8]][0])) / 9, (-4 * t[a[15]][1] - t[a[0]][1] + 6 * (t[a[11]][1] + t[a[14]][1]) - 2 * (t[a[12]][1] + t[a[3]][1]) + 3 * (t[a[2]][1] + t[a[8]][1])) / 9, ]); this.figures.push({ type: 'patch', coords: new Int32Array(a), colors: new Int32Array(r), }); } } _decodeType7Shading(e) { const t = this.coords, i = this.colors, a = new Int32Array(16), r = new Int32Array(4); for (; e.hasData; ) { const s = e.readFlag(); if (!(0 <= s && s <= 3)) throw new FormatError('Unknown type7 flag'); const n = t.length; for (let i = 0, a = 0 !== s ? 12 : 16; i < a; i++) t.push(e.readCoordinate()); const o = i.length; for (let t = 0, a = 0 !== s ? 2 : 4; t < a; t++) i.push(e.readComponents()); let g, c, C, h; switch (s) { case 0: a[12] = n + 3; a[13] = n + 4; a[14] = n + 5; a[15] = n + 6; a[8] = n + 2; a[9] = n + 13; a[10] = n + 14; a[11] = n + 7; a[4] = n + 1; a[5] = n + 12; a[6] = n + 15; a[7] = n + 8; a[0] = n; a[1] = n + 11; a[2] = n + 10; a[3] = n + 9; r[2] = o + 1; r[3] = o + 2; r[0] = o; r[1] = o + 3; break; case 1: g = a[12]; c = a[13]; C = a[14]; h = a[15]; a[12] = h; a[13] = n + 0; a[14] = n + 1; a[15] = n + 2; a[8] = C; a[9] = n + 9; a[10] = n + 10; a[11] = n + 3; a[4] = c; a[5] = n + 8; a[6] = n + 11; a[7] = n + 4; a[0] = g; a[1] = n + 7; a[2] = n + 6; a[3] = n + 5; g = r[2]; c = r[3]; r[2] = c; r[3] = o; r[0] = g; r[1] = o + 1; break; case 2: g = a[15]; c = a[11]; a[12] = a[3]; a[13] = n + 0; a[14] = n + 1; a[15] = n + 2; a[8] = a[7]; a[9] = n + 9; a[10] = n + 10; a[11] = n + 3; a[4] = c; a[5] = n + 8; a[6] = n + 11; a[7] = n + 4; a[0] = g; a[1] = n + 7; a[2] = n + 6; a[3] = n + 5; g = r[3]; r[2] = r[1]; r[3] = o; r[0] = g; r[1] = o + 1; break; case 3: a[12] = a[0]; a[13] = n + 0; a[14] = n + 1; a[15] = n + 2; a[8] = a[1]; a[9] = n + 9; a[10] = n + 10; a[11] = n + 3; a[4] = a[2]; a[5] = n + 8; a[6] = n + 11; a[7] = n + 4; a[0] = a[3]; a[1] = n + 7; a[2] = n + 6; a[3] = n + 5; r[2] = r[0]; r[3] = o; r[0] = r[1]; r[1] = o + 1; } this.figures.push({ type: 'patch', coords: new Int32Array(a), colors: new Int32Array(r), }); } } _buildFigureFromPatch(e) { const t = this.figures[e]; assert('patch' === t.type, 'Unexpected patch mesh figure'); const i = this.coords, a = this.colors, r = t.coords, s = t.colors, n = Math.min(i[r[0]][0], i[r[3]][0], i[r[12]][0], i[r[15]][0]), o = Math.min(i[r[0]][1], i[r[3]][1], i[r[12]][1], i[r[15]][1]), g = Math.max(i[r[0]][0], i[r[3]][0], i[r[12]][0], i[r[15]][0]), c = Math.max(i[r[0]][1], i[r[3]][1], i[r[12]][1], i[r[15]][1]); let C = Math.ceil( ((g - n) * MeshShading.TRIANGLE_DENSITY) / (this.bounds[2] - this.bounds[0]), ); C = Math.max( MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, C), ); let h = Math.ceil( ((c - o) * MeshShading.TRIANGLE_DENSITY) / (this.bounds[3] - this.bounds[1]), ); h = Math.max( MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, h), ); const l = C + 1, Q = new Int32Array((h + 1) * l), E = new Int32Array((h + 1) * l); let u = 0; const d = new Uint8Array(3), f = new Uint8Array(3), p = a[s[0]], m = a[s[1]], y = a[s[2]], w = a[s[3]], b = getB(h), D = getB(C); for (let e = 0; e <= h; e++) { d[0] = ((p[0] * (h - e) + y[0] * e) / h) | 0; d[1] = ((p[1] * (h - e) + y[1] * e) / h) | 0; d[2] = ((p[2] * (h - e) + y[2] * e) / h) | 0; f[0] = ((m[0] * (h - e) + w[0] * e) / h) | 0; f[1] = ((m[1] * (h - e) + w[1] * e) / h) | 0; f[2] = ((m[2] * (h - e) + w[2] * e) / h) | 0; for (let t = 0; t <= C; t++, u++) { if (!((0 !== e && e !== h) || (0 !== t && t !== C))) continue; let s = 0, n = 0, o = 0; for (let a = 0; a <= 3; a++) for (let g = 0; g <= 3; g++, o++) { const c = b[e][a] * D[t][g]; s += i[r[o]][0] * c; n += i[r[o]][1] * c; } Q[u] = i.length; i.push([s, n]); E[u] = a.length; const g = new Uint8Array(3); g[0] = ((d[0] * (C - t) + f[0] * t) / C) | 0; g[1] = ((d[1] * (C - t) + f[1] * t) / C) | 0; g[2] = ((d[2] * (C - t) + f[2] * t) / C) | 0; a.push(g); } } Q[0] = r[0]; E[0] = s[0]; Q[C] = r[3]; E[C] = s[1]; Q[l * h] = r[12]; E[l * h] = s[2]; Q[l * h + C] = r[15]; E[l * h + C] = s[3]; this.figures[e] = { type: 'lattice', coords: Q, colors: E, verticesPerRow: l, }; } _updateBounds() { let e = this.coords[0][0], t = this.coords[0][1], i = e, a = t; for (let r = 1, s = this.coords.length; r < s; r++) { const s = this.coords[r][0], n = this.coords[r][1]; e = e > s ? s : e; t = t > n ? n : t; i = i < s ? s : i; a = a < n ? n : a; } this.bounds = [e, t, i, a]; } _packData() { let e, t, i, a; const r = this.coords, s = new Float32Array(2 * r.length); for (e = 0, i = 0, t = r.length; e < t; e++) { const t = r[e]; s[i++] = t[0]; s[i++] = t[1]; } this.coords = s; const n = this.colors, o = new Uint8Array(3 * n.length); for (e = 0, i = 0, t = n.length; e < t; e++) { const t = n[e]; o[i++] = t[0]; o[i++] = t[1]; o[i++] = t[2]; } this.colors = o; const g = this.figures; for (e = 0, t = g.length; e < t; e++) { const t = g[e], r = t.coords, s = t.colors; for (i = 0, a = r.length; i < a; i++) { r[i] *= 2; s[i] *= 3; } } } getIR() { const { bounds: e } = this; if (e[2] - e[0] == 0 || e[3] - e[1] == 0) throw new FormatError(`Invalid MeshShading bounds: [${e}].`); return [ 'Mesh', this.shadingType, this.coords, this.colors, this.figures, e, this.bbox, this.background, ]; } } class DummyShading extends BaseShading { getIR() { return ['Dummy']; } } function getTilingPatternIR(e, t, i) { const r = lookupMatrix(t.getArray('Matrix'), a), s = lookupNormalRect(t.getArray('BBox'), null); if (!s || s[2] - s[0] == 0 || s[3] - s[1] == 0) throw new FormatError('Invalid getTilingPatternIR /BBox array.'); const n = t.get('XStep'); if ('number' != typeof n) throw new FormatError('Invalid getTilingPatternIR /XStep value.'); const o = t.get('YStep'); if ('number' != typeof o) throw new FormatError('Invalid getTilingPatternIR /YStep value.'); const g = t.get('PaintType'); if (!Number.isInteger(g)) throw new FormatError('Invalid getTilingPatternIR /PaintType value.'); const c = t.get('TilingType'); if (!Number.isInteger(c)) throw new FormatError('Invalid getTilingPatternIR /TilingType value.'); return ['TilingPattern', i, e, r, s, n, o, g, c]; } const Da = [ 1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.54657, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.73293, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.9121, 0.86943, 0.79795, 0.88198, 0.77958, 0.70864, 0.81055, 0.90399, 0.88653, 0.96017, 0.82577, 0.77892, 0.78257, 0.97507, 1.54657, 0.97507, 0.85284, 0.89552, 0.90176, 0.88762, 0.8785, 0.75241, 0.8785, 0.90518, 0.95015, 0.77618, 0.8785, 0.88401, 0.91916, 0.86304, 0.88401, 0.91488, 0.8785, 0.8801, 0.8785, 0.8785, 0.91343, 0.7173, 1.04106, 0.8785, 0.85075, 0.95794, 0.82616, 0.85162, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.12401, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.73293, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.9121, 0.86943, 0.86943, 0.86943, 0.86943, 0.86943, 0.85284, 0.87508, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.8715, 0.75241, 0.90518, 0.90518, 0.90518, 0.90518, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.8785, 0.8801, 0.8801, 0.8801, 0.8801, 0.8801, 0.90747, 0.89049, 0.8785, 0.8785, 0.8785, 0.8785, 0.85162, 0.8785, 0.85162, 0.83908, 0.88762, 0.83908, 0.88762, 0.83908, 0.88762, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.87289, 0.83016, 0.88506, 0.93125, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.81921, 0.77618, 0.81921, 0.77618, 0.81921, 0.77618, 1, 1, 0.87356, 0.8785, 0.91075, 0.89608, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76229, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.79468, 0.91926, 0.88175, 0.70823, 0.94903, 0.9121, 0.8785, 1, 1, 0.9121, 0.8785, 0.87802, 0.88656, 0.8785, 0.86943, 0.8801, 0.86943, 0.8801, 0.86943, 0.8801, 0.87402, 0.89291, 0.77958, 0.91343, 1, 1, 0.77958, 0.91343, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.96017, 0.95794, 0.77892, 0.85162, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.88762, 0.77539, 0.8715, 0.87508, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70674, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.06303, 0.83908, 0.80352, 0.57184, 0.6965, 0.56289, 0.82001, 0.56029, 0.81235, 1.02988, 0.83908, 0.7762, 0.68156, 0.80367, 0.73133, 0.78257, 0.87356, 0.86943, 0.95958, 0.75727, 0.89019, 1.04924, 0.9121, 0.7648, 0.86943, 0.87356, 0.79795, 0.78275, 0.81055, 0.77892, 0.9762, 0.82577, 0.99819, 0.84896, 0.95958, 0.77892, 0.96108, 1.01407, 0.89049, 1.02988, 0.94211, 0.96108, 0.8936, 0.84021, 0.87842, 0.96399, 0.79109, 0.89049, 1.00813, 1.02988, 0.86077, 0.87445, 0.92099, 0.84723, 0.86513, 0.8801, 0.75638, 0.85714, 0.78216, 0.79586, 0.87965, 0.94211, 0.97747, 0.78287, 0.97926, 0.84971, 1.02988, 0.94211, 0.8801, 0.94211, 0.84971, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90264, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90518, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90548, 1, 1, 1, 1, 1, 1, 0.96017, 0.95794, 0.96017, 0.95794, 0.96017, 0.95794, 0.77892, 0.85162, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.92794, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71143, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.93835, 0.83406, 0.91133, 0.84107, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90527, 1.81055, 0.90527, 1.81055, 1.31006, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], Fa = { lineHeight: 1.2207, lineGap: 0.2207 }, Sa = [ 1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.56239, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.71805, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.90872, 0.85938, 0.79795, 0.87068, 0.77958, 0.69766, 0.81055, 0.90399, 0.88653, 0.96068, 0.82577, 0.77892, 0.78257, 0.97507, 1.529, 0.97507, 0.85284, 0.89552, 0.90176, 0.94908, 0.86411, 0.74012, 0.86411, 0.88323, 0.95015, 0.86411, 0.86331, 0.88401, 0.91916, 0.86304, 0.88401, 0.9039, 0.86331, 0.86331, 0.86411, 0.86411, 0.90464, 0.70852, 1.04106, 0.86331, 0.84372, 0.95794, 0.82616, 0.84548, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.19129, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.71805, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.90872, 0.85938, 0.85938, 0.85938, 0.85938, 0.85938, 0.85284, 0.87068, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.85887, 0.74012, 0.88323, 0.88323, 0.88323, 0.88323, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.90747, 0.89049, 0.86331, 0.86331, 0.86331, 0.86331, 0.84548, 0.86411, 0.84548, 0.83908, 0.94908, 0.83908, 0.94908, 0.83908, 0.94908, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.87289, 0.79538, 0.88506, 0.92726, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.81921, 0.86411, 0.81921, 0.86411, 0.81921, 0.86411, 1, 1, 0.87356, 0.86331, 0.91075, 0.8777, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76467, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.77312, 0.91926, 0.88175, 0.70823, 0.94903, 0.90872, 0.86331, 1, 1, 0.90872, 0.86331, 0.86906, 0.88116, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.87402, 0.86549, 0.77958, 0.90464, 1, 1, 0.77958, 0.90464, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.96068, 0.95794, 0.77892, 0.84548, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.94908, 0.77539, 0.85887, 0.87068, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70088, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.48387, 0.83908, 0.80352, 0.57118, 0.6965, 0.56347, 0.79179, 0.55853, 0.80346, 1.02988, 0.83908, 0.7762, 0.67174, 0.86036, 0.73133, 0.78257, 0.87356, 0.86441, 0.95958, 0.75727, 0.89019, 1.04924, 0.90872, 0.74889, 0.85938, 0.87891, 0.79795, 0.7957, 0.81055, 0.77892, 0.97447, 0.82577, 0.97466, 0.87179, 0.95958, 0.77892, 0.94252, 0.95612, 0.8753, 1.02988, 0.92733, 0.94252, 0.87411, 0.84021, 0.8728, 0.95612, 0.74081, 0.8753, 1.02189, 1.02988, 0.84814, 0.87445, 0.91822, 0.84723, 0.85668, 0.86331, 0.81344, 0.87581, 0.76422, 0.82046, 0.96057, 0.92733, 0.99375, 0.78022, 0.95452, 0.86015, 1.02988, 0.92733, 0.86331, 0.92733, 0.86015, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90631, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88323, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85174, 1, 1, 1, 1, 1, 1, 0.96068, 0.95794, 0.96068, 0.95794, 0.96068, 0.95794, 0.77892, 0.84548, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.89807, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71094, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.92972, 0.83406, 0.91133, 0.83326, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90616, 1.81055, 0.90527, 1.81055, 1.3107, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], ka = { lineHeight: 1.2207, lineGap: 0.2207 }, Ra = [ 1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39543, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.72346, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89249, 0.84118, 0.77452, 0.85374, 0.75186, 0.67789, 0.79776, 0.88844, 0.85066, 0.94309, 0.77818, 0.7306, 0.76659, 1.10369, 1.38313, 1.10369, 1.06139, 0.89552, 0.8739, 0.9245, 0.9245, 0.83203, 0.9245, 0.85865, 1.09842, 0.9245, 0.9245, 1.03297, 1.07692, 0.90918, 1.03297, 0.94959, 0.9245, 0.92274, 0.9245, 0.9245, 1.02933, 0.77832, 1.20562, 0.9245, 0.8916, 0.98986, 0.86621, 0.89453, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.16359, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.72346, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89249, 0.84118, 0.84118, 0.84118, 0.84118, 0.84118, 0.85284, 0.84557, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.84843, 0.83203, 0.85865, 0.85865, 0.85865, 0.85865, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.9245, 0.92274, 0.92274, 0.92274, 0.92274, 0.92274, 0.90747, 0.86651, 0.9245, 0.9245, 0.9245, 0.9245, 0.89453, 0.9245, 0.89453, 0.8675, 0.9245, 0.8675, 0.9245, 0.8675, 0.9245, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.85193, 0.8875, 0.86477, 0.99034, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.81105, 0.9245, 0.81105, 0.9245, 0.81105, 0.9245, 1, 1, 0.86275, 0.9245, 0.90872, 0.93591, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77896, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.9375, 0.98156, 0.93407, 0.77261, 1.11429, 0.89249, 0.9245, 1, 1, 0.89249, 0.9245, 0.92534, 0.86698, 0.9245, 0.84118, 0.92274, 0.84118, 0.92274, 0.84118, 0.92274, 0.8667, 0.86291, 0.75186, 1.02933, 1, 1, 0.75186, 1.02933, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 1, 1, 0.79776, 0.97655, 0.79776, 1.23023, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.94309, 0.98986, 0.7306, 0.89453, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.9245, 0.76318, 0.84843, 0.84557, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67009, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.8675, 0.90861, 0.6192, 0.7363, 0.64824, 0.82411, 0.56321, 0.85696, 1.23516, 0.8675, 0.81552, 0.7286, 0.84134, 0.73206, 0.76659, 0.86275, 0.84369, 0.90685, 0.77892, 0.85871, 1.02638, 0.89249, 0.75828, 0.84118, 0.85984, 0.77452, 0.76466, 0.79776, 0.7306, 0.90782, 0.77818, 0.903, 0.87291, 0.90685, 0.7306, 0.99058, 1.03667, 0.94635, 1.23516, 0.9849, 0.99058, 0.92393, 0.8916, 0.942, 1.03667, 0.75026, 0.94635, 1.0297, 1.23516, 0.90918, 0.94048, 0.98217, 0.89746, 0.84153, 0.92274, 0.82507, 0.88832, 0.84438, 0.88178, 1.03525, 0.9849, 1.00225, 0.78086, 0.97248, 0.89404, 1.23516, 0.9849, 0.92274, 0.9849, 0.89404, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89693, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85865, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90933, 1, 1, 1, 1, 1, 1, 0.94309, 0.98986, 0.94309, 0.98986, 0.94309, 0.98986, 0.7306, 0.89453, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.68994, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.97858, 0.82616, 0.91133, 0.83437, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90572, 1.81055, 0.90749, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85284, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], Na = { lineHeight: 1.2207, lineGap: 0.2207 }, Ga = [ 1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39016, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.73834, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89385, 0.85122, 0.77452, 0.86503, 0.75186, 0.68887, 0.79776, 0.88844, 0.85066, 0.94258, 0.77818, 0.7306, 0.76659, 1.10369, 1.39016, 1.10369, 1.06139, 0.89552, 0.8739, 0.86128, 0.94469, 0.8457, 0.94469, 0.89464, 1.09842, 0.84636, 0.94469, 1.03297, 1.07692, 0.90918, 1.03297, 0.95897, 0.94469, 0.9482, 0.94469, 0.94469, 1.04692, 0.78223, 1.20562, 0.94469, 0.90332, 0.98986, 0.86621, 0.90527, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.08707, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.73834, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89385, 0.85122, 0.85122, 0.85122, 0.85122, 0.85122, 0.85284, 0.85311, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.8693, 0.8457, 0.89464, 0.89464, 0.89464, 0.89464, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.94469, 0.9482, 0.9482, 0.9482, 0.9482, 0.9482, 0.90747, 0.86651, 0.94469, 0.94469, 0.94469, 0.94469, 0.90527, 0.94469, 0.90527, 0.8675, 0.86128, 0.8675, 0.86128, 0.8675, 0.86128, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.85193, 0.92454, 0.86477, 0.9921, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.81105, 0.84636, 0.81105, 0.84636, 0.81105, 0.84636, 1, 1, 0.86275, 0.94469, 0.90872, 0.95786, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77741, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.90452, 0.98156, 1.11842, 0.77261, 1.11429, 0.89385, 0.94469, 1, 1, 0.89385, 0.94469, 0.95877, 0.86901, 0.94469, 0.85122, 0.9482, 0.85122, 0.9482, 0.85122, 0.9482, 0.8667, 0.90016, 0.75186, 1.04692, 1, 1, 0.75186, 1.04692, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 1, 1, 0.79776, 0.92188, 0.79776, 1.23023, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.94258, 0.98986, 0.7306, 0.90527, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.86128, 0.76318, 0.8693, 0.85311, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67742, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.86686, 0.90861, 0.62267, 0.74359, 0.65649, 0.85498, 0.56963, 0.88254, 1.23516, 0.8675, 0.81552, 0.75443, 0.84503, 0.73206, 0.76659, 0.86275, 0.85122, 0.90685, 0.77892, 0.85746, 1.02638, 0.89385, 0.75657, 0.85122, 0.86275, 0.77452, 0.74171, 0.79776, 0.7306, 0.95165, 0.77818, 0.89772, 0.88831, 0.90685, 0.7306, 0.98142, 1.02191, 0.96576, 1.23516, 0.99018, 0.98142, 0.9236, 0.89258, 0.94035, 1.02191, 0.78848, 0.96576, 0.9561, 1.23516, 0.90918, 0.92578, 0.95424, 0.89746, 0.83969, 0.9482, 0.80113, 0.89442, 0.85208, 0.86155, 0.98022, 0.99018, 1.00452, 0.81209, 0.99247, 0.89181, 1.23516, 0.99018, 0.9482, 0.99018, 0.89181, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88844, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89464, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96766, 1, 1, 1, 1, 1, 1, 0.94258, 0.98986, 0.94258, 0.98986, 0.94258, 0.98986, 0.7306, 0.90527, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.69043, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.99331, 0.82616, 0.91133, 0.84286, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90527, 1.81055, 0.90527, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1.07185, 0.99413, 0.96334, 1.08065, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], xa = { lineHeight: 1.2207, lineGap: 0.2207 }, Ua = [ 0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.03374, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00042, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.03828, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00034, 0.99977, 1, 0.99997, 1.00026, 1.00078, 1.00036, 0.99973, 1.00013, 1.0006, 0.99977, 0.99977, 0.99988, 0.85148, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 1.00069, 1.00022, 0.99977, 1.00001, 0.99984, 1.00026, 1.00001, 1.00024, 1.00001, 0.9999, 1, 1.0006, 1.00001, 1.00041, 0.99962, 1.00026, 1.0006, 0.99995, 1.00041, 0.99942, 0.99973, 0.99927, 1.00082, 0.99902, 1.00026, 1.00087, 1.0006, 1.00069, 0.99973, 0.99867, 0.99973, 0.9993, 1.00026, 1.00049, 1.00056, 1, 0.99988, 0.99935, 0.99995, 0.99954, 1.00055, 0.99945, 1.00032, 1.0006, 0.99995, 1.00026, 0.99995, 1.00032, 1.00001, 1.00008, 0.99971, 1.00019, 0.9994, 1.00001, 1.0006, 1.00044, 0.99973, 1.00023, 1.00047, 1, 0.99942, 0.99561, 0.99989, 1.00035, 0.99977, 1.00035, 0.99977, 1.00019, 0.99944, 1.00001, 1.00021, 0.99926, 1.00035, 1.00035, 0.99942, 1.00048, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.99989, 1.00057, 1.00001, 0.99936, 1.00052, 1.00012, 0.99996, 1.00043, 1, 1.00035, 0.9994, 0.99976, 1.00035, 0.99973, 1.00052, 1.00041, 1.00119, 1.00037, 0.99973, 1.00002, 0.99986, 1.00041, 1.00041, 0.99902, 0.9996, 1.00034, 0.99999, 1.00026, 0.99999, 1.00026, 0.99973, 1.00052, 0.99973, 1, 0.99973, 1.00041, 1.00075, 0.9994, 1.0003, 0.99999, 1, 1.00041, 0.99955, 1, 0.99915, 0.99973, 0.99973, 1.00026, 1.00119, 0.99955, 0.99973, 1.0006, 0.99911, 1.0006, 1.00026, 0.99972, 1.00026, 0.99902, 1.00041, 0.99973, 0.99999, 1, 1, 1.00038, 1.0005, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 1.00047, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], Ma = { lineHeight: 1.2, lineGap: 0.2 }, La = [ 0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.0044, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99971, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.01011, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99977, 1, 1, 1.00026, 0.99969, 0.99972, 0.99981, 0.9998, 1.0006, 0.99977, 0.99977, 1.00022, 0.91155, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 0.99966, 1.00022, 1.00032, 1.00001, 0.99944, 1.00026, 1.00001, 0.99968, 1.00001, 1.00047, 1, 1.0006, 1.00001, 0.99981, 1.00101, 1.00026, 1.0006, 0.99948, 0.99981, 1.00064, 0.99973, 0.99942, 1.00101, 1.00061, 1.00026, 1.00069, 1.0006, 1.00014, 0.99973, 1.01322, 0.99973, 1.00065, 1.00026, 1.00012, 0.99923, 1, 1.00064, 1.00076, 0.99948, 1.00055, 1.00063, 1.00007, 0.99943, 1.0006, 0.99948, 1.00026, 0.99948, 0.99943, 1.00001, 1.00001, 1.00029, 1.00038, 1.00035, 1.00001, 1.0006, 1.0006, 0.99973, 0.99978, 1.00001, 1.00057, 0.99989, 0.99967, 0.99964, 0.99967, 0.99977, 0.99999, 0.99977, 1.00038, 0.99977, 1.00001, 0.99973, 1.00066, 0.99967, 0.99967, 1.00041, 0.99998, 0.99999, 0.99977, 1.00022, 0.99967, 1.00001, 0.99977, 1.00026, 0.99964, 1.00031, 1.00001, 0.99999, 0.99999, 1, 1.00023, 1, 1, 0.99999, 1.00035, 1.00001, 0.99999, 0.99973, 0.99977, 0.99999, 1.00058, 0.99973, 0.99973, 0.99955, 0.9995, 1.00026, 1.00026, 1.00032, 0.99989, 1.00034, 0.99999, 1.00026, 1.00026, 1.00026, 0.99973, 0.45998, 0.99973, 1.00026, 0.99973, 1.00001, 0.99999, 0.99982, 0.99994, 0.99996, 1, 1.00042, 1.00044, 1.00029, 1.00023, 0.99973, 0.99973, 1.00026, 0.99949, 1.00002, 0.99973, 1.0006, 1.0006, 1.0006, 0.99975, 1.00026, 1.00026, 1.00032, 0.98685, 0.99973, 1.00026, 1, 1, 0.99966, 1.00044, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1, 0.99973, 0.99971, 0.99978, 1, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00098, 1, 1, 1, 1.00049, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], Ha = { lineHeight: 1.35, lineGap: 0.2 }, Ja = [ 0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.0288, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 0.99946, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.06311, 0.99973, 1.00024, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00041, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.89547, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00001, 1, 1.00054, 0.99977, 1.00084, 1.00007, 0.99973, 1.00013, 0.99924, 1.00001, 1.00001, 0.99945, 0.91221, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00001, 0.99999, 0.99977, 0.99933, 1.00022, 1.00054, 1.00001, 1.00065, 1.00026, 1.00001, 1.0001, 1.00001, 1.00052, 1, 1.0006, 1.00001, 0.99945, 0.99897, 0.99968, 0.99924, 1.00036, 0.99945, 0.99949, 1, 1.0006, 0.99897, 0.99918, 0.99968, 0.99911, 0.99924, 1, 0.99962, 1.01487, 1, 1.0005, 0.99973, 1.00012, 1.00043, 1, 0.99995, 0.99994, 1.00036, 0.99947, 1.00019, 1.00063, 1.00025, 0.99924, 1.00036, 0.99973, 1.00036, 1.00025, 1.00001, 1.00001, 1.00027, 1.0001, 1.00068, 1.00001, 1.0006, 1.0006, 1, 1.00008, 0.99957, 0.99972, 0.9994, 0.99954, 0.99975, 1.00051, 1.00001, 1.00019, 1.00001, 1.0001, 0.99986, 1.00001, 1.00001, 1.00038, 0.99954, 0.99954, 0.9994, 1.00066, 0.99999, 0.99977, 1.00022, 1.00054, 1.00001, 0.99977, 1.00026, 0.99975, 1.0001, 1.00001, 0.99993, 0.9995, 0.99955, 1.00016, 0.99978, 0.99974, 1.00019, 1.00022, 0.99955, 1.00053, 0.99973, 1.00089, 1.00005, 0.99967, 1.00048, 0.99973, 1.00002, 1.00034, 0.99973, 0.99973, 0.99964, 1.00006, 1.00066, 0.99947, 0.99973, 0.98894, 0.99973, 1, 0.44898, 1, 0.99946, 1, 1.00039, 1.00082, 0.99991, 0.99991, 0.99985, 1.00022, 1.00023, 1.00061, 1.00006, 0.99966, 0.99973, 0.99973, 0.99973, 1.00019, 1.0008, 1, 0.99924, 0.99924, 0.99924, 0.99983, 1.00044, 0.99973, 0.99964, 0.98332, 1, 0.99973, 1, 1, 0.99962, 0.99895, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 1.00423, 0.99925, 0.99999, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00049, 1, 1.00245, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 1.00003, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], Ya = { lineHeight: 1.35, lineGap: 0.2 }, va = [ 0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.04596, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 1.00019, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.02572, 0.99973, 1.00005, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99999, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.84533, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99928, 1, 0.99977, 1.00013, 1.00055, 0.99947, 0.99945, 0.99941, 0.99924, 1.00001, 1.00001, 1.0004, 0.91621, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00005, 0.99999, 0.99977, 1.00015, 1.00022, 0.99977, 1.00001, 0.99973, 1.00026, 1.00001, 1.00019, 1.00001, 0.99946, 1, 1.0006, 1.00001, 0.99978, 1.00045, 0.99973, 0.99924, 1.00023, 0.99978, 0.99966, 1, 1.00065, 1.00045, 1.00019, 0.99973, 0.99973, 0.99924, 1, 1, 0.96499, 1, 1.00055, 0.99973, 1.00008, 1.00027, 1, 0.9997, 0.99995, 1.00023, 0.99933, 1.00019, 1.00015, 1.00031, 0.99924, 1.00023, 0.99973, 1.00023, 1.00031, 1.00001, 0.99928, 1.00029, 1.00092, 1.00035, 1.00001, 1.0006, 1.0006, 1, 0.99988, 0.99975, 1, 1.00082, 0.99561, 0.9996, 1.00035, 1.00001, 0.99962, 1.00001, 1.00092, 0.99964, 1.00001, 0.99963, 0.99999, 1.00035, 1.00035, 1.00082, 0.99962, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.9996, 0.99967, 1.00001, 1.00034, 1.00074, 1.00054, 1.00053, 1.00063, 0.99971, 0.99962, 1.00035, 0.99975, 0.99977, 0.99973, 1.00043, 0.99953, 1.0007, 0.99915, 0.99973, 1.00008, 0.99892, 1.00073, 1.00073, 1.00114, 0.99915, 1.00073, 0.99955, 0.99973, 1.00092, 0.99973, 1, 0.99998, 1, 1.0003, 1, 1.00043, 1.00001, 0.99969, 1.0003, 1, 1.00035, 1.00001, 0.9995, 1, 1.00092, 0.99973, 0.99973, 0.99973, 1.0007, 0.9995, 1, 0.99924, 1.0006, 0.99924, 0.99972, 1.00062, 0.99973, 1.00114, 1.00073, 1, 0.99955, 1, 1, 1.00047, 0.99968, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 0.99925, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], Ta = { lineHeight: 1.2, lineGap: 0.2 }, Ka = [ 365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1e3, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 719, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 785, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 385, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1e3, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1e3, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 465, 722, 333, 853, 906, 474, 825, 927, 838, 278, 722, 722, 601, 719, 667, 611, 722, 778, 278, 722, 667, 833, 722, 644, 778, 722, 667, 600, 611, 667, 821, 667, 809, 802, 278, 667, 615, 451, 611, 278, 582, 615, 610, 556, 606, 475, 460, 611, 541, 278, 558, 556, 612, 556, 445, 611, 766, 619, 520, 684, 446, 582, 715, 576, 753, 845, 278, 582, 611, 582, 845, 667, 669, 885, 567, 711, 667, 278, 276, 556, 1094, 1062, 875, 610, 722, 622, 719, 722, 719, 722, 567, 712, 667, 904, 626, 719, 719, 610, 702, 833, 722, 778, 719, 667, 722, 611, 622, 854, 667, 730, 703, 1005, 1019, 870, 979, 719, 711, 1031, 719, 556, 618, 615, 417, 635, 556, 709, 497, 615, 615, 500, 635, 740, 604, 611, 604, 611, 556, 490, 556, 875, 556, 615, 581, 833, 844, 729, 854, 615, 552, 854, 583, 556, 556, 611, 417, 552, 556, 278, 281, 278, 969, 906, 611, 500, 615, 556, 604, 778, 611, 487, 447, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1e3, 1e3, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1e3, 1e3, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1094, 556, 885, 489, 1115, 1e3, 768, 600, 834, 834, 834, 834, 1e3, 500, 1e3, 500, 1e3, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1e3, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333, ], qa = [ -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, ], Oa = [ 365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1e3, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 740, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 782, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 396, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1e3, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1e3, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 722, 333, 854, 906, 473, 844, 930, 847, 278, 722, 722, 610, 671, 667, 611, 722, 778, 278, 722, 667, 833, 722, 657, 778, 718, 667, 590, 611, 667, 822, 667, 829, 781, 278, 667, 620, 479, 611, 278, 591, 620, 621, 556, 610, 479, 492, 611, 558, 278, 566, 556, 603, 556, 450, 611, 712, 605, 532, 664, 409, 591, 704, 578, 773, 834, 278, 591, 611, 591, 834, 667, 667, 886, 614, 719, 667, 278, 278, 556, 1094, 1042, 854, 622, 719, 677, 719, 722, 708, 722, 614, 722, 667, 927, 643, 719, 719, 615, 687, 833, 722, 778, 719, 667, 722, 611, 677, 781, 667, 729, 708, 979, 989, 854, 1e3, 708, 719, 1042, 729, 556, 619, 604, 534, 618, 556, 736, 510, 611, 611, 507, 622, 740, 604, 611, 611, 611, 556, 889, 556, 885, 556, 646, 583, 889, 935, 707, 854, 594, 552, 865, 589, 556, 556, 611, 469, 563, 556, 278, 278, 278, 969, 906, 611, 507, 619, 556, 611, 778, 611, 575, 467, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1e3, 1e3, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1e3, 1e3, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1104, 556, 885, 516, 1146, 1e3, 768, 600, 834, 834, 834, 834, 999, 500, 1e3, 500, 1e3, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1e3, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333, ], Pa = [ -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, ], Wa = [ 365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1e3, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 625, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 733, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 281, 556, 400, 556, 222, 722, 556, 722, 556, 722, 556, 615, 723, 556, 778, 556, 778, 556, 778, 556, 1e3, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 354, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1e3, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 789, 846, 389, 794, 865, 775, 222, 667, 667, 570, 671, 667, 611, 722, 778, 278, 667, 667, 833, 722, 648, 778, 725, 667, 600, 611, 667, 837, 667, 831, 761, 278, 667, 570, 439, 555, 222, 550, 570, 571, 500, 556, 439, 463, 555, 542, 222, 500, 492, 548, 500, 447, 556, 670, 573, 486, 603, 374, 550, 652, 546, 728, 779, 222, 550, 556, 550, 779, 667, 667, 843, 544, 708, 667, 278, 278, 500, 1066, 982, 844, 589, 715, 639, 724, 667, 651, 667, 544, 704, 667, 917, 614, 715, 715, 589, 686, 833, 722, 778, 725, 667, 722, 611, 639, 795, 667, 727, 673, 920, 923, 805, 886, 651, 694, 1022, 682, 556, 562, 522, 493, 553, 556, 688, 465, 556, 556, 472, 564, 686, 550, 556, 556, 556, 500, 833, 500, 835, 500, 572, 518, 830, 851, 621, 736, 526, 492, 752, 534, 556, 556, 556, 378, 496, 500, 222, 222, 222, 910, 828, 556, 472, 565, 500, 556, 778, 556, 492, 339, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1e3, 1e3, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1e3, 1e3, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1083, 1e3, 768, 600, 834, 834, 834, 834, 1e3, 500, 998, 500, 1e3, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 584, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1e3, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285, ], ja = [ -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, ], Xa = [ 365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1e3, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 615, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 735, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 292, 556, 334, 556, 222, 722, 556, 722, 556, 722, 556, 604, 723, 556, 778, 556, 778, 556, 778, 556, 1e3, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 375, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1e3, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 784, 838, 384, 774, 855, 752, 222, 667, 667, 551, 668, 667, 611, 722, 778, 278, 667, 668, 833, 722, 650, 778, 722, 667, 618, 611, 667, 798, 667, 835, 748, 278, 667, 578, 446, 556, 222, 547, 578, 575, 500, 557, 446, 441, 556, 556, 222, 500, 500, 576, 500, 448, 556, 690, 569, 482, 617, 395, 547, 648, 525, 713, 781, 222, 547, 556, 547, 781, 667, 667, 865, 542, 719, 667, 278, 278, 500, 1057, 1010, 854, 583, 722, 635, 719, 667, 656, 667, 542, 677, 667, 923, 604, 719, 719, 583, 656, 833, 722, 778, 719, 667, 722, 611, 635, 760, 667, 740, 667, 917, 938, 792, 885, 656, 719, 1010, 722, 556, 573, 531, 365, 583, 556, 669, 458, 559, 559, 438, 583, 688, 552, 556, 542, 556, 500, 458, 500, 823, 500, 573, 521, 802, 823, 625, 719, 521, 510, 750, 542, 556, 556, 556, 365, 510, 500, 222, 278, 222, 906, 812, 556, 438, 559, 500, 552, 778, 556, 489, 411, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1e3, 1e3, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1e3, 1e3, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1073, 1e3, 768, 600, 834, 834, 834, 834, 1e3, 500, 1e3, 500, 1e3, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1e3, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285, ], Za = [ -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, ], Va = [ 1.36898, 1, 1, 0.72706, 0.80479, 0.83734, 0.98894, 0.99793, 0.9897, 0.93884, 0.86209, 0.94292, 0.94292, 1.16661, 1.02058, 0.93582, 0.96694, 0.93582, 1.19137, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.72851, 0.78966, 0.90838, 0.83637, 0.82391, 0.96376, 0.80061, 0.86275, 0.8768, 0.95407, 1.0258, 0.73901, 0.85022, 0.83655, 1.0156, 0.95546, 0.92179, 0.87107, 0.92179, 0.82114, 0.8096, 0.89713, 0.94438, 0.95353, 0.94083, 0.91905, 0.90406, 0.9446, 0.94292, 1.18777, 0.94292, 1.02058, 0.89903, 0.90088, 0.94938, 0.97898, 0.81093, 0.97571, 0.94938, 1.024, 0.9577, 0.95933, 0.98621, 1.0474, 0.97455, 0.98981, 0.9672, 0.95933, 0.9446, 0.97898, 0.97407, 0.97646, 0.78036, 1.10208, 0.95442, 0.95298, 0.97579, 0.9332, 0.94039, 0.938, 0.80687, 1.01149, 0.80687, 1.02058, 0.80479, 0.99793, 0.99793, 0.99793, 0.99793, 1.01149, 1.00872, 0.90088, 0.91882, 1.0213, 0.8361, 1.02058, 0.62295, 0.54324, 0.89022, 1.08595, 1, 1, 0.90088, 1, 0.97455, 0.93582, 0.90088, 1, 1.05686, 0.8361, 0.99642, 0.99642, 0.99642, 0.72851, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.868, 0.82391, 0.80061, 0.80061, 0.80061, 0.80061, 1.0258, 1.0258, 1.0258, 1.0258, 0.97484, 0.95546, 0.92179, 0.92179, 0.92179, 0.92179, 0.92179, 1.02058, 0.92179, 0.94438, 0.94438, 0.94438, 0.94438, 0.90406, 0.86958, 0.98225, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.9031, 0.81093, 0.94938, 0.94938, 0.94938, 0.94938, 0.98621, 0.98621, 0.98621, 0.98621, 0.93969, 0.95933, 0.9446, 0.9446, 0.9446, 0.9446, 0.9446, 1.08595, 0.9446, 0.95442, 0.95442, 0.95442, 0.95442, 0.94039, 0.97898, 0.94039, 0.90838, 0.94938, 0.90838, 0.94938, 0.90838, 0.94938, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.96376, 0.84313, 0.97484, 0.97571, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.8768, 0.9577, 0.8768, 0.9577, 0.8768, 0.9577, 1, 1, 0.95407, 0.95933, 0.97069, 0.95933, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 0.887, 1.01591, 0.73901, 1.0474, 1, 1, 0.97455, 0.83655, 0.98981, 1, 1, 0.83655, 0.73977, 0.83655, 0.73903, 0.84638, 1.033, 0.95546, 0.95933, 1, 1, 0.95546, 0.95933, 0.8271, 0.95417, 0.95933, 0.92179, 0.9446, 0.92179, 0.9446, 0.92179, 0.9446, 0.936, 0.91964, 0.82114, 0.97646, 1, 1, 0.82114, 0.97646, 0.8096, 0.78036, 0.8096, 0.78036, 1, 1, 0.8096, 0.78036, 1, 1, 0.89713, 0.77452, 0.89713, 1.10208, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94083, 0.97579, 0.90406, 0.94039, 0.90406, 0.9446, 0.938, 0.9446, 0.938, 0.9446, 0.938, 1, 0.99793, 0.90838, 0.94938, 0.868, 0.9031, 0.92179, 0.9446, 1, 1, 0.89713, 1.10208, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90989, 0.9358, 0.91945, 0.83181, 0.75261, 0.87992, 0.82976, 0.96034, 0.83689, 0.97268, 1.0078, 0.90838, 0.83637, 0.8019, 0.90157, 0.80061, 0.9446, 0.95407, 0.92436, 1.0258, 0.85022, 0.97153, 1.0156, 0.95546, 0.89192, 0.92179, 0.92361, 0.87107, 0.96318, 0.89713, 0.93704, 0.95638, 0.91905, 0.91709, 0.92796, 1.0258, 0.93704, 0.94836, 1.0373, 0.95933, 1.0078, 0.95871, 0.94836, 0.96174, 0.92601, 0.9498, 0.98607, 0.95776, 0.95933, 1.05453, 1.0078, 0.98275, 0.9314, 0.95617, 0.91701, 1.05993, 0.9446, 0.78367, 0.9553, 1, 0.86832, 1.0128, 0.95871, 0.99394, 0.87548, 0.96361, 0.86774, 1.0078, 0.95871, 0.9446, 0.95871, 0.86774, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.94083, 0.97579, 0.94083, 0.97579, 0.94083, 0.97579, 0.90406, 0.94039, 0.96694, 1, 0.89903, 1, 1, 1, 0.93582, 0.93582, 0.93582, 1, 0.908, 0.908, 0.918, 0.94219, 0.94219, 0.96544, 1, 1.285, 1, 1, 0.81079, 0.81079, 1, 1, 0.74854, 1, 1, 1, 1, 0.99793, 1, 1, 1, 0.65, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.17173, 1, 0.80535, 0.76169, 1.02058, 1.0732, 1.05486, 1, 1, 1.30692, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.16161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], _a = { lineHeight: 1.2, lineGap: 0.2 }, za = [ 1.36898, 1, 1, 0.66227, 0.80779, 0.81625, 0.97276, 0.97276, 0.97733, 0.92222, 0.83266, 0.94292, 0.94292, 1.16148, 1.02058, 0.93582, 0.96694, 0.93582, 1.17337, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.71541, 0.76813, 0.85576, 0.80591, 0.80729, 0.94299, 0.77512, 0.83655, 0.86523, 0.92222, 0.98621, 0.71743, 0.81698, 0.79726, 0.98558, 0.92222, 0.90637, 0.83809, 0.90637, 0.80729, 0.76463, 0.86275, 0.90699, 0.91605, 0.9154, 0.85308, 0.85458, 0.90531, 0.94292, 1.21296, 0.94292, 1.02058, 0.89903, 1.18616, 0.99613, 0.91677, 0.78216, 0.91677, 0.90083, 0.98796, 0.9135, 0.92168, 0.95381, 0.98981, 0.95298, 0.95381, 0.93459, 0.92168, 0.91513, 0.92004, 0.91677, 0.95077, 0.748, 1.04502, 0.91677, 0.92061, 0.94236, 0.89544, 0.89364, 0.9, 0.80687, 0.8578, 0.80687, 1.02058, 0.80779, 0.97276, 0.97276, 0.97276, 0.97276, 0.8578, 0.99973, 1.18616, 0.91339, 1.08074, 0.82891, 1.02058, 0.55509, 0.71526, 0.89022, 1.08595, 1, 1, 1.18616, 1, 0.96736, 0.93582, 1.18616, 1, 1.04864, 0.82711, 0.99043, 0.99043, 0.99043, 0.71541, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.845, 0.80729, 0.77512, 0.77512, 0.77512, 0.77512, 0.98621, 0.98621, 0.98621, 0.98621, 0.95961, 0.92222, 0.90637, 0.90637, 0.90637, 0.90637, 0.90637, 1.02058, 0.90251, 0.90699, 0.90699, 0.90699, 0.90699, 0.85458, 0.83659, 0.94951, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.85811, 0.78216, 0.90083, 0.90083, 0.90083, 0.90083, 0.95381, 0.95381, 0.95381, 0.95381, 0.9135, 0.92168, 0.91513, 0.91513, 0.91513, 0.91513, 0.91513, 1.08595, 0.91677, 0.91677, 0.91677, 0.91677, 0.91677, 0.89364, 0.92332, 0.89364, 0.85576, 0.99613, 0.85576, 0.99613, 0.85576, 0.99613, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.94299, 0.76783, 0.95961, 0.91677, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.86523, 0.9135, 0.86523, 0.9135, 0.86523, 0.9135, 1, 1, 0.92222, 0.92168, 0.92222, 0.92168, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.86036, 0.97096, 0.71743, 0.98981, 1, 1, 0.95298, 0.79726, 0.95381, 1, 1, 0.79726, 0.6894, 0.79726, 0.74321, 0.81691, 1.0006, 0.92222, 0.92168, 1, 1, 0.92222, 0.92168, 0.79464, 0.92098, 0.92168, 0.90637, 0.91513, 0.90637, 0.91513, 0.90637, 0.91513, 0.909, 0.87514, 0.80729, 0.95077, 1, 1, 0.80729, 0.95077, 0.76463, 0.748, 0.76463, 0.748, 1, 1, 0.76463, 0.748, 1, 1, 0.86275, 0.72651, 0.86275, 1.04502, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.9154, 0.94236, 0.85458, 0.89364, 0.85458, 0.90531, 0.9, 0.90531, 0.9, 0.90531, 0.9, 1, 0.97276, 0.85576, 0.99613, 0.845, 0.85811, 0.90251, 0.91677, 1, 1, 0.86275, 1.04502, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.00899, 1.30628, 0.85576, 0.80178, 0.66862, 0.7927, 0.69323, 0.88127, 0.72459, 0.89711, 0.95381, 0.85576, 0.80591, 0.7805, 0.94729, 0.77512, 0.90531, 0.92222, 0.90637, 0.98621, 0.81698, 0.92655, 0.98558, 0.92222, 0.85359, 0.90637, 0.90976, 0.83809, 0.94523, 0.86275, 0.83509, 0.93157, 0.85308, 0.83392, 0.92346, 0.98621, 0.83509, 0.92886, 0.91324, 0.92168, 0.95381, 0.90646, 0.92886, 0.90557, 0.86847, 0.90276, 0.91324, 0.86842, 0.92168, 0.99531, 0.95381, 0.9224, 0.85408, 0.92699, 0.86847, 1.0051, 0.91513, 0.80487, 0.93481, 1, 0.88159, 1.05214, 0.90646, 0.97355, 0.81539, 0.89398, 0.85923, 0.95381, 0.90646, 0.91513, 0.90646, 0.85923, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9154, 0.94236, 0.9154, 0.94236, 0.9154, 0.94236, 0.85458, 0.89364, 0.96694, 1, 0.89903, 1, 1, 1, 0.91782, 0.91782, 0.91782, 1, 0.896, 0.896, 0.896, 0.9332, 0.9332, 0.95973, 1, 1.26, 1, 1, 0.80479, 0.80178, 1, 1, 0.85633, 1, 1, 1, 1, 0.97276, 1, 1, 1, 0.698, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.14542, 1, 0.79199, 0.78694, 1.02058, 1.03493, 1.05486, 1, 1, 1.23026, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.20006, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], $a = { lineHeight: 1.2, lineGap: 0.2 }, Ar = [ 1.36898, 1, 1, 0.65507, 0.84943, 0.85639, 0.88465, 0.88465, 0.86936, 0.88307, 0.86948, 0.85283, 0.85283, 1.06383, 1.02058, 0.75945, 0.9219, 0.75945, 1.17337, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.75945, 0.75945, 1.02058, 1.02058, 1.02058, 0.69046, 0.70926, 0.85158, 0.77812, 0.76852, 0.89591, 0.70466, 0.76125, 0.80094, 0.86822, 0.83864, 0.728, 0.77212, 0.79475, 0.93637, 0.87514, 0.8588, 0.76013, 0.8588, 0.72421, 0.69866, 0.77598, 0.85991, 0.80811, 0.87832, 0.78112, 0.77512, 0.8562, 1.0222, 1.18417, 1.0222, 1.27014, 0.89903, 1.15012, 0.93859, 0.94399, 0.846, 0.94399, 0.81453, 1.0186, 0.94219, 0.96017, 1.03075, 1.02175, 0.912, 1.03075, 0.96998, 0.96017, 0.93859, 0.94399, 0.94399, 0.95493, 0.746, 1.12658, 0.94578, 0.91, 0.979, 0.882, 0.882, 0.83, 0.85034, 0.83537, 0.85034, 1.02058, 0.70869, 0.88465, 0.88465, 0.88465, 0.88465, 0.83537, 0.90083, 1.15012, 0.9161, 0.94565, 0.73541, 1.02058, 0.53609, 0.69353, 0.79519, 1.08595, 1, 1, 1.15012, 1, 0.91974, 0.75945, 1.15012, 1, 0.9446, 0.73361, 0.9005, 0.9005, 0.9005, 0.62864, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.773, 0.76852, 0.70466, 0.70466, 0.70466, 0.70466, 0.83864, 0.83864, 0.83864, 0.83864, 0.90561, 0.87514, 0.8588, 0.8588, 0.8588, 0.8588, 0.8588, 1.02058, 0.85751, 0.85991, 0.85991, 0.85991, 0.85991, 0.77512, 0.76013, 0.88075, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.8075, 0.846, 0.81453, 0.81453, 0.81453, 0.81453, 0.82424, 0.82424, 0.82424, 0.82424, 0.9278, 0.96017, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 1.08595, 0.8562, 0.94578, 0.94578, 0.94578, 0.94578, 0.882, 0.94578, 0.882, 0.85158, 0.93859, 0.85158, 0.93859, 0.85158, 0.93859, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.89591, 0.8544, 0.90561, 0.94399, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.80094, 0.94219, 0.80094, 0.94219, 0.80094, 0.94219, 1, 1, 0.86822, 0.96017, 0.86822, 0.96017, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 1.03075, 0.83864, 0.82424, 0.81402, 1.02738, 0.728, 1.02175, 1, 1, 0.912, 0.79475, 1.03075, 1, 1, 0.79475, 0.83911, 0.79475, 0.66266, 0.80553, 1.06676, 0.87514, 0.96017, 1, 1, 0.87514, 0.96017, 0.86865, 0.87396, 0.96017, 0.8588, 0.93859, 0.8588, 0.93859, 0.8588, 0.93859, 0.867, 0.84759, 0.72421, 0.95493, 1, 1, 0.72421, 0.95493, 0.69866, 0.746, 0.69866, 0.746, 1, 1, 0.69866, 0.746, 1, 1, 0.77598, 0.88417, 0.77598, 1.12658, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.87832, 0.979, 0.77512, 0.882, 0.77512, 0.8562, 0.83, 0.8562, 0.83, 0.8562, 0.83, 1, 0.88465, 0.85158, 0.93859, 0.773, 0.8075, 0.85751, 0.8562, 1, 1, 0.77598, 1.12658, 1.15012, 1.15012, 1.15012, 1.15012, 1.15012, 1.15313, 1.15012, 1.15012, 1.15012, 1.08106, 1.03901, 0.85158, 0.77025, 0.62264, 0.7646, 0.65351, 0.86026, 0.69461, 0.89947, 1.03075, 0.85158, 0.77812, 0.76449, 0.88836, 0.70466, 0.8562, 0.86822, 0.8588, 0.83864, 0.77212, 0.85308, 0.93637, 0.87514, 0.82352, 0.8588, 0.85701, 0.76013, 0.89058, 0.77598, 0.8156, 0.82565, 0.78112, 0.77899, 0.89386, 0.83864, 0.8156, 0.9486, 0.92388, 0.96186, 1.03075, 0.91123, 0.9486, 0.93298, 0.878, 0.93942, 0.92388, 0.84596, 0.96186, 0.95119, 1.03075, 0.922, 0.88787, 0.95829, 0.88, 0.93559, 0.93859, 0.78815, 0.93758, 1, 0.89217, 1.03737, 0.91123, 0.93969, 0.77487, 0.85769, 0.86799, 1.03075, 0.91123, 0.93859, 0.91123, 0.86799, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87832, 0.979, 0.87832, 0.979, 0.87832, 0.979, 0.77512, 0.882, 0.9219, 1, 0.89903, 1, 1, 1, 0.87321, 0.87321, 0.87321, 1, 1.027, 1.027, 1.027, 0.86847, 0.86847, 0.79121, 1, 1.124, 1, 1, 0.73572, 0.73572, 1, 1, 0.85034, 1, 1, 1, 1, 0.88465, 1, 1, 1, 0.669, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04828, 1, 0.74948, 0.75187, 1.02058, 0.98391, 1.02119, 1, 1, 1.06233, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05233, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], er = { lineHeight: 1.2, lineGap: 0.2 }, tr = [ 1.36898, 1, 1, 0.76305, 0.82784, 0.94935, 0.89364, 0.92241, 0.89073, 0.90706, 0.98472, 0.85283, 0.85283, 1.0664, 1.02058, 0.74505, 0.9219, 0.74505, 1.23456, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.74505, 0.74505, 1.02058, 1.02058, 1.02058, 0.73002, 0.72601, 0.91755, 0.8126, 0.80314, 0.92222, 0.73764, 0.79726, 0.83051, 0.90284, 0.86023, 0.74, 0.8126, 0.84869, 0.96518, 0.91115, 0.8858, 0.79761, 0.8858, 0.74498, 0.73914, 0.81363, 0.89591, 0.83659, 0.89633, 0.85608, 0.8111, 0.90531, 1.0222, 1.22736, 1.0222, 1.27014, 0.89903, 0.90088, 0.86667, 1.0231, 0.896, 1.01411, 0.90083, 1.05099, 1.00512, 0.99793, 1.05326, 1.09377, 0.938, 1.06226, 1.00119, 0.99793, 0.98714, 1.0231, 1.01231, 0.98196, 0.792, 1.19137, 0.99074, 0.962, 1.01915, 0.926, 0.942, 0.856, 0.85034, 0.92006, 0.85034, 1.02058, 0.69067, 0.92241, 0.92241, 0.92241, 0.92241, 0.92006, 0.9332, 0.90088, 0.91882, 0.93484, 0.75339, 1.02058, 0.56866, 0.54324, 0.79519, 1.08595, 1, 1, 0.90088, 1, 0.95325, 0.74505, 0.90088, 1, 0.97198, 0.75339, 0.91009, 0.91009, 0.91009, 0.66466, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.788, 0.80314, 0.73764, 0.73764, 0.73764, 0.73764, 0.86023, 0.86023, 0.86023, 0.86023, 0.92915, 0.91115, 0.8858, 0.8858, 0.8858, 0.8858, 0.8858, 1.02058, 0.8858, 0.89591, 0.89591, 0.89591, 0.89591, 0.8111, 0.79611, 0.89713, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86936, 0.896, 0.90083, 0.90083, 0.90083, 0.90083, 0.84224, 0.84224, 0.84224, 0.84224, 0.97276, 0.99793, 0.98714, 0.98714, 0.98714, 0.98714, 0.98714, 1.08595, 0.89876, 0.99074, 0.99074, 0.99074, 0.99074, 0.942, 1.0231, 0.942, 0.91755, 0.86667, 0.91755, 0.86667, 0.91755, 0.86667, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.92222, 0.93372, 0.92915, 1.01411, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.83051, 1.00512, 0.83051, 1.00512, 0.83051, 1.00512, 1, 1, 0.90284, 0.99793, 0.90976, 0.99793, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 1.05326, 0.86023, 0.84224, 0.82873, 1.07469, 0.74, 1.09377, 1, 1, 0.938, 0.84869, 1.06226, 1, 1, 0.84869, 0.83704, 0.84869, 0.81441, 0.85588, 1.08927, 0.91115, 0.99793, 1, 1, 0.91115, 0.99793, 0.91887, 0.90991, 0.99793, 0.8858, 0.98714, 0.8858, 0.98714, 0.8858, 0.98714, 0.894, 0.91434, 0.74498, 0.98196, 1, 1, 0.74498, 0.98196, 0.73914, 0.792, 0.73914, 0.792, 1, 1, 0.73914, 0.792, 1, 1, 0.81363, 0.904, 0.81363, 1.19137, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89633, 1.01915, 0.8111, 0.942, 0.8111, 0.90531, 0.856, 0.90531, 0.856, 0.90531, 0.856, 1, 0.92241, 0.91755, 0.86667, 0.788, 0.86936, 0.8858, 0.89876, 1, 1, 0.81363, 1.19137, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90388, 1.03901, 0.92138, 0.78105, 0.7154, 0.86169, 0.80513, 0.94007, 0.82528, 0.98612, 1.06226, 0.91755, 0.8126, 0.81884, 0.92819, 0.73764, 0.90531, 0.90284, 0.8858, 0.86023, 0.8126, 0.91172, 0.96518, 0.91115, 0.83089, 0.8858, 0.87791, 0.79761, 0.89297, 0.81363, 0.88157, 0.89992, 0.85608, 0.81992, 0.94307, 0.86023, 0.88157, 0.95308, 0.98699, 0.99793, 1.06226, 0.95817, 0.95308, 0.97358, 0.928, 0.98088, 0.98699, 0.92761, 0.99793, 0.96017, 1.06226, 0.986, 0.944, 0.95978, 0.938, 0.96705, 0.98714, 0.80442, 0.98972, 1, 0.89762, 1.04552, 0.95817, 0.99007, 0.87064, 0.91879, 0.88888, 1.06226, 0.95817, 0.98714, 0.95817, 0.88888, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89633, 1.01915, 0.89633, 1.01915, 0.89633, 1.01915, 0.8111, 0.942, 0.9219, 1, 0.89903, 1, 1, 1, 0.93173, 0.93173, 0.93173, 1, 1.06304, 1.06304, 1.06904, 0.89903, 0.89903, 0.80549, 1, 1.156, 1, 1, 0.76575, 0.76575, 1, 1, 0.72458, 1, 1, 1, 1, 0.92241, 1, 1, 1, 0.619, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.07257, 1, 0.74705, 0.71119, 1.02058, 1.024, 1.02119, 1, 1, 1.1536, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05638, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], ir = { lineHeight: 1.2, lineGap: 0.2 }, ar = [ 1.76738, 1, 1, 0.99297, 0.9824, 1.04016, 1.06497, 1.03424, 0.97529, 1.17647, 1.23203, 1.1085, 1.1085, 1.16939, 1.2107, 0.9754, 1.21408, 0.9754, 1.59578, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 0.81378, 0.81378, 1.2107, 1.2107, 1.2107, 0.71703, 0.97847, 0.97363, 0.88776, 0.8641, 1.02096, 0.79795, 0.85132, 0.914, 1.06085, 1.1406, 0.8007, 0.89858, 0.83693, 1.14889, 1.09398, 0.97489, 0.92094, 0.97489, 0.90399, 0.84041, 0.95923, 1.00135, 1, 1.06467, 0.98243, 0.90996, 0.99361, 1.1085, 1.56942, 1.1085, 1.2107, 0.74627, 0.94282, 0.96752, 1.01519, 0.86304, 1.01359, 0.97278, 1.15103, 1.01359, 0.98561, 1.02285, 1.02285, 1.00527, 1.02285, 1.0302, 0.99041, 1.0008, 1.01519, 1.01359, 1.02258, 0.79104, 1.16862, 0.99041, 0.97454, 1.02511, 0.99298, 0.96752, 0.95801, 0.94856, 1.16579, 0.94856, 1.2107, 0.9824, 1.03424, 1.03424, 1, 1.03424, 1.16579, 0.8727, 1.3871, 1.18622, 1.10818, 1.04478, 1.2107, 1.18622, 0.75155, 0.94994, 1.28826, 1.21408, 1.21408, 0.91056, 1, 0.91572, 0.9754, 0.64663, 1.18328, 1.24866, 1.04478, 1.14169, 1.15749, 1.17389, 0.71703, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.93506, 0.8641, 0.79795, 0.79795, 0.79795, 0.79795, 1.1406, 1.1406, 1.1406, 1.1406, 1.02096, 1.09398, 0.97426, 0.97426, 0.97426, 0.97426, 0.97426, 1.2107, 0.97489, 1.00135, 1.00135, 1.00135, 1.00135, 0.90996, 0.92094, 1.02798, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.93136, 0.86304, 0.97278, 0.97278, 0.97278, 0.97278, 1.02285, 1.02285, 1.02285, 1.02285, 0.97122, 0.99041, 1, 1, 1, 1, 1, 1.28826, 1.0008, 0.99041, 0.99041, 0.99041, 0.99041, 0.96752, 1.01519, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 1.02096, 1.03057, 1.02096, 1.03517, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.914, 1.01359, 0.914, 1.01359, 0.914, 1.01359, 1, 1, 1.06085, 0.98561, 1.06085, 1.00879, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 0.97138, 1.08692, 0.8007, 1.02285, 1, 1, 1.00527, 0.83693, 1.02285, 1, 1, 0.83693, 0.9455, 0.83693, 0.90418, 0.83693, 1.13005, 1.09398, 0.99041, 1, 1, 1.09398, 0.99041, 0.96692, 1.09251, 0.99041, 0.97489, 1.0008, 0.97489, 1.0008, 0.97489, 1.0008, 0.93994, 0.97931, 0.90399, 1.02258, 1, 1, 0.90399, 1.02258, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 1, 1, 0.95923, 1.07034, 0.95923, 1.16862, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.06467, 1.02511, 0.90996, 0.96752, 0.90996, 0.99361, 0.95801, 0.99361, 0.95801, 0.99361, 0.95801, 1.07733, 1.03424, 0.97363, 0.96752, 0.93506, 0.93136, 0.97489, 1.0008, 1, 1, 0.95923, 1.16862, 1.15103, 1.15103, 1.01173, 1.03959, 0.75953, 0.81378, 0.79912, 1.15103, 1.21994, 0.95161, 0.87815, 1.01149, 0.81525, 0.7676, 0.98167, 1.01134, 1.02546, 0.84097, 1.03089, 1.18102, 0.97363, 0.88776, 0.85134, 0.97826, 0.79795, 0.99361, 1.06085, 0.97489, 1.1406, 0.89858, 1.0388, 1.14889, 1.09398, 0.86039, 0.97489, 1.0595, 0.92094, 0.94793, 0.95923, 0.90996, 0.99346, 0.98243, 1.02112, 0.95493, 1.1406, 0.90996, 1.03574, 1.02597, 1.0008, 1.18102, 1.06628, 1.03574, 1.0192, 1.01932, 1.00886, 0.97531, 1.0106, 1.0008, 1.13189, 1.18102, 1.02277, 0.98683, 1.0016, 0.99561, 1.07237, 1.0008, 0.90434, 0.99921, 0.93803, 0.8965, 1.23085, 1.06628, 1.04983, 0.96268, 1.0499, 0.98439, 1.18102, 1.06628, 1.0008, 1.06628, 0.98439, 0.79795, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09466, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.97278, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.02065, 1, 1, 1, 1, 1, 1, 1.06467, 1.02511, 1.06467, 1.02511, 1.06467, 1.02511, 0.90996, 0.96752, 1, 1.21408, 0.89903, 1, 1, 0.75155, 1.04394, 1.04394, 1.04394, 1.04394, 0.98633, 0.98633, 0.98633, 0.73047, 0.73047, 1.20642, 0.91211, 1.25635, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.12454, 0.93503, 1.03424, 1.19687, 1.03424, 1, 1, 1, 0.771, 1, 1, 1.15749, 1.15749, 1.15749, 1.10948, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.16897, 1, 0.96085, 0.90137, 1.2107, 1.18416, 1.13973, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21172, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18874, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.09193, 1.09193, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], rr = { lineHeight: 1.33008, lineGap: 0 }, sr = [ 1.76738, 1, 1, 0.98946, 1.03959, 1.04016, 1.02809, 1.036, 0.97639, 1.10953, 1.23203, 1.11144, 1.11144, 1.16939, 1.21237, 0.9754, 1.21261, 0.9754, 1.59754, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 0.81378, 0.81378, 1.21237, 1.21237, 1.21237, 0.73541, 0.97847, 0.97363, 0.89723, 0.87897, 1.0426, 0.79429, 0.85292, 0.91149, 1.05815, 1.1406, 0.79631, 0.90128, 0.83853, 1.04396, 1.10615, 0.97552, 0.94436, 0.97552, 0.88641, 0.80527, 0.96083, 1.00135, 1, 1.06777, 0.9817, 0.91142, 0.99361, 1.11144, 1.57293, 1.11144, 1.21237, 0.74627, 1.31818, 1.06585, 0.97042, 0.83055, 0.97042, 0.93503, 1.1261, 0.97042, 0.97922, 1.14236, 0.94552, 1.01054, 1.14236, 1.02471, 0.97922, 0.94165, 0.97042, 0.97042, 1.0276, 0.78929, 1.1261, 0.97922, 0.95874, 1.02197, 0.98507, 0.96752, 0.97168, 0.95107, 1.16579, 0.95107, 1.21237, 1.03959, 1.036, 1.036, 1, 1.036, 1.16579, 0.87357, 1.31818, 1.18754, 1.26781, 1.05356, 1.21237, 1.18622, 0.79487, 0.94994, 1.29004, 1.24047, 1.24047, 1.31818, 1, 0.91484, 0.9754, 1.31818, 1.1349, 1.24866, 1.05356, 1.13934, 1.15574, 1.17389, 0.73541, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.94385, 0.87897, 0.79429, 0.79429, 0.79429, 0.79429, 1.1406, 1.1406, 1.1406, 1.1406, 1.0426, 1.10615, 0.97552, 0.97552, 0.97552, 0.97552, 0.97552, 1.21237, 0.97552, 1.00135, 1.00135, 1.00135, 1.00135, 0.91142, 0.94436, 0.98721, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 0.96705, 0.83055, 0.93503, 0.93503, 0.93503, 0.93503, 1.14236, 1.14236, 1.14236, 1.14236, 0.93125, 0.97922, 0.94165, 0.94165, 0.94165, 0.94165, 0.94165, 1.29004, 0.94165, 0.97922, 0.97922, 0.97922, 0.97922, 0.96752, 0.97042, 0.96752, 0.97363, 1.06585, 0.97363, 1.06585, 0.97363, 1.06585, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 1.0426, 1.0033, 1.0426, 0.97042, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.91149, 0.97042, 0.91149, 0.97042, 0.91149, 0.97042, 1, 1, 1.05815, 0.97922, 1.05815, 0.97922, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 0.97441, 1.04302, 0.79631, 1.01582, 1, 1, 1.01054, 0.83853, 1.14236, 1, 1, 0.83853, 1.09125, 0.83853, 0.90418, 0.83853, 1.19508, 1.10615, 0.97922, 1, 1, 1.10615, 0.97922, 1.01034, 1.10466, 0.97922, 0.97552, 0.94165, 0.97552, 0.94165, 0.97552, 0.94165, 0.91602, 0.91981, 0.88641, 1.0276, 1, 1, 0.88641, 1.0276, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 1, 1, 0.96083, 1.05403, 0.95923, 1.16862, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.06777, 1.02197, 0.91142, 0.96752, 0.91142, 0.99361, 0.97168, 0.99361, 0.97168, 0.99361, 0.97168, 1.23199, 1.036, 0.97363, 1.06585, 0.94385, 0.96705, 0.97552, 0.94165, 1, 1, 0.96083, 1.1261, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 0.95161, 1.27126, 1.00811, 0.83284, 0.77702, 0.99137, 0.95253, 1.0347, 0.86142, 1.07205, 1.14236, 0.97363, 0.89723, 0.86869, 1.09818, 0.79429, 0.99361, 1.05815, 0.97552, 1.1406, 0.90128, 1.06662, 1.04396, 1.10615, 0.84918, 0.97552, 1.04694, 0.94436, 0.98015, 0.96083, 0.91142, 1.00356, 0.9817, 1.01945, 0.98999, 1.1406, 0.91142, 1.04961, 0.9898, 1.00639, 1.14236, 1.07514, 1.04961, 0.99607, 1.02897, 1.008, 0.9898, 0.95134, 1.00639, 1.11121, 1.14236, 1.00518, 0.97981, 1.02186, 1, 1.08578, 0.94165, 0.99314, 0.98387, 0.93028, 0.93377, 1.35125, 1.07514, 1.10687, 0.93491, 1.04232, 1.00351, 1.14236, 1.07514, 0.94165, 1.07514, 1.00351, 0.79429, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09097, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.93503, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96609, 1, 1, 1, 1, 1, 1, 1.06777, 1.02197, 1.06777, 1.02197, 1.06777, 1.02197, 0.91142, 0.96752, 1, 1.21261, 0.89903, 1, 1, 0.75155, 1.04745, 1.04745, 1.04745, 1.04394, 0.98633, 0.98633, 0.98633, 0.72959, 0.72959, 1.20502, 0.91406, 1.26514, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.09125, 0.93327, 1.03336, 1.16541, 1.036, 1, 1, 1, 0.771, 1, 1, 1.15574, 1.15574, 1.15574, 1.15574, 0.86364, 0.94434, 0.86279, 0.94434, 0.86224, 1, 1, 1.16798, 1, 0.96085, 0.90068, 1.21237, 1.18416, 1.13904, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21339, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18775, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.13269, 1.13269, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], nr = { lineHeight: 1.33008, lineGap: 0 }, or = [ 1.76738, 1, 1, 0.98946, 1.14763, 1.05365, 1.06234, 0.96927, 0.92586, 1.15373, 1.18414, 0.91349, 0.91349, 1.07403, 1.17308, 0.78383, 1.20088, 0.78383, 1.42531, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78383, 0.78383, 1.17308, 1.17308, 1.17308, 0.77349, 0.94565, 0.94729, 0.85944, 0.88506, 0.9858, 0.74817, 0.80016, 0.88449, 0.98039, 0.95782, 0.69238, 0.89898, 0.83231, 0.98183, 1.03989, 0.96924, 0.86237, 0.96924, 0.80595, 0.74524, 0.86091, 0.95402, 0.94143, 0.98448, 0.8858, 0.83089, 0.93285, 1.0949, 1.39016, 1.0949, 1.45994, 0.74627, 1.04839, 0.97454, 0.97454, 0.87207, 0.97454, 0.87533, 1.06151, 0.97454, 1.00176, 1.16484, 1.08132, 0.98047, 1.16484, 1.02989, 1.01054, 0.96225, 0.97454, 0.97454, 1.06598, 0.79004, 1.16344, 1.00351, 0.94629, 0.9973, 0.91016, 0.96777, 0.9043, 0.91082, 0.92481, 0.91082, 1.17308, 0.95748, 0.96927, 0.96927, 1, 0.96927, 0.92481, 0.80597, 1.04839, 1.23393, 1.1781, 0.9245, 1.17308, 1.20808, 0.63218, 0.94261, 1.24822, 1.09971, 1.09971, 1.04839, 1, 0.85273, 0.78032, 1.04839, 1.09971, 1.22326, 0.9245, 1.09836, 1.13525, 1.15222, 0.70424, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.85498, 0.88506, 0.74817, 0.74817, 0.74817, 0.74817, 0.95782, 0.95782, 0.95782, 0.95782, 0.9858, 1.03989, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.17308, 0.96924, 0.95402, 0.95402, 0.95402, 0.95402, 0.83089, 0.86237, 0.88409, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.92916, 0.87207, 0.87533, 0.87533, 0.87533, 0.87533, 0.93146, 0.93146, 0.93146, 0.93146, 0.93854, 1.01054, 0.96225, 0.96225, 0.96225, 0.96225, 0.96225, 1.24822, 0.8761, 1.00351, 1.00351, 1.00351, 1.00351, 0.96777, 0.97454, 0.96777, 0.94729, 0.97454, 0.94729, 0.97454, 0.94729, 0.97454, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.9858, 0.95391, 0.9858, 0.97454, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.88449, 0.97454, 0.88449, 0.97454, 0.88449, 0.97454, 1, 1, 0.98039, 1.00176, 0.98039, 1.00176, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 1.16484, 0.95782, 0.93146, 0.84421, 1.12761, 0.69238, 1.08132, 1, 1, 0.98047, 0.83231, 1.16484, 1, 1, 0.84723, 1.04861, 0.84723, 0.78755, 0.83231, 1.23736, 1.03989, 1.01054, 1, 1, 1.03989, 1.01054, 0.9857, 1.03849, 1.01054, 0.96924, 0.96225, 0.96924, 0.96225, 0.96924, 0.96225, 0.92383, 0.90171, 0.80595, 1.06598, 1, 1, 0.80595, 1.06598, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 1, 1, 0.86091, 1.02759, 0.85771, 1.16344, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.98448, 0.9973, 0.83089, 0.96777, 0.83089, 0.93285, 0.9043, 0.93285, 0.9043, 0.93285, 0.9043, 1.31868, 0.96927, 0.94729, 0.97454, 0.85498, 0.92916, 0.96924, 0.8761, 1, 1, 0.86091, 1.16344, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 0.81965, 0.81965, 0.94729, 0.78032, 0.71022, 0.90883, 0.84171, 0.99877, 0.77596, 1.05734, 1.2, 0.94729, 0.85944, 0.82791, 0.9607, 0.74817, 0.93285, 0.98039, 0.96924, 0.95782, 0.89898, 0.98316, 0.98183, 1.03989, 0.78614, 0.96924, 0.97642, 0.86237, 0.86075, 0.86091, 0.83089, 0.90082, 0.8858, 0.97296, 1.01284, 0.95782, 0.83089, 1.0976, 1.04, 1.03342, 1.2, 1.0675, 1.0976, 0.98205, 1.03809, 1.05097, 1.04, 0.95364, 1.03342, 1.05401, 1.2, 1.02148, 1.0119, 1.04724, 1.0127, 1.02732, 0.96225, 0.8965, 0.97783, 0.93574, 0.94818, 1.30679, 1.0675, 1.11826, 0.99821, 1.0557, 1.0326, 1.2, 1.0675, 0.96225, 1.0675, 1.0326, 0.74817, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03754, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87533, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.98705, 1, 1, 1, 1, 1, 1, 0.98448, 0.9973, 0.98448, 0.9973, 0.98448, 0.9973, 0.83089, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 0.94945, 0.94945, 0.94945, 0.94945, 1.12317, 1.12317, 1.12317, 0.67603, 0.67603, 1.15621, 0.73584, 1.21191, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87709, 0.96927, 1.01473, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.09836, 1.09836, 1.09836, 1.01522, 0.86321, 0.94434, 0.8649, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86438, 1.17308, 1.18416, 1.14589, 0.69825, 0.97622, 1.96791, 1.24822, 1.24822, 1.17308, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.17984, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10742, 1.10742, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], gr = { lineHeight: 1.33008, lineGap: 0 }, Ir = [ 1.76738, 1, 1, 0.98594, 1.02285, 1.10454, 1.06234, 0.96927, 0.92037, 1.19985, 1.2046, 0.90616, 0.90616, 1.07152, 1.1714, 0.78032, 1.20088, 0.78032, 1.40246, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78032, 0.78032, 1.1714, 1.1714, 1.1714, 0.80597, 0.94084, 0.96706, 0.85944, 0.85734, 0.97093, 0.75842, 0.79936, 0.88198, 0.9831, 0.95782, 0.71387, 0.86969, 0.84636, 1.07796, 1.03584, 0.96924, 0.83968, 0.96924, 0.82826, 0.79649, 0.85771, 0.95132, 0.93119, 0.98965, 0.88433, 0.8287, 0.93365, 1.08612, 1.3638, 1.08612, 1.45786, 0.74627, 0.80499, 0.91484, 1.05707, 0.92383, 1.05882, 0.9403, 1.12654, 1.05882, 1.01756, 1.09011, 1.09011, 0.99414, 1.09011, 1.034, 1.01756, 1.05356, 1.05707, 1.05882, 1.04399, 0.84863, 1.21968, 1.01756, 0.95801, 1.00068, 0.91797, 0.96777, 0.9043, 0.90351, 0.92105, 0.90351, 1.1714, 0.85337, 0.96927, 0.96927, 0.99912, 0.96927, 0.92105, 0.80597, 1.2434, 1.20808, 1.05937, 0.90957, 1.1714, 1.20808, 0.75155, 0.94261, 1.24644, 1.09971, 1.09971, 0.84751, 1, 0.85273, 0.78032, 0.61584, 1.05425, 1.17914, 0.90957, 1.08665, 1.11593, 1.14169, 0.73381, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.86035, 0.85734, 0.75842, 0.75842, 0.75842, 0.75842, 0.95782, 0.95782, 0.95782, 0.95782, 0.97093, 1.03584, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.1714, 0.96924, 0.95132, 0.95132, 0.95132, 0.95132, 0.8287, 0.83968, 0.89049, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.93575, 0.92383, 0.9403, 0.9403, 0.9403, 0.9403, 0.8717, 0.8717, 0.8717, 0.8717, 1.00527, 1.01756, 1.05356, 1.05356, 1.05356, 1.05356, 1.05356, 1.24644, 0.95923, 1.01756, 1.01756, 1.01756, 1.01756, 0.96777, 1.05707, 0.96777, 0.96706, 0.91484, 0.96706, 0.91484, 0.96706, 0.91484, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.97093, 1.0969, 0.97093, 1.05882, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.88198, 1.05882, 0.88198, 1.05882, 0.88198, 1.05882, 1, 1, 0.9831, 1.01756, 0.9831, 1.01756, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 1.09011, 0.95782, 0.8717, 0.84784, 1.11551, 0.71387, 1.09011, 1, 1, 0.99414, 0.84636, 1.09011, 1, 1, 0.84636, 1.0536, 0.84636, 0.94298, 0.84636, 1.23297, 1.03584, 1.01756, 1, 1, 1.03584, 1.01756, 1.00323, 1.03444, 1.01756, 0.96924, 1.05356, 0.96924, 1.05356, 0.96924, 1.05356, 0.93066, 0.98293, 0.82826, 1.04399, 1, 1, 0.82826, 1.04399, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 1, 1, 0.85771, 1.17318, 0.85771, 1.21968, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.98965, 1.00068, 0.8287, 0.96777, 0.8287, 0.93365, 0.9043, 0.93365, 0.9043, 0.93365, 0.9043, 1.08571, 0.96927, 0.96706, 0.91484, 0.86035, 0.93575, 0.96924, 0.95923, 1, 1, 0.85771, 1.21968, 1.11437, 1.11437, 0.93109, 0.91202, 0.60411, 0.84164, 0.55572, 1.01173, 0.97361, 0.81818, 0.81818, 0.96635, 0.78032, 0.72727, 0.92366, 0.98601, 1.03405, 0.77968, 1.09799, 1.2, 0.96706, 0.85944, 0.85638, 0.96491, 0.75842, 0.93365, 0.9831, 0.96924, 0.95782, 0.86969, 0.94152, 1.07796, 1.03584, 0.78437, 0.96924, 0.98715, 0.83968, 0.83491, 0.85771, 0.8287, 0.94492, 0.88433, 0.9287, 1.0098, 0.95782, 0.8287, 1.0625, 0.98248, 1.03424, 1.2, 1.01071, 1.0625, 0.95246, 1.03809, 1.04912, 0.98248, 1.00221, 1.03424, 1.05443, 1.2, 1.04785, 0.99609, 1.00169, 1.05176, 0.99346, 1.05356, 0.9087, 1.03004, 0.95542, 0.93117, 1.23362, 1.01071, 1.07831, 1.02512, 1.05205, 1.03502, 1.2, 1.01071, 1.05356, 1.01071, 1.03502, 0.75842, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03719, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9403, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04021, 1, 1, 1, 1, 1, 1, 0.98965, 1.00068, 0.98965, 1.00068, 0.98965, 1.00068, 0.8287, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 1.03077, 1.03077, 1.03077, 1.03077, 1.13196, 1.13196, 1.13196, 0.67428, 0.67428, 1.16039, 0.73291, 1.20996, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87796, 0.96927, 1.01518, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.10539, 1.10539, 1.11358, 1.06967, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86507, 1.1714, 1.18416, 1.14589, 0.69825, 0.97622, 1.9697, 1.24822, 1.24822, 1.17238, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18083, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10938, 1.10938, 1, 1, 1, 1.05425, 1.09971, 1.09971, 1.09971, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ], cr = { lineHeight: 1.33008, lineGap: 0 }, Cr = getLookupTableFactory(function (e) { e['MyriadPro-Regular'] = e['PdfJS-Fallback-Regular'] = { name: 'LiberationSans-Regular', factors: tr, baseWidths: Xa, baseMapping: Za, metrics: ir, }; e['MyriadPro-Bold'] = e['PdfJS-Fallback-Bold'] = { name: 'LiberationSans-Bold', factors: Va, baseWidths: Ka, baseMapping: qa, metrics: _a, }; e['MyriadPro-It'] = e['MyriadPro-Italic'] = e['PdfJS-Fallback-Italic'] = { name: 'LiberationSans-Italic', factors: Ar, baseWidths: Wa, baseMapping: ja, metrics: er, }; e['MyriadPro-BoldIt'] = e['MyriadPro-BoldItalic'] = e['PdfJS-Fallback-BoldItalic'] = { name: 'LiberationSans-BoldItalic', factors: za, baseWidths: Oa, baseMapping: Pa, metrics: $a, }; e.ArialMT = e.Arial = e['Arial-Regular'] = { name: 'LiberationSans-Regular', baseWidths: Xa, baseMapping: Za }; e['Arial-BoldMT'] = e['Arial-Bold'] = { name: 'LiberationSans-Bold', baseWidths: Ka, baseMapping: qa, }; e['Arial-ItalicMT'] = e['Arial-Italic'] = { name: 'LiberationSans-Italic', baseWidths: Wa, baseMapping: ja, }; e['Arial-BoldItalicMT'] = e['Arial-BoldItalic'] = { name: 'LiberationSans-BoldItalic', baseWidths: Oa, baseMapping: Pa, }; e['Calibri-Regular'] = { name: 'LiberationSans-Regular', factors: Ga, baseWidths: Xa, baseMapping: Za, metrics: xa, }; e['Calibri-Bold'] = { name: 'LiberationSans-Bold', factors: Da, baseWidths: Ka, baseMapping: qa, metrics: Fa, }; e['Calibri-Italic'] = { name: 'LiberationSans-Italic', factors: Ra, baseWidths: Wa, baseMapping: ja, metrics: Na, }; e['Calibri-BoldItalic'] = { name: 'LiberationSans-BoldItalic', factors: Sa, baseWidths: Oa, baseMapping: Pa, metrics: ka, }; e['Segoeui-Regular'] = { name: 'LiberationSans-Regular', factors: Ir, baseWidths: Xa, baseMapping: Za, metrics: cr, }; e['Segoeui-Bold'] = { name: 'LiberationSans-Bold', factors: ar, baseWidths: Ka, baseMapping: qa, metrics: rr, }; e['Segoeui-Italic'] = { name: 'LiberationSans-Italic', factors: or, baseWidths: Wa, baseMapping: ja, metrics: gr, }; e['Segoeui-BoldItalic'] = { name: 'LiberationSans-BoldItalic', factors: sr, baseWidths: Oa, baseMapping: Pa, metrics: nr, }; e['Helvetica-Regular'] = e.Helvetica = { name: 'LiberationSans-Regular', factors: va, baseWidths: Xa, baseMapping: Za, metrics: Ta, }; e['Helvetica-Bold'] = { name: 'LiberationSans-Bold', factors: Ua, baseWidths: Ka, baseMapping: qa, metrics: Ma, }; e['Helvetica-Italic'] = { name: 'LiberationSans-Italic', factors: Ja, baseWidths: Wa, baseMapping: ja, metrics: Ya, }; e['Helvetica-BoldItalic'] = { name: 'LiberationSans-BoldItalic', factors: La, baseWidths: Oa, baseMapping: Pa, metrics: Ha, }; }); function getXfaFontName(e) { const t = normalizeFontName(e); return Cr()[t]; } function getXfaFontDict(e) { const t = (function getXfaFontWidths(e) { const t = getXfaFontName(e); if (!t) return null; const { baseWidths: i, baseMapping: a, factors: r } = t, s = r ? i.map((e, t) => e * r[t]) : i; let n, o = -2; const g = []; for (const [e, t] of a.map((e, t) => [e, t]).sort(([e], [t]) => e - t)) if (-1 !== e) if (e === o + 1) { n.push(s[t]); o += 1; } else { o = e; n = [s[t]]; g.push(e, n); } return g; })(e), i = new Dict(null); i.set('BaseFont', Name.get(e)); i.set('Type', Name.get('Font')); i.set('Subtype', Name.get('CIDFontType2')); i.set('Encoding', Name.get('Identity-H')); i.set('CIDToGIDMap', Name.get('Identity')); i.set('W', t); i.set('FirstChar', t[0]); i.set('LastChar', t.at(-2) + t.at(-1).length - 1); const a = new Dict(null); i.set('FontDescriptor', a); const r = new Dict(null); r.set('Ordering', 'Identity'); r.set('Registry', 'Adobe'); r.set('Supplement', 0); i.set('CIDSystemInfo', r); return i; } class PostScriptParser { constructor(e) { this.lexer = e; this.operators = []; this.token = null; this.prev = null; } nextToken() { this.prev = this.token; this.token = this.lexer.getToken(); } accept(e) { if (this.token.type === e) { this.nextToken(); return !0; } return !1; } expect(e) { if (this.accept(e)) return !0; throw new FormatError( `Unexpected symbol: found ${this.token.type} expected ${e}.`, ); } parse() { this.nextToken(); this.expect(hr.LBRACE); this.parseBlock(); this.expect(hr.RBRACE); return this.operators; } parseBlock() { for (;;) if (this.accept(hr.NUMBER)) this.operators.push(this.prev.value); else if (this.accept(hr.OPERATOR)) this.operators.push(this.prev.value); else { if (!this.accept(hr.LBRACE)) return; this.parseCondition(); } } parseCondition() { const e = this.operators.length; this.operators.push(null, null); this.parseBlock(); this.expect(hr.RBRACE); if (this.accept(hr.IF)) { this.operators[e] = this.operators.length; this.operators[e + 1] = 'jz'; } else { if (!this.accept(hr.LBRACE)) throw new FormatError('PS Function: error parsing conditional.'); { const t = this.operators.length; this.operators.push(null, null); const i = this.operators.length; this.parseBlock(); this.expect(hr.RBRACE); this.expect(hr.IFELSE); this.operators[t] = this.operators.length; this.operators[t + 1] = 'j'; this.operators[e] = i; this.operators[e + 1] = 'jz'; } } } } const hr = { LBRACE: 0, RBRACE: 1, NUMBER: 2, OPERATOR: 3, IF: 4, IFELSE: 5 }; class PostScriptToken { static get opCache() { return shadow(this, 'opCache', Object.create(null)); } constructor(e, t) { this.type = e; this.value = t; } static getOperator(e) { return (PostScriptToken.opCache[e] ||= new PostScriptToken(hr.OPERATOR, e)); } static get LBRACE() { return shadow(this, 'LBRACE', new PostScriptToken(hr.LBRACE, '{')); } static get RBRACE() { return shadow(this, 'RBRACE', new PostScriptToken(hr.RBRACE, '}')); } static get IF() { return shadow(this, 'IF', new PostScriptToken(hr.IF, 'IF')); } static get IFELSE() { return shadow(this, 'IFELSE', new PostScriptToken(hr.IFELSE, 'IFELSE')); } } class PostScriptLexer { constructor(e) { this.stream = e; this.nextChar(); this.strBuf = []; } nextChar() { return (this.currentChar = this.stream.getByte()); } getToken() { let e = !1, t = this.currentChar; for (;;) { if (t < 0) return yt; if (e) (10 !== t && 13 !== t) || (e = !1); else if (37 === t) e = !0; else if (!isWhiteSpace(t)) break; t = this.nextChar(); } switch (0 | t) { case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 43: case 45: case 46: return new PostScriptToken(hr.NUMBER, this.getNumber()); case 123: this.nextChar(); return PostScriptToken.LBRACE; case 125: this.nextChar(); return PostScriptToken.RBRACE; } const i = this.strBuf; i.length = 0; i[0] = String.fromCharCode(t); for ( ; (t = this.nextChar()) >= 0 && ((t >= 65 && t <= 90) || (t >= 97 && t <= 122)); ) i.push(String.fromCharCode(t)); const a = i.join(''); switch (a.toLowerCase()) { case 'if': return PostScriptToken.IF; case 'ifelse': return PostScriptToken.IFELSE; default: return PostScriptToken.getOperator(a); } } getNumber() { let e = this.currentChar; const t = this.strBuf; t.length = 0; t[0] = String.fromCharCode(e); for ( ; (e = this.nextChar()) >= 0 && ((e >= 48 && e <= 57) || 45 === e || 46 === e); ) t.push(String.fromCharCode(e)); const i = parseFloat(t.join('')); if (isNaN(i)) throw new FormatError(`Invalid floating point number: ${i}`); return i; } } class BaseLocalCache { constructor(e) { this.constructor === BaseLocalCache && unreachable('Cannot initialize BaseLocalCache.'); this._onlyRefs = !0 === e?.onlyRefs; if (!this._onlyRefs) { this._nameRefMap = new Map(); this._imageMap = new Map(); } this._imageCache = new RefSetCache(); } getByName(e) { this._onlyRefs && unreachable('Should not call `getByName` method.'); const t = this._nameRefMap.get(e); return t ? this.getByRef(t) : this._imageMap.get(e) || null; } getByRef(e) { return this._imageCache.get(e) || null; } set(e, t, i) { unreachable('Abstract method `set` called.'); } } class LocalImageCache extends BaseLocalCache { set(e, t = null, i) { if ('string' != typeof e) throw new Error('LocalImageCache.set - expected "name" argument.'); if (t) { if (this._imageCache.has(t)) return; this._nameRefMap.set(e, t); this._imageCache.put(t, i); } else this._imageMap.has(e) || this._imageMap.set(e, i); } } class LocalColorSpaceCache extends BaseLocalCache { set(e = null, t = null, i) { if ('string' != typeof e && !t) throw new Error( 'LocalColorSpaceCache.set - expected "name" and/or "ref" argument.', ); if (t) { if (this._imageCache.has(t)) return; null !== e && this._nameRefMap.set(e, t); this._imageCache.put(t, i); } else this._imageMap.has(e) || this._imageMap.set(e, i); } } class LocalFunctionCache extends BaseLocalCache { constructor(e) { super({ onlyRefs: !0 }); } set(e = null, t, i) { if (!t) throw new Error('LocalFunctionCache.set - expected "ref" argument.'); this._imageCache.has(t) || this._imageCache.put(t, i); } } class LocalGStateCache extends BaseLocalCache { set(e, t = null, i) { if ('string' != typeof e) throw new Error('LocalGStateCache.set - expected "name" argument.'); if (t) { if (this._imageCache.has(t)) return; this._nameRefMap.set(e, t); this._imageCache.put(t, i); } else this._imageMap.has(e) || this._imageMap.set(e, i); } } class LocalTilingPatternCache extends BaseLocalCache { constructor(e) { super({ onlyRefs: !0 }); } set(e = null, t, i) { if (!t) throw new Error('LocalTilingPatternCache.set - expected "ref" argument.'); this._imageCache.has(t) || this._imageCache.put(t, i); } } class RegionalImageCache extends BaseLocalCache { constructor(e) { super({ onlyRefs: !0 }); } set(e = null, t, i) { if (!t) throw new Error('RegionalImageCache.set - expected "ref" argument.'); this._imageCache.has(t) || this._imageCache.put(t, i); } } class GlobalImageCache { static NUM_PAGES_THRESHOLD = 2; static MIN_IMAGES_TO_CACHE = 10; static MAX_BYTE_SIZE = 5e7; #b = new RefSet(); constructor() { this._refCache = new RefSetCache(); this._imageCache = new RefSetCache(); } get #D() { let e = 0; for (const t of this._imageCache) e += t.byteSize; return e; } get #F() { return ( !(this._imageCache.size < GlobalImageCache.MIN_IMAGES_TO_CACHE) && !(this.#D < GlobalImageCache.MAX_BYTE_SIZE) ); } shouldCache(e, t) { let i = this._refCache.get(e); if (!i) { i = new Set(); this._refCache.put(e, i); } i.add(t); return ( !(i.size < GlobalImageCache.NUM_PAGES_THRESHOLD) && !(!this._imageCache.has(e) && this.#F) ); } addDecodeFailed(e) { this.#b.put(e); } hasDecodeFailed(e) { return this.#b.has(e); } addByteSize(e, t) { const i = this._imageCache.get(e); i && (i.byteSize || (i.byteSize = t)); } getData(e, t) { const i = this._refCache.get(e); if (!i) return null; if (i.size < GlobalImageCache.NUM_PAGES_THRESHOLD) return null; const a = this._imageCache.get(e); if (!a) return null; i.add(t); return a; } setData(e, t) { if (!this._refCache.has(e)) throw new Error( 'GlobalImageCache.setData - expected "shouldCache" to have been called.', ); this._imageCache.has(e) || (this.#F ? warn('GlobalImageCache.setData - cache limit reached.') : this._imageCache.put(e, t)); } clear(e = !1) { if (!e) { this.#b.clear(); this._refCache.clear(); } this._imageCache.clear(); } } class PDFFunctionFactory { constructor({ xref: e, isEvalSupported: t = !0 }) { this.xref = e; this.isEvalSupported = !1 !== t; } create(e) { const t = this.getCached(e); if (t) return t; const i = PDFFunction.parse({ xref: this.xref, isEvalSupported: this.isEvalSupported, fn: e instanceof Ref ? this.xref.fetch(e) : e, }); this._cache(e, i); return i; } createFromArray(e) { const t = this.getCached(e); if (t) return t; const i = PDFFunction.parseArray({ xref: this.xref, isEvalSupported: this.isEvalSupported, fnObj: e instanceof Ref ? this.xref.fetch(e) : e, }); this._cache(e, i); return i; } getCached(e) { let t; e instanceof Ref ? (t = e) : e instanceof Dict ? (t = e.objId) : e instanceof BaseStream && (t = e.dict?.objId); if (t) { const e = this._localFunctionCache.getByRef(t); if (e) return e; } return null; } _cache(e, t) { if (!t) throw new Error( 'PDFFunctionFactory._cache - expected "parsedFunction" argument.', ); let i; e instanceof Ref ? (i = e) : e instanceof Dict ? (i = e.objId) : e instanceof BaseStream && (i = e.dict?.objId); i && this._localFunctionCache.set(null, i, t); } get _localFunctionCache() { return shadow(this, '_localFunctionCache', new LocalFunctionCache()); } } function toNumberArray(e) { return Array.isArray(e) ? isNumberArray(e, null) ? e : e.map((e) => +e) : null; } class PDFFunction { static getSampleArray(e, t, i, a) { let r, s, n = 1; for (r = 0, s = e.length; r < s; r++) n *= e[r]; n *= t; const o = new Array(n); let g = 0, c = 0; const C = 1 / (2 ** i - 1), h = a.getBytes((n * i + 7) / 8); let l = 0; for (r = 0; r < n; r++) { for (; g < i; ) { c <<= 8; c |= h[l++]; g += 8; } g -= i; o[r] = (c >> g) * C; c &= (1 << g) - 1; } return o; } static parse({ xref: e, isEvalSupported: t, fn: i }) { const a = i.dict || i; switch (a.get('FunctionType')) { case 0: return this.constructSampled({ xref: e, isEvalSupported: t, fn: i, dict: a, }); case 1: break; case 2: return this.constructInterpolated({ xref: e, isEvalSupported: t, dict: a, }); case 3: return this.constructStiched({ xref: e, isEvalSupported: t, dict: a }); case 4: return this.constructPostScript({ xref: e, isEvalSupported: t, fn: i, dict: a, }); } throw new FormatError('Unknown type of function'); } static parseArray({ xref: e, isEvalSupported: t, fnObj: i }) { if (!Array.isArray(i)) return this.parse({ xref: e, isEvalSupported: t, fn: i }); const a = []; for (const r of i) a.push(this.parse({ xref: e, isEvalSupported: t, fn: e.fetchIfRef(r) })); return function (e, t, i, r) { for (let s = 0, n = a.length; s < n; s++) a[s](e, t, i, r + s); }; } static constructSampled({ xref: e, isEvalSupported: t, fn: i, dict: a }) { function toMultiArray(e) { const t = e.length, i = []; let a = 0; for (let r = 0; r < t; r += 2) i[a++] = [e[r], e[r + 1]]; return i; } function interpolate(e, t, i, a, r) { return a + ((r - a) / (i - t)) * (e - t); } let r = toNumberArray(a.getArray('Domain')), s = toNumberArray(a.getArray('Range')); if (!r || !s) throw new FormatError('No domain or range'); const n = r.length / 2, o = s.length / 2; r = toMultiArray(r); s = toMultiArray(s); const g = toNumberArray(a.getArray('Size')), c = a.get('BitsPerSample'), C = a.get('Order') || 1; 1 !== C && info('No support for cubic spline interpolation: ' + C); let h = toNumberArray(a.getArray('Encode')); if (h) h = toMultiArray(h); else { h = []; for (let e = 0; e < n; ++e) h.push([0, g[e] - 1]); } let l = toNumberArray(a.getArray('Decode')); l = l ? toMultiArray(l) : s; const Q = this.getSampleArray(g, o, c, i); return function constructSampledFn(e, t, i, a) { const c = 1 << n, C = new Float64Array(c), E = new Uint32Array(c); let u, d; for (d = 0; d < c; d++) C[d] = 1; let f = o, p = 1; for (u = 0; u < n; ++u) { const i = r[u][0], a = r[u][1]; let s = interpolate( Math.min(Math.max(e[t + u], i), a), i, a, h[u][0], h[u][1], ); const n = g[u]; s = Math.min(Math.max(s, 0), n - 1); const o = s < n - 1 ? Math.floor(s) : s - 1, l = o + 1 - s, Q = s - o, m = o * f, y = m + f; for (d = 0; d < c; d++) if (d & p) { C[d] *= Q; E[d] += y; } else { C[d] *= l; E[d] += m; } f *= n; p <<= 1; } for (d = 0; d < o; ++d) { let e = 0; for (u = 0; u < c; u++) e += Q[E[u] + d] * C[u]; e = interpolate(e, 0, 1, l[d][0], l[d][1]); i[a + d] = Math.min(Math.max(e, s[d][0]), s[d][1]); } }; } static constructInterpolated({ xref: e, isEvalSupported: t, dict: i }) { const a = toNumberArray(i.getArray('C0')) || [0], r = toNumberArray(i.getArray('C1')) || [1], s = i.get('N'), n = []; for (let e = 0, t = a.length; e < t; ++e) n.push(r[e] - a[e]); const o = n.length; return function constructInterpolatedFn(e, t, i, r) { const g = 1 === s ? e[t] : e[t] ** s; for (let e = 0; e < o; ++e) i[r + e] = a[e] + g * n[e]; }; } static constructStiched({ xref: e, isEvalSupported: t, dict: i }) { const a = toNumberArray(i.getArray('Domain')); if (!a) throw new FormatError('No domain'); if (1 !== a.length / 2) throw new FormatError('Bad domain for stiched function'); const r = []; for (const a of i.get('Functions')) r.push(this.parse({ xref: e, isEvalSupported: t, fn: e.fetchIfRef(a) })); const s = toNumberArray(i.getArray('Bounds')), n = toNumberArray(i.getArray('Encode')), o = new Float32Array(1); return function constructStichedFn(e, t, i, g) { const c = (function constructStichedFromIRClip(e, t, i) { e > i ? (e = i) : e < t && (e = t); return e; })(e[t], a[0], a[1]), C = s.length; let h; for (h = 0; h < C && !(c < s[h]); ++h); let l = a[0]; h > 0 && (l = s[h - 1]); let Q = a[1]; h < s.length && (Q = s[h]); const E = n[2 * h], u = n[2 * h + 1]; o[0] = l === Q ? E : E + ((c - l) * (u - E)) / (Q - l); r[h](o, 0, i, g); }; } static constructPostScript({ xref: e, isEvalSupported: t, fn: i, dict: a }) { const r = toNumberArray(a.getArray('Domain')), s = toNumberArray(a.getArray('Range')); if (!r) throw new FormatError('No domain.'); if (!s) throw new FormatError('No range.'); const n = new PostScriptLexer(i), o = new PostScriptParser(n).parse(); if (t && FeatureTest.isEvalSupported) { const e = new PostScriptCompiler().compile(o, r, s); if (e) return new Function('src', 'srcOffset', 'dest', 'destOffset', e); } info('Unable to compile PS function'); const g = s.length >> 1, c = r.length >> 1, C = new PostScriptEvaluator(o), h = Object.create(null); let l = 8192; const Q = new Float32Array(c); return function constructPostScriptFn(e, t, i, a) { let r, n, o = ''; const E = Q; for (r = 0; r < c; r++) { n = e[t + r]; E[r] = n; o += n + '_'; } const u = h[o]; if (void 0 !== u) { i.set(u, a); return; } const d = new Float32Array(g), f = C.execute(E), p = f.length - g; for (r = 0; r < g; r++) { n = f[p + r]; let e = s[2 * r]; if (n < e) n = e; else { e = s[2 * r + 1]; n > e && (n = e); } d[r] = n; } if (l > 0) { l--; h[o] = d; } i.set(d, a); }; } } function isPDFFunction(e) { let t; if (e instanceof Dict) t = e; else { if (!(e instanceof BaseStream)) return !1; t = e.dict; } return t.has('FunctionType'); } class PostScriptStack { static MAX_STACK_SIZE = 100; constructor(e) { this.stack = e ? Array.from(e) : []; } push(e) { if (this.stack.length >= PostScriptStack.MAX_STACK_SIZE) throw new Error('PostScript function stack overflow.'); this.stack.push(e); } pop() { if (this.stack.length <= 0) throw new Error('PostScript function stack underflow.'); return this.stack.pop(); } copy(e) { if (this.stack.length + e >= PostScriptStack.MAX_STACK_SIZE) throw new Error('PostScript function stack overflow.'); const t = this.stack; for (let i = t.length - e, a = e - 1; a >= 0; a--, i++) t.push(t[i]); } index(e) { this.push(this.stack[this.stack.length - e - 1]); } roll(e, t) { const i = this.stack, a = i.length - e, r = i.length - 1, s = a + (t - Math.floor(t / e) * e); for (let e = a, t = r; e < t; e++, t--) { const a = i[e]; i[e] = i[t]; i[t] = a; } for (let e = a, t = s - 1; e < t; e++, t--) { const a = i[e]; i[e] = i[t]; i[t] = a; } for (let e = s, t = r; e < t; e++, t--) { const a = i[e]; i[e] = i[t]; i[t] = a; } } } class PostScriptEvaluator { constructor(e) { this.operators = e; } execute(e) { const t = new PostScriptStack(e); let i = 0; const a = this.operators, r = a.length; let s, n, o; for (; i < r; ) { s = a[i++]; if ('number' != typeof s) switch (s) { case 'jz': o = t.pop(); n = t.pop(); n || (i = o); break; case 'j': n = t.pop(); i = n; break; case 'abs': n = t.pop(); t.push(Math.abs(n)); break; case 'add': o = t.pop(); n = t.pop(); t.push(n + o); break; case 'and': o = t.pop(); n = t.pop(); 'boolean' == typeof n && 'boolean' == typeof o ? t.push(n && o) : t.push(n & o); break; case 'atan': o = t.pop(); n = t.pop(); n = (Math.atan2(n, o) / Math.PI) * 180; n < 0 && (n += 360); t.push(n); break; case 'bitshift': o = t.pop(); n = t.pop(); n > 0 ? t.push(n << o) : t.push(n >> o); break; case 'ceiling': n = t.pop(); t.push(Math.ceil(n)); break; case 'copy': n = t.pop(); t.copy(n); break; case 'cos': n = t.pop(); t.push(Math.cos(((n % 360) / 180) * Math.PI)); break; case 'cvi': n = 0 | t.pop(); t.push(n); break; case 'cvr': break; case 'div': o = t.pop(); n = t.pop(); t.push(n / o); break; case 'dup': t.copy(1); break; case 'eq': o = t.pop(); n = t.pop(); t.push(n === o); break; case 'exch': t.roll(2, 1); break; case 'exp': o = t.pop(); n = t.pop(); t.push(n ** o); break; case 'false': t.push(!1); break; case 'floor': n = t.pop(); t.push(Math.floor(n)); break; case 'ge': o = t.pop(); n = t.pop(); t.push(n >= o); break; case 'gt': o = t.pop(); n = t.pop(); t.push(n > o); break; case 'idiv': o = t.pop(); n = t.pop(); t.push((n / o) | 0); break; case 'index': n = t.pop(); t.index(n); break; case 'le': o = t.pop(); n = t.pop(); t.push(n <= o); break; case 'ln': n = t.pop(); t.push(Math.log(n)); break; case 'log': n = t.pop(); t.push(Math.log10(n)); break; case 'lt': o = t.pop(); n = t.pop(); t.push(n < o); break; case 'mod': o = t.pop(); n = t.pop(); t.push(n % o); break; case 'mul': o = t.pop(); n = t.pop(); t.push(n * o); break; case 'ne': o = t.pop(); n = t.pop(); t.push(n !== o); break; case 'neg': n = t.pop(); t.push(-n); break; case 'not': n = t.pop(); 'boolean' == typeof n ? t.push(!n) : t.push(~n); break; case 'or': o = t.pop(); n = t.pop(); 'boolean' == typeof n && 'boolean' == typeof o ? t.push(n || o) : t.push(n | o); break; case 'pop': t.pop(); break; case 'roll': o = t.pop(); n = t.pop(); t.roll(n, o); break; case 'round': n = t.pop(); t.push(Math.round(n)); break; case 'sin': n = t.pop(); t.push(Math.sin(((n % 360) / 180) * Math.PI)); break; case 'sqrt': n = t.pop(); t.push(Math.sqrt(n)); break; case 'sub': o = t.pop(); n = t.pop(); t.push(n - o); break; case 'true': t.push(!0); break; case 'truncate': n = t.pop(); n = n < 0 ? Math.ceil(n) : Math.floor(n); t.push(n); break; case 'xor': o = t.pop(); n = t.pop(); 'boolean' == typeof n && 'boolean' == typeof o ? t.push(n !== o) : t.push(n ^ o); break; default: throw new FormatError(`Unknown operator ${s}`); } else t.push(s); } return t.stack; } } class AstNode { constructor(e) { this.type = e; } visit(e) { unreachable('abstract method'); } } class AstArgument extends AstNode { constructor(e, t, i) { super('args'); this.index = e; this.min = t; this.max = i; } visit(e) { e.visitArgument(this); } } class AstLiteral extends AstNode { constructor(e) { super('literal'); this.number = e; this.min = e; this.max = e; } visit(e) { e.visitLiteral(this); } } class AstBinaryOperation extends AstNode { constructor(e, t, i, a, r) { super('binary'); this.op = e; this.arg1 = t; this.arg2 = i; this.min = a; this.max = r; } visit(e) { e.visitBinaryOperation(this); } } class AstMin extends AstNode { constructor(e, t) { super('max'); this.arg = e; this.min = e.min; this.max = t; } visit(e) { e.visitMin(this); } } class AstVariable extends AstNode { constructor(e, t, i) { super('var'); this.index = e; this.min = t; this.max = i; } visit(e) { e.visitVariable(this); } } class AstVariableDefinition extends AstNode { constructor(e, t) { super('definition'); this.variable = e; this.arg = t; } visit(e) { e.visitVariableDefinition(this); } } class ExpressionBuilderVisitor { constructor() { this.parts = []; } visitArgument(e) { this.parts.push( 'Math.max(', e.min, ', Math.min(', e.max, ', src[srcOffset + ', e.index, ']))', ); } visitVariable(e) { this.parts.push('v', e.index); } visitLiteral(e) { this.parts.push(e.number); } visitBinaryOperation(e) { this.parts.push('('); e.arg1.visit(this); this.parts.push(' ', e.op, ' '); e.arg2.visit(this); this.parts.push(')'); } visitVariableDefinition(e) { this.parts.push('var '); e.variable.visit(this); this.parts.push(' = '); e.arg.visit(this); this.parts.push(';'); } visitMin(e) { this.parts.push('Math.min('); e.arg.visit(this); this.parts.push(', ', e.max, ')'); } toString() { return this.parts.join(''); } } function buildAddOperation(e, t) { return 'literal' === t.type && 0 === t.number ? e : 'literal' === e.type && 0 === e.number ? t : 'literal' === t.type && 'literal' === e.type ? new AstLiteral(e.number + t.number) : new AstBinaryOperation('+', e, t, e.min + t.min, e.max + t.max); } function buildMulOperation(e, t) { if ('literal' === t.type) { if (0 === t.number) return new AstLiteral(0); if (1 === t.number) return e; if ('literal' === e.type) return new AstLiteral(e.number * t.number); } if ('literal' === e.type) { if (0 === e.number) return new AstLiteral(0); if (1 === e.number) return t; } const i = Math.min( e.min * t.min, e.min * t.max, e.max * t.min, e.max * t.max, ), a = Math.max(e.min * t.min, e.min * t.max, e.max * t.min, e.max * t.max); return new AstBinaryOperation('*', e, t, i, a); } function buildSubOperation(e, t) { if ('literal' === t.type) { if (0 === t.number) return e; if ('literal' === e.type) return new AstLiteral(e.number - t.number); } return 'binary' === t.type && '-' === t.op && 'literal' === e.type && 1 === e.number && 'literal' === t.arg1.type && 1 === t.arg1.number ? t.arg2 : new AstBinaryOperation('-', e, t, e.min - t.max, e.max - t.min); } function buildMinOperation(e, t) { return e.min >= t ? new AstLiteral(t) : e.max <= t ? e : new AstMin(e, t); } class PostScriptCompiler { compile(e, t, i) { const a = [], r = [], s = t.length >> 1, n = i.length >> 1; let o, g, c, C, h, l, Q, E, u = 0; for (let e = 0; e < s; e++) a.push(new AstArgument(e, t[2 * e], t[2 * e + 1])); for (let t = 0, i = e.length; t < i; t++) { E = e[t]; if ('number' != typeof E) switch (E) { case 'add': if (a.length < 2) return null; C = a.pop(); c = a.pop(); a.push(buildAddOperation(c, C)); break; case 'cvr': if (a.length < 1) return null; break; case 'mul': if (a.length < 2) return null; C = a.pop(); c = a.pop(); a.push(buildMulOperation(c, C)); break; case 'sub': if (a.length < 2) return null; C = a.pop(); c = a.pop(); a.push(buildSubOperation(c, C)); break; case 'exch': if (a.length < 2) return null; h = a.pop(); l = a.pop(); a.push(h, l); break; case 'pop': if (a.length < 1) return null; a.pop(); break; case 'index': if (a.length < 1) return null; c = a.pop(); if ('literal' !== c.type) return null; o = c.number; if (o < 0 || !Number.isInteger(o) || a.length < o) return null; h = a[a.length - o - 1]; if ('literal' === h.type || 'var' === h.type) { a.push(h); break; } Q = new AstVariable(u++, h.min, h.max); a[a.length - o - 1] = Q; a.push(Q); r.push(new AstVariableDefinition(Q, h)); break; case 'dup': if (a.length < 1) return null; if ( 'number' == typeof e[t + 1] && 'gt' === e[t + 2] && e[t + 3] === t + 7 && 'jz' === e[t + 4] && 'pop' === e[t + 5] && e[t + 6] === e[t + 1] ) { c = a.pop(); a.push(buildMinOperation(c, e[t + 1])); t += 6; break; } h = a.at(-1); if ('literal' === h.type || 'var' === h.type) { a.push(h); break; } Q = new AstVariable(u++, h.min, h.max); a[a.length - 1] = Q; a.push(Q); r.push(new AstVariableDefinition(Q, h)); break; case 'roll': if (a.length < 2) return null; C = a.pop(); c = a.pop(); if ('literal' !== C.type || 'literal' !== c.type) return null; g = C.number; o = c.number; if ( o <= 0 || !Number.isInteger(o) || !Number.isInteger(g) || a.length < o ) return null; g = ((g % o) + o) % o; if (0 === g) break; a.push(...a.splice(a.length - o, o - g)); break; default: return null; } else a.push(new AstLiteral(E)); } if (a.length !== n) return null; const d = []; for (const e of r) { const t = new ExpressionBuilderVisitor(); e.visit(t); d.push(t.toString()); } for (let e = 0, t = a.length; e < t; e++) { const t = a[e], r = new ExpressionBuilderVisitor(); t.visit(r); const s = i[2 * e], n = i[2 * e + 1], o = [r.toString()]; if (s > t.min) { o.unshift('Math.max(', s, ', '); o.push(')'); } if (n < t.max) { o.unshift('Math.min(', n, ', '); o.push(')'); } o.unshift('dest[destOffset + ', e, '] = '); o.push(';'); d.push(o.join('')); } return d.join('\n'); } } const lr = [ 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'S', 'B', 'S', 'WS', 'B', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'B', 'B', 'B', 'S', 'WS', 'ON', 'ON', 'ET', 'ET', 'ET', 'ON', 'ON', 'ON', 'ON', 'ON', 'ES', 'CS', 'ES', 'CS', 'CS', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'CS', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'B', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'CS', 'ON', 'ET', 'ET', 'ET', 'ET', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'BN', 'ON', 'ON', 'ET', 'ET', 'EN', 'EN', 'ON', 'L', 'ON', 'ON', 'ON', 'EN', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', ], Qr = [ 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'ON', 'ON', 'AL', 'ET', 'ET', 'AL', 'CS', 'AL', 'ON', 'ON', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AL', 'AL', '', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'ET', 'AN', 'AN', 'AL', 'AL', 'AL', 'NSM', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AN', 'ON', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AL', 'AL', 'NSM', 'NSM', 'ON', 'NSM', 'NSM', 'NSM', 'NSM', 'AL', 'AL', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', ]; function isOdd(e) { return 0 != (1 & e); } function isEven(e) { return 0 == (1 & e); } function findUnequal(e, t, i) { let a, r; for (a = t, r = e.length; a < r; ++a) if (e[a] !== i) return a; return a; } function setValues(e, t, i, a) { for (let r = t; r < i; ++r) e[r] = a; } function reverseValues(e, t, i) { for (let a = t, r = i - 1; a < r; ++a, --r) { const t = e[a]; e[a] = e[r]; e[r] = t; } } function createBidiText(e, t, i = !1) { let a = 'ltr'; i ? (a = 'ttb') : t || (a = 'rtl'); return { str: e, dir: a }; } const Er = [], ur = []; function bidi(e, t = -1, i = !1) { let a = !0; const r = e.length; if (0 === r || i) return createBidiText(e, a, i); Er.length = r; ur.length = r; let s, n, o = 0; for (s = 0; s < r; ++s) { Er[s] = e.charAt(s); const t = e.charCodeAt(s); let i = 'L'; if (t <= 255) i = lr[t]; else if (1424 <= t && t <= 1524) i = 'R'; else if (1536 <= t && t <= 1791) { i = Qr[255 & t]; i || warn('Bidi: invalid Unicode character ' + t.toString(16)); } else ((1792 <= t && t <= 2220) || (64336 <= t && t <= 65023) || (65136 <= t && t <= 65279)) && (i = 'AL'); ('R' !== i && 'AL' !== i && 'AN' !== i) || o++; ur[s] = i; } if (0 === o) { a = !0; return createBidiText(e, a); } if (-1 === t) if (o / r < 0.3 && r > 4) { a = !0; t = 0; } else { a = !1; t = 1; } const g = []; for (s = 0; s < r; ++s) g[s] = t; const c = isOdd(t) ? 'R' : 'L', C = c, h = C; let l, Q = C; for (s = 0; s < r; ++s) 'NSM' === ur[s] ? (ur[s] = Q) : (Q = ur[s]); Q = C; for (s = 0; s < r; ++s) { l = ur[s]; 'EN' === l ? (ur[s] = 'AL' === Q ? 'AN' : 'EN') : ('R' !== l && 'L' !== l && 'AL' !== l) || (Q = l); } for (s = 0; s < r; ++s) { l = ur[s]; 'AL' === l && (ur[s] = 'R'); } for (s = 1; s < r - 1; ++s) { 'ES' === ur[s] && 'EN' === ur[s - 1] && 'EN' === ur[s + 1] && (ur[s] = 'EN'); 'CS' !== ur[s] || ('EN' !== ur[s - 1] && 'AN' !== ur[s - 1]) || ur[s + 1] !== ur[s - 1] || (ur[s] = ur[s - 1]); } for (s = 0; s < r; ++s) if ('EN' === ur[s]) { for (let e = s - 1; e >= 0 && 'ET' === ur[e]; --e) ur[e] = 'EN'; for (let e = s + 1; e < r && 'ET' === ur[e]; ++e) ur[e] = 'EN'; } for (s = 0; s < r; ++s) { l = ur[s]; ('WS' !== l && 'ES' !== l && 'ET' !== l && 'CS' !== l) || (ur[s] = 'ON'); } Q = C; for (s = 0; s < r; ++s) { l = ur[s]; 'EN' === l ? (ur[s] = 'L' === Q ? 'L' : 'EN') : ('R' !== l && 'L' !== l) || (Q = l); } for (s = 0; s < r; ++s) if ('ON' === ur[s]) { const e = findUnequal(ur, s + 1, 'ON'); let t = C; s > 0 && (t = ur[s - 1]); let i = h; e + 1 < r && (i = ur[e + 1]); 'L' !== t && (t = 'R'); 'L' !== i && (i = 'R'); t === i && setValues(ur, s, e, t); s = e - 1; } for (s = 0; s < r; ++s) 'ON' === ur[s] && (ur[s] = c); for (s = 0; s < r; ++s) { l = ur[s]; isEven(g[s]) ? 'R' === l ? (g[s] += 1) : ('AN' !== l && 'EN' !== l) || (g[s] += 2) : ('L' !== l && 'AN' !== l && 'EN' !== l) || (g[s] += 1); } let E, u = -1, d = 99; for (s = 0, n = g.length; s < n; ++s) { E = g[s]; u < E && (u = E); d > E && isOdd(E) && (d = E); } for (E = u; E >= d; --E) { let e = -1; for (s = 0, n = g.length; s < n; ++s) if (g[s] < E) { if (e >= 0) { reverseValues(Er, e, s); e = -1; } } else e < 0 && (e = s); e >= 0 && reverseValues(Er, e, g.length); } for (s = 0, n = Er.length; s < n; ++s) { const e = Er[s]; ('<' !== e && '>' !== e) || (Er[s] = ''); } return createBidiText(Er.join(''), a); } const dr = { style: 'normal', weight: 'normal' }, fr = { style: 'normal', weight: 'bold' }, pr = { style: 'italic', weight: 'normal' }, mr = { style: 'italic', weight: 'bold' }, yr = new Map([ [ 'Times-Roman', { local: [ 'Times New Roman', 'Times-Roman', 'Times', 'Liberation Serif', 'Nimbus Roman', 'Nimbus Roman L', 'Tinos', 'Thorndale', 'TeX Gyre Termes', 'FreeSerif', 'Linux Libertine O', 'Libertinus Serif', 'DejaVu Serif', 'Bitstream Vera Serif', 'Ubuntu', ], style: dr, ultimate: 'serif', }, ], ['Times-Bold', { alias: 'Times-Roman', style: fr, ultimate: 'serif' }], ['Times-Italic', { alias: 'Times-Roman', style: pr, ultimate: 'serif' }], [ 'Times-BoldItalic', { alias: 'Times-Roman', style: mr, ultimate: 'serif' }, ], [ 'Helvetica', { local: [ 'Helvetica', 'Helvetica Neue', 'Arial', 'Arial Nova', 'Liberation Sans', 'Arimo', 'Nimbus Sans', 'Nimbus Sans L', 'A030', 'TeX Gyre Heros', 'FreeSans', 'DejaVu Sans', 'Albany', 'Bitstream Vera Sans', 'Arial Unicode MS', 'Microsoft Sans Serif', 'Apple Symbols', 'Cantarell', ], path: 'LiberationSans-Regular.ttf', style: dr, ultimate: 'sans-serif', }, ], [ 'Helvetica-Bold', { alias: 'Helvetica', path: 'LiberationSans-Bold.ttf', style: fr, ultimate: 'sans-serif', }, ], [ 'Helvetica-Oblique', { alias: 'Helvetica', path: 'LiberationSans-Italic.ttf', style: pr, ultimate: 'sans-serif', }, ], [ 'Helvetica-BoldOblique', { alias: 'Helvetica', path: 'LiberationSans-BoldItalic.ttf', style: mr, ultimate: 'sans-serif', }, ], [ 'Courier', { local: [ 'Courier', 'Courier New', 'Liberation Mono', 'Nimbus Mono', 'Nimbus Mono L', 'Cousine', 'Cumberland', 'TeX Gyre Cursor', 'FreeMono', 'Linux Libertine Mono O', 'Libertinus Mono', ], style: dr, ultimate: 'monospace', }, ], ['Courier-Bold', { alias: 'Courier', style: fr, ultimate: 'monospace' }], ['Courier-Oblique', { alias: 'Courier', style: pr, ultimate: 'monospace' }], [ 'Courier-BoldOblique', { alias: 'Courier', style: mr, ultimate: 'monospace' }, ], [ 'ArialBlack', { local: ['Arial Black'], style: { style: 'normal', weight: '900' }, fallback: 'Helvetica-Bold', }, ], ['ArialBlack-Bold', { alias: 'ArialBlack' }], [ 'ArialBlack-Italic', { alias: 'ArialBlack', style: { style: 'italic', weight: '900' }, fallback: 'Helvetica-BoldOblique', }, ], ['ArialBlack-BoldItalic', { alias: 'ArialBlack-Italic' }], [ 'ArialNarrow', { local: [ 'Arial Narrow', 'Liberation Sans Narrow', 'Helvetica Condensed', 'Nimbus Sans Narrow', 'TeX Gyre Heros Cn', ], style: dr, fallback: 'Helvetica', }, ], [ 'ArialNarrow-Bold', { alias: 'ArialNarrow', style: fr, fallback: 'Helvetica-Bold' }, ], [ 'ArialNarrow-Italic', { alias: 'ArialNarrow', style: pr, fallback: 'Helvetica-Oblique' }, ], [ 'ArialNarrow-BoldItalic', { alias: 'ArialNarrow', style: mr, fallback: 'Helvetica-BoldOblique' }, ], [ 'Calibri', { local: ['Calibri', 'Carlito'], style: dr, fallback: 'Helvetica' }, ], [ 'Calibri-Bold', { alias: 'Calibri', style: fr, fallback: 'Helvetica-Bold' }, ], [ 'Calibri-Italic', { alias: 'Calibri', style: pr, fallback: 'Helvetica-Oblique' }, ], [ 'Calibri-BoldItalic', { alias: 'Calibri', style: mr, fallback: 'Helvetica-BoldOblique' }, ], ['Wingdings', { local: ['Wingdings', 'URW Dingbats'], style: dr }], ['Wingdings-Regular', { alias: 'Wingdings' }], ['Wingdings-Bold', { alias: 'Wingdings' }], ]), wr = new Map([['Arial-Black', 'ArialBlack']]); function getFamilyName(e) { const t = new Set([ 'thin', 'extralight', 'ultralight', 'demilight', 'semilight', 'light', 'book', 'regular', 'normal', 'medium', 'demibold', 'semibold', 'bold', 'extrabold', 'ultrabold', 'black', 'heavy', 'extrablack', 'ultrablack', 'roman', 'italic', 'oblique', 'ultracondensed', 'extracondensed', 'condensed', 'semicondensed', 'normal', 'semiexpanded', 'expanded', 'extraexpanded', 'ultraexpanded', 'bolditalic', ]); return e .split(/[- ,+]+/g) .filter((e) => !t.has(e.toLowerCase())) .join(' '); } function generateFont( { alias: e, local: t, path: i, fallback: a, style: r, ultimate: s }, n, o, g = !0, c = !0, C = '', ) { const h = { style: null, ultimate: null }; if (t) { const e = C ? ` ${C}` : ''; for (const i of t) n.push(`local(${i}${e})`); } if (e) { const t = yr.get(e), s = C || (function getStyleToAppend(e) { switch (e) { case fr: return 'Bold'; case pr: return 'Italic'; case mr: return 'Bold Italic'; default: if ('bold' === e?.weight) return 'Bold'; if ('italic' === e?.style) return 'Italic'; } return ''; })(r); Object.assign(h, generateFont(t, n, o, g && !a, c && !i, s)); } r && (h.style = r); s && (h.ultimate = s); if (g && a) { const e = yr.get(a), { ultimate: t } = generateFont(e, n, o, g, c && !i, C); h.ultimate ||= t; } c && i && o && n.push(`url(${o}${i})`); return h; } function getFontSubstitution(e, t, i, a, r, s) { if (a.startsWith('InvalidPDFjsFont_')) return null; ('TrueType' !== s && 'Type1' !== s) || !/^[A-Z]{6}\+/.test(a) || (a = a.slice(7)); const n = (a = normalizeFontName(a)); let o = e.get(n); if (o) return o; let g = yr.get(a); if (!g) for (const [e, t] of wr) if (a.startsWith(e)) { a = `${t}${a.substring(e.length)}`; g = yr.get(a); break; } let c = !1; if (!g) { g = yr.get(r); c = !0; } const C = `${t.getDocId()}_s${t.createFontId()}`; if (!g) { if (!validateFontName(a)) { warn(`Cannot substitute the font because of its name: ${a}`); e.set(n, null); return null; } const t = /bold/gi.test(a), i = /oblique|italic/gi.test(a), r = (t && i && mr) || (t && fr) || (i && pr) || dr; o = { css: `"${getFamilyName(a)}",${C}`, guessFallback: !0, loadedName: C, baseFontName: a, src: `local(${a})`, style: r, }; e.set(n, o); return o; } const h = []; c && validateFontName(a) && h.push(`local(${a})`); const { style: l, ultimate: Q } = generateFont(g, h, i), E = null === Q, u = E ? '' : `,${Q}`; o = { css: `"${getFamilyName(a)}",${C}${u}`, guessFallback: E, loadedName: C, baseFontName: a, src: h.join(','), style: l, }; e.set(n, o); return o; } class ImageResizer { constructor(e, t) { this._imgData = e; this._isMask = t; } static needsToBeResized(e, t) { if (e <= this._goodSquareLength && t <= this._goodSquareLength) return !1; const { MAX_DIM: i } = this; if (e > i || t > i) return !0; const a = e * t; if (this._hasMaxArea) return a > this.MAX_AREA; if (a < this._goodSquareLength ** 2) return !1; if (this._areGoodDims(e, t)) { this._goodSquareLength = Math.max( this._goodSquareLength, Math.floor(Math.sqrt(e * t)), ); return !1; } this._goodSquareLength = this._guessMax(this._goodSquareLength, i, 128, 0); return a > (this.MAX_AREA = this._goodSquareLength ** 2); } static get MAX_DIM() { return shadow(this, 'MAX_DIM', this._guessMax(2048, 65537, 0, 1)); } static get MAX_AREA() { this._hasMaxArea = !0; return shadow( this, 'MAX_AREA', this._guessMax(ImageResizer._goodSquareLength, this.MAX_DIM, 128, 0) ** 2, ); } static set MAX_AREA(e) { if (e >= 0) { this._hasMaxArea = !0; shadow(this, 'MAX_AREA', e); } } static setMaxArea(e) { this._hasMaxArea || (this.MAX_AREA = e >> 2); } static _areGoodDims(e, t) { try { const i = new OffscreenCanvas(e, t), a = i.getContext('2d'); a.fillRect(0, 0, 1, 1); const r = a.getImageData(0, 0, 1, 1).data[3]; i.width = i.height = 1; return 0 !== r; } catch { return !1; } } static _guessMax(e, t, i, a) { for (; e + i + 1 < t; ) { const i = Math.floor((e + t) / 2), r = a || i; this._areGoodDims(i, r) ? (e = i) : (t = i); } return e; } static async createImage(e, t = !1) { return new ImageResizer(e, t)._createImage(); } async _createImage() { const e = this._encodeBMP(), t = new Blob([e.buffer], { type: 'image/bmp' }), i = createImageBitmap(t), { MAX_AREA: a, MAX_DIM: r } = ImageResizer, { _imgData: s } = this, { width: n, height: o } = s, g = Math.max(n / r, o / r, Math.sqrt((n * o) / a)), c = Math.max(g, 2), C = Math.round(10 * (g + 1.25)) / 10 / c, h = Math.floor(Math.log2(C)), l = new Array(h + 2).fill(2); l[0] = c; l.splice(-1, 1, C / (1 << h)); let Q = n, E = o, u = await i; for (const e of l) { const t = Q, i = E; Q = Math.floor(Q / e) - 1; E = Math.floor(E / e) - 1; const a = new OffscreenCanvas(Q, E); a.getContext('2d').drawImage(u, 0, 0, t, i, 0, 0, Q, E); u = a.transferToImageBitmap(); } s.data = null; s.bitmap = u; s.width = Q; s.height = E; return s; } _encodeBMP() { const { width: e, height: t, kind: i } = this._imgData; let a, r = this._imgData.data, s = new Uint8Array(0), n = s, o = 0; switch (i) { case D: { a = 1; s = new Uint8Array( this._isMask ? [255, 255, 255, 255, 0, 0, 0, 0] : [0, 0, 0, 0, 255, 255, 255, 255], ); const i = (e + 7) >> 3, n = (i + 3) & -4; if (i !== n) { const e = new Uint8Array(n * t); let a = 0; for (let s = 0, o = t * i; s < o; s += i, a += n) e.set(r.subarray(s, s + i), a); r = e; } break; } case S: a = 24; if (3 & e) { const i = 3 * e, a = (i + 3) & -4, s = a - i, n = new Uint8Array(a * t); let o = 0; for (let e = 0, a = t * i; e < a; e += i) { const t = r.subarray(e, e + i); for (let e = 0; e < i; e += 3) { n[o++] = t[e + 2]; n[o++] = t[e + 1]; n[o++] = t[e]; } o += s; } r = n; } else for (let e = 0, t = r.length; e < t; e += 3) { const t = r[e]; r[e] = r[e + 2]; r[e + 2] = t; } break; case k: a = 32; o = 3; n = new Uint8Array(68); const i = new DataView(n.buffer); if (FeatureTest.isLittleEndian) { i.setUint32(0, 255, !0); i.setUint32(4, 65280, !0); i.setUint32(8, 16711680, !0); i.setUint32(12, 4278190080, !0); } else { i.setUint32(0, 4278190080, !0); i.setUint32(4, 16711680, !0); i.setUint32(8, 65280, !0); i.setUint32(12, 255, !0); } break; default: throw new Error('invalid format'); } let g = 0; const c = 40 + n.length, C = 14 + c + s.length + r.length, h = new Uint8Array(C), l = new DataView(h.buffer); l.setUint16(g, 19778, !0); g += 2; l.setUint32(g, C, !0); g += 4; l.setUint32(g, 0, !0); g += 4; l.setUint32(g, 14 + c + s.length, !0); g += 4; l.setUint32(g, c, !0); g += 4; l.setInt32(g, e, !0); g += 4; l.setInt32(g, -t, !0); g += 4; l.setUint16(g, 1, !0); g += 2; l.setUint16(g, a, !0); g += 2; l.setUint32(g, o, !0); g += 4; l.setUint32(g, 0, !0); g += 4; l.setInt32(g, 0, !0); g += 4; l.setInt32(g, 0, !0); g += 4; l.setUint32(g, s.length / 4, !0); g += 4; l.setUint32(g, 0, !0); g += 4; h.set(n, g); g += n.length; h.set(s, g); g += s.length; h.set(r, g); return h; } } ImageResizer._goodSquareLength = 2048; const br = 3285377520, Dr = 4294901760, Fr = 65535; class MurmurHash3_64 { constructor(e) { this.h1 = e ? 4294967295 & e : br; this.h2 = e ? 4294967295 & e : br; } update(e) { let t, i; if ('string' == typeof e) { t = new Uint8Array(2 * e.length); i = 0; for (let a = 0, r = e.length; a < r; a++) { const r = e.charCodeAt(a); if (r <= 255) t[i++] = r; else { t[i++] = r >>> 8; t[i++] = 255 & r; } } } else { if (!ArrayBuffer.isView(e)) throw new Error('Invalid data format, must be a string or TypedArray.'); t = e.slice(); i = t.byteLength; } const a = i >> 2, r = i - 4 * a, s = new Uint32Array(t.buffer, 0, a); let n = 0, o = 0, g = this.h1, c = this.h2; const C = 3432918353, h = 461845907, l = 11601, Q = 13715; for (let e = 0; e < a; e++) if (1 & e) { n = s[e]; n = ((n * C) & Dr) | ((n * l) & Fr); n = (n << 15) | (n >>> 17); n = ((n * h) & Dr) | ((n * Q) & Fr); g ^= n; g = (g << 13) | (g >>> 19); g = 5 * g + 3864292196; } else { o = s[e]; o = ((o * C) & Dr) | ((o * l) & Fr); o = (o << 15) | (o >>> 17); o = ((o * h) & Dr) | ((o * Q) & Fr); c ^= o; c = (c << 13) | (c >>> 19); c = 5 * c + 3864292196; } n = 0; switch (r) { case 3: n ^= t[4 * a + 2] << 16; case 2: n ^= t[4 * a + 1] << 8; case 1: n ^= t[4 * a]; n = ((n * C) & Dr) | ((n * l) & Fr); n = (n << 15) | (n >>> 17); n = ((n * h) & Dr) | ((n * Q) & Fr); 1 & a ? (g ^= n) : (c ^= n); } this.h1 = g; this.h2 = c; } hexdigest() { let e = this.h1, t = this.h2; e ^= t >>> 1; e = ((3981806797 * e) & Dr) | ((36045 * e) & Fr); t = ((4283543511 * t) & Dr) | (((2950163797 * ((t << 16) | (e >>> 16))) & Dr) >>> 16); e ^= t >>> 1; e = ((444984403 * e) & Dr) | ((60499 * e) & Fr); t = ((3301882366 * t) & Dr) | (((3120437893 * ((t << 16) | (e >>> 16))) & Dr) >>> 16); e ^= t >>> 1; return ( (e >>> 0).toString(16).padStart(8, '0') + (t >>> 0).toString(16).padStart(8, '0') ); } } function addState(e, t, i, a, r) { let s = e; for (let e = 0, i = t.length - 1; e < i; e++) { const i = t[e]; s = s[i] ||= []; } s[t.at(-1)] = { checkFn: i, iterateFn: a, processFn: r }; } const Sr = []; addState( Sr, [UA, LA, $e, MA], null, function iterateInlineImageGroup(e, t) { const i = e.fnArray, a = (t - (e.iCurr - 3)) % 4; switch (a) { case 0: return i[t] === UA; case 1: return i[t] === LA; case 2: return i[t] === $e; case 3: return i[t] === MA; } throw new Error(`iterateInlineImageGroup - invalid pos: ${a}`); }, function foundInlineImageGroup(e, t) { const i = e.fnArray, a = e.argsArray, r = e.iCurr, s = r - 3, n = r - 2, o = r - 1, g = Math.min(Math.floor((t - s) / 4), 200); if (g < 10) return t - ((t - s) % 4); let c = 0; const C = []; let h = 0, l = 1, Q = 1; for (let e = 0; e < g; e++) { const t = a[n + (e << 2)], i = a[o + (e << 2)][0]; if (l + i.width > 1e3) { c = Math.max(c, l); Q += h + 2; l = 0; h = 0; } C.push({ transform: t, x: l, y: Q, w: i.width, h: i.height }); l += i.width + 2; h = Math.max(h, i.height); } const E = Math.max(c, l) + 1, u = Q + h + 1, d = new Uint8Array(E * u * 4), f = E << 2; for (let e = 0; e < g; e++) { const t = a[o + (e << 2)][0].data, i = C[e].w << 2; let r = 0, s = (C[e].x + C[e].y * E) << 2; d.set(t.subarray(0, i), s - f); for (let a = 0, n = C[e].h; a < n; a++) { d.set(t.subarray(r, r + i), s); r += i; s += f; } d.set(t.subarray(r - i, r), s); for (; s >= 0; ) { t[s - 4] = t[s]; t[s - 3] = t[s + 1]; t[s - 2] = t[s + 2]; t[s - 1] = t[s + 3]; t[s + i] = t[s + i - 4]; t[s + i + 1] = t[s + i - 3]; t[s + i + 2] = t[s + i - 2]; t[s + i + 3] = t[s + i - 1]; s -= f; } } const p = { width: E, height: u }; if (e.isOffscreenCanvasSupported) { const e = new OffscreenCanvas(E, u); e.getContext('2d').putImageData( new ImageData(new Uint8ClampedArray(d.buffer), E, u), 0, 0, ); p.bitmap = e.transferToImageBitmap(); p.data = null; } else { p.kind = k; p.data = d; } i.splice(s, 4 * g, At); a.splice(s, 4 * g, [p, C]); return s + 1; }, ); addState( Sr, [UA, LA, Ve, MA], null, function iterateImageMaskGroup(e, t) { const i = e.fnArray, a = (t - (e.iCurr - 3)) % 4; switch (a) { case 0: return i[t] === UA; case 1: return i[t] === LA; case 2: return i[t] === Ve; case 3: return i[t] === MA; } throw new Error(`iterateImageMaskGroup - invalid pos: ${a}`); }, function foundImageMaskGroup(e, t) { const i = e.fnArray, a = e.argsArray, r = e.iCurr, s = r - 3, n = r - 2, o = r - 1; let g = Math.floor((t - s) / 4); if (g < 10) return t - ((t - s) % 4); let c, C, h = !1; const l = a[o][0], Q = a[n][0], E = a[n][1], u = a[n][2], d = a[n][3]; if (E === u) { h = !0; c = n + 4; let e = o + 4; for (let t = 1; t < g; t++, c += 4, e += 4) { C = a[c]; if ( a[e][0] !== l || C[0] !== Q || C[1] !== E || C[2] !== u || C[3] !== d ) { t < 10 ? (h = !1) : (g = t); break; } } } if (h) { g = Math.min(g, 1e3); const e = new Float32Array(2 * g); c = n; for (let t = 0; t < g; t++, c += 4) { C = a[c]; e[t << 1] = C[4]; e[1 + (t << 1)] = C[5]; } i.splice(s, 4 * g, tt); a.splice(s, 4 * g, [l, Q, E, u, d, e]); } else { g = Math.min(g, 100); const e = []; for (let t = 0; t < g; t++) { C = a[n + (t << 2)]; const i = a[o + (t << 2)][0]; e.push({ data: i.data, width: i.width, height: i.height, interpolate: i.interpolate, count: i.count, transform: C, }); } i.splice(s, 4 * g, _e); a.splice(s, 4 * g, [e]); } return s + 1; }, ); addState( Sr, [UA, LA, ze, MA], function (e) { const t = e.argsArray, i = e.iCurr - 2; return 0 === t[i][1] && 0 === t[i][2]; }, function iterateImageGroup(e, t) { const i = e.fnArray, a = e.argsArray, r = (t - (e.iCurr - 3)) % 4; switch (r) { case 0: return i[t] === UA; case 1: if (i[t] !== LA) return !1; const r = e.iCurr - 2, s = a[r][0], n = a[r][3]; return a[t][0] === s && 0 === a[t][1] && 0 === a[t][2] && a[t][3] === n; case 2: if (i[t] !== ze) return !1; const o = a[e.iCurr - 1][0]; return a[t][0] === o; case 3: return i[t] === MA; } throw new Error(`iterateImageGroup - invalid pos: ${r}`); }, function (e, t) { const i = e.fnArray, a = e.argsArray, r = e.iCurr, s = r - 3, n = r - 2, o = a[r - 1][0], g = a[n][0], c = a[n][3], C = Math.min(Math.floor((t - s) / 4), 1e3); if (C < 3) return t - ((t - s) % 4); const h = new Float32Array(2 * C); let l = n; for (let e = 0; e < C; e++, l += 4) { const t = a[l]; h[e << 1] = t[4]; h[1 + (e << 1)] = t[5]; } const Q = [o, g, c, h]; i.splice(s, 4 * C, et); a.splice(s, 4 * C, Q); return s + 1; }, ); addState( Sr, [ee, ne, Ce, le, te], null, function iterateShowTextGroup(e, t) { const i = e.fnArray, a = e.argsArray, r = (t - (e.iCurr - 4)) % 5; switch (r) { case 0: return i[t] === ee; case 1: return i[t] === ne; case 2: return i[t] === Ce; case 3: if (i[t] !== le) return !1; const r = e.iCurr - 3, s = a[r][0], n = a[r][1]; return a[t][0] === s && a[t][1] === n; case 4: return i[t] === te; } throw new Error(`iterateShowTextGroup - invalid pos: ${r}`); }, function (e, t) { const i = e.fnArray, a = e.argsArray, r = e.iCurr, s = r - 4, n = r - 3, o = r - 2, g = r - 1, c = r, C = a[n][0], h = a[n][1]; let l = Math.min(Math.floor((t - s) / 5), 1e3); if (l < 3) return t - ((t - s) % 5); let Q = s; if ( s >= 4 && i[s - 4] === i[n] && i[s - 3] === i[o] && i[s - 2] === i[g] && i[s - 1] === i[c] && a[s - 4][0] === C && a[s - 4][1] === h ) { l++; Q -= 5; } let E = Q + 4; for (let e = 1; e < l; e++) { i.splice(E, 3); a.splice(E, 3); E += 2; } return E + 1; }, ); class NullOptimizer { constructor(e) { this.queue = e; } _optimize() {} push(e, t) { this.queue.fnArray.push(e); this.queue.argsArray.push(t); this._optimize(); } flush() {} reset() {} } class QueueOptimizer extends NullOptimizer { constructor(e) { super(e); this.state = null; this.context = { iCurr: 0, fnArray: e.fnArray, argsArray: e.argsArray, isOffscreenCanvasSupported: !1, }; this.match = null; this.lastProcessed = 0; } set isOffscreenCanvasSupported(e) { this.context.isOffscreenCanvasSupported = e; } _optimize() { const e = this.queue.fnArray; let t = this.lastProcessed, i = e.length, a = this.state, r = this.match; if (!a && !r && t + 1 === i && !Sr[e[t]]) { this.lastProcessed = i; return; } const s = this.context; for (; t < i; ) { if (r) { if ((0, r.iterateFn)(s, t)) { t++; continue; } t = (0, r.processFn)(s, t + 1); i = e.length; r = null; a = null; if (t >= i) break; } a = (a || Sr)[e[t]]; if (a && !Array.isArray(a)) { s.iCurr = t; t++; if (!a.checkFn || (0, a.checkFn)(s)) { r = a; a = null; } else a = null; } else t++; } this.state = a; this.match = r; this.lastProcessed = t; } flush() { for (; this.match; ) { const e = this.queue.fnArray.length; this.lastProcessed = (0, this.match.processFn)(this.context, e); this.match = null; this.state = null; this._optimize(); } } reset() { this.state = null; this.match = null; this.lastProcessed = 0; } } class OperatorList { static CHUNK_SIZE = 1e3; static CHUNK_SIZE_ABOUT = this.CHUNK_SIZE - 5; constructor(e = 0, t) { this._streamSink = t; this.fnArray = []; this.argsArray = []; this.optimizer = !t || e & E ? new NullOptimizer(this) : new QueueOptimizer(this); this.dependencies = new Set(); this._totalLength = 0; this.weight = 0; this._resolved = t ? null : Promise.resolve(); } set isOffscreenCanvasSupported(e) { this.optimizer.isOffscreenCanvasSupported = e; } get length() { return this.argsArray.length; } get ready() { return this._resolved || this._streamSink.ready; } get totalLength() { return this._totalLength + this.length; } addOp(e, t) { this.optimizer.push(e, t); this.weight++; this._streamSink && (this.weight >= OperatorList.CHUNK_SIZE || (this.weight >= OperatorList.CHUNK_SIZE_ABOUT && (e === MA || e === te))) && this.flush(); } addImageOps(e, t, i) { void 0 !== i && this.addOp(ve, ['OC', i]); this.addOp(e, t); void 0 !== i && this.addOp(Te, []); } addDependency(e) { if (!this.dependencies.has(e)) { this.dependencies.add(e); this.addOp(bA, [e]); } } addDependencies(e) { for (const t of e) this.addDependency(t); } addOpList(e) { if (e instanceof OperatorList) { for (const t of e.dependencies) this.dependencies.add(t); for (let t = 0, i = e.length; t < i; t++) this.addOp(e.fnArray[t], e.argsArray[t]); } else warn('addOpList - ignoring invalid "opList" parameter.'); } getIR() { return { fnArray: this.fnArray, argsArray: this.argsArray, length: this.length, }; } get _transfers() { const e = [], { fnArray: t, argsArray: i, length: a } = this; for (let r = 0; r < a; r++) switch (t[r]) { case $e: case At: case Ve: const t = i[r][0]; !t.cached && t.data?.buffer instanceof ArrayBuffer && e.push(t.data.buffer); } return e; } flush(e = !1, t = null) { this.optimizer.flush(); const i = this.length; this._totalLength += i; this._streamSink.enqueue( { fnArray: this.fnArray, argsArray: this.argsArray, lastChunk: e, separateAnnots: t, length: i, }, 1, this._transfers, ); this.dependencies.clear(); this.fnArray.length = 0; this.argsArray.length = 0; this.weight = 0; this.optimizer.reset(); } } function decodeAndClamp(e, t, i, a) { (e = t + e * i) < 0 ? (e = 0) : e > a && (e = a); return e; } function resizeImageMask(e, t, i, a, r, s) { const n = r * s; let o; o = t <= 8 ? new Uint8Array(n) : t <= 16 ? new Uint16Array(n) : new Uint32Array(n); const g = i / r, c = a / s; let C, h, l, Q, E = 0; const u = new Uint16Array(r), d = i; for (C = 0; C < r; C++) u[C] = Math.floor(C * g); for (C = 0; C < s; C++) { l = Math.floor(C * c) * d; for (h = 0; h < r; h++) { Q = l + u[h]; o[E++] = e[Q]; } } return o; } class PDFImage { constructor({ xref: e, res: t, image: i, isInline: a = !1, smask: r = null, mask: s = null, isMask: n = !1, pdfFunctionFactory: o, localColorSpaceCache: g, }) { this.image = i; const c = i.dict, C = c.get('F', 'Filter'); let h; if (C instanceof Name) h = C.name; else if (Array.isArray(C)) { const t = e.fetchIfRef(C[0]); t instanceof Name && (h = t.name); } switch (h) { case 'JPXDecode': ({ width: i.width, height: i.height, componentsCount: i.numComps, bitsPerComponent: i.bitsPerComponent, } = JpxImage.parseImageProperties(i.stream)); i.stream.reset(); this.jpxDecoderOptions = { numComponents: 0, isIndexedColormap: !1, smaskInData: c.has('SMaskInData'), }; break; case 'JBIG2Decode': i.bitsPerComponent = 1; i.numComps = 1; } let l = c.get('W', 'Width'), Q = c.get('H', 'Height'); if ( Number.isInteger(i.width) && i.width > 0 && Number.isInteger(i.height) && i.height > 0 && (i.width !== l || i.height !== Q) ) { warn( 'PDFImage - using the Width/Height of the image data, rather than the image dictionary.', ); l = i.width; Q = i.height; } if (l < 1 || Q < 1) throw new FormatError(`Invalid image width: ${l} or height: ${Q}`); this.width = l; this.height = Q; this.interpolate = c.get('I', 'Interpolate'); this.imageMask = c.get('IM', 'ImageMask') || !1; this.matte = c.get('Matte') || !1; let E = i.bitsPerComponent; if (!E) { E = c.get('BPC', 'BitsPerComponent'); if (!E) { if (!this.imageMask) throw new FormatError( `Bits per component missing in image: ${this.imageMask}`, ); E = 1; } } this.bpc = E; if (!this.imageMask) { let r = c.getRaw('CS') || c.getRaw('ColorSpace'); const s = !!r; if (s) this.jpxDecoderOptions?.smaskInData && (r = Name.get('DeviceRGBA')); else if (this.jpxDecoderOptions) r = Name.get('DeviceRGBA'); else switch (i.numComps) { case 1: r = Name.get('DeviceGray'); break; case 3: r = Name.get('DeviceRGB'); break; case 4: r = Name.get('DeviceCMYK'); break; default: throw new Error( `Images with ${i.numComps} color components not supported.`, ); } this.colorSpace = ColorSpace.parse({ cs: r, xref: e, resources: a ? t : null, pdfFunctionFactory: o, localColorSpaceCache: g, }); this.numComps = this.colorSpace.numComps; if (this.jpxDecoderOptions) { this.jpxDecoderOptions.numComponents = s ? this.numComp : 0; this.jpxDecoderOptions.isIndexedColormap = 'Indexed' === this.colorSpace.name; } } this.decode = c.getArray('D', 'Decode'); this.needsDecode = !1; if ( this.decode && ((this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, E)) || (n && !ColorSpace.isDefaultDecode(this.decode, 1))) ) { this.needsDecode = !0; const e = (1 << E) - 1; this.decodeCoefficients = []; this.decodeAddends = []; const t = 'Indexed' === this.colorSpace?.name; for (let i = 0, a = 0; i < this.decode.length; i += 2, ++a) { const r = this.decode[i], s = this.decode[i + 1]; this.decodeCoefficients[a] = t ? (s - r) / e : s - r; this.decodeAddends[a] = t ? r : e * r; } } if (r) this.smask = new PDFImage({ xref: e, res: t, image: r, isInline: a, pdfFunctionFactory: o, localColorSpaceCache: g, }); else if (s) if (s instanceof BaseStream) { s.dict.get('IM', 'ImageMask') ? (this.mask = new PDFImage({ xref: e, res: t, image: s, isInline: a, isMask: !0, pdfFunctionFactory: o, localColorSpaceCache: g, })) : warn('Ignoring /Mask in image without /ImageMask.'); } else this.mask = s; } static async buildImage({ xref: e, res: t, image: i, isInline: a = !1, pdfFunctionFactory: r, localColorSpaceCache: s, }) { const n = i; let o = null, g = null; const c = i.dict.get('SMask'), C = i.dict.get('Mask'); c ? c instanceof BaseStream ? (o = c) : warn('Unsupported /SMask format.') : C && (C instanceof BaseStream || Array.isArray(C) ? (g = C) : warn('Unsupported /Mask format.')); return new PDFImage({ xref: e, res: t, image: n, isInline: a, smask: o, mask: g, pdfFunctionFactory: r, localColorSpaceCache: s, }); } static createRawMask({ imgArray: e, width: t, height: i, imageIsFromDecodeStream: a, inverseDecode: r, interpolate: s, }) { const n = ((t + 7) >> 3) * i, o = e.byteLength; let g, c; if (!a || (r && !(n === o))) if (r) { g = new Uint8Array(n); g.set(e); g.fill(255, o); } else g = new Uint8Array(e); else g = e; if (r) for (c = 0; c < o; c++) g[c] ^= 255; return { data: g, width: t, height: i, interpolate: s }; } static async createMask({ imgArray: e, width: t, height: i, imageIsFromDecodeStream: a, inverseDecode: r, interpolate: s, isOffscreenCanvasSupported: n = !1, }) { const o = 1 === t && 1 === i && r === (0 === e.length || !!(128 & e[0])); if (o) return { isSingleOpaquePixel: o }; if (n) { if (ImageResizer.needsToBeResized(t, i)) { const a = new Uint8ClampedArray(t * i * 4); convertBlackAndWhiteToRGBA({ src: e, dest: a, width: t, height: i, nonBlackColor: 0, inverseDecode: r, }); return ImageResizer.createImage({ kind: k, data: a, width: t, height: i, interpolate: s, }); } const a = new OffscreenCanvas(t, i), n = a.getContext('2d'), o = n.createImageData(t, i); convertBlackAndWhiteToRGBA({ src: e, dest: o.data, width: t, height: i, nonBlackColor: 0, inverseDecode: r, }); n.putImageData(o, 0, 0); return { data: null, width: t, height: i, interpolate: s, bitmap: a.transferToImageBitmap(), }; } return this.createRawMask({ imgArray: e, width: t, height: i, inverseDecode: r, imageIsFromDecodeStream: a, interpolate: s, }); } get drawWidth() { return Math.max(this.width, this.smask?.width || 0, this.mask?.width || 0); } get drawHeight() { return Math.max( this.height, this.smask?.height || 0, this.mask?.height || 0, ); } decodeBuffer(e) { const t = this.bpc, i = this.numComps, a = this.decodeAddends, r = this.decodeCoefficients, s = (1 << t) - 1; let n, o; if (1 === t) { for (n = 0, o = e.length; n < o; n++) e[n] = +!e[n]; return; } let g = 0; for (n = 0, o = this.width * this.height; n < o; n++) for (let t = 0; t < i; t++) { e[g] = decodeAndClamp(e[g], a[t], r[t], s); g++; } } getComponents(e) { const t = this.bpc; if (8 === t) return e; const i = this.width, a = this.height, r = this.numComps, s = i * a * r; let n, o = 0; n = t <= 8 ? new Uint8Array(s) : t <= 16 ? new Uint16Array(s) : new Uint32Array(s); const g = i * r, c = (1 << t) - 1; let C, h, l = 0; if (1 === t) { let t, i, r; for (let s = 0; s < a; s++) { i = l + (-8 & g); r = l + g; for (; l < i; ) { h = e[o++]; n[l] = (h >> 7) & 1; n[l + 1] = (h >> 6) & 1; n[l + 2] = (h >> 5) & 1; n[l + 3] = (h >> 4) & 1; n[l + 4] = (h >> 3) & 1; n[l + 5] = (h >> 2) & 1; n[l + 6] = (h >> 1) & 1; n[l + 7] = 1 & h; l += 8; } if (l < r) { h = e[o++]; t = 128; for (; l < r; ) { n[l++] = +!!(h & t); t >>= 1; } } } } else { let i = 0; h = 0; for (l = 0, C = s; l < C; ++l) { if (l % g == 0) { h = 0; i = 0; } for (; i < t; ) { h = (h << 8) | e[o++]; i += 8; } const a = i - t; let r = h >> a; r < 0 ? (r = 0) : r > c && (r = c); n[l] = r; h &= (1 << a) - 1; i = a; } } return n; } async fillOpacity(e, t, i, a, r) { const s = this.smask, n = this.mask; let o, g, c, C, h, l; if (s) { g = s.width; c = s.height; o = new Uint8ClampedArray(g * c); await s.fillGrayBuffer(o); (g === t && c === i) || (o = resizeImageMask(o, s.bpc, g, c, t, i)); } else if (n) if (n instanceof PDFImage) { g = n.width; c = n.height; o = new Uint8ClampedArray(g * c); n.numComps = 1; await n.fillGrayBuffer(o); for (C = 0, h = g * c; C < h; ++C) o[C] = 255 - o[C]; (g === t && c === i) || (o = resizeImageMask(o, n.bpc, g, c, t, i)); } else { if (!Array.isArray(n)) throw new FormatError('Unknown mask format.'); { o = new Uint8ClampedArray(t * i); const e = this.numComps; for (C = 0, h = t * i; C < h; ++C) { let t = 0; const i = C * e; for (l = 0; l < e; ++l) { const e = r[i + l], a = 2 * l; if (e < n[a] || e > n[a + 1]) { t = 255; break; } } o[C] = t; } } } if (o) for (C = 0, l = 3, h = t * a; C < h; ++C, l += 4) e[l] = o[C]; else for (C = 0, l = 3, h = t * a; C < h; ++C, l += 4) e[l] = 255; } undoPreblend(e, t, i) { const a = this.smask?.matte; if (!a) return; const r = this.colorSpace.getRgb(a, 0), s = r[0], n = r[1], o = r[2], g = t * i * 4; for (let t = 0; t < g; t += 4) { const i = e[t + 3]; if (0 === i) { e[t] = 255; e[t + 1] = 255; e[t + 2] = 255; continue; } const a = 255 / i; e[t] = (e[t] - s) * a + s; e[t + 1] = (e[t + 1] - n) * a + n; e[t + 2] = (e[t + 2] - o) * a + o; } } async createImageData(e = !1, t = !1) { const i = this.drawWidth, a = this.drawHeight, r = { width: i, height: a, interpolate: this.interpolate, kind: 0, data: null, }, s = this.numComps, n = this.width, o = this.height, g = this.bpc, c = (n * s * g + 7) >> 3, C = t && ImageResizer.needsToBeResized(i, a); if ('DeviceRGBA' === this.colorSpace.name) { r.kind = k; const e = (r.data = await this.getImageBytes(o * n * 4, {})); return t ? C ? ImageResizer.createImage(r, !1) : this.createBitmap(k, i, a, e) : r; } if (!e) { let e; 'DeviceGray' === this.colorSpace.name && 1 === g ? (e = D) : 'DeviceRGB' !== this.colorSpace.name || 8 !== g || this.needsDecode || (e = S); if (e && !this.smask && !this.mask && i === n && a === o) { const s = await this.getImageBytes(o * c, {}); if (t) return C ? ImageResizer.createImage( { data: s, kind: e, width: i, height: a, interpolate: this.interpolate, }, this.needsDecode, ) : this.createBitmap(e, n, o, s); r.kind = e; r.data = s; if (this.needsDecode) { assert( e === D, 'PDFImage.createImageData: The image must be grayscale.', ); const t = r.data; for (let e = 0, i = t.length; e < i; e++) t[e] ^= 255; } return r; } if ( this.image instanceof JpegStream && !this.smask && !this.mask && !this.needsDecode ) { let e = o * c; if (t && !C) { let t = !1; switch (this.colorSpace.name) { case 'DeviceGray': e *= 4; t = !0; break; case 'DeviceRGB': e = (e / 3) * 4; t = !0; break; case 'DeviceCMYK': t = !0; } if (t) { const t = await this.getImageBytes(e, { drawWidth: i, drawHeight: a, forceRGBA: !0, }); return this.createBitmap(k, i, a, t); } } else switch (this.colorSpace.name) { case 'DeviceGray': e *= 3; case 'DeviceRGB': case 'DeviceCMYK': r.kind = S; r.data = await this.getImageBytes(e, { drawWidth: i, drawHeight: a, forceRGB: !0, }); return C ? ImageResizer.createImage(r) : r; } } } const h = await this.getImageBytes(o * c, { internal: !0 }), l = 0 | (((h.length / c) * a) / o), Q = this.getComponents(h); let E, u, d, f, p, m; if (t && !C) { d = new OffscreenCanvas(i, a); f = d.getContext('2d'); p = f.createImageData(i, a); m = p.data; } r.kind = k; if (e || this.smask || this.mask) { (t && !C) || (m = new Uint8ClampedArray(i * a * 4)); E = 1; u = !0; await this.fillOpacity(m, i, a, l, Q); } else { if (!t || C) { r.kind = S; m = new Uint8ClampedArray(i * a * 3); E = 0; } else { new Uint32Array(m.buffer).fill( FeatureTest.isLittleEndian ? 4278190080 : 255, ); E = 1; } u = !1; } this.needsDecode && this.decodeBuffer(Q); this.colorSpace.fillRgb(m, n, o, i, a, l, g, Q, E); u && this.undoPreblend(m, i, l); if (t && !C) { f.putImageData(p, 0, 0); return { data: null, width: i, height: a, bitmap: d.transferToImageBitmap(), interpolate: this.interpolate, }; } r.data = m; return C ? ImageResizer.createImage(r) : r; } async fillGrayBuffer(e) { const t = this.numComps; if (1 !== t) throw new FormatError(`Reading gray scale from a color image: ${t}`); const i = this.width, a = this.height, r = this.bpc, s = (i * t * r + 7) >> 3, n = await this.getImageBytes(a * s, { internal: !0 }), o = this.getComponents(n); let g, c; if (1 === r) { c = i * a; if (this.needsDecode) for (g = 0; g < c; ++g) e[g] = (o[g] - 1) & 255; else for (g = 0; g < c; ++g) e[g] = 255 & -o[g]; return; } this.needsDecode && this.decodeBuffer(o); c = i * a; const C = 255 / ((1 << r) - 1); for (g = 0; g < c; ++g) e[g] = C * o[g]; } createBitmap(e, t, i, a) { const r = new OffscreenCanvas(t, i), s = r.getContext('2d'); let n; if (e === k) n = new ImageData(a, t, i); else { n = s.createImageData(t, i); convertToRGBA({ kind: e, src: a, dest: new Uint32Array(n.data.buffer), width: t, height: i, inverseDecode: this.needsDecode, }); } s.putImageData(n, 0, 0); return { data: null, width: t, height: i, bitmap: r.transferToImageBitmap(), interpolate: this.interpolate, }; } async getImageBytes( e, { drawWidth: t, drawHeight: i, forceRGBA: a = !1, forceRGB: r = !1, internal: s = !1, }, ) { this.image.reset(); this.image.drawWidth = t || this.width; this.image.drawHeight = i || this.height; this.image.forceRGBA = !!a; this.image.forceRGB = !!r; const n = await this.image.getImageData(e, this.jpxDecoderOptions); if (s || this.image instanceof DecodeStream) return n; assert( n instanceof Uint8Array, 'PDFImage.getImageBytes: Unsupported "imageBytes" type.', ); return new Uint8Array(n); } } const kr = Object.freeze({ maxImageSize: -1, disableFontFace: !1, ignoreErrors: !1, isEvalSupported: !0, isOffscreenCanvasSupported: !1, canvasMaxAreaInBytes: -1, fontExtraProperties: !1, useSystemFonts: !0, cMapUrl: null, standardFontDataUrl: null, }), Rr = 1, Nr = 2, Gr = Promise.resolve(); function normalizeBlendMode(e, t = !1) { if (Array.isArray(e)) { for (const t of e) { const e = normalizeBlendMode(t, !0); if (e) return e; } warn(`Unsupported blend mode Array: ${e}`); return 'source-over'; } if (!(e instanceof Name)) return t ? null : 'source-over'; switch (e.name) { case 'Normal': case 'Compatible': return 'source-over'; case 'Multiply': return 'multiply'; case 'Screen': return 'screen'; case 'Overlay': return 'overlay'; case 'Darken': return 'darken'; case 'Lighten': return 'lighten'; case 'ColorDodge': return 'color-dodge'; case 'ColorBurn': return 'color-burn'; case 'HardLight': return 'hard-light'; case 'SoftLight': return 'soft-light'; case 'Difference': return 'difference'; case 'Exclusion': return 'exclusion'; case 'Hue': return 'hue'; case 'Saturation': return 'saturation'; case 'Color': return 'color'; case 'Luminosity': return 'luminosity'; } if (t) return null; warn(`Unsupported blend mode: ${e.name}`); return 'source-over'; } function addLocallyCachedImageOps(e, t) { t.objId && e.addDependency(t.objId); e.addImageOps(t.fn, t.args, t.optionalContent); t.fn === Ve && t.args[0]?.count > 0 && t.args[0].count++; } class TimeSlotManager { static TIME_SLOT_DURATION_MS = 20; static CHECK_TIME_EVERY = 100; constructor() { this.reset(); } check() { if (++this.checked < TimeSlotManager.CHECK_TIME_EVERY) return !1; this.checked = 0; return this.endTime <= Date.now(); } reset() { this.endTime = Date.now() + TimeSlotManager.TIME_SLOT_DURATION_MS; this.checked = 0; } } class PartialEvaluator { constructor({ xref: e, handler: t, pageIndex: i, idFactory: a, fontCache: r, builtInCMapCache: s, standardFontDataCache: n, globalImageCache: o, systemFontCache: g, options: c = null, }) { this.xref = e; this.handler = t; this.pageIndex = i; this.idFactory = a; this.fontCache = r; this.builtInCMapCache = s; this.standardFontDataCache = n; this.globalImageCache = o; this.systemFontCache = g; this.options = c || kr; this.type3FontRefs = null; this._regionalImageCache = new RegionalImageCache(); this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this); ImageResizer.setMaxArea(this.options.canvasMaxAreaInBytes); } get _pdfFunctionFactory() { return shadow( this, '_pdfFunctionFactory', new PDFFunctionFactory({ xref: this.xref, isEvalSupported: this.options.isEvalSupported, }), ); } get parsingType3Font() { return !!this.type3FontRefs; } clone(e = null) { const t = Object.create(this); t.options = Object.assign(Object.create(null), this.options, e); return t; } hasBlendModes(e, t) { if (!(e instanceof Dict)) return !1; if (e.objId && t.has(e.objId)) return !1; const i = new RefSet(t); e.objId && i.put(e.objId); const a = [e], r = this.xref; for (; a.length; ) { const e = a.shift(), t = e.get('ExtGState'); if (t instanceof Dict) for (let e of t.getRawValues()) { if (e instanceof Ref) { if (i.has(e)) continue; try { e = r.fetch(e); } catch (t) { i.put(e); info(`hasBlendModes - ignoring ExtGState: "${t}".`); continue; } } if (!(e instanceof Dict)) continue; e.objId && i.put(e.objId); const t = e.get('BM'); if (t instanceof Name) { if ('Normal' !== t.name) return !0; } else if (void 0 !== t && Array.isArray(t)) for (const e of t) if (e instanceof Name && 'Normal' !== e.name) return !0; } const s = e.get('XObject'); if (s instanceof Dict) for (let e of s.getRawValues()) { if (e instanceof Ref) { if (i.has(e)) continue; try { e = r.fetch(e); } catch (t) { i.put(e); info(`hasBlendModes - ignoring XObject: "${t}".`); continue; } } if (!(e instanceof BaseStream)) continue; e.dict.objId && i.put(e.dict.objId); const t = e.dict.get('Resources'); if (t instanceof Dict && (!t.objId || !i.has(t.objId))) { a.push(t); t.objId && i.put(t.objId); } } } for (const e of i) t.put(e); return !1; } async fetchBuiltInCMap(e) { const t = this.builtInCMapCache.get(e); if (t) return t; let i; if (null !== this.options.cMapUrl) { const t = `${this.options.cMapUrl}${e}.bcmap`, a = await fetch(t); if (!a.ok) throw new Error( `fetchBuiltInCMap: failed to fetch file "${t}" with "${a.statusText}".`, ); i = { cMapData: new Uint8Array(await a.arrayBuffer()), compressionType: wA.BINARY, }; } else i = await this.handler.sendWithPromise('FetchBuiltInCMap', { name: e }); i.compressionType !== wA.NONE && this.builtInCMapCache.set(e, i); return i; } async fetchStandardFontData(e) { const t = this.standardFontDataCache.get(e); if (t) return new Stream(t); if (this.options.useSystemFonts && 'Symbol' !== e && 'ZapfDingbats' !== e) return null; const i = Xi()[e]; let a; if (null !== this.options.standardFontDataUrl) { const e = `${this.options.standardFontDataUrl}${i}`, t = await fetch(e); t.ok ? (a = new Uint8Array(await t.arrayBuffer())) : warn( `fetchStandardFontData: failed to fetch file "${e}" with "${t.statusText}".`, ); } else try { a = await this.handler.sendWithPromise('FetchStandardFontData', { filename: i, }); } catch (e) { warn(`fetchStandardFontData: failed to fetch file "${i}" with "${e}".`); } if (!a) return null; this.standardFontDataCache.set(e, a); return new Stream(a); } async buildFormXObject(e, t, i, a, r, s, n) { const o = t.dict, g = lookupMatrix(o.getArray('Matrix'), null), c = lookupNormalRect(o.getArray('BBox'), null); let C, h; o.has('OC') && (C = await this.parseMarkedContentProps(o.get('OC'), e)); void 0 !== C && a.addOp(ve, ['OC', C]); const l = o.get('Group'); if (l) { h = { matrix: g, bbox: c, smask: i, isolated: !1, knockout: !1 }; let t = null; if (isName(l.get('S'), 'Transparency')) { h.isolated = l.get('I') || !1; h.knockout = l.get('K') || !1; if (l.has('CS')) { const i = l.getRaw('CS'), a = ColorSpace.getCached(i, this.xref, n); t = a || (await this.parseColorSpace({ cs: i, resources: e, localColorSpaceCache: n, })); } } if (i?.backdrop) { t ||= ColorSpace.singletons.rgb; i.backdrop = t.getRgb(i.backdrop, 0); } a.addOp(We, [h]); } const Q = l ? [g, null] : [g, c]; a.addOp(Oe, Q); await this.getOperatorList({ stream: t, task: r, resources: o.get('Resources') || e, operatorList: a, initialState: s, }); a.addOp(Pe, []); l && a.addOp(je, [h]); void 0 !== C && a.addOp(Te, []); } _sendImgData(e, t, i = !1) { const a = t ? [t.bitmap || t.data.buffer] : null; return this.parsingType3Font || i ? this.handler.send('commonobj', [e, 'Image', t], a) : this.handler.send('obj', [e, this.pageIndex, 'Image', t], a); } async buildPaintImageXObject({ resources: e, image: t, isInline: i = !1, operatorList: a, cacheKey: r, localImageCache: s, localColorSpaceCache: n, }) { const o = t.dict, g = o.objId, c = o.get('W', 'Width'), C = o.get('H', 'Height'); if (!c || 'number' != typeof c || !C || 'number' != typeof C) { warn('Image dimensions are missing, or not numbers.'); return; } const h = this.options.maxImageSize; if (-1 !== h && c * C > h) { const e = 'Image exceeded maximum allowed size and was removed.'; if (this.options.ignoreErrors) { warn(e); return; } throw new Error(e); } let l; o.has('OC') && (l = await this.parseMarkedContentProps(o.get('OC'), e)); let Q, E; if (o.get('IM', 'ImageMask') || !1) { const e = o.get('I', 'Interpolate'), i = (c + 7) >> 3, n = t.getBytes(i * C), h = o.getArray('D', 'Decode'); if (this.parsingType3Font) { Q = PDFImage.createRawMask({ imgArray: n, width: c, height: C, imageIsFromDecodeStream: t instanceof DecodeStream, inverseDecode: h?.[0] > 0, interpolate: e, }); Q.cached = !!r; E = [Q]; a.addImageOps(Ve, E, l); if (r) { const e = { fn: Ve, args: E, optionalContent: l }; s.set(r, g, e); g && this._regionalImageCache.set(null, g, e); } return; } Q = await PDFImage.createMask({ imgArray: n, width: c, height: C, imageIsFromDecodeStream: t instanceof DecodeStream, inverseDecode: h?.[0] > 0, interpolate: e, isOffscreenCanvasSupported: this.options.isOffscreenCanvasSupported, }); if (Q.isSingleOpaquePixel) { a.addImageOps(it, [], l); if (r) { const e = { fn: it, args: [], optionalContent: l }; s.set(r, g, e); g && this._regionalImageCache.set(null, g, e); } return; } const u = `mask_${this.idFactory.createObjId()}`; a.addDependency(u); Q.dataLen = Q.bitmap ? Q.width * Q.height * 4 : Q.data.length; this._sendImgData(u, Q); E = [ { data: u, width: Q.width, height: Q.height, interpolate: Q.interpolate, count: 1, }, ]; a.addImageOps(Ve, E, l); if (r) { const e = { objId: u, fn: Ve, args: E, optionalContent: l }; s.set(r, g, e); g && this._regionalImageCache.set(null, g, e); } return; } if (i && c + C < 200 && !o.has('SMask') && !o.has('Mask')) { try { const r = new PDFImage({ xref: this.xref, res: e, image: t, isInline: i, pdfFunctionFactory: this._pdfFunctionFactory, localColorSpaceCache: n, }); Q = await r.createImageData(!0, !1); a.isOffscreenCanvasSupported = this.options.isOffscreenCanvasSupported; a.addImageOps($e, [Q], l); } catch (e) { const t = `Unable to decode inline image: "${e}".`; if (!this.options.ignoreErrors) throw new Error(t); warn(t); } return; } let u = `img_${this.idFactory.createObjId()}`, d = !1; if (this.parsingType3Font) u = `${this.idFactory.getDocId()}_type3_${u}`; else if (r && g) { d = this.globalImageCache.shouldCache(g, this.pageIndex); if (d) { assert(!i, 'Cannot cache an inline image globally.'); u = `${this.idFactory.getDocId()}_${u}`; } } a.addDependency(u); E = [u, c, C]; a.addImageOps(ze, E, l); if (d) { if (this.globalImageCache.hasDecodeFailed(g)) { this.globalImageCache.setData(g, { objId: u, fn: ze, args: E, optionalContent: l, byteSize: 0, }); this._sendImgData(u, null, d); return; } if (c * C > 25e4 || o.has('SMask') || o.has('Mask')) { const e = await this.handler.sendWithPromise('commonobj', [ u, 'CopyLocalImage', { imageRef: g }, ]); if (e) { this.globalImageCache.setData(g, { objId: u, fn: ze, args: E, optionalContent: l, byteSize: 0, }); this.globalImageCache.addByteSize(g, e); return; } } } PDFImage.buildImage({ xref: this.xref, res: e, image: t, isInline: i, pdfFunctionFactory: this._pdfFunctionFactory, localColorSpaceCache: n, }) .then(async (e) => { Q = await e.createImageData( !1, this.options.isOffscreenCanvasSupported, ); Q.dataLen = Q.bitmap ? Q.width * Q.height * 4 : Q.data.length; Q.ref = g; d && this.globalImageCache.addByteSize(g, Q.dataLen); return this._sendImgData(u, Q, d); }) .catch((e) => { warn(`Unable to decode image "${u}": "${e}".`); g && this.globalImageCache.addDecodeFailed(g); return this._sendImgData(u, null, d); }); if (r) { const e = { objId: u, fn: ze, args: E, optionalContent: l }; s.set(r, g, e); if (g) { this._regionalImageCache.set(null, g, e); d && this.globalImageCache.setData(g, { objId: u, fn: ze, args: E, optionalContent: l, byteSize: 0, }); } } } handleSMask(e, t, i, a, r, s) { const n = e.get('G'), o = { subtype: e.get('S').name, backdrop: e.get('BC') }, g = e.get('TR'); if (isPDFFunction(g)) { const e = this._pdfFunctionFactory.create(g), t = new Uint8Array(256), i = new Float32Array(1); for (let a = 0; a < 256; a++) { i[0] = a / 255; e(i, 0, i, 0); t[a] = (255 * i[0]) | 0; } o.transferMap = t; } return this.buildFormXObject(t, n, o, i, a, r.state.clone(), s); } handleTransferFunction(e) { let t; if (Array.isArray(e)) t = e; else { if (!isPDFFunction(e)) return null; t = [e]; } const i = []; let a = 0, r = 0; for (const e of t) { const t = this.xref.fetchIfRef(e); a++; if (isName(t, 'Identity')) { i.push(null); continue; } if (!isPDFFunction(t)) return null; const s = this._pdfFunctionFactory.create(t), n = new Uint8Array(256), o = new Float32Array(1); for (let e = 0; e < 256; e++) { o[0] = e / 255; s(o, 0, o, 0); n[e] = (255 * o[0]) | 0; } i.push(n); r++; } return (1 !== a && 4 !== a) || 0 === r ? null : i; } handleTilingType(e, t, i, a, r, s, n, o) { const g = new OperatorList(), c = Dict.merge({ xref: this.xref, dictArray: [r.get('Resources'), i] }); return this.getOperatorList({ stream: a, task: n, resources: c, operatorList: g, }) .then(function () { const i = g.getIR(), a = getTilingPatternIR(i, r, t); s.addDependencies(g.dependencies); s.addOp(e, a); r.objId && o.set(null, r.objId, { operatorListIR: i, dict: r }); }) .catch((e) => { if (!(e instanceof AbortException)) { if (!this.options.ignoreErrors) throw e; warn(`handleTilingType - ignoring pattern: "${e}".`); } }); } async handleSetFont(e, t, i, a, r, s, n = null, o = null) { const g = t?.[0] instanceof Name ? t[0].name : null; let c = await this.loadFont(g, i, e, n, o); if (c.font.isType3Font) try { await c.loadType3Data(this, e, r); a.addDependencies(c.type3Dependencies); } catch (e) { c = new TranslatedFont({ loadedName: 'g_font_error', font: new ErrorFont(`Type3 font load error: ${e}`), dict: c.font, evaluatorOptions: this.options, }); } s.font = c.font; c.send(this.handler); return c.loadedName; } handleText(e, t) { const i = t.font, a = i.charsToGlyphs(e); if (i.data) { (!!(t.textRenderingMode & b) || 'Pattern' === t.fillColorSpace.name || i.disableFontFace || this.options.disableFontFace) && PartialEvaluator.buildFontPaths(i, a, this.handler, this.options); } return a; } ensureStateFont(e) { if (e.font) return; const t = new FormatError( 'Missing setFont (Tf) operator before text rendering operator.', ); if (!this.options.ignoreErrors) throw t; warn(`ensureStateFont: "${t}".`); } async setGState({ resources: e, gState: t, operatorList: i, cacheKey: a, task: r, stateManager: s, localGStateCache: n, localColorSpaceCache: o, }) { const g = t.objId; let c = !0; const C = []; let h = Promise.resolve(); for (const a of t.getKeys()) { const n = t.get(a); switch (a) { case 'Type': break; case 'LW': case 'LC': case 'LJ': case 'ML': case 'D': case 'RI': case 'FL': case 'CA': case 'ca': C.push([a, n]); break; case 'Font': c = !1; h = h.then(() => this.handleSetFont(e, null, n[0], i, r, s.state).then(function (e) { i.addDependency(e); C.push([a, [e, n[1]]]); }), ); break; case 'BM': C.push([a, normalizeBlendMode(n)]); break; case 'SMask': if (isName(n, 'None')) { C.push([a, !1]); break; } if (n instanceof Dict) { c = !1; h = h.then(() => this.handleSMask(n, e, i, r, s, o)); C.push([a, !0]); } else warn('Unsupported SMask type'); break; case 'TR': const t = this.handleTransferFunction(n); C.push([a, t]); break; case 'OP': case 'op': case 'OPM': case 'BG': case 'BG2': case 'UCR': case 'UCR2': case 'TR2': case 'HT': case 'SM': case 'SA': case 'AIS': case 'TK': info('graphic state operator ' + a); break; default: info('Unknown graphic state operator ' + a); } } await h; C.length > 0 && i.addOp(xA, [C]); c && n.set(a, g, C); } loadFont(e, t, i, a = null, r = null) { const errorFont = async () => new TranslatedFont({ loadedName: 'g_font_error', font: new ErrorFont(`Font "${e}" is not available.`), dict: t, evaluatorOptions: this.options, }); let s; if (t) t instanceof Ref && (s = t); else { const t = i.get('Font'); t && (s = t.getRaw(e)); } if (s) { if (this.type3FontRefs?.has(s)) return errorFont(); if (this.fontCache.has(s)) return this.fontCache.get(s); try { t = this.xref.fetchIfRef(s); } catch (e) { warn(`loadFont - lookup failed: "${e}".`); } } if (!(t instanceof Dict)) { if (!this.options.ignoreErrors && !this.parsingType3Font) { warn(`Font "${e}" is not available.`); return errorFont(); } warn( `Font "${e}" is not available -- attempting to fallback to a default font.`, ); t = a || PartialEvaluator.fallbackFontDict; } if (t.cacheKey && this.fontCache.has(t.cacheKey)) return this.fontCache.get(t.cacheKey); const { promise: n, resolve: o } = Promise.withResolvers(); let g; try { g = this.preEvaluateFont(t); g.cssFontInfo = r; } catch (e) { warn(`loadFont - preEvaluateFont failed: "${e}".`); return errorFont(); } const { descriptor: c, hash: C } = g, h = s instanceof Ref; let l; if (C && c instanceof Dict) { const e = (c.fontAliases ||= Object.create(null)); if (e[C]) { const t = e[C].aliasRef; if (h && t && this.fontCache.has(t)) { this.fontCache.putAlias(s, t); return this.fontCache.get(s); } } else e[C] = { fontID: this.idFactory.createFontId() }; h && (e[C].aliasRef = s); l = e[C].fontID; } else l = this.idFactory.createFontId(); assert(l?.startsWith('f'), 'The "fontID" must be (correctly) defined.'); if (h) this.fontCache.put(s, n); else { t.cacheKey = `cacheKey_${l}`; this.fontCache.put(t.cacheKey, n); } t.loadedName = `${this.idFactory.getDocId()}_${l}`; this.translateFont(g) .then((e) => { o( new TranslatedFont({ loadedName: t.loadedName, font: e, dict: t, evaluatorOptions: this.options, }), ); }) .catch((e) => { warn(`loadFont - translateFont failed: "${e}".`); o( new TranslatedFont({ loadedName: t.loadedName, font: new ErrorFont(e instanceof Error ? e.message : e), dict: t, evaluatorOptions: this.options, }), ); }); return n; } buildPath(e, t, i, a = !1) { const r = e.length - 1; i || (i = []); if (r < 0 || e.fnArray[r] !== at) { if (a) { warn(`Encountered path operator "${t}" inside of a text object.`); e.addOp(UA, null); } let r; switch (t) { case qA: const e = i[0] + i[2], t = i[1] + i[3]; r = [ Math.min(i[0], e), Math.min(i[1], t), Math.max(i[0], e), Math.max(i[1], t), ]; break; case HA: case JA: r = [i[0], i[1], i[0], i[1]]; break; default: r = [1 / 0, 1 / 0, -1 / 0, -1 / 0]; } e.addOp(at, [[t], i, r]); a && e.addOp(MA, null); } else { const a = e.argsArray[r]; a[0].push(t); a[1].push(...i); const s = a[2]; switch (t) { case qA: const e = i[0] + i[2], t = i[1] + i[3]; s[0] = Math.min(s[0], i[0], e); s[1] = Math.min(s[1], i[1], t); s[2] = Math.max(s[2], i[0], e); s[3] = Math.max(s[3], i[1], t); break; case HA: case JA: s[0] = Math.min(s[0], i[0]); s[1] = Math.min(s[1], i[1]); s[2] = Math.max(s[2], i[0]); s[3] = Math.max(s[3], i[1]); } } } parseColorSpace({ cs: e, resources: t, localColorSpaceCache: i }) { return ColorSpace.parseAsync({ cs: e, xref: this.xref, resources: t, pdfFunctionFactory: this._pdfFunctionFactory, localColorSpaceCache: i, }).catch((e) => { if (e instanceof AbortException) return null; if (this.options.ignoreErrors) { warn(`parseColorSpace - ignoring ColorSpace: "${e}".`); return null; } throw e; }); } parseShading({ shading: e, resources: t, localColorSpaceCache: i, localShadingPatternCache: a, }) { let r, s = a.get(e); if (s) return s; try { r = Pattern.parseShading( e, this.xref, t, this._pdfFunctionFactory, i, ).getIR(); } catch (t) { if (t instanceof AbortException) return null; if (this.options.ignoreErrors) { warn(`parseShading - ignoring shading: "${t}".`); a.set(e, null); return null; } throw t; } s = `pattern_${this.idFactory.createObjId()}`; this.parsingType3Font && (s = `${this.idFactory.getDocId()}_type3_${s}`); a.set(e, s); this.parsingType3Font ? this.handler.send('commonobj', [s, 'Pattern', r]) : this.handler.send('obj', [s, this.pageIndex, 'Pattern', r]); return s; } handleColorN(e, t, i, a, r, s, n, o, g, c) { const C = i.pop(); if (C instanceof Name) { const h = r.getRaw(C.name), l = h instanceof Ref && g.getByRef(h); if (l) try { const r = a.base ? a.base.getRgb(i, 0) : null, s = getTilingPatternIR(l.operatorListIR, l.dict, r); e.addOp(t, s); return; } catch {} const Q = this.xref.fetchIfRef(h); if (Q) { const r = Q instanceof BaseStream ? Q.dict : Q, C = r.get('PatternType'); if (C === Rr) { const o = a.base ? a.base.getRgb(i, 0) : null; return this.handleTilingType(t, o, s, Q, r, e, n, g); } if (C === Nr) { const i = r.get('Shading'), a = this.parseShading({ shading: i, resources: s, localColorSpaceCache: o, localShadingPatternCache: c, }); if (a) { const i = lookupMatrix(r.getArray('Matrix'), null); e.addOp(t, ['Shading', a, i]); } return; } throw new FormatError(`Unknown PatternType: ${C}`); } } throw new FormatError(`Unknown PatternName: ${C}`); } _parseVisibilityExpression(e, t, i) { if (++t > 10) { warn('Visibility expression is too deeply nested'); return; } const a = e.length, r = this.xref.fetchIfRef(e[0]); if (!(a < 2) && r instanceof Name) { switch (r.name) { case 'And': case 'Or': case 'Not': i.push(r.name); break; default: warn(`Invalid operator ${r.name} in visibility expression`); return; } for (let r = 1; r < a; r++) { const a = e[r], s = this.xref.fetchIfRef(a); if (Array.isArray(s)) { const e = []; i.push(e); this._parseVisibilityExpression(s, t, e); } else a instanceof Ref && i.push(a.toString()); } } else warn('Invalid visibility expression'); } async parseMarkedContentProps(e, t) { let i; if (e instanceof Name) { i = t.get('Properties').get(e.name); } else { if (!(e instanceof Dict)) throw new FormatError('Optional content properties malformed.'); i = e; } const a = i.get('Type')?.name; if ('OCG' === a) return { type: a, id: i.objId }; if ('OCMD' === a) { const e = i.get('VE'); if (Array.isArray(e)) { const t = []; this._parseVisibilityExpression(e, 0, t); if (t.length > 0) return { type: 'OCMD', expression: t }; } const t = i.get('OCGs'); if (Array.isArray(t) || t instanceof Dict) { const e = []; if (Array.isArray(t)) for (const i of t) e.push(i.toString()); else e.push(t.objId); return { type: a, ids: e, policy: i.get('P') instanceof Name ? i.get('P').name : null, expression: null, }; } if (t instanceof Ref) return { type: a, id: t.toString() }; } return null; } getOperatorList({ stream: e, task: t, resources: i, operatorList: a, initialState: r = null, fallbackFontDict: s = null, }) { i ||= Dict.empty; r ||= new EvalState(); if (!a) throw new Error('getOperatorList: missing "operatorList" parameter'); const n = this, o = this.xref; let g = !1; const c = new LocalImageCache(), C = new LocalColorSpaceCache(), h = new LocalGStateCache(), l = new LocalTilingPatternCache(), Q = new Map(), E = i.get('XObject') || Dict.empty, u = i.get('Pattern') || Dict.empty, d = new StateManager(r), f = new EvaluatorPreprocessor(e, o, d), p = new TimeSlotManager(); function closePendingRestoreOPS(e) { for (let e = 0, t = f.savedStatesDepth; e < t; e++) a.addOp(MA, []); } return new Promise(function promiseBody(e, r) { const next = function (t) { Promise.all([t, a.ready]).then(function () { try { promiseBody(e, r); } catch (e) { r(e); } }, r); }; t.ensureNotTerminated(); p.reset(); const m = {}; let y, w, b, D, S, k; for (; !(y = p.check()); ) { m.args = null; if (!f.read(m)) break; let e = m.args, r = m.fn; switch (0 | r) { case Le: k = e[0] instanceof Name; S = e[0].name; if (k) { const t = c.getByName(S); if (t) { addLocallyCachedImageOps(a, t); e = null; continue; } } next( new Promise(function (e, r) { if (!k) throw new FormatError('XObject must be referred to by name.'); let s = E.getRaw(S); if (s instanceof Ref) { const t = c.getByRef(s) || n._regionalImageCache.getByRef(s); if (t) { addLocallyCachedImageOps(a, t); e(); return; } const i = n.globalImageCache.getData(s, n.pageIndex); if (i) { a.addDependency(i.objId); a.addImageOps(i.fn, i.args, i.optionalContent); e(); return; } s = o.fetch(s); } if (!(s instanceof BaseStream)) throw new FormatError('XObject should be a stream'); const g = s.dict.get('Subtype'); if (!(g instanceof Name)) throw new FormatError('XObject should have a Name subtype'); if ('Form' !== g.name) if ('Image' !== g.name) { if ('PS' !== g.name) throw new FormatError( `Unhandled XObject subtype ${g.name}`, ); info('Ignored XObject subtype PS'); e(); } else n.buildPaintImageXObject({ resources: i, image: s, operatorList: a, cacheKey: S, localImageCache: c, localColorSpaceCache: C, }).then(e, r); else { d.save(); n.buildFormXObject(i, s, null, a, t, d.state.clone(), C).then( function () { d.restore(); e(); }, r, ); } }).catch(function (e) { if (!(e instanceof AbortException)) { if (!n.options.ignoreErrors) throw e; warn(`getOperatorList - ignoring XObject: "${e}".`); } }), ); return; case ne: var R = e[1]; next( n.handleSetFont(i, e, null, a, t, d.state, s).then(function (e) { a.addDependency(e); a.addOp(ne, [e, R]); }), ); return; case ee: g = !0; break; case te: g = !1; break; case Me: var N = e[0].cacheKey; if (N) { const t = c.getByName(N); if (t) { addLocallyCachedImageOps(a, t); e = null; continue; } } next( n.buildPaintImageXObject({ resources: i, image: e[0], isInline: !0, operatorList: a, cacheKey: N, localImageCache: c, localColorSpaceCache: C, }), ); return; case le: if (!d.state.font) { n.ensureStateFont(d.state); continue; } e[0] = n.handleText(e[0], d.state); break; case Be: if (!d.state.font) { n.ensureStateFont(d.state); continue; } var G = [], x = d.state; for (const t of e[0]) 'string' == typeof t ? G.push(...n.handleText(t, x)) : 'number' == typeof t && G.push(t); e[0] = G; r = le; break; case Qe: if (!d.state.font) { n.ensureStateFont(d.state); continue; } a.addOp(he); e[0] = n.handleText(e[0], d.state); r = le; break; case Ee: if (!d.state.font) { n.ensureStateFont(d.state); continue; } a.addOp(he); a.addOp(ae, [e.shift()]); a.addOp(ie, [e.shift()]); e[0] = n.handleText(e[0], d.state); r = le; break; case oe: d.state.textRenderingMode = e[0]; break; case pe: { const t = ColorSpace.getCached(e[0], o, C); if (t) { d.state.fillColorSpace = t; continue; } next( n .parseColorSpace({ cs: e[0], resources: i, localColorSpaceCache: C, }) .then(function (e) { e && (d.state.fillColorSpace = e); }), ); return; } case fe: { const t = ColorSpace.getCached(e[0], o, C); if (t) { d.state.strokeColorSpace = t; continue; } next( n .parseColorSpace({ cs: e[0], resources: i, localColorSpaceCache: C, }) .then(function (e) { e && (d.state.strokeColorSpace = e); }), ); return; } case we: D = d.state.fillColorSpace; e = D.getRgb(e, 0); r = ke; break; case me: D = d.state.strokeColorSpace; e = D.getRgb(e, 0); r = Se; break; case Fe: d.state.fillColorSpace = ColorSpace.singletons.gray; e = ColorSpace.singletons.gray.getRgb(e, 0); r = ke; break; case De: d.state.strokeColorSpace = ColorSpace.singletons.gray; e = ColorSpace.singletons.gray.getRgb(e, 0); r = Se; break; case Ne: d.state.fillColorSpace = ColorSpace.singletons.cmyk; e = ColorSpace.singletons.cmyk.getRgb(e, 0); r = ke; break; case Re: d.state.strokeColorSpace = ColorSpace.singletons.cmyk; e = ColorSpace.singletons.cmyk.getRgb(e, 0); r = Se; break; case ke: d.state.fillColorSpace = ColorSpace.singletons.rgb; e = ColorSpace.singletons.rgb.getRgb(e, 0); break; case Se: d.state.strokeColorSpace = ColorSpace.singletons.rgb; e = ColorSpace.singletons.rgb.getRgb(e, 0); break; case be: D = d.state.fillColorSpace; if ('Pattern' === D.name) { next(n.handleColorN(a, be, e, D, u, i, t, C, l, Q)); return; } e = D.getRgb(e, 0); r = ke; break; case ye: D = d.state.strokeColorSpace; if ('Pattern' === D.name) { next(n.handleColorN(a, ye, e, D, u, i, t, C, l, Q)); return; } e = D.getRgb(e, 0); r = Se; break; case Ge: var U = i.get('Shading'); if (!U) throw new FormatError('No shading resource found'); var M = U.get(e[0].name); if (!M) throw new FormatError('No shading object found'); const f = n.parseShading({ shading: M, resources: i, localColorSpaceCache: C, localShadingPatternCache: Q, }); if (!f) continue; e = [f]; r = Ge; break; case xA: k = e[0] instanceof Name; S = e[0].name; if (k) { const t = h.getByName(S); if (t) { t.length > 0 && a.addOp(xA, [t]); e = null; continue; } } next( new Promise(function (e, r) { if (!k) throw new FormatError('GState must be referred to by name.'); const s = i.get('ExtGState'); if (!(s instanceof Dict)) throw new FormatError('ExtGState should be a dictionary.'); const o = s.get(S); if (!(o instanceof Dict)) throw new FormatError('GState should be a dictionary.'); n.setGState({ resources: i, gState: o, operatorList: a, cacheKey: S, task: t, stateManager: d, localGStateCache: h, localColorSpaceCache: C, }).then(e, r); }).catch(function (e) { if (!(e instanceof AbortException)) { if (!n.options.ignoreErrors) throw e; warn(`getOperatorList - ignoring ExtGState: "${e}".`); } }), ); return; case HA: case JA: case YA: case vA: case TA: case KA: case qA: n.buildPath(a, r, e, g); continue; case He: case Je: case Ke: case qe: continue; case ve: if (!(e[0] instanceof Name)) { warn(`Expected name for beginMarkedContentProps arg0=${e[0]}`); a.addOp(ve, ['OC', null]); continue; } if ('OC' === e[0].name) { next( n .parseMarkedContentProps(e[1], i) .then((e) => { a.addOp(ve, ['OC', e]); }) .catch((e) => { if (!(e instanceof AbortException)) { if (!n.options.ignoreErrors) throw e; warn( `getOperatorList - ignoring beginMarkedContentProps: "${e}".`, ); a.addOp(ve, ['OC', null]); } }), ); return; } e = [e[0].name, e[1] instanceof Dict ? e[1].get('MCID') : null]; break; default: if (null !== e) { for (w = 0, b = e.length; w < b && !(e[w] instanceof Dict); w++); if (w < b) { warn('getOperatorList - ignoring operator: ' + r); continue; } } } a.addOp(r, e); } if (y) next(Gr); else { closePendingRestoreOPS(); e(); } }).catch((e) => { if (!(e instanceof AbortException)) { if (!this.options.ignoreErrors) throw e; warn( `getOperatorList - ignoring errors during "${t.name}" task: "${e}".`, ); closePendingRestoreOPS(); } }); } getTextContent({ stream: e, task: t, resources: i, stateManager: s = null, includeMarkedContent: n = !1, sink: o, seenStyles: g = new Set(), viewBox: c, lang: C = null, markedContentData: h = null, disableNormalization: l = !1, keepWhiteSpace: Q = !1, }) { i ||= Dict.empty; s ||= new StateManager(new TextState()); n && (h ||= { level: 0 }); const E = { items: [], styles: Object.create(null), lang: C }, u = { initialized: !1, str: [], totalWidth: 0, totalHeight: 0, width: 0, height: 0, vertical: !1, prevTransform: null, textAdvanceScale: 0, spaceInFlowMin: 0, spaceInFlowMax: 0, trackingSpaceMin: 1 / 0, negativeSpaceMax: -1 / 0, notASpace: -1 / 0, transform: null, fontName: null, hasEOL: !1, }, d = [' ', ' ']; let f = 0; function saveLastChar(e) { const t = (f + 1) % 2, i = ' ' !== d[f] && ' ' === d[t]; d[f] = e; f = t; return !Q && i; } function shouldAddWhitepsace() { return !Q && ' ' !== d[f] && ' ' === d[(f + 1) % 2]; } function resetLastChars() { d[0] = d[1] = ' '; f = 0; } const p = this, m = this.xref, y = []; let w = null; const b = new LocalImageCache(), D = new LocalGStateCache(), S = new EvaluatorPreprocessor(e, m, s); let k; function pushWhitespace({ width: e = 0, height: t = 0, transform: i = u.prevTransform, fontName: a = u.fontName, }) { E.items.push({ str: ' ', dir: 'ltr', width: e, height: t, transform: i, fontName: a, hasEOL: !1, }); } function getCurrentTextTransform() { const e = k.font, t = [k.fontSize * k.textHScale, 0, 0, k.fontSize, 0, k.textRise]; if ( e.isType3Font && (k.fontSize <= 1 || e.isCharBBox) && !isArrayEqual(k.fontMatrix, r) ) { const i = e.bbox[3] - e.bbox[1]; i > 0 && (t[3] *= i * k.fontMatrix[3]); } return Util.transform(k.ctm, Util.transform(k.textMatrix, t)); } function ensureTextContentItem() { if (u.initialized) return u; const { font: e, loadedName: t } = k; if (!g.has(t)) { g.add(t); E.styles[t] = { fontFamily: e.fallbackName, ascent: e.ascent, descent: e.descent, vertical: e.vertical, }; if (p.options.fontExtraProperties && e.systemFontInfo) { const i = E.styles[t]; i.fontSubstitution = e.systemFontInfo.css; i.fontSubstitutionLoadedName = e.systemFontInfo.loadedName; } } u.fontName = t; const i = (u.transform = getCurrentTextTransform()); if (e.vertical) { u.width = u.totalWidth = Math.hypot(i[0], i[1]); u.height = u.totalHeight = 0; u.vertical = !0; } else { u.width = u.totalWidth = 0; u.height = u.totalHeight = Math.hypot(i[2], i[3]); u.vertical = !1; } const a = Math.hypot(k.textLineMatrix[0], k.textLineMatrix[1]), r = Math.hypot(k.ctm[0], k.ctm[1]); u.textAdvanceScale = r * a; const { fontSize: s } = k; u.trackingSpaceMin = 0.102 * s; u.notASpace = 0.03 * s; u.negativeSpaceMax = -0.2 * s; u.spaceInFlowMin = 0.102 * s; u.spaceInFlowMax = 0.6 * s; u.hasEOL = !1; u.initialized = !0; return u; } function updateAdvanceScale() { if (!u.initialized) return; const e = Math.hypot(k.textLineMatrix[0], k.textLineMatrix[1]), t = Math.hypot(k.ctm[0], k.ctm[1]) * e; if (t !== u.textAdvanceScale) { if (u.vertical) { u.totalHeight += u.height * u.textAdvanceScale; u.height = 0; } else { u.totalWidth += u.width * u.textAdvanceScale; u.width = 0; } u.textAdvanceScale = t; } } function runBidiTransform(e) { let t = e.str.join(''); l || (t = (function normalizeUnicode(e) { if (!ct) { ct = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu; Ct = new Map([['ſt', 'ſt']]); } return e.replaceAll(ct, (e, t, i) => t ? t.normalize('NFKC') : Ct.get(i), ); })(t)); const i = bidi(t, -1, e.vertical); return { str: i.str, dir: i.dir, width: Math.abs(e.totalWidth), height: Math.abs(e.totalHeight), transform: e.transform, fontName: e.fontName, hasEOL: e.hasEOL, }; } async function handleSetFont(e, a) { const s = await p.loadFont(e, a, i); if (s.font.isType3Font) try { await s.loadType3Data(p, i, t); } catch {} k.loadedName = s.loadedName; k.font = s.font; k.fontMatrix = s.font.fontMatrix || r; } function applyInverseRotation(e, t, i) { const a = Math.hypot(i[0], i[1]); return [(i[0] * e + i[1] * t) / a, (i[2] * e + i[3] * t) / a]; } function compareWithLastPosition(e) { const t = getCurrentTextTransform(); let i = t[4], a = t[5]; if (k.font?.vertical) { if (i < c[0] || i > c[2] || a + e < c[1] || a > c[3]) return !1; } else if (i + e < c[0] || i > c[2] || a < c[1] || a > c[3]) return !1; if (!k.font || !u.prevTransform) return !0; let r = u.prevTransform[4], s = u.prevTransform[5]; if (r === i && s === a) return !0; let n = -1; t[0] && 0 === t[1] && 0 === t[2] ? (n = t[0] > 0 ? 0 : 180) : t[1] && 0 === t[0] && 0 === t[3] && (n = t[1] > 0 ? 90 : 270); switch (n) { case 0: break; case 90: [i, a] = [a, i]; [r, s] = [s, r]; break; case 180: [i, a, r, s] = [-i, -a, -r, -s]; break; case 270: [i, a] = [-a, -i]; [r, s] = [-s, -r]; break; default: [i, a] = applyInverseRotation(i, a, t); [r, s] = applyInverseRotation(r, s, u.prevTransform); } if (k.font.vertical) { const e = (s - a) / u.textAdvanceScale, t = i - r, n = Math.sign(u.height); if (e < n * u.negativeSpaceMax) { if (Math.abs(t) > 0.5 * u.width) { appendEOL(); return !0; } resetLastChars(); flushTextContentItem(); return !0; } if (Math.abs(t) > u.width) { appendEOL(); return !0; } e <= n * u.notASpace && resetLastChars(); if (e <= n * u.trackingSpaceMin) if (shouldAddWhitepsace()) { resetLastChars(); flushTextContentItem(); pushWhitespace({ height: Math.abs(e) }); } else u.height += e; else if (!addFakeSpaces(e, u.prevTransform, n)) if (0 === u.str.length) { resetLastChars(); pushWhitespace({ height: Math.abs(e) }); } else u.height += e; Math.abs(t) > 0.25 * u.width && flushTextContentItem(); return !0; } const o = (i - r) / u.textAdvanceScale, g = a - s, C = Math.sign(u.width); if (o < C * u.negativeSpaceMax) { if (Math.abs(g) > 0.5 * u.height) { appendEOL(); return !0; } resetLastChars(); flushTextContentItem(); return !0; } if (Math.abs(g) > u.height) { appendEOL(); return !0; } o <= C * u.notASpace && resetLastChars(); if (o <= C * u.trackingSpaceMin) if (shouldAddWhitepsace()) { resetLastChars(); flushTextContentItem(); pushWhitespace({ width: Math.abs(o) }); } else u.width += o; else if (!addFakeSpaces(o, u.prevTransform, C)) if (0 === u.str.length) { resetLastChars(); pushWhitespace({ width: Math.abs(o) }); } else u.width += o; Math.abs(g) > 0.25 * u.height && flushTextContentItem(); return !0; } function buildTextContentItem({ chars: e, extraSpacing: t }) { const i = k.font; if (!e) { const e = k.charSpacing + t; e && (i.vertical ? k.translateTextMatrix(0, -e) : k.translateTextMatrix(e * k.textHScale, 0)); Q && compareWithLastPosition(0); return; } const a = i.charsToGlyphs(e), r = k.fontMatrix[0] * k.fontSize; for (let e = 0, s = a.length; e < s; e++) { const n = a[e], { category: o } = n; if (o.isInvisibleFormatMark) continue; let g = k.charSpacing + (e + 1 === s ? t : 0), c = n.width; i.vertical && (c = n.vmetric ? n.vmetric[0] : -c); let C = c * r; if (!Q && o.isWhitespace) { if (i.vertical) { g += -C + k.wordSpacing; k.translateTextMatrix(0, -g); } else { g += C + k.wordSpacing; k.translateTextMatrix(g * k.textHScale, 0); } saveLastChar(' '); continue; } if (!o.isZeroWidthDiacritic && !compareWithLastPosition(C)) { i.vertical ? k.translateTextMatrix(0, C) : k.translateTextMatrix(C * k.textHScale, 0); continue; } const h = ensureTextContentItem(); o.isZeroWidthDiacritic && (C = 0); if (i.vertical) { k.translateTextMatrix(0, C); C = Math.abs(C); h.height += C; } else { C *= k.textHScale; k.translateTextMatrix(C, 0); h.width += C; } C && (h.prevTransform = getCurrentTextTransform()); const l = n.unicode; saveLastChar(l) && h.str.push(' '); h.str.push(l); g && (i.vertical ? k.translateTextMatrix(0, -g) : k.translateTextMatrix(g * k.textHScale, 0)); } } function appendEOL() { resetLastChars(); if (u.initialized) { u.hasEOL = !0; flushTextContentItem(); } else E.items.push({ str: '', dir: 'ltr', width: 0, height: 0, transform: getCurrentTextTransform(), fontName: k.loadedName, hasEOL: !0, }); } function addFakeSpaces(e, t, i) { if (i * u.spaceInFlowMin <= e && e <= i * u.spaceInFlowMax) { if (u.initialized) { resetLastChars(); u.str.push(' '); } return !1; } const a = u.fontName; let r = 0; if (u.vertical) { r = e; e = 0; } flushTextContentItem(); resetLastChars(); pushWhitespace({ width: Math.abs(e), height: Math.abs(r), transform: t || getCurrentTextTransform(), fontName: a, }); return !0; } function flushTextContentItem() { if (u.initialized && u.str) { u.vertical ? (u.totalHeight += u.height * u.textAdvanceScale) : (u.totalWidth += u.width * u.textAdvanceScale); E.items.push(runBidiTransform(u)); u.initialized = !1; u.str.length = 0; } } function enqueueChunk(e = !1) { const t = E.items.length; if (0 !== t && !(e && t < 10)) { o.enqueue(E, t); E.items = []; E.styles = Object.create(null); } } const R = new TimeSlotManager(); return new Promise(function promiseBody(e, r) { const next = function (t) { enqueueChunk(!0); Promise.all([t, o.ready]).then(function () { try { promiseBody(e, r); } catch (e) { r(e); } }, r); }; t.ensureNotTerminated(); R.reset(); const u = {}; let d, f = []; for (; !(d = R.check()); ) { f.length = 0; u.args = f; if (!S.read(u)) break; const e = k; k = s.state; const r = u.fn; f = u.args; switch (0 | r) { case ne: var N = f[0].name, G = f[1]; if (k.font && N === k.fontName && G === k.fontSize) break; flushTextContentItem(); k.fontName = N; k.fontSize = G; next(handleSetFont(N, null)); return; case ge: k.textRise = f[0]; break; case re: k.textHScale = f[0] / 100; break; case se: k.leading = f[0]; break; case Ie: k.translateTextLineMatrix(f[0], f[1]); k.textMatrix = k.textLineMatrix.slice(); break; case ce: k.leading = -f[1]; k.translateTextLineMatrix(f[0], f[1]); k.textMatrix = k.textLineMatrix.slice(); break; case he: k.carriageReturn(); break; case Ce: k.setTextMatrix(f[0], f[1], f[2], f[3], f[4], f[5]); k.setTextLineMatrix(f[0], f[1], f[2], f[3], f[4], f[5]); updateAdvanceScale(); break; case ie: k.charSpacing = f[0]; break; case ae: k.wordSpacing = f[0]; break; case ee: k.textMatrix = a.slice(); k.textLineMatrix = a.slice(); break; case Be: if (!s.state.font) { p.ensureStateFont(s.state); continue; } const r = ((k.font.vertical ? 1 : -1) * k.fontSize) / 1e3, u = f[0]; for (let e = 0, t = u.length; e < t; e++) { const t = u[e]; if ('string' == typeof t) y.push(t); else if ('number' == typeof t && 0 !== t) { const e = y.join(''); y.length = 0; buildTextContentItem({ chars: e, extraSpacing: t * r }); } } if (y.length > 0) { const e = y.join(''); y.length = 0; buildTextContentItem({ chars: e, extraSpacing: 0 }); } break; case le: if (!s.state.font) { p.ensureStateFont(s.state); continue; } buildTextContentItem({ chars: f[0], extraSpacing: 0 }); break; case Qe: if (!s.state.font) { p.ensureStateFont(s.state); continue; } k.carriageReturn(); buildTextContentItem({ chars: f[0], extraSpacing: 0 }); break; case Ee: if (!s.state.font) { p.ensureStateFont(s.state); continue; } k.wordSpacing = f[0]; k.charSpacing = f[1]; k.carriageReturn(); buildTextContentItem({ chars: f[2], extraSpacing: 0 }); break; case Le: flushTextContentItem(); w || (w = i.get('XObject') || Dict.empty); var x = f[0] instanceof Name, U = f[0].name; if (x && b.getByName(U)) break; next( new Promise(function (e, a) { if (!x) throw new FormatError('XObject must be referred to by name.'); let r = w.getRaw(U); if (r instanceof Ref) { if (b.getByRef(r)) { e(); return; } if (p.globalImageCache.getData(r, p.pageIndex)) { e(); return; } r = m.fetch(r); } if (!(r instanceof BaseStream)) throw new FormatError('XObject should be a stream'); const E = r.dict.get('Subtype'); if (!(E instanceof Name)) throw new FormatError('XObject should have a Name subtype'); if ('Form' !== E.name) { b.set(U, r.dict.objId, !0); e(); return; } const u = s.state.clone(), d = new StateManager(u), f = lookupMatrix(r.dict.getArray('Matrix'), null); f && d.transform(f); enqueueChunk(); const y = { enqueueInvoked: !1, enqueue(e, t) { this.enqueueInvoked = !0; o.enqueue(e, t); }, get desiredSize() { return o.desiredSize; }, get ready() { return o.ready; }, }; p.getTextContent({ stream: r, task: t, resources: r.dict.get('Resources') || i, stateManager: d, includeMarkedContent: n, sink: y, seenStyles: g, viewBox: c, lang: C, markedContentData: h, disableNormalization: l, keepWhiteSpace: Q, }).then(function () { y.enqueueInvoked || b.set(U, r.dict.objId, !0); e(); }, a); }).catch(function (e) { if (!(e instanceof AbortException)) { if (!p.options.ignoreErrors) throw e; warn(`getTextContent - ignoring XObject: "${e}".`); } }), ); return; case xA: x = f[0] instanceof Name; U = f[0].name; if (x && D.getByName(U)) break; next( new Promise(function (e, t) { if (!x) throw new FormatError('GState must be referred to by name.'); const a = i.get('ExtGState'); if (!(a instanceof Dict)) throw new FormatError('ExtGState should be a dictionary.'); const r = a.get(U); if (!(r instanceof Dict)) throw new FormatError('GState should be a dictionary.'); const s = r.get('Font'); if (s) { flushTextContentItem(); k.fontName = null; k.fontSize = s[1]; handleSetFont(null, s[0]).then(e, t); } else { D.set(U, r.objId, !0); e(); } }).catch(function (e) { if (!(e instanceof AbortException)) { if (!p.options.ignoreErrors) throw e; warn(`getTextContent - ignoring ExtGState: "${e}".`); } }), ); return; case Ye: flushTextContentItem(); if (n) { h.level++; E.items.push({ type: 'beginMarkedContent', tag: f[0] instanceof Name ? f[0].name : null, }); } break; case ve: flushTextContentItem(); if (n) { h.level++; let e = null; f[1] instanceof Dict && (e = f[1].get('MCID')); E.items.push({ type: 'beginMarkedContentProps', id: Number.isInteger(e) ? `${p.idFactory.getPageObjId()}_mc${e}` : null, tag: f[0] instanceof Name ? f[0].name : null, }); } break; case Te: flushTextContentItem(); if (n) { if (0 === h.level) break; h.level--; E.items.push({ type: 'endMarkedContent' }); } break; case MA: !e || (e.font === k.font && e.fontSize === k.fontSize && e.fontName === k.fontName) || flushTextContentItem(); } if (E.items.length >= o.desiredSize) { d = !0; break; } } if (d) next(Gr); else { flushTextContentItem(); enqueueChunk(); e(); } }).catch((e) => { if (!(e instanceof AbortException)) { if (!this.options.ignoreErrors) throw e; warn( `getTextContent - ignoring errors during "${t.name}" task: "${e}".`, ); flushTextContentItem(); enqueueChunk(); } }); } async extractDataStructures(e, t) { const i = this.xref; let a; const r = this.readToUnicode(t.toUnicode); if (t.composite) { const i = e.get('CIDSystemInfo'); i instanceof Dict && (t.cidSystemInfo = { registry: stringToPDFString(i.get('Registry')), ordering: stringToPDFString(i.get('Ordering')), supplement: i.get('Supplement'), }); try { const t = e.get('CIDToGIDMap'); t instanceof BaseStream && (a = t.getBytes()); } catch (e) { if (!this.options.ignoreErrors) throw e; warn(`extractDataStructures - ignoring CIDToGIDMap data: "${e}".`); } } const s = []; let n, o = null; if (e.has('Encoding')) { n = e.get('Encoding'); if (n instanceof Dict) { o = n.get('BaseEncoding'); o = o instanceof Name ? o.name : null; if (n.has('Differences')) { const e = n.get('Differences'); let t = 0; for (const a of e) { const e = i.fetchIfRef(a); if ('number' == typeof e) t = e; else { if (!(e instanceof Name)) throw new FormatError( `Invalid entry in 'Differences' array: ${e}`, ); s[t++] = e.name; } } } } else if (n instanceof Name) o = n.name; else { const e = 'Encoding is not a Name nor a Dict'; if (!this.options.ignoreErrors) throw new FormatError(e); warn(e); } 'MacRomanEncoding' !== o && 'MacExpertEncoding' !== o && 'WinAnsiEncoding' !== o && (o = null); } const g = !t.file || t.isInternalFont, c = _i()[t.name]; o && g && c && (o = null); if (o) t.defaultEncoding = getEncoding(o); else { const e = !!(t.flags & Oi), i = !!(t.flags & Pi); n = mi; 'TrueType' !== t.type || i || (n = yi); if (e || c) { n = pi; g && (/Symbol/i.test(t.name) ? (n = wi) : /Dingbats/i.test(t.name) ? (n = bi) : /Wingdings/i.test(t.name) && (n = yi)); } t.defaultEncoding = n; } t.differences = s; t.baseEncodingName = o; t.hasEncoding = !!o || s.length > 0; t.dict = e; t.toUnicode = await r; const C = await this.buildToUnicode(t); t.toUnicode = C; a && (t.cidToGidMap = this.readCidToGidMap(a, C)); return t; } _simpleFontToUnicode(e, t = !1) { assert(!e.composite, 'Must be a simple font.'); const i = [], a = e.defaultEncoding.slice(), r = e.baseEncodingName, s = e.differences; for (const e in s) { const t = s[e]; '.notdef' !== t && (a[e] = t); } const n = xi(); for (const s in a) { let o = a[s]; if ('' === o) continue; let g = n[o]; if (void 0 !== g) { i[s] = String.fromCharCode(g); continue; } let c = 0; switch (o[0]) { case 'G': 3 === o.length && (c = parseInt(o.substring(1), 16)); break; case 'g': 5 === o.length && (c = parseInt(o.substring(1), 16)); break; case 'C': case 'c': if (o.length >= 3 && o.length <= 4) { const i = o.substring(1); if (t) { c = parseInt(i, 16); break; } c = +i; if (Number.isNaN(c) && Number.isInteger(parseInt(i, 16))) return this._simpleFontToUnicode(e, !0); } break; case 'u': g = getUnicodeForGlyph(o, n); -1 !== g && (c = g); break; default: switch (o) { case 'f_h': case 'f_t': case 'T_h': i[s] = o.replaceAll('_', ''); continue; } } if (c > 0 && c <= 1114111 && Number.isInteger(c)) { if (r && c === +s) { const e = getEncoding(r); if (e && (o = e[s])) { i[s] = String.fromCharCode(n[o]); continue; } } i[s] = String.fromCodePoint(c); } } return i; } async buildToUnicode(e) { e.hasIncludedToUnicodeMap = e.toUnicode?.length > 0; if (e.hasIncludedToUnicodeMap) { !e.composite && e.hasEncoding && (e.fallbackToUnicode = this._simpleFontToUnicode(e)); return e.toUnicode; } if (!e.composite) return new ToUnicodeMap(this._simpleFontToUnicode(e)); if ( e.composite && ((e.cMap.builtInCMap && !(e.cMap instanceof IdentityCMap)) || ('Adobe' === e.cidSystemInfo?.registry && ('GB1' === e.cidSystemInfo.ordering || 'CNS1' === e.cidSystemInfo.ordering || 'Japan1' === e.cidSystemInfo.ordering || 'Korea1' === e.cidSystemInfo.ordering))) ) { const { registry: t, ordering: i } = e.cidSystemInfo, a = Name.get(`${t}-${i}-UCS2`), r = await CMapFactory.create({ encoding: a, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null, }), s = [], n = []; e.cMap.forEach(function (e, t) { if (t > 65535) throw new FormatError('Max size of CID is 65,535'); const i = r.lookup(t); if (i) { n.length = 0; for (let e = 0, t = i.length; e < t; e += 2) n.push((i.charCodeAt(e) << 8) + i.charCodeAt(e + 1)); s[e] = String.fromCharCode(...n); } }); return new ToUnicodeMap(s); } return new IdentityToUnicodeMap(e.firstChar, e.lastChar); } async readToUnicode(e) { if (!e) return null; if (e instanceof Name) { const t = await CMapFactory.create({ encoding: e, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null, }); return t instanceof IdentityCMap ? new IdentityToUnicodeMap(0, 65535) : new ToUnicodeMap(t.getMap()); } if (e instanceof BaseStream) try { const t = await CMapFactory.create({ encoding: e, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null, }); if (t instanceof IdentityCMap) return new IdentityToUnicodeMap(0, 65535); const i = new Array(t.length); t.forEach(function (e, t) { if ('number' == typeof t) { i[e] = String.fromCodePoint(t); return; } const a = []; for (let e = 0; e < t.length; e += 2) { const i = (t.charCodeAt(e) << 8) | t.charCodeAt(e + 1); if (55296 != (63488 & i)) { a.push(i); continue; } e += 2; const r = (t.charCodeAt(e) << 8) | t.charCodeAt(e + 1); a.push(((1023 & i) << 10) + (1023 & r) + 65536); } i[e] = String.fromCodePoint(...a); }); return new ToUnicodeMap(i); } catch (e) { if (e instanceof AbortException) return null; if (this.options.ignoreErrors) { warn(`readToUnicode - ignoring ToUnicode data: "${e}".`); return null; } throw e; } return null; } readCidToGidMap(e, t) { const i = []; for (let a = 0, r = e.length; a < r; a++) { const r = (e[a++] << 8) | e[a], s = a >> 1; (0 !== r || t.has(s)) && (i[s] = r); } return i; } extractWidths(e, t, i) { const a = this.xref; let r = [], s = 0; const n = []; let o; if (i.composite) { const t = e.get('DW'); s = 'number' == typeof t ? Math.ceil(t) : 1e3; const g = e.get('W'); if (Array.isArray(g)) for (let e = 0, t = g.length; e < t; e++) { let t = a.fetchIfRef(g[e++]); if (!Number.isInteger(t)) break; const i = a.fetchIfRef(g[e]); if (Array.isArray(i)) for (const e of i) { const i = a.fetchIfRef(e); 'number' == typeof i && (r[t] = i); t++; } else { if (!Number.isInteger(i)) break; { const s = a.fetchIfRef(g[++e]); if ('number' != typeof s) continue; for (let e = t; e <= i; e++) r[e] = s; } } } if (i.vertical) { const t = e.getArray('DW2'); let i = isNumberArray(t, 2) ? t : [880, -1e3]; o = [i[1], 0.5 * s, i[0]]; i = e.get('W2'); if (Array.isArray(i)) for (let e = 0, t = i.length; e < t; e++) { let t = a.fetchIfRef(i[e++]); if (!Number.isInteger(t)) break; const r = a.fetchIfRef(i[e]); if (Array.isArray(r)) for (let e = 0, i = r.length; e < i; e++) { const i = [ a.fetchIfRef(r[e++]), a.fetchIfRef(r[e++]), a.fetchIfRef(r[e]), ]; isNumberArray(i, null) && (n[t] = i); t++; } else { if (!Number.isInteger(r)) break; { const s = [ a.fetchIfRef(i[++e]), a.fetchIfRef(i[++e]), a.fetchIfRef(i[++e]), ]; if (!isNumberArray(s, null)) continue; for (let e = t; e <= r; e++) n[e] = s; } } } } } else { const n = e.get('Widths'); if (Array.isArray(n)) { let e = i.firstChar; for (const t of n) { const i = a.fetchIfRef(t); 'number' == typeof i && (r[e] = i); e++; } const o = t.get('MissingWidth'); s = 'number' == typeof o ? o : 0; } else { const t = e.get('BaseFont'); if (t instanceof Name) { const e = this.getBaseFontMetrics(t.name); r = this.buildCharCodeToWidth(e.widths, i); s = e.defaultWidth; } } } let g = !0, c = s; for (const e in r) { const t = r[e]; if (t) if (c) { if (c !== t) { g = !1; break; } } else c = t; } g ? (i.flags |= Ki) : (i.flags &= ~Ki); i.defaultWidth = s; i.widths = r; i.defaultVMetrics = o; i.vmetrics = n; } isSerifFont(e) { const t = e.split('-', 1)[0]; return t in Vi() || /serif/gi.test(t); } getBaseFontMetrics(e) { let t = 0, i = Object.create(null), a = !1; let r = ji()[e] || e; const s = ta(); r in s || (r = this.isSerifFont(e) ? 'Times-Roman' : 'Helvetica'); const n = s[r]; if ('number' == typeof n) { t = n; a = !0; } else i = n(); return { defaultWidth: t, monospace: a, widths: i }; } buildCharCodeToWidth(e, t) { const i = Object.create(null), a = t.differences, r = t.defaultEncoding; for (let t = 0; t < 256; t++) t in a && e[a[t]] ? (i[t] = e[a[t]]) : t in r && e[r[t]] && (i[t] = e[r[t]]); return i; } preEvaluateFont(e) { const t = e; let i = e.get('Subtype'); if (!(i instanceof Name)) throw new FormatError('invalid font Subtype'); let a, r = !1; if ('Type0' === i.name) { const t = e.get('DescendantFonts'); if (!t) throw new FormatError('Descendant fonts are not specified'); if ( !( (e = Array.isArray(t) ? this.xref.fetchIfRef(t[0]) : t) instanceof Dict ) ) throw new FormatError('Descendant font is not a dictionary.'); i = e.get('Subtype'); if (!(i instanceof Name)) throw new FormatError('invalid font Subtype'); r = !0; } let s = e.get('FirstChar'); Number.isInteger(s) || (s = 0); let n = e.get('LastChar'); Number.isInteger(n) || (n = r ? 65535 : 255); const o = e.get('FontDescriptor'), g = e.get('ToUnicode') || t.get('ToUnicode'); if (o) { a = new MurmurHash3_64(); const i = t.getRaw('Encoding'); if (i instanceof Name) a.update(i.name); else if (i instanceof Ref) a.update(i.toString()); else if (i instanceof Dict) for (const e of i.getRawValues()) if (e instanceof Name) a.update(e.name); else if (e instanceof Ref) a.update(e.toString()); else if (Array.isArray(e)) { const t = e.length, i = new Array(t); for (let a = 0; a < t; a++) { const t = e[a]; t instanceof Name ? (i[a] = t.name) : ('number' == typeof t || t instanceof Ref) && (i[a] = t.toString()); } a.update(i.join()); } a.update(`${s}-${n}`); if (g instanceof BaseStream) { const e = g.str || g, t = e.buffer ? new Uint8Array(e.buffer.buffer, 0, e.bufferLength) : new Uint8Array(e.bytes.buffer, e.start, e.end - e.start); a.update(t); } else g instanceof Name && a.update(g.name); const o = e.get('Widths') || t.get('Widths'); if (Array.isArray(o)) { const e = []; for (const t of o) ('number' == typeof t || t instanceof Ref) && e.push(t.toString()); a.update(e.join()); } if (r) { a.update('compositeFont'); const i = e.get('W') || t.get('W'); if (Array.isArray(i)) { const e = []; for (const t of i) if ('number' == typeof t || t instanceof Ref) e.push(t.toString()); else if (Array.isArray(t)) { const i = []; for (const e of t) ('number' == typeof e || e instanceof Ref) && i.push(e.toString()); e.push(`[${i.join()}]`); } a.update(e.join()); } const r = e.getRaw('CIDToGIDMap') || t.getRaw('CIDToGIDMap'); r instanceof Name ? a.update(r.name) : r instanceof Ref ? a.update(r.toString()) : r instanceof BaseStream && a.update(r.peekBytes()); } } return { descriptor: o, dict: e, baseDict: t, composite: r, type: i.name, firstChar: s, lastChar: n, toUnicode: g, hash: a ? a.hexdigest() : '', }; } async translateFont({ descriptor: e, dict: t, baseDict: i, composite: a, type: s, firstChar: n, lastChar: o, toUnicode: g, cssFontInfo: c, }) { const C = 'Type3' === s; if (!e) { if (!C) { let e = t.get('BaseFont'); if (!(e instanceof Name)) throw new FormatError('Base font is not specified'); e = e.name.replaceAll(/[,_]/g, '-'); const a = this.getBaseFontMetrics(e), r = e.split('-', 1)[0], c = (this.isSerifFont(r) ? qi : 0) | (a.monospace ? Ki : 0) | (_i()[r] ? Oi : Pi), h = { type: s, name: e, loadedName: i.loadedName, systemFontInfo: null, widths: a.widths, defaultWidth: a.defaultWidth, isSimulatedFlags: !0, flags: c, firstChar: n, lastChar: o, toUnicode: g, xHeight: 0, capHeight: 0, italicAngle: 0, isType3Font: C, }, l = t.get('Widths'), Q = getStandardFontName(e); let E = null; if (Q) { E = await this.fetchStandardFontData(Q); h.isInternalFont = !!E; } !h.isInternalFont && this.options.useSystemFonts && (h.systemFontInfo = getFontSubstitution( this.systemFontCache, this.idFactory, this.options.standardFontDataUrl, e, Q, s, )); const u = await this.extractDataStructures(t, h); if (Array.isArray(l)) { const e = []; let t = n; for (const i of l) { const a = this.xref.fetchIfRef(i); 'number' == typeof a && (e[t] = a); t++; } u.widths = e; } else u.widths = this.buildCharCodeToWidth(a.widths, u); return new Font(e, E, u); } { const i = lookupNormalRect(t.getArray('FontBBox'), [0, 0, 0, 0]); (e = new Dict(null)).set('FontName', Name.get(s)); e.set('FontBBox', i); } } let h = e.get('FontName'), l = t.get('BaseFont'); 'string' == typeof h && (h = Name.get(h)); 'string' == typeof l && (l = Name.get(l)); const Q = h?.name, E = l?.name; if (!C && Q !== E) { info( `The FontDescriptor's FontName is "${Q}" but should be the same as the Font's BaseFont "${E}".`, ); Q && E && (E.startsWith(Q) || (!isKnownFontName(Q) && isKnownFontName(E))) && (h = null); } h ||= l; if (!(h instanceof Name)) throw new FormatError('invalid font name'); let u, d, f, p, m; try { u = e.get('FontFile', 'FontFile2', 'FontFile3'); } catch (e) { if (!this.options.ignoreErrors) throw e; warn(`translateFont - fetching "${h.name}" font file: "${e}".`); u = new NullStream(); } let y = !1, w = null, b = null; if (u) { if (u.dict) { const e = u.dict.get('Subtype'); e instanceof Name && (d = e.name); f = u.dict.get('Length1'); p = u.dict.get('Length2'); m = u.dict.get('Length3'); } } else if (c) { const e = getXfaFontName(h.name); if (e) { c.fontFamily = `${c.fontFamily}-PdfJS-XFA`; c.metrics = e.metrics || null; w = e.factors || null; u = await this.fetchStandardFontData(e.name); y = !!u; i = t = getXfaFontDict(h.name); a = !0; } } else if (!C) { const e = getStandardFontName(h.name); if (e) { u = await this.fetchStandardFontData(e); y = !!u; } !y && this.options.useSystemFonts && (b = getFontSubstitution( this.systemFontCache, this.idFactory, this.options.standardFontDataUrl, h.name, e, s, )); } const D = lookupMatrix(t.getArray('FontMatrix'), r), S = lookupNormalRect( e.getArray('FontBBox') || t.getArray('FontBBox'), void 0, ); let k = e.get('Ascent'); 'number' != typeof k && (k = void 0); let R = e.get('Descent'); 'number' != typeof R && (R = void 0); let N = e.get('XHeight'); 'number' != typeof N && (N = 0); let G = e.get('CapHeight'); 'number' != typeof G && (G = 0); let x = e.get('Flags'); Number.isInteger(x) || (x = 0); let U = e.get('ItalicAngle'); 'number' != typeof U && (U = 0); const M = { type: s, name: h.name, subtype: d, file: u, length1: f, length2: p, length3: m, isInternalFont: y, loadedName: i.loadedName, composite: a, fixedPitch: !1, fontMatrix: D, firstChar: n, lastChar: o, toUnicode: g, bbox: S, ascent: k, descent: R, xHeight: N, capHeight: G, flags: x, italicAngle: U, isType3Font: C, cssFontInfo: c, scaleFactors: w, systemFontInfo: b, }; if (a) { const e = i.get('Encoding'); e instanceof Name && (M.cidEncoding = e.name); const t = await CMapFactory.create({ encoding: e, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null, }); M.cMap = t; M.vertical = M.cMap.vertical; } const L = await this.extractDataStructures(t, M); this.extractWidths(t, e, L); return new Font(h.name, u, L); } static buildFontPaths(e, t, i, a) { function buildPath(t) { const r = `${e.loadedName}_path_${t}`; try { if (e.renderer.hasBuiltPath(t)) return; i.send('commonobj', [r, 'FontPath', e.renderer.getPathJs(t)]); } catch (e) { if (a.ignoreErrors) { warn(`buildFontPaths - ignoring ${r} glyph: "${e}".`); return; } throw e; } } for (const e of t) { buildPath(e.fontChar); const t = e.accent; t?.fontChar && buildPath(t.fontChar); } } static get fallbackFontDict() { const e = new Dict(); e.set('BaseFont', Name.get('Helvetica')); e.set('Type', Name.get('FallbackType')); e.set('Subtype', Name.get('FallbackType')); e.set('Encoding', Name.get('WinAnsiEncoding')); return shadow(this, 'fallbackFontDict', e); } } class TranslatedFont { constructor({ loadedName: e, font: t, dict: i, evaluatorOptions: a }) { this.loadedName = e; this.font = t; this.dict = i; this._evaluatorOptions = a || kr; this.type3Loaded = null; this.type3Dependencies = t.isType3Font ? new Set() : null; this.sent = !1; } send(e) { if (!this.sent) { this.sent = !0; e.send('commonobj', [ this.loadedName, 'Font', this.font.exportData(this._evaluatorOptions.fontExtraProperties), ]); } } fallback(e) { if (this.font.data) { this.font.disableFontFace = !0; PartialEvaluator.buildFontPaths( this.font, this.font.glyphCacheValues, e, this._evaluatorOptions, ); } } loadType3Data(e, t, i) { if (this.type3Loaded) return this.type3Loaded; if (!this.font.isType3Font) throw new Error('Must be a Type3 font.'); const a = e.clone({ ignoreErrors: !1 }), r = new RefSet(e.type3FontRefs); this.dict.objId && !r.has(this.dict.objId) && r.put(this.dict.objId); a.type3FontRefs = r; const s = this.font, n = this.type3Dependencies; let o = Promise.resolve(); const g = this.dict.get('CharProcs'), c = this.dict.get('Resources') || t, C = Object.create(null), h = Util.normalizeRect(s.bbox || [0, 0, 0, 0]), l = h[2] - h[0], Q = h[3] - h[1], E = Math.hypot(l, Q); for (const e of g.getKeys()) o = o.then(() => { const t = g.get(e), r = new OperatorList(); return a .getOperatorList({ stream: t, task: i, resources: c, operatorList: r, }) .then(() => { r.fnArray[0] === de && this._removeType3ColorOperators(r, E); C[e] = r.getIR(); for (const e of r.dependencies) n.add(e); }) .catch(function (t) { warn(`Type3 font resource "${e}" is not available.`); const i = new OperatorList(); C[e] = i.getIR(); }); }); this.type3Loaded = o.then(() => { s.charProcOperatorList = C; if (this._bbox) { s.isCharBBox = !0; s.bbox = this._bbox; } }); return this.type3Loaded; } _removeType3ColorOperators(e, t = NaN) { const i = Util.normalizeRect(e.argsArray[0].slice(2)), a = i[2] - i[0], r = i[3] - i[1], s = Math.hypot(a, r); if (0 === a || 0 === r) { e.fnArray.splice(0, 1); e.argsArray.splice(0, 1); } else if (0 === t || Math.round(s / t) >= 10) { this._bbox || (this._bbox = [1 / 0, 1 / 0, -1 / 0, -1 / 0]); this._bbox[0] = Math.min(this._bbox[0], i[0]); this._bbox[1] = Math.min(this._bbox[1], i[1]); this._bbox[2] = Math.max(this._bbox[2], i[2]); this._bbox[3] = Math.max(this._bbox[3], i[3]); } let n = 0, o = e.length; for (; n < o; ) { switch (e.fnArray[n]) { case de: break; case fe: case pe: case me: case ye: case we: case be: case De: case Fe: case Se: case ke: case Re: case Ne: case Ge: case NA: e.fnArray.splice(n, 1); e.argsArray.splice(n, 1); o--; continue; case xA: const [t] = e.argsArray[n]; let i = 0, a = t.length; for (; i < a; ) { const [e] = t[i]; switch (e) { case 'TR': case 'TR2': case 'HT': case 'BG': case 'BG2': case 'UCR': case 'UCR2': t.splice(i, 1); a--; continue; } i++; } } n++; } } } class StateManager { constructor(e = new EvalState()) { this.state = e; this.stateStack = []; } save() { const e = this.state; this.stateStack.push(this.state); this.state = e.clone(); } restore() { const e = this.stateStack.pop(); e && (this.state = e); } transform(e) { this.state.ctm = Util.transform(this.state.ctm, e); } } class TextState { constructor() { this.ctm = new Float32Array(a); this.fontName = null; this.fontSize = 0; this.loadedName = null; this.font = null; this.fontMatrix = r; this.textMatrix = a.slice(); this.textLineMatrix = a.slice(); this.charSpacing = 0; this.wordSpacing = 0; this.leading = 0; this.textHScale = 1; this.textRise = 0; } setTextMatrix(e, t, i, a, r, s) { const n = this.textMatrix; n[0] = e; n[1] = t; n[2] = i; n[3] = a; n[4] = r; n[5] = s; } setTextLineMatrix(e, t, i, a, r, s) { const n = this.textLineMatrix; n[0] = e; n[1] = t; n[2] = i; n[3] = a; n[4] = r; n[5] = s; } translateTextMatrix(e, t) { const i = this.textMatrix; i[4] = i[0] * e + i[2] * t + i[4]; i[5] = i[1] * e + i[3] * t + i[5]; } translateTextLineMatrix(e, t) { const i = this.textLineMatrix; i[4] = i[0] * e + i[2] * t + i[4]; i[5] = i[1] * e + i[3] * t + i[5]; } carriageReturn() { this.translateTextLineMatrix(0, -this.leading); this.textMatrix = this.textLineMatrix.slice(); } clone() { const e = Object.create(this); e.textMatrix = this.textMatrix.slice(); e.textLineMatrix = this.textLineMatrix.slice(); e.fontMatrix = this.fontMatrix.slice(); return e; } } class EvalState { constructor() { this.ctm = new Float32Array(a); this.font = null; this.textRenderingMode = w; this.fillColorSpace = ColorSpace.singletons.gray; this.strokeColorSpace = ColorSpace.singletons.gray; } clone() { return Object.create(this); } } class EvaluatorPreprocessor { static get opMap() { return shadow( this, 'opMap', Object.assign(Object.create(null), { w: { id: DA, numArgs: 1, variableArgs: !1 }, J: { id: FA, numArgs: 1, variableArgs: !1 }, j: { id: SA, numArgs: 1, variableArgs: !1 }, M: { id: kA, numArgs: 1, variableArgs: !1 }, d: { id: RA, numArgs: 2, variableArgs: !1 }, ri: { id: NA, numArgs: 1, variableArgs: !1 }, i: { id: GA, numArgs: 1, variableArgs: !1 }, gs: { id: xA, numArgs: 1, variableArgs: !1 }, q: { id: UA, numArgs: 0, variableArgs: !1 }, Q: { id: MA, numArgs: 0, variableArgs: !1 }, cm: { id: LA, numArgs: 6, variableArgs: !1 }, m: { id: HA, numArgs: 2, variableArgs: !1 }, l: { id: JA, numArgs: 2, variableArgs: !1 }, c: { id: YA, numArgs: 6, variableArgs: !1 }, v: { id: vA, numArgs: 4, variableArgs: !1 }, y: { id: TA, numArgs: 4, variableArgs: !1 }, h: { id: KA, numArgs: 0, variableArgs: !1 }, re: { id: qA, numArgs: 4, variableArgs: !1 }, S: { id: OA, numArgs: 0, variableArgs: !1 }, s: { id: PA, numArgs: 0, variableArgs: !1 }, f: { id: WA, numArgs: 0, variableArgs: !1 }, F: { id: WA, numArgs: 0, variableArgs: !1 }, 'f*': { id: jA, numArgs: 0, variableArgs: !1 }, B: { id: XA, numArgs: 0, variableArgs: !1 }, 'B*': { id: ZA, numArgs: 0, variableArgs: !1 }, b: { id: VA, numArgs: 0, variableArgs: !1 }, 'b*': { id: _A, numArgs: 0, variableArgs: !1 }, n: { id: zA, numArgs: 0, variableArgs: !1 }, W: { id: $A, numArgs: 0, variableArgs: !1 }, 'W*': { id: Ae, numArgs: 0, variableArgs: !1 }, BT: { id: ee, numArgs: 0, variableArgs: !1 }, ET: { id: te, numArgs: 0, variableArgs: !1 }, Tc: { id: ie, numArgs: 1, variableArgs: !1 }, Tw: { id: ae, numArgs: 1, variableArgs: !1 }, Tz: { id: re, numArgs: 1, variableArgs: !1 }, TL: { id: se, numArgs: 1, variableArgs: !1 }, Tf: { id: ne, numArgs: 2, variableArgs: !1 }, Tr: { id: oe, numArgs: 1, variableArgs: !1 }, Ts: { id: ge, numArgs: 1, variableArgs: !1 }, Td: { id: Ie, numArgs: 2, variableArgs: !1 }, TD: { id: ce, numArgs: 2, variableArgs: !1 }, Tm: { id: Ce, numArgs: 6, variableArgs: !1 }, 'T*': { id: he, numArgs: 0, variableArgs: !1 }, Tj: { id: le, numArgs: 1, variableArgs: !1 }, TJ: { id: Be, numArgs: 1, variableArgs: !1 }, "'": { id: Qe, numArgs: 1, variableArgs: !1 }, '"': { id: Ee, numArgs: 3, variableArgs: !1 }, d0: { id: ue, numArgs: 2, variableArgs: !1 }, d1: { id: de, numArgs: 6, variableArgs: !1 }, CS: { id: fe, numArgs: 1, variableArgs: !1 }, cs: { id: pe, numArgs: 1, variableArgs: !1 }, SC: { id: me, numArgs: 4, variableArgs: !0 }, SCN: { id: ye, numArgs: 33, variableArgs: !0 }, sc: { id: we, numArgs: 4, variableArgs: !0 }, scn: { id: be, numArgs: 33, variableArgs: !0 }, G: { id: De, numArgs: 1, variableArgs: !1 }, g: { id: Fe, numArgs: 1, variableArgs: !1 }, RG: { id: Se, numArgs: 3, variableArgs: !1 }, rg: { id: ke, numArgs: 3, variableArgs: !1 }, K: { id: Re, numArgs: 4, variableArgs: !1 }, k: { id: Ne, numArgs: 4, variableArgs: !1 }, sh: { id: Ge, numArgs: 1, variableArgs: !1 }, BI: { id: xe, numArgs: 0, variableArgs: !1 }, ID: { id: Ue, numArgs: 0, variableArgs: !1 }, EI: { id: Me, numArgs: 1, variableArgs: !1 }, Do: { id: Le, numArgs: 1, variableArgs: !1 }, MP: { id: He, numArgs: 1, variableArgs: !1 }, DP: { id: Je, numArgs: 2, variableArgs: !1 }, BMC: { id: Ye, numArgs: 1, variableArgs: !1 }, BDC: { id: ve, numArgs: 2, variableArgs: !1 }, EMC: { id: Te, numArgs: 0, variableArgs: !1 }, BX: { id: Ke, numArgs: 0, variableArgs: !1 }, EX: { id: qe, numArgs: 0, variableArgs: !1 }, BM: null, BD: null, true: null, fa: null, fal: null, fals: null, false: null, nu: null, nul: null, null: null, }), ); } static MAX_INVALID_PATH_OPS = 10; constructor(e, t, i = new StateManager()) { this.parser = new Parser({ lexer: new Lexer(e, EvaluatorPreprocessor.opMap), xref: t, }); this.stateManager = i; this.nonProcessedArgs = []; this._isPathOp = !1; this._numInvalidPathOPS = 0; } get savedStatesDepth() { return this.stateManager.stateStack.length; } read(e) { let t = e.args; for (;;) { const i = this.parser.getObj(); if (i instanceof Cmd) { const a = i.cmd, r = EvaluatorPreprocessor.opMap[a]; if (!r) { warn(`Unknown command "${a}".`); continue; } const s = r.id, n = r.numArgs; let o = null !== t ? t.length : 0; this._isPathOp || (this._numInvalidPathOPS = 0); this._isPathOp = s >= HA && s <= zA; if (r.variableArgs) o > n && info( `Command ${a}: expected [0, ${n}] args, but received ${o} args.`, ); else { if (o !== n) { const e = this.nonProcessedArgs; for (; o > n; ) { e.push(t.shift()); o--; } for (; o < n && 0 !== e.length; ) { null === t && (t = []); t.unshift(e.pop()); o++; } } if (o < n) { const e = `command ${a}: expected ${n} args, but received ${o} args.`; if ( this._isPathOp && ++this._numInvalidPathOPS > EvaluatorPreprocessor.MAX_INVALID_PATH_OPS ) throw new FormatError(`Invalid ${e}`); warn(`Skipping ${e}`); null !== t && (t.length = 0); continue; } } this.preprocessCommand(s, t); e.fn = s; e.args = t; return !0; } if (i === yt) return !1; if (null !== i) { null === t && (t = []); t.push(i); if (t.length > 33) throw new FormatError('Too many arguments'); } } } preprocessCommand(e, t) { switch (0 | e) { case UA: this.stateManager.save(); break; case MA: this.stateManager.restore(); break; case LA: this.stateManager.transform(t); } } } class DefaultAppearanceEvaluator extends EvaluatorPreprocessor { constructor(e) { super(new StringStream(e)); } parse() { const e = { fn: 0, args: [] }, t = { fontSize: 0, fontName: '', fontColor: new Uint8ClampedArray(3) }; try { for (;;) { e.args.length = 0; if (!this.read(e)) break; if (0 !== this.savedStatesDepth) continue; const { fn: i, args: a } = e; switch (0 | i) { case ne: const [e, i] = a; e instanceof Name && (t.fontName = e.name); 'number' == typeof i && i > 0 && (t.fontSize = i); break; case ke: ColorSpace.singletons.rgb.getRgbItem(a, 0, t.fontColor, 0); break; case Fe: ColorSpace.singletons.gray.getRgbItem(a, 0, t.fontColor, 0); break; case Ne: ColorSpace.singletons.cmyk.getRgbItem(a, 0, t.fontColor, 0); } } } catch (e) { warn(`parseDefaultAppearance - ignoring errors: "${e}".`); } return t; } } function parseDefaultAppearance(e) { return new DefaultAppearanceEvaluator(e).parse(); } class AppearanceStreamEvaluator extends EvaluatorPreprocessor { constructor(e, t, i) { super(e); this.stream = e; this.evaluatorOptions = t; this.xref = i; this.resources = e.dict?.get('Resources'); } parse() { const e = { fn: 0, args: [] }; let t = { scaleFactor: 1, fontSize: 0, fontName: '', fontColor: new Uint8ClampedArray(3), fillColorSpace: ColorSpace.singletons.gray, }, i = !1; const a = []; try { for (;;) { e.args.length = 0; if (i || !this.read(e)) break; const { fn: r, args: s } = e; switch (0 | r) { case UA: a.push({ scaleFactor: t.scaleFactor, fontSize: t.fontSize, fontName: t.fontName, fontColor: t.fontColor.slice(), fillColorSpace: t.fillColorSpace, }); break; case MA: t = a.pop() || t; break; case Ce: t.scaleFactor *= Math.hypot(s[0], s[1]); break; case ne: const [e, r] = s; e instanceof Name && (t.fontName = e.name); 'number' == typeof r && r > 0 && (t.fontSize = r * t.scaleFactor); break; case pe: t.fillColorSpace = ColorSpace.parse({ cs: s[0], xref: this.xref, resources: this.resources, pdfFunctionFactory: this._pdfFunctionFactory, localColorSpaceCache: this._localColorSpaceCache, }); break; case we: t.fillColorSpace.getRgbItem(s, 0, t.fontColor, 0); break; case ke: ColorSpace.singletons.rgb.getRgbItem(s, 0, t.fontColor, 0); break; case Fe: ColorSpace.singletons.gray.getRgbItem(s, 0, t.fontColor, 0); break; case Ne: ColorSpace.singletons.cmyk.getRgbItem(s, 0, t.fontColor, 0); break; case le: case Be: case Qe: case Ee: i = !0; } } } catch (e) { warn(`parseAppearanceStream - ignoring errors: "${e}".`); } this.stream.reset(); delete t.scaleFactor; delete t.fillColorSpace; return t; } get _localColorSpaceCache() { return shadow(this, '_localColorSpaceCache', new LocalColorSpaceCache()); } get _pdfFunctionFactory() { return shadow( this, '_pdfFunctionFactory', new PDFFunctionFactory({ xref: this.xref, isEvalSupported: this.evaluatorOptions.isEvalSupported, }), ); } } function getPdfColor(e, t) { if (e[0] === e[1] && e[1] === e[2]) { return `${numberToString(e[0] / 255)} ${t ? 'g' : 'G'}`; } return ( Array.from(e, (e) => numberToString(e / 255)).join(' ') + ' ' + (t ? 'rg' : 'RG') ); } class FakeUnicodeFont { constructor(e, t) { this.xref = e; this.widths = null; this.firstChar = 1 / 0; this.lastChar = -1 / 0; this.fontFamily = t; const i = new OffscreenCanvas(1, 1); this.ctxMeasure = i.getContext('2d', { willReadFrequently: !0 }); FakeUnicodeFont._fontNameId || (FakeUnicodeFont._fontNameId = 1); this.fontName = Name.get( `InvalidPDFjsFont_${t}_${FakeUnicodeFont._fontNameId++}`, ); } get fontDescriptorRef() { if (!FakeUnicodeFont._fontDescriptorRef) { const e = new Dict(this.xref); e.set('Type', Name.get('FontDescriptor')); e.set('FontName', this.fontName); e.set('FontFamily', 'MyriadPro Regular'); e.set('FontBBox', [0, 0, 0, 0]); e.set('FontStretch', Name.get('Normal')); e.set('FontWeight', 400); e.set('ItalicAngle', 0); FakeUnicodeFont._fontDescriptorRef = this.xref.getNewPersistentRef(e); } return FakeUnicodeFont._fontDescriptorRef; } get descendantFontRef() { const e = new Dict(this.xref); e.set('BaseFont', this.fontName); e.set('Type', Name.get('Font')); e.set('Subtype', Name.get('CIDFontType0')); e.set('CIDToGIDMap', Name.get('Identity')); e.set('FirstChar', this.firstChar); e.set('LastChar', this.lastChar); e.set('FontDescriptor', this.fontDescriptorRef); e.set('DW', 1e3); const t = [], i = [...this.widths.entries()].sort(); let a = null, r = null; for (const [e, s] of i) if (a) if (e === a + r.length) r.push(s); else { t.push(a, r); a = e; r = [s]; } else { a = e; r = [s]; } a && t.push(a, r); e.set('W', t); const s = new Dict(this.xref); s.set('Ordering', 'Identity'); s.set('Registry', 'Adobe'); s.set('Supplement', 0); e.set('CIDSystemInfo', s); return this.xref.getNewPersistentRef(e); } get baseFontRef() { const e = new Dict(this.xref); e.set('BaseFont', this.fontName); e.set('Type', Name.get('Font')); e.set('Subtype', Name.get('Type0')); e.set('Encoding', Name.get('Identity-H')); e.set('DescendantFonts', [this.descendantFontRef]); e.set('ToUnicode', Name.get('Identity-H')); return this.xref.getNewPersistentRef(e); } get resources() { const e = new Dict(this.xref), t = new Dict(this.xref); t.set(this.fontName.name, this.baseFontRef); e.set('Font', t); return e; } _createContext() { this.widths = new Map(); this.ctxMeasure.font = `1000px ${this.fontFamily}`; return this.ctxMeasure; } createFontResources(e) { const t = this._createContext(); for (const i of e.split(/\r\n?|\n/)) for (const e of i.split('')) { const i = e.charCodeAt(0); if (this.widths.has(i)) continue; const a = t.measureText(e), r = Math.ceil(a.width); this.widths.set(i, r); this.firstChar = Math.min(i, this.firstChar); this.lastChar = Math.max(i, this.lastChar); } return this.resources; } static getFirstPositionInfo(e, t, i) { const [a, r, o, g] = e; let c = o - a, C = g - r; t % 180 != 0 && ([c, C] = [C, c]); const h = s * i; return { coords: [0, C + n * i - h], bbox: [0, 0, c, C], matrix: 0 !== t ? getRotationMatrix(t, C, h) : void 0, }; } createAppearance(e, t, i, a, r, o) { const g = this._createContext(), c = []; let C = -1 / 0; for (const t of e.split(/\r\n?|\n/)) { c.push(t); const e = g.measureText(t).width; C = Math.max(C, e); for (const e of codePointIter(t)) { const t = String.fromCodePoint(e); let i = this.widths.get(e); if (void 0 === i) { const a = g.measureText(t); i = Math.ceil(a.width); this.widths.set(e, i); this.firstChar = Math.min(e, this.firstChar); this.lastChar = Math.max(e, this.lastChar); } } } C *= a / 1e3; const [h, l, Q, E] = t; let u = Q - h, d = E - l; i % 180 != 0 && ([u, d] = [d, u]); let f = 1; C > u && (f = u / C); let p = 1; const m = s * a, y = n * a, w = m * c.length; w > d && (p = d / w); const b = a * Math.min(f, p), D = [ 'q', `0 0 ${numberToString(u)} ${numberToString(d)} re W n`, 'BT', `1 0 0 1 0 ${numberToString(d + y)} Tm 0 Tc ${getPdfColor(r, !0)}`, `/${this.fontName.name} ${numberToString(b)} Tf`, ], { resources: S } = this; if (1 !== (o = 'number' == typeof o && o >= 0 && o <= 1 ? o : 1)) { D.push('/R0 gs'); const e = new Dict(this.xref), t = new Dict(this.xref); t.set('ca', o); t.set('CA', o); t.set('Type', Name.get('ExtGState')); e.set('R0', t); S.set('ExtGState', e); } const k = numberToString(m); for (const e of c) D.push(`0 -${k} Td <${stringToUTF16HexString(e)}> Tj`); D.push('ET', 'Q'); const R = D.join('\n'), N = new Dict(this.xref); N.set('Subtype', Name.get('Form')); N.set('Type', Name.get('XObject')); N.set('BBox', [0, 0, u, d]); N.set('Length', R.length); N.set('Resources', S); if (i) { const e = getRotationMatrix(i, u, d); N.set('Matrix', e); } const G = new StringStream(R); G.dict = N; return G; } } class NameOrNumberTree { constructor(e, t, i) { this.constructor === NameOrNumberTree && unreachable('Cannot initialize NameOrNumberTree.'); this.root = e; this.xref = t; this._type = i; } getAll() { const e = new Map(); if (!this.root) return e; const t = this.xref, i = new RefSet(); i.put(this.root); const a = [this.root]; for (; a.length > 0; ) { const r = t.fetchIfRef(a.shift()); if (!(r instanceof Dict)) continue; if (r.has('Kids')) { const e = r.get('Kids'); if (!Array.isArray(e)) continue; for (const t of e) { if (i.has(t)) throw new FormatError(`Duplicate entry in "${this._type}" tree.`); a.push(t); i.put(t); } continue; } const s = r.get(this._type); if (Array.isArray(s)) for (let i = 0, a = s.length; i < a; i += 2) e.set(t.fetchIfRef(s[i]), t.fetchIfRef(s[i + 1])); } return e; } get(e) { if (!this.root) return null; const t = this.xref; let i = t.fetchIfRef(this.root), a = 0; for (; i.has('Kids'); ) { if (++a > 10) { warn(`Search depth limit reached for "${this._type}" tree.`); return null; } const r = i.get('Kids'); if (!Array.isArray(r)) return null; let s = 0, n = r.length - 1; for (; s <= n; ) { const a = (s + n) >> 1, o = t.fetchIfRef(r[a]), g = o.get('Limits'); if (e < t.fetchIfRef(g[0])) n = a - 1; else { if (!(e > t.fetchIfRef(g[1]))) { i = o; break; } s = a + 1; } } if (s > n) return null; } const r = i.get(this._type); if (Array.isArray(r)) { let i = 0, a = r.length - 2; for (; i <= a; ) { const s = (i + a) >> 1, n = s + (1 & s), o = t.fetchIfRef(r[n]); if (e < o) a = n - 2; else { if (!(e > o)) return t.fetchIfRef(r[n + 1]); i = n + 2; } } } return null; } } class NameTree extends NameOrNumberTree { constructor(e, t) { super(e, t, 'Names'); } } class NumberTree extends NameOrNumberTree { constructor(e, t) { super(e, t, 'Nums'); } } function clearGlobalCaches() { !(function clearPatternCaches() { ba = Object.create(null); })(); !(function clearPrimitiveCaches() { wt = Object.create(null); bt = Object.create(null); Dt = Object.create(null); })(); !(function clearUnicodeCaches() { vi.clear(); })(); JpxImage.cleanup(); } function pickPlatformItem(e) { return e instanceof Dict ? e.has('UF') ? e.get('UF') : e.has('F') ? e.get('F') : e.has('Unix') ? e.get('Unix') : e.has('Mac') ? e.get('Mac') : e.has('DOS') ? e.get('DOS') : null : null; } class FileSpec { #S = !1; constructor(e, t, i = !1) { if (e instanceof Dict) { this.xref = t; this.root = e; e.has('FS') && (this.fs = e.get('FS')); e.has('RF') && warn('Related file specifications are not supported'); i || (e.has('EF') ? (this.#S = !0) : warn('Non-embedded file specifications are not supported')); } } get filename() { let e = ''; const t = pickPlatformItem(this.root); t && 'string' == typeof t && (e = stringToPDFString(t) .replaceAll('\\\\', '\\') .replaceAll('\\/', '/') .replaceAll('\\', '/')); return shadow(this, 'filename', e || 'unnamed'); } get content() { if (!this.#S) return null; this._contentRef ||= pickPlatformItem(this.root?.get('EF')); let e = null; if (this._contentRef) { const t = this.xref.fetchIfRef(this._contentRef); t instanceof BaseStream ? (e = t.getBytes()) : warn( 'Embedded file specification points to non-existing/invalid content', ); } else warn('Embedded file specification does not have any content'); return e; } get description() { let e = ''; const t = this.root?.get('Desc'); t && 'string' == typeof t && (e = stringToPDFString(t)); return shadow(this, 'description', e); } get serializable() { return { rawFilename: this.filename, filename: ((e = this.filename), e.substring(e.lastIndexOf('/') + 1)), content: this.content, description: this.description, }; var e; } } const xr = 0, Ur = -2, Mr = -3, Lr = -4, Hr = -5, Jr = -6, Yr = -9; function isWhitespace(e, t) { const i = e[t]; return ' ' === i || '\n' === i || '\r' === i || '\t' === i; } class XMLParserBase { _resolveEntities(e) { return e.replaceAll(/&([^;]+);/g, (e, t) => { if ('#x' === t.substring(0, 2)) return String.fromCodePoint(parseInt(t.substring(2), 16)); if ('#' === t.substring(0, 1)) return String.fromCodePoint(parseInt(t.substring(1), 10)); switch (t) { case 'lt': return '<'; case 'gt': return '>'; case 'amp': return '&'; case 'quot': return '"'; case 'apos': return "'"; } return this.onResolveEntity(t); }); } _parseContent(e, t) { const i = []; let a = t; function skipWs() { for (; a < e.length && isWhitespace(e, a); ) ++a; } for ( ; a < e.length && !isWhitespace(e, a) && '>' !== e[a] && '/' !== e[a]; ) ++a; const r = e.substring(t, a); skipWs(); for (; a < e.length && '>' !== e[a] && '/' !== e[a] && '?' !== e[a]; ) { skipWs(); let t = '', r = ''; for (; a < e.length && !isWhitespace(e, a) && '=' !== e[a]; ) { t += e[a]; ++a; } skipWs(); if ('=' !== e[a]) return null; ++a; skipWs(); const s = e[a]; if ('"' !== s && "'" !== s) return null; const n = e.indexOf(s, ++a); if (n < 0) return null; r = e.substring(a, n); i.push({ name: t, value: this._resolveEntities(r) }); a = n + 1; skipWs(); } return { name: r, attributes: i, parsed: a - t }; } _parseProcessingInstruction(e, t) { let i = t; for ( ; i < e.length && !isWhitespace(e, i) && '>' !== e[i] && '?' !== e[i] && '/' !== e[i]; ) ++i; const a = e.substring(t, i); !(function skipWs() { for (; i < e.length && isWhitespace(e, i); ) ++i; })(); const r = i; for (; i < e.length && ('?' !== e[i] || '>' !== e[i + 1]); ) ++i; return { name: a, value: e.substring(r, i), parsed: i - t }; } parseXml(e) { let t = 0; for (; t < e.length; ) { let i = t; if ('<' === e[t]) { ++i; let t; switch (e[i]) { case '/': ++i; t = e.indexOf('>', i); if (t < 0) { this.onError(Yr); return; } this.onEndElement(e.substring(i, t)); i = t + 1; break; case '?': ++i; const a = this._parseProcessingInstruction(e, i); if ('?>' !== e.substring(i + a.parsed, i + a.parsed + 2)) { this.onError(Mr); return; } this.onPi(a.name, a.value); i += a.parsed + 2; break; case '!': if ('--' === e.substring(i + 1, i + 3)) { t = e.indexOf('--\x3e', i + 3); if (t < 0) { this.onError(Hr); return; } this.onComment(e.substring(i + 3, t)); i = t + 3; } else if ('[CDATA[' === e.substring(i + 1, i + 8)) { t = e.indexOf(']]>', i + 8); if (t < 0) { this.onError(Ur); return; } this.onCdata(e.substring(i + 8, t)); i = t + 3; } else { if ('DOCTYPE' !== e.substring(i + 1, i + 8)) { this.onError(Jr); return; } { const a = e.indexOf('[', i + 8); let r = !1; t = e.indexOf('>', i + 8); if (t < 0) { this.onError(Lr); return; } if (a > 0 && t > a) { t = e.indexOf(']>', i + 8); if (t < 0) { this.onError(Lr); return; } r = !0; } const s = e.substring(i + 8, t + (r ? 1 : 0)); this.onDoctype(s); i = t + (r ? 2 : 1); } } break; default: const r = this._parseContent(e, i); if (null === r) { this.onError(Jr); return; } let s = !1; if ('/>' === e.substring(i + r.parsed, i + r.parsed + 2)) s = !0; else if ('>' !== e.substring(i + r.parsed, i + r.parsed + 1)) { this.onError(Yr); return; } this.onBeginElement(r.name, r.attributes, s); i += r.parsed + (s ? 2 : 1); } } else { for (; i < e.length && '<' !== e[i]; ) i++; const a = e.substring(t, i); this.onText(this._resolveEntities(a)); } t = i; } } onResolveEntity(e) { return `&${e};`; } onPi(e, t) {} onComment(e) {} onCdata(e) {} onDoctype(e) {} onText(e) {} onBeginElement(e, t, i) {} onEndElement(e) {} onError(e) {} } class SimpleDOMNode { constructor(e, t) { this.nodeName = e; this.nodeValue = t; Object.defineProperty(this, 'parentNode', { value: null, writable: !0 }); } get firstChild() { return this.childNodes?.[0]; } get nextSibling() { const e = this.parentNode.childNodes; if (!e) return; const t = e.indexOf(this); return -1 !== t ? e[t + 1] : void 0; } get textContent() { return this.childNodes ? this.childNodes .map(function (e) { return e.textContent; }) .join('') : this.nodeValue || ''; } get children() { return this.childNodes || []; } hasChildNodes() { return this.childNodes?.length > 0; } searchNode(e, t) { if (t >= e.length) return this; const i = e[t]; if (i.name.startsWith('#') && t < e.length - 1) return this.searchNode(e, t + 1); const a = []; let r = this; for (;;) { if (i.name === r.nodeName) { if (0 !== i.pos) { if (0 === a.length) return null; { const [s] = a.pop(); let n = 0; for (const a of s.childNodes) if (i.name === a.nodeName) { if (n === i.pos) return a.searchNode(e, t + 1); n++; } return r.searchNode(e, t + 1); } } { const i = r.searchNode(e, t + 1); if (null !== i) return i; } } if (r.childNodes?.length > 0) { a.push([r, 0]); r = r.childNodes[0]; } else { if (0 === a.length) return null; for (; 0 !== a.length; ) { const [e, t] = a.pop(), i = t + 1; if (i < e.childNodes.length) { a.push([e, i]); r = e.childNodes[i]; break; } } if (0 === a.length) return null; } } } dump(e) { if ('#text' !== this.nodeName) { e.push(`<${this.nodeName}`); if (this.attributes) for (const t of this.attributes) e.push(` ${t.name}="${encodeToXmlString(t.value)}"`); if (this.hasChildNodes()) { e.push('>'); for (const t of this.childNodes) t.dump(e); e.push(``); } else this.nodeValue ? e.push(`>${encodeToXmlString(this.nodeValue)}`) : e.push('/>'); } else e.push(encodeToXmlString(this.nodeValue)); } } class SimpleXMLParser extends XMLParserBase { constructor({ hasAttributes: e = !1, lowerCaseName: t = !1 }) { super(); this._currentFragment = null; this._stack = null; this._errorCode = xr; this._hasAttributes = e; this._lowerCaseName = t; } parseFromString(e) { this._currentFragment = []; this._stack = []; this._errorCode = xr; this.parseXml(e); if (this._errorCode !== xr) return; const [t] = this._currentFragment; return t ? { documentElement: t } : void 0; } onText(e) { if ( (function isWhitespaceString(e) { for (let t = 0, i = e.length; t < i; t++) if (!isWhitespace(e, t)) return !1; return !0; })(e) ) return; const t = new SimpleDOMNode('#text', e); this._currentFragment.push(t); } onCdata(e) { const t = new SimpleDOMNode('#text', e); this._currentFragment.push(t); } onBeginElement(e, t, i) { this._lowerCaseName && (e = e.toLowerCase()); const a = new SimpleDOMNode(e); a.childNodes = []; this._hasAttributes && (a.attributes = t); this._currentFragment.push(a); if (!i) { this._stack.push(this._currentFragment); this._currentFragment = a.childNodes; } } onEndElement(e) { this._currentFragment = this._stack.pop() || []; const t = this._currentFragment.at(-1); if (!t) return null; for (const e of t.childNodes) e.parentNode = t; return t; } onError(e) { this._errorCode = e; } } class MetadataParser { constructor(e) { e = this._repair(e); const t = new SimpleXMLParser({ lowerCaseName: !0 }).parseFromString(e); this._metadataMap = new Map(); this._data = e; t && this._parse(t); } _repair(e) { return e .replace(/^[^<]+/, '') .replaceAll(/>\\376\\377([^<]+)/g, function (e, t) { const i = t .replaceAll(/\\([0-3])([0-7])([0-7])/g, function (e, t, i, a) { return String.fromCharCode(64 * t + 8 * i + 1 * a); }) .replaceAll(/&(amp|apos|gt|lt|quot);/g, function (e, t) { switch (t) { case 'amp': return '&'; case 'apos': return "'"; case 'gt': return '>'; case 'lt': return '<'; case 'quot': return '"'; } throw new Error(`_repair: ${t} isn't defined.`); }), a = ['>']; for (let e = 0, t = i.length; e < t; e += 2) { const t = 256 * i.charCodeAt(e) + i.charCodeAt(e + 1); t >= 32 && t < 127 && 60 !== t && 62 !== t && 38 !== t ? a.push(String.fromCharCode(t)) : a.push('&#x' + (65536 + t).toString(16).substring(1) + ';'); } return a.join(''); }); } _getSequence(e) { const t = e.nodeName; return 'rdf:bag' !== t && 'rdf:seq' !== t && 'rdf:alt' !== t ? null : e.childNodes.filter((e) => 'rdf:li' === e.nodeName); } _parseArray(e) { if (!e.hasChildNodes()) return; const [t] = e.childNodes, i = this._getSequence(t) || []; this._metadataMap.set( e.nodeName, i.map((e) => e.textContent.trim()), ); } _parse(e) { let t = e.documentElement; if ('rdf:rdf' !== t.nodeName) { t = t.firstChild; for (; t && 'rdf:rdf' !== t.nodeName; ) t = t.nextSibling; } if (t && 'rdf:rdf' === t.nodeName && t.hasChildNodes()) for (const e of t.childNodes) if ('rdf:description' === e.nodeName) for (const t of e.childNodes) { const e = t.nodeName; switch (e) { case '#text': continue; case 'dc:creator': case 'dc:subject': this._parseArray(t); continue; } this._metadataMap.set(e, t.textContent.trim()); } } get serializable() { return { parsedData: this._metadataMap, rawData: this._data }; } } class DecryptStream extends DecodeStream { constructor(e, t, i) { super(t); this.str = e; this.dict = e.dict; this.decrypt = i; this.nextChunk = null; this.initialized = !1; } readBlock() { let e; if (this.initialized) e = this.nextChunk; else { e = this.str.getBytes(512); this.initialized = !0; } if (!e || 0 === e.length) { this.eof = !0; return; } this.nextChunk = this.str.getBytes(512); const t = this.nextChunk?.length > 0; e = (0, this.decrypt)(e, !t); const i = this.bufferLength, a = i + e.length; this.ensureBuffer(a).set(e, i); this.bufferLength = a; } } class ARCFourCipher { constructor(e) { this.a = 0; this.b = 0; const t = new Uint8Array(256), i = e.length; for (let e = 0; e < 256; ++e) t[e] = e; for (let a = 0, r = 0; a < 256; ++a) { const s = t[a]; r = (r + s + e[a % i]) & 255; t[a] = t[r]; t[r] = s; } this.s = t; } encryptBlock(e) { let t = this.a, i = this.b; const a = this.s, r = e.length, s = new Uint8Array(r); for (let n = 0; n < r; ++n) { t = (t + 1) & 255; const r = a[t]; i = (i + r) & 255; const o = a[i]; a[t] = o; a[i] = r; s[n] = e[n] ^ a[(r + o) & 255]; } this.a = t; this.b = i; return s; } decryptBlock(e) { return this.encryptBlock(e); } encrypt(e) { return this.encryptBlock(e); } } const vr = (function calculateMD5Closure() { const e = new Uint8Array([ 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, ]), t = new Int32Array([ -680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551, ]); return function hash(i, a, r) { let s = 1732584193, n = -271733879, o = -1732584194, g = 271733878; const c = (r + 72) & -64, C = new Uint8Array(c); let h, l; for (h = 0; h < r; ++h) C[h] = i[a++]; C[h++] = 128; const Q = c - 8; for (; h < Q; ) C[h++] = 0; C[h++] = (r << 3) & 255; C[h++] = (r >> 5) & 255; C[h++] = (r >> 13) & 255; C[h++] = (r >> 21) & 255; C[h++] = (r >>> 29) & 255; C[h++] = 0; C[h++] = 0; C[h++] = 0; const E = new Int32Array(16); for (h = 0; h < c; ) { for (l = 0; l < 16; ++l, h += 4) E[l] = C[h] | (C[h + 1] << 8) | (C[h + 2] << 16) | (C[h + 3] << 24); let i, a, r = s, c = n, Q = o, u = g; for (l = 0; l < 64; ++l) { if (l < 16) { i = (c & Q) | (~c & u); a = l; } else if (l < 32) { i = (u & c) | (~u & Q); a = (5 * l + 1) & 15; } else if (l < 48) { i = c ^ Q ^ u; a = (3 * l + 5) & 15; } else { i = Q ^ (c | ~u); a = (7 * l) & 15; } const s = u, n = (r + i + t[l] + E[a]) | 0, o = e[l]; u = Q; Q = c; c = (c + ((n << o) | (n >>> (32 - o)))) | 0; r = s; } s = (s + r) | 0; n = (n + c) | 0; o = (o + Q) | 0; g = (g + u) | 0; } return new Uint8Array([ 255 & s, (s >> 8) & 255, (s >> 16) & 255, (s >>> 24) & 255, 255 & n, (n >> 8) & 255, (n >> 16) & 255, (n >>> 24) & 255, 255 & o, (o >> 8) & 255, (o >> 16) & 255, (o >>> 24) & 255, 255 & g, (g >> 8) & 255, (g >> 16) & 255, (g >>> 24) & 255, ]); }; })(); class Word64 { constructor(e, t) { this.high = 0 | e; this.low = 0 | t; } and(e) { this.high &= e.high; this.low &= e.low; } xor(e) { this.high ^= e.high; this.low ^= e.low; } or(e) { this.high |= e.high; this.low |= e.low; } shiftRight(e) { if (e >= 32) { this.low = (this.high >>> (e - 32)) | 0; this.high = 0; } else { this.low = (this.low >>> e) | (this.high << (32 - e)); this.high = (this.high >>> e) | 0; } } shiftLeft(e) { if (e >= 32) { this.high = this.low << (e - 32); this.low = 0; } else { this.high = (this.high << e) | (this.low >>> (32 - e)); this.low <<= e; } } rotateRight(e) { let t, i; if (32 & e) { i = this.low; t = this.high; } else { t = this.low; i = this.high; } e &= 31; this.low = (t >>> e) | (i << (32 - e)); this.high = (i >>> e) | (t << (32 - e)); } not() { this.high = ~this.high; this.low = ~this.low; } add(e) { const t = (this.low >>> 0) + (e.low >>> 0); let i = (this.high >>> 0) + (e.high >>> 0); t > 4294967295 && (i += 1); this.low = 0 | t; this.high = 0 | i; } copyTo(e, t) { e[t] = (this.high >>> 24) & 255; e[t + 1] = (this.high >> 16) & 255; e[t + 2] = (this.high >> 8) & 255; e[t + 3] = 255 & this.high; e[t + 4] = (this.low >>> 24) & 255; e[t + 5] = (this.low >> 16) & 255; e[t + 6] = (this.low >> 8) & 255; e[t + 7] = 255 & this.low; } assign(e) { this.high = e.high; this.low = e.low; } } const Tr = (function calculateSHA256Closure() { function rotr(e, t) { return (e >>> t) | (e << (32 - t)); } function ch(e, t, i) { return (e & t) ^ (~e & i); } function maj(e, t, i) { return (e & t) ^ (e & i) ^ (t & i); } function sigma(e) { return rotr(e, 2) ^ rotr(e, 13) ^ rotr(e, 22); } function sigmaPrime(e) { return rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25); } function littleSigma(e) { return rotr(e, 7) ^ rotr(e, 18) ^ (e >>> 3); } const e = [ 1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298, ]; return function hash(t, i, a) { let r = 1779033703, s = 3144134277, n = 1013904242, o = 2773480762, g = 1359893119, c = 2600822924, C = 528734635, h = 1541459225; const l = 64 * Math.ceil((a + 9) / 64), Q = new Uint8Array(l); let E, u; for (E = 0; E < a; ++E) Q[E] = t[i++]; Q[E++] = 128; const d = l - 8; for (; E < d; ) Q[E++] = 0; Q[E++] = 0; Q[E++] = 0; Q[E++] = 0; Q[E++] = (a >>> 29) & 255; Q[E++] = (a >> 21) & 255; Q[E++] = (a >> 13) & 255; Q[E++] = (a >> 5) & 255; Q[E++] = (a << 3) & 255; const f = new Uint32Array(64); for (E = 0; E < l; ) { for (u = 0; u < 16; ++u) { f[u] = (Q[E] << 24) | (Q[E + 1] << 16) | (Q[E + 2] << 8) | Q[E + 3]; E += 4; } for (u = 16; u < 64; ++u) f[u] = ((rotr((p = f[u - 2]), 17) ^ rotr(p, 19) ^ (p >>> 10)) + f[u - 7] + littleSigma(f[u - 15]) + f[u - 16]) | 0; let t, i, a = r, l = s, d = n, m = o, y = g, w = c, b = C, D = h; for (u = 0; u < 64; ++u) { t = D + sigmaPrime(y) + ch(y, w, b) + e[u] + f[u]; i = sigma(a) + maj(a, l, d); D = b; b = w; w = y; y = (m + t) | 0; m = d; d = l; l = a; a = (t + i) | 0; } r = (r + a) | 0; s = (s + l) | 0; n = (n + d) | 0; o = (o + m) | 0; g = (g + y) | 0; c = (c + w) | 0; C = (C + b) | 0; h = (h + D) | 0; } var p; return new Uint8Array([ (r >> 24) & 255, (r >> 16) & 255, (r >> 8) & 255, 255 & r, (s >> 24) & 255, (s >> 16) & 255, (s >> 8) & 255, 255 & s, (n >> 24) & 255, (n >> 16) & 255, (n >> 8) & 255, 255 & n, (o >> 24) & 255, (o >> 16) & 255, (o >> 8) & 255, 255 & o, (g >> 24) & 255, (g >> 16) & 255, (g >> 8) & 255, 255 & g, (c >> 24) & 255, (c >> 16) & 255, (c >> 8) & 255, 255 & c, (C >> 24) & 255, (C >> 16) & 255, (C >> 8) & 255, 255 & C, (h >> 24) & 255, (h >> 16) & 255, (h >> 8) & 255, 255 & h, ]); }; })(), Kr = (function calculateSHA512Closure() { function ch(e, t, i, a, r) { e.assign(t); e.and(i); r.assign(t); r.not(); r.and(a); e.xor(r); } function maj(e, t, i, a, r) { e.assign(t); e.and(i); r.assign(t); r.and(a); e.xor(r); r.assign(i); r.and(a); e.xor(r); } function sigma(e, t, i) { e.assign(t); e.rotateRight(28); i.assign(t); i.rotateRight(34); e.xor(i); i.assign(t); i.rotateRight(39); e.xor(i); } function sigmaPrime(e, t, i) { e.assign(t); e.rotateRight(14); i.assign(t); i.rotateRight(18); e.xor(i); i.assign(t); i.rotateRight(41); e.xor(i); } function littleSigma(e, t, i) { e.assign(t); e.rotateRight(1); i.assign(t); i.rotateRight(8); e.xor(i); i.assign(t); i.shiftRight(7); e.xor(i); } function littleSigmaPrime(e, t, i) { e.assign(t); e.rotateRight(19); i.assign(t); i.rotateRight(61); e.xor(i); i.assign(t); i.shiftRight(6); e.xor(i); } const e = [ new Word64(1116352408, 3609767458), new Word64(1899447441, 602891725), new Word64(3049323471, 3964484399), new Word64(3921009573, 2173295548), new Word64(961987163, 4081628472), new Word64(1508970993, 3053834265), new Word64(2453635748, 2937671579), new Word64(2870763221, 3664609560), new Word64(3624381080, 2734883394), new Word64(310598401, 1164996542), new Word64(607225278, 1323610764), new Word64(1426881987, 3590304994), new Word64(1925078388, 4068182383), new Word64(2162078206, 991336113), new Word64(2614888103, 633803317), new Word64(3248222580, 3479774868), new Word64(3835390401, 2666613458), new Word64(4022224774, 944711139), new Word64(264347078, 2341262773), new Word64(604807628, 2007800933), new Word64(770255983, 1495990901), new Word64(1249150122, 1856431235), new Word64(1555081692, 3175218132), new Word64(1996064986, 2198950837), new Word64(2554220882, 3999719339), new Word64(2821834349, 766784016), new Word64(2952996808, 2566594879), new Word64(3210313671, 3203337956), new Word64(3336571891, 1034457026), new Word64(3584528711, 2466948901), new Word64(113926993, 3758326383), new Word64(338241895, 168717936), new Word64(666307205, 1188179964), new Word64(773529912, 1546045734), new Word64(1294757372, 1522805485), new Word64(1396182291, 2643833823), new Word64(1695183700, 2343527390), new Word64(1986661051, 1014477480), new Word64(2177026350, 1206759142), new Word64(2456956037, 344077627), new Word64(2730485921, 1290863460), new Word64(2820302411, 3158454273), new Word64(3259730800, 3505952657), new Word64(3345764771, 106217008), new Word64(3516065817, 3606008344), new Word64(3600352804, 1432725776), new Word64(4094571909, 1467031594), new Word64(275423344, 851169720), new Word64(430227734, 3100823752), new Word64(506948616, 1363258195), new Word64(659060556, 3750685593), new Word64(883997877, 3785050280), new Word64(958139571, 3318307427), new Word64(1322822218, 3812723403), new Word64(1537002063, 2003034995), new Word64(1747873779, 3602036899), new Word64(1955562222, 1575990012), new Word64(2024104815, 1125592928), new Word64(2227730452, 2716904306), new Word64(2361852424, 442776044), new Word64(2428436474, 593698344), new Word64(2756734187, 3733110249), new Word64(3204031479, 2999351573), new Word64(3329325298, 3815920427), new Word64(3391569614, 3928383900), new Word64(3515267271, 566280711), new Word64(3940187606, 3454069534), new Word64(4118630271, 4000239992), new Word64(116418474, 1914138554), new Word64(174292421, 2731055270), new Word64(289380356, 3203993006), new Word64(460393269, 320620315), new Word64(685471733, 587496836), new Word64(852142971, 1086792851), new Word64(1017036298, 365543100), new Word64(1126000580, 2618297676), new Word64(1288033470, 3409855158), new Word64(1501505948, 4234509866), new Word64(1607167915, 987167468), new Word64(1816402316, 1246189591), ]; return function hash(t, i, a, r = !1) { let s, n, o, g, c, C, h, l; if (r) { s = new Word64(3418070365, 3238371032); n = new Word64(1654270250, 914150663); o = new Word64(2438529370, 812702999); g = new Word64(355462360, 4144912697); c = new Word64(1731405415, 4290775857); C = new Word64(2394180231, 1750603025); h = new Word64(3675008525, 1694076839); l = new Word64(1203062813, 3204075428); } else { s = new Word64(1779033703, 4089235720); n = new Word64(3144134277, 2227873595); o = new Word64(1013904242, 4271175723); g = new Word64(2773480762, 1595750129); c = new Word64(1359893119, 2917565137); C = new Word64(2600822924, 725511199); h = new Word64(528734635, 4215389547); l = new Word64(1541459225, 327033209); } const Q = 128 * Math.ceil((a + 17) / 128), E = new Uint8Array(Q); let u, d; for (u = 0; u < a; ++u) E[u] = t[i++]; E[u++] = 128; const f = Q - 16; for (; u < f; ) E[u++] = 0; E[u++] = 0; E[u++] = 0; E[u++] = 0; E[u++] = 0; E[u++] = 0; E[u++] = 0; E[u++] = 0; E[u++] = 0; E[u++] = 0; E[u++] = 0; E[u++] = 0; E[u++] = (a >>> 29) & 255; E[u++] = (a >> 21) & 255; E[u++] = (a >> 13) & 255; E[u++] = (a >> 5) & 255; E[u++] = (a << 3) & 255; const p = new Array(80); for (u = 0; u < 80; u++) p[u] = new Word64(0, 0); let m = new Word64(0, 0), y = new Word64(0, 0), w = new Word64(0, 0), b = new Word64(0, 0), D = new Word64(0, 0), S = new Word64(0, 0), k = new Word64(0, 0), R = new Word64(0, 0); const N = new Word64(0, 0), G = new Word64(0, 0), x = new Word64(0, 0), U = new Word64(0, 0); let M, L; for (u = 0; u < Q; ) { for (d = 0; d < 16; ++d) { p[d].high = (E[u] << 24) | (E[u + 1] << 16) | (E[u + 2] << 8) | E[u + 3]; p[d].low = (E[u + 4] << 24) | (E[u + 5] << 16) | (E[u + 6] << 8) | E[u + 7]; u += 8; } for (d = 16; d < 80; ++d) { M = p[d]; littleSigmaPrime(M, p[d - 2], U); M.add(p[d - 7]); littleSigma(x, p[d - 15], U); M.add(x); M.add(p[d - 16]); } m.assign(s); y.assign(n); w.assign(o); b.assign(g); D.assign(c); S.assign(C); k.assign(h); R.assign(l); for (d = 0; d < 80; ++d) { N.assign(R); sigmaPrime(x, D, U); N.add(x); ch(x, D, S, k, U); N.add(x); N.add(e[d]); N.add(p[d]); sigma(G, m, U); maj(x, m, y, w, U); G.add(x); M = R; R = k; k = S; S = D; b.add(N); D = b; b = w; w = y; y = m; M.assign(N); M.add(G); m = M; } s.add(m); n.add(y); o.add(w); g.add(b); c.add(D); C.add(S); h.add(k); l.add(R); } if (r) { L = new Uint8Array(48); s.copyTo(L, 0); n.copyTo(L, 8); o.copyTo(L, 16); g.copyTo(L, 24); c.copyTo(L, 32); C.copyTo(L, 40); } else { L = new Uint8Array(64); s.copyTo(L, 0); n.copyTo(L, 8); o.copyTo(L, 16); g.copyTo(L, 24); c.copyTo(L, 32); C.copyTo(L, 40); h.copyTo(L, 48); l.copyTo(L, 56); } return L; }; })(); class NullCipher { decryptBlock(e) { return e; } encrypt(e) { return e; } } class AESBaseCipher { constructor() { this.constructor === AESBaseCipher && unreachable('Cannot initialize AESBaseCipher.'); this._s = new Uint8Array([ 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22, ]); this._inv_s = new Uint8Array([ 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125, ]); this._mix = new Uint32Array([ 0, 235474187, 470948374, 303765277, 941896748, 908933415, 607530554, 708780849, 1883793496, 2118214995, 1817866830, 1649639237, 1215061108, 1181045119, 1417561698, 1517767529, 3767586992, 4003061179, 4236429990, 4069246893, 3635733660, 3602770327, 3299278474, 3400528769, 2430122216, 2664543715, 2362090238, 2193862645, 2835123396, 2801107407, 3035535058, 3135740889, 3678124923, 3576870512, 3341394285, 3374361702, 3810496343, 3977675356, 4279080257, 4043610186, 2876494627, 2776292904, 3076639029, 3110650942, 2472011535, 2640243204, 2403728665, 2169303058, 1001089995, 899835584, 666464733, 699432150, 59727847, 226906860, 530400753, 294930682, 1273168787, 1172967064, 1475418501, 1509430414, 1942435775, 2110667444, 1876241833, 1641816226, 2910219766, 2743034109, 2976151520, 3211623147, 2505202138, 2606453969, 2302690252, 2269728455, 3711829422, 3543599269, 3240894392, 3475313331, 3843699074, 3943906441, 4178062228, 4144047775, 1306967366, 1139781709, 1374988112, 1610459739, 1975683434, 2076935265, 1775276924, 1742315127, 1034867998, 866637845, 566021896, 800440835, 92987698, 193195065, 429456164, 395441711, 1984812685, 2017778566, 1784663195, 1683407248, 1315562145, 1080094634, 1383856311, 1551037884, 101039829, 135050206, 437757123, 337553864, 1042385657, 807962610, 573804783, 742039012, 2531067453, 2564033334, 2328828971, 2227573024, 2935566865, 2700099354, 3001755655, 3168937228, 3868552805, 3902563182, 4203181171, 4102977912, 3736164937, 3501741890, 3265478751, 3433712980, 1106041591, 1340463100, 1576976609, 1408749034, 2043211483, 2009195472, 1708848333, 1809054150, 832877231, 1068351396, 766945465, 599762354, 159417987, 126454664, 361929877, 463180190, 2709260871, 2943682380, 3178106961, 3009879386, 2572697195, 2538681184, 2236228733, 2336434550, 3509871135, 3745345300, 3441850377, 3274667266, 3910161971, 3877198648, 4110568485, 4211818798, 2597806476, 2497604743, 2261089178, 2295101073, 2733856160, 2902087851, 3202437046, 2968011453, 3936291284, 3835036895, 4136440770, 4169408201, 3535486456, 3702665459, 3467192302, 3231722213, 2051518780, 1951317047, 1716890410, 1750902305, 1113818384, 1282050075, 1584504582, 1350078989, 168810852, 67556463, 371049330, 404016761, 841739592, 1008918595, 775550814, 540080725, 3969562369, 3801332234, 4035489047, 4269907996, 3569255213, 3669462566, 3366754619, 3332740144, 2631065433, 2463879762, 2160117071, 2395588676, 2767645557, 2868897406, 3102011747, 3069049960, 202008497, 33778362, 270040487, 504459436, 875451293, 975658646, 675039627, 641025152, 2084704233, 1917518562, 1615861247, 1851332852, 1147550661, 1248802510, 1484005843, 1451044056, 933301370, 967311729, 733156972, 632953703, 260388950, 25965917, 328671808, 496906059, 1206477858, 1239443753, 1543208500, 1441952575, 2144161806, 1908694277, 1675577880, 1842759443, 3610369226, 3644379585, 3408119516, 3307916247, 4011190502, 3776767469, 4077384432, 4245618683, 2809771154, 2842737049, 3144396420, 3043140495, 2673705150, 2438237621, 2203032232, 2370213795, ]); this._mixCol = new Uint8Array(256); for (let e = 0; e < 256; e++) this._mixCol[e] = e < 128 ? e << 1 : (e << 1) ^ 27; this.buffer = new Uint8Array(16); this.bufferPosition = 0; } _expandKey(e) { unreachable('Cannot call `_expandKey` on the base class'); } _decrypt(e, t) { let i, a, r; const s = new Uint8Array(16); s.set(e); for (let e = 0, i = this._keySize; e < 16; ++e, ++i) s[e] ^= t[i]; for (let e = this._cyclesOfRepetition - 1; e >= 1; --e) { i = s[13]; s[13] = s[9]; s[9] = s[5]; s[5] = s[1]; s[1] = i; i = s[14]; a = s[10]; s[14] = s[6]; s[10] = s[2]; s[6] = i; s[2] = a; i = s[15]; a = s[11]; r = s[7]; s[15] = s[3]; s[11] = i; s[7] = a; s[3] = r; for (let e = 0; e < 16; ++e) s[e] = this._inv_s[s[e]]; for (let i = 0, a = 16 * e; i < 16; ++i, ++a) s[i] ^= t[a]; for (let e = 0; e < 16; e += 4) { const t = this._mix[s[e]], a = this._mix[s[e + 1]], r = this._mix[s[e + 2]], n = this._mix[s[e + 3]]; i = t ^ (a >>> 8) ^ (a << 24) ^ (r >>> 16) ^ (r << 16) ^ (n >>> 24) ^ (n << 8); s[e] = (i >>> 24) & 255; s[e + 1] = (i >> 16) & 255; s[e + 2] = (i >> 8) & 255; s[e + 3] = 255 & i; } } i = s[13]; s[13] = s[9]; s[9] = s[5]; s[5] = s[1]; s[1] = i; i = s[14]; a = s[10]; s[14] = s[6]; s[10] = s[2]; s[6] = i; s[2] = a; i = s[15]; a = s[11]; r = s[7]; s[15] = s[3]; s[11] = i; s[7] = a; s[3] = r; for (let e = 0; e < 16; ++e) { s[e] = this._inv_s[s[e]]; s[e] ^= t[e]; } return s; } _encrypt(e, t) { const i = this._s; let a, r, s; const n = new Uint8Array(16); n.set(e); for (let e = 0; e < 16; ++e) n[e] ^= t[e]; for (let e = 1; e < this._cyclesOfRepetition; e++) { for (let e = 0; e < 16; ++e) n[e] = i[n[e]]; s = n[1]; n[1] = n[5]; n[5] = n[9]; n[9] = n[13]; n[13] = s; s = n[2]; r = n[6]; n[2] = n[10]; n[6] = n[14]; n[10] = s; n[14] = r; s = n[3]; r = n[7]; a = n[11]; n[3] = n[15]; n[7] = s; n[11] = r; n[15] = a; for (let e = 0; e < 16; e += 4) { const t = n[e + 0], i = n[e + 1], r = n[e + 2], s = n[e + 3]; a = t ^ i ^ r ^ s; n[e + 0] ^= a ^ this._mixCol[t ^ i]; n[e + 1] ^= a ^ this._mixCol[i ^ r]; n[e + 2] ^= a ^ this._mixCol[r ^ s]; n[e + 3] ^= a ^ this._mixCol[s ^ t]; } for (let i = 0, a = 16 * e; i < 16; ++i, ++a) n[i] ^= t[a]; } for (let e = 0; e < 16; ++e) n[e] = i[n[e]]; s = n[1]; n[1] = n[5]; n[5] = n[9]; n[9] = n[13]; n[13] = s; s = n[2]; r = n[6]; n[2] = n[10]; n[6] = n[14]; n[10] = s; n[14] = r; s = n[3]; r = n[7]; a = n[11]; n[3] = n[15]; n[7] = s; n[11] = r; n[15] = a; for (let e = 0, i = this._keySize; e < 16; ++e, ++i) n[e] ^= t[i]; return n; } _decryptBlock2(e, t) { const i = e.length; let a = this.buffer, r = this.bufferPosition; const s = []; let n = this.iv; for (let t = 0; t < i; ++t) { a[r] = e[t]; ++r; if (r < 16) continue; const i = this._decrypt(a, this._key); for (let e = 0; e < 16; ++e) i[e] ^= n[e]; n = a; s.push(i); a = new Uint8Array(16); r = 0; } this.buffer = a; this.bufferLength = r; this.iv = n; if (0 === s.length) return new Uint8Array(0); let o = 16 * s.length; if (t) { const e = s.at(-1); let t = e[15]; if (t <= 16) { for (let i = 15, a = 16 - t; i >= a; --i) if (e[i] !== t) { t = 0; break; } o -= t; s[s.length - 1] = e.subarray(0, 16 - t); } } const g = new Uint8Array(o); for (let e = 0, t = 0, i = s.length; e < i; ++e, t += 16) g.set(s[e], t); return g; } decryptBlock(e, t, i = null) { const a = e.length, r = this.buffer; let s = this.bufferPosition; if (i) this.iv = i; else { for (let t = 0; s < 16 && t < a; ++t, ++s) r[s] = e[t]; if (s < 16) { this.bufferLength = s; return new Uint8Array(0); } this.iv = r; e = e.subarray(16); } this.buffer = new Uint8Array(16); this.bufferLength = 0; this.decryptBlock = this._decryptBlock2; return this.decryptBlock(e, t); } encrypt(e, t) { const i = e.length; let a = this.buffer, r = this.bufferPosition; const s = []; t || (t = new Uint8Array(16)); for (let n = 0; n < i; ++n) { a[r] = e[n]; ++r; if (r < 16) continue; for (let e = 0; e < 16; ++e) a[e] ^= t[e]; const i = this._encrypt(a, this._key); t = i; s.push(i); a = new Uint8Array(16); r = 0; } this.buffer = a; this.bufferLength = r; this.iv = t; if (0 === s.length) return new Uint8Array(0); const n = 16 * s.length, o = new Uint8Array(n); for (let e = 0, t = 0, i = s.length; e < i; ++e, t += 16) o.set(s[e], t); return o; } } class AES128Cipher extends AESBaseCipher { constructor(e) { super(); this._cyclesOfRepetition = 10; this._keySize = 160; this._rcon = new Uint8Array([ 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, 204, 131, 29, 58, 116, 232, 203, 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, 204, 131, 29, 58, 116, 232, 203, 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, 204, 131, 29, 58, 116, 232, 203, 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, 204, 131, 29, 58, 116, 232, 203, 141, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, 74, 148, 51, 102, 204, 131, 29, 58, 116, 232, 203, 141, ]); this._key = this._expandKey(e); } _expandKey(e) { const t = this._s, i = this._rcon, a = new Uint8Array(176); a.set(e); for (let e = 16, r = 1; e < 176; ++r) { let s = a[e - 3], n = a[e - 2], o = a[e - 1], g = a[e - 4]; s = t[s]; n = t[n]; o = t[o]; g = t[g]; s ^= i[r]; for (let t = 0; t < 4; ++t) { a[e] = s ^= a[e - 16]; e++; a[e] = n ^= a[e - 16]; e++; a[e] = o ^= a[e - 16]; e++; a[e] = g ^= a[e - 16]; e++; } } return a; } } class AES256Cipher extends AESBaseCipher { constructor(e) { super(); this._cyclesOfRepetition = 14; this._keySize = 224; this._key = this._expandKey(e); } _expandKey(e) { const t = this._s, i = new Uint8Array(240); i.set(e); let a, r, s, n, o = 1; for (let e = 32, g = 1; e < 240; ++g) { if (e % 32 == 16) { a = t[a]; r = t[r]; s = t[s]; n = t[n]; } else if (e % 32 == 0) { a = i[e - 3]; r = i[e - 2]; s = i[e - 1]; n = i[e - 4]; a = t[a]; r = t[r]; s = t[s]; n = t[n]; a ^= o; (o <<= 1) >= 256 && (o = 255 & (27 ^ o)); } for (let t = 0; t < 4; ++t) { i[e] = a ^= i[e - 32]; e++; i[e] = r ^= i[e - 32]; e++; i[e] = s ^= i[e - 32]; e++; i[e] = n ^= i[e - 32]; e++; } } return i; } } class PDF17 { checkOwnerPassword(e, t, i, a) { const r = new Uint8Array(e.length + 56); r.set(e, 0); r.set(t, e.length); r.set(i, e.length + t.length); return isArrayEqual(Tr(r, 0, r.length), a); } checkUserPassword(e, t, i) { const a = new Uint8Array(e.length + 8); a.set(e, 0); a.set(t, e.length); return isArrayEqual(Tr(a, 0, a.length), i); } getOwnerKey(e, t, i, a) { const r = new Uint8Array(e.length + 56); r.set(e, 0); r.set(t, e.length); r.set(i, e.length + t.length); const s = Tr(r, 0, r.length); return new AES256Cipher(s).decryptBlock(a, !1, new Uint8Array(16)); } getUserKey(e, t, i) { const a = new Uint8Array(e.length + 8); a.set(e, 0); a.set(t, e.length); const r = Tr(a, 0, a.length); return new AES256Cipher(r).decryptBlock(i, !1, new Uint8Array(16)); } } class PDF20 { _hash(e, t, i) { let a = Tr(t, 0, t.length).subarray(0, 32), r = [0], s = 0; for (; s < 64 || r.at(-1) > s - 32; ) { const t = e.length + a.length + i.length, c = new Uint8Array(t); let C = 0; c.set(e, C); C += e.length; c.set(a, C); C += a.length; c.set(i, C); const h = new Uint8Array(64 * t); for (let e = 0, i = 0; e < 64; e++, i += t) h.set(c, i); r = new AES128Cipher(a.subarray(0, 16)).encrypt(h, a.subarray(16, 32)); const l = r.slice(0, 16).reduce((e, t) => e + t, 0) % 3; 0 === l ? (a = Tr(r, 0, r.length)) : 1 === l ? (a = ((n = r), (o = 0), (g = r.length), Kr(n, o, g, !0))) : 2 === l && (a = Kr(r, 0, r.length)); s++; } var n, o, g; return a.subarray(0, 32); } checkOwnerPassword(e, t, i, a) { const r = new Uint8Array(e.length + 56); r.set(e, 0); r.set(t, e.length); r.set(i, e.length + t.length); return isArrayEqual(this._hash(e, r, i), a); } checkUserPassword(e, t, i) { const a = new Uint8Array(e.length + 8); a.set(e, 0); a.set(t, e.length); return isArrayEqual(this._hash(e, a, []), i); } getOwnerKey(e, t, i, a) { const r = new Uint8Array(e.length + 56); r.set(e, 0); r.set(t, e.length); r.set(i, e.length + t.length); const s = this._hash(e, r, i); return new AES256Cipher(s).decryptBlock(a, !1, new Uint8Array(16)); } getUserKey(e, t, i) { const a = new Uint8Array(e.length + 8); a.set(e, 0); a.set(t, e.length); const r = this._hash(e, a, []); return new AES256Cipher(r).decryptBlock(i, !1, new Uint8Array(16)); } } class CipherTransform { constructor(e, t) { this.StringCipherConstructor = e; this.StreamCipherConstructor = t; } createStream(e, t) { const i = new this.StreamCipherConstructor(); return new DecryptStream(e, t, function cipherTransformDecryptStream(e, t) { return i.decryptBlock(e, t); }); } decryptString(e) { const t = new this.StringCipherConstructor(); let i = stringToBytes(e); i = t.decryptBlock(i, !0); return bytesToString(i); } encryptString(e) { const t = new this.StringCipherConstructor(); if (t instanceof AESBaseCipher) { const i = 16 - (e.length % 16); e += String.fromCharCode(i).repeat(i); const a = new Uint8Array(16); if ('undefined' != typeof crypto) crypto.getRandomValues(a); else for (let e = 0; e < 16; e++) a[e] = Math.floor(256 * Math.random()); let r = stringToBytes(e); r = t.encrypt(r, a); const s = new Uint8Array(16 + r.length); s.set(a); s.set(r, 16); return bytesToString(s); } let i = stringToBytes(e); i = t.encrypt(i); return bytesToString(i); } } class CipherTransformFactory { static #k = new Uint8Array([ 40, 191, 78, 94, 78, 117, 138, 65, 100, 0, 78, 86, 255, 250, 1, 8, 46, 46, 0, 182, 208, 104, 62, 128, 47, 12, 169, 254, 100, 83, 105, 122, ]); #R(e, t, i, a, r, s, n, o, g, c, C, h) { if (t) { const e = Math.min(127, t.length); t = t.subarray(0, e); } else t = []; const l = 6 === e ? new PDF20() : new PDF17(); return l.checkUserPassword(t, o, n) ? l.getUserKey(t, g, C) : t.length && l.checkOwnerPassword(t, a, s, i) ? l.getOwnerKey(t, r, s, c) : null; } #N(e, t, i, a, r, s, n, o) { const g = 40 + i.length + e.length, c = new Uint8Array(g); let C, h, l = 0; if (t) { h = Math.min(32, t.length); for (; l < h; ++l) c[l] = t[l]; } C = 0; for (; l < 32; ) c[l++] = CipherTransformFactory.#k[C++]; for (C = 0, h = i.length; C < h; ++C) c[l++] = i[C]; c[l++] = 255 & r; c[l++] = (r >> 8) & 255; c[l++] = (r >> 16) & 255; c[l++] = (r >>> 24) & 255; for (C = 0, h = e.length; C < h; ++C) c[l++] = e[C]; if (s >= 4 && !o) { c[l++] = 255; c[l++] = 255; c[l++] = 255; c[l++] = 255; } let Q = vr(c, 0, l); const E = n >> 3; if (s >= 3) for (C = 0; C < 50; ++C) Q = vr(Q, 0, E); const u = Q.subarray(0, E); let d, f; if (s >= 3) { for (l = 0; l < 32; ++l) c[l] = CipherTransformFactory.#k[l]; for (C = 0, h = e.length; C < h; ++C) c[l++] = e[C]; d = new ARCFourCipher(u); f = d.encryptBlock(vr(c, 0, l)); h = u.length; const t = new Uint8Array(h); for (C = 1; C <= 19; ++C) { for (let e = 0; e < h; ++e) t[e] = u[e] ^ C; d = new ARCFourCipher(t); f = d.encryptBlock(f); } for (C = 0, h = f.length; C < h; ++C) if (a[C] !== f[C]) return null; } else { d = new ARCFourCipher(u); f = d.encryptBlock(CipherTransformFactory.#k); for (C = 0, h = f.length; C < h; ++C) if (a[C] !== f[C]) return null; } return u; } #G(e, t, i, a) { const r = new Uint8Array(32); let s = 0; const n = Math.min(32, e.length); for (; s < n; ++s) r[s] = e[s]; let o = 0; for (; s < 32; ) r[s++] = CipherTransformFactory.#k[o++]; let g = vr(r, 0, s); const c = a >> 3; if (i >= 3) for (o = 0; o < 50; ++o) g = vr(g, 0, g.length); let C, h; if (i >= 3) { h = t; const e = new Uint8Array(c); for (o = 19; o >= 0; o--) { for (let t = 0; t < c; ++t) e[t] = g[t] ^ o; C = new ARCFourCipher(e); h = C.encryptBlock(h); } } else { C = new ARCFourCipher(g.subarray(0, c)); h = C.encryptBlock(t); } return h; } #x(e, t, i, a = !1) { const r = new Uint8Array(i.length + 9), s = i.length; let n; for (n = 0; n < s; ++n) r[n] = i[n]; r[n++] = 255 & e; r[n++] = (e >> 8) & 255; r[n++] = (e >> 16) & 255; r[n++] = 255 & t; r[n++] = (t >> 8) & 255; if (a) { r[n++] = 115; r[n++] = 65; r[n++] = 108; r[n++] = 84; } return vr(r, 0, n).subarray(0, Math.min(i.length + 5, 16)); } #U(e, t, i, a, r) { if (!(t instanceof Name)) throw new FormatError('Invalid crypt filter name.'); const s = this, n = e.get(t.name), o = n?.get('CFM'); if (!o || 'None' === o.name) return function () { return new NullCipher(); }; if ('V2' === o.name) return function () { return new ARCFourCipher(s.#x(i, a, r, !1)); }; if ('AESV2' === o.name) return function () { return new AES128Cipher(s.#x(i, a, r, !0)); }; if ('AESV3' === o.name) return function () { return new AES256Cipher(r); }; throw new FormatError('Unknown crypto method'); } constructor(e, t, i) { const a = e.get('Filter'); if (!isName(a, 'Standard')) throw new FormatError('unknown encryption method'); this.filterName = a.name; this.dict = e; const r = e.get('V'); if (!Number.isInteger(r) || (1 !== r && 2 !== r && 4 !== r && 5 !== r)) throw new FormatError('unsupported encryption algorithm'); this.algorithm = r; let s = e.get('Length'); if (!s) if (r <= 3) s = 40; else { const t = e.get('CF'), i = e.get('StmF'); if (t instanceof Dict && i instanceof Name) { t.suppressEncryption = !0; const e = t.get(i.name); s = e?.get('Length') || 128; s < 40 && (s <<= 3); } } if (!Number.isInteger(s) || s < 40 || s % 8 != 0) throw new FormatError('invalid key length'); const n = stringToBytes(e.get('O')), o = stringToBytes(e.get('U')), g = n.subarray(0, 32), c = o.subarray(0, 32), C = e.get('P'), h = e.get('R'), l = (4 === r || 5 === r) && !1 !== e.get('EncryptMetadata'); this.encryptMetadata = l; const Q = stringToBytes(t); let E, u; if (i) { if (6 === h) try { i = utf8StringToString(i); } catch { warn( 'CipherTransformFactory: Unable to convert UTF8 encoded password.', ); } E = stringToBytes(i); } if (5 !== r) u = this.#N(Q, E, g, c, C, h, s, l); else { const t = n.subarray(32, 40), i = n.subarray(40, 48), a = o.subarray(0, 48), r = o.subarray(32, 40), s = o.subarray(40, 48), C = stringToBytes(e.get('OE')), l = stringToBytes(e.get('UE')), Q = stringToBytes(e.get('Perms')); u = this.#R(h, E, g, t, i, a, c, r, s, C, l, Q); } if (!u && !i) throw new PasswordException('No password given', rt); if (!u && i) { const e = this.#G(E, g, h, s); u = this.#N(Q, e, g, c, C, h, s, l); } if (!u) throw new PasswordException('Incorrect Password', st); this.encryptionKey = u; if (r >= 4) { const t = e.get('CF'); t instanceof Dict && (t.suppressEncryption = !0); this.cf = t; this.stmf = e.get('StmF') || Name.get('Identity'); this.strf = e.get('StrF') || Name.get('Identity'); this.eff = e.get('EFF') || this.stmf; } } createCipherTransform(e, t) { if (4 === this.algorithm || 5 === this.algorithm) return new CipherTransform( this.#U(this.cf, this.strf, e, t, this.encryptionKey), this.#U(this.cf, this.stmf, e, t, this.encryptionKey), ); const i = this.#x(e, t, this.encryptionKey, !1), cipherConstructor = function () { return new ARCFourCipher(i); }; return new CipherTransform(cipherConstructor, cipherConstructor); } } async function writeObject(e, t, i, { encrypt: a = null }) { const r = a?.createCipherTransform(e.num, e.gen); i.push(`${e.num} ${e.gen} obj\n`); t instanceof Dict ? await writeDict(t, i, r) : t instanceof BaseStream ? await writeStream(t, i, r) : (Array.isArray(t) || ArrayBuffer.isView(t)) && (await writeArray(t, i, r)); i.push('\nendobj\n'); } async function writeDict(e, t, i) { t.push('<<'); for (const a of e.getKeys()) { t.push(` /${escapePDFName(a)} `); await writeValue(e.getRaw(a), t, i); } t.push('>>'); } async function writeStream(e, t, i) { let a = e.getBytes(); const { dict: r } = e, [s, n] = await Promise.all([ r.getAsync('Filter'), r.getAsync('DecodeParms'), ]), o = isName( Array.isArray(s) ? await r.xref.fetchIfRefAsync(s[0]) : s, 'FlateDecode', ); if (a.length >= 256 || o) try { const e = new CompressionStream('deflate'), t = e.writable.getWriter(); t.write(a); t.close(); const i = await new Response(e.readable).arrayBuffer(); a = new Uint8Array(i); let g, c; if (s) { if (!o) { g = Array.isArray(s) ? [Name.get('FlateDecode'), ...s] : [Name.get('FlateDecode'), s]; n && (c = Array.isArray(n) ? [null, ...n] : [null, n]); } } else g = Name.get('FlateDecode'); g && r.set('Filter', g); c && r.set('DecodeParms', c); } catch (e) { info(`writeStream - cannot compress data: "${e}".`); } let g = bytesToString(a); i && (g = i.encryptString(g)); r.set('Length', g.length); await writeDict(r, t, i); t.push(' stream\n', g, '\nendstream'); } async function writeArray(e, t, i) { t.push('['); let a = !0; for (const r of e) { a ? (a = !1) : t.push(' '); await writeValue(r, t, i); } t.push(']'); } async function writeValue(e, t, i) { if (e instanceof Name) t.push(`/${escapePDFName(e.name)}`); else if (e instanceof Ref) t.push(`${e.num} ${e.gen} R`); else if (Array.isArray(e) || ArrayBuffer.isView(e)) await writeArray(e, t, i); else if ('string' == typeof e) { i && (e = i.encryptString(e)); t.push(`(${escapeString(e)})`); } else 'number' == typeof e ? t.push(numberToString(e)) : 'boolean' == typeof e ? t.push(e.toString()) : e instanceof Dict ? await writeDict(e, t, i) : e instanceof BaseStream ? await writeStream(e, t, i) : null === e ? t.push('null') : warn(`Unhandled value in writer: ${typeof e}, please file a bug.`); } function writeInt(e, t, i, a) { for (let r = t + i - 1; r > i - 1; r--) { a[r] = 255 & e; e >>= 8; } return i + t; } function writeString(e, t, i) { for (let a = 0, r = e.length; a < r; a++) i[t + a] = 255 & e.charCodeAt(a); } function updateXFA({ xfaData: e, xfaDatasetsRef: t, newRefs: i, xref: a }) { if (null === e) { e = (function writeXFADataForAcroform(e, t) { const i = new SimpleXMLParser({ hasAttributes: !0 }).parseFromString(e); for (const { xfa: e } of t) { if (!e) continue; const { path: t, value: a } = e; if (!t) continue; const r = parseXFAPath(t); let s = i.documentElement.searchNode(r, 0); !s && r.length > 1 && (s = i.documentElement.searchNode([r.at(-1)], 0)); s ? (s.childNodes = Array.isArray(a) ? a.map((e) => new SimpleDOMNode('value', e)) : [new SimpleDOMNode('#text', a)]) : warn(`Node not found for path: ${t}`); } const a = []; i.documentElement.dump(a); return a.join(''); })(a.fetchIfRef(t).getString(), i); } const r = a.encrypt; if (r) { e = r.createCipherTransform(t.num, t.gen).encryptString(e); } const s = `${t.num} ${t.gen} obj\n<< /Type /EmbeddedFile /Length ${e.length}>>\nstream\n` + e + '\nendstream\nendobj\n'; i.push({ ref: t, data: s }); } function getIndexes(e) { const t = []; for (const { ref: i } of e) i.num === t.at(-2) + t.at(-1) ? (t[t.length - 1] += 1) : t.push(i.num, 1); return t; } function computeIDs(e, t, i) { if (Array.isArray(t.fileIds) && t.fileIds.length > 0) { const a = (function computeMD5(e, t) { const i = Math.floor(Date.now() / 1e3), a = t.filename || '', r = [i.toString(), a, e.toString()]; let s = r.reduce((e, t) => e + t.length, 0); for (const e of Object.values(t.info)) { r.push(e); s += e.length; } const n = new Uint8Array(s); let o = 0; for (const e of r) { writeString(e, o, n); o += e.length; } return bytesToString(vr(n)); })(e, t); i.set('ID', [t.fileIds[0], a]); } } async function incrementalUpdate({ originalData: e, xrefInfo: t, newRefs: i, xref: a = null, hasXfa: r = !1, xfaDatasetsRef: s = null, hasXfaDatasetsEntry: n = !1, needAppearances: o, acroFormRef: g = null, acroForm: c = null, xfaData: C = null, useXrefStream: h = !1, }) { await (async function updateAcroform({ xref: e, acroForm: t, acroFormRef: i, hasXfa: a, hasXfaDatasetsEntry: r, xfaDatasetsRef: s, needAppearances: n, newRefs: o, }) { !a || r || s || warn('XFA - Cannot save it'); if (!n && (!a || !s || r)) return; const g = t.clone(); if (a && !r) { const e = t.get('XFA').slice(); e.splice(2, 0, 'datasets'); e.splice(3, 0, s); g.set('XFA', e); } n && g.set('NeedAppearances', !0); const c = []; await writeObject(i, g, c, e); o.push({ ref: i, data: c.join('') }); })({ xref: a, acroForm: c, acroFormRef: g, hasXfa: r, hasXfaDatasetsEntry: n, xfaDatasetsRef: s, needAppearances: o, newRefs: i, }); r && updateXFA({ xfaData: C, xfaDatasetsRef: s, newRefs: i, xref: a }); const l = []; let Q = e.length; const E = e.at(-1); if (10 !== E && 13 !== E) { l.push('\n'); Q += 1; } const u = (function getTrailerDict(e, t, i) { const a = new Dict(null); a.set('Prev', e.startXRef); const r = e.newRef; if (i) { t.push({ ref: r, data: '' }); a.set('Size', r.num + 1); a.set('Type', Name.get('XRef')); } else a.set('Size', r.num); null !== e.rootRef && a.set('Root', e.rootRef); null !== e.infoRef && a.set('Info', e.infoRef); null !== e.encryptRef && a.set('Encrypt', e.encryptRef); return a; })(t, i, h); i = i.sort((e, t) => e.ref.num - t.ref.num); for (const { data: e } of i) null !== e && l.push(e); await (h ? (async function getXRefStreamTable(e, t, i, a, r) { const s = []; let n = 0, o = 0; for (const { ref: e, data: a } of i) { let i; n = Math.max(n, t); if (null !== a) { i = Math.min(e.gen, 65535); s.push([1, t, i]); t += a.length; } else { i = Math.min(e.gen + 1, 65535); s.push([0, 0, i]); } o = Math.max(o, i); } a.set('Index', getIndexes(i)); const g = [1, getSizeInBytes(n), getSizeInBytes(o)]; a.set('W', g); computeIDs(t, e, a); const c = g.reduce((e, t) => e + t, 0), C = new Uint8Array(c * s.length), h = new Stream(C); h.dict = a; let l = 0; for (const [e, t, i] of s) { l = writeInt(e, g[0], l, C); l = writeInt(t, g[1], l, C); l = writeInt(i, g[2], l, C); } await writeObject(e.newRef, h, r, {}); r.push('startxref\n', t.toString(), '\n%%EOF\n'); })(t, Q, i, u, l) : (async function getXRefTable(e, t, i, a, r) { r.push('xref\n'); const s = getIndexes(i); let n = 0; for (const { ref: e, data: a } of i) { if (e.num === s[n]) { r.push(`${s[n]} ${s[n + 1]}\n`); n += 2; } if (null !== a) { r.push( `${t.toString().padStart(10, '0')} ${Math.min(e.gen, 65535) .toString() .padStart(5, '0')} n\r\n`, ); t += a.length; } else r.push( `0000000000 ${Math.min(e.gen + 1, 65535) .toString() .padStart(5, '0')} f\r\n`, ); } computeIDs(t, e, a); r.push('trailer\n'); await writeDict(a, r); r.push('\nstartxref\n', t.toString(), '\n%%EOF\n'); })(t, Q, i, u, l)); const d = l.reduce((e, t) => e + t.length, e.length), f = new Uint8Array(d); f.set(e); let p = e.length; for (const e of l) { writeString(e, p, f); p += e.length; } return f; } const qr = 1, Or = 2, Pr = 3, Wr = 4, jr = 5; class StructTreeRoot { constructor(e, t) { this.dict = e; this.ref = t instanceof Ref ? t : null; this.roleMap = new Map(); this.structParentIds = null; } init() { this.readRoleMap(); } #M(e, t, i) { if (!(e instanceof Ref) || t < 0) return; this.structParentIds ||= new RefSetCache(); let a = this.structParentIds.get(e); if (!a) { a = []; this.structParentIds.put(e, a); } a.push([t, i]); } addAnnotationIdToPage(e, t) { this.#M(e, t, Wr); } readRoleMap() { const e = this.dict.get('RoleMap'); e instanceof Dict && e.forEach((e, t) => { t instanceof Name && this.roleMap.set(e, t.name); }); } static async canCreateStructureTree({ catalogRef: e, pdfManager: t, newAnnotationsByPage: i, }) { if (!(e instanceof Ref)) { warn('Cannot save the struct tree: no catalog reference.'); return !1; } let a = 0, r = !0; for (const [e, s] of i) { const { ref: i } = await t.getPage(e); if (!(i instanceof Ref)) { warn(`Cannot save the struct tree: page ${e} has no ref.`); r = !0; break; } for (const e of s) if (e.accessibilityData?.type) { e.parentTreeId = a++; r = !1; } } if (r) { for (const e of i.values()) for (const t of e) delete t.parentTreeId; return !1; } return !0; } static async createStructureTree({ newAnnotationsByPage: e, xref: t, catalogRef: i, pdfManager: a, newRefs: r, }) { const s = a.catalog.cloneDict(), n = new RefSetCache(); n.put(i, s); const o = t.getNewTemporaryRef(); s.set('StructTreeRoot', o); const g = new Dict(t); g.set('Type', Name.get('StructTreeRoot')); const c = t.getNewTemporaryRef(); g.set('ParentTree', c); const C = []; g.set('K', C); n.put(o, g); const h = new Dict(t), l = []; h.set('Nums', l); const Q = await this.#L({ newAnnotationsByPage: e, structTreeRootRef: o, kids: C, nums: l, xref: t, pdfManager: a, cache: n, }); g.set('ParentTreeNextKey', Q); n.put(c, h); const E = []; for (const [e, i] of n.items()) { E.length = 0; await writeObject(e, i, E, t); r.push({ ref: e, data: E.join('') }); } } async canUpdateStructTree({ pdfManager: e, xref: t, newAnnotationsByPage: i, }) { if (!this.ref) { warn('Cannot update the struct tree: no root reference.'); return !1; } let a = this.dict.get('ParentTreeNextKey'); if (!Number.isInteger(a) || a < 0) { warn('Cannot update the struct tree: invalid next key.'); return !1; } const r = this.dict.get('ParentTree'); if (!(r instanceof Dict)) { warn("Cannot update the struct tree: ParentTree isn't a dict."); return !1; } const s = r.get('Nums'); if (!Array.isArray(s)) { warn("Cannot update the struct tree: nums isn't an array."); return !1; } const n = new NumberTree(r, t); for (const t of i.keys()) { const { pageDict: i } = await e.getPage(t); if (!i.has('StructParents')) continue; const a = i.get('StructParents'); if (!Number.isInteger(a) || !Array.isArray(n.get(a))) { warn(`Cannot save the struct tree: page ${t} has a wrong id.`); return !1; } } let o = !0; for (const [t, r] of i) { const { pageDict: i } = await e.getPage(t); StructTreeRoot.#H({ elements: r, xref: this.dict.xref, pageDict: i, numberTree: n, }); for (const e of r) if (e.accessibilityData?.type) { e.parentTreeId = a++; o = !1; } } if (o) { for (const e of i.values()) for (const t of e) { delete t.parentTreeId; delete t.structTreeParent; } return !1; } return !0; } async updateStructureTree({ newAnnotationsByPage: e, pdfManager: t, newRefs: i, }) { const a = this.dict.xref, r = this.dict.clone(), s = this.ref, n = new RefSetCache(); n.put(s, r); let o, g = r.getRaw('ParentTree'); if (g instanceof Ref) o = a.fetch(g); else { o = g; g = a.getNewTemporaryRef(); r.set('ParentTree', g); } o = o.clone(); n.put(g, o); let c = o.getRaw('Nums'), C = null; if (c instanceof Ref) { C = c; c = a.fetch(C); } c = c.slice(); C || o.set('Nums', c); const h = await StructTreeRoot.#L({ newAnnotationsByPage: e, structTreeRootRef: s, kids: null, nums: c, xref: a, pdfManager: t, cache: n, }); r.set('ParentTreeNextKey', h); C && n.put(C, c); const l = []; for (const [e, t] of n.items()) { l.length = 0; await writeObject(e, t, l, a); i.push({ ref: e, data: l.join('') }); } } static async #L({ newAnnotationsByPage: e, structTreeRootRef: t, kids: i, nums: a, xref: r, pdfManager: s, cache: n, }) { const o = Name.get('OBJR'); let g = -1 / 0; for (const [c, C] of e) { const { ref: e } = await s.getPage(c), h = e instanceof Ref; for (const { accessibilityData: s, ref: c, parentTreeId: l, structTreeParent: Q, } of C) { if (!s?.type) continue; const { type: C, title: E, lang: u, alt: d, expanded: f, actualText: p, } = s; g = Math.max(g, l); const m = r.getNewTemporaryRef(), y = new Dict(r); y.set('S', Name.get(C)); E && y.set('T', E); u && y.set('Lang', u); d && y.set('Alt', d); f && y.set('E', f); p && y.set('ActualText', p); await this.#J({ structTreeParent: Q, tagDict: y, newTagRef: m, structTreeRootRef: t, fallbackKids: i, xref: r, cache: n, }); const w = new Dict(r); y.set('K', w); w.set('Type', o); h && w.set('Pg', e); w.set('Obj', c); n.put(m, y); a.push(l, m); } } return g + 1; } static #H({ elements: e, xref: t, pageDict: i, numberTree: a }) { const r = new Map(); for (const t of e) if (t.structTreeParentId) { const e = parseInt(t.structTreeParentId.split('_mc')[1], 10); let i = r.get(e); if (!i) { i = []; r.set(e, i); } i.push(t); } const s = i.get('StructParents'); if (!Number.isInteger(s)) return; const n = a.get(s), updateElement = (e, i, a) => { const s = r.get(e); if (s) { const e = i.getRaw('P'), r = t.fetchIfRef(e); if (e instanceof Ref && r instanceof Dict) { const e = { ref: a, dict: i }; for (const t of s) t.structTreeParent = e; } return !0; } return !1; }; for (const e of n) { if (!(e instanceof Ref)) continue; const i = t.fetch(e), a = i.get('K'); if (Number.isInteger(a)) updateElement(a, i, e); else if (Array.isArray(a)) for (let r of a) { r = t.fetchIfRef(r); if (Number.isInteger(r) && updateElement(r, i, e)) break; if (!(r instanceof Dict)) continue; if (!isName(r.get('Type'), 'MCR')) break; const a = r.get('MCID'); if (Number.isInteger(a) && updateElement(a, i, e)) break; } } } static async #J({ structTreeParent: e, tagDict: t, newTagRef: i, structTreeRootRef: a, fallbackKids: r, xref: s, cache: n, }) { let o, g = null; if (e) { ({ ref: g } = e); o = e.dict.getRaw('P') || a; } else o = a; t.set('P', o); const c = s.fetchIfRef(o); if (!c) { r.push(i); return; } let C = n.get(o); if (!C) { C = c.clone(); n.put(o, C); } const h = C.getRaw('K'); let l = h instanceof Ref ? n.get(h) : null; if (!l) { l = s.fetchIfRef(h); l = Array.isArray(l) ? l.slice() : [h]; const e = s.getNewTemporaryRef(); C.set('K', e); n.put(e, l); } const Q = l.indexOf(g); l.splice(Q >= 0 ? Q + 1 : l.length, 0, i); } } class StructElementNode { constructor(e, t) { this.tree = e; this.dict = t; this.kids = []; this.parseKids(); } get role() { const e = this.dict.get('S'), t = e instanceof Name ? e.name : '', { root: i } = this.tree; return i.roleMap.has(t) ? i.roleMap.get(t) : t; } parseKids() { let e = null; const t = this.dict.getRaw('Pg'); t instanceof Ref && (e = t.toString()); const i = this.dict.get('K'); if (Array.isArray(i)) for (const t of i) { const i = this.parseKid(e, t); i && this.kids.push(i); } else { const t = this.parseKid(e, i); t && this.kids.push(t); } } parseKid(e, t) { if (Number.isInteger(t)) return this.tree.pageDict.objId !== e ? null : new StructElement({ type: qr, mcid: t, pageObjId: e }); let i = null; t instanceof Ref ? (i = this.dict.xref.fetch(t)) : t instanceof Dict && (i = t); if (!i) return null; const a = i.getRaw('Pg'); a instanceof Ref && (e = a.toString()); const r = i.get('Type') instanceof Name ? i.get('Type').name : null; if ('MCR' === r) { if (this.tree.pageDict.objId !== e) return null; const t = i.getRaw('Stm'); return new StructElement({ type: Or, refObjId: t instanceof Ref ? t.toString() : null, pageObjId: e, mcid: i.get('MCID'), }); } if ('OBJR' === r) { if (this.tree.pageDict.objId !== e) return null; const t = i.getRaw('Obj'); return new StructElement({ type: Pr, refObjId: t instanceof Ref ? t.toString() : null, pageObjId: e, }); } return new StructElement({ type: jr, dict: i }); } } class StructElement { constructor({ type: e, dict: t = null, mcid: i = null, pageObjId: a = null, refObjId: r = null, }) { this.type = e; this.dict = t; this.mcid = i; this.pageObjId = a; this.refObjId = r; this.parentNode = null; } } class StructTreePage { constructor(e, t) { this.root = e; this.rootDict = e ? e.dict : null; this.pageDict = t; this.nodes = []; } parse(e) { if (!this.root || !this.rootDict) return; const t = this.rootDict.get('ParentTree'); if (!t) return; const i = this.pageDict.get('StructParents'), a = e instanceof Ref && this.root.structParentIds?.get(e); if (!Number.isInteger(i) && !a) return; const r = new Map(), s = new NumberTree(t, this.rootDict.xref); if (Number.isInteger(i)) { const e = s.get(i); if (Array.isArray(e)) for (const t of e) t instanceof Ref && this.addNode(this.rootDict.xref.fetch(t), r); } if (a) for (const [e, t] of a) { const i = s.get(e); if (i) { const e = this.addNode(this.rootDict.xref.fetchIfRef(i), r); 1 === e?.kids?.length && e.kids[0].type === Pr && (e.kids[0].type = t); } } } addNode(e, t, i = 0) { if (i > 40) { warn('StructTree MAX_DEPTH reached.'); return null; } if (t.has(e)) return t.get(e); const a = new StructElementNode(this, e); t.set(e, a); const r = e.get('P'); if (!r || isName(r.get('Type'), 'StructTreeRoot')) { this.addTopLevelNode(e, a) || t.delete(e); return a; } const s = this.addNode(r, t, i + 1); if (!s) return a; let n = !1; for (const t of s.kids) if (t.type === jr && t.dict === e) { t.parentNode = a; n = !0; } n || t.delete(e); return a; } addTopLevelNode(e, t) { const i = this.rootDict.get('K'); if (!i) return !1; if (i instanceof Dict) { if (i.objId !== e.objId) return !1; this.nodes[0] = t; return !0; } if (!Array.isArray(i)) return !0; let a = !1; for (let r = 0; r < i.length; r++) { const s = i[r]; if (s?.toString() === e.objId) { this.nodes[r] = t; a = !0; } } return a; } get serializable() { function nodeToSerializable(e, t, i = 0) { if (i > 40) { warn('StructTree too deep to be fully serialized.'); return; } const a = Object.create(null); a.role = e.role; a.children = []; t.children.push(a); const r = e.dict.get('Alt'); 'string' == typeof r && (a.alt = stringToPDFString(r)); const s = e.dict.get('Lang'); 'string' == typeof s && (a.lang = stringToPDFString(s)); for (const t of e.kids) { const e = t.type === jr ? t.parentNode : null; e ? nodeToSerializable(e, a, i + 1) : t.type === qr || t.type === Or ? a.children.push({ type: 'content', id: `p${t.pageObjId}_mc${t.mcid}`, }) : t.type === Pr ? a.children.push({ type: 'object', id: t.refObjId }) : t.type === Wr && a.children.push({ type: 'annotation', id: `pdfjs_internal_id_${t.refObjId}`, }); } } const e = Object.create(null); e.children = []; e.role = 'Root'; for (const t of this.nodes) t && nodeToSerializable(t, e); return e; } } function isValidExplicitDest(e) { if (!Array.isArray(e) || e.length < 2) return !1; const [t, i, ...a] = e; if (!(t instanceof Ref || Number.isInteger(t))) return !1; if (!(i instanceof Name)) return !1; let r = !0; switch (i.name) { case 'XYZ': if (3 !== a.length) return !1; break; case 'Fit': case 'FitB': return 0 === a.length; case 'FitH': case 'FitBH': case 'FitV': case 'FitBV': if (1 !== a.length) return !1; break; case 'FitR': if (4 !== a.length) return !1; r = !1; break; default: return !1; } for (const e of a) if (!('number' == typeof e || (r && null === e))) return !1; return !0; } function fetchDest(e) { e instanceof Dict && (e = e.get('D')); return isValidExplicitDest(e) ? e : null; } function fetchRemoteDest(e) { let t = e.get('D'); if (t) { t instanceof Name && (t = t.name); if ('string' == typeof t) return stringToPDFString(t); if (isValidExplicitDest(t)) return JSON.stringify(t); } return null; } class Catalog { constructor(e, t) { this.pdfManager = e; this.xref = t; this._catDict = t.getCatalogObj(); if (!(this._catDict instanceof Dict)) throw new FormatError('Catalog object is not a dictionary.'); this.toplevelPagesDict; this._actualNumPages = null; this.fontCache = new RefSetCache(); this.builtInCMapCache = new Map(); this.standardFontDataCache = new Map(); this.globalImageCache = new GlobalImageCache(); this.pageKidsCountCache = new RefSetCache(); this.pageIndexCache = new RefSetCache(); this.nonBlendModesSet = new RefSet(); this.systemFontCache = new Map(); } cloneDict() { return this._catDict.clone(); } get version() { const e = this._catDict.get('Version'); if (e instanceof Name) { if (St.test(e.name)) return shadow(this, 'version', e.name); warn(`Invalid PDF catalog version: ${e.name}`); } return shadow(this, 'version', null); } get lang() { const e = this._catDict.get('Lang'); return shadow( this, 'lang', e && 'string' == typeof e ? stringToPDFString(e) : null, ); } get needsRendering() { const e = this._catDict.get('NeedsRendering'); return shadow(this, 'needsRendering', 'boolean' == typeof e && e); } get collection() { let e = null; try { const t = this._catDict.get('Collection'); t instanceof Dict && t.size > 0 && (e = t); } catch (e) { if (e instanceof MissingDataException) throw e; info('Cannot fetch Collection entry; assuming no collection is present.'); } return shadow(this, 'collection', e); } get acroForm() { let e = null; try { const t = this._catDict.get('AcroForm'); t instanceof Dict && t.size > 0 && (e = t); } catch (e) { if (e instanceof MissingDataException) throw e; info('Cannot fetch AcroForm entry; assuming no forms are present.'); } return shadow(this, 'acroForm', e); } get acroFormRef() { const e = this._catDict.getRaw('AcroForm'); return shadow(this, 'acroFormRef', e instanceof Ref ? e : null); } get metadata() { const e = this._catDict.getRaw('Metadata'); if (!(e instanceof Ref)) return shadow(this, 'metadata', null); let t = null; try { const i = this.xref.fetch(e, !this.xref.encrypt?.encryptMetadata); if (i instanceof BaseStream && i.dict instanceof Dict) { const e = i.dict.get('Type'), a = i.dict.get('Subtype'); if (isName(e, 'Metadata') && isName(a, 'XML')) { const e = stringToUTF8String(i.getString()); e && (t = new MetadataParser(e).serializable); } } } catch (e) { if (e instanceof MissingDataException) throw e; info(`Skipping invalid Metadata: "${e}".`); } return shadow(this, 'metadata', t); } get markInfo() { let e = null; try { e = this._readMarkInfo(); } catch (e) { if (e instanceof MissingDataException) throw e; warn('Unable to read mark info.'); } return shadow(this, 'markInfo', e); } _readMarkInfo() { const e = this._catDict.get('MarkInfo'); if (!(e instanceof Dict)) return null; const t = { Marked: !1, UserProperties: !1, Suspects: !1 }; for (const i in t) { const a = e.get(i); 'boolean' == typeof a && (t[i] = a); } return t; } get structTreeRoot() { let e = null; try { e = this._readStructTreeRoot(); } catch (e) { if (e instanceof MissingDataException) throw e; warn('Unable read to structTreeRoot info.'); } return shadow(this, 'structTreeRoot', e); } _readStructTreeRoot() { const e = this._catDict.getRaw('StructTreeRoot'), t = this.xref.fetchIfRef(e); if (!(t instanceof Dict)) return null; const i = new StructTreeRoot(t, e); i.init(); return i; } get toplevelPagesDict() { const e = this._catDict.get('Pages'); if (!(e instanceof Dict)) throw new FormatError('Invalid top-level pages dictionary.'); return shadow(this, 'toplevelPagesDict', e); } get documentOutline() { let e = null; try { e = this._readDocumentOutline(); } catch (e) { if (e instanceof MissingDataException) throw e; warn('Unable to read document outline.'); } return shadow(this, 'documentOutline', e); } _readDocumentOutline() { let e = this._catDict.get('Outlines'); if (!(e instanceof Dict)) return null; e = e.getRaw('First'); if (!(e instanceof Ref)) return null; const t = { items: [] }, i = [{ obj: e, parent: t }], a = new RefSet(); a.put(e); const r = this.xref, s = new Uint8ClampedArray(3); for (; i.length > 0; ) { const t = i.shift(), n = r.fetchIfRef(t.obj); if (null === n) continue; n.has('Title') || warn('Invalid outline item encountered.'); const o = { url: null, dest: null, action: null }; Catalog.parseDestDictionary({ destDict: n, resultObj: o, docBaseUrl: this.baseUrl, docAttachments: this.attachments, }); const g = n.get('Title'), c = n.get('F') || 0, C = n.getArray('C'), h = n.get('Count'); let l = s; !isNumberArray(C, 3) || (0 === C[0] && 0 === C[1] && 0 === C[2]) || (l = ColorSpace.singletons.rgb.getRgb(C, 0)); const Q = { action: o.action, attachment: o.attachment, dest: o.dest, url: o.url, unsafeUrl: o.unsafeUrl, newWindow: o.newWindow, setOCGState: o.setOCGState, title: 'string' == typeof g ? stringToPDFString(g) : '', color: l, count: Number.isInteger(h) ? h : void 0, bold: !!(2 & c), italic: !!(1 & c), items: [], }; t.parent.items.push(Q); e = n.getRaw('First'); if (e instanceof Ref && !a.has(e)) { i.push({ obj: e, parent: Q }); a.put(e); } e = n.getRaw('Next'); if (e instanceof Ref && !a.has(e)) { i.push({ obj: e, parent: t.parent }); a.put(e); } } return t.items.length > 0 ? t.items : null; } get permissions() { let e = null; try { e = this._readPermissions(); } catch (e) { if (e instanceof MissingDataException) throw e; warn('Unable to read permissions.'); } return shadow(this, 'permissions', e); } _readPermissions() { const e = this.xref.trailer.get('Encrypt'); if (!(e instanceof Dict)) return null; let t = e.get('P'); if ('number' != typeof t) return null; t += 2 ** 32; const i = []; for (const e in y) { const a = y[e]; t & a && i.push(a); } return i; } get optionalContentConfig() { let e = null; try { const t = this._catDict.get('OCProperties'); if (!t) return shadow(this, 'optionalContentConfig', null); const i = t.get('D'); if (!i) return shadow(this, 'optionalContentConfig', null); const a = t.get('OCGs'); if (!Array.isArray(a)) return shadow(this, 'optionalContentConfig', null); const r = [], s = new RefSet(); for (const e of a) if (e instanceof Ref && !s.has(e)) { s.put(e); r.push(this.#Y(e)); } e = this.#v(i, s); e.groups = r; } catch (e) { if (e instanceof MissingDataException) throw e; warn(`Unable to read optional content config: ${e}`); } return shadow(this, 'optionalContentConfig', e); } #Y(e) { const t = this.xref.fetch(e), i = { id: e.toString(), name: null, intent: null, usage: { print: null, view: null }, }, a = t.get('Name'); 'string' == typeof a && (i.name = stringToPDFString(a)); let r = t.getArray('Intent'); Array.isArray(r) || (r = [r]); r.every((e) => e instanceof Name) && (i.intent = r.map((e) => e.name)); const s = t.get('Usage'); if (!(s instanceof Dict)) return i; const n = i.usage, o = s.get('Print'); if (o instanceof Dict) { const e = o.get('PrintState'); if (e instanceof Name) switch (e.name) { case 'ON': case 'OFF': n.print = { printState: e.name }; } } const g = s.get('View'); if (g instanceof Dict) { const e = g.get('ViewState'); if (e instanceof Name) switch (e.name) { case 'ON': case 'OFF': n.view = { viewState: e.name }; } } return i; } #v(e, t) { function parseOnOff(e) { const i = []; if (Array.isArray(e)) for (const a of e) a instanceof Ref && t.has(a) && i.push(a.toString()); return i; } function parseOrder(e, i = 0) { if (!Array.isArray(e)) return null; const r = []; for (const s of e) { if (s instanceof Ref && t.has(s)) { a.put(s); r.push(s.toString()); continue; } const e = parseNestedOrder(s, i); e && r.push(e); } if (i > 0) return r; const s = []; for (const e of t) a.has(e) || s.push(e.toString()); s.length && r.push({ name: null, order: s }); return r; } function parseNestedOrder(e, t) { if (++t > r) { warn('parseNestedOrder - reached MAX_NESTED_LEVELS.'); return null; } const a = i.fetchIfRef(e); if (!Array.isArray(a)) return null; const s = i.fetchIfRef(a[0]); if ('string' != typeof s) return null; const n = parseOrder(a.slice(1), t); return n && n.length ? { name: stringToPDFString(s), order: n } : null; } const i = this.xref, a = new RefSet(), r = 10; return { name: 'string' == typeof e.get('Name') ? stringToPDFString(e.get('Name')) : null, creator: 'string' == typeof e.get('Creator') ? stringToPDFString(e.get('Creator')) : null, baseState: e.get('BaseState') instanceof Name ? e.get('BaseState').name : null, on: parseOnOff(e.get('ON')), off: parseOnOff(e.get('OFF')), order: parseOrder(e.get('Order')), groups: null, }; } setActualNumPages(e = null) { this._actualNumPages = e; } get hasActualNumPages() { return null !== this._actualNumPages; } get _pagesCount() { const e = this.toplevelPagesDict.get('Count'); if (!Number.isInteger(e)) throw new FormatError( 'Page count in top-level pages dictionary is not an integer.', ); return shadow(this, '_pagesCount', e); } get numPages() { return this.hasActualNumPages ? this._actualNumPages : this._pagesCount; } get destinations() { const e = this._readDests(), t = Object.create(null); if (e instanceof NameTree) for (const [i, a] of e.getAll()) { const e = fetchDest(a); e && (t[stringToPDFString(i)] = e); } else e instanceof Dict && e.forEach(function (e, i) { const a = fetchDest(i); a && (t[e] = a); }); return shadow(this, 'destinations', t); } getDestination(e) { const t = this._readDests(); if (t instanceof NameTree) { const i = fetchDest(t.get(e)); if (i) return i; const a = this.destinations[e]; if (a) { warn(`Found "${e}" at an incorrect position in the NameTree.`); return a; } } else if (t instanceof Dict) { const i = fetchDest(t.get(e)); if (i) return i; } return null; } _readDests() { const e = this._catDict.get('Names'); return e?.has('Dests') ? new NameTree(e.getRaw('Dests'), this.xref) : this._catDict.has('Dests') ? this._catDict.get('Dests') : void 0; } get pageLabels() { let e = null; try { e = this._readPageLabels(); } catch (e) { if (e instanceof MissingDataException) throw e; warn('Unable to read page labels.'); } return shadow(this, 'pageLabels', e); } _readPageLabels() { const e = this._catDict.getRaw('PageLabels'); if (!e) return null; const t = new Array(this.numPages); let i = null, a = ''; const r = new NumberTree(e, this.xref).getAll(); let s = '', n = 1; for (let e = 0, o = this.numPages; e < o; e++) { const o = r.get(e); if (void 0 !== o) { if (!(o instanceof Dict)) throw new FormatError('PageLabel is not a dictionary.'); if (o.has('Type') && !isName(o.get('Type'), 'PageLabel')) throw new FormatError('Invalid type in PageLabel dictionary.'); if (o.has('S')) { const e = o.get('S'); if (!(e instanceof Name)) throw new FormatError('Invalid style in PageLabel dictionary.'); i = e.name; } else i = null; if (o.has('P')) { const e = o.get('P'); if ('string' != typeof e) throw new FormatError('Invalid prefix in PageLabel dictionary.'); a = stringToPDFString(e); } else a = ''; if (o.has('St')) { const e = o.get('St'); if (!(Number.isInteger(e) && e >= 1)) throw new FormatError('Invalid start in PageLabel dictionary.'); n = e; } else n = 1; } switch (i) { case 'D': s = n; break; case 'R': case 'r': s = toRomanNumerals(n, 'r' === i); break; case 'A': case 'a': const e = 26, t = 'a' === i ? 97 : 65, a = n - 1; s = String.fromCharCode(t + (a % e)).repeat(Math.floor(a / e) + 1); break; default: if (i) throw new FormatError( `Invalid style "${i}" in PageLabel dictionary.`, ); s = ''; } t[e] = a + s; n++; } return t; } get pageLayout() { const e = this._catDict.get('PageLayout'); let t = ''; if (e instanceof Name) switch (e.name) { case 'SinglePage': case 'OneColumn': case 'TwoColumnLeft': case 'TwoColumnRight': case 'TwoPageLeft': case 'TwoPageRight': t = e.name; } return shadow(this, 'pageLayout', t); } get pageMode() { const e = this._catDict.get('PageMode'); let t = 'UseNone'; if (e instanceof Name) switch (e.name) { case 'UseNone': case 'UseOutlines': case 'UseThumbs': case 'FullScreen': case 'UseOC': case 'UseAttachments': t = e.name; } return shadow(this, 'pageMode', t); } get viewerPreferences() { const e = this._catDict.get('ViewerPreferences'); if (!(e instanceof Dict)) return shadow(this, 'viewerPreferences', null); let t = null; for (const i of e.getKeys()) { const a = e.get(i); let r; switch (i) { case 'HideToolbar': case 'HideMenubar': case 'HideWindowUI': case 'FitWindow': case 'CenterWindow': case 'DisplayDocTitle': case 'PickTrayByPDFSize': 'boolean' == typeof a && (r = a); break; case 'NonFullScreenPageMode': if (a instanceof Name) switch (a.name) { case 'UseNone': case 'UseOutlines': case 'UseThumbs': case 'UseOC': r = a.name; break; default: r = 'UseNone'; } break; case 'Direction': if (a instanceof Name) switch (a.name) { case 'L2R': case 'R2L': r = a.name; break; default: r = 'L2R'; } break; case 'ViewArea': case 'ViewClip': case 'PrintArea': case 'PrintClip': if (a instanceof Name) switch (a.name) { case 'MediaBox': case 'CropBox': case 'BleedBox': case 'TrimBox': case 'ArtBox': r = a.name; break; default: r = 'CropBox'; } break; case 'PrintScaling': if (a instanceof Name) switch (a.name) { case 'None': case 'AppDefault': r = a.name; break; default: r = 'AppDefault'; } break; case 'Duplex': if (a instanceof Name) switch (a.name) { case 'Simplex': case 'DuplexFlipShortEdge': case 'DuplexFlipLongEdge': r = a.name; break; default: r = 'None'; } break; case 'PrintPageRange': if (Array.isArray(a) && a.length % 2 == 0) { a.every( (e, t, i) => Number.isInteger(e) && e > 0 && (0 === t || e >= i[t - 1]) && e <= this.numPages, ) && (r = a); } break; case 'NumCopies': Number.isInteger(a) && a > 0 && (r = a); break; default: warn(`Ignoring non-standard key in ViewerPreferences: ${i}.`); continue; } if (void 0 !== r) { t || (t = Object.create(null)); t[i] = r; } else warn(`Bad value, for key "${i}", in ViewerPreferences: ${a}.`); } return shadow(this, 'viewerPreferences', t); } get openAction() { const e = this._catDict.get('OpenAction'), t = Object.create(null); if (e instanceof Dict) { const i = new Dict(this.xref); i.set('A', e); const a = { url: null, dest: null, action: null }; Catalog.parseDestDictionary({ destDict: i, resultObj: a }); Array.isArray(a.dest) ? (t.dest = a.dest) : a.action && (t.action = a.action); } else Array.isArray(e) && (t.dest = e); return shadow(this, 'openAction', objectSize(t) > 0 ? t : null); } get attachments() { const e = this._catDict.get('Names'); let t = null; if (e instanceof Dict && e.has('EmbeddedFiles')) { const i = new NameTree(e.getRaw('EmbeddedFiles'), this.xref); for (const [e, a] of i.getAll()) { const i = new FileSpec(a, this.xref); t || (t = Object.create(null)); t[stringToPDFString(e)] = i.serializable; } } return shadow(this, 'attachments', t); } get xfaImages() { const e = this._catDict.get('Names'); let t = null; if (e instanceof Dict && e.has('XFAImages')) { const i = new NameTree(e.getRaw('XFAImages'), this.xref); for (const [e, a] of i.getAll()) { t || (t = new Dict(this.xref)); t.set(stringToPDFString(e), a); } } return shadow(this, 'xfaImages', t); } _collectJavaScript() { const e = this._catDict.get('Names'); let t = null; function appendIfJavaScriptDict(e, i) { if (!(i instanceof Dict)) return; if (!isName(i.get('S'), 'JavaScript')) return; let a = i.get('JS'); if (a instanceof BaseStream) a = a.getString(); else if ('string' != typeof a) return; a = stringToPDFString(a).replaceAll('\0', ''); a && (t ||= new Map()).set(e, a); } if (e instanceof Dict && e.has('JavaScript')) { const t = new NameTree(e.getRaw('JavaScript'), this.xref); for (const [e, i] of t.getAll()) appendIfJavaScriptDict(stringToPDFString(e), i); } const i = this._catDict.get('OpenAction'); i && appendIfJavaScriptDict('OpenAction', i); return t; } get jsActions() { const e = this._collectJavaScript(); let t = collectActions(this.xref, this._catDict, pA); if (e) { t ||= Object.create(null); for (const [i, a] of e) i in t ? t[i].push(a) : (t[i] = [a]); } return shadow(this, 'jsActions', t); } async fontFallback(e, t) { const i = await Promise.all(this.fontCache); for (const a of i) if (a.loadedName === e) { a.fallback(t); return; } } async cleanup(e = !1) { clearGlobalCaches(); this.globalImageCache.clear(e); this.pageKidsCountCache.clear(); this.pageIndexCache.clear(); this.nonBlendModesSet.clear(); const t = await Promise.all(this.fontCache); for (const { dict: e } of t) delete e.cacheKey; this.fontCache.clear(); this.builtInCMapCache.clear(); this.standardFontDataCache.clear(); this.systemFontCache.clear(); } async getPageDict(e) { const t = [this.toplevelPagesDict], i = new RefSet(), a = this._catDict.getRaw('Pages'); a instanceof Ref && i.put(a); const r = this.xref, s = this.pageKidsCountCache, n = this.pageIndexCache; let o = 0; for (; t.length; ) { const a = t.pop(); if (a instanceof Ref) { const g = s.get(a); if (g >= 0 && o + g <= e) { o += g; continue; } if (i.has(a)) throw new FormatError('Pages tree contains circular reference.'); i.put(a); const c = await r.fetchAsync(a); if (c instanceof Dict) { let t = c.getRaw('Type'); t instanceof Ref && (t = await r.fetchAsync(t)); if (isName(t, 'Page') || !c.has('Kids')) { s.has(a) || s.put(a, 1); n.has(a) || n.put(a, o); if (o === e) return [c, a]; o++; continue; } } t.push(c); continue; } if (!(a instanceof Dict)) throw new FormatError( 'Page dictionary kid reference points to wrong type of object.', ); const { objId: g } = a; let c = a.getRaw('Count'); c instanceof Ref && (c = await r.fetchAsync(c)); if (Number.isInteger(c) && c >= 0) { g && !s.has(g) && s.put(g, c); if (o + c <= e) { o += c; continue; } } let C = a.getRaw('Kids'); C instanceof Ref && (C = await r.fetchAsync(C)); if (!Array.isArray(C)) { let t = a.getRaw('Type'); t instanceof Ref && (t = await r.fetchAsync(t)); if (isName(t, 'Page') || !a.has('Kids')) { if (o === e) return [a, null]; o++; continue; } throw new FormatError('Page dictionary kids object is not an array.'); } for (let e = C.length - 1; e >= 0; e--) t.push(C[e]); } throw new Error(`Page index ${e} not found.`); } async getAllPageDicts(e = !1) { const { ignoreErrors: t } = this.pdfManager.evaluatorOptions, i = [{ currentNode: this.toplevelPagesDict, posInKids: 0 }], a = new RefSet(), r = this._catDict.getRaw('Pages'); r instanceof Ref && a.put(r); const s = new Map(), n = this.xref, o = this.pageIndexCache; let g = 0; function addPageDict(e, t) { t && !o.has(t) && o.put(t, g); s.set(g++, [e, t]); } function addPageError(i) { if (i instanceof XRefEntryException && !e) throw i; if (e && t && 0 === g) { warn(`getAllPageDicts - Skipping invalid first page: "${i}".`); i = Dict.empty; } s.set(g++, [i, null]); } for (; i.length > 0; ) { const e = i.at(-1), { currentNode: t, posInKids: r } = e; let s = t.getRaw('Kids'); if (s instanceof Ref) try { s = await n.fetchAsync(s); } catch (e) { addPageError(e); break; } if (!Array.isArray(s)) { addPageError( new FormatError('Page dictionary kids object is not an array.'), ); break; } if (r >= s.length) { i.pop(); continue; } const o = s[r]; let g; if (o instanceof Ref) { if (a.has(o)) { addPageError( new FormatError('Pages tree contains circular reference.'), ); break; } a.put(o); try { g = await n.fetchAsync(o); } catch (e) { addPageError(e); break; } } else g = o; if (!(g instanceof Dict)) { addPageError( new FormatError( 'Page dictionary kid reference points to wrong type of object.', ), ); break; } let c = g.getRaw('Type'); if (c instanceof Ref) try { c = await n.fetchAsync(c); } catch (e) { addPageError(e); break; } isName(c, 'Page') || !g.has('Kids') ? addPageDict(g, o instanceof Ref ? o : null) : i.push({ currentNode: g, posInKids: 0 }); e.posInKids++; } return s; } getPageIndex(e) { const t = this.pageIndexCache.get(e); if (void 0 !== t) return Promise.resolve(t); const i = this.xref; let a = 0; const next = (t) => (function pagesBeforeRef(t) { let a, r = 0; return i .fetchAsync(t) .then(function (i) { if ( isRefsEqual(t, e) && !isDict(i, 'Page') && !(i instanceof Dict && !i.has('Type') && i.has('Contents')) ) throw new FormatError( 'The reference does not point to a /Page dictionary.', ); if (!i) return null; if (!(i instanceof Dict)) throw new FormatError('Node must be a dictionary.'); a = i.getRaw('Parent'); return i.getAsync('Parent'); }) .then(function (e) { if (!e) return null; if (!(e instanceof Dict)) throw new FormatError('Parent must be a dictionary.'); return e.getAsync('Kids'); }) .then(function (e) { if (!e) return null; const s = []; let n = !1; for (const a of e) { if (!(a instanceof Ref)) throw new FormatError('Kid must be a reference.'); if (isRefsEqual(a, t)) { n = !0; break; } s.push( i.fetchAsync(a).then(function (e) { if (!(e instanceof Dict)) throw new FormatError('Kid node must be a dictionary.'); e.has('Count') ? (r += e.get('Count')) : r++; }), ); } if (!n) throw new FormatError( "Kid reference not found in parent's kids.", ); return Promise.all(s).then(function () { return [r, a]; }); }); })(t).then((t) => { if (!t) { this.pageIndexCache.put(e, a); return a; } const [i, r] = t; a += i; return next(r); }); return next(e); } get baseUrl() { const e = this._catDict.get('URI'); if (e instanceof Dict) { const t = e.get('Base'); if ('string' == typeof t) { const e = createValidAbsoluteUrl(t, null, { tryConvertEncoding: !0 }); if (e) return shadow(this, 'baseUrl', e.href); } } return shadow(this, 'baseUrl', this.pdfManager.docBaseUrl); } static parseDestDictionary({ destDict: e, resultObj: t, docBaseUrl: i = null, docAttachments: a = null, }) { if (!(e instanceof Dict)) { warn('parseDestDictionary: `destDict` must be a dictionary.'); return; } let r, s, n = e.get('A'); if (!(n instanceof Dict)) if (e.has('Dest')) n = e.get('Dest'); else { n = e.get('AA'); n instanceof Dict && (n.has('D') ? (n = n.get('D')) : n.has('U') && (n = n.get('U'))); } if (n instanceof Dict) { const e = n.get('S'); if (!(e instanceof Name)) { warn('parseDestDictionary: Invalid type in Action dictionary.'); return; } const i = e.name; switch (i) { case 'ResetForm': const e = n.get('Flags'), o = 0 == (1 & ('number' == typeof e ? e : 0)), g = [], c = []; for (const e of n.get('Fields') || []) e instanceof Ref ? c.push(e.toString()) : 'string' == typeof e && g.push(stringToPDFString(e)); t.resetForm = { fields: g, refs: c, include: o }; break; case 'URI': r = n.get('URI'); r instanceof Name && (r = '/' + r.name); break; case 'GoTo': s = n.get('D'); break; case 'Launch': case 'GoToR': const C = n.get('F'); if (C instanceof Dict) { const e = new FileSpec(C, null, !0), { rawFilename: t } = e.serializable; r = t; } else 'string' == typeof C && (r = C); const h = fetchRemoteDest(n); h && 'string' == typeof r && (r = r.split('#', 1)[0] + '#' + h); const l = n.get('NewWindow'); 'boolean' == typeof l && (t.newWindow = l); break; case 'GoToE': const Q = n.get('T'); let E; if (a && Q instanceof Dict) { const e = Q.get('R'), t = Q.get('N'); isName(e, 'C') && 'string' == typeof t && (E = a[stringToPDFString(t)]); } if (E) { t.attachment = E; const e = fetchRemoteDest(n); e && (t.attachmentDest = e); } else warn('parseDestDictionary - unimplemented "GoToE" action.'); break; case 'Named': const u = n.get('N'); u instanceof Name && (t.action = u.name); break; case 'SetOCGState': const d = n.get('State'), f = n.get('PreserveRB'); if (!Array.isArray(d) || 0 === d.length) break; const p = []; for (const e of d) if (e instanceof Name) switch (e.name) { case 'ON': case 'OFF': case 'Toggle': p.push(e.name); } else e instanceof Ref && p.push(e.toString()); if (p.length !== d.length) break; t.setOCGState = { state: p, preserveRB: 'boolean' != typeof f || f }; break; case 'JavaScript': const m = n.get('JS'); let y; m instanceof BaseStream ? (y = m.getString()) : 'string' == typeof m && (y = m); const w = y && recoverJsURL(stringToPDFString(y)); if (w) { r = w.url; t.newWindow = w.newWindow; break; } default: if ('JavaScript' === i || 'SubmitForm' === i) break; warn(`parseDestDictionary - unsupported action: "${i}".`); } } else e.has('Dest') && (s = e.get('Dest')); if ('string' == typeof r) { const e = createValidAbsoluteUrl(r, i, { addDefaultProtocol: !0, tryConvertEncoding: !0, }); e && (t.url = e.href); t.unsafeUrl = r; } if (s) { s instanceof Name && (s = s.name); 'string' == typeof s ? (t.dest = stringToPDFString(s)) : isValidExplicitDest(s) && (t.dest = s); } } } function addChildren(e, t) { if (e instanceof Dict) e = e.getRawValues(); else if (e instanceof BaseStream) e = e.dict.getRawValues(); else if (!Array.isArray(e)) return; for (const a of e) ((i = a) instanceof Ref || i instanceof Dict || i instanceof BaseStream || Array.isArray(i)) && t.push(a); var i; } class ObjectLoader { constructor(e, t, i) { this.dict = e; this.keys = t; this.xref = i; this.refSet = null; } async load() { if (this.xref.stream.isDataLoaded) return; const { keys: e, dict: t } = this; this.refSet = new RefSet(); const i = []; for (const a of e) { const e = t.getRaw(a); void 0 !== e && i.push(e); } return this._walk(i); } async _walk(e) { const t = [], i = []; for (; e.length; ) { let a = e.pop(); if (a instanceof Ref) { if (this.refSet.has(a)) continue; try { this.refSet.put(a); a = this.xref.fetch(a); } catch (e) { if (!(e instanceof MissingDataException)) { warn(`ObjectLoader._walk - requesting all data: "${e}".`); this.refSet = null; const { manager: t } = this.xref.stream; return t.requestAllChunks(); } t.push(a); i.push({ begin: e.begin, end: e.end }); } } if (a instanceof BaseStream) { const e = a.getBaseStreams(); if (e) { let r = !1; for (const t of e) if (!t.isDataLoaded) { r = !0; i.push({ begin: t.start, end: t.end }); } r && t.push(a); } } addChildren(a, e); } if (i.length) { await this.xref.stream.manager.requestRanges(i); for (const e of t) e instanceof Ref && this.refSet.remove(e); return this._walk(t); } this.refSet = null; } } const Xr = Symbol(), Zr = Symbol(), Vr = Symbol(), _r = Symbol(), zr = Symbol(), $r = Symbol(), As = Symbol(), es = Symbol(), ts = Symbol(), is = Symbol('content'), as = Symbol('data'), rs = Symbol(), ss = Symbol('extra'), ns = Symbol(), os = Symbol(), gs = Symbol(), Is = Symbol(), cs = Symbol(), Cs = Symbol(), hs = Symbol(), ls = Symbol(), Bs = Symbol(), Qs = Symbol(), Es = Symbol(), us = Symbol(), ds = Symbol(), fs = Symbol(), ps = Symbol(), ms = Symbol(), ys = Symbol(), ws = Symbol(), bs = Symbol(), Ds = Symbol(), Fs = Symbol(), Ss = Symbol(), ks = Symbol(), Rs = Symbol(), Ns = Symbol(), Gs = Symbol(), xs = Symbol(), Us = Symbol(), Ms = Symbol(), Ls = Symbol(), Hs = Symbol(), Js = Symbol(), Ys = Symbol('namespaceId'), vs = Symbol('nodeName'), Ts = Symbol(), Ks = Symbol(), qs = Symbol(), Os = Symbol(), Ws = Symbol(), js = Symbol(), Xs = Symbol(), Zs = Symbol(), Vs = Symbol('root'), _s = Symbol(), zs = Symbol(), $s = Symbol(), An = Symbol(), en = Symbol(), tn = Symbol(), an = Symbol(), rn = Symbol(), sn = Symbol(), nn = Symbol(), on = Symbol(), gn = Symbol('uid'), In = Symbol(), cn = { config: { id: 0, check: (e) => e.startsWith('http://www.xfa.org/schema/xci/'), }, connectionSet: { id: 1, check: (e) => e.startsWith('http://www.xfa.org/schema/xfa-connection-set/'), }, datasets: { id: 2, check: (e) => e.startsWith('http://www.xfa.org/schema/xfa-data/'), }, form: { id: 3, check: (e) => e.startsWith('http://www.xfa.org/schema/xfa-form/'), }, localeSet: { id: 4, check: (e) => e.startsWith('http://www.xfa.org/schema/xfa-locale-set/'), }, pdf: { id: 5, check: (e) => 'http://ns.adobe.com/xdp/pdf/' === e }, signature: { id: 6, check: (e) => 'http://www.w3.org/2000/09/xmldsig#' === e, }, sourceSet: { id: 7, check: (e) => e.startsWith('http://www.xfa.org/schema/xfa-source-set/'), }, stylesheet: { id: 8, check: (e) => 'http://www.w3.org/1999/XSL/Transform' === e, }, template: { id: 9, check: (e) => e.startsWith('http://www.xfa.org/schema/xfa-template/'), }, xdc: { id: 10, check: (e) => e.startsWith('http://www.xfa.org/schema/xdc/'), }, xdp: { id: 11, check: (e) => 'http://ns.adobe.com/xdp/' === e }, xfdf: { id: 12, check: (e) => 'http://ns.adobe.com/xfdf/' === e }, xhtml: { id: 13, check: (e) => 'http://www.w3.org/1999/xhtml' === e }, xmpmeta: { id: 14, check: (e) => 'http://ns.adobe.com/xmpmeta/' === e }, }, Cn = { pt: (e) => e, cm: (e) => (e / 2.54) * 72, mm: (e) => (e / 25.4) * 72, in: (e) => 72 * e, px: (e) => e, }, hn = /([+-]?\d+\.?\d*)(.*)/; function stripQuotes(e) { return e.startsWith("'") || e.startsWith('"') ? e.slice(1, -1) : e; } function getInteger({ data: e, defaultValue: t, validate: i }) { if (!e) return t; e = e.trim(); const a = parseInt(e, 10); return !isNaN(a) && i(a) ? a : t; } function getFloat({ data: e, defaultValue: t, validate: i }) { if (!e) return t; e = e.trim(); const a = parseFloat(e); return !isNaN(a) && i(a) ? a : t; } function getKeyword({ data: e, defaultValue: t, validate: i }) { return e && i((e = e.trim())) ? e : t; } function getStringOption(e, t) { return getKeyword({ data: e, defaultValue: t[0], validate: (e) => t.includes(e), }); } function getMeasurement(e, t = '0') { t ||= '0'; if (!e) return getMeasurement(t); const i = e.trim().match(hn); if (!i) return getMeasurement(t); const [, a, r] = i, s = parseFloat(a); if (isNaN(s)) return getMeasurement(t); if (0 === s) return 0; const n = Cn[r]; return n ? n(s) : s; } function getRatio(e) { if (!e) return { num: 1, den: 1 }; const t = e .trim() .split(/\s*:\s*/) .map((e) => parseFloat(e)) .filter((e) => !isNaN(e)); 1 === t.length && t.push(1); if (0 === t.length) return { num: 1, den: 1 }; const [i, a] = t; return { num: i, den: a }; } function getRelevant(e) { return e ? e .trim() .split(/\s+/) .map((e) => ({ excluded: '-' === e[0], viewname: e.substring(1) })) : []; } class HTMLResult { static get FAILURE() { return shadow(this, 'FAILURE', new HTMLResult(!1, null, null, null)); } static get EMPTY() { return shadow(this, 'EMPTY', new HTMLResult(!0, null, null, null)); } constructor(e, t, i, a) { this.success = e; this.html = t; this.bbox = i; this.breakNode = a; } isBreak() { return !!this.breakNode; } static breakNode(e) { return new HTMLResult(!1, null, null, e); } static success(e, t = null) { return new HTMLResult(!0, e, t, null); } } class FontFinder { constructor(e) { this.fonts = new Map(); this.cache = new Map(); this.warned = new Set(); this.defaultFont = null; this.add(e); } add(e, t = null) { for (const t of e) this.addPdfFont(t); for (const e of this.fonts.values()) e.regular || (e.regular = e.italic || e.bold || e.bolditalic); if (!t || 0 === t.size) return; const i = this.fonts.get('PdfJS-Fallback-PdfJS-XFA'); for (const e of t) this.fonts.set(e, i); } addPdfFont(e) { const t = e.cssFontInfo, i = t.fontFamily; let a = this.fonts.get(i); if (!a) { a = Object.create(null); this.fonts.set(i, a); this.defaultFont || (this.defaultFont = a); } let r = ''; const s = parseFloat(t.fontWeight); 0 !== parseFloat(t.italicAngle) ? (r = s >= 700 ? 'bolditalic' : 'italic') : s >= 700 && (r = 'bold'); if (!r) { (e.name.includes('Bold') || e.psName?.includes('Bold')) && (r = 'bold'); (e.name.includes('Italic') || e.name.endsWith('It') || e.psName?.includes('Italic') || e.psName?.endsWith('It')) && (r += 'italic'); } r || (r = 'regular'); a[r] = e; } getDefault() { return this.defaultFont; } find(e, t = !0) { let i = this.fonts.get(e) || this.cache.get(e); if (i) return i; const a = /,|-|_| |bolditalic|bold|italic|regular|it/gi; let r = e.replaceAll(a, ''); i = this.fonts.get(r); if (i) { this.cache.set(e, i); return i; } r = r.toLowerCase(); const s = []; for (const [e, t] of this.fonts.entries()) e.replaceAll(a, '').toLowerCase().startsWith(r) && s.push(t); if (0 === s.length) for (const [, e] of this.fonts.entries()) e.regular.name?.replaceAll(a, '').toLowerCase().startsWith(r) && s.push(e); if (0 === s.length) { r = r.replaceAll(/psmt|mt/gi, ''); for (const [e, t] of this.fonts.entries()) e.replaceAll(a, '').toLowerCase().startsWith(r) && s.push(t); } if (0 === s.length) for (const e of this.fonts.values()) e.regular.name?.replaceAll(a, '').toLowerCase().startsWith(r) && s.push(e); if (s.length >= 1) { 1 !== s.length && t && warn(`XFA - Too many choices to guess the correct font: ${e}`); this.cache.set(e, s[0]); return s[0]; } if (t && !this.warned.has(e)) { this.warned.add(e); warn(`XFA - Cannot find the font: ${e}`); } return null; } } function selectFont(e, t) { return 'italic' === e.posture ? 'bold' === e.weight ? t.bolditalic : t.italic : 'bold' === e.weight ? t.bold : t.regular; } class FontInfo { constructor(e, t, i, a) { this.lineHeight = i; this.paraMargin = t || { top: 0, bottom: 0, left: 0, right: 0 }; if (!e) { [this.pdfFont, this.xfaFont] = this.defaultFont(a); return; } this.xfaFont = { typeface: e.typeface, posture: e.posture, weight: e.weight, size: e.size, letterSpacing: e.letterSpacing, }; const r = a.find(e.typeface); if (r) { this.pdfFont = selectFont(e, r); this.pdfFont || ([this.pdfFont, this.xfaFont] = this.defaultFont(a)); } else [this.pdfFont, this.xfaFont] = this.defaultFont(a); } defaultFont(e) { const t = e.find('Helvetica', !1) || e.find('Myriad Pro', !1) || e.find('Arial', !1) || e.getDefault(); if (t?.regular) { const e = t.regular; return [ e, { typeface: e.cssFontInfo.fontFamily, posture: 'normal', weight: 'normal', size: 10, letterSpacing: 0, }, ]; } return [ null, { typeface: 'Courier', posture: 'normal', weight: 'normal', size: 10, letterSpacing: 0, }, ]; } } class FontSelector { constructor(e, t, i, a) { this.fontFinder = a; this.stack = [new FontInfo(e, t, i, a)]; } pushData(e, t, i) { const a = this.stack.at(-1); for (const t of ['typeface', 'posture', 'weight', 'size', 'letterSpacing']) e[t] || (e[t] = a.xfaFont[t]); for (const e of ['top', 'bottom', 'left', 'right']) isNaN(t[e]) && (t[e] = a.paraMargin[e]); const r = new FontInfo(e, t, i || a.lineHeight, this.fontFinder); r.pdfFont || (r.pdfFont = a.pdfFont); this.stack.push(r); } popFont() { this.stack.pop(); } topFont() { return this.stack.at(-1); } } class TextMeasure { constructor(e, t, i, a) { this.glyphs = []; this.fontSelector = new FontSelector(e, t, i, a); this.extraHeight = 0; } pushData(e, t, i) { this.fontSelector.pushData(e, t, i); } popFont(e) { return this.fontSelector.popFont(); } addPara() { const e = this.fontSelector.topFont(); this.extraHeight += e.paraMargin.top + e.paraMargin.bottom; } addString(e) { if (!e) return; const t = this.fontSelector.topFont(), i = t.xfaFont.size; if (t.pdfFont) { const a = t.xfaFont.letterSpacing, r = t.pdfFont, s = r.lineHeight || 1.2, n = t.lineHeight || Math.max(1.2, s) * i, o = s - (void 0 === r.lineGap ? 0.2 : r.lineGap), g = Math.max(1, o) * i, c = i / 1e3, C = r.defaultWidth || r.charsToGlyphs(' ')[0].width; for (const t of e.split(/[\u2029\n]/)) { const e = r.encodeString(t).join(''), i = r.charsToGlyphs(e); for (const e of i) { const t = e.width || C; this.glyphs.push([t * c + a, n, g, e.unicode, !1]); } this.glyphs.push([0, 0, 0, '\n', !0]); } this.glyphs.pop(); } else { for (const t of e.split(/[\u2029\n]/)) { for (const e of t.split('')) this.glyphs.push([i, 1.2 * i, i, e, !1]); this.glyphs.push([0, 0, 0, '\n', !0]); } this.glyphs.pop(); } } compute(e) { let t = -1, i = 0, a = 0, r = 0, s = 0, n = 0, o = !1, g = !0; for (let c = 0, C = this.glyphs.length; c < C; c++) { const [C, h, l, Q, E] = this.glyphs[c], u = ' ' === Q, d = g ? l : h; if (E) { a = Math.max(a, s); s = 0; r += n; n = d; t = -1; i = 0; g = !1; } else if (u) if (s + C > e) { a = Math.max(a, s); s = 0; r += n; n = d; t = -1; i = 0; o = !0; g = !1; } else { n = Math.max(d, n); i = s; s += C; t = c; } else if (s + C > e) { r += n; n = d; if (-1 !== t) { c = t; a = Math.max(a, i); s = 0; t = -1; i = 0; } else { a = Math.max(a, s); s = C; } o = !0; g = !1; } else { s += C; n = Math.max(d, n); } } a = Math.max(a, s); r += n + this.extraHeight; return { width: 1.02 * a, height: r, isBroken: o }; } } const ln = /^[^.[]+/, Bn = /^[^\]]+/, Qn = { dot: 0, dotDot: 1, dotHash: 2, dotBracket: 3, dotParen: 4 }, En = new Map([ ['$data', (e, t) => (e.datasets ? e.datasets.data : e)], ['$record', (e, t) => (e.datasets ? e.datasets.data : e)[us]()[0]], ['$template', (e, t) => e.template], ['$connectionSet', (e, t) => e.connectionSet], ['$form', (e, t) => e.form], ['$layout', (e, t) => e.layout], ['$host', (e, t) => e.host], ['$dataWindow', (e, t) => e.dataWindow], ['$event', (e, t) => e.event], ['!', (e, t) => e.datasets], ['$xfa', (e, t) => e], ['xfa', (e, t) => e], ['$', (e, t) => t], ]), un = new WeakMap(); function parseExpression(e, t, i = !0) { let a = e.match(ln); if (!a) return null; let [r] = a; const s = [ { name: r, cacheName: '.' + r, index: 0, js: null, formCalc: null, operator: Qn.dot, }, ]; let n = r.length; for (; n < e.length; ) { const g = n; if ('[' === e.charAt(n++)) { a = e.slice(n).match(Bn); if (!a) { warn('XFA - Invalid index in SOM expression'); return null; } s.at(-1).index = '*' === (o = (o = a[0]).trim()) ? 1 / 0 : parseInt(o, 10) || 0; n += a[0].length + 1; continue; } let c; switch (e.charAt(n)) { case '.': if (!t) return null; n++; c = Qn.dotDot; break; case '#': n++; c = Qn.dotHash; break; case '[': if (i) { warn( 'XFA - SOM expression contains a FormCalc subexpression which is not supported for now.', ); return null; } c = Qn.dotBracket; break; case '(': if (i) { warn( 'XFA - SOM expression contains a JavaScript subexpression which is not supported for now.', ); return null; } c = Qn.dotParen; break; default: c = Qn.dot; } a = e.slice(n).match(ln); if (!a) break; [r] = a; n += r.length; s.push({ name: r, cacheName: e.slice(g, n), operator: c, index: 0, js: null, formCalc: null, }); } var o; return s; } function searchNode(e, t, i, a = !0, r = !0) { const s = parseExpression(i, a); if (!s) return null; const n = En.get(s[0].name); let o, g = 0; if (n) { o = !0; e = [n(e, t)]; g = 1; } else { o = null === t; e = [t || e]; } for (let i = s.length; g < i; g++) { const { name: i, cacheName: a, operator: n, index: c } = s[g], C = []; for (const t of e) { if (!t.isXFAObject) continue; let e, s; if (r) { s = un.get(t); if (!s) { s = new Map(); un.set(t, s); } e = s.get(a); } if (!e) { switch (n) { case Qn.dot: e = t[hs](i, !1); break; case Qn.dotDot: e = t[hs](i, !0); break; case Qn.dotHash: e = t[Cs](i); e = e.isXFAObjectArray ? e.children : [e]; } r && s.set(a, e); } e.length > 0 && C.push(e); } if (0 !== C.length || o || 0 !== g) e = isFinite(c) ? C.filter((e) => c < e.length).map((e) => e[c]) : C.flat(); else { const i = t[ms](); if (!(t = i)) return null; g = -1; e = [t]; } } return 0 === e.length ? null : e; } function createDataNode(e, t, i) { const a = parseExpression(i); if (!a) return null; if (a.some((e) => e.operator === Qn.dotDot)) return null; const r = En.get(a[0].name); let s = 0; if (r) { e = r(e, t); s = 1; } else e = t || e; for (let t = a.length; s < t; s++) { const { name: t, operator: i, index: r } = a[s]; if (!isFinite(r)) { a[s].index = 0; return e.createNodes(a.slice(s)); } let n; switch (i) { case Qn.dot: n = e[hs](t, !1); break; case Qn.dotDot: n = e[hs](t, !0); break; case Qn.dotHash: n = e[Cs](t); n = n.isXFAObjectArray ? n.children : [n]; } if (0 === n.length) return e.createNodes(a.slice(s)); if (!(r < n.length)) { a[s].index = r - n.length; return e.createNodes(a.slice(s)); } { const t = n[r]; if (!t.isXFAObject) { warn('XFA - Cannot create a node.'); return null; } e = t; } } return null; } const dn = Symbol(), fn = Symbol(), pn = Symbol(), mn = Symbol('_children'), yn = Symbol(), wn = Symbol(), bn = Symbol(), Dn = Symbol(), Fn = Symbol(), Sn = Symbol(), kn = Symbol(), Rn = Symbol(), Nn = Symbol(), Gn = Symbol('parent'), xn = Symbol(), Un = Symbol(), Mn = Symbol(); let Ln = 0; const Hn = cn.datasets.id; class XFAObject { constructor(e, t, i = !1) { this[Ys] = e; this[vs] = t; this[kn] = i; this[Gn] = null; this[mn] = []; this[gn] = `${t}${Ln++}`; this[ws] = null; } get isXFAObject() { return !0; } get isXFAObjectArray() { return !1; } createNodes(e) { let t = this, i = null; for (const { name: a, index: r } of e) { for (let e = 0, s = isFinite(r) ? r : 0; e <= s; e++) { const e = t[Ys] === Hn ? -1 : t[Ys]; i = new XmlObject(e, a); t[Vr](i); } t = i; } return i; } [Ks](e) { if (!this[kn] || !this[qs](e)) return !1; const t = e[vs], i = this[t]; if (!(i instanceof XFAObjectArray)) { null !== i && this[Zs](i); this[t] = e; this[Vr](e); return !0; } if (i.push(e)) { this[Vr](e); return !0; } let a = ''; this.id ? (a = ` (id: ${this.id})`) : this.name && (a = ` (name: ${this.name} ${this.h.value})`); warn(`XFA - node "${this[vs]}"${a} has already enough "${t}"!`); return !1; } [qs](e) { return this.hasOwnProperty(e[vs]) && e[Ys] === this[Ys]; } [xs]() { return !1; } [Xr]() { return !1; } [ks]() { return !1; } [Rs]() { return !1; } [js]() { this.para && this[ys]()[ss].paraStack.pop(); } [Xs]() { this[ys]()[ss].paraStack.push(this.para); } [$s](e) { this.id && this[Ys] === cn.template.id && e.set(this.id, this); } [ys]() { return this[ws].template; } [Us]() { return !1; } [Ms]() { return !1; } [Vr](e) { e[Gn] = this; this[mn].push(e); !e[ws] && this[ws] && (e[ws] = this[ws]); } [Zs](e) { const t = this[mn].indexOf(e); this[mn].splice(t, 1); } [bs]() { return this.hasOwnProperty('value'); } [en](e) {} [Os](e) {} [ns]() {} [zr](e) { delete this[kn]; if (this[As]) { e.clean(this[As]); delete this[As]; } } [Fs](e) { return this[mn].indexOf(e); } [Ss](e, t) { t[Gn] = this; this[mn].splice(e, 0, t); !t[ws] && this[ws] && (t[ws] = this[ws]); } [Ls]() { return !this.name; } [Js]() { return ''; } [an]() { return 0 === this[mn].length ? this[is] : this[mn].map((e) => e[an]()).join(''); } get [pn]() { const e = Object.getPrototypeOf(this); if (!e._attributes) { const t = (e._attributes = new Set()); for (const e of Object.getOwnPropertyNames(this)) { if ( null === this[e] || this[e] instanceof XFAObject || this[e] instanceof XFAObjectArray ) break; t.add(e); } } return shadow(this, pn, e._attributes); } [Gs](e) { let t = this; for (; t; ) { if (t === e) return !0; t = t[ms](); } return !1; } [ms]() { return this[Gn]; } [ps]() { return this[ms](); } [us](e = null) { return e ? this[e] : this[mn]; } [rs]() { const e = Object.create(null); this[is] && (e.$content = this[is]); for (const t of Object.getOwnPropertyNames(this)) { const i = this[t]; null !== i && (i instanceof XFAObject ? (e[t] = i[rs]()) : i instanceof XFAObjectArray ? i.isEmpty() || (e[t] = i.dump()) : (e[t] = i)); } return e; } [on]() { return null; } [sn]() { return HTMLResult.EMPTY; } *[ds]() { for (const e of this[us]()) yield e; } *[Dn](e, t) { for (const i of this[ds]()) if (!e || t === e.has(i[vs])) { const e = this[cs](), t = i[sn](e); t.success || (this[ss].failingNode = i); yield t; } } [os]() { return null; } [Zr](e, t) { this[ss].children.push(e); } [cs]() {} [_r]({ filter: e = null, include: t = !0 }) { if (this[ss].generator) { const e = this[cs](), t = this[ss].failingNode[sn](e); if (!t.success) return t; t.html && this[Zr](t.html, t.bbox); delete this[ss].failingNode; } else this[ss].generator = this[Dn](e, t); for (;;) { const e = this[ss].generator.next(); if (e.done) break; const t = e.value; if (!t.success) return t; t.html && this[Zr](t.html, t.bbox); } this[ss].generator = null; return HTMLResult.EMPTY; } [An](e) { this[Un] = new Set(Object.keys(e)); } [Sn](e) { const t = this[pn], i = this[Un]; return [...e].filter((e) => t.has(e) && !i.has(e)); } [_s](e, t = new Set()) { for (const i of this[mn]) i[xn](e, t); } [xn](e, t) { const i = this[Fn](e, t); i ? this[dn](i, e, t) : this[_s](e, t); } [Fn](e, t) { const { use: i, usehref: a } = this; if (!i && !a) return null; let r = null, s = null, n = null, o = i; if (a) { o = a; a.startsWith('#som(') && a.endsWith(')') ? (s = a.slice(5, -1)) : a.startsWith('.#som(') && a.endsWith(')') ? (s = a.slice(6, -1)) : a.startsWith('#') ? (n = a.slice(1)) : a.startsWith('.#') && (n = a.slice(2)); } else i.startsWith('#') ? (n = i.slice(1)) : (s = i); this.use = this.usehref = ''; if (n) r = e.get(n); else { r = searchNode(e.get(Vs), this, s, !0, !1); r && (r = r[0]); } if (!r) { warn(`XFA - Invalid prototype reference: ${o}.`); return null; } if (r[vs] !== this[vs]) { warn(`XFA - Incompatible prototype: ${r[vs]} !== ${this[vs]}.`); return null; } if (t.has(r)) { warn('XFA - Cycle detected in prototypes use.'); return null; } t.add(r); const g = r[Fn](e, t); g && r[dn](g, e, t); r[_s](e, t); t.delete(r); return r; } [dn](e, t, i) { if (i.has(e)) { warn('XFA - Cycle detected in prototypes use.'); return; } !this[is] && e[is] && (this[is] = e[is]); new Set(i).add(e); for (const t of this[Sn](e[Un])) { this[t] = e[t]; this[Un] && this[Un].add(t); } for (const a of Object.getOwnPropertyNames(this)) { if (this[pn].has(a)) continue; const r = this[a], s = e[a]; if (r instanceof XFAObjectArray) { for (const e of r[mn]) e[xn](t, i); for (let a = r[mn].length, n = s[mn].length; a < n; a++) { const s = e[mn][a][es](); if (!r.push(s)) break; s[Gn] = this; this[mn].push(s); s[xn](t, i); } } else if (null === r) { if (null !== s) { const e = s[es](); e[Gn] = this; this[a] = e; this[mn].push(e); e[xn](t, i); } } else { r[_s](t, i); s && r[dn](s, t, i); } } } static [yn](e) { return Array.isArray(e) ? e.map((e) => XFAObject[yn](e)) : 'object' == typeof e && null !== e ? Object.assign({}, e) : e; } [es]() { const e = Object.create(Object.getPrototypeOf(this)); for (const t of Object.getOwnPropertySymbols(this)) try { e[t] = this[t]; } catch { shadow(e, t, this[t]); } e[gn] = `${e[vs]}${Ln++}`; e[mn] = []; for (const t of Object.getOwnPropertyNames(this)) { if (this[pn].has(t)) { e[t] = XFAObject[yn](this[t]); continue; } const i = this[t]; e[t] = i instanceof XFAObjectArray ? new XFAObjectArray(i[Rn]) : null; } for (const t of this[mn]) { const i = t[vs], a = t[es](); e[mn].push(a); a[Gn] = e; null === e[i] ? (e[i] = a) : e[i][mn].push(a); } return e; } [us](e = null) { return e ? this[mn].filter((t) => t[vs] === e) : this[mn]; } [Cs](e) { return this[e]; } [hs](e, t, i = !0) { return Array.from(this[ls](e, t, i)); } *[ls](e, t, i = !0) { if ('parent' !== e) { for (const i of this[mn]) { i[vs] === e && (yield i); i.name === e && (yield i); (t || i[Ls]()) && (yield* i[ls](e, t, !1)); } i && this[pn].has(e) && (yield new XFAAttribute(this, e, this[e])); } else yield this[Gn]; } } class XFAObjectArray { constructor(e = 1 / 0) { this[Rn] = e; this[mn] = []; } get isXFAObject() { return !1; } get isXFAObjectArray() { return !0; } push(e) { if (this[mn].length <= this[Rn]) { this[mn].push(e); return !0; } warn(`XFA - node "${e[vs]}" accepts no more than ${this[Rn]} children`); return !1; } isEmpty() { return 0 === this[mn].length; } dump() { return 1 === this[mn].length ? this[mn][0][rs]() : this[mn].map((e) => e[rs]()); } [es]() { const e = new XFAObjectArray(this[Rn]); e[mn] = this[mn].map((e) => e[es]()); return e; } get children() { return this[mn]; } clear() { this[mn].length = 0; } } class XFAAttribute { constructor(e, t, i) { this[Gn] = e; this[vs] = t; this[is] = i; this[ts] = !1; this[gn] = 'attribute' + Ln++; } [ms]() { return this[Gn]; } [Ns]() { return !0; } [Bs]() { return this[is].trim(); } [en](e) { e = e.value || ''; this[is] = e.toString(); } [an]() { return this[is]; } [Gs](e) { return this[Gn] === e || this[Gn][Gs](e); } } class XmlObject extends XFAObject { constructor(e, t, i = {}) { super(e, t); this[is] = ''; this[wn] = null; if ('#text' !== t) { const e = new Map(); this[fn] = e; for (const [t, a] of Object.entries(i)) e.set(t, new XFAAttribute(this, t, a)); if (i.hasOwnProperty(Ts)) { const e = i[Ts].xfa.dataNode; void 0 !== e && ('dataGroup' === e ? (this[wn] = !1) : 'dataValue' === e && (this[wn] = !0)); } } this[ts] = !1; } [nn](e) { const t = this[vs]; if ('#text' === t) { e.push(encodeToXmlString(this[is])); return; } const i = utf8StringToString(t), a = this[Ys] === Hn ? 'xfa:' : ''; e.push(`<${a}${i}`); for (const [t, i] of this[fn].entries()) { const a = utf8StringToString(t); e.push(` ${a}="${encodeToXmlString(i[is])}"`); } null !== this[wn] && (this[wn] ? e.push(' xfa:dataNode="dataValue"') : e.push(' xfa:dataNode="dataGroup"')); if (this[is] || 0 !== this[mn].length) { e.push('>'); if (this[is]) 'string' == typeof this[is] ? e.push(encodeToXmlString(this[is])) : this[is][nn](e); else for (const t of this[mn]) t[nn](e); e.push(``); } else e.push('/>'); } [Ks](e) { if (this[is]) { const e = new XmlObject(this[Ys], '#text'); this[Vr](e); e[is] = this[is]; this[is] = ''; } this[Vr](e); return !0; } [Os](e) { this[is] += e; } [ns]() { if (this[is] && this[mn].length > 0) { const e = new XmlObject(this[Ys], '#text'); this[Vr](e); e[is] = this[is]; delete this[is]; } } [sn]() { return '#text' === this[vs] ? HTMLResult.success({ name: '#text', value: this[is] }) : HTMLResult.EMPTY; } [us](e = null) { return e ? this[mn].filter((t) => t[vs] === e) : this[mn]; } [Is]() { return this[fn]; } [Cs](e) { const t = this[fn].get(e); return void 0 !== t ? t : this[us](e); } *[ls](e, t) { const i = this[fn].get(e); i && (yield i); for (const i of this[mn]) { i[vs] === e && (yield i); t && (yield* i[ls](e, t)); } } *[gs](e, t) { const i = this[fn].get(e); !i || (t && i[ts]) || (yield i); for (const i of this[mn]) yield* i[gs](e, t); } *[Es](e, t, i) { for (const a of this[mn]) { a[vs] !== e || (i && a[ts]) || (yield a); t && (yield* a[Es](e, t, i)); } } [Ns]() { return null === this[wn] ? 0 === this[mn].length || this[mn][0][Ys] === cn.xhtml.id : this[wn]; } [Bs]() { return null === this[wn] ? 0 === this[mn].length ? this[is].trim() : this[mn][0][Ys] === cn.xhtml.id ? this[mn][0][an]().trim() : null : this[is].trim(); } [en](e) { e = e.value || ''; this[is] = e.toString(); } [rs](e = !1) { const t = Object.create(null); e && (t.$ns = this[Ys]); this[is] && (t.$content = this[is]); t.$name = this[vs]; t.children = []; for (const i of this[mn]) t.children.push(i[rs](e)); t.attributes = Object.create(null); for (const [e, i] of this[fn]) t.attributes[e] = i[is]; return t; } } class ContentObject extends XFAObject { constructor(e, t) { super(e, t); this[is] = ''; } [Os](e) { this[is] += e; } [ns]() {} } class OptionObject extends ContentObject { constructor(e, t, i) { super(e, t); this[Nn] = i; } [ns]() { this[is] = getKeyword({ data: this[is], defaultValue: this[Nn][0], validate: (e) => this[Nn].includes(e), }); } [zr](e) { super[zr](e); delete this[Nn]; } } class StringObject extends ContentObject { [ns]() { this[is] = this[is].trim(); } } class IntegerObject extends ContentObject { constructor(e, t, i, a) { super(e, t); this[bn] = i; this[Mn] = a; } [ns]() { this[is] = getInteger({ data: this[is], defaultValue: this[bn], validate: this[Mn], }); } [zr](e) { super[zr](e); delete this[bn]; delete this[Mn]; } } class Option01 extends IntegerObject { constructor(e, t) { super(e, t, 0, (e) => 1 === e); } } class Option10 extends IntegerObject { constructor(e, t) { super(e, t, 1, (e) => 0 === e); } } function measureToString(e) { return 'string' == typeof e ? '0px' : Number.isInteger(e) ? `${e}px` : `${e.toFixed(2)}px`; } const Jn = { anchorType(e, t) { const i = e[ps](); if (i && (!i.layout || 'position' === i.layout)) { 'transform' in t || (t.transform = ''); switch (e.anchorType) { case 'bottomCenter': t.transform += 'translate(-50%, -100%)'; break; case 'bottomLeft': t.transform += 'translate(0,-100%)'; break; case 'bottomRight': t.transform += 'translate(-100%,-100%)'; break; case 'middleCenter': t.transform += 'translate(-50%,-50%)'; break; case 'middleLeft': t.transform += 'translate(0,-50%)'; break; case 'middleRight': t.transform += 'translate(-100%,-50%)'; break; case 'topCenter': t.transform += 'translate(-50%,0)'; break; case 'topRight': t.transform += 'translate(-100%,0)'; } } }, dimensions(e, t) { const i = e[ps](); let a = e.w; const r = e.h; if (i.layout?.includes('row')) { const t = i[ss], r = e.colSpan; let s; if (-1 === r) { s = t.columnWidths.slice(t.currentColumn).reduce((e, t) => e + t, 0); t.currentColumn = 0; } else { s = t.columnWidths .slice(t.currentColumn, t.currentColumn + r) .reduce((e, t) => e + t, 0); t.currentColumn = (t.currentColumn + e.colSpan) % t.columnWidths.length; } isNaN(s) || (a = e.w = s); } t.width = '' !== a ? measureToString(a) : 'auto'; t.height = '' !== r ? measureToString(r) : 'auto'; }, position(e, t) { const i = e[ps](); if (!i?.layout || 'position' === i.layout) { t.position = 'absolute'; t.left = measureToString(e.x); t.top = measureToString(e.y); } }, rotate(e, t) { if (e.rotate) { 'transform' in t || (t.transform = ''); t.transform += `rotate(-${e.rotate}deg)`; t.transformOrigin = 'top left'; } }, presence(e, t) { switch (e.presence) { case 'invisible': t.visibility = 'hidden'; break; case 'hidden': case 'inactive': t.display = 'none'; } }, hAlign(e, t) { if ('para' === e[vs]) switch (e.hAlign) { case 'justifyAll': t.textAlign = 'justify-all'; break; case 'radix': t.textAlign = 'left'; break; default: t.textAlign = e.hAlign; } else switch (e.hAlign) { case 'left': t.alignSelf = 'start'; break; case 'center': t.alignSelf = 'center'; break; case 'right': t.alignSelf = 'end'; } }, margin(e, t) { e.margin && (t.margin = e.margin[on]().margin); }, }; function setMinMaxDimensions(e, t) { if ('position' === e[ps]().layout) { e.minW > 0 && (t.minWidth = measureToString(e.minW)); e.maxW > 0 && (t.maxWidth = measureToString(e.maxW)); e.minH > 0 && (t.minHeight = measureToString(e.minH)); e.maxH > 0 && (t.maxHeight = measureToString(e.maxH)); } } function layoutText(e, t, i, a, r, s) { const n = new TextMeasure(t, i, a, r); 'string' == typeof e ? n.addString(e) : e[Ws](n); return n.compute(s); } function layoutNode(e, t) { let i = null, a = null, r = !1; if ((!e.w || !e.h) && e.value) { let s = 0, n = 0; if (e.margin) { s = e.margin.leftInset + e.margin.rightInset; n = e.margin.topInset + e.margin.bottomInset; } let o = null, g = null; if (e.para) { g = Object.create(null); o = '' === e.para.lineHeight ? null : e.para.lineHeight; g.top = '' === e.para.spaceAbove ? 0 : e.para.spaceAbove; g.bottom = '' === e.para.spaceBelow ? 0 : e.para.spaceBelow; g.left = '' === e.para.marginLeft ? 0 : e.para.marginLeft; g.right = '' === e.para.marginRight ? 0 : e.para.marginRight; } let c = e.font; if (!c) { const t = e[ys](); let i = e[ms](); for (; i && i !== t; ) { if (i.font) { c = i.font; break; } i = i[ms](); } } const C = (e.w || t.width) - s, h = e[ws].fontFinder; if ( e.value.exData && e.value.exData[is] && 'text/html' === e.value.exData.contentType ) { const t = layoutText(e.value.exData[is], c, g, o, h, C); a = t.width; i = t.height; r = t.isBroken; } else { const t = e.value[an](); if (t) { const e = layoutText(t, c, g, o, h, C); a = e.width; i = e.height; r = e.isBroken; } } null === a || e.w || (a += s); null === i || e.h || (i += n); } return { w: a, h: i, isBroken: r }; } function computeBbox(e, t, i) { let a; if ('' !== e.w && '' !== e.h) a = [e.x, e.y, e.w, e.h]; else { if (!i) return null; let r = e.w; if ('' === r) { if (0 === e.maxW) { const t = e[ps](); r = 'position' === t.layout && '' !== t.w ? 0 : e.minW; } else r = Math.min(e.maxW, i.width); t.attributes.style.width = measureToString(r); } let s = e.h; if ('' === s) { if (0 === e.maxH) { const t = e[ps](); s = 'position' === t.layout && '' !== t.h ? 0 : e.minH; } else s = Math.min(e.maxH, i.height); t.attributes.style.height = measureToString(s); } a = [e.x, e.y, r, s]; } return a; } function fixDimensions(e) { const t = e[ps](); if (t.layout?.includes('row')) { const i = t[ss], a = e.colSpan; let r; r = -1 === a ? i.columnWidths.slice(i.currentColumn).reduce((e, t) => e + t, 0) : i.columnWidths .slice(i.currentColumn, i.currentColumn + a) .reduce((e, t) => e + t, 0); isNaN(r) || (e.w = r); } t.layout && 'position' !== t.layout && (e.x = e.y = 0); 'table' === e.layout && '' === e.w && Array.isArray(e.columnWidths) && (e.w = e.columnWidths.reduce((e, t) => e + t, 0)); } function layoutClass(e) { switch (e.layout) { case 'position': default: return 'xfaPosition'; case 'lr-tb': return 'xfaLrTb'; case 'rl-row': return 'xfaRlRow'; case 'rl-tb': return 'xfaRlTb'; case 'row': return 'xfaRow'; case 'table': return 'xfaTable'; case 'tb': return 'xfaTb'; } } function toStyle(e, ...t) { const i = Object.create(null); for (const a of t) { const t = e[a]; if (null !== t) if (Jn.hasOwnProperty(a)) Jn[a](e, i); else if (t instanceof XFAObject) { const e = t[on](); e ? Object.assign(i, e) : warn(`(DEBUG) - XFA - style for ${a} not implemented yet`); } } return i; } function createWrapper(e, t) { const { attributes: i } = t, { style: a } = i, r = { name: 'div', attributes: { class: ['xfaWrapper'], style: Object.create(null) }, children: [], }; i.class.push('xfaWrapped'); if (e.border) { const { widths: i, insets: s } = e.border[ss]; let n, o, g = s[0], c = s[3]; const C = s[0] + s[2], h = s[1] + s[3]; switch (e.border.hand) { case 'even': g -= i[0] / 2; c -= i[3] / 2; n = `calc(100% + ${(i[1] + i[3]) / 2 - h}px)`; o = `calc(100% + ${(i[0] + i[2]) / 2 - C}px)`; break; case 'left': g -= i[0]; c -= i[3]; n = `calc(100% + ${i[1] + i[3] - h}px)`; o = `calc(100% + ${i[0] + i[2] - C}px)`; break; case 'right': n = h ? `calc(100% - ${h}px)` : '100%'; o = C ? `calc(100% - ${C}px)` : '100%'; } const l = ['xfaBorder']; isPrintOnly(e.border) && l.push('xfaPrintOnly'); const Q = { name: 'div', attributes: { class: l, style: { top: `${g}px`, left: `${c}px`, width: n, height: o }, }, children: [], }; for (const e of [ 'border', 'borderWidth', 'borderColor', 'borderRadius', 'borderStyle', ]) if (void 0 !== a[e]) { Q.attributes.style[e] = a[e]; delete a[e]; } r.children.push(Q, t); } else r.children.push(t); for (const e of [ 'background', 'backgroundClip', 'top', 'left', 'width', 'height', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight', 'transform', 'transformOrigin', 'visibility', ]) if (void 0 !== a[e]) { r.attributes.style[e] = a[e]; delete a[e]; } r.attributes.style.position = 'absolute' === a.position ? 'absolute' : 'relative'; delete a.position; if (a.alignSelf) { r.attributes.style.alignSelf = a.alignSelf; delete a.alignSelf; } return r; } function fixTextIndent(e) { const t = getMeasurement(e.textIndent, '0px'); if (t >= 0) return; const i = 'padding' + ('left' === ('right' === e.textAlign ? 'right' : 'left') ? 'Left' : 'Right'), a = getMeasurement(e[i], '0px'); e[i] = a - t + 'px'; } function setAccess(e, t) { switch (e.access) { case 'nonInteractive': t.push('xfaNonInteractive'); break; case 'readOnly': t.push('xfaReadOnly'); break; case 'protected': t.push('xfaDisabled'); } } function isPrintOnly(e) { return ( e.relevant.length > 0 && !e.relevant[0].excluded && 'print' === e.relevant[0].viewname ); } function getCurrentPara(e) { const t = e[ys]()[ss].paraStack; return t.length ? t.at(-1) : null; } function setPara(e, t, i) { if (i.attributes.class?.includes('xfaRich')) { if (t) { '' === e.h && (t.height = 'auto'); '' === e.w && (t.width = 'auto'); } const a = getCurrentPara(e); if (a) { const e = i.attributes.style; e.display = 'flex'; e.flexDirection = 'column'; switch (a.vAlign) { case 'top': e.justifyContent = 'start'; break; case 'bottom': e.justifyContent = 'end'; break; case 'middle': e.justifyContent = 'center'; } const t = a[on](); for (const [i, a] of Object.entries(t)) i in e || (e[i] = a); } } } function setFontFamily(e, t, i, a) { if (!i) { delete a.fontFamily; return; } const r = stripQuotes(e.typeface); a.fontFamily = `"${r}"`; const s = i.find(r); if (s) { const { fontFamily: i } = s.regular.cssFontInfo; i !== r && (a.fontFamily = `"${i}"`); const n = getCurrentPara(t); if (n && '' !== n.lineHeight) return; if (a.lineHeight) return; const o = selectFont(e, s); o && (a.lineHeight = Math.max(1.2, o.lineHeight)); } } function fixURL(e) { const t = createValidAbsoluteUrl(e, null, { addDefaultProtocol: !0, tryConvertEncoding: !0, }); return t ? t.href : null; } function createLine(e, t) { return { name: 'div', attributes: { class: ['lr-tb' === e.layout ? 'xfaLr' : 'xfaRl'] }, children: t, }; } function flushHTML(e) { if (!e[ss]) return null; const t = { name: 'div', attributes: e[ss].attributes, children: e[ss].children, }; if (e[ss].failingNode) { const i = e[ss].failingNode[os](); i && (e.layout.endsWith('-tb') ? t.children.push(createLine(e, [i])) : t.children.push(i)); } return 0 === t.children.length ? null : t; } function addHTML(e, t, i) { const a = e[ss], r = a.availableSpace, [s, n, o, g] = i; switch (e.layout) { case 'position': a.width = Math.max(a.width, s + o); a.height = Math.max(a.height, n + g); a.children.push(t); break; case 'lr-tb': case 'rl-tb': if (!a.line || 1 === a.attempt) { a.line = createLine(e, []); a.children.push(a.line); a.numberInLine = 0; } a.numberInLine += 1; a.line.children.push(t); if (0 === a.attempt) { a.currentWidth += o; a.height = Math.max(a.height, a.prevHeight + g); } else { a.currentWidth = o; a.prevHeight = a.height; a.height += g; a.attempt = 0; } a.width = Math.max(a.width, a.currentWidth); break; case 'rl-row': case 'row': { a.children.push(t); a.width += o; a.height = Math.max(a.height, g); const e = measureToString(a.height); for (const t of a.children) t.attributes.style.height = e; break; } case 'table': case 'tb': a.width = Math.min(r.width, Math.max(a.width, o)); a.height += g; a.children.push(t); } } function getAvailableSpace(e) { const t = e[ss].availableSpace, i = e.margin ? e.margin.topInset + e.margin.bottomInset : 0, a = e.margin ? e.margin.leftInset + e.margin.rightInset : 0; switch (e.layout) { case 'lr-tb': case 'rl-tb': return 0 === e[ss].attempt ? { width: t.width - a - e[ss].currentWidth, height: t.height - i - e[ss].prevHeight, } : { width: t.width - a, height: t.height - i - e[ss].height }; case 'rl-row': case 'row': return { width: e[ss].columnWidths .slice(e[ss].currentColumn) .reduce((e, t) => e + t), height: t.height - a, }; case 'table': case 'tb': return { width: t.width - a, height: t.height - i - e[ss].height }; default: return t; } } function checkDimensions(e, t) { if (null === e[ys]()[ss].firstUnsplittable) return !0; if (0 === e.w || 0 === e.h) return !0; const i = e[ps](), a = i[ss]?.attempt || 0, [, r, s, n] = (function getTransformedBBox(e) { let t, i, a = '' === e.w ? NaN : e.w, r = '' === e.h ? NaN : e.h, [s, n] = [0, 0]; switch (e.anchorType || '') { case 'bottomCenter': [s, n] = [a / 2, r]; break; case 'bottomLeft': [s, n] = [0, r]; break; case 'bottomRight': [s, n] = [a, r]; break; case 'middleCenter': [s, n] = [a / 2, r / 2]; break; case 'middleLeft': [s, n] = [0, r / 2]; break; case 'middleRight': [s, n] = [a, r / 2]; break; case 'topCenter': [s, n] = [a / 2, 0]; break; case 'topRight': [s, n] = [a, 0]; } switch (e.rotate || 0) { case 0: [t, i] = [-s, -n]; break; case 90: [t, i] = [-n, s]; [a, r] = [r, -a]; break; case 180: [t, i] = [s, n]; [a, r] = [-a, -r]; break; case 270: [t, i] = [n, -s]; [a, r] = [-r, a]; } return [ e.x + t + Math.min(0, a), e.y + i + Math.min(0, r), Math.abs(a), Math.abs(r), ]; })(e); switch (i.layout) { case 'lr-tb': case 'rl-tb': return 0 === a ? e[ys]()[ss].noLayoutFailure ? '' !== e.w ? Math.round(s - t.width) <= 2 : t.width > 2 : !('' !== e.h && Math.round(n - t.height) > 2) && ('' !== e.w ? Math.round(s - t.width) <= 2 || (0 === i[ss].numberInLine && t.height > 2) : t.width > 2) : !!e[ys]()[ss].noLayoutFailure || (!('' !== e.h && Math.round(n - t.height) > 2) && ('' === e.w || Math.round(s - t.width) <= 2 || !i[Ms]()) && t.height > 2); case 'table': case 'tb': return ( !!e[ys]()[ss].noLayoutFailure || ('' === e.h || e[Us]() ? ('' === e.w || Math.round(s - t.width) <= 2 || !i[Ms]()) && t.height > 2 : Math.round(n - t.height) <= 2) ); case 'position': if (e[ys]()[ss].noLayoutFailure) return !0; if ('' === e.h || Math.round(n + r - t.height) <= 2) return !0; return n + r > e[ys]()[ss].currentContentArea.h; case 'rl-row': case 'row': return ( !!e[ys]()[ss].noLayoutFailure || '' === e.h || Math.round(n - t.height) <= 2 ); default: return !0; } } const Yn = cn.template.id, vn = 'http://www.w3.org/2000/svg', Tn = /^H(\d+)$/, Kn = new Set([ 'image/gif', 'image/jpeg', 'image/jpg', 'image/pjpeg', 'image/png', 'image/apng', 'image/x-png', 'image/bmp', 'image/x-ms-bmp', 'image/tiff', 'image/tif', 'application/octet-stream', ]), qn = [ [[66, 77], 'image/bmp'], [[255, 216, 255], 'image/jpeg'], [[73, 73, 42, 0], 'image/tiff'], [[77, 77, 0, 42], 'image/tiff'], [[71, 73, 70, 56, 57, 97], 'image/gif'], [[137, 80, 78, 71, 13, 10, 26, 10], 'image/png'], ]; function getBorderDims(e) { if (!e || !e.border) return { w: 0, h: 0 }; const t = e.border[Qs](); return t ? { w: t.widths[0] + t.widths[2] + t.insets[0] + t.insets[2], h: t.widths[1] + t.widths[3] + t.insets[1] + t.insets[3], } : { w: 0, h: 0 }; } function hasMargin(e) { return ( e.margin && (e.margin.topInset || e.margin.rightInset || e.margin.bottomInset || e.margin.leftInset) ); } function _setValue(e, t) { if (!e.value) { const t = new Value({}); e[Vr](t); e.value = t; } e.value[en](t); } function* getContainedChildren(e) { for (const t of e[us]()) t instanceof SubformSet ? yield* t[ds]() : yield t; } function isRequired(e) { return 'error' === e.validate?.nullTest; } function setTabIndex(e) { for (; e; ) { if (!e.traversal) { e[tn] = e[ms]()[tn]; return; } if (e[tn]) return; let t = null; for (const i of e.traversal[us]()) if ('next' === i.operation) { t = i; break; } if (!t || !t.ref) { e[tn] = e[ms]()[tn]; return; } const i = e[ys](); e[tn] = ++i[tn]; const a = i[zs](t.ref, e); if (!a) return; e = a[0]; } } function applyAssist(e, t) { const i = e.assist; if (i) { const e = i[sn](); e && (t.title = e); const a = i.role.match(Tn); if (a) { const e = 'heading', i = a[1]; t.role = e; t['aria-level'] = i; } } if ('table' === e.layout) t.role = 'table'; else if ('row' === e.layout) t.role = 'row'; else { const i = e[ms](); 'row' === i.layout && (t.role = 'TH' === i.assist?.role ? 'columnheader' : 'cell'); } } function ariaLabel(e) { if (!e.assist) return null; const t = e.assist; return t.speak && '' !== t.speak[is] ? t.speak[is] : t.toolTip ? t.toolTip[is] : null; } function valueToHtml(e) { return HTMLResult.success({ name: 'div', attributes: { class: ['xfaRich'], style: Object.create(null) }, children: [ { name: 'span', attributes: { style: Object.create(null) }, value: e }, ], }); } function setFirstUnsplittable(e) { const t = e[ys](); if (null === t[ss].firstUnsplittable) { t[ss].firstUnsplittable = e; t[ss].noLayoutFailure = !0; } } function unsetFirstUnsplittable(e) { const t = e[ys](); t[ss].firstUnsplittable === e && (t[ss].noLayoutFailure = !1); } function handleBreak(e) { if (e[ss]) return !1; e[ss] = Object.create(null); if ('auto' === e.targetType) return !1; const t = e[ys](); let i = null; if (e.target) { i = t[zs](e.target, e[ms]()); if (!i) return !1; i = i[0]; } const { currentPageArea: a, currentContentArea: r } = t[ss]; if ('pageArea' === e.targetType) { i instanceof PageArea || (i = null); if (e.startNew) { e[ss].target = i || a; return !0; } if (i && i !== a) { e[ss].target = i; return !0; } return !1; } i instanceof ContentArea || (i = null); const s = i && i[ms](); let n, o = s; if (e.startNew) if (i) { const e = s.contentArea.children, t = e.indexOf(r), a = e.indexOf(i); -1 !== t && t < a && (o = null); n = a - 1; } else n = a.contentArea.children.indexOf(r); else { if (!i || i === r) return !1; n = s.contentArea.children.indexOf(i) - 1; o = s === a ? null : s; } e[ss].target = o; e[ss].index = n; return !0; } function handleOverflow(e, t, i) { const a = e[ys](), r = a[ss].noLayoutFailure, s = t[ps]; t[ps] = () => e; a[ss].noLayoutFailure = !0; const n = t[sn](i); e[Zr](n.html, n.bbox); a[ss].noLayoutFailure = r; t[ps] = s; } class AppearanceFilter extends StringObject { constructor(e) { super(Yn, 'appearanceFilter'); this.id = e.id || ''; this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Arc extends XFAObject { constructor(e) { super(Yn, 'arc', !0); this.circular = getInteger({ data: e.circular, defaultValue: 0, validate: (e) => 1 === e, }); this.hand = getStringOption(e.hand, ['even', 'left', 'right']); this.id = e.id || ''; this.startAngle = getFloat({ data: e.startAngle, defaultValue: 0, validate: (e) => !0, }); this.sweepAngle = getFloat({ data: e.sweepAngle, defaultValue: 360, validate: (e) => !0, }); this.use = e.use || ''; this.usehref = e.usehref || ''; this.edge = null; this.fill = null; } [sn]() { const e = this.edge || new Edge({}), t = e[on](), i = Object.create(null); 'visible' === this.fill?.presence ? Object.assign(i, this.fill[on]()) : (i.fill = 'transparent'); i.strokeWidth = measureToString('visible' === e.presence ? e.thickness : 0); i.stroke = t.color; let a; const r = { xmlns: vn, style: { width: '100%', height: '100%', overflow: 'visible' }, }; if (360 === this.sweepAngle) a = { name: 'ellipse', attributes: { xmlns: vn, cx: '50%', cy: '50%', rx: '50%', ry: '50%', style: i, }, }; else { const e = (this.startAngle * Math.PI) / 180, t = (this.sweepAngle * Math.PI) / 180, s = this.sweepAngle > 180 ? 1 : 0, [n, o, g, c] = [ 50 * (1 + Math.cos(e)), 50 * (1 - Math.sin(e)), 50 * (1 + Math.cos(e + t)), 50 * (1 - Math.sin(e + t)), ]; a = { name: 'path', attributes: { xmlns: vn, d: `M ${n} ${o} A 50 50 0 ${s} 0 ${g} ${c}`, vectorEffect: 'non-scaling-stroke', style: i, }, }; Object.assign(r, { viewBox: '0 0 100 100', preserveAspectRatio: 'none' }); } const s = { name: 'svg', children: [a], attributes: r }; if (hasMargin(this[ms]()[ms]())) return HTMLResult.success({ name: 'div', attributes: { style: { display: 'inline', width: '100%', height: '100%' }, }, children: [s], }); s.attributes.style.position = 'absolute'; return HTMLResult.success(s); } } class Area extends XFAObject { constructor(e) { super(Yn, 'area', !0); this.colSpan = getInteger({ data: e.colSpan, defaultValue: 1, validate: (e) => e >= 1 || -1 === e, }); this.id = e.id || ''; this.name = e.name || ''; this.relevant = getRelevant(e.relevant); this.use = e.use || ''; this.usehref = e.usehref || ''; this.x = getMeasurement(e.x, '0pt'); this.y = getMeasurement(e.y, '0pt'); this.desc = null; this.extras = null; this.area = new XFAObjectArray(); this.draw = new XFAObjectArray(); this.exObject = new XFAObjectArray(); this.exclGroup = new XFAObjectArray(); this.field = new XFAObjectArray(); this.subform = new XFAObjectArray(); this.subformSet = new XFAObjectArray(); } *[ds]() { yield* getContainedChildren(this); } [Ls]() { return !0; } [Rs]() { return !0; } [Zr](e, t) { const [i, a, r, s] = t; this[ss].width = Math.max(this[ss].width, i + r); this[ss].height = Math.max(this[ss].height, a + s); this[ss].children.push(e); } [cs]() { return this[ss].availableSpace; } [sn](e) { const t = toStyle(this, 'position'), i = { style: t, id: this[gn], class: ['xfaArea'] }; isPrintOnly(this) && i.class.push('xfaPrintOnly'); this.name && (i.xfaName = this.name); const a = []; this[ss] = { children: a, width: 0, height: 0, availableSpace: e }; const r = this[_r]({ filter: new Set([ 'area', 'draw', 'field', 'exclGroup', 'subform', 'subformSet', ]), include: !0, }); if (!r.success) { if (r.isBreak()) return r; delete this[ss]; return HTMLResult.FAILURE; } t.width = measureToString(this[ss].width); t.height = measureToString(this[ss].height); const s = { name: 'div', attributes: i, children: a }, n = [this.x, this.y, this[ss].width, this[ss].height]; delete this[ss]; return HTMLResult.success(s, n); } } class Assist extends XFAObject { constructor(e) { super(Yn, 'assist', !0); this.id = e.id || ''; this.role = e.role || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.speak = null; this.toolTip = null; } [sn]() { return this.toolTip?.[is] || null; } } class Barcode extends XFAObject { constructor(e) { super(Yn, 'barcode', !0); this.charEncoding = getKeyword({ data: e.charEncoding ? e.charEncoding.toLowerCase() : '', defaultValue: '', validate: (e) => [ 'utf-8', 'big-five', 'fontspecific', 'gbk', 'gb-18030', 'gb-2312', 'ksc-5601', 'none', 'shift-jis', 'ucs-2', 'utf-16', ].includes(e) || e.match(/iso-8859-\d{2}/), }); this.checksum = getStringOption(e.checksum, [ 'none', '1mod10', '1mod10_1mod11', '2mod10', 'auto', ]); this.dataColumnCount = getInteger({ data: e.dataColumnCount, defaultValue: -1, validate: (e) => e >= 0, }); this.dataLength = getInteger({ data: e.dataLength, defaultValue: -1, validate: (e) => e >= 0, }); this.dataPrep = getStringOption(e.dataPrep, ['none', 'flateCompress']); this.dataRowCount = getInteger({ data: e.dataRowCount, defaultValue: -1, validate: (e) => e >= 0, }); this.endChar = e.endChar || ''; this.errorCorrectionLevel = getInteger({ data: e.errorCorrectionLevel, defaultValue: -1, validate: (e) => e >= 0 && e <= 8, }); this.id = e.id || ''; this.moduleHeight = getMeasurement(e.moduleHeight, '5mm'); this.moduleWidth = getMeasurement(e.moduleWidth, '0.25mm'); this.printCheckDigit = getInteger({ data: e.printCheckDigit, defaultValue: 0, validate: (e) => 1 === e, }); this.rowColumnRatio = getRatio(e.rowColumnRatio); this.startChar = e.startChar || ''; this.textLocation = getStringOption(e.textLocation, [ 'below', 'above', 'aboveEmbedded', 'belowEmbedded', 'none', ]); this.truncate = getInteger({ data: e.truncate, defaultValue: 0, validate: (e) => 1 === e, }); this.type = getStringOption(e.type ? e.type.toLowerCase() : '', [ 'aztec', 'codabar', 'code2of5industrial', 'code2of5interleaved', 'code2of5matrix', 'code2of5standard', 'code3of9', 'code3of9extended', 'code11', 'code49', 'code93', 'code128', 'code128a', 'code128b', 'code128c', 'code128sscc', 'datamatrix', 'ean8', 'ean8add2', 'ean8add5', 'ean13', 'ean13add2', 'ean13add5', 'ean13pwcd', 'fim', 'logmars', 'maxicode', 'msi', 'pdf417', 'pdf417macro', 'plessey', 'postauscust2', 'postauscust3', 'postausreplypaid', 'postausstandard', 'postukrm4scc', 'postusdpbc', 'postusimb', 'postusstandard', 'postus5zip', 'qrcode', 'rfid', 'rss14', 'rss14expanded', 'rss14limited', 'rss14stacked', 'rss14stackedomni', 'rss14truncated', 'telepen', 'ucc128', 'ucc128random', 'ucc128sscc', 'upca', 'upcaadd2', 'upcaadd5', 'upcapwcd', 'upce', 'upceadd2', 'upceadd5', 'upcean2', 'upcean5', 'upsmaxicode', ]); this.upsMode = getStringOption(e.upsMode, [ 'usCarrier', 'internationalCarrier', 'secureSymbol', 'standardSymbol', ]); this.use = e.use || ''; this.usehref = e.usehref || ''; this.wideNarrowRatio = getRatio(e.wideNarrowRatio); this.encrypt = null; this.extras = null; } } class Bind extends XFAObject { constructor(e) { super(Yn, 'bind', !0); this.match = getStringOption(e.match, [ 'once', 'dataRef', 'global', 'none', ]); this.ref = e.ref || ''; this.picture = null; } } class BindItems extends XFAObject { constructor(e) { super(Yn, 'bindItems'); this.connection = e.connection || ''; this.labelRef = e.labelRef || ''; this.ref = e.ref || ''; this.valueRef = e.valueRef || ''; } } class Bookend extends XFAObject { constructor(e) { super(Yn, 'bookend'); this.id = e.id || ''; this.leader = e.leader || ''; this.trailer = e.trailer || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class BooleanElement extends Option01 { constructor(e) { super(Yn, 'boolean'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } [sn](e) { return valueToHtml(1 === this[is] ? '1' : '0'); } } class Border extends XFAObject { constructor(e) { super(Yn, 'border', !0); this.break = getStringOption(e.break, ['close', 'open']); this.hand = getStringOption(e.hand, ['even', 'left', 'right']); this.id = e.id || ''; this.presence = getStringOption(e.presence, [ 'visible', 'hidden', 'inactive', 'invisible', ]); this.relevant = getRelevant(e.relevant); this.use = e.use || ''; this.usehref = e.usehref || ''; this.corner = new XFAObjectArray(4); this.edge = new XFAObjectArray(4); this.extras = null; this.fill = null; this.margin = null; } [Qs]() { if (!this[ss]) { const e = this.edge.children.slice(); if (e.length < 4) { const t = e.at(-1) || new Edge({}); for (let i = e.length; i < 4; i++) e.push(t); } const t = e.map((e) => e.thickness), i = [0, 0, 0, 0]; if (this.margin) { i[0] = this.margin.topInset; i[1] = this.margin.rightInset; i[2] = this.margin.bottomInset; i[3] = this.margin.leftInset; } this[ss] = { widths: t, insets: i, edges: e }; } return this[ss]; } [on]() { const { edges: e } = this[Qs](), t = e.map((e) => { const t = e[on](); t.color ||= '#000000'; return t; }), i = Object.create(null); this.margin && Object.assign(i, this.margin[on]()); 'visible' === this.fill?.presence && Object.assign(i, this.fill[on]()); if (this.corner.children.some((e) => 0 !== e.radius)) { const e = this.corner.children.map((e) => e[on]()); if (2 === e.length || 3 === e.length) { const t = e.at(-1); for (let i = e.length; i < 4; i++) e.push(t); } i.borderRadius = e.map((e) => e.radius).join(' '); } switch (this.presence) { case 'invisible': case 'hidden': i.borderStyle = ''; break; case 'inactive': i.borderStyle = 'none'; break; default: i.borderStyle = t.map((e) => e.style).join(' '); } i.borderWidth = t.map((e) => e.width).join(' '); i.borderColor = t.map((e) => e.color).join(' '); return i; } } class Break extends XFAObject { constructor(e) { super(Yn, 'break', !0); this.after = getStringOption(e.after, [ 'auto', 'contentArea', 'pageArea', 'pageEven', 'pageOdd', ]); this.afterTarget = e.afterTarget || ''; this.before = getStringOption(e.before, [ 'auto', 'contentArea', 'pageArea', 'pageEven', 'pageOdd', ]); this.beforeTarget = e.beforeTarget || ''; this.bookendLeader = e.bookendLeader || ''; this.bookendTrailer = e.bookendTrailer || ''; this.id = e.id || ''; this.overflowLeader = e.overflowLeader || ''; this.overflowTarget = e.overflowTarget || ''; this.overflowTrailer = e.overflowTrailer || ''; this.startNew = getInteger({ data: e.startNew, defaultValue: 0, validate: (e) => 1 === e, }); this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; } } class BreakAfter extends XFAObject { constructor(e) { super(Yn, 'breakAfter', !0); this.id = e.id || ''; this.leader = e.leader || ''; this.startNew = getInteger({ data: e.startNew, defaultValue: 0, validate: (e) => 1 === e, }); this.target = e.target || ''; this.targetType = getStringOption(e.targetType, [ 'auto', 'contentArea', 'pageArea', ]); this.trailer = e.trailer || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.script = null; } } class BreakBefore extends XFAObject { constructor(e) { super(Yn, 'breakBefore', !0); this.id = e.id || ''; this.leader = e.leader || ''; this.startNew = getInteger({ data: e.startNew, defaultValue: 0, validate: (e) => 1 === e, }); this.target = e.target || ''; this.targetType = getStringOption(e.targetType, [ 'auto', 'contentArea', 'pageArea', ]); this.trailer = e.trailer || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.script = null; } [sn](e) { this[ss] = {}; return HTMLResult.FAILURE; } } class Button extends XFAObject { constructor(e) { super(Yn, 'button', !0); this.highlight = getStringOption(e.highlight, [ 'inverted', 'none', 'outline', 'push', ]); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; } [sn](e) { const t = this[ms]()[ms](), i = { name: 'button', attributes: { id: this[gn], class: ['xfaButton'], style: {} }, children: [], }; for (const e of t.event.children) { if ('click' !== e.activity || !e.script) continue; const t = recoverJsURL(e.script[is]); if (!t) continue; const a = fixURL(t.url); a && i.children.push({ name: 'a', attributes: { id: 'link' + this[gn], href: a, newWindow: t.newWindow, class: ['xfaLink'], style: {}, }, children: [], }); } return HTMLResult.success(i); } } class Calculate extends XFAObject { constructor(e) { super(Yn, 'calculate', !0); this.id = e.id || ''; this.override = getStringOption(e.override, [ 'disabled', 'error', 'ignore', 'warning', ]); this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; this.message = null; this.script = null; } } class Caption extends XFAObject { constructor(e) { super(Yn, 'caption', !0); this.id = e.id || ''; this.placement = getStringOption(e.placement, [ 'left', 'bottom', 'inline', 'right', 'top', ]); this.presence = getStringOption(e.presence, [ 'visible', 'hidden', 'inactive', 'invisible', ]); this.reserve = Math.ceil(getMeasurement(e.reserve)); this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; this.font = null; this.margin = null; this.para = null; this.value = null; } [en](e) { _setValue(this, e); } [Qs](e) { if (!this[ss]) { let { width: t, height: i } = e; switch (this.placement) { case 'left': case 'right': case 'inline': t = this.reserve <= 0 ? t : this.reserve; break; case 'top': case 'bottom': i = this.reserve <= 0 ? i : this.reserve; } this[ss] = layoutNode(this, { width: t, height: i }); } return this[ss]; } [sn](e) { if (!this.value) return HTMLResult.EMPTY; this[Xs](); const t = this.value[sn](e).html; if (!t) { this[js](); return HTMLResult.EMPTY; } const i = this.reserve; if (this.reserve <= 0) { const { w: t, h: i } = this[Qs](e); switch (this.placement) { case 'left': case 'right': case 'inline': this.reserve = t; break; case 'top': case 'bottom': this.reserve = i; } } const a = []; 'string' == typeof t ? a.push({ name: '#text', value: t }) : a.push(t); const r = toStyle(this, 'font', 'margin', 'visibility'); switch (this.placement) { case 'left': case 'right': this.reserve > 0 && (r.width = measureToString(this.reserve)); break; case 'top': case 'bottom': this.reserve > 0 && (r.height = measureToString(this.reserve)); } setPara(this, null, t); this[js](); this.reserve = i; return HTMLResult.success({ name: 'div', attributes: { style: r, class: ['xfaCaption'] }, children: a, }); } } class Certificate extends StringObject { constructor(e) { super(Yn, 'certificate'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Certificates extends XFAObject { constructor(e) { super(Yn, 'certificates', !0); this.credentialServerPolicy = getStringOption(e.credentialServerPolicy, [ 'optional', 'required', ]); this.id = e.id || ''; this.url = e.url || ''; this.urlPolicy = e.urlPolicy || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.encryption = null; this.issuers = null; this.keyUsage = null; this.oids = null; this.signing = null; this.subjectDNs = null; } } class CheckButton extends XFAObject { constructor(e) { super(Yn, 'checkButton', !0); this.id = e.id || ''; this.mark = getStringOption(e.mark, [ 'default', 'check', 'circle', 'cross', 'diamond', 'square', 'star', ]); this.shape = getStringOption(e.shape, ['square', 'round']); this.size = getMeasurement(e.size, '10pt'); this.use = e.use || ''; this.usehref = e.usehref || ''; this.border = null; this.extras = null; this.margin = null; } [sn](e) { const t = toStyle('margin'), i = measureToString(this.size); t.width = t.height = i; let a, r, s; const n = this[ms]()[ms](), o = (n.items.children.length && n.items.children[0][sn]().html) || [], g = { on: (void 0 !== o[0] ? o[0] : 'on').toString(), off: (void 0 !== o[1] ? o[1] : 'off').toString(), }, c = (n.value?.[an]() || 'off') === g.on || void 0, C = n[ps](), h = n[gn]; let l; if (C instanceof ExclGroup) { s = C[gn]; a = 'radio'; r = 'xfaRadio'; l = C[as]?.[gn] || C[gn]; } else { a = 'checkbox'; r = 'xfaCheckbox'; l = n[as]?.[gn] || n[gn]; } const Q = { name: 'input', attributes: { class: [r], style: t, fieldId: h, dataId: l, type: a, checked: c, xfaOn: g.on, xfaOff: g.off, 'aria-label': ariaLabel(n), 'aria-required': !1, }, }; s && (Q.attributes.name = s); if (isRequired(n)) { Q.attributes['aria-required'] = !0; Q.attributes.required = !0; } return HTMLResult.success({ name: 'label', attributes: { class: ['xfaLabel'] }, children: [Q], }); } } class ChoiceList extends XFAObject { constructor(e) { super(Yn, 'choiceList', !0); this.commitOn = getStringOption(e.commitOn, ['select', 'exit']); this.id = e.id || ''; this.open = getStringOption(e.open, [ 'userControl', 'always', 'multiSelect', 'onEntry', ]); this.textEntry = getInteger({ data: e.textEntry, defaultValue: 0, validate: (e) => 1 === e, }); this.use = e.use || ''; this.usehref = e.usehref || ''; this.border = null; this.extras = null; this.margin = null; } [sn](e) { const t = toStyle(this, 'border', 'margin'), i = this[ms]()[ms](), a = { fontSize: `calc(${i.font?.size || 10}px * var(--scale-factor))` }, r = []; if (i.items.children.length > 0) { const e = i.items; let t = 0, s = 0; if (2 === e.children.length) { t = e.children[0].save; s = 1 - t; } const n = e.children[t][sn]().html, o = e.children[s][sn]().html; let g = !1; const c = i.value?.[an]() || ''; for (let e = 0, t = n.length; e < t; e++) { const t = { name: 'option', attributes: { value: o[e] || n[e], style: a }, value: n[e], }; o[e] === c && (t.attributes.selected = g = !0); r.push(t); } g || r.splice(0, 0, { name: 'option', attributes: { hidden: !0, selected: !0 }, value: ' ', }); } const s = { class: ['xfaSelect'], fieldId: i[gn], dataId: i[as]?.[gn] || i[gn], style: t, 'aria-label': ariaLabel(i), 'aria-required': !1, }; if (isRequired(i)) { s['aria-required'] = !0; s.required = !0; } 'multiSelect' === this.open && (s.multiple = !0); return HTMLResult.success({ name: 'label', attributes: { class: ['xfaLabel'] }, children: [{ name: 'select', children: r, attributes: s }], }); } } class Color extends XFAObject { constructor(e) { super(Yn, 'color', !0); this.cSpace = getStringOption(e.cSpace, ['SRGB']); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.value = e.value ? (function getColor(e, t = [0, 0, 0]) { let [i, a, r] = t; if (!e) return { r: i, g: a, b: r }; const s = e .trim() .split(/\s*,\s*/) .map((e) => Math.min(Math.max(0, parseInt(e.trim(), 10)), 255)) .map((e) => (isNaN(e) ? 0 : e)); if (s.length < 3) return { r: i, g: a, b: r }; [i, a, r] = s; return { r: i, g: a, b: r }; })(e.value) : ''; this.extras = null; } [bs]() { return !1; } [on]() { return this.value ? Util.makeHexColor(this.value.r, this.value.g, this.value.b) : null; } } class Comb extends XFAObject { constructor(e) { super(Yn, 'comb'); this.id = e.id || ''; this.numberOfCells = getInteger({ data: e.numberOfCells, defaultValue: 0, validate: (e) => e >= 0, }); this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Connect extends XFAObject { constructor(e) { super(Yn, 'connect', !0); this.connection = e.connection || ''; this.id = e.id || ''; this.ref = e.ref || ''; this.usage = getStringOption(e.usage, [ 'exportAndImport', 'exportOnly', 'importOnly', ]); this.use = e.use || ''; this.usehref = e.usehref || ''; this.picture = null; } } class ContentArea extends XFAObject { constructor(e) { super(Yn, 'contentArea', !0); this.h = getMeasurement(e.h); this.id = e.id || ''; this.name = e.name || ''; this.relevant = getRelevant(e.relevant); this.use = e.use || ''; this.usehref = e.usehref || ''; this.w = getMeasurement(e.w); this.x = getMeasurement(e.x, '0pt'); this.y = getMeasurement(e.y, '0pt'); this.desc = null; this.extras = null; } [sn](e) { const t = { left: measureToString(this.x), top: measureToString(this.y), width: measureToString(this.w), height: measureToString(this.h), }, i = ['xfaContentarea']; isPrintOnly(this) && i.push('xfaPrintOnly'); return HTMLResult.success({ name: 'div', children: [], attributes: { style: t, class: i, id: this[gn] }, }); } } class Corner extends XFAObject { constructor(e) { super(Yn, 'corner', !0); this.id = e.id || ''; this.inverted = getInteger({ data: e.inverted, defaultValue: 0, validate: (e) => 1 === e, }); this.join = getStringOption(e.join, ['square', 'round']); this.presence = getStringOption(e.presence, [ 'visible', 'hidden', 'inactive', 'invisible', ]); this.radius = getMeasurement(e.radius); this.stroke = getStringOption(e.stroke, [ 'solid', 'dashDot', 'dashDotDot', 'dashed', 'dotted', 'embossed', 'etched', 'lowered', 'raised', ]); this.thickness = getMeasurement(e.thickness, '0.5pt'); this.use = e.use || ''; this.usehref = e.usehref || ''; this.color = null; this.extras = null; } [on]() { const e = toStyle(this, 'visibility'); e.radius = measureToString('square' === this.join ? 0 : this.radius); return e; } } class DateElement extends ContentObject { constructor(e) { super(Yn, 'date'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } [ns]() { const e = this[is].trim(); this[is] = e ? new Date(e) : null; } [sn](e) { return valueToHtml(this[is] ? this[is].toString() : ''); } } class DateTime extends ContentObject { constructor(e) { super(Yn, 'dateTime'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } [ns]() { const e = this[is].trim(); this[is] = e ? new Date(e) : null; } [sn](e) { return valueToHtml(this[is] ? this[is].toString() : ''); } } class DateTimeEdit extends XFAObject { constructor(e) { super(Yn, 'dateTimeEdit', !0); this.hScrollPolicy = getStringOption(e.hScrollPolicy, [ 'auto', 'off', 'on', ]); this.id = e.id || ''; this.picker = getStringOption(e.picker, ['host', 'none']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.border = null; this.comb = null; this.extras = null; this.margin = null; } [sn](e) { const t = toStyle(this, 'border', 'font', 'margin'), i = this[ms]()[ms](), a = { name: 'input', attributes: { type: 'text', fieldId: i[gn], dataId: i[as]?.[gn] || i[gn], class: ['xfaTextfield'], style: t, 'aria-label': ariaLabel(i), 'aria-required': !1, }, }; if (isRequired(i)) { a.attributes['aria-required'] = !0; a.attributes.required = !0; } return HTMLResult.success({ name: 'label', attributes: { class: ['xfaLabel'] }, children: [a], }); } } class Decimal extends ContentObject { constructor(e) { super(Yn, 'decimal'); this.fracDigits = getInteger({ data: e.fracDigits, defaultValue: 2, validate: (e) => !0, }); this.id = e.id || ''; this.leadDigits = getInteger({ data: e.leadDigits, defaultValue: -1, validate: (e) => !0, }); this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } [ns]() { const e = parseFloat(this[is].trim()); this[is] = isNaN(e) ? null : e; } [sn](e) { return valueToHtml(null !== this[is] ? this[is].toString() : ''); } } class DefaultUi extends XFAObject { constructor(e) { super(Yn, 'defaultUi', !0); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; } } class Desc extends XFAObject { constructor(e) { super(Yn, 'desc', !0); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.boolean = new XFAObjectArray(); this.date = new XFAObjectArray(); this.dateTime = new XFAObjectArray(); this.decimal = new XFAObjectArray(); this.exData = new XFAObjectArray(); this.float = new XFAObjectArray(); this.image = new XFAObjectArray(); this.integer = new XFAObjectArray(); this.text = new XFAObjectArray(); this.time = new XFAObjectArray(); } } class DigestMethod extends OptionObject { constructor(e) { super(Yn, 'digestMethod', ['', 'SHA1', 'SHA256', 'SHA512', 'RIPEMD160']); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class DigestMethods extends XFAObject { constructor(e) { super(Yn, 'digestMethods', !0); this.id = e.id || ''; this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.digestMethod = new XFAObjectArray(); } } class Draw extends XFAObject { constructor(e) { super(Yn, 'draw', !0); this.anchorType = getStringOption(e.anchorType, [ 'topLeft', 'bottomCenter', 'bottomLeft', 'bottomRight', 'middleCenter', 'middleLeft', 'middleRight', 'topCenter', 'topRight', ]); this.colSpan = getInteger({ data: e.colSpan, defaultValue: 1, validate: (e) => e >= 1 || -1 === e, }); this.h = e.h ? getMeasurement(e.h) : ''; this.hAlign = getStringOption(e.hAlign, [ 'left', 'center', 'justify', 'justifyAll', 'radix', 'right', ]); this.id = e.id || ''; this.locale = e.locale || ''; this.maxH = getMeasurement(e.maxH, '0pt'); this.maxW = getMeasurement(e.maxW, '0pt'); this.minH = getMeasurement(e.minH, '0pt'); this.minW = getMeasurement(e.minW, '0pt'); this.name = e.name || ''; this.presence = getStringOption(e.presence, [ 'visible', 'hidden', 'inactive', 'invisible', ]); this.relevant = getRelevant(e.relevant); this.rotate = getInteger({ data: e.rotate, defaultValue: 0, validate: (e) => e % 90 == 0, }); this.use = e.use || ''; this.usehref = e.usehref || ''; this.w = e.w ? getMeasurement(e.w) : ''; this.x = getMeasurement(e.x, '0pt'); this.y = getMeasurement(e.y, '0pt'); this.assist = null; this.border = null; this.caption = null; this.desc = null; this.extras = null; this.font = null; this.keep = null; this.margin = null; this.para = null; this.traversal = null; this.ui = null; this.value = null; this.setProperty = new XFAObjectArray(); } [en](e) { _setValue(this, e); } [sn](e) { setTabIndex(this); if ('hidden' === this.presence || 'inactive' === this.presence) return HTMLResult.EMPTY; fixDimensions(this); this[Xs](); const t = this.w, i = this.h, { w: a, h: r, isBroken: s } = layoutNode(this, e); if (a && '' === this.w) { if (s && this[ps]()[Ms]()) { this[js](); return HTMLResult.FAILURE; } this.w = a; } r && '' === this.h && (this.h = r); setFirstUnsplittable(this); if (!checkDimensions(this, e)) { this.w = t; this.h = i; this[js](); return HTMLResult.FAILURE; } unsetFirstUnsplittable(this); const n = toStyle( this, 'font', 'hAlign', 'dimensions', 'position', 'presence', 'rotate', 'anchorType', 'border', 'margin', ); setMinMaxDimensions(this, n); if (n.margin) { n.padding = n.margin; delete n.margin; } const o = ['xfaDraw']; this.font && o.push('xfaFont'); isPrintOnly(this) && o.push('xfaPrintOnly'); const g = { style: n, id: this[gn], class: o }; this.name && (g.xfaName = this.name); const c = { name: 'div', attributes: g, children: [] }; applyAssist(this, g); const C = computeBbox(this, c, e), h = this.value ? this.value[sn](e).html : null; if (null === h) { this.w = t; this.h = i; this[js](); return HTMLResult.success(createWrapper(this, c), C); } c.children.push(h); setPara(this, n, h); this.w = t; this.h = i; this[js](); return HTMLResult.success(createWrapper(this, c), C); } } class Edge extends XFAObject { constructor(e) { super(Yn, 'edge', !0); this.cap = getStringOption(e.cap, ['square', 'butt', 'round']); this.id = e.id || ''; this.presence = getStringOption(e.presence, [ 'visible', 'hidden', 'inactive', 'invisible', ]); this.stroke = getStringOption(e.stroke, [ 'solid', 'dashDot', 'dashDotDot', 'dashed', 'dotted', 'embossed', 'etched', 'lowered', 'raised', ]); this.thickness = getMeasurement(e.thickness, '0.5pt'); this.use = e.use || ''; this.usehref = e.usehref || ''; this.color = null; this.extras = null; } [on]() { const e = toStyle(this, 'visibility'); Object.assign(e, { linecap: this.cap, width: measureToString(this.thickness), color: this.color ? this.color[on]() : '#000000', style: '', }); if ('visible' !== this.presence) e.style = 'none'; else switch (this.stroke) { case 'solid': e.style = 'solid'; break; case 'dashDot': case 'dashDotDot': case 'dashed': e.style = 'dashed'; break; case 'dotted': e.style = 'dotted'; break; case 'embossed': e.style = 'ridge'; break; case 'etched': e.style = 'groove'; break; case 'lowered': e.style = 'inset'; break; case 'raised': e.style = 'outset'; } return e; } } class Encoding extends OptionObject { constructor(e) { super(Yn, 'encoding', [ 'adbe.x509.rsa_sha1', 'adbe.pkcs7.detached', 'adbe.pkcs7.sha1', ]); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Encodings extends XFAObject { constructor(e) { super(Yn, 'encodings', !0); this.id = e.id || ''; this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.encoding = new XFAObjectArray(); } } class Encrypt extends XFAObject { constructor(e) { super(Yn, 'encrypt', !0); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.certificate = null; } } class EncryptData extends XFAObject { constructor(e) { super(Yn, 'encryptData', !0); this.id = e.id || ''; this.operation = getStringOption(e.operation, ['encrypt', 'decrypt']); this.target = e.target || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.filter = null; this.manifest = null; } } class Encryption extends XFAObject { constructor(e) { super(Yn, 'encryption', !0); this.id = e.id || ''; this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.certificate = new XFAObjectArray(); } } class EncryptionMethod extends OptionObject { constructor(e) { super(Yn, 'encryptionMethod', [ '', 'AES256-CBC', 'TRIPLEDES-CBC', 'AES128-CBC', 'AES192-CBC', ]); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class EncryptionMethods extends XFAObject { constructor(e) { super(Yn, 'encryptionMethods', !0); this.id = e.id || ''; this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.encryptionMethod = new XFAObjectArray(); } } class Event extends XFAObject { constructor(e) { super(Yn, 'event', !0); this.activity = getStringOption(e.activity, [ 'click', 'change', 'docClose', 'docReady', 'enter', 'exit', 'full', 'indexChange', 'initialize', 'mouseDown', 'mouseEnter', 'mouseExit', 'mouseUp', 'postExecute', 'postOpen', 'postPrint', 'postSave', 'postSign', 'postSubmit', 'preExecute', 'preOpen', 'prePrint', 'preSave', 'preSign', 'preSubmit', 'ready', 'validationState', ]); this.id = e.id || ''; this.listen = getStringOption(e.listen, ['refOnly', 'refAndDescendents']); this.name = e.name || ''; this.ref = e.ref || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; this.encryptData = null; this.execute = null; this.script = null; this.signData = null; this.submit = null; } } class ExData extends ContentObject { constructor(e) { super(Yn, 'exData'); this.contentType = e.contentType || ''; this.href = e.href || ''; this.id = e.id || ''; this.maxLength = getInteger({ data: e.maxLength, defaultValue: -1, validate: (e) => e >= -1, }); this.name = e.name || ''; this.rid = e.rid || ''; this.transferEncoding = getStringOption(e.transferEncoding, [ 'none', 'base64', 'package', ]); this.use = e.use || ''; this.usehref = e.usehref || ''; } [ks]() { return 'text/html' === this.contentType; } [Ks](e) { if ('text/html' === this.contentType && e[Ys] === cn.xhtml.id) { this[is] = e; return !0; } if ('text/xml' === this.contentType) { this[is] = e; return !0; } return !1; } [sn](e) { return 'text/html' === this.contentType && this[is] ? this[is][sn](e) : HTMLResult.EMPTY; } } class ExObject extends XFAObject { constructor(e) { super(Yn, 'exObject', !0); this.archive = e.archive || ''; this.classId = e.classId || ''; this.codeBase = e.codeBase || ''; this.codeType = e.codeType || ''; this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; this.boolean = new XFAObjectArray(); this.date = new XFAObjectArray(); this.dateTime = new XFAObjectArray(); this.decimal = new XFAObjectArray(); this.exData = new XFAObjectArray(); this.exObject = new XFAObjectArray(); this.float = new XFAObjectArray(); this.image = new XFAObjectArray(); this.integer = new XFAObjectArray(); this.text = new XFAObjectArray(); this.time = new XFAObjectArray(); } } class ExclGroup extends XFAObject { constructor(e) { super(Yn, 'exclGroup', !0); this.access = getStringOption(e.access, [ 'open', 'nonInteractive', 'protected', 'readOnly', ]); this.accessKey = e.accessKey || ''; this.anchorType = getStringOption(e.anchorType, [ 'topLeft', 'bottomCenter', 'bottomLeft', 'bottomRight', 'middleCenter', 'middleLeft', 'middleRight', 'topCenter', 'topRight', ]); this.colSpan = getInteger({ data: e.colSpan, defaultValue: 1, validate: (e) => e >= 1 || -1 === e, }); this.h = e.h ? getMeasurement(e.h) : ''; this.hAlign = getStringOption(e.hAlign, [ 'left', 'center', 'justify', 'justifyAll', 'radix', 'right', ]); this.id = e.id || ''; this.layout = getStringOption(e.layout, [ 'position', 'lr-tb', 'rl-row', 'rl-tb', 'row', 'table', 'tb', ]); this.maxH = getMeasurement(e.maxH, '0pt'); this.maxW = getMeasurement(e.maxW, '0pt'); this.minH = getMeasurement(e.minH, '0pt'); this.minW = getMeasurement(e.minW, '0pt'); this.name = e.name || ''; this.presence = getStringOption(e.presence, [ 'visible', 'hidden', 'inactive', 'invisible', ]); this.relevant = getRelevant(e.relevant); this.use = e.use || ''; this.usehref = e.usehref || ''; this.w = e.w ? getMeasurement(e.w) : ''; this.x = getMeasurement(e.x, '0pt'); this.y = getMeasurement(e.y, '0pt'); this.assist = null; this.bind = null; this.border = null; this.calculate = null; this.caption = null; this.desc = null; this.extras = null; this.margin = null; this.para = null; this.traversal = null; this.validate = null; this.connect = new XFAObjectArray(); this.event = new XFAObjectArray(); this.field = new XFAObjectArray(); this.setProperty = new XFAObjectArray(); } [Rs]() { return !0; } [bs]() { return !0; } [en](e) { for (const t of this.field.children) { if (!t.value) { const e = new Value({}); t[Vr](e); t.value = e; } t.value[en](e); } } [Ms]() { return ( (this.layout.endsWith('-tb') && 0 === this[ss].attempt && this[ss].numberInLine > 0) || this[ms]()[Ms]() ); } [Us]() { const e = this[ps](); if (!e[Us]()) return !1; if (void 0 !== this[ss]._isSplittable) return this[ss]._isSplittable; if ('position' === this.layout || this.layout.includes('row')) { this[ss]._isSplittable = !1; return !1; } if (e.layout?.endsWith('-tb') && 0 !== e[ss].numberInLine) return !1; this[ss]._isSplittable = !0; return !0; } [os]() { return flushHTML(this); } [Zr](e, t) { addHTML(this, e, t); } [cs]() { return getAvailableSpace(this); } [sn](e) { setTabIndex(this); if ( 'hidden' === this.presence || 'inactive' === this.presence || 0 === this.h || 0 === this.w ) return HTMLResult.EMPTY; fixDimensions(this); const t = [], i = { id: this[gn], class: [] }; setAccess(this, i.class); this[ss] || (this[ss] = Object.create(null)); Object.assign(this[ss], { children: t, attributes: i, attempt: 0, line: null, numberInLine: 0, availableSpace: { width: Math.min(this.w || 1 / 0, e.width), height: Math.min(this.h || 1 / 0, e.height), }, width: 0, height: 0, prevHeight: 0, currentWidth: 0, }); const a = this[Us](); a || setFirstUnsplittable(this); if (!checkDimensions(this, e)) return HTMLResult.FAILURE; const r = new Set(['field']); if (this.layout.includes('row')) { const e = this[ps]().columnWidths; if (Array.isArray(e) && e.length > 0) { this[ss].columnWidths = e; this[ss].currentColumn = 0; } } const s = toStyle( this, 'anchorType', 'dimensions', 'position', 'presence', 'border', 'margin', 'hAlign', ), n = ['xfaExclgroup'], o = layoutClass(this); o && n.push(o); isPrintOnly(this) && n.push('xfaPrintOnly'); i.style = s; i.class = n; this.name && (i.xfaName = this.name); this[Xs](); const g = 'lr-tb' === this.layout || 'rl-tb' === this.layout, c = g ? 2 : 1; for (; this[ss].attempt < c; this[ss].attempt++) { g && 1 === this[ss].attempt && (this[ss].numberInLine = 0); const e = this[_r]({ filter: r, include: !0 }); if (e.success) break; if (e.isBreak()) { this[js](); return e; } if ( g && 0 === this[ss].attempt && 0 === this[ss].numberInLine && !this[ys]()[ss].noLayoutFailure ) { this[ss].attempt = c; break; } } this[js](); a || unsetFirstUnsplittable(this); if (this[ss].attempt === c) { a || delete this[ss]; return HTMLResult.FAILURE; } let C = 0, h = 0; if (this.margin) { C = this.margin.leftInset + this.margin.rightInset; h = this.margin.topInset + this.margin.bottomInset; } const l = Math.max(this[ss].width + C, this.w || 0), Q = Math.max(this[ss].height + h, this.h || 0), E = [this.x, this.y, l, Q]; '' === this.w && (s.width = measureToString(l)); '' === this.h && (s.height = measureToString(Q)); const u = { name: 'div', attributes: i, children: t }; applyAssist(this, i); delete this[ss]; return HTMLResult.success(createWrapper(this, u), E); } } class Execute extends XFAObject { constructor(e) { super(Yn, 'execute'); this.connection = e.connection || ''; this.executeType = getStringOption(e.executeType, ['import', 'remerge']); this.id = e.id || ''; this.runAt = getStringOption(e.runAt, ['client', 'both', 'server']); this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Extras extends XFAObject { constructor(e) { super(Yn, 'extras', !0); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.boolean = new XFAObjectArray(); this.date = new XFAObjectArray(); this.dateTime = new XFAObjectArray(); this.decimal = new XFAObjectArray(); this.exData = new XFAObjectArray(); this.extras = new XFAObjectArray(); this.float = new XFAObjectArray(); this.image = new XFAObjectArray(); this.integer = new XFAObjectArray(); this.text = new XFAObjectArray(); this.time = new XFAObjectArray(); } } class Field extends XFAObject { constructor(e) { super(Yn, 'field', !0); this.access = getStringOption(e.access, [ 'open', 'nonInteractive', 'protected', 'readOnly', ]); this.accessKey = e.accessKey || ''; this.anchorType = getStringOption(e.anchorType, [ 'topLeft', 'bottomCenter', 'bottomLeft', 'bottomRight', 'middleCenter', 'middleLeft', 'middleRight', 'topCenter', 'topRight', ]); this.colSpan = getInteger({ data: e.colSpan, defaultValue: 1, validate: (e) => e >= 1 || -1 === e, }); this.h = e.h ? getMeasurement(e.h) : ''; this.hAlign = getStringOption(e.hAlign, [ 'left', 'center', 'justify', 'justifyAll', 'radix', 'right', ]); this.id = e.id || ''; this.locale = e.locale || ''; this.maxH = getMeasurement(e.maxH, '0pt'); this.maxW = getMeasurement(e.maxW, '0pt'); this.minH = getMeasurement(e.minH, '0pt'); this.minW = getMeasurement(e.minW, '0pt'); this.name = e.name || ''; this.presence = getStringOption(e.presence, [ 'visible', 'hidden', 'inactive', 'invisible', ]); this.relevant = getRelevant(e.relevant); this.rotate = getInteger({ data: e.rotate, defaultValue: 0, validate: (e) => e % 90 == 0, }); this.use = e.use || ''; this.usehref = e.usehref || ''; this.w = e.w ? getMeasurement(e.w) : ''; this.x = getMeasurement(e.x, '0pt'); this.y = getMeasurement(e.y, '0pt'); this.assist = null; this.bind = null; this.border = null; this.calculate = null; this.caption = null; this.desc = null; this.extras = null; this.font = null; this.format = null; this.items = new XFAObjectArray(2); this.keep = null; this.margin = null; this.para = null; this.traversal = null; this.ui = null; this.validate = null; this.value = null; this.bindItems = new XFAObjectArray(); this.connect = new XFAObjectArray(); this.event = new XFAObjectArray(); this.setProperty = new XFAObjectArray(); } [Rs]() { return !0; } [en](e) { _setValue(this, e); } [sn](e) { setTabIndex(this); if (!this.ui) { this.ui = new Ui({}); this.ui[ws] = this[ws]; this[Vr](this.ui); let e; switch (this.items.children.length) { case 0: e = new TextEdit({}); this.ui.textEdit = e; break; case 1: e = new CheckButton({}); this.ui.checkButton = e; break; case 2: e = new ChoiceList({}); this.ui.choiceList = e; } this.ui[Vr](e); } if ( !this.ui || 'hidden' === this.presence || 'inactive' === this.presence || 0 === this.h || 0 === this.w ) return HTMLResult.EMPTY; this.caption && delete this.caption[ss]; this[Xs](); const t = this.caption ? this.caption[sn](e).html : null, i = this.w, a = this.h; let r = 0, s = 0; if (this.margin) { r = this.margin.leftInset + this.margin.rightInset; s = this.margin.topInset + this.margin.bottomInset; } let n = null; if ('' === this.w || '' === this.h) { let t = null, i = null, a = 0, o = 0; if (this.ui.checkButton) a = o = this.ui.checkButton.size; else { const { w: t, h: i } = layoutNode(this, e); if (null !== t) { a = t; o = i; } else o = (function fonts_getMetrics(e, t = !1) { let i = null; if (e) { const t = stripQuotes(e.typeface), a = e[ws].fontFinder.find(t); i = selectFont(e, a); } if (!i) return { lineHeight: 12, lineGap: 2, lineNoGap: 10 }; const a = e.size || 10, r = i.lineHeight ? Math.max(t ? 0 : 1.2, i.lineHeight) : 1.2, s = void 0 === i.lineGap ? 0.2 : i.lineGap; return { lineHeight: r * a, lineGap: s * a, lineNoGap: Math.max(1, r - s) * a, }; })(this.font, !0).lineNoGap; } n = getBorderDims(this.ui[Qs]()); a += n.w; o += n.h; if (this.caption) { const { w: r, h: s, isBroken: n } = this.caption[Qs](e); if (n && this[ps]()[Ms]()) { this[js](); return HTMLResult.FAILURE; } t = r; i = s; switch (this.caption.placement) { case 'left': case 'right': case 'inline': t += a; break; case 'top': case 'bottom': i += o; } } else { t = a; i = o; } if (t && '' === this.w) { t += r; this.w = Math.min( this.maxW <= 0 ? 1 / 0 : this.maxW, this.minW + 1 < t ? t : this.minW, ); } if (i && '' === this.h) { i += s; this.h = Math.min( this.maxH <= 0 ? 1 / 0 : this.maxH, this.minH + 1 < i ? i : this.minH, ); } } this[js](); fixDimensions(this); setFirstUnsplittable(this); if (!checkDimensions(this, e)) { this.w = i; this.h = a; this[js](); return HTMLResult.FAILURE; } unsetFirstUnsplittable(this); const o = toStyle( this, 'font', 'dimensions', 'position', 'rotate', 'anchorType', 'presence', 'margin', 'hAlign', ); setMinMaxDimensions(this, o); const g = ['xfaField']; this.font && g.push('xfaFont'); isPrintOnly(this) && g.push('xfaPrintOnly'); const c = { style: o, id: this[gn], class: g }; if (o.margin) { o.padding = o.margin; delete o.margin; } setAccess(this, g); this.name && (c.xfaName = this.name); const C = [], h = { name: 'div', attributes: c, children: C }; applyAssist(this, c); const l = this.border ? this.border[on]() : null, Q = computeBbox(this, h, e), E = this.ui[sn]().html; if (!E) { Object.assign(o, l); return HTMLResult.success(createWrapper(this, h), Q); } this[tn] && (E.children?.[0] ? (E.children[0].attributes.tabindex = this[tn]) : (E.attributes.tabindex = this[tn])); E.attributes.style || (E.attributes.style = Object.create(null)); let u = null; if (this.ui.button) { 1 === E.children.length && ([u] = E.children.splice(0, 1)); Object.assign(E.attributes.style, l); } else Object.assign(o, l); C.push(E); if (this.value) if (this.ui.imageEdit) E.children.push(this.value[sn]().html); else if (!this.ui.button) { let e = ''; if (this.value.exData) e = this.value.exData[an](); else if (this.value.text) e = this.value.text[Qs](); else { const t = this.value[sn]().html; null !== t && (e = t.children[0].value); } this.ui.textEdit && this.value.text?.maxChars && (E.children[0].attributes.maxLength = this.value.text.maxChars); if (e) { if (this.ui.numericEdit) { e = parseFloat(e); e = isNaN(e) ? '' : e.toString(); } 'textarea' === E.children[0].name ? (E.children[0].attributes.textContent = e) : (E.children[0].attributes.value = e); } } if (!this.ui.imageEdit && E.children?.[0] && this.h) { n = n || getBorderDims(this.ui[Qs]()); let t = 0; if (this.caption && ['top', 'bottom'].includes(this.caption.placement)) { t = this.caption.reserve; t <= 0 && (t = this.caption[Qs](e).h); const i = this.h - t - s - n.h; E.children[0].attributes.style.height = measureToString(i); } else E.children[0].attributes.style.height = '100%'; } u && E.children.push(u); if (!t) { E.attributes.class && E.attributes.class.push('xfaLeft'); this.w = i; this.h = a; return HTMLResult.success(createWrapper(this, h), Q); } if (this.ui.button) { o.padding && delete o.padding; 'div' === t.name && (t.name = 'span'); E.children.push(t); return HTMLResult.success(h, Q); } this.ui.checkButton && (t.attributes.class[0] = 'xfaCaptionForCheckButton'); E.attributes.class || (E.attributes.class = []); E.children.splice(0, 0, t); switch (this.caption.placement) { case 'left': case 'inline': E.attributes.class.push('xfaLeft'); break; case 'right': E.attributes.class.push('xfaRight'); break; case 'top': E.attributes.class.push('xfaTop'); break; case 'bottom': E.attributes.class.push('xfaBottom'); } this.w = i; this.h = a; return HTMLResult.success(createWrapper(this, h), Q); } } class Fill extends XFAObject { constructor(e) { super(Yn, 'fill', !0); this.id = e.id || ''; this.presence = getStringOption(e.presence, [ 'visible', 'hidden', 'inactive', 'invisible', ]); this.use = e.use || ''; this.usehref = e.usehref || ''; this.color = null; this.extras = null; this.linear = null; this.pattern = null; this.radial = null; this.solid = null; this.stipple = null; } [on]() { const e = this[ms](), t = e[ms]()[ms](), i = Object.create(null); let a = 'color', r = a; if (e instanceof Border) { a = 'background-color'; r = 'background'; t instanceof Ui && (i.backgroundColor = 'white'); } if (e instanceof Rectangle || e instanceof Arc) { a = r = 'fill'; i.fill = 'white'; } for (const e of Object.getOwnPropertyNames(this)) { if ('extras' === e || 'color' === e) continue; const t = this[e]; if (!(t instanceof XFAObject)) continue; const s = t[on](this.color); s && (i[s.startsWith('#') ? a : r] = s); return i; } if (this.color?.value) { const e = this.color[on](); i[e.startsWith('#') ? a : r] = e; } return i; } } class Filter extends XFAObject { constructor(e) { super(Yn, 'filter', !0); this.addRevocationInfo = getStringOption(e.addRevocationInfo, [ '', 'required', 'optional', 'none', ]); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.version = getInteger({ data: this.version, defaultValue: 5, validate: (e) => e >= 1 && e <= 5, }); this.appearanceFilter = null; this.certificates = null; this.digestMethods = null; this.encodings = null; this.encryptionMethods = null; this.handler = null; this.lockDocument = null; this.mdp = null; this.reasons = null; this.timeStamp = null; } } class Float extends ContentObject { constructor(e) { super(Yn, 'float'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } [ns]() { const e = parseFloat(this[is].trim()); this[is] = isNaN(e) ? null : e; } [sn](e) { return valueToHtml(null !== this[is] ? this[is].toString() : ''); } } class template_Font extends XFAObject { constructor(e) { super(Yn, 'font', !0); this.baselineShift = getMeasurement(e.baselineShift); this.fontHorizontalScale = getFloat({ data: e.fontHorizontalScale, defaultValue: 100, validate: (e) => e >= 0, }); this.fontVerticalScale = getFloat({ data: e.fontVerticalScale, defaultValue: 100, validate: (e) => e >= 0, }); this.id = e.id || ''; this.kerningMode = getStringOption(e.kerningMode, ['none', 'pair']); this.letterSpacing = getMeasurement(e.letterSpacing, '0'); this.lineThrough = getInteger({ data: e.lineThrough, defaultValue: 0, validate: (e) => 1 === e || 2 === e, }); this.lineThroughPeriod = getStringOption(e.lineThroughPeriod, [ 'all', 'word', ]); this.overline = getInteger({ data: e.overline, defaultValue: 0, validate: (e) => 1 === e || 2 === e, }); this.overlinePeriod = getStringOption(e.overlinePeriod, ['all', 'word']); this.posture = getStringOption(e.posture, ['normal', 'italic']); this.size = getMeasurement(e.size, '10pt'); this.typeface = e.typeface || 'Courier'; this.underline = getInteger({ data: e.underline, defaultValue: 0, validate: (e) => 1 === e || 2 === e, }); this.underlinePeriod = getStringOption(e.underlinePeriod, ['all', 'word']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.weight = getStringOption(e.weight, ['normal', 'bold']); this.extras = null; this.fill = null; } [zr](e) { super[zr](e); this[ws].usedTypefaces.add(this.typeface); } [on]() { const e = toStyle(this, 'fill'), t = e.color; if (t) if ('#000000' === t) delete e.color; else if (!t.startsWith('#')) { e.background = t; e.backgroundClip = 'text'; e.color = 'transparent'; } this.baselineShift && (e.verticalAlign = measureToString(this.baselineShift)); e.fontKerning = 'none' === this.kerningMode ? 'none' : 'normal'; e.letterSpacing = measureToString(this.letterSpacing); if (0 !== this.lineThrough) { e.textDecoration = 'line-through'; 2 === this.lineThrough && (e.textDecorationStyle = 'double'); } if (0 !== this.overline) { e.textDecoration = 'overline'; 2 === this.overline && (e.textDecorationStyle = 'double'); } e.fontStyle = this.posture; e.fontSize = measureToString(0.99 * this.size); setFontFamily(this, this, this[ws].fontFinder, e); if (0 !== this.underline) { e.textDecoration = 'underline'; 2 === this.underline && (e.textDecorationStyle = 'double'); } e.fontWeight = this.weight; return e; } } class Format extends XFAObject { constructor(e) { super(Yn, 'format', !0); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; this.picture = null; } } class Handler extends StringObject { constructor(e) { super(Yn, 'handler'); this.id = e.id || ''; this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Hyphenation extends XFAObject { constructor(e) { super(Yn, 'hyphenation'); this.excludeAllCaps = getInteger({ data: e.excludeAllCaps, defaultValue: 0, validate: (e) => 1 === e, }); this.excludeInitialCap = getInteger({ data: e.excludeInitialCap, defaultValue: 0, validate: (e) => 1 === e, }); this.hyphenate = getInteger({ data: e.hyphenate, defaultValue: 0, validate: (e) => 1 === e, }); this.id = e.id || ''; this.pushCharacterCount = getInteger({ data: e.pushCharacterCount, defaultValue: 3, validate: (e) => e >= 0, }); this.remainCharacterCount = getInteger({ data: e.remainCharacterCount, defaultValue: 3, validate: (e) => e >= 0, }); this.use = e.use || ''; this.usehref = e.usehref || ''; this.wordCharacterCount = getInteger({ data: e.wordCharacterCount, defaultValue: 7, validate: (e) => e >= 0, }); } } class Image extends StringObject { constructor(e) { super(Yn, 'image'); this.aspect = getStringOption(e.aspect, [ 'fit', 'actual', 'height', 'none', 'width', ]); this.contentType = e.contentType || ''; this.href = e.href || ''; this.id = e.id || ''; this.name = e.name || ''; this.transferEncoding = getStringOption(e.transferEncoding, [ 'base64', 'none', 'package', ]); this.use = e.use || ''; this.usehref = e.usehref || ''; } [sn]() { if (this.contentType && !Kn.has(this.contentType.toLowerCase())) return HTMLResult.EMPTY; let e = this[ws].images && this[ws].images.get(this.href); if (!e && (this.href || !this[is])) return HTMLResult.EMPTY; e || 'base64' !== this.transferEncoding || (e = stringToBytes(atob(this[is]))); if (!e) return HTMLResult.EMPTY; if (!this.contentType) { for (const [t, i] of qn) if (e.length > t.length && t.every((t, i) => t === e[i])) { this.contentType = i; break; } if (!this.contentType) return HTMLResult.EMPTY; } const t = new Blob([e], { type: this.contentType }); let i; switch (this.aspect) { case 'fit': case 'actual': break; case 'height': i = { height: '100%', objectFit: 'fill' }; break; case 'none': i = { width: '100%', height: '100%', objectFit: 'fill' }; break; case 'width': i = { width: '100%', objectFit: 'fill' }; } const a = this[ms](); return HTMLResult.success({ name: 'img', attributes: { class: ['xfaImage'], style: i, src: URL.createObjectURL(t), alt: a ? ariaLabel(a[ms]()) : null, }, }); } } class ImageEdit extends XFAObject { constructor(e) { super(Yn, 'imageEdit', !0); this.data = getStringOption(e.data, ['link', 'embed']); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.border = null; this.extras = null; this.margin = null; } [sn](e) { return 'embed' === this.data ? HTMLResult.success({ name: 'div', children: [], attributes: {} }) : HTMLResult.EMPTY; } } class Integer extends ContentObject { constructor(e) { super(Yn, 'integer'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } [ns]() { const e = parseInt(this[is].trim(), 10); this[is] = isNaN(e) ? null : e; } [sn](e) { return valueToHtml(null !== this[is] ? this[is].toString() : ''); } } class Issuers extends XFAObject { constructor(e) { super(Yn, 'issuers', !0); this.id = e.id || ''; this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.certificate = new XFAObjectArray(); } } class Items extends XFAObject { constructor(e) { super(Yn, 'items', !0); this.id = e.id || ''; this.name = e.name || ''; this.presence = getStringOption(e.presence, [ 'visible', 'hidden', 'inactive', 'invisible', ]); this.ref = e.ref || ''; this.save = getInteger({ data: e.save, defaultValue: 0, validate: (e) => 1 === e, }); this.use = e.use || ''; this.usehref = e.usehref || ''; this.boolean = new XFAObjectArray(); this.date = new XFAObjectArray(); this.dateTime = new XFAObjectArray(); this.decimal = new XFAObjectArray(); this.exData = new XFAObjectArray(); this.float = new XFAObjectArray(); this.image = new XFAObjectArray(); this.integer = new XFAObjectArray(); this.text = new XFAObjectArray(); this.time = new XFAObjectArray(); } [sn]() { const e = []; for (const t of this[us]()) e.push(t[an]()); return HTMLResult.success(e); } } class Keep extends XFAObject { constructor(e) { super(Yn, 'keep', !0); this.id = e.id || ''; const t = ['none', 'contentArea', 'pageArea']; this.intact = getStringOption(e.intact, t); this.next = getStringOption(e.next, t); this.previous = getStringOption(e.previous, t); this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; } } class KeyUsage extends XFAObject { constructor(e) { super(Yn, 'keyUsage'); const t = ['', 'yes', 'no']; this.crlSign = getStringOption(e.crlSign, t); this.dataEncipherment = getStringOption(e.dataEncipherment, t); this.decipherOnly = getStringOption(e.decipherOnly, t); this.digitalSignature = getStringOption(e.digitalSignature, t); this.encipherOnly = getStringOption(e.encipherOnly, t); this.id = e.id || ''; this.keyAgreement = getStringOption(e.keyAgreement, t); this.keyCertSign = getStringOption(e.keyCertSign, t); this.keyEncipherment = getStringOption(e.keyEncipherment, t); this.nonRepudiation = getStringOption(e.nonRepudiation, t); this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Line extends XFAObject { constructor(e) { super(Yn, 'line', !0); this.hand = getStringOption(e.hand, ['even', 'left', 'right']); this.id = e.id || ''; this.slope = getStringOption(e.slope, ['\\', '/']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.edge = null; } [sn]() { const e = this[ms]()[ms](), t = this.edge || new Edge({}), i = t[on](), a = Object.create(null), r = 'visible' === t.presence ? t.thickness : 0; a.strokeWidth = measureToString(r); a.stroke = i.color; let s, n, o, g, c = '100%', C = '100%'; if (e.w <= r) { [s, n, o, g] = ['50%', 0, '50%', '100%']; c = a.strokeWidth; } else if (e.h <= r) { [s, n, o, g] = [0, '50%', '100%', '50%']; C = a.strokeWidth; } else '\\' === this.slope ? ([s, n, o, g] = [0, 0, '100%', '100%']) : ([s, n, o, g] = [0, '100%', '100%', 0]); const h = { name: 'svg', children: [ { name: 'line', attributes: { xmlns: vn, x1: s, y1: n, x2: o, y2: g, style: a }, }, ], attributes: { xmlns: vn, width: c, height: C, style: { overflow: 'visible' }, }, }; if (hasMargin(e)) return HTMLResult.success({ name: 'div', attributes: { style: { display: 'inline', width: '100%', height: '100%' }, }, children: [h], }); h.attributes.style.position = 'absolute'; return HTMLResult.success(h); } } class Linear extends XFAObject { constructor(e) { super(Yn, 'linear', !0); this.id = e.id || ''; this.type = getStringOption(e.type, [ 'toRight', 'toBottom', 'toLeft', 'toTop', ]); this.use = e.use || ''; this.usehref = e.usehref || ''; this.color = null; this.extras = null; } [on](e) { e = e ? e[on]() : '#FFFFFF'; return `linear-gradient(${this.type .replace(/([RBLT])/, ' $1') .toLowerCase()}, ${e}, ${this.color ? this.color[on]() : '#000000'})`; } } class LockDocument extends ContentObject { constructor(e) { super(Yn, 'lockDocument'); this.id = e.id || ''; this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; } [ns]() { this[is] = getStringOption(this[is], ['auto', '0', '1']); } } class Manifest extends XFAObject { constructor(e) { super(Yn, 'manifest', !0); this.action = getStringOption(e.action, ['include', 'all', 'exclude']); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; this.ref = new XFAObjectArray(); } } class Margin extends XFAObject { constructor(e) { super(Yn, 'margin', !0); this.bottomInset = getMeasurement(e.bottomInset, '0'); this.id = e.id || ''; this.leftInset = getMeasurement(e.leftInset, '0'); this.rightInset = getMeasurement(e.rightInset, '0'); this.topInset = getMeasurement(e.topInset, '0'); this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; } [on]() { return { margin: measureToString(this.topInset) + ' ' + measureToString(this.rightInset) + ' ' + measureToString(this.bottomInset) + ' ' + measureToString(this.leftInset), }; } } class Mdp extends XFAObject { constructor(e) { super(Yn, 'mdp'); this.id = e.id || ''; this.permissions = getInteger({ data: e.permissions, defaultValue: 2, validate: (e) => 1 === e || 3 === e, }); this.signatureType = getStringOption(e.signatureType, ['filler', 'author']); this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Medium extends XFAObject { constructor(e) { super(Yn, 'medium'); this.id = e.id || ''; this.imagingBBox = (function getBBox(e) { const t = -1; if (!e) return { x: t, y: t, width: t, height: t }; const i = e .trim() .split(/\s*,\s*/) .map((e) => getMeasurement(e, '-1')); if (i.length < 4 || i[2] < 0 || i[3] < 0) return { x: t, y: t, width: t, height: t }; const [a, r, s, n] = i; return { x: a, y: r, width: s, height: n }; })(e.imagingBBox); this.long = getMeasurement(e.long); this.orientation = getStringOption(e.orientation, [ 'portrait', 'landscape', ]); this.short = getMeasurement(e.short); this.stock = e.stock || ''; this.trayIn = getStringOption(e.trayIn, ['auto', 'delegate', 'pageFront']); this.trayOut = getStringOption(e.trayOut, ['auto', 'delegate']); this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Message extends XFAObject { constructor(e) { super(Yn, 'message', !0); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.text = new XFAObjectArray(); } } class NumericEdit extends XFAObject { constructor(e) { super(Yn, 'numericEdit', !0); this.hScrollPolicy = getStringOption(e.hScrollPolicy, [ 'auto', 'off', 'on', ]); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.border = null; this.comb = null; this.extras = null; this.margin = null; } [sn](e) { const t = toStyle(this, 'border', 'font', 'margin'), i = this[ms]()[ms](), a = { name: 'input', attributes: { type: 'text', fieldId: i[gn], dataId: i[as]?.[gn] || i[gn], class: ['xfaTextfield'], style: t, 'aria-label': ariaLabel(i), 'aria-required': !1, }, }; if (isRequired(i)) { a.attributes['aria-required'] = !0; a.attributes.required = !0; } return HTMLResult.success({ name: 'label', attributes: { class: ['xfaLabel'] }, children: [a], }); } } class Occur extends XFAObject { constructor(e) { super(Yn, 'occur', !0); this.id = e.id || ''; this.initial = '' !== e.initial ? getInteger({ data: e.initial, defaultValue: '', validate: (e) => !0 }) : ''; this.max = '' !== e.max ? getInteger({ data: e.max, defaultValue: 1, validate: (e) => !0 }) : ''; this.min = '' !== e.min ? getInteger({ data: e.min, defaultValue: 1, validate: (e) => !0 }) : ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; } [zr]() { const e = this[ms](), t = this.min; '' === this.min && (this.min = e instanceof PageArea || e instanceof PageSet ? 0 : 1); '' === this.max && (this.max = '' === t ? e instanceof PageArea || e instanceof PageSet ? -1 : 1 : this.min); -1 !== this.max && this.max < this.min && (this.max = this.min); '' === this.initial && (this.initial = e instanceof Template ? 1 : this.min); } } class Oid extends StringObject { constructor(e) { super(Yn, 'oid'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Oids extends XFAObject { constructor(e) { super(Yn, 'oids', !0); this.id = e.id || ''; this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.oid = new XFAObjectArray(); } } class Overflow extends XFAObject { constructor(e) { super(Yn, 'overflow'); this.id = e.id || ''; this.leader = e.leader || ''; this.target = e.target || ''; this.trailer = e.trailer || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } [Qs]() { if (!this[ss]) { const e = this[ms](), t = this[ys](), i = t[zs](this.target, e), a = t[zs](this.leader, e), r = t[zs](this.trailer, e); this[ss] = { target: i?.[0] || null, leader: a?.[0] || null, trailer: r?.[0] || null, addLeader: !1, addTrailer: !1, }; } return this[ss]; } } class PageArea extends XFAObject { constructor(e) { super(Yn, 'pageArea', !0); this.blankOrNotBlank = getStringOption(e.blankOrNotBlank, [ 'any', 'blank', 'notBlank', ]); this.id = e.id || ''; this.initialNumber = getInteger({ data: e.initialNumber, defaultValue: 1, validate: (e) => !0, }); this.name = e.name || ''; this.numbered = getInteger({ data: e.numbered, defaultValue: 1, validate: (e) => !0, }); this.oddOrEven = getStringOption(e.oddOrEven, ['any', 'even', 'odd']); this.pagePosition = getStringOption(e.pagePosition, [ 'any', 'first', 'last', 'only', 'rest', ]); this.relevant = getRelevant(e.relevant); this.use = e.use || ''; this.usehref = e.usehref || ''; this.desc = null; this.extras = null; this.medium = null; this.occur = null; this.area = new XFAObjectArray(); this.contentArea = new XFAObjectArray(); this.draw = new XFAObjectArray(); this.exclGroup = new XFAObjectArray(); this.field = new XFAObjectArray(); this.subform = new XFAObjectArray(); } [Hs]() { if (!this[ss]) { this[ss] = { numberOfUse: 0 }; return !0; } return ( !this.occur || -1 === this.occur.max || this[ss].numberOfUse < this.occur.max ); } [$r]() { delete this[ss]; } [fs]() { this[ss] || (this[ss] = { numberOfUse: 0 }); const e = this[ms](); if ('orderedOccurrence' === e.relation && this[Hs]()) { this[ss].numberOfUse += 1; return this; } return e[fs](); } [cs]() { return this[ss].space || { width: 0, height: 0 }; } [sn]() { this[ss] || (this[ss] = { numberOfUse: 1 }); const e = []; this[ss].children = e; const t = Object.create(null); if (this.medium && this.medium.short && this.medium.long) { t.width = measureToString(this.medium.short); t.height = measureToString(this.medium.long); this[ss].space = { width: this.medium.short, height: this.medium.long }; if ('landscape' === this.medium.orientation) { const e = t.width; t.width = t.height; t.height = e; this[ss].space = { width: this.medium.long, height: this.medium.short }; } } else warn('XFA - No medium specified in pageArea: please file a bug.'); this[_r]({ filter: new Set(['area', 'draw', 'field', 'subform']), include: !0, }); this[_r]({ filter: new Set(['contentArea']), include: !0 }); return HTMLResult.success({ name: 'div', children: e, attributes: { class: ['xfaPage'], id: this[gn], style: t, xfaName: this.name, }, }); } } class PageSet extends XFAObject { constructor(e) { super(Yn, 'pageSet', !0); this.duplexImposition = getStringOption(e.duplexImposition, [ 'longEdge', 'shortEdge', ]); this.id = e.id || ''; this.name = e.name || ''; this.relation = getStringOption(e.relation, [ 'orderedOccurrence', 'duplexPaginated', 'simplexPaginated', ]); this.relevant = getRelevant(e.relevant); this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; this.occur = null; this.pageArea = new XFAObjectArray(); this.pageSet = new XFAObjectArray(); } [$r]() { for (const e of this.pageArea.children) e[$r](); for (const e of this.pageSet.children) e[$r](); } [Hs]() { return ( !this.occur || -1 === this.occur.max || this[ss].numberOfUse < this.occur.max ); } [fs]() { this[ss] || (this[ss] = { numberOfUse: 1, pageIndex: -1, pageSetIndex: -1 }); if ('orderedOccurrence' === this.relation) { if (this[ss].pageIndex + 1 < this.pageArea.children.length) { this[ss].pageIndex += 1; return this.pageArea.children[this[ss].pageIndex][fs](); } if (this[ss].pageSetIndex + 1 < this.pageSet.children.length) { this[ss].pageSetIndex += 1; return this.pageSet.children[this[ss].pageSetIndex][fs](); } if (this[Hs]()) { this[ss].numberOfUse += 1; this[ss].pageIndex = -1; this[ss].pageSetIndex = -1; return this[fs](); } const e = this[ms](); if (e instanceof PageSet) return e[fs](); this[$r](); return this[fs](); } const e = this[ys]()[ss].pageNumber, t = e % 2 == 0 ? 'even' : 'odd', i = 0 === e ? 'first' : 'rest'; let a = this.pageArea.children.find( (e) => e.oddOrEven === t && e.pagePosition === i, ); if (a) return a; a = this.pageArea.children.find( (e) => 'any' === e.oddOrEven && e.pagePosition === i, ); if (a) return a; a = this.pageArea.children.find( (e) => 'any' === e.oddOrEven && 'any' === e.pagePosition, ); return a || this.pageArea.children[0]; } } class Para extends XFAObject { constructor(e) { super(Yn, 'para', !0); this.hAlign = getStringOption(e.hAlign, [ 'left', 'center', 'justify', 'justifyAll', 'radix', 'right', ]); this.id = e.id || ''; this.lineHeight = e.lineHeight ? getMeasurement(e.lineHeight, '0pt') : ''; this.marginLeft = e.marginLeft ? getMeasurement(e.marginLeft, '0pt') : ''; this.marginRight = e.marginRight ? getMeasurement(e.marginRight, '0pt') : ''; this.orphans = getInteger({ data: e.orphans, defaultValue: 0, validate: (e) => e >= 0, }); this.preserve = e.preserve || ''; this.radixOffset = e.radixOffset ? getMeasurement(e.radixOffset, '0pt') : ''; this.spaceAbove = e.spaceAbove ? getMeasurement(e.spaceAbove, '0pt') : ''; this.spaceBelow = e.spaceBelow ? getMeasurement(e.spaceBelow, '0pt') : ''; this.tabDefault = e.tabDefault ? getMeasurement(this.tabDefault) : ''; this.tabStops = (e.tabStops || '') .trim() .split(/\s+/) .map((e, t) => (t % 2 == 1 ? getMeasurement(e) : e)); this.textIndent = e.textIndent ? getMeasurement(e.textIndent, '0pt') : ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.vAlign = getStringOption(e.vAlign, ['top', 'bottom', 'middle']); this.widows = getInteger({ data: e.widows, defaultValue: 0, validate: (e) => e >= 0, }); this.hyphenation = null; } [on]() { const e = toStyle(this, 'hAlign'); '' !== this.marginLeft && (e.paddingLeft = measureToString(this.marginLeft)); '' !== this.marginRight && (e.paddingight = measureToString(this.marginRight)); '' !== this.spaceAbove && (e.paddingTop = measureToString(this.spaceAbove)); '' !== this.spaceBelow && (e.paddingBottom = measureToString(this.spaceBelow)); if ('' !== this.textIndent) { e.textIndent = measureToString(this.textIndent); fixTextIndent(e); } this.lineHeight > 0 && (e.lineHeight = measureToString(this.lineHeight)); '' !== this.tabDefault && (e.tabSize = measureToString(this.tabDefault)); this.tabStops.length; this.hyphenatation && Object.assign(e, this.hyphenatation[on]()); return e; } } class PasswordEdit extends XFAObject { constructor(e) { super(Yn, 'passwordEdit', !0); this.hScrollPolicy = getStringOption(e.hScrollPolicy, [ 'auto', 'off', 'on', ]); this.id = e.id || ''; this.passwordChar = e.passwordChar || '*'; this.use = e.use || ''; this.usehref = e.usehref || ''; this.border = null; this.extras = null; this.margin = null; } } class template_Pattern extends XFAObject { constructor(e) { super(Yn, 'pattern', !0); this.id = e.id || ''; this.type = getStringOption(e.type, [ 'crossHatch', 'crossDiagonal', 'diagonalLeft', 'diagonalRight', 'horizontal', 'vertical', ]); this.use = e.use || ''; this.usehref = e.usehref || ''; this.color = null; this.extras = null; } [on](e) { e = e ? e[on]() : '#FFFFFF'; const t = this.color ? this.color[on]() : '#000000', i = 'repeating-linear-gradient', a = `${e},${e} 5px,${t} 5px,${t} 10px`; switch (this.type) { case 'crossHatch': return `${i}(to top,${a}) ${i}(to right,${a})`; case 'crossDiagonal': return `${i}(45deg,${a}) ${i}(-45deg,${a})`; case 'diagonalLeft': return `${i}(45deg,${a})`; case 'diagonalRight': return `${i}(-45deg,${a})`; case 'horizontal': return `${i}(to top,${a})`; case 'vertical': return `${i}(to right,${a})`; } return ''; } } class Picture extends StringObject { constructor(e) { super(Yn, 'picture'); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Proto extends XFAObject { constructor(e) { super(Yn, 'proto', !0); this.appearanceFilter = new XFAObjectArray(); this.arc = new XFAObjectArray(); this.area = new XFAObjectArray(); this.assist = new XFAObjectArray(); this.barcode = new XFAObjectArray(); this.bindItems = new XFAObjectArray(); this.bookend = new XFAObjectArray(); this.boolean = new XFAObjectArray(); this.border = new XFAObjectArray(); this.break = new XFAObjectArray(); this.breakAfter = new XFAObjectArray(); this.breakBefore = new XFAObjectArray(); this.button = new XFAObjectArray(); this.calculate = new XFAObjectArray(); this.caption = new XFAObjectArray(); this.certificate = new XFAObjectArray(); this.certificates = new XFAObjectArray(); this.checkButton = new XFAObjectArray(); this.choiceList = new XFAObjectArray(); this.color = new XFAObjectArray(); this.comb = new XFAObjectArray(); this.connect = new XFAObjectArray(); this.contentArea = new XFAObjectArray(); this.corner = new XFAObjectArray(); this.date = new XFAObjectArray(); this.dateTime = new XFAObjectArray(); this.dateTimeEdit = new XFAObjectArray(); this.decimal = new XFAObjectArray(); this.defaultUi = new XFAObjectArray(); this.desc = new XFAObjectArray(); this.digestMethod = new XFAObjectArray(); this.digestMethods = new XFAObjectArray(); this.draw = new XFAObjectArray(); this.edge = new XFAObjectArray(); this.encoding = new XFAObjectArray(); this.encodings = new XFAObjectArray(); this.encrypt = new XFAObjectArray(); this.encryptData = new XFAObjectArray(); this.encryption = new XFAObjectArray(); this.encryptionMethod = new XFAObjectArray(); this.encryptionMethods = new XFAObjectArray(); this.event = new XFAObjectArray(); this.exData = new XFAObjectArray(); this.exObject = new XFAObjectArray(); this.exclGroup = new XFAObjectArray(); this.execute = new XFAObjectArray(); this.extras = new XFAObjectArray(); this.field = new XFAObjectArray(); this.fill = new XFAObjectArray(); this.filter = new XFAObjectArray(); this.float = new XFAObjectArray(); this.font = new XFAObjectArray(); this.format = new XFAObjectArray(); this.handler = new XFAObjectArray(); this.hyphenation = new XFAObjectArray(); this.image = new XFAObjectArray(); this.imageEdit = new XFAObjectArray(); this.integer = new XFAObjectArray(); this.issuers = new XFAObjectArray(); this.items = new XFAObjectArray(); this.keep = new XFAObjectArray(); this.keyUsage = new XFAObjectArray(); this.line = new XFAObjectArray(); this.linear = new XFAObjectArray(); this.lockDocument = new XFAObjectArray(); this.manifest = new XFAObjectArray(); this.margin = new XFAObjectArray(); this.mdp = new XFAObjectArray(); this.medium = new XFAObjectArray(); this.message = new XFAObjectArray(); this.numericEdit = new XFAObjectArray(); this.occur = new XFAObjectArray(); this.oid = new XFAObjectArray(); this.oids = new XFAObjectArray(); this.overflow = new XFAObjectArray(); this.pageArea = new XFAObjectArray(); this.pageSet = new XFAObjectArray(); this.para = new XFAObjectArray(); this.passwordEdit = new XFAObjectArray(); this.pattern = new XFAObjectArray(); this.picture = new XFAObjectArray(); this.radial = new XFAObjectArray(); this.reason = new XFAObjectArray(); this.reasons = new XFAObjectArray(); this.rectangle = new XFAObjectArray(); this.ref = new XFAObjectArray(); this.script = new XFAObjectArray(); this.setProperty = new XFAObjectArray(); this.signData = new XFAObjectArray(); this.signature = new XFAObjectArray(); this.signing = new XFAObjectArray(); this.solid = new XFAObjectArray(); this.speak = new XFAObjectArray(); this.stipple = new XFAObjectArray(); this.subform = new XFAObjectArray(); this.subformSet = new XFAObjectArray(); this.subjectDN = new XFAObjectArray(); this.subjectDNs = new XFAObjectArray(); this.submit = new XFAObjectArray(); this.text = new XFAObjectArray(); this.textEdit = new XFAObjectArray(); this.time = new XFAObjectArray(); this.timeStamp = new XFAObjectArray(); this.toolTip = new XFAObjectArray(); this.traversal = new XFAObjectArray(); this.traverse = new XFAObjectArray(); this.ui = new XFAObjectArray(); this.validate = new XFAObjectArray(); this.value = new XFAObjectArray(); this.variables = new XFAObjectArray(); } } class Radial extends XFAObject { constructor(e) { super(Yn, 'radial', !0); this.id = e.id || ''; this.type = getStringOption(e.type, ['toEdge', 'toCenter']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.color = null; this.extras = null; } [on](e) { e = e ? e[on]() : '#FFFFFF'; const t = this.color ? this.color[on]() : '#000000'; return `radial-gradient(circle at center, ${ 'toEdge' === this.type ? `${e},${t}` : `${t},${e}` })`; } } class Reason extends StringObject { constructor(e) { super(Yn, 'reason'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Reasons extends XFAObject { constructor(e) { super(Yn, 'reasons', !0); this.id = e.id || ''; this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.reason = new XFAObjectArray(); } } class Rectangle extends XFAObject { constructor(e) { super(Yn, 'rectangle', !0); this.hand = getStringOption(e.hand, ['even', 'left', 'right']); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.corner = new XFAObjectArray(4); this.edge = new XFAObjectArray(4); this.fill = null; } [sn]() { const e = this.edge.children.length ? this.edge.children[0] : new Edge({}), t = e[on](), i = Object.create(null); 'visible' === this.fill?.presence ? Object.assign(i, this.fill[on]()) : (i.fill = 'transparent'); i.strokeWidth = measureToString('visible' === e.presence ? e.thickness : 0); i.stroke = t.color; const a = ( this.corner.children.length ? this.corner.children[0] : new Corner({}) )[on](), r = { name: 'svg', children: [ { name: 'rect', attributes: { xmlns: vn, width: '100%', height: '100%', x: 0, y: 0, rx: a.radius, ry: a.radius, style: i, }, }, ], attributes: { xmlns: vn, style: { overflow: 'visible' }, width: '100%', height: '100%', }, }; if (hasMargin(this[ms]()[ms]())) return HTMLResult.success({ name: 'div', attributes: { style: { display: 'inline', width: '100%', height: '100%' }, }, children: [r], }); r.attributes.style.position = 'absolute'; return HTMLResult.success(r); } } class RefElement extends StringObject { constructor(e) { super(Yn, 'ref'); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Script extends StringObject { constructor(e) { super(Yn, 'script'); this.binding = e.binding || ''; this.contentType = e.contentType || ''; this.id = e.id || ''; this.name = e.name || ''; this.runAt = getStringOption(e.runAt, ['client', 'both', 'server']); this.use = e.use || ''; this.usehref = e.usehref || ''; } } class SetProperty extends XFAObject { constructor(e) { super(Yn, 'setProperty'); this.connection = e.connection || ''; this.ref = e.ref || ''; this.target = e.target || ''; } } class SignData extends XFAObject { constructor(e) { super(Yn, 'signData', !0); this.id = e.id || ''; this.operation = getStringOption(e.operation, ['sign', 'clear', 'verify']); this.ref = e.ref || ''; this.target = e.target || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.filter = null; this.manifest = null; } } class Signature extends XFAObject { constructor(e) { super(Yn, 'signature', !0); this.id = e.id || ''; this.type = getStringOption(e.type, ['PDF1.3', 'PDF1.6']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.border = null; this.extras = null; this.filter = null; this.manifest = null; this.margin = null; } } class Signing extends XFAObject { constructor(e) { super(Yn, 'signing', !0); this.id = e.id || ''; this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.certificate = new XFAObjectArray(); } } class Solid extends XFAObject { constructor(e) { super(Yn, 'solid', !0); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; } [on](e) { return e ? e[on]() : '#FFFFFF'; } } class Speak extends StringObject { constructor(e) { super(Yn, 'speak'); this.disable = getInteger({ data: e.disable, defaultValue: 0, validate: (e) => 1 === e, }); this.id = e.id || ''; this.priority = getStringOption(e.priority, [ 'custom', 'caption', 'name', 'toolTip', ]); this.rid = e.rid || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Stipple extends XFAObject { constructor(e) { super(Yn, 'stipple', !0); this.id = e.id || ''; this.rate = getInteger({ data: e.rate, defaultValue: 50, validate: (e) => e >= 0 && e <= 100, }); this.use = e.use || ''; this.usehref = e.usehref || ''; this.color = null; this.extras = null; } [on](e) { const t = this.rate / 100; return Util.makeHexColor( Math.round(e.value.r * (1 - t) + this.value.r * t), Math.round(e.value.g * (1 - t) + this.value.g * t), Math.round(e.value.b * (1 - t) + this.value.b * t), ); } } class Subform extends XFAObject { constructor(e) { super(Yn, 'subform', !0); this.access = getStringOption(e.access, [ 'open', 'nonInteractive', 'protected', 'readOnly', ]); this.allowMacro = getInteger({ data: e.allowMacro, defaultValue: 0, validate: (e) => 1 === e, }); this.anchorType = getStringOption(e.anchorType, [ 'topLeft', 'bottomCenter', 'bottomLeft', 'bottomRight', 'middleCenter', 'middleLeft', 'middleRight', 'topCenter', 'topRight', ]); this.colSpan = getInteger({ data: e.colSpan, defaultValue: 1, validate: (e) => e >= 1 || -1 === e, }); this.columnWidths = (e.columnWidths || '') .trim() .split(/\s+/) .map((e) => ('-1' === e ? -1 : getMeasurement(e))); this.h = e.h ? getMeasurement(e.h) : ''; this.hAlign = getStringOption(e.hAlign, [ 'left', 'center', 'justify', 'justifyAll', 'radix', 'right', ]); this.id = e.id || ''; this.layout = getStringOption(e.layout, [ 'position', 'lr-tb', 'rl-row', 'rl-tb', 'row', 'table', 'tb', ]); this.locale = e.locale || ''; this.maxH = getMeasurement(e.maxH, '0pt'); this.maxW = getMeasurement(e.maxW, '0pt'); this.mergeMode = getStringOption(e.mergeMode, [ 'consumeData', 'matchTemplate', ]); this.minH = getMeasurement(e.minH, '0pt'); this.minW = getMeasurement(e.minW, '0pt'); this.name = e.name || ''; this.presence = getStringOption(e.presence, [ 'visible', 'hidden', 'inactive', 'invisible', ]); this.relevant = getRelevant(e.relevant); this.restoreState = getStringOption(e.restoreState, ['manual', 'auto']); this.scope = getStringOption(e.scope, ['name', 'none']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.w = e.w ? getMeasurement(e.w) : ''; this.x = getMeasurement(e.x, '0pt'); this.y = getMeasurement(e.y, '0pt'); this.assist = null; this.bind = null; this.bookend = null; this.border = null; this.break = null; this.calculate = null; this.desc = null; this.extras = null; this.keep = null; this.margin = null; this.occur = null; this.overflow = null; this.pageSet = null; this.para = null; this.traversal = null; this.validate = null; this.variables = null; this.area = new XFAObjectArray(); this.breakAfter = new XFAObjectArray(); this.breakBefore = new XFAObjectArray(); this.connect = new XFAObjectArray(); this.draw = new XFAObjectArray(); this.event = new XFAObjectArray(); this.exObject = new XFAObjectArray(); this.exclGroup = new XFAObjectArray(); this.field = new XFAObjectArray(); this.proto = new XFAObjectArray(); this.setProperty = new XFAObjectArray(); this.subform = new XFAObjectArray(); this.subformSet = new XFAObjectArray(); } [ps]() { const e = this[ms](); return e instanceof SubformSet ? e[ps]() : e; } [Rs]() { return !0; } [Ms]() { return ( (this.layout.endsWith('-tb') && 0 === this[ss].attempt && this[ss].numberInLine > 0) || this[ms]()[Ms]() ); } *[ds]() { yield* getContainedChildren(this); } [os]() { return flushHTML(this); } [Zr](e, t) { addHTML(this, e, t); } [cs]() { return getAvailableSpace(this); } [Us]() { const e = this[ps](); if (!e[Us]()) return !1; if (void 0 !== this[ss]._isSplittable) return this[ss]._isSplittable; if ('position' === this.layout || this.layout.includes('row')) { this[ss]._isSplittable = !1; return !1; } if (this.keep && 'none' !== this.keep.intact) { this[ss]._isSplittable = !1; return !1; } if (e.layout?.endsWith('-tb') && 0 !== e[ss].numberInLine) return !1; this[ss]._isSplittable = !0; return !0; } [sn](e) { setTabIndex(this); if (this.break) { if ('auto' !== this.break.after || '' !== this.break.afterTarget) { const e = new BreakAfter({ targetType: this.break.after, target: this.break.afterTarget, startNew: this.break.startNew.toString(), }); e[ws] = this[ws]; this[Vr](e); this.breakAfter.push(e); } if ('auto' !== this.break.before || '' !== this.break.beforeTarget) { const e = new BreakBefore({ targetType: this.break.before, target: this.break.beforeTarget, startNew: this.break.startNew.toString(), }); e[ws] = this[ws]; this[Vr](e); this.breakBefore.push(e); } if ('' !== this.break.overflowTarget) { const e = new Overflow({ target: this.break.overflowTarget, leader: this.break.overflowLeader, trailer: this.break.overflowTrailer, }); e[ws] = this[ws]; this[Vr](e); this.overflow.push(e); } this[Zs](this.break); this.break = null; } if ('hidden' === this.presence || 'inactive' === this.presence) return HTMLResult.EMPTY; (this.breakBefore.children.length > 1 || this.breakAfter.children.length > 1) && warn( 'XFA - Several breakBefore or breakAfter in subforms: please file a bug.', ); if (this.breakBefore.children.length >= 1) { const e = this.breakBefore.children[0]; if (handleBreak(e)) return HTMLResult.breakNode(e); } if (this[ss]?.afterBreakAfter) return HTMLResult.EMPTY; fixDimensions(this); const t = [], i = { id: this[gn], class: [] }; setAccess(this, i.class); this[ss] || (this[ss] = Object.create(null)); Object.assign(this[ss], { children: t, line: null, attributes: i, attempt: 0, numberInLine: 0, availableSpace: { width: Math.min(this.w || 1 / 0, e.width), height: Math.min(this.h || 1 / 0, e.height), }, width: 0, height: 0, prevHeight: 0, currentWidth: 0, }); const a = this[ys](), r = a[ss].noLayoutFailure, s = this[Us](); s || setFirstUnsplittable(this); if (!checkDimensions(this, e)) return HTMLResult.FAILURE; const n = new Set([ 'area', 'draw', 'exclGroup', 'field', 'subform', 'subformSet', ]); if (this.layout.includes('row')) { const e = this[ps]().columnWidths; if (Array.isArray(e) && e.length > 0) { this[ss].columnWidths = e; this[ss].currentColumn = 0; } } const o = toStyle( this, 'anchorType', 'dimensions', 'position', 'presence', 'border', 'margin', 'hAlign', ), g = ['xfaSubform'], c = layoutClass(this); c && g.push(c); i.style = o; i.class = g; this.name && (i.xfaName = this.name); if (this.overflow) { const t = this.overflow[Qs](); if (t.addLeader) { t.addLeader = !1; handleOverflow(this, t.leader, e); } } this[Xs](); const C = 'lr-tb' === this.layout || 'rl-tb' === this.layout, h = C ? 2 : 1; for (; this[ss].attempt < h; this[ss].attempt++) { C && 1 === this[ss].attempt && (this[ss].numberInLine = 0); const e = this[_r]({ filter: n, include: !0 }); if (e.success) break; if (e.isBreak()) { this[js](); return e; } if ( C && 0 === this[ss].attempt && 0 === this[ss].numberInLine && !a[ss].noLayoutFailure ) { this[ss].attempt = h; break; } } this[js](); s || unsetFirstUnsplittable(this); a[ss].noLayoutFailure = r; if (this[ss].attempt === h) { this.overflow && (this[ys]()[ss].overflowNode = this.overflow); s || delete this[ss]; return HTMLResult.FAILURE; } if (this.overflow) { const t = this.overflow[Qs](); if (t.addTrailer) { t.addTrailer = !1; handleOverflow(this, t.trailer, e); } } let l = 0, Q = 0; if (this.margin) { l = this.margin.leftInset + this.margin.rightInset; Q = this.margin.topInset + this.margin.bottomInset; } const E = Math.max(this[ss].width + l, this.w || 0), u = Math.max(this[ss].height + Q, this.h || 0), d = [this.x, this.y, E, u]; '' === this.w && (o.width = measureToString(E)); '' === this.h && (o.height = measureToString(u)); if (('0px' === o.width || '0px' === o.height) && 0 === t.length) return HTMLResult.EMPTY; const f = { name: 'div', attributes: i, children: t }; applyAssist(this, i); const p = HTMLResult.success(createWrapper(this, f), d); if (this.breakAfter.children.length >= 1) { const e = this.breakAfter.children[0]; if (handleBreak(e)) { this[ss].afterBreakAfter = p; return HTMLResult.breakNode(e); } } delete this[ss]; return p; } } class SubformSet extends XFAObject { constructor(e) { super(Yn, 'subformSet', !0); this.id = e.id || ''; this.name = e.name || ''; this.relation = getStringOption(e.relation, [ 'ordered', 'choice', 'unordered', ]); this.relevant = getRelevant(e.relevant); this.use = e.use || ''; this.usehref = e.usehref || ''; this.bookend = null; this.break = null; this.desc = null; this.extras = null; this.occur = null; this.overflow = null; this.breakAfter = new XFAObjectArray(); this.breakBefore = new XFAObjectArray(); this.subform = new XFAObjectArray(); this.subformSet = new XFAObjectArray(); } *[ds]() { yield* getContainedChildren(this); } [ps]() { let e = this[ms](); for (; !(e instanceof Subform); ) e = e[ms](); return e; } [Rs]() { return !0; } } class SubjectDN extends ContentObject { constructor(e) { super(Yn, 'subjectDN'); this.delimiter = e.delimiter || ','; this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } [ns]() { this[is] = new Map( this[is].split(this.delimiter).map((e) => { (e = e.split('=', 2))[0] = e[0].trim(); return e; }), ); } } class SubjectDNs extends XFAObject { constructor(e) { super(Yn, 'subjectDNs', !0); this.id = e.id || ''; this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; this.subjectDN = new XFAObjectArray(); } } class Submit extends XFAObject { constructor(e) { super(Yn, 'submit', !0); this.embedPDF = getInteger({ data: e.embedPDF, defaultValue: 0, validate: (e) => 1 === e, }); this.format = getStringOption(e.format, [ 'xdp', 'formdata', 'pdf', 'urlencoded', 'xfd', 'xml', ]); this.id = e.id || ''; this.target = e.target || ''; this.textEncoding = getKeyword({ data: e.textEncoding ? e.textEncoding.toLowerCase() : '', defaultValue: '', validate: (e) => [ 'utf-8', 'big-five', 'fontspecific', 'gbk', 'gb-18030', 'gb-2312', 'ksc-5601', 'none', 'shift-jis', 'ucs-2', 'utf-16', ].includes(e) || e.match(/iso-8859-\d{2}/), }); this.use = e.use || ''; this.usehref = e.usehref || ''; this.xdpContent = e.xdpContent || ''; this.encrypt = null; this.encryptData = new XFAObjectArray(); this.signData = new XFAObjectArray(); } } class Template extends XFAObject { constructor(e) { super(Yn, 'template', !0); this.baseProfile = getStringOption(e.baseProfile, [ 'full', 'interactiveForms', ]); this.extras = null; this.subform = new XFAObjectArray(); } [ns]() { 0 === this.subform.children.length && warn('XFA - No subforms in template node.'); this.subform.children.length >= 2 && warn('XFA - Several subforms in template node: please file a bug.'); this[tn] = 5e3; } [Us]() { return !0; } [zs](e, t) { return e.startsWith('#') ? [this[Ds].get(e.slice(1))] : searchNode(this, t, e, !0, !0); } *[rn]() { if (!this.subform.children.length) return HTMLResult.success({ name: 'div', children: [] }); this[ss] = { overflowNode: null, firstUnsplittable: null, currentContentArea: null, currentPageArea: null, noLayoutFailure: !1, pageNumber: 1, pagePosition: 'first', oddOrEven: 'odd', blankOrNotBlank: 'nonBlank', paraStack: [], }; const e = this.subform.children[0]; e.pageSet[$r](); const t = e.pageSet.pageArea.children, i = { name: 'div', children: [] }; let a = null, r = null, s = null; if (e.breakBefore.children.length >= 1) { r = e.breakBefore.children[0]; s = r.target; } else if ( e.subform.children.length >= 1 && e.subform.children[0].breakBefore.children.length >= 1 ) { r = e.subform.children[0].breakBefore.children[0]; s = r.target; } else if (e.break?.beforeTarget) { r = e.break; s = r.beforeTarget; } else if ( e.subform.children.length >= 1 && e.subform.children[0].break?.beforeTarget ) { r = e.subform.children[0].break; s = r.beforeTarget; } if (r) { const e = this[zs](s, r[ms]()); if (e instanceof PageArea) { a = e; r[ss] = {}; } } a || (a = t[0]); a[ss] = { numberOfUse: 1 }; const n = a[ms](); n[ss] = { numberOfUse: 1, pageIndex: n.pageArea.children.indexOf(a), pageSetIndex: 0, }; let o, g = null, c = null, C = !0, h = 0, l = 0; for (;;) { if (C) h = 0; else { i.children.pop(); if (3 == ++h) { warn('XFA - Something goes wrong: please file a bug.'); return i; } } o = null; this[ss].currentPageArea = a; const t = a[sn]().html; i.children.push(t); if (g) { this[ss].noLayoutFailure = !0; t.children.push(g[sn](a[ss].space).html); g = null; } if (c) { this[ss].noLayoutFailure = !0; t.children.push(c[sn](a[ss].space).html); c = null; } const r = a.contentArea.children, s = t.children.filter((e) => e.attributes.class.includes('xfaContentarea'), ); C = !1; this[ss].firstUnsplittable = null; this[ss].noLayoutFailure = !1; const flush = (t) => { const i = e[os](); if (i) { C ||= i.children?.length > 0; s[t].children.push(i); } }; for (let t = l, a = r.length; t < a; t++) { const a = (this[ss].currentContentArea = r[t]), n = { width: a.w, height: a.h }; l = 0; if (g) { s[t].children.push(g[sn](n).html); g = null; } if (c) { s[t].children.push(c[sn](n).html); c = null; } const h = e[sn](n); if (h.success) { if (h.html) { C ||= h.html.children?.length > 0; s[t].children.push(h.html); } else !C && i.children.length > 1 && i.children.pop(); return i; } if (h.isBreak()) { const e = h.breakNode; flush(t); if ('auto' === e.targetType) continue; if (e.leader) { g = this[zs](e.leader, e[ms]()); g = g ? g[0] : null; } if (e.trailer) { c = this[zs](e.trailer, e[ms]()); c = c ? c[0] : null; } if ('pageArea' === e.targetType) { o = e[ss].target; t = 1 / 0; } else if (e[ss].target) { o = e[ss].target; l = e[ss].index + 1; t = 1 / 0; } else t = e[ss].index; } else if (this[ss].overflowNode) { const e = this[ss].overflowNode; this[ss].overflowNode = null; const i = e[Qs](), a = i.target; i.addLeader = null !== i.leader; i.addTrailer = null !== i.trailer; flush(t); const s = t; t = 1 / 0; if (a instanceof PageArea) o = a; else if (a instanceof ContentArea) { const e = r.indexOf(a); if (-1 !== e) e > s ? (t = e - 1) : (l = e); else { o = a[ms](); l = o.contentArea.children.indexOf(a); } } } else flush(t); } this[ss].pageNumber += 1; o && (o[Hs]() ? (o[ss].numberOfUse += 1) : (o = null)); a = o || a[fs](); yield null; } } } class Text extends ContentObject { constructor(e) { super(Yn, 'text'); this.id = e.id || ''; this.maxChars = getInteger({ data: e.maxChars, defaultValue: 0, validate: (e) => e >= 0, }); this.name = e.name || ''; this.rid = e.rid || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } [Xr]() { return !0; } [Ks](e) { if (e[Ys] === cn.xhtml.id) { this[is] = e; return !0; } warn(`XFA - Invalid content in Text: ${e[vs]}.`); return !1; } [Os](e) { this[is] instanceof XFAObject || super[Os](e); } [ns]() { 'string' == typeof this[is] && (this[is] = this[is].replaceAll('\r\n', '\n')); } [Qs]() { return 'string' == typeof this[is] ? this[is] .split(/[\u2029\u2028\n]/) .reduce((e, t) => { t && e.push(t); return e; }, []) .join('\n') : this[is][an](); } [sn](e) { if ('string' == typeof this[is]) { const e = valueToHtml(this[is]).html; if (this[is].includes('\u2029')) { e.name = 'div'; e.children = []; this[is] .split('\u2029') .map((e) => e.split(/[\u2028\n]/).reduce((e, t) => { e.push({ name: 'span', value: t }, { name: 'br' }); return e; }, []), ) .forEach((t) => { e.children.push({ name: 'p', children: t }); }); } else if (/[\u2028\n]/.test(this[is])) { e.name = 'div'; e.children = []; this[is].split(/[\u2028\n]/).forEach((t) => { e.children.push({ name: 'span', value: t }, { name: 'br' }); }); } return HTMLResult.success(e); } return this[is][sn](e); } } class TextEdit extends XFAObject { constructor(e) { super(Yn, 'textEdit', !0); this.allowRichText = getInteger({ data: e.allowRichText, defaultValue: 0, validate: (e) => 1 === e, }); this.hScrollPolicy = getStringOption(e.hScrollPolicy, [ 'auto', 'off', 'on', ]); this.id = e.id || ''; this.multiLine = getInteger({ data: e.multiLine, defaultValue: '', validate: (e) => 0 === e || 1 === e, }); this.use = e.use || ''; this.usehref = e.usehref || ''; this.vScrollPolicy = getStringOption(e.vScrollPolicy, [ 'auto', 'off', 'on', ]); this.border = null; this.comb = null; this.extras = null; this.margin = null; } [sn](e) { const t = toStyle(this, 'border', 'font', 'margin'); let i; const a = this[ms]()[ms](); '' === this.multiLine && (this.multiLine = a instanceof Draw ? 1 : 0); i = 1 === this.multiLine ? { name: 'textarea', attributes: { dataId: a[as]?.[gn] || a[gn], fieldId: a[gn], class: ['xfaTextfield'], style: t, 'aria-label': ariaLabel(a), 'aria-required': !1, }, } : { name: 'input', attributes: { type: 'text', dataId: a[as]?.[gn] || a[gn], fieldId: a[gn], class: ['xfaTextfield'], style: t, 'aria-label': ariaLabel(a), 'aria-required': !1, }, }; if (isRequired(a)) { i.attributes['aria-required'] = !0; i.attributes.required = !0; } return HTMLResult.success({ name: 'label', attributes: { class: ['xfaLabel'] }, children: [i], }); } } class Time extends StringObject { constructor(e) { super(Yn, 'time'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } [ns]() { const e = this[is].trim(); this[is] = e ? new Date(e) : null; } [sn](e) { return valueToHtml(this[is] ? this[is].toString() : ''); } } class TimeStamp extends XFAObject { constructor(e) { super(Yn, 'timeStamp'); this.id = e.id || ''; this.server = e.server || ''; this.type = getStringOption(e.type, ['optional', 'required']); this.use = e.use || ''; this.usehref = e.usehref || ''; } } class ToolTip extends StringObject { constructor(e) { super(Yn, 'toolTip'); this.id = e.id || ''; this.rid = e.rid || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Traversal extends XFAObject { constructor(e) { super(Yn, 'traversal', !0); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; this.traverse = new XFAObjectArray(); } } class Traverse extends XFAObject { constructor(e) { super(Yn, 'traverse', !0); this.id = e.id || ''; this.operation = getStringOption(e.operation, [ 'next', 'back', 'down', 'first', 'left', 'right', 'up', ]); this.ref = e.ref || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; this.script = null; } get name() { return this.operation; } [Ls]() { return !1; } } class Ui extends XFAObject { constructor(e) { super(Yn, 'ui', !0); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; this.picture = null; this.barcode = null; this.button = null; this.checkButton = null; this.choiceList = null; this.dateTimeEdit = null; this.defaultUi = null; this.imageEdit = null; this.numericEdit = null; this.passwordEdit = null; this.signature = null; this.textEdit = null; } [Qs]() { if (void 0 === this[ss]) { for (const e of Object.getOwnPropertyNames(this)) { if ('extras' === e || 'picture' === e) continue; const t = this[e]; if (t instanceof XFAObject) { this[ss] = t; return t; } } this[ss] = null; } return this[ss]; } [sn](e) { const t = this[Qs](); return t ? t[sn](e) : HTMLResult.EMPTY; } } class Validate extends XFAObject { constructor(e) { super(Yn, 'validate', !0); this.formatTest = getStringOption(e.formatTest, [ 'warning', 'disabled', 'error', ]); this.id = e.id || ''; this.nullTest = getStringOption(e.nullTest, [ 'disabled', 'error', 'warning', ]); this.scriptTest = getStringOption(e.scriptTest, [ 'error', 'disabled', 'warning', ]); this.use = e.use || ''; this.usehref = e.usehref || ''; this.extras = null; this.message = null; this.picture = null; this.script = null; } } class Value extends XFAObject { constructor(e) { super(Yn, 'value', !0); this.id = e.id || ''; this.override = getInteger({ data: e.override, defaultValue: 0, validate: (e) => 1 === e, }); this.relevant = getRelevant(e.relevant); this.use = e.use || ''; this.usehref = e.usehref || ''; this.arc = null; this.boolean = null; this.date = null; this.dateTime = null; this.decimal = null; this.exData = null; this.float = null; this.image = null; this.integer = null; this.line = null; this.rectangle = null; this.text = null; this.time = null; } [en](e) { const t = this[ms](); if (t instanceof Field && t.ui?.imageEdit) { if (!this.image) { this.image = new Image({}); this[Vr](this.image); } this.image[is] = e[is]; return; } const i = e[vs]; if (null === this[i]) { for (const e of Object.getOwnPropertyNames(this)) { const t = this[e]; if (t instanceof XFAObject) { this[e] = null; this[Zs](t); } } this[e[vs]] = e; this[Vr](e); } else this[i][is] = e[is]; } [an]() { if (this.exData) return 'string' == typeof this.exData[is] ? this.exData[is].trim() : this.exData[is][an]().trim(); for (const e of Object.getOwnPropertyNames(this)) { if ('image' === e) continue; const t = this[e]; if (t instanceof XFAObject) return (t[is] || '').toString().trim(); } return null; } [sn](e) { for (const t of Object.getOwnPropertyNames(this)) { const i = this[t]; if (i instanceof XFAObject) return i[sn](e); } return HTMLResult.EMPTY; } } class Variables extends XFAObject { constructor(e) { super(Yn, 'variables', !0); this.id = e.id || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; this.boolean = new XFAObjectArray(); this.date = new XFAObjectArray(); this.dateTime = new XFAObjectArray(); this.decimal = new XFAObjectArray(); this.exData = new XFAObjectArray(); this.float = new XFAObjectArray(); this.image = new XFAObjectArray(); this.integer = new XFAObjectArray(); this.manifest = new XFAObjectArray(); this.script = new XFAObjectArray(); this.text = new XFAObjectArray(); this.time = new XFAObjectArray(); } [Ls]() { return !0; } } class TemplateNamespace { static [In](e, t) { if (TemplateNamespace.hasOwnProperty(e)) { const i = TemplateNamespace[e](t); i[An](t); return i; } } static appearanceFilter(e) { return new AppearanceFilter(e); } static arc(e) { return new Arc(e); } static area(e) { return new Area(e); } static assist(e) { return new Assist(e); } static barcode(e) { return new Barcode(e); } static bind(e) { return new Bind(e); } static bindItems(e) { return new BindItems(e); } static bookend(e) { return new Bookend(e); } static boolean(e) { return new BooleanElement(e); } static border(e) { return new Border(e); } static break(e) { return new Break(e); } static breakAfter(e) { return new BreakAfter(e); } static breakBefore(e) { return new BreakBefore(e); } static button(e) { return new Button(e); } static calculate(e) { return new Calculate(e); } static caption(e) { return new Caption(e); } static certificate(e) { return new Certificate(e); } static certificates(e) { return new Certificates(e); } static checkButton(e) { return new CheckButton(e); } static choiceList(e) { return new ChoiceList(e); } static color(e) { return new Color(e); } static comb(e) { return new Comb(e); } static connect(e) { return new Connect(e); } static contentArea(e) { return new ContentArea(e); } static corner(e) { return new Corner(e); } static date(e) { return new DateElement(e); } static dateTime(e) { return new DateTime(e); } static dateTimeEdit(e) { return new DateTimeEdit(e); } static decimal(e) { return new Decimal(e); } static defaultUi(e) { return new DefaultUi(e); } static desc(e) { return new Desc(e); } static digestMethod(e) { return new DigestMethod(e); } static digestMethods(e) { return new DigestMethods(e); } static draw(e) { return new Draw(e); } static edge(e) { return new Edge(e); } static encoding(e) { return new Encoding(e); } static encodings(e) { return new Encodings(e); } static encrypt(e) { return new Encrypt(e); } static encryptData(e) { return new EncryptData(e); } static encryption(e) { return new Encryption(e); } static encryptionMethod(e) { return new EncryptionMethod(e); } static encryptionMethods(e) { return new EncryptionMethods(e); } static event(e) { return new Event(e); } static exData(e) { return new ExData(e); } static exObject(e) { return new ExObject(e); } static exclGroup(e) { return new ExclGroup(e); } static execute(e) { return new Execute(e); } static extras(e) { return new Extras(e); } static field(e) { return new Field(e); } static fill(e) { return new Fill(e); } static filter(e) { return new Filter(e); } static float(e) { return new Float(e); } static font(e) { return new template_Font(e); } static format(e) { return new Format(e); } static handler(e) { return new Handler(e); } static hyphenation(e) { return new Hyphenation(e); } static image(e) { return new Image(e); } static imageEdit(e) { return new ImageEdit(e); } static integer(e) { return new Integer(e); } static issuers(e) { return new Issuers(e); } static items(e) { return new Items(e); } static keep(e) { return new Keep(e); } static keyUsage(e) { return new KeyUsage(e); } static line(e) { return new Line(e); } static linear(e) { return new Linear(e); } static lockDocument(e) { return new LockDocument(e); } static manifest(e) { return new Manifest(e); } static margin(e) { return new Margin(e); } static mdp(e) { return new Mdp(e); } static medium(e) { return new Medium(e); } static message(e) { return new Message(e); } static numericEdit(e) { return new NumericEdit(e); } static occur(e) { return new Occur(e); } static oid(e) { return new Oid(e); } static oids(e) { return new Oids(e); } static overflow(e) { return new Overflow(e); } static pageArea(e) { return new PageArea(e); } static pageSet(e) { return new PageSet(e); } static para(e) { return new Para(e); } static passwordEdit(e) { return new PasswordEdit(e); } static pattern(e) { return new template_Pattern(e); } static picture(e) { return new Picture(e); } static proto(e) { return new Proto(e); } static radial(e) { return new Radial(e); } static reason(e) { return new Reason(e); } static reasons(e) { return new Reasons(e); } static rectangle(e) { return new Rectangle(e); } static ref(e) { return new RefElement(e); } static script(e) { return new Script(e); } static setProperty(e) { return new SetProperty(e); } static signData(e) { return new SignData(e); } static signature(e) { return new Signature(e); } static signing(e) { return new Signing(e); } static solid(e) { return new Solid(e); } static speak(e) { return new Speak(e); } static stipple(e) { return new Stipple(e); } static subform(e) { return new Subform(e); } static subformSet(e) { return new SubformSet(e); } static subjectDN(e) { return new SubjectDN(e); } static subjectDNs(e) { return new SubjectDNs(e); } static submit(e) { return new Submit(e); } static template(e) { return new Template(e); } static text(e) { return new Text(e); } static textEdit(e) { return new TextEdit(e); } static time(e) { return new Time(e); } static timeStamp(e) { return new TimeStamp(e); } static toolTip(e) { return new ToolTip(e); } static traversal(e) { return new Traversal(e); } static traverse(e) { return new Traverse(e); } static ui(e) { return new Ui(e); } static validate(e) { return new Validate(e); } static value(e) { return new Value(e); } static variables(e) { return new Variables(e); } } const On = cn.datasets.id; function createText(e) { const t = new Text({}); t[is] = e; return t; } class Binder { constructor(e) { this.root = e; this.datasets = e.datasets; this.data = e.datasets?.data || new XmlObject(cn.datasets.id, 'data'); this.emptyMerge = 0 === this.data[us]().length; this.root.form = this.form = e.template[es](); } _isConsumeData() { return !this.emptyMerge && this._mergeMode; } _isMatchTemplate() { return !this._isConsumeData(); } bind() { this._bindElement(this.form, this.data); return this.form; } getData() { return this.data; } _bindValue(e, t, i) { e[as] = t; if (e[bs]()) if (t[Ns]()) { const i = t[Bs](); e[en](createText(i)); } else if ( e instanceof Field && 'multiSelect' === e.ui?.choiceList?.open ) { const i = t[us]() .map((e) => e[is].trim()) .join('\n'); e[en](createText(i)); } else this._isConsumeData() && warn("XFA - Nodes haven't the same type."); else !t[Ns]() || this._isMatchTemplate() ? this._bindElement(e, t) : warn("XFA - Nodes haven't the same type."); } _findDataByNameToConsume(e, t, i, a) { if (!e) return null; let r, s; for (let a = 0; a < 3; a++) { r = i[Es](e, !1, !0); for (;;) { s = r.next().value; if (!s) break; if (t === s[Ns]()) return s; } if (i[Ys] === cn.datasets.id && 'data' === i[vs]) break; i = i[ms](); } if (!a) return null; r = this.data[Es](e, !0, !1); s = r.next().value; if (s) return s; r = this.data[gs](e, !0); s = r.next().value; return s?.[Ns]() ? s : null; } _setProperties(e, t) { if (e.hasOwnProperty('setProperty')) for (const { ref: i, target: a, connection: r } of e.setProperty .children) { if (r) continue; if (!i) continue; const s = searchNode(this.root, t, i, !1, !1); if (!s) { warn(`XFA - Invalid reference: ${i}.`); continue; } const [n] = s; if (!n[Gs](this.data)) { warn('XFA - Invalid node: must be a data node.'); continue; } const o = searchNode(this.root, e, a, !1, !1); if (!o) { warn(`XFA - Invalid target: ${a}.`); continue; } const [g] = o; if (!g[Gs](e)) { warn('XFA - Invalid target: must be a property or subproperty.'); continue; } const c = g[ms](); if (g instanceof SetProperty || c instanceof SetProperty) { warn( 'XFA - Invalid target: cannot be a setProperty or one of its properties.', ); continue; } if (g instanceof BindItems || c instanceof BindItems) { warn( 'XFA - Invalid target: cannot be a bindItems or one of its properties.', ); continue; } const C = n[an](), h = g[vs]; if (g instanceof XFAAttribute) { const e = Object.create(null); e[h] = C; const t = Reflect.construct(Object.getPrototypeOf(c).constructor, [ e, ]); c[h] = t[h]; } else if (g.hasOwnProperty(is)) { g[as] = n; g[is] = C; g[ns](); } else warn('XFA - Invalid node to use in setProperty'); } } _bindItems(e, t) { if ( !e.hasOwnProperty('items') || !e.hasOwnProperty('bindItems') || e.bindItems.isEmpty() ) return; for (const t of e.items.children) e[Zs](t); e.items.clear(); const i = new Items({}), a = new Items({}); e[Vr](i); e.items.push(i); e[Vr](a); e.items.push(a); for (const { ref: r, labelRef: s, valueRef: n, connection: o } of e .bindItems.children) { if (o) continue; if (!r) continue; const e = searchNode(this.root, t, r, !1, !1); if (e) for (const t of e) { if (!t[Gs](this.datasets)) { warn(`XFA - Invalid ref (${r}): must be a datasets child.`); continue; } const e = searchNode(this.root, t, s, !0, !1); if (!e) { warn(`XFA - Invalid label: ${s}.`); continue; } const [o] = e; if (!o[Gs](this.datasets)) { warn('XFA - Invalid label: must be a datasets child.'); continue; } const g = searchNode(this.root, t, n, !0, !1); if (!g) { warn(`XFA - Invalid value: ${n}.`); continue; } const [c] = g; if (!c[Gs](this.datasets)) { warn('XFA - Invalid value: must be a datasets child.'); continue; } const C = createText(o[an]()), h = createText(c[an]()); i[Vr](C); i.text.push(C); a[Vr](h); a.text.push(h); } else warn(`XFA - Invalid reference: ${r}.`); } } _bindOccurrences(e, t, i) { let a; if (t.length > 1) { a = e[es](); a[Zs](a.occur); a.occur = null; } this._bindValue(e, t[0], i); this._setProperties(e, t[0]); this._bindItems(e, t[0]); if (1 === t.length) return; const r = e[ms](), s = e[vs], n = r[Fs](e); for (let e = 1, o = t.length; e < o; e++) { const o = t[e], g = a[es](); r[s].push(g); r[Ss](n + e, g); this._bindValue(g, o, i); this._setProperties(g, o); this._bindItems(g, o); } } _createOccurrences(e) { if (!this.emptyMerge) return; const { occur: t } = e; if (!t || t.initial <= 1) return; const i = e[ms](), a = e[vs]; if (!(i[a] instanceof XFAObjectArray)) return; let r; r = e.name ? i[a].children.filter((t) => t.name === e.name).length : i[a].children.length; const s = i[Fs](e) + 1, n = t.initial - r; if (n) { const t = e[es](); t[Zs](t.occur); t.occur = null; i[a].push(t); i[Ss](s, t); for (let e = 1; e < n; e++) { const r = t[es](); i[a].push(r); i[Ss](s + e, r); } } } _getOccurInfo(e) { const { name: t, occur: i } = e; if (!i || !t) return [1, 1]; const a = -1 === i.max ? 1 / 0 : i.max; return [i.min, a]; } _setAndBind(e, t) { this._setProperties(e, t); this._bindItems(e, t); this._bindElement(e, t); } _bindElement(e, t) { const i = []; this._createOccurrences(e); for (const a of e[us]()) { if (a[as]) continue; if (void 0 === this._mergeMode && 'subform' === a[vs]) { this._mergeMode = 'consumeData' === a.mergeMode; const e = t[us](); if (e.length > 0) this._bindOccurrences(a, [e[0]], null); else if (this.emptyMerge) { const e = t[Ys] === On ? -1 : t[Ys], i = (a[as] = new XmlObject(e, a.name || 'root')); t[Vr](i); this._bindElement(a, i); } continue; } if (!a[Rs]()) continue; let e = !1, r = null, s = null, n = null; if (a.bind) { switch (a.bind.match) { case 'none': this._setAndBind(a, t); continue; case 'global': e = !0; break; case 'dataRef': if (!a.bind.ref) { warn(`XFA - ref is empty in node ${a[vs]}.`); this._setAndBind(a, t); continue; } s = a.bind.ref; } a.bind.picture && (r = a.bind.picture[is]); } const [o, g] = this._getOccurInfo(a); if (s) { n = searchNode(this.root, t, s, !0, !1); if (null === n) { n = createDataNode(this.data, t, s); if (!n) continue; this._isConsumeData() && (n[ts] = !0); this._setAndBind(a, n); continue; } this._isConsumeData() && (n = n.filter((e) => !e[ts])); n.length > g ? (n = n.slice(0, g)) : 0 === n.length && (n = null); n && this._isConsumeData() && n.forEach((e) => { e[ts] = !0; }); } else { if (!a.name) { this._setAndBind(a, t); continue; } if (this._isConsumeData()) { const i = []; for (; i.length < g; ) { const r = this._findDataByNameToConsume(a.name, a[bs](), t, e); if (!r) break; r[ts] = !0; i.push(r); } n = i.length > 0 ? i : null; } else { n = t[Es](a.name, !1, this.emptyMerge).next().value; if (!n) { if (0 === o) { i.push(a); continue; } const e = t[Ys] === On ? -1 : t[Ys]; n = a[as] = new XmlObject(e, a.name); this.emptyMerge && (n[ts] = !0); t[Vr](n); this._setAndBind(a, n); continue; } this.emptyMerge && (n[ts] = !0); n = [n]; } } n ? this._bindOccurrences(a, n, r) : o > 0 ? this._setAndBind(a, t) : i.push(a); } i.forEach((e) => e[ms]()[Zs](e)); } } class DataHandler { constructor(e, t) { this.data = t; this.dataset = e.datasets || null; } serialize(e) { const t = [[-1, this.data[us]()]]; for (; t.length > 0; ) { const i = t.at(-1), [a, r] = i; if (a + 1 === r.length) { t.pop(); continue; } const s = r[++i[0]], n = e.get(s[gn]); if (n) s[en](n); else { const t = s[Is](); for (const i of t.values()) { const t = e.get(i[gn]); if (t) { i[en](t); break; } } } const o = s[us](); o.length > 0 && t.push([-1, o]); } const i = [ '', ]; if (this.dataset) for (const e of this.dataset[us]()) 'data' !== e[vs] && e[nn](i); this.data[nn](i); i.push(''); return i.join(''); } } const Pn = cn.config.id; class Acrobat extends XFAObject { constructor(e) { super(Pn, 'acrobat', !0); this.acrobat7 = null; this.autoSave = null; this.common = null; this.validate = null; this.validateApprovalSignatures = null; this.submitUrl = new XFAObjectArray(); } } class Acrobat7 extends XFAObject { constructor(e) { super(Pn, 'acrobat7', !0); this.dynamicRender = null; } } class ADBE_JSConsole extends OptionObject { constructor(e) { super(Pn, 'ADBE_JSConsole', ['delegate', 'Enable', 'Disable']); } } class ADBE_JSDebugger extends OptionObject { constructor(e) { super(Pn, 'ADBE_JSDebugger', ['delegate', 'Enable', 'Disable']); } } class AddSilentPrint extends Option01 { constructor(e) { super(Pn, 'addSilentPrint'); } } class AddViewerPreferences extends Option01 { constructor(e) { super(Pn, 'addViewerPreferences'); } } class AdjustData extends Option10 { constructor(e) { super(Pn, 'adjustData'); } } class AdobeExtensionLevel extends IntegerObject { constructor(e) { super(Pn, 'adobeExtensionLevel', 0, (e) => e >= 1 && e <= 8); } } class Agent extends XFAObject { constructor(e) { super(Pn, 'agent', !0); this.name = e.name ? e.name.trim() : ''; this.common = new XFAObjectArray(); } } class AlwaysEmbed extends ContentObject { constructor(e) { super(Pn, 'alwaysEmbed'); } } class Amd extends StringObject { constructor(e) { super(Pn, 'amd'); } } class config_Area extends XFAObject { constructor(e) { super(Pn, 'area'); this.level = getInteger({ data: e.level, defaultValue: 0, validate: (e) => e >= 1 && e <= 3, }); this.name = getStringOption(e.name, [ '', 'barcode', 'coreinit', 'deviceDriver', 'font', 'general', 'layout', 'merge', 'script', 'signature', 'sourceSet', 'templateCache', ]); } } class Attributes extends OptionObject { constructor(e) { super(Pn, 'attributes', ['preserve', 'delegate', 'ignore']); } } class AutoSave extends OptionObject { constructor(e) { super(Pn, 'autoSave', ['disabled', 'enabled']); } } class Base extends StringObject { constructor(e) { super(Pn, 'base'); } } class BatchOutput extends XFAObject { constructor(e) { super(Pn, 'batchOutput'); this.format = getStringOption(e.format, [ 'none', 'concat', 'zip', 'zipCompress', ]); } } class BehaviorOverride extends ContentObject { constructor(e) { super(Pn, 'behaviorOverride'); } [ns]() { this[is] = new Map( this[is] .trim() .split(/\s+/) .filter((e) => e.includes(':')) .map((e) => e.split(':', 2)), ); } } class Cache extends XFAObject { constructor(e) { super(Pn, 'cache', !0); this.templateCache = null; } } class Change extends Option01 { constructor(e) { super(Pn, 'change'); } } class Common extends XFAObject { constructor(e) { super(Pn, 'common', !0); this.data = null; this.locale = null; this.localeSet = null; this.messaging = null; this.suppressBanner = null; this.template = null; this.validationMessaging = null; this.versionControl = null; this.log = new XFAObjectArray(); } } class Compress extends XFAObject { constructor(e) { super(Pn, 'compress'); this.scope = getStringOption(e.scope, ['imageOnly', 'document']); } } class CompressLogicalStructure extends Option01 { constructor(e) { super(Pn, 'compressLogicalStructure'); } } class CompressObjectStream extends Option10 { constructor(e) { super(Pn, 'compressObjectStream'); } } class Compression extends XFAObject { constructor(e) { super(Pn, 'compression', !0); this.compressLogicalStructure = null; this.compressObjectStream = null; this.level = null; this.type = null; } } class Config extends XFAObject { constructor(e) { super(Pn, 'config', !0); this.acrobat = null; this.present = null; this.trace = null; this.agent = new XFAObjectArray(); } } class Conformance extends OptionObject { constructor(e) { super(Pn, 'conformance', ['A', 'B']); } } class ContentCopy extends Option01 { constructor(e) { super(Pn, 'contentCopy'); } } class Copies extends IntegerObject { constructor(e) { super(Pn, 'copies', 1, (e) => e >= 1); } } class Creator extends StringObject { constructor(e) { super(Pn, 'creator'); } } class CurrentPage extends IntegerObject { constructor(e) { super(Pn, 'currentPage', 0, (e) => e >= 0); } } class Data extends XFAObject { constructor(e) { super(Pn, 'data', !0); this.adjustData = null; this.attributes = null; this.incrementalLoad = null; this.outputXSL = null; this.range = null; this.record = null; this.startNode = null; this.uri = null; this.window = null; this.xsl = null; this.excludeNS = new XFAObjectArray(); this.transform = new XFAObjectArray(); } } class Debug extends XFAObject { constructor(e) { super(Pn, 'debug', !0); this.uri = null; } } class DefaultTypeface extends ContentObject { constructor(e) { super(Pn, 'defaultTypeface'); this.writingScript = getStringOption(e.writingScript, [ '*', 'Arabic', 'Cyrillic', 'EastEuropeanRoman', 'Greek', 'Hebrew', 'Japanese', 'Korean', 'Roman', 'SimplifiedChinese', 'Thai', 'TraditionalChinese', 'Vietnamese', ]); } } class Destination extends OptionObject { constructor(e) { super(Pn, 'destination', ['pdf', 'pcl', 'ps', 'webClient', 'zpl']); } } class DocumentAssembly extends Option01 { constructor(e) { super(Pn, 'documentAssembly'); } } class Driver extends XFAObject { constructor(e) { super(Pn, 'driver', !0); this.name = e.name ? e.name.trim() : ''; this.fontInfo = null; this.xdc = null; } } class DuplexOption extends OptionObject { constructor(e) { super(Pn, 'duplexOption', [ 'simplex', 'duplexFlipLongEdge', 'duplexFlipShortEdge', ]); } } class DynamicRender extends OptionObject { constructor(e) { super(Pn, 'dynamicRender', ['forbidden', 'required']); } } class Embed extends Option01 { constructor(e) { super(Pn, 'embed'); } } class config_Encrypt extends Option01 { constructor(e) { super(Pn, 'encrypt'); } } class config_Encryption extends XFAObject { constructor(e) { super(Pn, 'encryption', !0); this.encrypt = null; this.encryptionLevel = null; this.permissions = null; } } class EncryptionLevel extends OptionObject { constructor(e) { super(Pn, 'encryptionLevel', ['40bit', '128bit']); } } class Enforce extends StringObject { constructor(e) { super(Pn, 'enforce'); } } class Equate extends XFAObject { constructor(e) { super(Pn, 'equate'); this.force = getInteger({ data: e.force, defaultValue: 1, validate: (e) => 0 === e, }); this.from = e.from || ''; this.to = e.to || ''; } } class EquateRange extends XFAObject { constructor(e) { super(Pn, 'equateRange'); this.from = e.from || ''; this.to = e.to || ''; this._unicodeRange = e.unicodeRange || ''; } get unicodeRange() { const e = [], t = /U\+([0-9a-fA-F]+)/, i = this._unicodeRange; for (let a of i .split(',') .map((e) => e.trim()) .filter((e) => !!e)) { a = a.split('-', 2).map((e) => { const i = e.match(t); return i ? parseInt(i[1], 16) : 0; }); 1 === a.length && a.push(a[0]); e.push(a); } return shadow(this, 'unicodeRange', e); } } class Exclude extends ContentObject { constructor(e) { super(Pn, 'exclude'); } [ns]() { this[is] = this[is] .trim() .split(/\s+/) .filter( (e) => e && [ 'calculate', 'close', 'enter', 'exit', 'initialize', 'ready', 'validate', ].includes(e), ); } } class ExcludeNS extends StringObject { constructor(e) { super(Pn, 'excludeNS'); } } class FlipLabel extends OptionObject { constructor(e) { super(Pn, 'flipLabel', ['usePrinterSetting', 'on', 'off']); } } class config_FontInfo extends XFAObject { constructor(e) { super(Pn, 'fontInfo', !0); this.embed = null; this.map = null; this.subsetBelow = null; this.alwaysEmbed = new XFAObjectArray(); this.defaultTypeface = new XFAObjectArray(); this.neverEmbed = new XFAObjectArray(); } } class FormFieldFilling extends Option01 { constructor(e) { super(Pn, 'formFieldFilling'); } } class GroupParent extends StringObject { constructor(e) { super(Pn, 'groupParent'); } } class IfEmpty extends OptionObject { constructor(e) { super(Pn, 'ifEmpty', ['dataValue', 'dataGroup', 'ignore', 'remove']); } } class IncludeXDPContent extends StringObject { constructor(e) { super(Pn, 'includeXDPContent'); } } class IncrementalLoad extends OptionObject { constructor(e) { super(Pn, 'incrementalLoad', ['none', 'forwardOnly']); } } class IncrementalMerge extends Option01 { constructor(e) { super(Pn, 'incrementalMerge'); } } class Interactive extends Option01 { constructor(e) { super(Pn, 'interactive'); } } class Jog extends OptionObject { constructor(e) { super(Pn, 'jog', ['usePrinterSetting', 'none', 'pageSet']); } } class LabelPrinter extends XFAObject { constructor(e) { super(Pn, 'labelPrinter', !0); this.name = getStringOption(e.name, ['zpl', 'dpl', 'ipl', 'tcpl']); this.batchOutput = null; this.flipLabel = null; this.fontInfo = null; this.xdc = null; } } class Layout extends OptionObject { constructor(e) { super(Pn, 'layout', ['paginate', 'panel']); } } class Level extends IntegerObject { constructor(e) { super(Pn, 'level', 0, (e) => e > 0); } } class Linearized extends Option01 { constructor(e) { super(Pn, 'linearized'); } } class Locale extends StringObject { constructor(e) { super(Pn, 'locale'); } } class LocaleSet extends StringObject { constructor(e) { super(Pn, 'localeSet'); } } class Log extends XFAObject { constructor(e) { super(Pn, 'log', !0); this.mode = null; this.threshold = null; this.to = null; this.uri = null; } } class MapElement extends XFAObject { constructor(e) { super(Pn, 'map', !0); this.equate = new XFAObjectArray(); this.equateRange = new XFAObjectArray(); } } class MediumInfo extends XFAObject { constructor(e) { super(Pn, 'mediumInfo', !0); this.map = null; } } class config_Message extends XFAObject { constructor(e) { super(Pn, 'message', !0); this.msgId = null; this.severity = null; } } class Messaging extends XFAObject { constructor(e) { super(Pn, 'messaging', !0); this.message = new XFAObjectArray(); } } class Mode extends OptionObject { constructor(e) { super(Pn, 'mode', ['append', 'overwrite']); } } class ModifyAnnots extends Option01 { constructor(e) { super(Pn, 'modifyAnnots'); } } class MsgId extends IntegerObject { constructor(e) { super(Pn, 'msgId', 1, (e) => e >= 1); } } class NameAttr extends StringObject { constructor(e) { super(Pn, 'nameAttr'); } } class NeverEmbed extends ContentObject { constructor(e) { super(Pn, 'neverEmbed'); } } class NumberOfCopies extends IntegerObject { constructor(e) { super(Pn, 'numberOfCopies', null, (e) => e >= 2 && e <= 5); } } class OpenAction extends XFAObject { constructor(e) { super(Pn, 'openAction', !0); this.destination = null; } } class Output extends XFAObject { constructor(e) { super(Pn, 'output', !0); this.to = null; this.type = null; this.uri = null; } } class OutputBin extends StringObject { constructor(e) { super(Pn, 'outputBin'); } } class OutputXSL extends XFAObject { constructor(e) { super(Pn, 'outputXSL', !0); this.uri = null; } } class Overprint extends OptionObject { constructor(e) { super(Pn, 'overprint', ['none', 'both', 'draw', 'field']); } } class Packets extends StringObject { constructor(e) { super(Pn, 'packets'); } [ns]() { '*' !== this[is] && (this[is] = this[is] .trim() .split(/\s+/) .filter((e) => ['config', 'datasets', 'template', 'xfdf', 'xslt'].includes(e), )); } } class PageOffset extends XFAObject { constructor(e) { super(Pn, 'pageOffset'); this.x = getInteger({ data: e.x, defaultValue: 'useXDCSetting', validate: (e) => !0, }); this.y = getInteger({ data: e.y, defaultValue: 'useXDCSetting', validate: (e) => !0, }); } } class PageRange extends StringObject { constructor(e) { super(Pn, 'pageRange'); } [ns]() { const e = this[is] .trim() .split(/\s+/) .map((e) => parseInt(e, 10)), t = []; for (let i = 0, a = e.length; i < a; i += 2) t.push(e.slice(i, i + 2)); this[is] = t; } } class Pagination extends OptionObject { constructor(e) { super(Pn, 'pagination', ['simplex', 'duplexShortEdge', 'duplexLongEdge']); } } class PaginationOverride extends OptionObject { constructor(e) { super(Pn, 'paginationOverride', [ 'none', 'forceDuplex', 'forceDuplexLongEdge', 'forceDuplexShortEdge', 'forceSimplex', ]); } } class Part extends IntegerObject { constructor(e) { super(Pn, 'part', 1, (e) => !1); } } class Pcl extends XFAObject { constructor(e) { super(Pn, 'pcl', !0); this.name = e.name || ''; this.batchOutput = null; this.fontInfo = null; this.jog = null; this.mediumInfo = null; this.outputBin = null; this.pageOffset = null; this.staple = null; this.xdc = null; } } class Pdf extends XFAObject { constructor(e) { super(Pn, 'pdf', !0); this.name = e.name || ''; this.adobeExtensionLevel = null; this.batchOutput = null; this.compression = null; this.creator = null; this.encryption = null; this.fontInfo = null; this.interactive = null; this.linearized = null; this.openAction = null; this.pdfa = null; this.producer = null; this.renderPolicy = null; this.scriptModel = null; this.silentPrint = null; this.submitFormat = null; this.tagged = null; this.version = null; this.viewerPreferences = null; this.xdc = null; } } class Pdfa extends XFAObject { constructor(e) { super(Pn, 'pdfa', !0); this.amd = null; this.conformance = null; this.includeXDPContent = null; this.part = null; } } class Permissions extends XFAObject { constructor(e) { super(Pn, 'permissions', !0); this.accessibleContent = null; this.change = null; this.contentCopy = null; this.documentAssembly = null; this.formFieldFilling = null; this.modifyAnnots = null; this.plaintextMetadata = null; this.print = null; this.printHighQuality = null; } } class PickTrayByPDFSize extends Option01 { constructor(e) { super(Pn, 'pickTrayByPDFSize'); } } class config_Picture extends StringObject { constructor(e) { super(Pn, 'picture'); } } class PlaintextMetadata extends Option01 { constructor(e) { super(Pn, 'plaintextMetadata'); } } class Presence extends OptionObject { constructor(e) { super(Pn, 'presence', [ 'preserve', 'dissolve', 'dissolveStructure', 'ignore', 'remove', ]); } } class Present extends XFAObject { constructor(e) { super(Pn, 'present', !0); this.behaviorOverride = null; this.cache = null; this.common = null; this.copies = null; this.destination = null; this.incrementalMerge = null; this.layout = null; this.output = null; this.overprint = null; this.pagination = null; this.paginationOverride = null; this.script = null; this.validate = null; this.xdp = null; this.driver = new XFAObjectArray(); this.labelPrinter = new XFAObjectArray(); this.pcl = new XFAObjectArray(); this.pdf = new XFAObjectArray(); this.ps = new XFAObjectArray(); this.submitUrl = new XFAObjectArray(); this.webClient = new XFAObjectArray(); this.zpl = new XFAObjectArray(); } } class Print extends Option01 { constructor(e) { super(Pn, 'print'); } } class PrintHighQuality extends Option01 { constructor(e) { super(Pn, 'printHighQuality'); } } class PrintScaling extends OptionObject { constructor(e) { super(Pn, 'printScaling', ['appdefault', 'noScaling']); } } class PrinterName extends StringObject { constructor(e) { super(Pn, 'printerName'); } } class Producer extends StringObject { constructor(e) { super(Pn, 'producer'); } } class Ps extends XFAObject { constructor(e) { super(Pn, 'ps', !0); this.name = e.name || ''; this.batchOutput = null; this.fontInfo = null; this.jog = null; this.mediumInfo = null; this.outputBin = null; this.staple = null; this.xdc = null; } } class Range extends ContentObject { constructor(e) { super(Pn, 'range'); } [ns]() { this[is] = this[is] .trim() .split(/\s*,\s*/, 2) .map((e) => e.split('-').map((e) => parseInt(e.trim(), 10))) .filter((e) => e.every((e) => !isNaN(e))) .map((e) => { 1 === e.length && e.push(e[0]); return e; }); } } class Record extends ContentObject { constructor(e) { super(Pn, 'record'); } [ns]() { this[is] = this[is].trim(); const e = parseInt(this[is], 10); !isNaN(e) && e >= 0 && (this[is] = e); } } class Relevant extends ContentObject { constructor(e) { super(Pn, 'relevant'); } [ns]() { this[is] = this[is].trim().split(/\s+/); } } class Rename extends ContentObject { constructor(e) { super(Pn, 'rename'); } [ns]() { this[is] = this[is].trim(); (this[is].toLowerCase().startsWith('xml') || new RegExp('[\\p{L}_][\\p{L}\\d._\\p{M}-]*', 'u').test(this[is])) && warn('XFA - Rename: invalid XFA name'); } } class RenderPolicy extends OptionObject { constructor(e) { super(Pn, 'renderPolicy', ['server', 'client']); } } class RunScripts extends OptionObject { constructor(e) { super(Pn, 'runScripts', ['both', 'client', 'none', 'server']); } } class config_Script extends XFAObject { constructor(e) { super(Pn, 'script', !0); this.currentPage = null; this.exclude = null; this.runScripts = null; } } class ScriptModel extends OptionObject { constructor(e) { super(Pn, 'scriptModel', ['XFA', 'none']); } } class Severity extends OptionObject { constructor(e) { super(Pn, 'severity', [ 'ignore', 'error', 'information', 'trace', 'warning', ]); } } class SilentPrint extends XFAObject { constructor(e) { super(Pn, 'silentPrint', !0); this.addSilentPrint = null; this.printerName = null; } } class Staple extends XFAObject { constructor(e) { super(Pn, 'staple'); this.mode = getStringOption(e.mode, ['usePrinterSetting', 'on', 'off']); } } class StartNode extends StringObject { constructor(e) { super(Pn, 'startNode'); } } class StartPage extends IntegerObject { constructor(e) { super(Pn, 'startPage', 0, (e) => !0); } } class SubmitFormat extends OptionObject { constructor(e) { super(Pn, 'submitFormat', ['html', 'delegate', 'fdf', 'xml', 'pdf']); } } class SubmitUrl extends StringObject { constructor(e) { super(Pn, 'submitUrl'); } } class SubsetBelow extends IntegerObject { constructor(e) { super(Pn, 'subsetBelow', 100, (e) => e >= 0 && e <= 100); } } class SuppressBanner extends Option01 { constructor(e) { super(Pn, 'suppressBanner'); } } class Tagged extends Option01 { constructor(e) { super(Pn, 'tagged'); } } class config_Template extends XFAObject { constructor(e) { super(Pn, 'template', !0); this.base = null; this.relevant = null; this.startPage = null; this.uri = null; this.xsl = null; } } class Threshold extends OptionObject { constructor(e) { super(Pn, 'threshold', ['trace', 'error', 'information', 'warning']); } } class To extends OptionObject { constructor(e) { super(Pn, 'to', ['null', 'memory', 'stderr', 'stdout', 'system', 'uri']); } } class TemplateCache extends XFAObject { constructor(e) { super(Pn, 'templateCache'); this.maxEntries = getInteger({ data: e.maxEntries, defaultValue: 5, validate: (e) => e >= 0, }); } } class Trace extends XFAObject { constructor(e) { super(Pn, 'trace', !0); this.area = new XFAObjectArray(); } } class Transform extends XFAObject { constructor(e) { super(Pn, 'transform', !0); this.groupParent = null; this.ifEmpty = null; this.nameAttr = null; this.picture = null; this.presence = null; this.rename = null; this.whitespace = null; } } class Type extends OptionObject { constructor(e) { super(Pn, 'type', [ 'none', 'ascii85', 'asciiHex', 'ccittfax', 'flate', 'lzw', 'runLength', 'native', 'xdp', 'mergedXDP', ]); } } class Uri extends StringObject { constructor(e) { super(Pn, 'uri'); } } class config_Validate extends OptionObject { constructor(e) { super(Pn, 'validate', ['preSubmit', 'prePrint', 'preExecute', 'preSave']); } } class ValidateApprovalSignatures extends ContentObject { constructor(e) { super(Pn, 'validateApprovalSignatures'); } [ns]() { this[is] = this[is] .trim() .split(/\s+/) .filter((e) => ['docReady', 'postSign'].includes(e)); } } class ValidationMessaging extends OptionObject { constructor(e) { super(Pn, 'validationMessaging', [ 'allMessagesIndividually', 'allMessagesTogether', 'firstMessageOnly', 'noMessages', ]); } } class Version extends OptionObject { constructor(e) { super(Pn, 'version', ['1.7', '1.6', '1.5', '1.4', '1.3', '1.2']); } } class VersionControl extends XFAObject { constructor(e) { super(Pn, 'VersionControl'); this.outputBelow = getStringOption(e.outputBelow, [ 'warn', 'error', 'update', ]); this.sourceAbove = getStringOption(e.sourceAbove, ['warn', 'error']); this.sourceBelow = getStringOption(e.sourceBelow, ['update', 'maintain']); } } class ViewerPreferences extends XFAObject { constructor(e) { super(Pn, 'viewerPreferences', !0); this.ADBE_JSConsole = null; this.ADBE_JSDebugger = null; this.addViewerPreferences = null; this.duplexOption = null; this.enforce = null; this.numberOfCopies = null; this.pageRange = null; this.pickTrayByPDFSize = null; this.printScaling = null; } } class WebClient extends XFAObject { constructor(e) { super(Pn, 'webClient', !0); this.name = e.name ? e.name.trim() : ''; this.fontInfo = null; this.xdc = null; } } class Whitespace extends OptionObject { constructor(e) { super(Pn, 'whitespace', [ 'preserve', 'ltrim', 'normalize', 'rtrim', 'trim', ]); } } class Window extends ContentObject { constructor(e) { super(Pn, 'window'); } [ns]() { const e = this[is] .trim() .split(/\s*,\s*/, 2) .map((e) => parseInt(e, 10)); if (e.some((e) => isNaN(e))) this[is] = [0, 0]; else { 1 === e.length && e.push(e[0]); this[is] = e; } } } class Xdc extends XFAObject { constructor(e) { super(Pn, 'xdc', !0); this.uri = new XFAObjectArray(); this.xsl = new XFAObjectArray(); } } class Xdp extends XFAObject { constructor(e) { super(Pn, 'xdp', !0); this.packets = null; } } class Xsl extends XFAObject { constructor(e) { super(Pn, 'xsl', !0); this.debug = null; this.uri = null; } } class Zpl extends XFAObject { constructor(e) { super(Pn, 'zpl', !0); this.name = e.name ? e.name.trim() : ''; this.batchOutput = null; this.flipLabel = null; this.fontInfo = null; this.xdc = null; } } class ConfigNamespace { static [In](e, t) { if (ConfigNamespace.hasOwnProperty(e)) return ConfigNamespace[e](t); } static acrobat(e) { return new Acrobat(e); } static acrobat7(e) { return new Acrobat7(e); } static ADBE_JSConsole(e) { return new ADBE_JSConsole(e); } static ADBE_JSDebugger(e) { return new ADBE_JSDebugger(e); } static addSilentPrint(e) { return new AddSilentPrint(e); } static addViewerPreferences(e) { return new AddViewerPreferences(e); } static adjustData(e) { return new AdjustData(e); } static adobeExtensionLevel(e) { return new AdobeExtensionLevel(e); } static agent(e) { return new Agent(e); } static alwaysEmbed(e) { return new AlwaysEmbed(e); } static amd(e) { return new Amd(e); } static area(e) { return new config_Area(e); } static attributes(e) { return new Attributes(e); } static autoSave(e) { return new AutoSave(e); } static base(e) { return new Base(e); } static batchOutput(e) { return new BatchOutput(e); } static behaviorOverride(e) { return new BehaviorOverride(e); } static cache(e) { return new Cache(e); } static change(e) { return new Change(e); } static common(e) { return new Common(e); } static compress(e) { return new Compress(e); } static compressLogicalStructure(e) { return new CompressLogicalStructure(e); } static compressObjectStream(e) { return new CompressObjectStream(e); } static compression(e) { return new Compression(e); } static config(e) { return new Config(e); } static conformance(e) { return new Conformance(e); } static contentCopy(e) { return new ContentCopy(e); } static copies(e) { return new Copies(e); } static creator(e) { return new Creator(e); } static currentPage(e) { return new CurrentPage(e); } static data(e) { return new Data(e); } static debug(e) { return new Debug(e); } static defaultTypeface(e) { return new DefaultTypeface(e); } static destination(e) { return new Destination(e); } static documentAssembly(e) { return new DocumentAssembly(e); } static driver(e) { return new Driver(e); } static duplexOption(e) { return new DuplexOption(e); } static dynamicRender(e) { return new DynamicRender(e); } static embed(e) { return new Embed(e); } static encrypt(e) { return new config_Encrypt(e); } static encryption(e) { return new config_Encryption(e); } static encryptionLevel(e) { return new EncryptionLevel(e); } static enforce(e) { return new Enforce(e); } static equate(e) { return new Equate(e); } static equateRange(e) { return new EquateRange(e); } static exclude(e) { return new Exclude(e); } static excludeNS(e) { return new ExcludeNS(e); } static flipLabel(e) { return new FlipLabel(e); } static fontInfo(e) { return new config_FontInfo(e); } static formFieldFilling(e) { return new FormFieldFilling(e); } static groupParent(e) { return new GroupParent(e); } static ifEmpty(e) { return new IfEmpty(e); } static includeXDPContent(e) { return new IncludeXDPContent(e); } static incrementalLoad(e) { return new IncrementalLoad(e); } static incrementalMerge(e) { return new IncrementalMerge(e); } static interactive(e) { return new Interactive(e); } static jog(e) { return new Jog(e); } static labelPrinter(e) { return new LabelPrinter(e); } static layout(e) { return new Layout(e); } static level(e) { return new Level(e); } static linearized(e) { return new Linearized(e); } static locale(e) { return new Locale(e); } static localeSet(e) { return new LocaleSet(e); } static log(e) { return new Log(e); } static map(e) { return new MapElement(e); } static mediumInfo(e) { return new MediumInfo(e); } static message(e) { return new config_Message(e); } static messaging(e) { return new Messaging(e); } static mode(e) { return new Mode(e); } static modifyAnnots(e) { return new ModifyAnnots(e); } static msgId(e) { return new MsgId(e); } static nameAttr(e) { return new NameAttr(e); } static neverEmbed(e) { return new NeverEmbed(e); } static numberOfCopies(e) { return new NumberOfCopies(e); } static openAction(e) { return new OpenAction(e); } static output(e) { return new Output(e); } static outputBin(e) { return new OutputBin(e); } static outputXSL(e) { return new OutputXSL(e); } static overprint(e) { return new Overprint(e); } static packets(e) { return new Packets(e); } static pageOffset(e) { return new PageOffset(e); } static pageRange(e) { return new PageRange(e); } static pagination(e) { return new Pagination(e); } static paginationOverride(e) { return new PaginationOverride(e); } static part(e) { return new Part(e); } static pcl(e) { return new Pcl(e); } static pdf(e) { return new Pdf(e); } static pdfa(e) { return new Pdfa(e); } static permissions(e) { return new Permissions(e); } static pickTrayByPDFSize(e) { return new PickTrayByPDFSize(e); } static picture(e) { return new config_Picture(e); } static plaintextMetadata(e) { return new PlaintextMetadata(e); } static presence(e) { return new Presence(e); } static present(e) { return new Present(e); } static print(e) { return new Print(e); } static printHighQuality(e) { return new PrintHighQuality(e); } static printScaling(e) { return new PrintScaling(e); } static printerName(e) { return new PrinterName(e); } static producer(e) { return new Producer(e); } static ps(e) { return new Ps(e); } static range(e) { return new Range(e); } static record(e) { return new Record(e); } static relevant(e) { return new Relevant(e); } static rename(e) { return new Rename(e); } static renderPolicy(e) { return new RenderPolicy(e); } static runScripts(e) { return new RunScripts(e); } static script(e) { return new config_Script(e); } static scriptModel(e) { return new ScriptModel(e); } static severity(e) { return new Severity(e); } static silentPrint(e) { return new SilentPrint(e); } static staple(e) { return new Staple(e); } static startNode(e) { return new StartNode(e); } static startPage(e) { return new StartPage(e); } static submitFormat(e) { return new SubmitFormat(e); } static submitUrl(e) { return new SubmitUrl(e); } static subsetBelow(e) { return new SubsetBelow(e); } static suppressBanner(e) { return new SuppressBanner(e); } static tagged(e) { return new Tagged(e); } static template(e) { return new config_Template(e); } static templateCache(e) { return new TemplateCache(e); } static threshold(e) { return new Threshold(e); } static to(e) { return new To(e); } static trace(e) { return new Trace(e); } static transform(e) { return new Transform(e); } static type(e) { return new Type(e); } static uri(e) { return new Uri(e); } static validate(e) { return new config_Validate(e); } static validateApprovalSignatures(e) { return new ValidateApprovalSignatures(e); } static validationMessaging(e) { return new ValidationMessaging(e); } static version(e) { return new Version(e); } static versionControl(e) { return new VersionControl(e); } static viewerPreferences(e) { return new ViewerPreferences(e); } static webClient(e) { return new WebClient(e); } static whitespace(e) { return new Whitespace(e); } static window(e) { return new Window(e); } static xdc(e) { return new Xdc(e); } static xdp(e) { return new Xdp(e); } static xsl(e) { return new Xsl(e); } static zpl(e) { return new Zpl(e); } } const Wn = cn.connectionSet.id; class ConnectionSet extends XFAObject { constructor(e) { super(Wn, 'connectionSet', !0); this.wsdlConnection = new XFAObjectArray(); this.xmlConnection = new XFAObjectArray(); this.xsdConnection = new XFAObjectArray(); } } class EffectiveInputPolicy extends XFAObject { constructor(e) { super(Wn, 'effectiveInputPolicy'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class EffectiveOutputPolicy extends XFAObject { constructor(e) { super(Wn, 'effectiveOutputPolicy'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class Operation extends StringObject { constructor(e) { super(Wn, 'operation'); this.id = e.id || ''; this.input = e.input || ''; this.name = e.name || ''; this.output = e.output || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class RootElement extends StringObject { constructor(e) { super(Wn, 'rootElement'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class SoapAction extends StringObject { constructor(e) { super(Wn, 'soapAction'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class SoapAddress extends StringObject { constructor(e) { super(Wn, 'soapAddress'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class connection_set_Uri extends StringObject { constructor(e) { super(Wn, 'uri'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class WsdlAddress extends StringObject { constructor(e) { super(Wn, 'wsdlAddress'); this.id = e.id || ''; this.name = e.name || ''; this.use = e.use || ''; this.usehref = e.usehref || ''; } } class WsdlConnection extends XFAObject { constructor(e) { super(Wn, 'wsdlConnection', !0); this.dataDescription = e.dataDescription || ''; this.name = e.name || ''; this.effectiveInputPolicy = null; this.effectiveOutputPolicy = null; this.operation = null; this.soapAction = null; this.soapAddress = null; this.wsdlAddress = null; } } class XmlConnection extends XFAObject { constructor(e) { super(Wn, 'xmlConnection', !0); this.dataDescription = e.dataDescription || ''; this.name = e.name || ''; this.uri = null; } } class XsdConnection extends XFAObject { constructor(e) { super(Wn, 'xsdConnection', !0); this.dataDescription = e.dataDescription || ''; this.name = e.name || ''; this.rootElement = null; this.uri = null; } } class ConnectionSetNamespace { static [In](e, t) { if (ConnectionSetNamespace.hasOwnProperty(e)) return ConnectionSetNamespace[e](t); } static connectionSet(e) { return new ConnectionSet(e); } static effectiveInputPolicy(e) { return new EffectiveInputPolicy(e); } static effectiveOutputPolicy(e) { return new EffectiveOutputPolicy(e); } static operation(e) { return new Operation(e); } static rootElement(e) { return new RootElement(e); } static soapAction(e) { return new SoapAction(e); } static soapAddress(e) { return new SoapAddress(e); } static uri(e) { return new connection_set_Uri(e); } static wsdlAddress(e) { return new WsdlAddress(e); } static wsdlConnection(e) { return new WsdlConnection(e); } static xmlConnection(e) { return new XmlConnection(e); } static xsdConnection(e) { return new XsdConnection(e); } } const jn = cn.datasets.id; class datasets_Data extends XmlObject { constructor(e) { super(jn, 'data', e); } [xs]() { return !0; } } class Datasets extends XFAObject { constructor(e) { super(jn, 'datasets', !0); this.data = null; this.Signature = null; } [Ks](e) { const t = e[vs]; (('data' === t && e[Ys] === jn) || ('Signature' === t && e[Ys] === cn.signature.id)) && (this[t] = e); this[Vr](e); } } class DatasetsNamespace { static [In](e, t) { if (DatasetsNamespace.hasOwnProperty(e)) return DatasetsNamespace[e](t); } static datasets(e) { return new Datasets(e); } static data(e) { return new datasets_Data(e); } } const Xn = cn.localeSet.id; class CalendarSymbols extends XFAObject { constructor(e) { super(Xn, 'calendarSymbols', !0); this.name = 'gregorian'; this.dayNames = new XFAObjectArray(2); this.eraNames = null; this.meridiemNames = null; this.monthNames = new XFAObjectArray(2); } } class CurrencySymbol extends StringObject { constructor(e) { super(Xn, 'currencySymbol'); this.name = getStringOption(e.name, ['symbol', 'isoname', 'decimal']); } } class CurrencySymbols extends XFAObject { constructor(e) { super(Xn, 'currencySymbols', !0); this.currencySymbol = new XFAObjectArray(3); } } class DatePattern extends StringObject { constructor(e) { super(Xn, 'datePattern'); this.name = getStringOption(e.name, ['full', 'long', 'med', 'short']); } } class DatePatterns extends XFAObject { constructor(e) { super(Xn, 'datePatterns', !0); this.datePattern = new XFAObjectArray(4); } } class DateTimeSymbols extends ContentObject { constructor(e) { super(Xn, 'dateTimeSymbols'); } } class Day extends StringObject { constructor(e) { super(Xn, 'day'); } } class DayNames extends XFAObject { constructor(e) { super(Xn, 'dayNames', !0); this.abbr = getInteger({ data: e.abbr, defaultValue: 0, validate: (e) => 1 === e, }); this.day = new XFAObjectArray(7); } } class Era extends StringObject { constructor(e) { super(Xn, 'era'); } } class EraNames extends XFAObject { constructor(e) { super(Xn, 'eraNames', !0); this.era = new XFAObjectArray(2); } } class locale_set_Locale extends XFAObject { constructor(e) { super(Xn, 'locale', !0); this.desc = e.desc || ''; this.name = 'isoname'; this.calendarSymbols = null; this.currencySymbols = null; this.datePatterns = null; this.dateTimeSymbols = null; this.numberPatterns = null; this.numberSymbols = null; this.timePatterns = null; this.typeFaces = null; } } class locale_set_LocaleSet extends XFAObject { constructor(e) { super(Xn, 'localeSet', !0); this.locale = new XFAObjectArray(); } } class Meridiem extends StringObject { constructor(e) { super(Xn, 'meridiem'); } } class MeridiemNames extends XFAObject { constructor(e) { super(Xn, 'meridiemNames', !0); this.meridiem = new XFAObjectArray(2); } } class Month extends StringObject { constructor(e) { super(Xn, 'month'); } } class MonthNames extends XFAObject { constructor(e) { super(Xn, 'monthNames', !0); this.abbr = getInteger({ data: e.abbr, defaultValue: 0, validate: (e) => 1 === e, }); this.month = new XFAObjectArray(12); } } class NumberPattern extends StringObject { constructor(e) { super(Xn, 'numberPattern'); this.name = getStringOption(e.name, ['full', 'long', 'med', 'short']); } } class NumberPatterns extends XFAObject { constructor(e) { super(Xn, 'numberPatterns', !0); this.numberPattern = new XFAObjectArray(4); } } class NumberSymbol extends StringObject { constructor(e) { super(Xn, 'numberSymbol'); this.name = getStringOption(e.name, [ 'decimal', 'grouping', 'percent', 'minus', 'zero', ]); } } class NumberSymbols extends XFAObject { constructor(e) { super(Xn, 'numberSymbols', !0); this.numberSymbol = new XFAObjectArray(5); } } class TimePattern extends StringObject { constructor(e) { super(Xn, 'timePattern'); this.name = getStringOption(e.name, ['full', 'long', 'med', 'short']); } } class TimePatterns extends XFAObject { constructor(e) { super(Xn, 'timePatterns', !0); this.timePattern = new XFAObjectArray(4); } } class TypeFace extends XFAObject { constructor(e) { super(Xn, 'typeFace', !0); this.name = '' | e.name; } } class TypeFaces extends XFAObject { constructor(e) { super(Xn, 'typeFaces', !0); this.typeFace = new XFAObjectArray(); } } class LocaleSetNamespace { static [In](e, t) { if (LocaleSetNamespace.hasOwnProperty(e)) return LocaleSetNamespace[e](t); } static calendarSymbols(e) { return new CalendarSymbols(e); } static currencySymbol(e) { return new CurrencySymbol(e); } static currencySymbols(e) { return new CurrencySymbols(e); } static datePattern(e) { return new DatePattern(e); } static datePatterns(e) { return new DatePatterns(e); } static dateTimeSymbols(e) { return new DateTimeSymbols(e); } static day(e) { return new Day(e); } static dayNames(e) { return new DayNames(e); } static era(e) { return new Era(e); } static eraNames(e) { return new EraNames(e); } static locale(e) { return new locale_set_Locale(e); } static localeSet(e) { return new locale_set_LocaleSet(e); } static meridiem(e) { return new Meridiem(e); } static meridiemNames(e) { return new MeridiemNames(e); } static month(e) { return new Month(e); } static monthNames(e) { return new MonthNames(e); } static numberPattern(e) { return new NumberPattern(e); } static numberPatterns(e) { return new NumberPatterns(e); } static numberSymbol(e) { return new NumberSymbol(e); } static numberSymbols(e) { return new NumberSymbols(e); } static timePattern(e) { return new TimePattern(e); } static timePatterns(e) { return new TimePatterns(e); } static typeFace(e) { return new TypeFace(e); } static typeFaces(e) { return new TypeFaces(e); } } const Zn = cn.signature.id; class signature_Signature extends XFAObject { constructor(e) { super(Zn, 'signature', !0); } } class SignatureNamespace { static [In](e, t) { if (SignatureNamespace.hasOwnProperty(e)) return SignatureNamespace[e](t); } static signature(e) { return new signature_Signature(e); } } const Vn = cn.stylesheet.id; class Stylesheet extends XFAObject { constructor(e) { super(Vn, 'stylesheet', !0); } } class StylesheetNamespace { static [In](e, t) { if (StylesheetNamespace.hasOwnProperty(e)) return StylesheetNamespace[e](t); } static stylesheet(e) { return new Stylesheet(e); } } const _n = cn.xdp.id; class xdp_Xdp extends XFAObject { constructor(e) { super(_n, 'xdp', !0); this.uuid = e.uuid || ''; this.timeStamp = e.timeStamp || ''; this.config = null; this.connectionSet = null; this.datasets = null; this.localeSet = null; this.stylesheet = new XFAObjectArray(); this.template = null; } [qs](e) { const t = cn[e[vs]]; return t && e[Ys] === t.id; } } class XdpNamespace { static [In](e, t) { if (XdpNamespace.hasOwnProperty(e)) return XdpNamespace[e](t); } static xdp(e) { return new xdp_Xdp(e); } } const zn = cn.xhtml.id, $n = Symbol(), Ao = new Set([ 'color', 'font', 'font-family', 'font-size', 'font-stretch', 'font-style', 'font-weight', 'margin', 'margin-bottom', 'margin-left', 'margin-right', 'margin-top', 'letter-spacing', 'line-height', 'orphans', 'page-break-after', 'page-break-before', 'page-break-inside', 'tab-interval', 'tab-stop', 'text-align', 'text-decoration', 'text-indent', 'vertical-align', 'widows', 'kerning-mode', 'xfa-font-horizontal-scale', 'xfa-font-vertical-scale', 'xfa-spacerun', 'xfa-tab-stops', ]), eo = new Map([ ['page-break-after', 'breakAfter'], ['page-break-before', 'breakBefore'], ['page-break-inside', 'breakInside'], ['kerning-mode', (e) => ('none' === e ? 'none' : 'normal')], [ 'xfa-font-horizontal-scale', (e) => `scaleX(${Math.max(0, Math.min(parseInt(e) / 100)).toFixed(2)})`, ], [ 'xfa-font-vertical-scale', (e) => `scaleY(${Math.max(0, Math.min(parseInt(e) / 100)).toFixed(2)})`, ], ['xfa-spacerun', ''], ['xfa-tab-stops', ''], [ 'font-size', (e, t) => measureToString(0.99 * (e = t.fontSize = getMeasurement(e))), ], ['letter-spacing', (e) => measureToString(getMeasurement(e))], ['line-height', (e) => measureToString(getMeasurement(e))], ['margin', (e) => measureToString(getMeasurement(e))], ['margin-bottom', (e) => measureToString(getMeasurement(e))], ['margin-left', (e) => measureToString(getMeasurement(e))], ['margin-right', (e) => measureToString(getMeasurement(e))], ['margin-top', (e) => measureToString(getMeasurement(e))], ['text-indent', (e) => measureToString(getMeasurement(e))], ['font-family', (e) => e], ['vertical-align', (e) => measureToString(getMeasurement(e))], ]), to = /\s+/g, io = /[\r\n]+/g, ao = /\r\n?/g; function mapStyle(e, t, i) { const a = Object.create(null); if (!e) return a; const r = Object.create(null); for (const [t, i] of e.split(';').map((e) => e.split(':', 2))) { const e = eo.get(t); if ('' === e) continue; let s = i; e && (s = 'string' == typeof e ? e : e(i, r)); t.endsWith('scale') ? (a.transform = a.transform ? `${a[t]} ${s}` : s) : (a[t.replaceAll(/-([a-zA-Z])/g, (e, t) => t.toUpperCase())] = s); } a.fontFamily && setFontFamily( { typeface: a.fontFamily, weight: a.fontWeight || 'normal', posture: a.fontStyle || 'normal', size: r.fontSize || 0, }, t, t[ws].fontFinder, a, ); if (i && a.verticalAlign && '0px' !== a.verticalAlign && a.fontSize) { const e = 0.583, t = 0.333, i = getMeasurement(a.fontSize); a.fontSize = measureToString(i * e); a.verticalAlign = measureToString( Math.sign(getMeasurement(a.verticalAlign)) * i * t, ); } i && a.fontSize && (a.fontSize = `calc(${a.fontSize} * var(--scale-factor))`); fixTextIndent(a); return a; } const ro = new Set(['body', 'html']); class XhtmlObject extends XmlObject { constructor(e, t) { super(zn, t); this[$n] = !1; this.style = e.style || ''; } [zr](e) { super[zr](e); this.style = (function checkStyle(e) { return e.style ? e.style .trim() .split(/\s*;\s*/) .filter((e) => !!e) .map((e) => e.split(/\s*:\s*/, 2)) .filter(([t, i]) => { 'font-family' === t && e[ws].usedTypefaces.add(i); return Ao.has(t); }) .map((e) => e.join(':')) .join(';') : ''; })(this); } [Xr]() { return !ro.has(this[vs]); } [Os](e, t = !1) { if (t) this[$n] = !0; else { e = e.replaceAll(io, ''); this.style.includes('xfa-spacerun:yes') || (e = e.replaceAll(to, ' ')); } e && (this[is] += e); } [Ws](e, t = !0) { const i = Object.create(null), a = { top: NaN, bottom: NaN, left: NaN, right: NaN }; let r = null; for (const [e, t] of this.style.split(';').map((e) => e.split(':', 2))) switch (e) { case 'font-family': i.typeface = stripQuotes(t); break; case 'font-size': i.size = getMeasurement(t); break; case 'font-weight': i.weight = t; break; case 'font-style': i.posture = t; break; case 'letter-spacing': i.letterSpacing = getMeasurement(t); break; case 'margin': const e = t.split(/ \t/).map((e) => getMeasurement(e)); switch (e.length) { case 1: a.top = a.bottom = a.left = a.right = e[0]; break; case 2: a.top = a.bottom = e[0]; a.left = a.right = e[1]; break; case 3: a.top = e[0]; a.bottom = e[2]; a.left = a.right = e[1]; break; case 4: a.top = e[0]; a.left = e[1]; a.bottom = e[2]; a.right = e[3]; } break; case 'margin-top': a.top = getMeasurement(t); break; case 'margin-bottom': a.bottom = getMeasurement(t); break; case 'margin-left': a.left = getMeasurement(t); break; case 'margin-right': a.right = getMeasurement(t); break; case 'line-height': r = getMeasurement(t); } e.pushData(i, a, r); if (this[is]) e.addString(this[is]); else for (const t of this[us]()) '#text' !== t[vs] ? t[Ws](e) : e.addString(t[is]); t && e.popFont(); } [sn](e) { const t = []; this[ss] = { children: t }; this[_r]({}); if (0 === t.length && !this[is]) return HTMLResult.EMPTY; let i; i = this[$n] ? this[is] ? this[is].replaceAll(ao, '\n') : void 0 : this[is] || void 0; return HTMLResult.success({ name: this[vs], attributes: { href: this.href, style: mapStyle(this.style, this, this[$n]), }, children: t, value: i, }); } } class A extends XhtmlObject { constructor(e) { super(e, 'a'); this.href = fixURL(e.href) || ''; } } class B extends XhtmlObject { constructor(e) { super(e, 'b'); } [Ws](e) { e.pushFont({ weight: 'bold' }); super[Ws](e); e.popFont(); } } class Body extends XhtmlObject { constructor(e) { super(e, 'body'); } [sn](e) { const t = super[sn](e), { html: i } = t; if (!i) return HTMLResult.EMPTY; i.name = 'div'; i.attributes.class = ['xfaRich']; return t; } } class Br extends XhtmlObject { constructor(e) { super(e, 'br'); } [an]() { return '\n'; } [Ws](e) { e.addString('\n'); } [sn](e) { return HTMLResult.success({ name: 'br' }); } } class Html extends XhtmlObject { constructor(e) { super(e, 'html'); } [sn](e) { const t = []; this[ss] = { children: t }; this[_r]({}); if (0 === t.length) return HTMLResult.success({ name: 'div', attributes: { class: ['xfaRich'], style: {} }, value: this[is] || '', }); if (1 === t.length) { const e = t[0]; if (e.attributes?.class.includes('xfaRich')) return HTMLResult.success(e); } return HTMLResult.success({ name: 'div', attributes: { class: ['xfaRich'], style: {} }, children: t, }); } } class I extends XhtmlObject { constructor(e) { super(e, 'i'); } [Ws](e) { e.pushFont({ posture: 'italic' }); super[Ws](e); e.popFont(); } } class Li extends XhtmlObject { constructor(e) { super(e, 'li'); } } class Ol extends XhtmlObject { constructor(e) { super(e, 'ol'); } } class P extends XhtmlObject { constructor(e) { super(e, 'p'); } [Ws](e) { super[Ws](e, !1); e.addString('\n'); e.addPara(); e.popFont(); } [an]() { return this[ms]()[us]().at(-1) === this ? super[an]() : super[an]() + '\n'; } } class Span extends XhtmlObject { constructor(e) { super(e, 'span'); } } class Sub extends XhtmlObject { constructor(e) { super(e, 'sub'); } } class Sup extends XhtmlObject { constructor(e) { super(e, 'sup'); } } class Ul extends XhtmlObject { constructor(e) { super(e, 'ul'); } } class XhtmlNamespace { static [In](e, t) { if (XhtmlNamespace.hasOwnProperty(e)) return XhtmlNamespace[e](t); } static a(e) { return new A(e); } static b(e) { return new B(e); } static body(e) { return new Body(e); } static br(e) { return new Br(e); } static html(e) { return new Html(e); } static i(e) { return new I(e); } static li(e) { return new Li(e); } static ol(e) { return new Ol(e); } static p(e) { return new P(e); } static span(e) { return new Span(e); } static sub(e) { return new Sub(e); } static sup(e) { return new Sup(e); } static ul(e) { return new Ul(e); } } const so = { config: ConfigNamespace, connection: ConnectionSetNamespace, datasets: DatasetsNamespace, localeSet: LocaleSetNamespace, signature: SignatureNamespace, stylesheet: StylesheetNamespace, template: TemplateNamespace, xdp: XdpNamespace, xhtml: XhtmlNamespace, }; class UnknownNamespace { constructor(e) { this.namespaceId = e; } [In](e, t) { return new XmlObject(this.namespaceId, e, t); } } class Root extends XFAObject { constructor(e) { super(-1, 'root', Object.create(null)); this.element = null; this[Ds] = e; } [Ks](e) { this.element = e; return !0; } [ns]() { super[ns](); if (this.element.template instanceof Template) { this[Ds].set(Vs, this.element); this.element.template[_s](this[Ds]); this.element.template[Ds] = this[Ds]; } } } class Empty extends XFAObject { constructor() { super(-1, '', Object.create(null)); } [Ks](e) { return !1; } } class Builder { constructor(e = null) { this._namespaceStack = []; this._nsAgnosticLevel = 0; this._namespacePrefixes = new Map(); this._namespaces = new Map(); this._nextNsId = Math.max(...Object.values(cn).map(({ id: e }) => e)); this._currentNamespace = e || new UnknownNamespace(++this._nextNsId); } buildRoot(e) { return new Root(e); } build({ nsPrefix: e, name: t, attributes: i, namespace: a, prefixes: r }) { const s = null !== a; if (s) { this._namespaceStack.push(this._currentNamespace); this._currentNamespace = this._searchNamespace(a); } r && this._addNamespacePrefix(r); if (i.hasOwnProperty(Ts)) { const e = so.datasets, t = i[Ts]; let a = null; for (const [i, r] of Object.entries(t)) { if (this._getNamespaceToUse(i) === e) { a = { xfa: r }; break; } } a ? (i[Ts] = a) : delete i[Ts]; } const n = this._getNamespaceToUse(e), o = n?.[In](t, i) || new Empty(); o[xs]() && this._nsAgnosticLevel++; (s || r || o[xs]()) && (o[As] = { hasNamespace: s, prefixes: r, nsAgnostic: o[xs]() }); return o; } isNsAgnostic() { return this._nsAgnosticLevel > 0; } _searchNamespace(e) { let t = this._namespaces.get(e); if (t) return t; for (const [i, { check: a }] of Object.entries(cn)) if (a(e)) { t = so[i]; if (t) { this._namespaces.set(e, t); return t; } break; } t = new UnknownNamespace(++this._nextNsId); this._namespaces.set(e, t); return t; } _addNamespacePrefix(e) { for (const { prefix: t, value: i } of e) { const e = this._searchNamespace(i); let a = this._namespacePrefixes.get(t); if (!a) { a = []; this._namespacePrefixes.set(t, a); } a.push(e); } } _getNamespaceToUse(e) { if (!e) return this._currentNamespace; const t = this._namespacePrefixes.get(e); if (t?.length > 0) return t.at(-1); warn(`Unknown namespace prefix: ${e}.`); return null; } clean(e) { const { hasNamespace: t, prefixes: i, nsAgnostic: a } = e; t && (this._currentNamespace = this._namespaceStack.pop()); i && i.forEach(({ prefix: e }) => { this._namespacePrefixes.get(e).pop(); }); a && this._nsAgnosticLevel--; } } class XFAParser extends XMLParserBase { constructor(e = null, t = !1) { super(); this._builder = new Builder(e); this._stack = []; this._globalData = { usedTypefaces: new Set() }; this._ids = new Map(); this._current = this._builder.buildRoot(this._ids); this._errorCode = xr; this._whiteRegex = /^\s+$/; this._nbsps = /\xa0+/g; this._richText = t; } parse(e) { this.parseXml(e); if (this._errorCode === xr) { this._current[ns](); return this._current.element; } } onText(e) { e = e.replace(this._nbsps, (e) => e.slice(1) + ' '); this._richText || this._current[Xr]() ? this._current[Os](e, this._richText) : this._whiteRegex.test(e) || this._current[Os](e.trim()); } onCdata(e) { this._current[Os](e); } _mkAttributes(e, t) { let i = null, a = null; const r = Object.create({}); for (const { name: s, value: n } of e) if ('xmlns' === s) i ? warn(`XFA - multiple namespace definition in <${t}>`) : (i = n); else if (s.startsWith('xmlns:')) { const e = s.substring(6); a || (a = []); a.push({ prefix: e, value: n }); } else { const e = s.indexOf(':'); if (-1 === e) r[s] = n; else { let t = r[Ts]; t || (t = r[Ts] = Object.create(null)); const [i, a] = [s.slice(0, e), s.slice(e + 1)]; (t[i] ||= Object.create(null))[a] = n; } } return [i, a, r]; } _getNameAndPrefix(e, t) { const i = e.indexOf(':'); return -1 === i ? [e, null] : [e.substring(i + 1), t ? '' : e.substring(0, i)]; } onBeginElement(e, t, i) { const [a, r, s] = this._mkAttributes(t, e), [n, o] = this._getNameAndPrefix(e, this._builder.isNsAgnostic()), g = this._builder.build({ nsPrefix: o, name: n, attributes: s, namespace: a, prefixes: r, }); g[ws] = this._globalData; if (i) { g[ns](); this._current[Ks](g) && g[$s](this._ids); g[zr](this._builder); } else { this._stack.push(this._current); this._current = g; } } onEndElement(e) { const t = this._current; if (t[ks]() && 'string' == typeof t[is]) { const e = new XFAParser(); e._globalData = this._globalData; const i = e.parse(t[is]); t[is] = null; t[Ks](i); } t[ns](); this._current = this._stack.pop(); this._current[Ks](t) && t[$s](this._ids); t[zr](this._builder); } onError(e) { this._errorCode = e; } } class XFAFactory { constructor(e) { try { this.root = new XFAParser().parse(XFAFactory._createDocument(e)); const t = new Binder(this.root); this.form = t.bind(); this.dataHandler = new DataHandler(this.root, t.getData()); this.form[ws].template = this.form; } catch (e) { warn(`XFA - an error occurred during parsing and binding: ${e}`); } } isValid() { return this.root && this.form; } _createPagesHelper() { const e = this.form[rn](); return new Promise((t, i) => { const nextIteration = () => { try { const i = e.next(); i.done ? t(i.value) : setTimeout(nextIteration, 0); } catch (e) { i(e); } }; setTimeout(nextIteration, 0); }); } async _createPages() { try { this.pages = await this._createPagesHelper(); this.dims = this.pages.children.map((e) => { const { width: t, height: i } = e.attributes.style; return [0, 0, parseInt(t), parseInt(i)]; }); } catch (e) { warn(`XFA - an error occurred during layout: ${e}`); } } getBoundingBox(e) { return this.dims[e]; } async getNumPages() { this.pages || (await this._createPages()); return this.dims.length; } setImages(e) { this.form[ws].images = e; } setFonts(e) { this.form[ws].fontFinder = new FontFinder(e); const t = []; for (let e of this.form[ws].usedTypefaces) { e = stripQuotes(e); this.form[ws].fontFinder.find(e) || t.push(e); } return t.length > 0 ? t : null; } appendFonts(e, t) { this.form[ws].fontFinder.add(e, t); } async getPages() { this.pages || (await this._createPages()); const e = this.pages; this.pages = null; return e; } serializeData(e) { return this.dataHandler.serialize(e); } static _createDocument(e) { return e['/xdp:xdp'] ? Object.values(e).join('') : e['xdp:xdp']; } static getRichTextAsHtml(e) { if (!e || 'string' != typeof e) return null; try { let t = new XFAParser(XhtmlNamespace, !0).parse(e); if (!['body', 'xhtml'].includes(t[vs])) { const e = XhtmlNamespace.body({}); e[Vr](t); t = e; } const i = t[sn](); if (!i.success) return null; const { html: a } = i, { attributes: r } = a; if (r) { r.class && (r.class = r.class.filter((e) => !e.startsWith('xfa'))); r.dir = 'auto'; } return { html: a, str: t[an]() }; } catch (e) { warn(`XFA - an error occurred during parsing of rich text: ${e}`); } return null; } } class AnnotationFactory { static createGlobals(e) { return Promise.all([ e.ensureCatalog('acroForm'), e.ensureDoc('xfaDatasets'), e.ensureCatalog('structTreeRoot'), e.ensureCatalog('baseUrl'), e.ensureCatalog('attachments'), ]).then( ([t, i, a, r, s]) => ({ pdfManager: e, acroForm: t instanceof Dict ? t : Dict.empty, xfaDatasets: i, structTreeRoot: a, baseUrl: r, attachments: s, }), (e) => { warn(`createGlobals: "${e}".`); return null; }, ); } static async create(e, t, i, a, r, s) { const n = r ? await this._getPageIndex(e, t, i.pdfManager) : null; return i.pdfManager.ensure(this, '_create', [e, t, i, a, r, n, s]); } static _create(e, t, i, a, r = !1, s = null, n = null) { const o = e.fetchIfRef(t); if (!(o instanceof Dict)) return; const { acroForm: g, pdfManager: c } = i, C = t instanceof Ref ? t.toString() : `annot_${a.createObjId()}`; let h = o.get('Subtype'); h = h instanceof Name ? h.name : null; const l = { xref: e, ref: t, dict: o, subtype: h, id: C, annotationGlobals: i, collectFields: r, needAppearances: !r && !0 === g.get('NeedAppearances'), pageIndex: s, evaluatorOptions: c.evaluatorOptions, pageRef: n, }; switch (h) { case 'Link': return new LinkAnnotation(l); case 'Text': return new TextAnnotation(l); case 'Widget': let e = getInheritableProperty({ dict: o, key: 'FT' }); e = e instanceof Name ? e.name : null; switch (e) { case 'Tx': return new TextWidgetAnnotation(l); case 'Btn': return new ButtonWidgetAnnotation(l); case 'Ch': return new ChoiceWidgetAnnotation(l); case 'Sig': return new SignatureWidgetAnnotation(l); } warn( `Unimplemented widget field type "${e}", falling back to base field type.`, ); return new WidgetAnnotation(l); case 'Popup': return new PopupAnnotation(l); case 'FreeText': return new FreeTextAnnotation(l); case 'Line': return new LineAnnotation(l); case 'Square': return new SquareAnnotation(l); case 'Circle': return new CircleAnnotation(l); case 'PolyLine': return new PolylineAnnotation(l); case 'Polygon': return new PolygonAnnotation(l); case 'Caret': return new CaretAnnotation(l); case 'Ink': return new InkAnnotation(l); case 'Highlight': return new HighlightAnnotation(l); case 'Underline': return new UnderlineAnnotation(l); case 'Squiggly': return new SquigglyAnnotation(l); case 'StrikeOut': return new StrikeOutAnnotation(l); case 'Stamp': return new StampAnnotation(l); case 'FileAttachment': return new FileAttachmentAnnotation(l); default: r || warn( h ? `Unimplemented annotation type "${h}", falling back to base annotation.` : 'Annotation is missing the required /Subtype.', ); return new Annotation(l); } } static async _getPageIndex(e, t, i) { try { const a = await e.fetchIfRefAsync(t); if (!(a instanceof Dict)) return -1; const r = a.getRaw('P'); if (r instanceof Ref) try { return await i.ensureCatalog('getPageIndex', [r]); } catch (e) { info(`_getPageIndex -- not a valid page reference: "${e}".`); } if (a.has('Kids')) return -1; const s = await i.ensureDoc('numPages'); for (let e = 0; e < s; e++) { const a = await i.getPage(e), r = await i.ensure(a, 'annotations'); for (const i of r) if (i instanceof Ref && isRefsEqual(i, t)) return e; } } catch (e) { warn(`_getPageIndex: "${e}".`); } return -1; } static generateImages(e, t, i) { if (!i) { warn( 'generateImages: OffscreenCanvas is not supported, cannot save or print some annotations with images.', ); return null; } let a; for (const { bitmapId: i, bitmap: r } of e) if (r) { a ||= new Map(); a.set(i, StampAnnotation.createImage(r, t)); } return a; } static async saveNewAnnotations(e, t, i, a) { const r = e.xref; let s; const n = [], o = [], { isOffscreenCanvasSupported: g } = e.options; for (const c of i) if (!c.deleted) switch (c.annotationType) { case d: if (!s) { const e = new Dict(r); e.set('BaseFont', Name.get('Helvetica')); e.set('Type', Name.get('Font')); e.set('Subtype', Name.get('Type1')); e.set('Encoding', Name.get('WinAnsiEncoding')); const t = []; s = r.getNewTemporaryRef(); await writeObject(s, e, t, r); n.push({ ref: s, data: t.join('') }); } o.push( FreeTextAnnotation.createNewAnnotation(r, c, n, { evaluator: e, task: t, baseFontRef: s, }), ); break; case f: c.quadPoints ? o.push(HighlightAnnotation.createNewAnnotation(r, c, n)) : o.push(InkAnnotation.createNewAnnotation(r, c, n)); break; case m: o.push(InkAnnotation.createNewAnnotation(r, c, n)); break; case p: if (!g) break; const i = await a.get(c.bitmapId); if (i.imageStream) { const { imageStream: e, smaskStream: t } = i, a = []; if (t) { const i = r.getNewTemporaryRef(); await writeObject(i, t, a, r); n.push({ ref: i, data: a.join('') }); e.dict.set('SMask', i); a.length = 0; } const s = (i.imageRef = r.getNewTemporaryRef()); await writeObject(s, e, a, r); n.push({ ref: s, data: a.join('') }); i.imageStream = i.smaskStream = null; } o.push(StampAnnotation.createNewAnnotation(r, c, n, { image: i })); } return { annotations: await Promise.all(o), dependencies: n }; } static async printNewAnnotations(e, t, i, a, r) { if (!a) return null; const { options: s, xref: n } = t, o = []; for (const g of a) if (!g.deleted) switch (g.annotationType) { case d: o.push( FreeTextAnnotation.createNewPrintAnnotation(e, n, g, { evaluator: t, task: i, evaluatorOptions: s, }), ); break; case f: g.quadPoints ? o.push( HighlightAnnotation.createNewPrintAnnotation(e, n, g, { evaluatorOptions: s, }), ) : o.push( InkAnnotation.createNewPrintAnnotation(e, n, g, { evaluatorOptions: s, }), ); break; case m: o.push( InkAnnotation.createNewPrintAnnotation(e, n, g, { evaluatorOptions: s, }), ); break; case p: if (!s.isOffscreenCanvasSupported) break; const a = await r.get(g.bitmapId); if (a.imageStream) { const { imageStream: e, smaskStream: t } = a; t && e.dict.set('SMask', t); a.imageRef = new JpegStream(e, e.length); a.imageStream = a.smaskStream = null; } o.push( StampAnnotation.createNewPrintAnnotation(e, n, g, { image: a, evaluatorOptions: s, }), ); } return Promise.all(o); } } function getRgbColor(e, t = new Uint8ClampedArray(3)) { if (!Array.isArray(e)) return t; const i = t || new Uint8ClampedArray(3); switch (e.length) { case 0: return null; case 1: ColorSpace.singletons.gray.getRgbItem(e, 0, i, 0); return i; case 3: ColorSpace.singletons.rgb.getRgbItem(e, 0, i, 0); return i; case 4: ColorSpace.singletons.cmyk.getRgbItem(e, 0, i, 0); return i; default: return t; } } function getPdfColorArray(e) { return Array.from(e, (e) => e / 255); } function getQuadPoints(e, t) { const i = e.getArray('QuadPoints'); if (!isNumberArray(i, null) || 0 === i.length || i.length % 8 > 0) return null; const a = new Float32Array(i.length); for (let e = 0, r = i.length; e < r; e += 8) { const [r, s, n, o, g, c, C, h] = i.slice(e, e + 8), l = Math.min(r, n, g, C), Q = Math.max(r, n, g, C), E = Math.min(s, o, c, h), u = Math.max(s, o, c, h); if (null !== t && (l < t[0] || Q > t[2] || E < t[1] || u > t[3])) return null; a.set([l, u, Q, u, l, E, Q, E], e); } return a; } function getTransformMatrix(e, t, i) { const [a, r, s, n] = Util.getAxialAlignedBoundingBox(t, i); if (a === s || r === n) return [1, 0, 0, 1, e[0], e[1]]; const o = (e[2] - e[0]) / (s - a), g = (e[3] - e[1]) / (n - r); return [o, 0, 0, g, e[0] - a * o, e[1] - r * g]; } class Annotation { constructor(e) { const { dict: t, xref: i, annotationGlobals: a } = e; this.setTitle(t.get('T')); this.setContents(t.get('Contents')); this.setModificationDate(t.get('M')); this.setFlags(t.get('F')); this.setRectangle(t.getArray('Rect')); this.setColor(t.getArray('C')); this.setBorderStyle(t); this.setAppearance(t); this.setOptionalContent(t); const r = t.get('MK'); this.setBorderAndBackgroundColors(r); this.setRotation(r, t); this.ref = e.ref instanceof Ref ? e.ref : null; this._streams = []; this.appearance && this._streams.push(this.appearance); const s = !!(this.flags & tA), n = !!(this.flags & iA); if (a.structTreeRoot) { let i = t.get('StructParent'); i = Number.isInteger(i) && i >= 0 ? i : -1; a.structTreeRoot.addAnnotationIdToPage(e.pageRef, i); } this.data = { annotationFlags: this.flags, borderStyle: this.borderStyle, color: this.color, backgroundColor: this.backgroundColor, borderColor: this.borderColor, rotation: this.rotation, contentsObj: this._contents, hasAppearance: !!this.appearance, id: e.id, modificationDate: this.modificationDate, rect: this.rectangle, subtype: e.subtype, hasOwnCanvas: !1, noRotate: !!(this.flags & AA), noHTML: s && n, }; if (e.collectFields) { const a = t.get('Kids'); if (Array.isArray(a)) { const e = []; for (const t of a) t instanceof Ref && e.push(t.toString()); 0 !== e.length && (this.data.kidIds = e); } this.data.actions = collectActions(i, t, fA); this.data.fieldName = this._constructFieldName(t); this.data.pageIndex = e.pageIndex; } this._isOffscreenCanvasSupported = e.evaluatorOptions.isOffscreenCanvasSupported; this._fallbackFontDict = null; this._needAppearances = !1; } _hasFlag(e, t) { return !!(e & t); } _isViewable(e) { return !this._hasFlag(e, _) && !this._hasFlag(e, eA); } _isPrintable(e) { return this._hasFlag(e, $) && !this._hasFlag(e, z) && !this._hasFlag(e, _); } mustBeViewed(e, t) { const i = e?.get(this.data.id)?.noView; return void 0 !== i ? !i : this.viewable && !this._hasFlag(this.flags, z); } mustBePrinted(e) { const t = e?.get(this.data.id)?.noPrint; return void 0 !== t ? !t : this.printable; } get viewable() { return ( null !== this.data.quadPoints && (0 === this.flags || this._isViewable(this.flags)) ); } get printable() { return ( null !== this.data.quadPoints && 0 !== this.flags && this._isPrintable(this.flags) ); } _parseStringHelper(e) { const t = 'string' == typeof e ? stringToPDFString(e) : ''; return { str: t, dir: t && 'rtl' === bidi(t).dir ? 'rtl' : 'ltr' }; } setDefaultAppearance(e) { const { dict: t, annotationGlobals: i } = e, a = getInheritableProperty({ dict: t, key: 'DA' }) || i.acroForm.get('DA'); this._defaultAppearance = 'string' == typeof a ? a : ''; this.data.defaultAppearanceData = parseDefaultAppearance( this._defaultAppearance, ); } setTitle(e) { this._title = this._parseStringHelper(e); } setContents(e) { this._contents = this._parseStringHelper(e); } setModificationDate(e) { this.modificationDate = 'string' == typeof e ? e : null; } setFlags(e) { this.flags = Number.isInteger(e) && e > 0 ? e : 0; this.flags & _ && 'Annotation' !== this.constructor.name && (this.flags ^= _); } hasFlag(e) { return this._hasFlag(this.flags, e); } setRectangle(e) { this.rectangle = lookupNormalRect(e, [0, 0, 0, 0]); } setColor(e) { this.color = getRgbColor(e); } setLineEndings(e) { this.lineEndings = ['None', 'None']; if (Array.isArray(e) && 2 === e.length) for (let t = 0; t < 2; t++) { const i = e[t]; if (i instanceof Name) switch (i.name) { case 'None': continue; case 'Square': case 'Circle': case 'Diamond': case 'OpenArrow': case 'ClosedArrow': case 'Butt': case 'ROpenArrow': case 'RClosedArrow': case 'Slash': this.lineEndings[t] = i.name; continue; } warn(`Ignoring invalid lineEnding: ${i}`); } } setRotation(e, t) { this.rotation = 0; let i = e instanceof Dict ? e.get('R') || 0 : t.get('Rotate') || 0; if (Number.isInteger(i) && 0 !== i) { i %= 360; i < 0 && (i += 360); i % 90 == 0 && (this.rotation = i); } } setBorderAndBackgroundColors(e) { if (e instanceof Dict) { this.borderColor = getRgbColor(e.getArray('BC'), null); this.backgroundColor = getRgbColor(e.getArray('BG'), null); } else this.borderColor = this.backgroundColor = null; } setBorderStyle(e) { this.borderStyle = new AnnotationBorderStyle(); if (e instanceof Dict) if (e.has('BS')) { const t = e.get('BS'); if (t instanceof Dict) { const e = t.get('Type'); if (!e || isName(e, 'Border')) { this.borderStyle.setWidth(t.get('W'), this.rectangle); this.borderStyle.setStyle(t.get('S')); this.borderStyle.setDashArray(t.getArray('D')); } } } else if (e.has('Border')) { const t = e.getArray('Border'); if (Array.isArray(t) && t.length >= 3) { this.borderStyle.setHorizontalCornerRadius(t[0]); this.borderStyle.setVerticalCornerRadius(t[1]); this.borderStyle.setWidth(t[2], this.rectangle); 4 === t.length && this.borderStyle.setDashArray(t[3], !0); } } else this.borderStyle.setWidth(0); } setAppearance(e) { this.appearance = null; const t = e.get('AP'); if (!(t instanceof Dict)) return; const i = t.get('N'); if (i instanceof BaseStream) { this.appearance = i; return; } if (!(i instanceof Dict)) return; const a = e.get('AS'); if (!(a instanceof Name && i.has(a.name))) return; const r = i.get(a.name); r instanceof BaseStream && (this.appearance = r); } setOptionalContent(e) { this.oc = null; const t = e.get('OC'); t instanceof Name ? warn('setOptionalContent: Support for /Name-entry is not implemented.') : t instanceof Dict && (this.oc = t); } loadResources(e, t) { return t.dict.getAsync('Resources').then((t) => { if (!t) return; return new ObjectLoader(t, e, t.xref).load().then(function () { return t; }); }); } async getOperatorList(e, t, i, r, s) { const { hasOwnCanvas: n, id: o, rect: g } = this.data; let C = this.appearance; const h = !!(n && i & c); if (h && (g[0] === g[2] || g[1] === g[3])) { this.data.hasOwnCanvas = !1; return { opList: new OperatorList(), separateForm: !1, separateCanvas: !1, }; } if (!C) { if (!h) return { opList: new OperatorList(), separateForm: !1, separateCanvas: !1, }; C = new StringStream(''); C.dict = new Dict(); } const l = C.dict, Q = await this.loadResources( ['ExtGState', 'ColorSpace', 'Pattern', 'Shading', 'XObject', 'Font'], C, ), E = lookupRect(l.getArray('BBox'), [0, 0, 1, 1]), u = lookupMatrix(l.getArray('Matrix'), a), d = getTransformMatrix(g, E, u), f = new OperatorList(); let p; this.oc && (p = await e.parseMarkedContentProps(this.oc, null)); void 0 !== p && f.addOp(ve, ['OC', p]); f.addOp(Xe, [o, g, d, u, h]); await e.getOperatorList({ stream: C, task: t, resources: Q, operatorList: f, fallbackFontDict: this._fallbackFontDict, }); f.addOp(Ze, []); void 0 !== p && f.addOp(Te, []); this.reset(); return { opList: f, separateForm: !1, separateCanvas: h }; } async save(e, t, i) { return null; } get hasTextContent() { return !1; } async extractTextContent(e, t, i) { if (!this.appearance) return; const a = await this.loadResources( ['ExtGState', 'Font', 'Properties', 'XObject'], this.appearance, ), r = [], s = []; let n = null; const o = { desiredSize: Math.Infinity, ready: !0, enqueue(e, t) { for (const t of e.items) if (void 0 !== t.str) { n ||= t.transform.slice(-2); s.push(t.str); if (t.hasEOL) { r.push(s.join('').trimEnd()); s.length = 0; } } }, }; await e.getTextContent({ stream: this.appearance, task: t, resources: a, includeMarkedContent: !0, keepWhiteSpace: !0, sink: o, viewBox: i, }); this.reset(); s.length && r.push(s.join('').trimEnd()); if (r.length > 1 || r[0]) { const e = this.appearance.dict, t = lookupRect(e.getArray('BBox'), null), i = lookupMatrix(e.getArray('Matrix'), null); this.data.textPosition = this._transformPoint(n, t, i); this.data.textContent = r; } } _transformPoint(e, t, i) { const { rect: a } = this.data; t ||= [0, 0, 1, 1]; i ||= [1, 0, 0, 1, 0, 0]; const r = getTransformMatrix(a, t, i); r[4] -= a[0]; r[5] -= a[1]; e = Util.applyTransform(e, r); return Util.applyTransform(e, i); } getFieldObject() { return this.data.kidIds ? { id: this.data.id, actions: this.data.actions, name: this.data.fieldName, strokeColor: this.data.borderColor, fillColor: this.data.backgroundColor, type: '', kidIds: this.data.kidIds, page: this.data.pageIndex, rotation: this.rotation, } : null; } reset() { for (const e of this._streams) e.reset(); } _constructFieldName(e) { if (!e.has('T') && !e.has('Parent')) { warn('Unknown field name, falling back to empty field name.'); return ''; } if (!e.has('Parent')) return stringToPDFString(e.get('T')); const t = []; e.has('T') && t.unshift(stringToPDFString(e.get('T'))); let i = e; const a = new RefSet(); e.objId && a.put(e.objId); for (; i.has('Parent'); ) { i = i.get('Parent'); if (!(i instanceof Dict) || (i.objId && a.has(i.objId))) break; i.objId && a.put(i.objId); i.has('T') && t.unshift(stringToPDFString(i.get('T'))); } return t.join('.'); } } class AnnotationBorderStyle { constructor() { this.width = 1; this.style = BA; this.dashArray = [3]; this.horizontalCornerRadius = 0; this.verticalCornerRadius = 0; } setWidth(e, t = [0, 0, 0, 0]) { if (e instanceof Name) this.width = 0; else if ('number' == typeof e) { if (e > 0) { const i = (t[2] - t[0]) / 2, a = (t[3] - t[1]) / 2; if (i > 0 && a > 0 && (e > i || e > a)) { warn(`AnnotationBorderStyle.setWidth - ignoring width: ${e}`); e = 1; } } this.width = e; } } setStyle(e) { if (e instanceof Name) switch (e.name) { case 'S': this.style = BA; break; case 'D': this.style = QA; break; case 'B': this.style = EA; break; case 'I': this.style = uA; break; case 'U': this.style = dA; } } setDashArray(e, t = !1) { if (Array.isArray(e)) { let i = !0, a = !0; for (const t of e) { if (!(+t >= 0)) { i = !1; break; } t > 0 && (a = !1); } if (0 === e.length || (i && !a)) { this.dashArray = e; t && this.setStyle(Name.get('D')); } else this.width = 0; } else e && (this.width = 0); } setHorizontalCornerRadius(e) { Number.isInteger(e) && (this.horizontalCornerRadius = e); } setVerticalCornerRadius(e) { Number.isInteger(e) && (this.verticalCornerRadius = e); } } class MarkupAnnotation extends Annotation { constructor(e) { super(e); const { dict: t } = e; if (t.has('IRT')) { const e = t.getRaw('IRT'); this.data.inReplyTo = e instanceof Ref ? e.toString() : null; const i = t.get('RT'); this.data.replyType = i instanceof Name ? i.name : V; } let i = null; if (this.data.replyType === Z) { const e = t.get('IRT'); this.setTitle(e.get('T')); this.data.titleObj = this._title; this.setContents(e.get('Contents')); this.data.contentsObj = this._contents; if (e.has('CreationDate')) { this.setCreationDate(e.get('CreationDate')); this.data.creationDate = this.creationDate; } else this.data.creationDate = null; if (e.has('M')) { this.setModificationDate(e.get('M')); this.data.modificationDate = this.modificationDate; } else this.data.modificationDate = null; i = e.getRaw('Popup'); if (e.has('C')) { this.setColor(e.getArray('C')); this.data.color = this.color; } else this.data.color = null; } else { this.data.titleObj = this._title; this.setCreationDate(t.get('CreationDate')); this.data.creationDate = this.creationDate; i = t.getRaw('Popup'); t.has('C') || (this.data.color = null); } this.data.popupRef = i instanceof Ref ? i.toString() : null; t.has('RC') && (this.data.richText = XFAFactory.getRichTextAsHtml(t.get('RC'))); } setCreationDate(e) { this.creationDate = 'string' == typeof e ? e : null; } _setDefaultAppearance({ xref: e, extra: t, strokeColor: i, fillColor: a, blendMode: r, strokeAlpha: s, fillAlpha: n, pointsCallback: o, }) { let g = Number.MAX_VALUE, c = Number.MAX_VALUE, C = Number.MIN_VALUE, h = Number.MIN_VALUE; const l = ['q']; t && l.push(t); i && l.push(`${i[0]} ${i[1]} ${i[2]} RG`); a && l.push(`${a[0]} ${a[1]} ${a[2]} rg`); let Q = this.data.quadPoints; Q || (Q = Float32Array.from([ this.rectangle[0], this.rectangle[3], this.rectangle[2], this.rectangle[3], this.rectangle[0], this.rectangle[1], this.rectangle[2], this.rectangle[1], ])); for (let e = 0, t = Q.length; e < t; e += 8) { const [t, i, a, r] = o(l, Q.subarray(e, e + 8)); g = Math.min(g, t); C = Math.max(C, i); c = Math.min(c, a); h = Math.max(h, r); } l.push('Q'); const E = new Dict(e), u = new Dict(e); u.set('Subtype', Name.get('Form')); const d = new StringStream(l.join(' ')); d.dict = u; E.set('Fm0', d); const f = new Dict(e); r && f.set('BM', Name.get(r)); 'number' == typeof s && f.set('CA', s); 'number' == typeof n && f.set('ca', n); const p = new Dict(e); p.set('GS0', f); const m = new Dict(e); m.set('ExtGState', p); m.set('XObject', E); const y = new Dict(e); y.set('Resources', m); const w = (this.data.rect = [g, c, C, h]); y.set('BBox', w); this.appearance = new StringStream('/GS0 gs /Fm0 Do'); this.appearance.dict = y; this._streams.push(this.appearance, d); } static async createNewAnnotation(e, t, i, a) { const r = (t.ref ||= e.getNewTemporaryRef()), s = await this.createNewAppearanceStream(t, e, a), n = []; let o; if (s) { const a = e.getNewTemporaryRef(); o = this.createNewDict(t, e, { apRef: a }); await writeObject(a, s, n, e); i.push({ ref: a, data: n.join('') }); } else o = this.createNewDict(t, e, {}); Number.isInteger(t.parentTreeId) && o.set('StructParent', t.parentTreeId); n.length = 0; await writeObject(r, o, n, e); return { ref: r, data: n.join('') }; } static async createNewPrintAnnotation(e, t, i, a) { const r = await this.createNewAppearanceStream(i, t, a), s = this.createNewDict(i, t, { ap: r }), n = new this.prototype.constructor({ dict: s, xref: t, annotationGlobals: e, evaluatorOptions: a.evaluatorOptions, }); i.ref && (n.ref = n.refToReplace = i.ref); return n; } } class WidgetAnnotation extends Annotation { constructor(e) { super(e); const { dict: t, xref: i, annotationGlobals: a } = e, r = this.data; this._needAppearances = e.needAppearances; r.annotationType = X; void 0 === r.fieldName && (r.fieldName = this._constructFieldName(t)); void 0 === r.actions && (r.actions = collectActions(i, t, fA)); let s = getInheritableProperty({ dict: t, key: 'V', getArray: !0 }); r.fieldValue = this._decodeFormValue(s); const n = getInheritableProperty({ dict: t, key: 'DV', getArray: !0 }); r.defaultFieldValue = this._decodeFormValue(n); if (void 0 === s && a.xfaDatasets) { const e = this._title.str; if (e) { this._hasValueFromXFA = !0; r.fieldValue = s = a.xfaDatasets.getValue(e); } } void 0 === s && null !== r.defaultFieldValue && (r.fieldValue = r.defaultFieldValue); r.alternativeText = stringToPDFString(t.get('TU') || ''); this.setDefaultAppearance(e); r.hasAppearance ||= this._needAppearances && void 0 !== r.fieldValue && null !== r.fieldValue; const o = getInheritableProperty({ dict: t, key: 'FT' }); r.fieldType = o instanceof Name ? o.name : null; const g = getInheritableProperty({ dict: t, key: 'DR' }), c = a.acroForm.get('DR'), C = this.appearance?.dict.get('Resources'); this._fieldResources = { localResources: g, acroFormResources: c, appearanceResources: C, mergedResources: Dict.merge({ xref: i, dictArray: [g, C, c], mergeSubDicts: !0, }), }; r.fieldFlags = getInheritableProperty({ dict: t, key: 'Ff' }); (!Number.isInteger(r.fieldFlags) || r.fieldFlags < 0) && (r.fieldFlags = 0); r.readOnly = this.hasFieldFlag(aA); r.required = this.hasFieldFlag(rA); r.hidden = this._hasFlag(r.annotationFlags, z) || this._hasFlag(r.annotationFlags, eA); } _decodeFormValue(e) { return Array.isArray(e) ? e.filter((e) => 'string' == typeof e).map((e) => stringToPDFString(e)) : e instanceof Name ? stringToPDFString(e.name) : 'string' == typeof e ? stringToPDFString(e) : null; } hasFieldFlag(e) { return !!(this.data.fieldFlags & e); } _isViewable(e) { return !0; } mustBeViewed(e, t) { return t ? this.viewable : super.mustBeViewed(e, t) && !this._hasFlag(this.flags, eA); } getRotationMatrix(e) { let t = e?.get(this.data.id)?.rotation; void 0 === t && (t = this.rotation); if (0 === t) return a; return getRotationMatrix( t, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1], ); } getBorderAndBackgroundAppearances(e) { let t = e?.get(this.data.id)?.rotation; void 0 === t && (t = this.rotation); if (!this.backgroundColor && !this.borderColor) return ''; const i = this.data.rect[2] - this.data.rect[0], a = this.data.rect[3] - this.data.rect[1], r = 0 === t || 180 === t ? `0 0 ${i} ${a} re` : `0 0 ${a} ${i} re`; let s = ''; this.backgroundColor && (s = `${getPdfColor(this.backgroundColor, !0)} ${r} f `); if (this.borderColor) { s += `${this.borderStyle.width || 1} w ${getPdfColor( this.borderColor, !1, )} ${r} S `; } return s; } async getOperatorList(e, t, i, a, r) { if ( a && !(this instanceof SignatureWidgetAnnotation) && !this.data.noHTML && !this.data.hasOwnCanvas ) return { opList: new OperatorList(), separateForm: !0, separateCanvas: !1, }; if (!this._hasText) return super.getOperatorList(e, t, i, a, r); const s = await this._getAppearance(e, t, i, r); if (this.appearance && null === s) return super.getOperatorList(e, t, i, a, r); const n = new OperatorList(); if (!this._defaultAppearance || null === s) return { opList: n, separateForm: !1, separateCanvas: !1 }; const o = !!(this.data.hasOwnCanvas && i & c), g = [ 0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1], ], C = getTransformMatrix(this.data.rect, g, [1, 0, 0, 1, 0, 0]); let h; this.oc && (h = await e.parseMarkedContentProps(this.oc, null)); void 0 !== h && n.addOp(ve, ['OC', h]); n.addOp(Xe, [ this.data.id, this.data.rect, C, this.getRotationMatrix(r), o, ]); const l = new StringStream(s); await e.getOperatorList({ stream: l, task: t, resources: this._fieldResources.mergedResources, operatorList: n, }); n.addOp(Ze, []); void 0 !== h && n.addOp(Te, []); return { opList: n, separateForm: !1, separateCanvas: o }; } _getMKDict(e) { const t = new Dict(null); e && t.set('R', e); this.borderColor && t.set('BC', getPdfColorArray(this.borderColor)); this.backgroundColor && t.set('BG', getPdfColorArray(this.backgroundColor)); return t.size > 0 ? t : null; } amendSavedDict(e, t) {} async save(e, t, i) { const r = i?.get(this.data.id); let s = r?.value, n = r?.rotation; if (s === this.data.fieldValue || void 0 === s) { if (!this._hasValueFromXFA && void 0 === n) return null; s ||= this.data.fieldValue; } if ( void 0 === n && !this._hasValueFromXFA && Array.isArray(s) && Array.isArray(this.data.fieldValue) && s.length === this.data.fieldValue.length && s.every((e, t) => e === this.data.fieldValue[t]) ) return null; void 0 === n && (n = this.rotation); let o = null; if (!this._needAppearances) { o = await this._getAppearance(e, t, h, i); if (null === o) return null; } let g = !1; if (o?.needAppearances) { g = !0; o = null; } const { xref: c } = e, C = c.fetchIfRef(this.ref); if (!(C instanceof Dict)) return null; const l = new Dict(c); for (const e of C.getKeys()) 'AP' !== e && l.set(e, C.getRaw(e)); const Q = { path: this.data.fieldName, value: s }, encoder = (e) => (isAscii(e) ? e : stringToUTF16String(e, !0)); l.set('V', Array.isArray(s) ? s.map(encoder) : encoder(s)); this.amendSavedDict(i, l); const E = this._getMKDict(n); E && l.set('MK', E); const u = [], d = [{ ref: this.ref, data: '', xfa: Q, needAppearances: g }]; if (null !== o) { const e = c.getNewTemporaryRef(), t = new Dict(c); l.set('AP', t); t.set('N', e); const r = this._getSaveFieldResources(c), s = new StringStream(o), n = (s.dict = new Dict(c)); n.set('Subtype', Name.get('Form')); n.set('Resources', r); n.set('BBox', [ 0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1], ]); const g = this.getRotationMatrix(i); g !== a && n.set('Matrix', g); await writeObject(e, s, u, c); d.push({ ref: e, data: u.join(''), xfa: null, needAppearances: !1 }); u.length = 0; } l.set('M', `D:${getModificationDate()}`); await writeObject(this.ref, l, u, c); d[0].data = u.join(''); return d; } async _getAppearance(e, t, i, a) { if (this.hasFieldFlag(nA)) return null; const r = a?.get(this.data.id); let s, n; if (r) { s = r.formattedValue || r.value; n = r.rotation; } if ( void 0 === n && void 0 === s && !this._needAppearances && (!this._hasValueFromXFA || this.appearance) ) return null; const g = this.getBorderAndBackgroundAppearances(a); if (void 0 === s) { s = this.data.fieldValue; if (!s) return `/Tx BMC q ${g}Q EMC`; } Array.isArray(s) && 1 === s.length && (s = s[0]); assert('string' == typeof s, 'Expected `value` to be a string.'); s = s.trim(); if (this.data.combo) { const e = this.data.options.find(({ exportValue: e }) => s === e); s = e?.displayValue || s; } if ('' === s) return `/Tx BMC q ${g}Q EMC`; void 0 === n && (n = this.rotation); let c, C = -1; if (this.data.multiLine) { c = s.split(/\r\n?|\n/).map((e) => e.normalize('NFC')); C = c.length; } else c = [s.replace(/\r\n?|\n/, '').normalize('NFC')]; let l = this.data.rect[3] - this.data.rect[1], Q = this.data.rect[2] - this.data.rect[0]; (90 !== n && 270 !== n) || ([Q, l] = [l, Q]); this._defaultAppearance || (this.data.defaultAppearanceData = parseDefaultAppearance( (this._defaultAppearance = '/Helvetica 0 Tf 0 g'), )); let E, u, d, f = await WidgetAnnotation._getFontData( e, t, this.data.defaultAppearanceData, this._fieldResources.mergedResources, ); const p = []; let m = !1; for (const e of c) { const t = f.encodeString(e); t.length > 1 && (m = !0); p.push(t.join('')); } if (m && i & h) return { needAppearances: !0 }; if (m && this._isOffscreenCanvasSupported) { const i = this.data.comb ? 'monospace' : 'sans-serif', a = new FakeUnicodeFont(e.xref, i), r = a.createFontResources(c.join('')), n = r.getRaw('Font'); if (this._fieldResources.mergedResources.has('Font')) { const e = this._fieldResources.mergedResources.get('Font'); for (const t of n.getKeys()) e.set(t, n.getRaw(t)); } else this._fieldResources.mergedResources.set('Font', n); const o = a.fontName.name; f = await WidgetAnnotation._getFontData( e, t, { fontName: o, fontSize: 0 }, r, ); for (let e = 0, t = p.length; e < t; e++) p[e] = stringToUTF16String(c[e]); const g = Object.assign( Object.create(null), this.data.defaultAppearanceData, ); this.data.defaultAppearanceData.fontSize = 0; this.data.defaultAppearanceData.fontName = o; [E, u, d] = this._computeFontSize(l - 2, Q - 4, s, f, C); this.data.defaultAppearanceData = g; } else { this._isOffscreenCanvasSupported || warn( '_getAppearance: OffscreenCanvas is not supported, annotation may not render correctly.', ); [E, u, d] = this._computeFontSize(l - 2, Q - 4, s, f, C); } let y = f.descent; y = isNaN(y) ? o * d : Math.max(o * d, Math.abs(y) * u); const w = Math.min(Math.floor((l - u) / 2), 1), b = this.data.textAlignment; if (this.data.multiLine) return this._getMultilineAppearance(E, p, f, u, Q, l, b, 2, w, y, d, a); if (this.data.comb) return this._getCombAppearance(E, f, p[0], u, Q, l, 2, w, y, d, a); const D = w + y; if (0 === b || b > 2) return ( `/Tx BMC q ${g}BT ` + E + ` 1 0 0 1 ${numberToString(2)} ${numberToString(D)} Tm (${escapeString( p[0], )}) Tj ET Q EMC` ); return ( `/Tx BMC q ${g}BT ` + E + ` 1 0 0 1 0 0 Tm ${this._renderText( p[0], f, u, Q, b, { shift: 0 }, 2, D, )} ET Q EMC` ); } static async _getFontData(e, t, i, a) { const r = new OperatorList(), s = { font: null, clone() { return this; }, }, { fontName: n, fontSize: o } = i; await e.handleSetFont(a, [n && Name.get(n), o], null, r, t, s, null); return s.font; } _getTextWidth(e, t) { return t.charsToGlyphs(e).reduce((e, t) => e + t.width, 0) / 1e3; } _computeFontSize(e, t, i, a, r) { let { fontSize: n } = this.data.defaultAppearanceData, o = (n || 12) * s, g = Math.round(e / o); if (!n) { const roundWithTwoDigits = (e) => Math.floor(100 * e) / 100; if (-1 === r) { const r = this._getTextWidth(i, a); n = roundWithTwoDigits(Math.min(e / s, r > t ? t / r : 1 / 0)); g = 1; } else { const c = i.split(/\r\n?|\n/), C = []; for (const e of c) { const t = a.encodeString(e).join(''), i = a.charsToGlyphs(t), r = a.getCharPositions(t); C.push({ line: t, glyphs: i, positions: r }); } const isTooBig = (i) => { let r = 0; for (const s of C) { r += this._splitLine(null, a, i, t, s).length * i; if (r > e) return !0; } return !1; }; g = Math.max(g, r); for (;;) { o = e / g; n = roundWithTwoDigits(o / s); if (!isTooBig(n)) break; g++; } } const { fontName: c, fontColor: C } = this.data.defaultAppearanceData; this._defaultAppearance = (function createDefaultAppearance({ fontSize: e, fontName: t, fontColor: i, }) { return `/${escapePDFName(t)} ${e} Tf ${getPdfColor(i, !0)}`; })({ fontSize: n, fontName: c, fontColor: C }); } return [this._defaultAppearance, n, e / g]; } _renderText(e, t, i, a, r, s, n, o) { let g; if (1 === r) { g = (a - this._getTextWidth(e, t) * i) / 2; } else if (2 === r) { g = a - this._getTextWidth(e, t) * i - n; } else g = n; const c = numberToString(g - s.shift); s.shift = g; return `${c} ${(o = numberToString(o))} Td (${escapeString(e)}) Tj`; } _getSaveFieldResources(e) { const { localResources: t, appearanceResources: i, acroFormResources: a, } = this._fieldResources, r = this.data.defaultAppearanceData?.fontName; if (!r) return t || Dict.empty; for (const e of [t, i]) if (e instanceof Dict) { const t = e.get('Font'); if (t instanceof Dict && t.has(r)) return e; } if (a instanceof Dict) { const i = a.get('Font'); if (i instanceof Dict && i.has(r)) { const a = new Dict(e); a.set(r, i.getRaw(r)); const s = new Dict(e); s.set('Font', a); return Dict.merge({ xref: e, dictArray: [s, t], mergeSubDicts: !0 }); } } return t || Dict.empty; } getFieldObject() { return null; } } class TextWidgetAnnotation extends WidgetAnnotation { constructor(e) { super(e); const { dict: t } = e; if (t.has('PMD')) { this.flags |= z; this.data.hidden = !0; warn('Barcodes are not supported'); } this.data.hasOwnCanvas = this.data.readOnly && !this.data.noHTML; this._hasText = !0; 'string' != typeof this.data.fieldValue && (this.data.fieldValue = ''); let i = getInheritableProperty({ dict: t, key: 'Q' }); (!Number.isInteger(i) || i < 0 || i > 2) && (i = null); this.data.textAlignment = i; let a = getInheritableProperty({ dict: t, key: 'MaxLen' }); (!Number.isInteger(a) || a < 0) && (a = 0); this.data.maxLen = a; this.data.multiLine = this.hasFieldFlag(sA); this.data.comb = this.hasFieldFlag(lA) && !this.hasFieldFlag(sA) && !this.hasFieldFlag(nA) && !this.hasFieldFlag(cA) && 0 !== this.data.maxLen; this.data.doNotScroll = this.hasFieldFlag(hA); } get hasTextContent() { return !!this.appearance && !this._needAppearances; } _getCombAppearance(e, t, i, a, r, s, n, o, g, c, C) { const h = r / this.data.maxLen, l = this.getBorderAndBackgroundAppearances(C), Q = [], E = t.getCharPositions(i); for (const [e, t] of E) Q.push(`(${escapeString(i.substring(e, t))}) Tj`); const u = Q.join(` ${numberToString(h)} 0 Td `); return ( `/Tx BMC q ${l}BT ` + e + ` 1 0 0 1 ${numberToString(n)} ${numberToString(o + g)} Tm ${u} ET Q EMC` ); } _getMultilineAppearance(e, t, i, a, r, s, n, o, g, c, C, h) { const l = [], Q = r - 2 * o, E = { shift: 0 }; for (let e = 0, s = t.length; e < s; e++) { const s = t[e], h = this._splitLine(s, i, a, Q); for (let t = 0, s = h.length; t < s; t++) { const s = h[t], Q = 0 === e && 0 === t ? -g - (C - c) : -C; l.push(this._renderText(s, i, a, r, n, E, o, Q)); } } const u = this.getBorderAndBackgroundAppearances(h), d = l.join('\n'); return ( `/Tx BMC q ${u}BT ` + e + ` 1 0 0 1 0 ${numberToString(s)} Tm ${d} ET Q EMC` ); } _splitLine(e, t, i, a, r = {}) { e = r.line || e; const s = r.glyphs || t.charsToGlyphs(e); if (s.length <= 1) return [e]; const n = r.positions || t.getCharPositions(e), o = i / 1e3, g = []; let c = -1, C = -1, h = -1, l = 0, Q = 0; for (let t = 0, i = s.length; t < i; t++) { const [i, r] = n[t], E = s[t], u = E.width * o; if (' ' === E.unicode) if (Q + u > a) { g.push(e.substring(l, i)); l = i; Q = u; c = -1; h = -1; } else { Q += u; c = i; C = r; h = t; } else if (Q + u > a) if (-1 !== c) { g.push(e.substring(l, C)); l = C; t = h + 1; c = -1; Q = 0; } else { g.push(e.substring(l, i)); l = i; Q = u; } else Q += u; } l < e.length && g.push(e.substring(l, e.length)); return g; } getFieldObject() { return { id: this.data.id, value: this.data.fieldValue, defaultValue: this.data.defaultFieldValue || '', multiline: this.data.multiLine, password: this.hasFieldFlag(nA), charLimit: this.data.maxLen, comb: this.data.comb, editable: !this.data.readOnly, hidden: this.data.hidden, name: this.data.fieldName, rect: this.data.rect, actions: this.data.actions, page: this.data.pageIndex, strokeColor: this.data.borderColor, fillColor: this.data.backgroundColor, rotation: this.rotation, type: 'text', }; } } class ButtonWidgetAnnotation extends WidgetAnnotation { constructor(e) { super(e); this.checkedAppearance = null; this.uncheckedAppearance = null; this.data.checkBox = !this.hasFieldFlag(oA) && !this.hasFieldFlag(gA); this.data.radioButton = this.hasFieldFlag(oA) && !this.hasFieldFlag(gA); this.data.pushButton = this.hasFieldFlag(gA); this.data.isTooltipOnly = !1; if (this.data.checkBox) this._processCheckBox(e); else if (this.data.radioButton) this._processRadioButton(e); else if (this.data.pushButton) { this.data.hasOwnCanvas = !0; this.data.noHTML = !1; this._processPushButton(e); } else warn('Invalid field flags for button widget annotation'); } async getOperatorList(e, t, i, r, s) { if (this.data.pushButton) return super.getOperatorList(e, t, i, !1, s); let n = null, o = null; if (s) { const e = s.get(this.data.id); n = e ? e.value : null; o = e ? e.rotation : null; } if (null === n && this.appearance) return super.getOperatorList(e, t, i, r, s); null == n && (n = this.data.checkBox ? this.data.fieldValue === this.data.exportValue : this.data.fieldValue === this.data.buttonValue); const g = n ? this.checkedAppearance : this.uncheckedAppearance; if (g) { const n = this.appearance, c = lookupMatrix(g.dict.getArray('Matrix'), a); o && g.dict.set('Matrix', this.getRotationMatrix(s)); this.appearance = g; const C = super.getOperatorList(e, t, i, r, s); this.appearance = n; g.dict.set('Matrix', c); return C; } return { opList: new OperatorList(), separateForm: !1, separateCanvas: !1 }; } async save(e, t, i) { return this.data.checkBox ? this._saveCheckbox(e, t, i) : this.data.radioButton ? this._saveRadioButton(e, t, i) : null; } async _saveCheckbox(e, t, i) { if (!i) return null; const a = i.get(this.data.id); let r = a?.rotation, s = a?.value; if (void 0 === r) { if (void 0 === s) return null; if ((this.data.fieldValue === this.data.exportValue) === s) return null; } const n = e.xref.fetchIfRef(this.ref); if (!(n instanceof Dict)) return null; void 0 === r && (r = this.rotation); void 0 === s && (s = this.data.fieldValue === this.data.exportValue); const o = { path: this.data.fieldName, value: s ? this.data.exportValue : '', }, g = Name.get(s ? this.data.exportValue : 'Off'); n.set('V', g); n.set('AS', g); n.set('M', `D:${getModificationDate()}`); const c = this._getMKDict(r); c && n.set('MK', c); const C = []; await writeObject(this.ref, n, C, e.xref); return [{ ref: this.ref, data: C.join(''), xfa: o }]; } async _saveRadioButton(e, t, i) { if (!i) return null; const a = i.get(this.data.id); let r = a?.rotation, s = a?.value; if (void 0 === r) { if (void 0 === s) return null; if ((this.data.fieldValue === this.data.buttonValue) === s) return null; } const n = e.xref.fetchIfRef(this.ref); if (!(n instanceof Dict)) return null; void 0 === s && (s = this.data.fieldValue === this.data.buttonValue); void 0 === r && (r = this.rotation); const o = { path: this.data.fieldName, value: s ? this.data.buttonValue : '', }, g = Name.get(s ? this.data.buttonValue : 'Off'), c = []; let C = null; if (s) if (this.parent instanceof Ref) { const t = e.xref.fetch(this.parent); t.set('V', g); await writeObject(this.parent, t, c, e.xref); C = c.join(''); c.length = 0; } else this.parent instanceof Dict && this.parent.set('V', g); n.set('AS', g); n.set('M', `D:${getModificationDate()}`); const h = this._getMKDict(r); h && n.set('MK', h); await writeObject(this.ref, n, c, e.xref); const l = [{ ref: this.ref, data: c.join(''), xfa: o }]; C && l.push({ ref: this.parent, data: C, xfa: null }); return l; } _getDefaultCheckedAppearance(e, t) { const i = this.data.rect[2] - this.data.rect[0], a = this.data.rect[3] - this.data.rect[1], r = [0, 0, i, a], s = 0.8 * Math.min(i, a); let n, o; if ('check' === t) { n = { width: 0.755 * s, height: 0.705 * s }; o = '3'; } else if ('disc' === t) { n = { width: 0.791 * s, height: 0.705 * s }; o = 'l'; } else unreachable(`_getDefaultCheckedAppearance - unsupported type: ${t}`); const g = `q BT /PdfJsZaDb ${s} Tf 0 g ${numberToString( (i - n.width) / 2, )} ${numberToString((a - n.height) / 2)} Td (${o}) Tj ET Q`, c = new Dict(e.xref); c.set('FormType', 1); c.set('Subtype', Name.get('Form')); c.set('Type', Name.get('XObject')); c.set('BBox', r); c.set('Matrix', [1, 0, 0, 1, 0, 0]); c.set('Length', g.length); const C = new Dict(e.xref), h = new Dict(e.xref); h.set('PdfJsZaDb', this.fallbackFontDict); C.set('Font', h); c.set('Resources', C); this.checkedAppearance = new StringStream(g); this.checkedAppearance.dict = c; this._streams.push(this.checkedAppearance); } _processCheckBox(e) { const t = e.dict.get('AP'); if (!(t instanceof Dict)) return; const i = t.get('N'); if (!(i instanceof Dict)) return; const a = this._decodeFormValue(e.dict.get('AS')); 'string' == typeof a && (this.data.fieldValue = a); const r = null !== this.data.fieldValue && 'Off' !== this.data.fieldValue ? this.data.fieldValue : 'Yes', s = i.getKeys(); if (0 === s.length) s.push('Off', r); else if (1 === s.length) 'Off' === s[0] ? s.push(r) : s.unshift('Off'); else if (s.includes(r)) { s.length = 0; s.push('Off', r); } else { const e = s.find((e) => 'Off' !== e); s.length = 0; s.push('Off', e); } s.includes(this.data.fieldValue) || (this.data.fieldValue = 'Off'); this.data.exportValue = s[1]; const n = i.get(this.data.exportValue); this.checkedAppearance = n instanceof BaseStream ? n : null; const o = i.get('Off'); this.uncheckedAppearance = o instanceof BaseStream ? o : null; this.checkedAppearance ? this._streams.push(this.checkedAppearance) : this._getDefaultCheckedAppearance(e, 'check'); this.uncheckedAppearance && this._streams.push(this.uncheckedAppearance); this._fallbackFontDict = this.fallbackFontDict; null === this.data.defaultFieldValue && (this.data.defaultFieldValue = 'Off'); } _processRadioButton(e) { this.data.buttonValue = null; const t = e.dict.get('Parent'); if (t instanceof Dict) { this.parent = e.dict.getRaw('Parent'); const i = t.get('V'); i instanceof Name && (this.data.fieldValue = this._decodeFormValue(i)); } const i = e.dict.get('AP'); if (!(i instanceof Dict)) return; const a = i.get('N'); if (!(a instanceof Dict)) return; for (const e of a.getKeys()) if ('Off' !== e) { this.data.buttonValue = this._decodeFormValue(e); break; } const r = a.get(this.data.buttonValue); this.checkedAppearance = r instanceof BaseStream ? r : null; const s = a.get('Off'); this.uncheckedAppearance = s instanceof BaseStream ? s : null; this.checkedAppearance ? this._streams.push(this.checkedAppearance) : this._getDefaultCheckedAppearance(e, 'disc'); this.uncheckedAppearance && this._streams.push(this.uncheckedAppearance); this._fallbackFontDict = this.fallbackFontDict; null === this.data.defaultFieldValue && (this.data.defaultFieldValue = 'Off'); } _processPushButton(e) { const { dict: t, annotationGlobals: i } = e; if (t.has('A') || t.has('AA') || this.data.alternativeText) { this.data.isTooltipOnly = !t.has('A') && !t.has('AA'); Catalog.parseDestDictionary({ destDict: t, resultObj: this.data, docBaseUrl: i.baseUrl, docAttachments: i.attachments, }); } else warn('Push buttons without action dictionaries are not supported'); } getFieldObject() { let e, t = 'button'; if (this.data.checkBox) { t = 'checkbox'; e = this.data.exportValue; } else if (this.data.radioButton) { t = 'radiobutton'; e = this.data.buttonValue; } return { id: this.data.id, value: this.data.fieldValue || 'Off', defaultValue: this.data.defaultFieldValue, exportValues: e, editable: !this.data.readOnly, name: this.data.fieldName, rect: this.data.rect, hidden: this.data.hidden, actions: this.data.actions, page: this.data.pageIndex, strokeColor: this.data.borderColor, fillColor: this.data.backgroundColor, rotation: this.rotation, type: t, }; } get fallbackFontDict() { const e = new Dict(); e.set('BaseFont', Name.get('ZapfDingbats')); e.set('Type', Name.get('FallbackType')); e.set('Subtype', Name.get('FallbackType')); e.set('Encoding', Name.get('ZapfDingbatsEncoding')); return shadow(this, 'fallbackFontDict', e); } } class ChoiceWidgetAnnotation extends WidgetAnnotation { constructor(e) { super(e); const { dict: t, xref: i } = e; this.indices = t.getArray('I'); this.hasIndices = Array.isArray(this.indices) && this.indices.length > 0; this.data.options = []; const a = getInheritableProperty({ dict: t, key: 'Opt' }); if (Array.isArray(a)) for (let e = 0, t = a.length; e < t; e++) { const t = i.fetchIfRef(a[e]), r = Array.isArray(t); this.data.options[e] = { exportValue: this._decodeFormValue(r ? i.fetchIfRef(t[0]) : t), displayValue: this._decodeFormValue(r ? i.fetchIfRef(t[1]) : t), }; } if (this.hasIndices) { this.data.fieldValue = []; const e = this.data.options.length; for (const t of this.indices) Number.isInteger(t) && t >= 0 && t < e && this.data.fieldValue.push(this.data.options[t].exportValue); } else 'string' == typeof this.data.fieldValue ? (this.data.fieldValue = [this.data.fieldValue]) : this.data.fieldValue || (this.data.fieldValue = []); this.data.combo = this.hasFieldFlag(IA); this.data.multiSelect = this.hasFieldFlag(CA); this._hasText = !0; } getFieldObject() { const e = this.data.combo ? 'combobox' : 'listbox', t = this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null; return { id: this.data.id, value: t, defaultValue: this.data.defaultFieldValue, editable: !this.data.readOnly, name: this.data.fieldName, rect: this.data.rect, numItems: this.data.fieldValue.length, multipleSelection: this.data.multiSelect, hidden: this.data.hidden, actions: this.data.actions, items: this.data.options, page: this.data.pageIndex, strokeColor: this.data.borderColor, fillColor: this.data.backgroundColor, rotation: this.rotation, type: e, }; } amendSavedDict(e, t) { if (!this.hasIndices) return; let i = e?.get(this.data.id)?.value; Array.isArray(i) || (i = [i]); const a = [], { options: r } = this.data; for (let e = 0, t = 0, s = r.length; e < s; e++) if (r[e].exportValue === i[t]) { a.push(e); t += 1; } t.set('I', a); } async _getAppearance(e, t, i, a) { if (this.data.combo) return super._getAppearance(e, t, i, a); let r, n; const o = a?.get(this.data.id); if (o) { n = o.rotation; r = o.value; } if (void 0 === n && void 0 === r && !this._needAppearances) return null; void 0 === r ? (r = this.data.fieldValue) : Array.isArray(r) || (r = [r]); let g = this.data.rect[3] - this.data.rect[1], c = this.data.rect[2] - this.data.rect[0]; (90 !== n && 270 !== n) || ([c, g] = [g, c]); const C = this.data.options.length, h = []; for (let e = 0; e < C; e++) { const { exportValue: t } = this.data.options[e]; r.includes(t) && h.push(e); } this._defaultAppearance || (this.data.defaultAppearanceData = parseDefaultAppearance( (this._defaultAppearance = '/Helvetica 0 Tf 0 g'), )); const l = await WidgetAnnotation._getFontData( e, t, this.data.defaultAppearanceData, this._fieldResources.mergedResources, ); let Q, { fontSize: E } = this.data.defaultAppearanceData; if (E) Q = this._defaultAppearance; else { const e = (g - 1) / C; let t, i = -1; for (const { displayValue: e } of this.data.options) { const a = this._getTextWidth(e, l); if (a > i) { i = a; t = e; } } [Q, E] = this._computeFontSize(e, c - 4, t, l, -1); } const u = E * s, d = (u - E) / 2, f = Math.floor(g / u); let p = 0; if (h.length > 0) { const e = Math.min(...h), t = Math.max(...h); p = Math.max(0, t - f + 1); p > e && (p = e); } const m = Math.min(p + f + 1, C), y = ['/Tx BMC q', `1 1 ${c} ${g} re W n`]; if (h.length) { y.push('0.600006 0.756866 0.854904 rg'); for (const e of h) p <= e && e < m && y.push(`1 ${g - (e - p + 1) * u} ${c} ${u} re f`); } y.push('BT', Q, `1 0 0 1 0 ${g} Tm`); const w = { shift: 0 }; for (let e = p; e < m; e++) { const { displayValue: t } = this.data.options[e], i = e === p ? d : 0; y.push(this._renderText(t, l, E, c, 0, w, 2, -u + i)); } y.push('ET Q EMC'); return y.join('\n'); } } class SignatureWidgetAnnotation extends WidgetAnnotation { constructor(e) { super(e); this.data.fieldValue = null; this.data.hasOwnCanvas = this.data.noRotate; this.data.noHTML = !this.data.hasOwnCanvas; } getFieldObject() { return { id: this.data.id, value: null, page: this.data.pageIndex, type: 'signature', }; } } class TextAnnotation extends MarkupAnnotation { constructor(e) { super(e); this.data.noRotate = !0; this.data.hasOwnCanvas = this.data.noRotate; this.data.noHTML = !1; const { dict: t } = e; this.data.annotationType = R; if (this.data.hasAppearance) this.data.name = 'NoIcon'; else { this.data.rect[1] = this.data.rect[3] - 22; this.data.rect[2] = this.data.rect[0] + 22; this.data.name = t.has('Name') ? t.get('Name').name : 'Note'; } if (t.has('State')) { this.data.state = t.get('State') || null; this.data.stateModel = t.get('StateModel') || null; } else { this.data.state = null; this.data.stateModel = null; } } } class LinkAnnotation extends Annotation { constructor(e) { super(e); const { dict: t, annotationGlobals: i } = e; this.data.annotationType = N; this.data.noHTML = !1; const a = getQuadPoints(t, this.rectangle); a && (this.data.quadPoints = a); this.data.borderColor ||= this.data.color; Catalog.parseDestDictionary({ destDict: t, resultObj: this.data, docBaseUrl: i.baseUrl, docAttachments: i.attachments, }); } } class PopupAnnotation extends Annotation { constructor(e) { super(e); const { dict: t } = e; this.data.annotationType = W; this.data.noHTML = !1; (this.data.rect[0] !== this.data.rect[2] && this.data.rect[1] !== this.data.rect[3]) || (this.data.rect = null); let i = t.get('Parent'); if (!i) { warn('Popup annotation has a missing or invalid parent annotation.'); return; } this.data.parentRect = lookupNormalRect(i.getArray('Rect'), null); isName(i.get('RT'), Z) && (i = i.get('IRT')); if (i.has('M')) { this.setModificationDate(i.get('M')); this.data.modificationDate = this.modificationDate; } else this.data.modificationDate = null; if (i.has('C')) { this.setColor(i.getArray('C')); this.data.color = this.color; } else this.data.color = null; if (!this.viewable) { const e = i.get('F'); this._isViewable(e) && this.setFlags(e); } this.setTitle(i.get('T')); this.data.titleObj = this._title; this.setContents(i.get('Contents')); this.data.contentsObj = this._contents; i.has('RC') && (this.data.richText = XFAFactory.getRichTextAsHtml(i.get('RC'))); this.data.open = !!t.get('Open'); } } class FreeTextAnnotation extends MarkupAnnotation { constructor(e) { super(e); this.data.hasOwnCanvas = !this.data.noHTML; this.data.noHTML = !1; const { evaluatorOptions: t, xref: i } = e; this.data.annotationType = G; this.setDefaultAppearance(e); this._hasAppearance = !!this.appearance; if (this._hasAppearance) { const { fontColor: e, fontSize: a } = (function parseAppearanceStream( e, t, i, ) { return new AppearanceStreamEvaluator(e, t, i).parse(); })(this.appearance, t, i); this.data.defaultAppearanceData.fontColor = e; this.data.defaultAppearanceData.fontSize = a || 10; } else { this.data.defaultAppearanceData.fontSize ||= 10; const { fontColor: t, fontSize: a } = this.data.defaultAppearanceData; if (this._contents.str) { this.data.textContent = this._contents.str .split(/\r\n?|\n/) .map((e) => e.trimEnd()); const { coords: e, bbox: t, matrix: i, } = FakeUnicodeFont.getFirstPositionInfo( this.rectangle, this.rotation, a, ); this.data.textPosition = this._transformPoint(e, t, i); } if (this._isOffscreenCanvasSupported) { const r = e.dict.get('CA'), s = new FakeUnicodeFont(i, 'sans-serif'); this.appearance = s.createAppearance( this._contents.str, this.rectangle, this.rotation, a, t, r, ); this._streams.push(this.appearance); } else warn( 'FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.', ); } } get hasTextContent() { return this._hasAppearance; } static createNewDict(e, t, { apRef: i, ap: a }) { const { color: r, fontSize: s, rect: n, rotation: o, user: g, value: c, } = e, C = new Dict(t); C.set('Type', Name.get('Annot')); C.set('Subtype', Name.get('FreeText')); C.set('CreationDate', `D:${getModificationDate()}`); C.set('Rect', n); const h = `/Helv ${s} Tf ${getPdfColor(r, !0)}`; C.set('DA', h); C.set('Contents', isAscii(c) ? c : stringToUTF16String(c, !0)); C.set('F', 4); C.set('Border', [0, 0, 0]); C.set('Rotate', o); g && C.set('T', isAscii(g) ? g : stringToUTF16String(g, !0)); if (i || a) { const e = new Dict(t); C.set('AP', e); i ? e.set('N', i) : e.set('N', a); } return C; } static async createNewAppearanceStream(e, t, i) { const { baseFontRef: a, evaluator: r, task: n } = i, { color: o, fontSize: g, rect: c, rotation: C, value: h } = e, l = new Dict(t), Q = new Dict(t); if (a) Q.set('Helv', a); else { const e = new Dict(t); e.set('BaseFont', Name.get('Helvetica')); e.set('Type', Name.get('Font')); e.set('Subtype', Name.get('Type1')); e.set('Encoding', Name.get('WinAnsiEncoding')); Q.set('Helv', e); } l.set('Font', Q); const E = await WidgetAnnotation._getFontData( r, n, { fontName: 'Helv', fontSize: g }, l, ), [u, d, f, p] = c; let m = f - u, y = p - d; C % 180 != 0 && ([m, y] = [y, m]); const w = h.split('\n'), b = g / 1e3; let D = -1 / 0; const S = []; for (let e of w) { const t = E.encodeString(e); if (t.length > 1) return null; e = t.join(''); S.push(e); let i = 0; const a = E.charsToGlyphs(e); for (const e of a) i += e.width * b; D = Math.max(D, i); } let k = 1; D > m && (k = m / D); let R = 1; const N = s * g, G = 1 * g, x = N * w.length; x > y && (R = y / x); const U = g * Math.min(k, R); let M, L, H; switch (C) { case 0: H = [1, 0, 0, 1]; L = [c[0], c[1], m, y]; M = [c[0], c[3] - G]; break; case 90: H = [0, 1, -1, 0]; L = [c[1], -c[2], m, y]; M = [c[1], -c[0] - G]; break; case 180: H = [-1, 0, 0, -1]; L = [-c[2], -c[3], m, y]; M = [-c[2], -c[1] - G]; break; case 270: H = [0, -1, 1, 0]; L = [-c[3], c[0], m, y]; M = [-c[3], c[2] - G]; } const J = [ 'q', `${H.join(' ')} 0 0 cm`, `${L.join(' ')} re W n`, 'BT', `${getPdfColor(o, !0)}`, `0 Tc /Helv ${numberToString(U)} Tf`, ]; J.push(`${M.join(' ')} Td (${escapeString(S[0])}) Tj`); const Y = numberToString(N); for (let e = 1, t = S.length; e < t; e++) { const t = S[e]; J.push(`0 -${Y} Td (${escapeString(t)}) Tj`); } J.push('ET', 'Q'); const v = J.join('\n'), T = new Dict(t); T.set('FormType', 1); T.set('Subtype', Name.get('Form')); T.set('Type', Name.get('XObject')); T.set('BBox', c); T.set('Resources', l); T.set('Matrix', [1, 0, 0, 1, -c[0], -c[1]]); const K = new StringStream(v); K.dict = T; return K; } } class LineAnnotation extends MarkupAnnotation { constructor(e) { super(e); const { dict: t, xref: i } = e; this.data.annotationType = x; this.data.hasOwnCanvas = this.data.noRotate; this.data.noHTML = !1; const a = lookupRect(t.getArray('L'), [0, 0, 0, 0]); this.data.lineCoordinates = Util.normalizeRect(a); this.setLineEndings(t.getArray('LE')); this.data.lineEndings = this.lineEndings; if (!this.appearance) { const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], r = t.get('CA'), s = getRgbColor(t.getArray('IC'), null), n = s ? getPdfColorArray(s) : null, o = n ? r : null, g = this.borderStyle.width || 1, c = 2 * g, C = [ this.data.lineCoordinates[0] - c, this.data.lineCoordinates[1] - c, this.data.lineCoordinates[2] + c, this.data.lineCoordinates[3] + c, ]; Util.intersect(this.rectangle, C) || (this.rectangle = C); this._setDefaultAppearance({ xref: i, extra: `${g} w`, strokeColor: e, fillColor: n, strokeAlpha: r, fillAlpha: o, pointsCallback: (e, t) => { e.push(`${a[0]} ${a[1]} m`, `${a[2]} ${a[3]} l`, 'S'); return [t[0] - g, t[2] + g, t[7] - g, t[3] + g]; }, }); } } } class SquareAnnotation extends MarkupAnnotation { constructor(e) { super(e); const { dict: t, xref: i } = e; this.data.annotationType = U; this.data.hasOwnCanvas = this.data.noRotate; this.data.noHTML = !1; if (!this.appearance) { const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], a = t.get('CA'), r = getRgbColor(t.getArray('IC'), null), s = r ? getPdfColorArray(r) : null, n = s ? a : null; if (0 === this.borderStyle.width && !s) return; this._setDefaultAppearance({ xref: i, extra: `${this.borderStyle.width} w`, strokeColor: e, fillColor: s, strokeAlpha: a, fillAlpha: n, pointsCallback: (e, t) => { const i = t[4] + this.borderStyle.width / 2, a = t[5] + this.borderStyle.width / 2, r = t[6] - t[4] - this.borderStyle.width, n = t[3] - t[7] - this.borderStyle.width; e.push(`${i} ${a} ${r} ${n} re`); s ? e.push('B') : e.push('S'); return [t[0], t[2], t[7], t[3]]; }, }); } } } class CircleAnnotation extends MarkupAnnotation { constructor(e) { super(e); const { dict: t, xref: i } = e; this.data.annotationType = M; if (!this.appearance) { const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], a = t.get('CA'), r = getRgbColor(t.getArray('IC'), null), s = r ? getPdfColorArray(r) : null, n = s ? a : null; if (0 === this.borderStyle.width && !s) return; const o = (4 / 3) * Math.tan(Math.PI / 8); this._setDefaultAppearance({ xref: i, extra: `${this.borderStyle.width} w`, strokeColor: e, fillColor: s, strokeAlpha: a, fillAlpha: n, pointsCallback: (e, t) => { const i = t[0] + this.borderStyle.width / 2, a = t[1] - this.borderStyle.width / 2, r = t[6] - this.borderStyle.width / 2, n = t[7] + this.borderStyle.width / 2, g = i + (r - i) / 2, c = a + (n - a) / 2, C = ((r - i) / 2) * o, h = ((n - a) / 2) * o; e.push( `${g} ${n} m`, `${g + C} ${n} ${r} ${c + h} ${r} ${c} c`, `${r} ${c - h} ${g + C} ${a} ${g} ${a} c`, `${g - C} ${a} ${i} ${c - h} ${i} ${c} c`, `${i} ${c + h} ${g - C} ${n} ${g} ${n} c`, 'h', ); s ? e.push('B') : e.push('S'); return [t[0], t[2], t[7], t[3]]; }, }); } } } class PolylineAnnotation extends MarkupAnnotation { constructor(e) { super(e); const { dict: t, xref: i } = e; this.data.annotationType = H; this.data.hasOwnCanvas = this.data.noRotate; this.data.noHTML = !1; this.data.vertices = null; if (!(this instanceof PolygonAnnotation)) { this.setLineEndings(t.getArray('LE')); this.data.lineEndings = this.lineEndings; } const a = t.getArray('Vertices'); if (!isNumberArray(a, null)) return; const r = (this.data.vertices = Float32Array.from(a)); if (!this.appearance) { const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], a = t.get('CA'), s = this.borderStyle.width || 1, n = 2 * s, o = [1 / 0, 1 / 0, -1 / 0, -1 / 0]; for (let e = 0, t = r.length; e < t; e += 2) { o[0] = Math.min(o[0], r[e] - n); o[1] = Math.min(o[1], r[e + 1] - n); o[2] = Math.max(o[2], r[e] + n); o[3] = Math.max(o[3], r[e + 1] + n); } Util.intersect(this.rectangle, o) || (this.rectangle = o); this._setDefaultAppearance({ xref: i, extra: `${s} w`, strokeColor: e, strokeAlpha: a, pointsCallback: (e, t) => { for (let t = 0, i = r.length; t < i; t += 2) e.push(`${r[t]} ${r[t + 1]} ${0 === t ? 'm' : 'l'}`); e.push('S'); return [t[0], t[2], t[7], t[3]]; }, }); } } } class PolygonAnnotation extends PolylineAnnotation { constructor(e) { super(e); this.data.annotationType = L; } } class CaretAnnotation extends MarkupAnnotation { constructor(e) { super(e); this.data.annotationType = q; } } class InkAnnotation extends MarkupAnnotation { constructor(e) { super(e); this.data.hasOwnCanvas = this.data.noRotate; this.data.noHTML = !1; const { dict: t, xref: i } = e; this.data.annotationType = O; this.data.inkLists = []; const a = t.getArray('InkList'); if (Array.isArray(a)) { for (let e = 0, t = a.length; e < t; ++e) { if (!Array.isArray(a[e])) continue; const t = new Float32Array(a[e].length); this.data.inkLists.push(t); for (let r = 0, s = a[e].length; r < s; r += 2) { const s = i.fetchIfRef(a[e][r]), n = i.fetchIfRef(a[e][r + 1]); if ('number' == typeof s && 'number' == typeof n) { t[r] = s; t[r + 1] = n; } } } if (!this.appearance) { const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], a = t.get('CA'), r = this.borderStyle.width || 1, s = 2 * r, n = [1 / 0, 1 / 0, -1 / 0, -1 / 0]; for (const e of this.data.inkLists) for (let t = 0, i = e.length; t < i; t += 2) { n[0] = Math.min(n[0], e[t] - s); n[1] = Math.min(n[1], e[t + 1] - s); n[2] = Math.max(n[2], e[t] + s); n[3] = Math.max(n[3], e[t + 1] + s); } Util.intersect(this.rectangle, n) || (this.rectangle = n); this._setDefaultAppearance({ xref: i, extra: `${r} w`, strokeColor: e, strokeAlpha: a, pointsCallback: (e, t) => { for (const t of this.data.inkLists) { for (let i = 0, a = t.length; i < a; i += 2) e.push(`${t[i]} ${t[i + 1]} ${0 === i ? 'm' : 'l'}`); e.push('S'); } return [t[0], t[2], t[7], t[3]]; }, }); } } } static createNewDict(e, t, { apRef: i, ap: a }) { const { color: r, opacity: s, paths: n, outlines: o, rect: g, rotation: c, thickness: C, } = e, h = new Dict(t); h.set('Type', Name.get('Annot')); h.set('Subtype', Name.get('Ink')); h.set('CreationDate', `D:${getModificationDate()}`); h.set('Rect', g); h.set('InkList', o?.points || n.map((e) => e.points)); h.set('F', 4); h.set('Rotate', c); o && h.set('IT', Name.get('InkHighlight')); const l = new Dict(t); h.set('BS', l); l.set('W', C); h.set( 'C', Array.from(r, (e) => e / 255), ); h.set('CA', s); const Q = new Dict(t); h.set('AP', Q); i ? Q.set('N', i) : Q.set('N', a); return h; } static async createNewAppearanceStream(e, t, i) { if (e.outlines) return this.createNewAppearanceStreamForHighlight(e, t, i); const { color: a, rect: r, paths: s, thickness: n, opacity: o } = e, g = [`${n} w 1 J 1 j`, `${getPdfColor(a, !1)}`]; 1 !== o && g.push('/R0 gs'); const c = []; for (const { bezier: e } of s) { c.length = 0; c.push(`${numberToString(e[0])} ${numberToString(e[1])} m`); if (2 === e.length) c.push(`${numberToString(e[0])} ${numberToString(e[1])} l S`); else { for (let t = 2, i = e.length; t < i; t += 6) { const i = e .slice(t, t + 6) .map(numberToString) .join(' '); c.push(`${i} c`); } c.push('S'); } g.push(c.join('\n')); } const C = g.join('\n'), h = new Dict(t); h.set('FormType', 1); h.set('Subtype', Name.get('Form')); h.set('Type', Name.get('XObject')); h.set('BBox', r); h.set('Length', C.length); if (1 !== o) { const e = new Dict(t), i = new Dict(t), a = new Dict(t); a.set('CA', o); a.set('Type', Name.get('ExtGState')); i.set('R0', a); e.set('ExtGState', i); h.set('Resources', e); } const l = new StringStream(C); l.dict = h; return l; } static async createNewAppearanceStreamForHighlight(e, t, i) { const { color: a, rect: r, outlines: { outline: s }, opacity: n, } = e, o = [`${getPdfColor(a, !0)}`, '/R0 gs']; o.push(`${numberToString(s[4])} ${numberToString(s[5])} m`); for (let e = 6, t = s.length; e < t; e += 6) if (isNaN(s[e]) || null === s[e]) o.push(`${numberToString(s[e + 4])} ${numberToString(s[e + 5])} l`); else { const t = s .slice(e, e + 6) .map(numberToString) .join(' '); o.push(`${t} c`); } o.push('h f'); const g = o.join('\n'), c = new Dict(t); c.set('FormType', 1); c.set('Subtype', Name.get('Form')); c.set('Type', Name.get('XObject')); c.set('BBox', r); c.set('Length', g.length); const C = new Dict(t), h = new Dict(t); C.set('ExtGState', h); c.set('Resources', C); const l = new Dict(t); h.set('R0', l); l.set('BM', Name.get('Multiply')); if (1 !== n) { l.set('ca', n); l.set('Type', Name.get('ExtGState')); } const Q = new StringStream(g); Q.dict = c; return Q; } } class HighlightAnnotation extends MarkupAnnotation { constructor(e) { super(e); const { dict: t, xref: i } = e; this.data.annotationType = J; if ((this.data.quadPoints = getQuadPoints(t, null))) { const e = this.appearance?.dict.get('Resources'); if (!this.appearance || !e?.has('ExtGState')) { this.appearance && warn('HighlightAnnotation - ignoring built-in appearance stream.'); const e = this.color ? getPdfColorArray(this.color) : [1, 1, 0], a = t.get('CA'); this._setDefaultAppearance({ xref: i, fillColor: e, blendMode: 'Multiply', fillAlpha: a, pointsCallback: (e, t) => { e.push( `${t[0]} ${t[1]} m`, `${t[2]} ${t[3]} l`, `${t[6]} ${t[7]} l`, `${t[4]} ${t[5]} l`, 'f', ); return [t[0], t[2], t[7], t[3]]; }, }); } } else this.data.popupRef = null; } static createNewDict(e, t, { apRef: i, ap: a }) { const { color: r, opacity: s, rect: n, rotation: o, user: g, quadPoints: c, } = e, C = new Dict(t); C.set('Type', Name.get('Annot')); C.set('Subtype', Name.get('Highlight')); C.set('CreationDate', `D:${getModificationDate()}`); C.set('Rect', n); C.set('F', 4); C.set('Border', [0, 0, 0]); C.set('Rotate', o); C.set('QuadPoints', c); C.set( 'C', Array.from(r, (e) => e / 255), ); C.set('CA', s); g && C.set('T', isAscii(g) ? g : stringToUTF16String(g, !0)); if (i || a) { const e = new Dict(t); C.set('AP', e); e.set('N', i || a); } return C; } static async createNewAppearanceStream(e, t, i) { const { color: a, rect: r, outlines: s, opacity: n } = e, o = [`${getPdfColor(a, !0)}`, '/R0 gs'], g = []; for (const e of s) { g.length = 0; g.push(`${numberToString(e[0])} ${numberToString(e[1])} m`); for (let t = 2, i = e.length; t < i; t += 2) g.push(`${numberToString(e[t])} ${numberToString(e[t + 1])} l`); g.push('h'); o.push(g.join('\n')); } o.push('f*'); const c = o.join('\n'), C = new Dict(t); C.set('FormType', 1); C.set('Subtype', Name.get('Form')); C.set('Type', Name.get('XObject')); C.set('BBox', r); C.set('Length', c.length); const h = new Dict(t), l = new Dict(t); h.set('ExtGState', l); C.set('Resources', h); const Q = new Dict(t); l.set('R0', Q); Q.set('BM', Name.get('Multiply')); if (1 !== n) { Q.set('ca', n); Q.set('Type', Name.get('ExtGState')); } const E = new StringStream(c); E.dict = C; return E; } } class UnderlineAnnotation extends MarkupAnnotation { constructor(e) { super(e); const { dict: t, xref: i } = e; this.data.annotationType = Y; if ((this.data.quadPoints = getQuadPoints(t, null))) { if (!this.appearance) { const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], a = t.get('CA'); this._setDefaultAppearance({ xref: i, extra: '[] 0 d 0.571 w', strokeColor: e, strokeAlpha: a, pointsCallback: (e, t) => { e.push(`${t[4]} ${t[5] + 1.3} m`, `${t[6]} ${t[7] + 1.3} l`, 'S'); return [t[0], t[2], t[7], t[3]]; }, }); } } else this.data.popupRef = null; } } class SquigglyAnnotation extends MarkupAnnotation { constructor(e) { super(e); const { dict: t, xref: i } = e; this.data.annotationType = v; if ((this.data.quadPoints = getQuadPoints(t, null))) { if (!this.appearance) { const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], a = t.get('CA'); this._setDefaultAppearance({ xref: i, extra: '[] 0 d 1 w', strokeColor: e, strokeAlpha: a, pointsCallback: (e, t) => { const i = (t[1] - t[5]) / 6; let a = i, r = t[4]; const s = t[5], n = t[6]; e.push(`${r} ${s + a} m`); do { r += 2; a = 0 === a ? i : 0; e.push(`${r} ${s + a} l`); } while (r < n); e.push('S'); return [t[4], n, s - 2 * i, s + 2 * i]; }, }); } } else this.data.popupRef = null; } } class StrikeOutAnnotation extends MarkupAnnotation { constructor(e) { super(e); const { dict: t, xref: i } = e; this.data.annotationType = T; if ((this.data.quadPoints = getQuadPoints(t, null))) { if (!this.appearance) { const e = this.color ? getPdfColorArray(this.color) : [0, 0, 0], a = t.get('CA'); this._setDefaultAppearance({ xref: i, extra: '[] 0 d 1 w', strokeColor: e, strokeAlpha: a, pointsCallback: (e, t) => { e.push( (t[0] + t[4]) / 2 + ' ' + (t[1] + t[5]) / 2 + ' m', (t[2] + t[6]) / 2 + ' ' + (t[3] + t[7]) / 2 + ' l', 'S', ); return [t[0], t[2], t[7], t[3]]; }, }); } } else this.data.popupRef = null; } } class StampAnnotation extends MarkupAnnotation { constructor(e) { super(e); this.data.annotationType = K; this.data.hasOwnCanvas = this.data.noRotate; this.data.noHTML = !1; } static async createImage(e, t) { const { width: i, height: a } = e, r = new OffscreenCanvas(i, a), s = r.getContext('2d', { alpha: !0 }); s.drawImage(e, 0, 0); const n = s.getImageData(0, 0, i, a).data, o = new Uint32Array(n.buffer), g = o.some( FeatureTest.isLittleEndian ? (e) => e >>> 24 != 255 : (e) => 255 != (255 & e), ); if (g) { s.fillStyle = 'white'; s.fillRect(0, 0, i, a); s.drawImage(e, 0, 0); } const c = r .convertToBlob({ type: 'image/jpeg', quality: 1 }) .then((e) => e.arrayBuffer()), C = Name.get('XObject'), h = Name.get('Image'), l = new Dict(t); l.set('Type', C); l.set('Subtype', h); l.set('BitsPerComponent', 8); l.set('ColorSpace', Name.get('DeviceRGB')); l.set('Filter', Name.get('DCTDecode')); l.set('BBox', [0, 0, i, a]); l.set('Width', i); l.set('Height', a); let Q = null; if (g) { const e = new Uint8Array(o.length); if (FeatureTest.isLittleEndian) for (let t = 0, i = o.length; t < i; t++) e[t] = o[t] >>> 24; else for (let t = 0, i = o.length; t < i; t++) e[t] = 255 & o[t]; const r = new Dict(t); r.set('Type', C); r.set('Subtype', h); r.set('BitsPerComponent', 8); r.set('ColorSpace', Name.get('DeviceGray')); r.set('Width', i); r.set('Height', a); Q = new Stream(e, 0, 0, r); } return { imageStream: new Stream(await c, 0, 0, l), smaskStream: Q, width: i, height: a, }; } static createNewDict(e, t, { apRef: i, ap: a }) { const { rect: r, rotation: s, user: n } = e, o = new Dict(t); o.set('Type', Name.get('Annot')); o.set('Subtype', Name.get('Stamp')); o.set('CreationDate', `D:${getModificationDate()}`); o.set('Rect', r); o.set('F', 4); o.set('Border', [0, 0, 0]); o.set('Rotate', s); n && o.set('T', isAscii(n) ? n : stringToUTF16String(n, !0)); if (i || a) { const e = new Dict(t); o.set('AP', e); i ? e.set('N', i) : e.set('N', a); } return o; } static async createNewAppearanceStream(e, t, i) { const { rotation: a } = e, { imageRef: r, width: s, height: n } = i.image, o = new Dict(t), g = new Dict(t); o.set('XObject', g); g.set('Im0', r); const c = `q ${s} 0 0 ${n} 0 0 cm /Im0 Do Q`, C = new Dict(t); C.set('FormType', 1); C.set('Subtype', Name.get('Form')); C.set('Type', Name.get('XObject')); C.set('BBox', [0, 0, s, n]); C.set('Resources', o); if (a) { const e = getRotationMatrix(a, s, n); C.set('Matrix', e); } const h = new StringStream(c); h.dict = C; return h; } } class FileAttachmentAnnotation extends MarkupAnnotation { constructor(e) { super(e); const { dict: t, xref: i } = e, a = new FileSpec(t.get('FS'), i); this.data.annotationType = j; this.data.hasOwnCanvas = this.data.noRotate; this.data.noHTML = !1; this.data.file = a.serializable; const r = t.get('Name'); this.data.name = r instanceof Name ? stringToPDFString(r.name) : 'PushPin'; const s = t.get('ca'); this.data.fillAlpha = 'number' == typeof s && s >= 0 && s <= 1 ? s : null; } } function decodeString(e) { try { return stringToUTF8String(e); } catch (t) { warn(`UTF-8 decoding failed: "${t}".`); return e; } } class DatasetXMLParser extends SimpleXMLParser { constructor(e) { super(e); this.node = null; } onEndElement(e) { const t = super.onEndElement(e); if (t && 'xfa:datasets' === e) { this.node = t; throw new Error('Aborting DatasetXMLParser.'); } } } class DatasetReader { constructor(e) { if (e.datasets) this.node = new SimpleXMLParser({ hasAttributes: !0 }).parseFromString( e.datasets, ).documentElement; else { const t = new DatasetXMLParser({ hasAttributes: !0 }); try { t.parseFromString(e['xdp:xdp']); } catch {} this.node = t.node; } } getValue(e) { if (!this.node || !e) return ''; const t = this.node.searchNode(parseXFAPath(e), 0); if (!t) return ''; const i = t.firstChild; return 'value' === i?.nodeName ? t.children.map((e) => decodeString(e.textContent)) : decodeString(t.textContent); } } class XRef { #T = null; constructor(e, t) { this.stream = e; this.pdfManager = t; this.entries = []; this._xrefStms = new Set(); this._cacheMap = new Map(); this._pendingRefs = new RefSet(); this._newPersistentRefNum = null; this._newTemporaryRefNum = null; this._persistentRefsCache = null; } getNewPersistentRef(e) { null === this._newPersistentRefNum && (this._newPersistentRefNum = this.entries.length || 1); const t = this._newPersistentRefNum++; this._cacheMap.set(t, e); return Ref.get(t, 0); } getNewTemporaryRef() { if (null === this._newTemporaryRefNum) { this._newTemporaryRefNum = this.entries.length || 1; if (this._newPersistentRefNum) { this._persistentRefsCache = new Map(); for ( let e = this._newTemporaryRefNum; e < this._newPersistentRefNum; e++ ) { this._persistentRefsCache.set(e, this._cacheMap.get(e)); this._cacheMap.delete(e); } } } return Ref.get(this._newTemporaryRefNum++, 0); } resetNewTemporaryRef() { this._newTemporaryRefNum = null; if (this._persistentRefsCache) for (const [e, t] of this._persistentRefsCache) this._cacheMap.set(e, t); this._persistentRefsCache = null; } setStartXRef(e) { this.startXRefQueue = [e]; } parse(e = !1) { let t, i, a; if (e) { warn('Indexing all PDF objects'); t = this.indexObjects(); } else t = this.readXRef(); t.assignXref(this); this.trailer = t; try { i = t.get('Encrypt'); } catch (e) { if (e instanceof MissingDataException) throw e; warn(`XRef.parse - Invalid "Encrypt" reference: "${e}".`); } if (i instanceof Dict) { const e = t.get('ID'), a = e?.length ? e[0] : ''; i.suppressEncryption = !0; this.encrypt = new CipherTransformFactory(i, a, this.pdfManager.password); } try { a = t.get('Root'); } catch (e) { if (e instanceof MissingDataException) throw e; warn(`XRef.parse - Invalid "Root" reference: "${e}".`); } if (a instanceof Dict) try { if (a.get('Pages') instanceof Dict) { this.root = a; return; } } catch (e) { if (e instanceof MissingDataException) throw e; warn(`XRef.parse - Invalid "Pages" reference: "${e}".`); } if (!e) throw new XRefParseException(); throw new InvalidPDFException('Invalid Root reference.'); } processXRefTable(e) { 'tableState' in this || (this.tableState = { entryNum: 0, streamPos: e.lexer.stream.pos, parserBuf1: e.buf1, parserBuf2: e.buf2, }); if (!isCmd(this.readXRefTable(e), 'trailer')) throw new FormatError( 'Invalid XRef table: could not find trailer dictionary', ); let t = e.getObj(); t instanceof Dict || !t.dict || (t = t.dict); if (!(t instanceof Dict)) throw new FormatError( 'Invalid XRef table: could not parse trailer dictionary', ); delete this.tableState; return t; } readXRefTable(e) { const t = e.lexer.stream, i = this.tableState; t.pos = i.streamPos; e.buf1 = i.parserBuf1; e.buf2 = i.parserBuf2; let a; for (;;) { if (!('firstEntryNum' in i) || !('entryCount' in i)) { if (isCmd((a = e.getObj()), 'trailer')) break; i.firstEntryNum = a; i.entryCount = e.getObj(); } let r = i.firstEntryNum; const s = i.entryCount; if (!Number.isInteger(r) || !Number.isInteger(s)) throw new FormatError( 'Invalid XRef table: wrong types in subsection header', ); for (let a = i.entryNum; a < s; a++) { i.streamPos = t.pos; i.entryNum = a; i.parserBuf1 = e.buf1; i.parserBuf2 = e.buf2; const n = {}; n.offset = e.getObj(); n.gen = e.getObj(); const o = e.getObj(); if (o instanceof Cmd) switch (o.cmd) { case 'f': n.free = !0; break; case 'n': n.uncompressed = !0; } if ( !Number.isInteger(n.offset) || !Number.isInteger(n.gen) || (!n.free && !n.uncompressed) ) throw new FormatError(`Invalid entry in XRef subsection: ${r}, ${s}`); 0 === a && n.free && 1 === r && (r = 0); this.entries[a + r] || (this.entries[a + r] = n); } i.entryNum = 0; i.streamPos = t.pos; i.parserBuf1 = e.buf1; i.parserBuf2 = e.buf2; delete i.firstEntryNum; delete i.entryCount; } if (this.entries[0] && !this.entries[0].free) throw new FormatError('Invalid XRef table: unexpected first object'); return a; } processXRefStream(e) { if (!('streamState' in this)) { const t = e.dict, i = t.get('W'); let a = t.get('Index'); a || (a = [0, t.get('Size')]); this.streamState = { entryRanges: a, byteWidths: i, entryNum: 0, streamPos: e.pos, }; } this.readXRefStream(e); delete this.streamState; return e.dict; } readXRefStream(e) { const t = this.streamState; e.pos = t.streamPos; const [i, a, r] = t.byteWidths, s = t.entryRanges; for (; s.length > 0; ) { const [n, o] = s; if (!Number.isInteger(n) || !Number.isInteger(o)) throw new FormatError(`Invalid XRef range fields: ${n}, ${o}`); if (!Number.isInteger(i) || !Number.isInteger(a) || !Number.isInteger(r)) throw new FormatError(`Invalid XRef entry fields length: ${n}, ${o}`); for (let s = t.entryNum; s < o; ++s) { t.entryNum = s; t.streamPos = e.pos; let o = 0, g = 0, c = 0; for (let t = 0; t < i; ++t) { const t = e.getByte(); if (-1 === t) throw new FormatError("Invalid XRef byteWidths 'type'."); o = (o << 8) | t; } 0 === i && (o = 1); for (let t = 0; t < a; ++t) { const t = e.getByte(); if (-1 === t) throw new FormatError("Invalid XRef byteWidths 'offset'."); g = (g << 8) | t; } for (let t = 0; t < r; ++t) { const t = e.getByte(); if (-1 === t) throw new FormatError("Invalid XRef byteWidths 'generation'."); c = (c << 8) | t; } const C = {}; C.offset = g; C.gen = c; switch (o) { case 0: C.free = !0; break; case 1: C.uncompressed = !0; break; case 2: break; default: throw new FormatError(`Invalid XRef entry type: ${o}`); } this.entries[n + s] || (this.entries[n + s] = C); } t.entryNum = 0; t.streamPos = e.pos; s.splice(0, 2); } } indexObjects() { function readToken(e, t) { let i = '', a = e[t]; for (; 10 !== a && 13 !== a && 60 !== a && !(++t >= e.length); ) { i += String.fromCharCode(a); a = e[t]; } return i; } function skipUntil(e, t, i) { const a = i.length, r = e.length; let s = 0; for (; t < r; ) { let r = 0; for (; r < a && e[t + r] === i[r]; ) ++r; if (r >= a) break; t++; s++; } return s; } const e = /\b(endobj|\d+\s+\d+\s+obj|xref|trailer\s*<<)\b/g, t = /\b(startxref|\d+\s+\d+\s+obj)\b/g, i = /^(\d+)\s+(\d+)\s+obj\b/, a = new Uint8Array([116, 114, 97, 105, 108, 101, 114]), r = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]), s = new Uint8Array([47, 88, 82, 101, 102]); this.entries.length = 0; this._cacheMap.clear(); const n = this.stream; n.pos = 0; const o = n.getBytes(), g = bytesToString(o), c = o.length; let C = n.start; const h = [], l = []; for (; C < c; ) { let Q = o[C]; if (9 === Q || 10 === Q || 13 === Q || 32 === Q) { ++C; continue; } if (37 === Q) { do { ++C; if (C >= c) break; Q = o[C]; } while (10 !== Q && 13 !== Q); continue; } const E = readToken(o, C); let u; if (E.startsWith('xref') && (4 === E.length || /\s/.test(E[4]))) { C += skipUntil(o, C, a); h.push(C); C += skipUntil(o, C, r); } else if ((u = i.exec(E))) { const t = 0 | u[1], i = 0 | u[2], a = C + E.length; let r, h = !1; if (this.entries[t]) { if (this.entries[t].gen === i) try { new Parser({ lexer: new Lexer(n.makeSubStream(a)) }).getObj(); h = !0; } catch (e) { e instanceof ParserEOFException ? warn(`indexObjects -- checking object (${E}): "${e}".`) : (h = !0); } } else h = !0; h && (this.entries[t] = { offset: C - n.start, gen: i, uncompressed: !0 }); e.lastIndex = a; const Q = e.exec(g); if (Q) { r = e.lastIndex + 1 - C; if ('endobj' !== Q[1]) { warn( `indexObjects: Found "${Q[1]}" inside of another "obj", caused by missing "endobj" -- trying to recover.`, ); r -= Q[1].length + 1; } } else r = c - C; const d = o.subarray(C, C + r), f = skipUntil(d, 0, s); if (f < r && d[f + 5] < 64) { l.push(C - n.start); this._xrefStms.add(C - n.start); } C += r; } else if ( E.startsWith('trailer') && (7 === E.length || /\s/.test(E[7])) ) { h.push(C); const e = C + E.length; let i; t.lastIndex = e; const a = t.exec(g); if (a) { i = t.lastIndex + 1 - C; if ('startxref' !== a[1]) { warn( `indexObjects: Found "${a[1]}" after "trailer", caused by missing "startxref" -- trying to recover.`, ); i -= a[1].length + 1; } } else i = c - C; C += i; } else C += E.length + 1; } for (const e of l) { this.startXRefQueue.push(e); this.readXRef(!0); } const Q = []; let E, u, d = !1; for (const e of h) { n.pos = e; const t = new Parser({ lexer: new Lexer(n), xref: this, allowStreams: !0, recoveryMode: !0, }); if (!isCmd(t.getObj(), 'trailer')) continue; const i = t.getObj(); if (i instanceof Dict) { Q.push(i); i.has('Encrypt') && (d = !0); } } for (const e of [...Q, 'genFallback', ...Q]) { if ('genFallback' === e) { if (!u) break; this._generationFallback = !0; continue; } let t = !1; try { const i = e.get('Root'); if (!(i instanceof Dict)) continue; const a = i.get('Pages'); if (!(a instanceof Dict)) continue; const r = a.get('Count'); Number.isInteger(r) && (t = !0); } catch (e) { u = e; continue; } if (t && (!d || e.has('Encrypt')) && e.has('ID')) return e; E = e; } if (E) return E; if (this.topDict) return this.topDict; throw new InvalidPDFException('Invalid PDF structure.'); } readXRef(e = !1) { const t = this.stream, i = new Set(); for (; this.startXRefQueue.length; ) { try { const e = this.startXRefQueue[0]; if (i.has(e)) { warn('readXRef - skipping XRef table since it was already parsed.'); this.startXRefQueue.shift(); continue; } i.add(e); t.pos = e + t.start; const a = new Parser({ lexer: new Lexer(t), xref: this, allowStreams: !0, }); let r, s = a.getObj(); if (isCmd(s, 'xref')) { r = this.processXRefTable(a); this.topDict || (this.topDict = r); s = r.get('XRefStm'); if (Number.isInteger(s) && !this._xrefStms.has(s)) { this._xrefStms.add(s); this.startXRefQueue.push(s); this.#T ??= s; } } else { if (!Number.isInteger(s)) throw new FormatError('Invalid XRef stream header'); if ( !( Number.isInteger(a.getObj()) && isCmd(a.getObj(), 'obj') && (s = a.getObj()) instanceof BaseStream ) ) throw new FormatError('Invalid XRef stream'); r = this.processXRefStream(s); this.topDict || (this.topDict = r); if (!r) throw new FormatError('Failed to read XRef stream'); } s = r.get('Prev'); Number.isInteger(s) ? this.startXRefQueue.push(s) : s instanceof Ref && this.startXRefQueue.push(s.num); } catch (e) { if (e instanceof MissingDataException) throw e; info('(while reading XRef): ' + e); } this.startXRefQueue.shift(); } if (this.topDict) return this.topDict; if (!e) throw new XRefParseException(); } get lastXRefStreamPos() { return ( this.#T ?? (this._xrefStms.size > 0 ? Math.max(...this._xrefStms) : null) ); } getEntry(e) { const t = this.entries[e]; return t && !t.free && t.offset ? t : null; } fetchIfRef(e, t = !1) { return e instanceof Ref ? this.fetch(e, t) : e; } fetch(e, t = !1) { if (!(e instanceof Ref)) throw new Error('ref object is not a reference'); const i = e.num, a = this._cacheMap.get(i); if (void 0 !== a) { a instanceof Dict && !a.objId && (a.objId = e.toString()); return a; } let r = this.getEntry(i); if (null === r) { this._cacheMap.set(i, r); return r; } if (this._pendingRefs.has(e)) { this._pendingRefs.remove(e); warn(`Ignoring circular reference: ${e}.`); return mt; } this._pendingRefs.put(e); try { r = r.uncompressed ? this.fetchUncompressed(e, r, t) : this.fetchCompressed(e, r, t); this._pendingRefs.remove(e); } catch (t) { this._pendingRefs.remove(e); throw t; } r instanceof Dict ? (r.objId = e.toString()) : r instanceof BaseStream && (r.dict.objId = e.toString()); return r; } fetchUncompressed(e, t, i = !1) { const a = e.gen; let r = e.num; if (t.gen !== a) { const s = `Inconsistent generation in XRef: ${e}`; if (this._generationFallback && t.gen < a) { warn(s); return this.fetchUncompressed(Ref.get(r, t.gen), t, i); } throw new XRefEntryException(s); } const s = this.stream.makeSubStream(t.offset + this.stream.start), n = new Parser({ lexer: new Lexer(s), xref: this, allowStreams: !0 }), o = n.getObj(), g = n.getObj(), c = n.getObj(); if (o !== r || g !== a || !(c instanceof Cmd)) throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`); if ('obj' !== c.cmd) { if (c.cmd.startsWith('obj')) { r = parseInt(c.cmd.substring(3), 10); if (!Number.isNaN(r)) return r; } throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`); } (t = this.encrypt && !i ? n.getObj(this.encrypt.createCipherTransform(r, a)) : n.getObj()) instanceof BaseStream || this._cacheMap.set(r, t); return t; } fetchCompressed(e, t, i = !1) { const a = t.offset, r = this.fetch(Ref.get(a, 0)); if (!(r instanceof BaseStream)) throw new FormatError('bad ObjStm stream'); const s = r.dict.get('First'), n = r.dict.get('N'); if (!Number.isInteger(s) || !Number.isInteger(n)) throw new FormatError('invalid first and n parameters for ObjStm stream'); let o = new Parser({ lexer: new Lexer(r), xref: this, allowStreams: !0 }); const g = new Array(n), c = new Array(n); for (let e = 0; e < n; ++e) { const t = o.getObj(); if (!Number.isInteger(t)) throw new FormatError( `invalid object number in the ObjStm stream: ${t}`, ); const i = o.getObj(); if (!Number.isInteger(i)) throw new FormatError( `invalid object offset in the ObjStm stream: ${i}`, ); g[e] = t; c[e] = i; } const C = (r.start || 0) + s, h = new Array(n); for (let e = 0; e < n; ++e) { const t = e < n - 1 ? c[e + 1] - c[e] : void 0; if (t < 0) throw new FormatError('Invalid offset in the ObjStm stream.'); o = new Parser({ lexer: new Lexer(r.makeSubStream(C + c[e], t, r.dict)), xref: this, allowStreams: !0, }); const i = o.getObj(); h[e] = i; if (i instanceof BaseStream) continue; const s = g[e], l = this.entries[s]; l && l.offset === a && l.gen === e && this._cacheMap.set(s, i); } if (void 0 === (t = h[t.gen])) throw new XRefEntryException(`Bad (compressed) XRef entry: ${e}`); return t; } async fetchIfRefAsync(e, t) { return e instanceof Ref ? this.fetchAsync(e, t) : e; } async fetchAsync(e, t) { try { return this.fetch(e, t); } catch (i) { if (!(i instanceof MissingDataException)) throw i; await this.pdfManager.requestRange(i.begin, i.end); return this.fetchAsync(e, t); } } getCatalogObj() { return this.root; } } const no = [0, 0, 612, 792]; class Page { constructor({ pdfManager: e, xref: t, pageIndex: i, pageDict: a, ref: r, globalIdFactory: s, fontCache: n, builtInCMapCache: o, standardFontDataCache: g, globalImageCache: c, systemFontCache: C, nonBlendModesSet: h, xfaFactory: l, }) { this.pdfManager = e; this.pageIndex = i; this.pageDict = a; this.xref = t; this.ref = r; this.fontCache = n; this.builtInCMapCache = o; this.standardFontDataCache = g; this.globalImageCache = c; this.systemFontCache = C; this.nonBlendModesSet = h; this.evaluatorOptions = e.evaluatorOptions; this.resourcesPromise = null; this.xfaFactory = l; const Q = { obj: 0 }; this._localIdFactory = class extends s { static createObjId() { return `p${i}_${++Q.obj}`; } static getPageObjId() { return `p${r.toString()}`; } }; } _getInheritableProperty(e, t = !1) { const i = getInheritableProperty({ dict: this.pageDict, key: e, getArray: t, stopWhenFound: !1, }); return Array.isArray(i) ? 1 !== i.length && i[0] instanceof Dict ? Dict.merge({ xref: this.xref, dictArray: i }) : i[0] : i; } get content() { return this.pageDict.getArray('Contents'); } get resources() { const e = this._getInheritableProperty('Resources'); return shadow(this, 'resources', e instanceof Dict ? e : Dict.empty); } _getBoundingBox(e) { if (this.xfaData) return this.xfaData.bbox; const t = lookupNormalRect(this._getInheritableProperty(e, !0), null); if (t) { if (t[2] - t[0] > 0 && t[3] - t[1] > 0) return t; warn(`Empty, or invalid, /${e} entry.`); } return null; } get mediaBox() { return shadow(this, 'mediaBox', this._getBoundingBox('MediaBox') || no); } get cropBox() { return shadow( this, 'cropBox', this._getBoundingBox('CropBox') || this.mediaBox, ); } get userUnit() { let e = this.pageDict.get('UserUnit'); ('number' != typeof e || e <= 0) && (e = 1); return shadow(this, 'userUnit', e); } get view() { const { cropBox: e, mediaBox: t } = this; if (e !== t && !isArrayEqual(e, t)) { const i = Util.intersect(e, t); if (i && i[2] - i[0] > 0 && i[3] - i[1] > 0) return shadow(this, 'view', i); warn('Empty /CropBox and /MediaBox intersection.'); } return shadow(this, 'view', t); } get rotate() { let e = this._getInheritableProperty('Rotate') || 0; e % 90 != 0 ? (e = 0) : e >= 360 ? (e %= 360) : e < 0 && (e = ((e % 360) + 360) % 360); return shadow(this, 'rotate', e); } _onSubStreamError(e, t) { if (!this.evaluatorOptions.ignoreErrors) throw e; warn(`getContentStream - ignoring sub-stream (${t}): "${e}".`); } getContentStream() { return this.pdfManager .ensure(this, 'content') .then((e) => e instanceof BaseStream ? e : Array.isArray(e) ? new StreamsSequenceStream(e, this._onSubStreamError.bind(this)) : new NullStream(), ); } get xfaData() { return shadow( this, 'xfaData', this.xfaFactory ? { bbox: this.xfaFactory.getBoundingBox(this.pageIndex) } : null, ); } #K(e, t, i) { for (const a of e) if (a.id) { const e = Ref.fromString(a.id); if (!e) { warn(`A non-linked annotation cannot be modified: ${a.id}`); continue; } if (a.deleted) { t.put(e, e); continue; } i?.put(e); a.ref = e; delete a.id; } } async saveNewAnnotations(e, t, i, a) { if (this.xfaFactory) throw new Error('XFA: Cannot save new annotations.'); const r = new PartialEvaluator({ xref: this.xref, handler: e, pageIndex: this.pageIndex, idFactory: this._localIdFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, standardFontDataCache: this.standardFontDataCache, globalImageCache: this.globalImageCache, systemFontCache: this.systemFontCache, options: this.evaluatorOptions, }), s = new RefSetCache(), n = new RefSet(); this.#K(i, s, n); const o = this.pageDict, g = this.annotations.filter((e) => !(e instanceof Ref && s.has(e))), c = await AnnotationFactory.saveNewAnnotations(r, t, i, a); for (const { ref: e } of c.annotations) e instanceof Ref && !n.has(e) && g.push(e); const C = o.get('Annots'); o.set('Annots', g); const h = []; await writeObject(this.ref, o, h, this.xref); C && o.set('Annots', C); const l = c.dependencies; l.push({ ref: this.ref, data: h.join('') }, ...c.annotations); for (const e of s) l.push({ ref: e, data: null }); return l; } save(e, t, i) { const a = new PartialEvaluator({ xref: this.xref, handler: e, pageIndex: this.pageIndex, idFactory: this._localIdFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, standardFontDataCache: this.standardFontDataCache, globalImageCache: this.globalImageCache, systemFontCache: this.systemFontCache, options: this.evaluatorOptions, }); return this._parsedAnnotations.then(function (e) { const r = []; for (const s of e) s.mustBePrinted(i) && r.push( s.save(a, t, i).catch(function (e) { warn( `save - ignoring annotation data during "${t.name}" task: "${e}".`, ); return null; }), ); return Promise.all(r).then(function (e) { return e.filter((e) => !!e); }); }); } loadResources(e) { this.resourcesPromise ||= this.pdfManager.ensure(this, 'resources'); return this.resourcesPromise.then(() => new ObjectLoader(this.resources, e, this.xref).load(), ); } getOperatorList({ handler: e, sink: t, task: i, intent: a, cacheKey: r, annotationStorage: s = null, }) { const n = this.getContentStream(), o = this.loadResources([ 'ColorSpace', 'ExtGState', 'Font', 'Pattern', 'Properties', 'Shading', 'XObject', ]), h = new PartialEvaluator({ xref: this.xref, handler: e, pageIndex: this.pageIndex, idFactory: this._localIdFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, standardFontDataCache: this.standardFontDataCache, globalImageCache: this.globalImageCache, systemFontCache: this.systemFontCache, options: this.evaluatorOptions, }), E = this.xfaFactory ? null : getNewAnnotationsMap(s), d = E?.get(this.pageIndex); let f = Promise.resolve(null), p = null; if (d) { const e = this.pdfManager.ensureDoc('annotationGlobals'); let t; const a = new Set(); for (const { bitmapId: e, bitmap: t } of d) !e || t || a.has(e) || a.add(e); const { isOffscreenCanvasSupported: r } = this.evaluatorOptions; if (a.size > 0) { const e = d.slice(); for (const [t, i] of s) t.startsWith(u) && i.bitmap && a.has(i.bitmapId) && e.push(i); t = AnnotationFactory.generateImages(e, this.xref, r); } else t = AnnotationFactory.generateImages(d, this.xref, r); p = new RefSet(); this.#K(d, p, null); f = e.then((e) => e ? AnnotationFactory.printNewAnnotations(e, h, i, d, t) : null, ); } const m = Promise.all([n, o]).then(([s]) => { const n = new OperatorList(a, t); e.send('StartRenderPage', { transparency: h.hasBlendModes(this.resources, this.nonBlendModesSet), pageIndex: this.pageIndex, cacheKey: r, }); return h .getOperatorList({ stream: s, task: i, resources: this.resources, operatorList: n, }) .then(function () { return n; }); }); return Promise.all([m, this._parsedAnnotations, f]).then(function ([ e, t, r, ]) { if (r) { t = t.filter((e) => !(e.ref && p.has(e.ref))); for (let e = 0, i = r.length; e < i; e++) { const a = r[e]; if (a.refToReplace) { const s = t.findIndex( (e) => e.ref && isRefsEqual(e.ref, a.refToReplace), ); if (s >= 0) { t.splice(s, 1, a); r.splice(e--, 1); i--; } } } t = t.concat(r); } if (0 === t.length || a & Q) { e.flush(!0); return { length: e.totalLength }; } const n = !!(a & l), o = !!(a & g), E = !!(a & c), u = !!(a & C), d = []; for (const e of t) (o || (E && e.mustBeViewed(s, n)) || (u && e.mustBePrinted(s))) && d.push( e.getOperatorList(h, i, a, n, s).catch(function (e) { warn( `getOperatorList - ignoring annotation data during "${i.name}" task: "${e}".`, ); return { opList: null, separateForm: !1, separateCanvas: !1 }; }), ); return Promise.all(d).then(function (t) { let i = !1, a = !1; for (const { opList: r, separateForm: s, separateCanvas: n } of t) { e.addOpList(r); i ||= s; a ||= n; } e.flush(!0, { form: i, canvas: a }); return { length: e.totalLength }; }); }); } async extractTextContent({ handler: e, task: t, includeMarkedContent: i, disableNormalization: a, sink: r, }) { const s = this.getContentStream(), n = this.loadResources(['ExtGState', 'Font', 'Properties', 'XObject']), o = this.pdfManager.ensureCatalog('lang'), [g, , c] = await Promise.all([s, n, o]); return new PartialEvaluator({ xref: this.xref, handler: e, pageIndex: this.pageIndex, idFactory: this._localIdFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, standardFontDataCache: this.standardFontDataCache, globalImageCache: this.globalImageCache, systemFontCache: this.systemFontCache, options: this.evaluatorOptions, }).getTextContent({ stream: g, task: t, resources: this.resources, includeMarkedContent: i, disableNormalization: a, sink: r, viewBox: this.view, lang: c, }); } async getStructTree() { const e = await this.pdfManager.ensureCatalog('structTreeRoot'); if (!e) return null; await this._parsedAnnotations; return (await this.pdfManager.ensure(this, '_parseStructTree', [e])) .serializable; } _parseStructTree(e) { const t = new StructTreePage(e, this.pageDict); t.parse(this.ref); return t; } async getAnnotationsData(e, t, i) { const a = await this._parsedAnnotations; if (0 === a.length) return a; const r = [], s = []; let n; const o = !!(i & g), h = !!(i & c), l = !!(i & C); for (const i of a) { const a = o || (h && i.viewable); (a || (l && i.printable)) && r.push(i.data); if (i.hasTextContent && a) { n ||= new PartialEvaluator({ xref: this.xref, handler: e, pageIndex: this.pageIndex, idFactory: this._localIdFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, standardFontDataCache: this.standardFontDataCache, globalImageCache: this.globalImageCache, systemFontCache: this.systemFontCache, options: this.evaluatorOptions, }); s.push( i .extractTextContent(n, t, [-1 / 0, -1 / 0, 1 / 0, 1 / 0]) .catch(function (e) { warn( `getAnnotationsData - ignoring textContent during "${t.name}" task: "${e}".`, ); }), ); } } await Promise.all(s); return r; } get annotations() { const e = this._getInheritableProperty('Annots'); return shadow(this, 'annotations', Array.isArray(e) ? e : []); } get _parsedAnnotations() { return shadow( this, '_parsedAnnotations', this.pdfManager.ensure(this, 'annotations').then(async (e) => { if (0 === e.length) return e; const t = await this.pdfManager.ensureDoc('annotationGlobals'); if (!t) return []; const i = []; for (const a of e) i.push( AnnotationFactory.create( this.xref, a, t, this._localIdFactory, !1, this.ref, ).catch(function (e) { warn(`_parsedAnnotations: "${e}".`); return null; }), ); const a = []; let r, s; for (const e of await Promise.all(i)) e && (e instanceof WidgetAnnotation ? (s ||= []).push(e) : e instanceof PopupAnnotation ? (r ||= []).push(e) : a.push(e)); s && a.push(...s); r && a.push(...r); return a; }), ); } get jsActions() { return shadow( this, 'jsActions', collectActions(this.xref, this.pageDict, mA), ); } } const oo = new Uint8Array([37, 80, 68, 70, 45]), go = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]), Io = new Uint8Array([101, 110, 100, 111, 98, 106]); function find(e, t, i = 1024, a = !1) { const r = t.length, s = e.peekBytes(i), n = s.length - r; if (n <= 0) return !1; if (a) { const i = r - 1; let a = s.length - 1; for (; a >= i; ) { let n = 0; for (; n < r && s[a - n] === t[i - n]; ) n++; if (n >= r) { e.pos += a - i; return !0; } a--; } } else { let i = 0; for (; i <= n; ) { let a = 0; for (; a < r && s[i + a] === t[a]; ) a++; if (a >= r) { e.pos += i; return !0; } i++; } } return !1; } class PDFDocument { constructor(e, t) { if (t.length <= 0) throw new InvalidPDFException( 'The PDF file is empty, i.e. its size is zero bytes.', ); this.pdfManager = e; this.stream = t; this.xref = new XRef(t, e); this._pagePromises = new Map(); this._version = null; const i = { font: 0 }; this._globalIdFactory = class { static getDocId() { return `g_${e.docId}`; } static createFontId() { return 'f' + ++i.font; } static createObjId() { unreachable('Abstract method `createObjId` called.'); } static getPageObjId() { unreachable('Abstract method `getPageObjId` called.'); } }; } parse(e) { this.xref.parse(e); this.catalog = new Catalog(this.pdfManager, this.xref); } get linearization() { let e = null; try { e = Linearization.create(this.stream); } catch (e) { if (e instanceof MissingDataException) throw e; info(e); } return shadow(this, 'linearization', e); } get startXRef() { const e = this.stream; let t = 0; if (this.linearization) { e.reset(); if (find(e, Io)) { e.skip(6); let i = e.peekByte(); for (; isWhiteSpace(i); ) { e.pos++; i = e.peekByte(); } t = e.pos - e.start; } } else { const i = 1024, a = go.length; let r = !1, s = e.end; for (; !r && s > 0; ) { s -= i - a; s < 0 && (s = 0); e.pos = s; r = find(e, go, i, !0); } if (r) { e.skip(9); let i; do { i = e.getByte(); } while (isWhiteSpace(i)); let a = ''; for (; i >= 32 && i <= 57; ) { a += String.fromCharCode(i); i = e.getByte(); } t = parseInt(a, 10); isNaN(t) && (t = 0); } } return shadow(this, 'startXRef', t); } checkHeader() { const e = this.stream; e.reset(); if (!find(e, oo)) return; e.moveStart(); e.skip(oo.length); let t, i = ''; for (; (t = e.getByte()) > 32 && i.length < 7; ) i += String.fromCharCode(t); St.test(i) ? (this._version = i) : warn(`Invalid PDF header version: ${i}`); } parseStartXRef() { this.xref.setStartXRef(this.startXRef); } get numPages() { let e = 0; e = this.catalog.hasActualNumPages ? this.catalog.numPages : this.xfaFactory ? this.xfaFactory.getNumPages() : this.linearization ? this.linearization.numPages : this.catalog.numPages; return shadow(this, 'numPages', e); } _hasOnlyDocumentSignatures(e, t = 0) { return ( !!Array.isArray(e) && e.every((e) => { if (!((e = this.xref.fetchIfRef(e)) instanceof Dict)) return !1; if (e.has('Kids')) { if (++t > 10) { warn('_hasOnlyDocumentSignatures: maximum recursion depth reached'); return !1; } return this._hasOnlyDocumentSignatures(e.get('Kids'), t); } const i = isName(e.get('FT'), 'Sig'), a = e.get('Rect'), r = Array.isArray(a) && a.every((e) => 0 === e); return i && r; }) ); } get _xfaStreams() { const e = this.catalog.acroForm; if (!e) return null; const t = e.get('XFA'), i = { 'xdp:xdp': '', template: '', datasets: '', config: '', connectionSet: '', localeSet: '', stylesheet: '', '/xdp:xdp': '', }; if (t instanceof BaseStream && !t.isEmpty) { i['xdp:xdp'] = t; return i; } if (!Array.isArray(t) || 0 === t.length) return null; for (let e = 0, a = t.length; e < a; e += 2) { let r; r = 0 === e ? 'xdp:xdp' : e === a - 2 ? '/xdp:xdp' : t[e]; if (!i.hasOwnProperty(r)) continue; const s = this.xref.fetchIfRef(t[e + 1]); s instanceof BaseStream && !s.isEmpty && (i[r] = s); } return i; } get xfaDatasets() { const e = this._xfaStreams; if (!e) return shadow(this, 'xfaDatasets', null); for (const t of ['datasets', 'xdp:xdp']) { const i = e[t]; if (i) try { const e = stringToUTF8String(i.getString()); return shadow(this, 'xfaDatasets', new DatasetReader({ [t]: e })); } catch { warn('XFA - Invalid utf-8 string.'); break; } } return shadow(this, 'xfaDatasets', null); } get xfaData() { const e = this._xfaStreams; if (!e) return null; const t = Object.create(null); for (const [i, a] of Object.entries(e)) if (a) try { t[i] = stringToUTF8String(a.getString()); } catch { warn('XFA - Invalid utf-8 string.'); return null; } return t; } get xfaFactory() { let e; this.pdfManager.enableXfa && this.catalog.needsRendering && this.formInfo.hasXfa && !this.formInfo.hasAcroForm && (e = this.xfaData); return shadow(this, 'xfaFactory', e ? new XFAFactory(e) : null); } get isPureXfa() { return !!this.xfaFactory && this.xfaFactory.isValid(); } get htmlForXfa() { return this.xfaFactory ? this.xfaFactory.getPages() : null; } async loadXfaImages() { const e = await this.pdfManager.ensureCatalog('xfaImages'); if (!e) return; const t = e.getKeys(), i = new ObjectLoader(e, t, this.xref); await i.load(); const a = new Map(); for (const i of t) { const t = e.get(i); t instanceof BaseStream && a.set(i, t.getBytes()); } this.xfaFactory.setImages(a); } async loadXfaFonts(e, t) { const i = await this.pdfManager.ensureCatalog('acroForm'); if (!i) return; const a = await i.getAsync('DR'); if (!(a instanceof Dict)) return; const r = new ObjectLoader(a, ['Font'], this.xref); await r.load(); const s = a.get('Font'); if (!(s instanceof Dict)) return; const n = Object.assign( Object.create(null), this.pdfManager.evaluatorOptions, ); n.useSystemFonts = !1; const o = new PartialEvaluator({ xref: this.xref, handler: e, pageIndex: -1, idFactory: this._globalIdFactory, fontCache: this.catalog.fontCache, builtInCMapCache: this.catalog.builtInCMapCache, standardFontDataCache: this.catalog.standardFontDataCache, options: n, }), g = new OperatorList(), c = [], C = { get font() { return c.at(-1); }, set font(e) { c.push(e); }, clone() { return this; }, }, h = new Map(); s.forEach((e, t) => { h.set(e, t); }); const l = []; for (const [e, i] of h) { const r = i.get('FontDescriptor'); if (!(r instanceof Dict)) continue; let s = r.get('FontFamily'); s = s.replaceAll(/[ ]+(\d)/g, '$1'); const n = { fontFamily: s, fontWeight: r.get('FontWeight'), italicAngle: -r.get('ItalicAngle'), }; validateCSSFont(n) && l.push( o .handleSetFont(a, [Name.get(e), 1], null, g, t, C, null, n) .catch(function (e) { warn(`loadXfaFonts: "${e}".`); return null; }), ); } await Promise.all(l); const Q = this.xfaFactory.setFonts(c); if (!Q) return; n.ignoreErrors = !0; l.length = 0; c.length = 0; const E = new Set(); for (const e of Q) getXfaFontName(`${e}-Regular`) || E.add(e); E.size && Q.push('PdfJS-Fallback'); for (const e of Q) if (!E.has(e)) for (const i of [ { name: 'Regular', fontWeight: 400, italicAngle: 0 }, { name: 'Bold', fontWeight: 700, italicAngle: 0 }, { name: 'Italic', fontWeight: 400, italicAngle: 12 }, { name: 'BoldItalic', fontWeight: 700, italicAngle: 12 }, ]) { const r = `${e}-${i.name}`, s = getXfaFontDict(r); l.push( o .handleSetFont(a, [Name.get(r), 1], null, g, t, C, s, { fontFamily: e, fontWeight: i.fontWeight, italicAngle: i.italicAngle, }) .catch(function (e) { warn(`loadXfaFonts: "${e}".`); return null; }), ); } await Promise.all(l); this.xfaFactory.appendFonts(c, E); } async serializeXfaData(e) { return this.xfaFactory ? this.xfaFactory.serializeData(e) : null; } get version() { return this.catalog.version || this._version; } get formInfo() { const e = { hasFields: !1, hasAcroForm: !1, hasXfa: !1, hasSignatures: !1 }, t = this.catalog.acroForm; if (!t) return shadow(this, 'formInfo', e); try { const i = t.get('Fields'), a = Array.isArray(i) && i.length > 0; e.hasFields = a; const r = t.get('XFA'); e.hasXfa = (Array.isArray(r) && r.length > 0) || (r instanceof BaseStream && !r.isEmpty); const s = !!(1 & t.get('SigFlags')), n = s && this._hasOnlyDocumentSignatures(i); e.hasAcroForm = a && !n; e.hasSignatures = s; } catch (e) { if (e instanceof MissingDataException) throw e; warn(`Cannot fetch form information: "${e}".`); } return shadow(this, 'formInfo', e); } get documentInfo() { const e = { PDFFormatVersion: this.version, Language: this.catalog.lang, EncryptFilterName: this.xref.encrypt ? this.xref.encrypt.filterName : null, IsLinearized: !!this.linearization, IsAcroFormPresent: this.formInfo.hasAcroForm, IsXFAPresent: this.formInfo.hasXfa, IsCollectionPresent: !!this.catalog.collection, IsSignaturesPresent: this.formInfo.hasSignatures, }; let t; try { t = this.xref.trailer.get('Info'); } catch (e) { if (e instanceof MissingDataException) throw e; info('The document information dictionary is invalid.'); } if (!(t instanceof Dict)) return shadow(this, 'documentInfo', e); for (const i of t.getKeys()) { const a = t.get(i); switch (i) { case 'Title': case 'Author': case 'Subject': case 'Keywords': case 'Creator': case 'Producer': case 'CreationDate': case 'ModDate': if ('string' == typeof a) { e[i] = stringToPDFString(a); continue; } break; case 'Trapped': if (a instanceof Name) { e[i] = a; continue; } break; default: let t; switch (typeof a) { case 'string': t = stringToPDFString(a); break; case 'number': case 'boolean': t = a; break; default: a instanceof Name && (t = a); } if (void 0 === t) { warn(`Bad value, for custom key "${i}", in Info: ${a}.`); continue; } e.Custom || (e.Custom = Object.create(null)); e.Custom[i] = t; continue; } warn(`Bad value, for key "${i}", in Info: ${a}.`); } return shadow(this, 'documentInfo', e); } get fingerprints() { function validate(e) { return ( 'string' == typeof e && e.length > 0 && '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0' !== e ); } function hexString(e) { const t = []; for (const i of e) { const e = i.toString(16); t.push(e.padStart(2, '0')); } return t.join(''); } const e = this.xref.trailer.get('ID'); let t, i; if (Array.isArray(e) && validate(e[0])) { t = stringToBytes(e[0]); e[1] !== e[0] && validate(e[1]) && (i = stringToBytes(e[1])); } else t = vr(this.stream.getByteRange(0, 1024), 0, 1024); return shadow(this, 'fingerprints', [ hexString(t), i ? hexString(i) : null, ]); } async _getLinearizationPage(e) { const { catalog: t, linearization: i, xref: a } = this, r = Ref.get(i.objectNumberFirst, 0); try { const e = await a.fetchAsync(r); if (e instanceof Dict) { let i = e.getRaw('Type'); i instanceof Ref && (i = await a.fetchAsync(i)); if ( isName(i, 'Page') || (!e.has('Type') && !e.has('Kids') && e.has('Contents')) ) { t.pageKidsCountCache.has(r) || t.pageKidsCountCache.put(r, 1); t.pageIndexCache.has(r) || t.pageIndexCache.put(r, 0); return [e, r]; } } throw new FormatError( "The Linearization dictionary doesn't point to a valid Page dictionary.", ); } catch (i) { warn(`_getLinearizationPage: "${i.message}".`); return t.getPageDict(e); } } getPage(e) { const t = this._pagePromises.get(e); if (t) return t; const { catalog: i, linearization: a, xfaFactory: r } = this; let s; s = r ? Promise.resolve([Dict.empty, null]) : a?.pageFirst === e ? this._getLinearizationPage(e) : i.getPageDict(e); s = s.then( ([t, a]) => new Page({ pdfManager: this.pdfManager, xref: this.xref, pageIndex: e, pageDict: t, ref: a, globalIdFactory: this._globalIdFactory, fontCache: i.fontCache, builtInCMapCache: i.builtInCMapCache, standardFontDataCache: i.standardFontDataCache, globalImageCache: i.globalImageCache, systemFontCache: i.systemFontCache, nonBlendModesSet: i.nonBlendModesSet, xfaFactory: r, }), ); this._pagePromises.set(e, s); return s; } async checkFirstPage(e = !1) { if (!e) try { await this.getPage(0); } catch (e) { if (e instanceof XRefEntryException) { this._pagePromises.delete(0); await this.cleanup(); throw new XRefParseException(); } } } async checkLastPage(e = !1) { const { catalog: t, pdfManager: i } = this; t.setActualNumPages(); let a; try { await Promise.all([ i.ensureDoc('xfaFactory'), i.ensureDoc('linearization'), i.ensureCatalog('numPages'), ]); if (this.xfaFactory) return; a = this.linearization ? this.linearization.numPages : t.numPages; if (!Number.isInteger(a)) throw new FormatError('Page count is not an integer.'); if (a <= 1) return; await this.getPage(a - 1); } catch (r) { this._pagePromises.delete(a - 1); await this.cleanup(); if (r instanceof XRefEntryException && !e) throw new XRefParseException(); warn(`checkLastPage - invalid /Pages tree /Count: ${a}.`); let s; try { s = await t.getAllPageDicts(e); } catch (i) { if (i instanceof XRefEntryException && !e) throw new XRefParseException(); t.setActualNumPages(1); return; } for (const [e, [a, r]] of s) { let s; if (a instanceof Error) { s = Promise.reject(a); s.catch(() => {}); } else s = Promise.resolve( new Page({ pdfManager: i, xref: this.xref, pageIndex: e, pageDict: a, ref: r, globalIdFactory: this._globalIdFactory, fontCache: t.fontCache, builtInCMapCache: t.builtInCMapCache, standardFontDataCache: t.standardFontDataCache, globalImageCache: t.globalImageCache, systemFontCache: t.systemFontCache, nonBlendModesSet: t.nonBlendModesSet, xfaFactory: null, }), ); this._pagePromises.set(e, s); } t.setActualNumPages(s.size); } } fontFallback(e, t) { return this.catalog.fontFallback(e, t); } async cleanup(e = !1) { return this.catalog ? this.catalog.cleanup(e) : clearGlobalCaches(); } async #q(e, t, i, a, r) { const { xref: s } = this; if (!(t instanceof Ref) || r.has(t)) return; r.put(t); const n = await s.fetchAsync(t); if (!(n instanceof Dict)) return; if (n.has('T')) { const t = stringToPDFString(await n.getAsync('T')); e = '' === e ? t : `${e}.${t}`; } else { let t = n; for (;;) { t = t.getRaw('Parent'); if (t instanceof Ref) { if (r.has(t)) break; t = await s.fetchAsync(t); } if (!(t instanceof Dict)) break; if (t.has('T')) { const i = stringToPDFString(await t.getAsync('T')); e = '' === e ? i : `${e}.${i}`; break; } } } i.has(e) || i.set(e, []); i.get(e).push( AnnotationFactory.create(s, t, a, null, !0, null) .then((e) => e?.getFieldObject()) .catch(function (e) { warn(`#collectFieldObjects: "${e}".`); return null; }), ); if (!n.has('Kids')) return; const o = await n.getAsync('Kids'); if (Array.isArray(o)) for (const t of o) await this.#q(e, t, i, a, r); } get fieldObjects() { if (!this.formInfo.hasFields) return shadow(this, 'fieldObjects', Promise.resolve(null)); return shadow( this, 'fieldObjects', Promise.all([ this.pdfManager.ensureDoc('annotationGlobals'), this.pdfManager.ensureCatalog('acroForm'), ]).then(async ([e, t]) => { if (!e) return null; const i = new RefSet(), a = Object.create(null), r = new Map(); for (const a of await t.getAsync('Fields')) await this.#q('', a, r, e, i); const s = []; for (const [e, t] of r) s.push( Promise.all(t).then((t) => { (t = t.filter((e) => !!e)).length > 0 && (a[e] = t); }), ); await Promise.all(s); return a; }), ); } get hasJSActions() { return shadow( this, 'hasJSActions', this.pdfManager.ensureDoc('_parseHasJSActions'), ); } async _parseHasJSActions() { const [e, t] = await Promise.all([ this.pdfManager.ensureCatalog('jsActions'), this.pdfManager.ensureDoc('fieldObjects'), ]); return ( !!e || (!!t && Object.values(t).some((e) => e.some((e) => null !== e.actions))) ); } get calculationOrderIds() { const e = this.catalog.acroForm; if (!e?.has('CO')) return shadow(this, 'calculationOrderIds', null); const t = e.get('CO'); if (!Array.isArray(t) || 0 === t.length) return shadow(this, 'calculationOrderIds', null); const i = []; for (const e of t) e instanceof Ref && i.push(e.toString()); return 0 === i.length ? shadow(this, 'calculationOrderIds', null) : shadow(this, 'calculationOrderIds', i); } get annotationGlobals() { return shadow( this, 'annotationGlobals', AnnotationFactory.createGlobals(this.pdfManager), ); } } class BasePdfManager { constructor(e) { this.constructor === BasePdfManager && unreachable('Cannot initialize BasePdfManager.'); this._docBaseUrl = (function parseDocBaseUrl(e) { if (e) { const t = createValidAbsoluteUrl(e); if (t) return t.href; warn(`Invalid absolute docBaseUrl: "${e}".`); } return null; })(e.docBaseUrl); this._docId = e.docId; this._password = e.password; this.enableXfa = e.enableXfa; e.evaluatorOptions.isOffscreenCanvasSupported &&= FeatureTest.isOffscreenCanvasSupported; this.evaluatorOptions = Object.freeze(e.evaluatorOptions); } get docId() { return this._docId; } get password() { return this._password; } get docBaseUrl() { return this._docBaseUrl; } get catalog() { return this.pdfDocument.catalog; } ensureDoc(e, t) { return this.ensure(this.pdfDocument, e, t); } ensureXRef(e, t) { return this.ensure(this.pdfDocument.xref, e, t); } ensureCatalog(e, t) { return this.ensure(this.pdfDocument.catalog, e, t); } getPage(e) { return this.pdfDocument.getPage(e); } fontFallback(e, t) { return this.pdfDocument.fontFallback(e, t); } loadXfaFonts(e, t) { return this.pdfDocument.loadXfaFonts(e, t); } loadXfaImages() { return this.pdfDocument.loadXfaImages(); } serializeXfaData(e) { return this.pdfDocument.serializeXfaData(e); } cleanup(e = !1) { return this.pdfDocument.cleanup(e); } async ensure(e, t, i) { unreachable('Abstract method `ensure` called'); } requestRange(e, t) { unreachable('Abstract method `requestRange` called'); } requestLoadedStream(e = !1) { unreachable('Abstract method `requestLoadedStream` called'); } sendProgressiveData(e) { unreachable('Abstract method `sendProgressiveData` called'); } updatePassword(e) { this._password = e; } terminate(e) { unreachable('Abstract method `terminate` called'); } } class LocalPdfManager extends BasePdfManager { constructor(e) { super(e); const t = new Stream(e.source); this.pdfDocument = new PDFDocument(this, t); this._loadedStreamPromise = Promise.resolve(t); } async ensure(e, t, i) { const a = e[t]; return 'function' == typeof a ? a.apply(e, i) : a; } requestRange(e, t) { return Promise.resolve(); } requestLoadedStream(e = !1) { return this._loadedStreamPromise; } terminate(e) {} } class NetworkPdfManager extends BasePdfManager { constructor(e) { super(e); this.streamManager = new ChunkedStreamManager(e.source, { msgHandler: e.handler, length: e.length, disableAutoFetch: e.disableAutoFetch, rangeChunkSize: e.rangeChunkSize, }); this.pdfDocument = new PDFDocument(this, this.streamManager.getStream()); } async ensure(e, t, i) { try { const a = e[t]; return 'function' == typeof a ? a.apply(e, i) : a; } catch (a) { if (!(a instanceof MissingDataException)) throw a; await this.requestRange(a.begin, a.end); return this.ensure(e, t, i); } } requestRange(e, t) { return this.streamManager.requestRange(e, t); } requestLoadedStream(e = !1) { return this.streamManager.requestAllChunks(e); } sendProgressiveData(e) { this.streamManager.onReceiveData({ chunk: e }); } terminate(e) { this.streamManager.abort(e); } } const co = 1, Co = 2, ho = 1, lo = 2, Bo = 3, Qo = 4, Eo = 5, uo = 6, fo = 7, po = 8; function wrapReason(e) { e instanceof Error || ('object' == typeof e && null !== e) || unreachable( 'wrapReason: Expected "reason" to be a (possibly cloned) Error.', ); switch (e.name) { case 'AbortException': return new AbortException(e.message); case 'MissingPDFException': return new MissingPDFException(e.message); case 'PasswordException': return new PasswordException(e.message, e.code); case 'UnexpectedResponseException': return new UnexpectedResponseException(e.message, e.status); case 'UnknownErrorException': return new UnknownErrorException(e.message, e.details); default: return new UnknownErrorException(e.message, e.toString()); } } class MessageHandler { constructor(e, t, i) { this.sourceName = e; this.targetName = t; this.comObj = i; this.callbackId = 1; this.streamId = 1; this.streamSinks = Object.create(null); this.streamControllers = Object.create(null); this.callbackCapabilities = Object.create(null); this.actionHandler = Object.create(null); this._onComObjOnMessage = (e) => { const t = e.data; if (t.targetName !== this.sourceName) return; if (t.stream) { this.#O(t); return; } if (t.callback) { const e = t.callbackId, i = this.callbackCapabilities[e]; if (!i) throw new Error(`Cannot resolve callback ${e}`); delete this.callbackCapabilities[e]; if (t.callback === co) i.resolve(t.data); else { if (t.callback !== Co) throw new Error('Unexpected callback case'); i.reject(wrapReason(t.reason)); } return; } const a = this.actionHandler[t.action]; if (!a) throw new Error(`Unknown action from worker: ${t.action}`); if (t.callbackId) { const e = this.sourceName, r = t.sourceName; new Promise(function (e) { e(a(t.data)); }).then( function (a) { i.postMessage({ sourceName: e, targetName: r, callback: co, callbackId: t.callbackId, data: a, }); }, function (a) { i.postMessage({ sourceName: e, targetName: r, callback: Co, callbackId: t.callbackId, reason: wrapReason(a), }); }, ); } else t.streamId ? this.#P(t) : a(t.data); }; i.addEventListener('message', this._onComObjOnMessage); } on(e, t) { const i = this.actionHandler; if (i[e]) throw new Error(`There is already an actionName called "${e}"`); i[e] = t; } send(e, t, i) { this.comObj.postMessage( { sourceName: this.sourceName, targetName: this.targetName, action: e, data: t, }, i, ); } sendWithPromise(e, t, i) { const a = this.callbackId++, r = Promise.withResolvers(); this.callbackCapabilities[a] = r; try { this.comObj.postMessage( { sourceName: this.sourceName, targetName: this.targetName, action: e, callbackId: a, data: t, }, i, ); } catch (e) { r.reject(e); } return r.promise; } sendWithStream(e, t, i, a) { const r = this.streamId++, s = this.sourceName, n = this.targetName, o = this.comObj; return new ReadableStream( { start: (i) => { const g = Promise.withResolvers(); this.streamControllers[r] = { controller: i, startCall: g, pullCall: null, cancelCall: null, isClosed: !1, }; o.postMessage( { sourceName: s, targetName: n, action: e, streamId: r, data: t, desiredSize: i.desiredSize, }, a, ); return g.promise; }, pull: (e) => { const t = Promise.withResolvers(); this.streamControllers[r].pullCall = t; o.postMessage({ sourceName: s, targetName: n, stream: uo, streamId: r, desiredSize: e.desiredSize, }); return t.promise; }, cancel: (e) => { assert(e instanceof Error, 'cancel must have a valid reason'); const t = Promise.withResolvers(); this.streamControllers[r].cancelCall = t; this.streamControllers[r].isClosed = !0; o.postMessage({ sourceName: s, targetName: n, stream: ho, streamId: r, reason: wrapReason(e), }); return t.promise; }, }, i, ); } #P(e) { const t = e.streamId, i = this.sourceName, a = e.sourceName, r = this.comObj, s = this, n = this.actionHandler[e.action], o = { enqueue(e, s = 1, n) { if (this.isCancelled) return; const o = this.desiredSize; this.desiredSize -= s; if (o > 0 && this.desiredSize <= 0) { this.sinkCapability = Promise.withResolvers(); this.ready = this.sinkCapability.promise; } r.postMessage( { sourceName: i, targetName: a, stream: Qo, streamId: t, chunk: e }, n, ); }, close() { if (!this.isCancelled) { this.isCancelled = !0; r.postMessage({ sourceName: i, targetName: a, stream: Bo, streamId: t, }); delete s.streamSinks[t]; } }, error(e) { assert(e instanceof Error, 'error must have a valid reason'); if (!this.isCancelled) { this.isCancelled = !0; r.postMessage({ sourceName: i, targetName: a, stream: Eo, streamId: t, reason: wrapReason(e), }); } }, sinkCapability: Promise.withResolvers(), onPull: null, onCancel: null, isCancelled: !1, desiredSize: e.desiredSize, ready: null, }; o.sinkCapability.resolve(); o.ready = o.sinkCapability.promise; this.streamSinks[t] = o; new Promise(function (t) { t(n(e.data, o)); }).then( function () { r.postMessage({ sourceName: i, targetName: a, stream: po, streamId: t, success: !0, }); }, function (e) { r.postMessage({ sourceName: i, targetName: a, stream: po, streamId: t, reason: wrapReason(e), }); }, ); } #O(e) { const t = e.streamId, i = this.sourceName, a = e.sourceName, r = this.comObj, s = this.streamControllers[t], n = this.streamSinks[t]; switch (e.stream) { case po: e.success ? s.startCall.resolve() : s.startCall.reject(wrapReason(e.reason)); break; case fo: e.success ? s.pullCall.resolve() : s.pullCall.reject(wrapReason(e.reason)); break; case uo: if (!n) { r.postMessage({ sourceName: i, targetName: a, stream: fo, streamId: t, success: !0, }); break; } n.desiredSize <= 0 && e.desiredSize > 0 && n.sinkCapability.resolve(); n.desiredSize = e.desiredSize; new Promise(function (e) { e(n.onPull?.()); }).then( function () { r.postMessage({ sourceName: i, targetName: a, stream: fo, streamId: t, success: !0, }); }, function (e) { r.postMessage({ sourceName: i, targetName: a, stream: fo, streamId: t, reason: wrapReason(e), }); }, ); break; case Qo: assert(s, 'enqueue should have stream controller'); if (s.isClosed) break; s.controller.enqueue(e.chunk); break; case Bo: assert(s, 'close should have stream controller'); if (s.isClosed) break; s.isClosed = !0; s.controller.close(); this.#W(s, t); break; case Eo: assert(s, 'error should have stream controller'); s.controller.error(wrapReason(e.reason)); this.#W(s, t); break; case lo: e.success ? s.cancelCall.resolve() : s.cancelCall.reject(wrapReason(e.reason)); this.#W(s, t); break; case ho: if (!n) break; new Promise(function (t) { t(n.onCancel?.(wrapReason(e.reason))); }).then( function () { r.postMessage({ sourceName: i, targetName: a, stream: lo, streamId: t, success: !0, }); }, function (e) { r.postMessage({ sourceName: i, targetName: a, stream: lo, streamId: t, reason: wrapReason(e), }); }, ); n.sinkCapability.reject(wrapReason(e.reason)); n.isCancelled = !0; delete this.streamSinks[t]; break; default: throw new Error('Unexpected stream case'); } } async #W(e, t) { await Promise.allSettled([ e.startCall?.promise, e.pullCall?.promise, e.cancelCall?.promise, ]); delete this.streamControllers[t]; } destroy() { this.comObj.removeEventListener('message', this._onComObjOnMessage); } } class PDFWorkerStream { constructor(e) { this._msgHandler = e; this._contentLength = null; this._fullRequestReader = null; this._rangeRequestReaders = []; } getFullReader() { assert( !this._fullRequestReader, 'PDFWorkerStream.getFullReader can only be called once.', ); this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler); return this._fullRequestReader; } getRangeReader(e, t) { const i = new PDFWorkerStreamRangeReader(e, t, this._msgHandler); this._rangeRequestReaders.push(i); return i; } cancelAllRequests(e) { this._fullRequestReader?.cancel(e); for (const t of this._rangeRequestReaders.slice(0)) t.cancel(e); } } class PDFWorkerStreamReader { constructor(e) { this._msgHandler = e; this.onProgress = null; this._contentLength = null; this._isRangeSupported = !1; this._isStreamingSupported = !1; const t = this._msgHandler.sendWithStream('GetReader'); this._reader = t.getReader(); this._headersReady = this._msgHandler .sendWithPromise('ReaderHeadersReady') .then((e) => { this._isStreamingSupported = e.isStreamingSupported; this._isRangeSupported = e.isRangeSupported; this._contentLength = e.contentLength; }); } get headersReady() { return this._headersReady; } get contentLength() { return this._contentLength; } get isStreamingSupported() { return this._isStreamingSupported; } get isRangeSupported() { return this._isRangeSupported; } async read() { const { value: e, done: t } = await this._reader.read(); return t ? { value: void 0, done: !0 } : { value: e.buffer, done: !1 }; } cancel(e) { this._reader.cancel(e); } } class PDFWorkerStreamRangeReader { constructor(e, t, i) { this._msgHandler = i; this.onProgress = null; const a = this._msgHandler.sendWithStream('GetRangeReader', { begin: e, end: t, }); this._reader = a.getReader(); } get isStreamingSupported() { return !1; } async read() { const { value: e, done: t } = await this._reader.read(); return t ? { value: void 0, done: !0 } : { value: e.buffer, done: !1 }; } cancel(e) { this._reader.cancel(e); } } class WorkerTask { constructor(e) { this.name = e; this.terminated = !1; this._capability = Promise.withResolvers(); } get finished() { return this._capability.promise; } finish() { this._capability.resolve(); } terminate() { this.terminated = !0; } ensureNotTerminated() { if (this.terminated) throw new Error('Worker task was terminated'); } } class WorkerMessageHandler { static setup(e, t) { let i = !1; e.on('test', function (t) { if (!i) { i = !0; e.send('test', t instanceof Uint8Array); } }); e.on('configure', function (e) { !(function setVerbosityLevel(e) { Number.isInteger(e) && (nt = e); })(e.verbosity); }); e.on('GetDocRequest', function (e) { return WorkerMessageHandler.createDocumentHandler(e, t); }); } static createDocumentHandler(e, t) { let i, a = !1, r = null; const s = new Set(), n = getVerbosityLevel(), { docId: o, apiVersion: g } = e, c = '4.4.168'; if (g !== c) throw new Error( `The API version "${g}" does not match the Worker version "${c}".`, ); const C = []; for (const e in []) C.push(e); if (C.length) throw new Error( 'The `Array.prototype` contains unexpected enumerable properties: ' + C.join(', ') + '; thus breaking e.g. `for...in` iteration of `Array`s.', ); const h = o + '_worker'; let l = new MessageHandler(h, o, t); function ensureNotTerminated() { if (a) throw new Error('Worker was terminated'); } function startWorkerTask(e) { s.add(e); } function finishWorkerTask(e) { e.finish(); s.delete(e); } async function loadDocument(e) { await i.ensureDoc('checkHeader'); await i.ensureDoc('parseStartXRef'); await i.ensureDoc('parse', [e]); await i.ensureDoc('checkFirstPage', [e]); await i.ensureDoc('checkLastPage', [e]); const t = await i.ensureDoc('isPureXfa'); if (t) { const e = new WorkerTask('loadXfaFonts'); startWorkerTask(e); await Promise.all([ i .loadXfaFonts(l, e) .catch((e) => {}) .then(() => finishWorkerTask(e)), i.loadXfaImages(), ]); } const [a, r] = await Promise.all([ i.ensureDoc('numPages'), i.ensureDoc('fingerprints'), ]); return { numPages: a, fingerprints: r, htmlForXfa: t ? await i.ensureDoc('htmlForXfa') : null, }; } function getPdfManager({ data: e, password: t, disableAutoFetch: i, rangeChunkSize: a, length: s, docBaseUrl: n, enableXfa: g, evaluatorOptions: c, }) { const C = { source: null, disableAutoFetch: i, docBaseUrl: n, docId: o, enableXfa: g, evaluatorOptions: c, handler: l, length: s, password: t, rangeChunkSize: a, }, h = Promise.withResolvers(); let Q; if (e) { try { C.source = e; Q = new LocalPdfManager(C); h.resolve(Q); } catch (e) { h.reject(e); } return h.promise; } let E, u = []; try { E = new PDFWorkerStream(l); } catch (e) { h.reject(e); return h.promise; } const d = E.getFullReader(); d.headersReady .then(function () { if (d.isRangeSupported) { C.source = E; C.length = d.contentLength; C.disableAutoFetch ||= d.isStreamingSupported; Q = new NetworkPdfManager(C); for (const e of u) Q.sendProgressiveData(e); u = []; h.resolve(Q); r = null; } }) .catch(function (e) { h.reject(e); r = null; }); let f = 0; new Promise(function (e, t) { const readChunk = function ({ value: e, done: i }) { try { ensureNotTerminated(); if (i) { Q || (function () { const e = arrayBuffersToBytes(u); s && e.length !== s && warn('reported HTTP length is different from actual'); try { C.source = e; Q = new LocalPdfManager(C); h.resolve(Q); } catch (e) { h.reject(e); } u = []; })(); r = null; return; } f += e.byteLength; d.isStreamingSupported || l.send('DocProgress', { loaded: f, total: Math.max(f, d.contentLength || 0), }); Q ? Q.sendProgressiveData(e) : u.push(e); d.read().then(readChunk, t); } catch (e) { t(e); } }; d.read().then(readChunk, t); }).catch(function (e) { h.reject(e); r = null; }); r = function (e) { E.cancelAllRequests(e); }; return h.promise; } l.on('GetPage', function (e) { return i.getPage(e.pageIndex).then(function (e) { return Promise.all([ i.ensure(e, 'rotate'), i.ensure(e, 'ref'), i.ensure(e, 'userUnit'), i.ensure(e, 'view'), ]).then(function ([e, t, i, a]) { return { rotate: e, ref: t, refStr: t?.toString() ?? null, userUnit: i, view: a, }; }); }); }); l.on('GetPageIndex', function (e) { const t = Ref.get(e.num, e.gen); return i.ensureCatalog('getPageIndex', [t]); }); l.on('GetDestinations', function (e) { return i.ensureCatalog('destinations'); }); l.on('GetDestination', function (e) { return i.ensureCatalog('getDestination', [e.id]); }); l.on('GetPageLabels', function (e) { return i.ensureCatalog('pageLabels'); }); l.on('GetPageLayout', function (e) { return i.ensureCatalog('pageLayout'); }); l.on('GetPageMode', function (e) { return i.ensureCatalog('pageMode'); }); l.on('GetViewerPreferences', function (e) { return i.ensureCatalog('viewerPreferences'); }); l.on('GetOpenAction', function (e) { return i.ensureCatalog('openAction'); }); l.on('GetAttachments', function (e) { return i.ensureCatalog('attachments'); }); l.on('GetDocJSActions', function (e) { return i.ensureCatalog('jsActions'); }); l.on('GetPageJSActions', function ({ pageIndex: e }) { return i.getPage(e).then(function (e) { return i.ensure(e, 'jsActions'); }); }); l.on('GetOutline', function (e) { return i.ensureCatalog('documentOutline'); }); l.on('GetOptionalContentConfig', function (e) { return i.ensureCatalog('optionalContentConfig'); }); l.on('GetPermissions', function (e) { return i.ensureCatalog('permissions'); }); l.on('GetMetadata', function (e) { return Promise.all([ i.ensureDoc('documentInfo'), i.ensureCatalog('metadata'), ]); }); l.on('GetMarkInfo', function (e) { return i.ensureCatalog('markInfo'); }); l.on('GetData', function (e) { return i.requestLoadedStream().then(function (e) { return e.bytes; }); }); l.on('GetAnnotations', function ({ pageIndex: e, intent: t }) { return i.getPage(e).then(function (i) { const a = new WorkerTask(`GetAnnotations: page ${e}`); startWorkerTask(a); return i.getAnnotationsData(l, a, t).then( (e) => { finishWorkerTask(a); return e; }, (e) => { finishWorkerTask(a); throw e; }, ); }); }); l.on('GetFieldObjects', function (e) { return i.ensureDoc('fieldObjects'); }); l.on('HasJSActions', function (e) { return i.ensureDoc('hasJSActions'); }); l.on('GetCalculationOrderIds', function (e) { return i.ensureDoc('calculationOrderIds'); }); l.on( 'SaveDocument', async function ({ isPureXfa: e, numPages: t, annotationStorage: a, filename: r, }) { const s = [ i.requestLoadedStream(), i.ensureCatalog('acroForm'), i.ensureCatalog('acroFormRef'), i.ensureDoc('startXRef'), i.ensureDoc('xref'), i.ensureDoc('linearization'), i.ensureCatalog('structTreeRoot'), ], n = [], o = e ? null : getNewAnnotationsMap(a), [g, c, C, h, Q, E, u] = await Promise.all(s), d = Q.trailer.getRaw('Root') || null; let f; if (o) { u ? (await u.canUpdateStructTree({ pdfManager: i, xref: Q, newAnnotationsByPage: o, })) && (f = u) : (await StructTreeRoot.canCreateStructureTree({ catalogRef: d, pdfManager: i, newAnnotationsByPage: o, })) && (f = null); const e = AnnotationFactory.generateImages( a.values(), Q, i.evaluatorOptions.isOffscreenCanvasSupported, ), t = void 0 === f ? n : []; for (const [a, r] of o) t.push( i.getPage(a).then((t) => { const i = new WorkerTask(`Save (editor): page ${a}`); return t.saveNewAnnotations(l, i, r, e).finally(function () { finishWorkerTask(i); }); }), ); null === f ? n.push( Promise.all(t).then(async (e) => { await StructTreeRoot.createStructureTree({ newAnnotationsByPage: o, xref: Q, catalogRef: d, pdfManager: i, newRefs: e, }); return e; }), ) : f && n.push( Promise.all(t).then(async (e) => { await f.updateStructureTree({ newAnnotationsByPage: o, pdfManager: i, newRefs: e, }); return e; }), ); } if (e) n.push(i.serializeXfaData(a)); else for (let e = 0; e < t; e++) n.push( i.getPage(e).then(function (t) { const i = new WorkerTask(`Save: page ${e}`); return t.save(l, i, a).finally(function () { finishWorkerTask(i); }); }), ); const p = await Promise.all(n); let m = [], y = null; if (e) { y = p[0]; if (!y) return g.bytes; } else { m = p.flat(2); if (0 === m.length) return g.bytes; } const w = C && c instanceof Dict && m.some((e) => e.needAppearances), b = (c instanceof Dict && c.get('XFA')) || null; let D = null, S = !1; if (Array.isArray(b)) { for (let e = 0, t = b.length; e < t; e += 2) if ('datasets' === b[e]) { D = b[e + 1]; S = !0; } null === D && (D = Q.getNewTemporaryRef()); } else b && warn('Unsupported XFA type.'); let k = Object.create(null); if (Q.trailer) { const e = Object.create(null), t = Q.trailer.get('Info') || null; t instanceof Dict && t.forEach((t, i) => { 'string' == typeof i && (e[t] = stringToPDFString(i)); }); k = { rootRef: d, encryptRef: Q.trailer.getRaw('Encrypt') || null, newRef: Q.getNewTemporaryRef(), infoRef: Q.trailer.getRaw('Info') || null, info: e, fileIds: Q.trailer.get('ID') || null, startXRef: E ? h : Q.lastXRefStreamPos ?? h, filename: r, }; } return incrementalUpdate({ originalData: g.bytes, xrefInfo: k, newRefs: m, xref: Q, hasXfa: !!b, xfaDatasetsRef: D, hasXfaDatasetsEntry: S, needAppearances: w, acroFormRef: C, acroForm: c, xfaData: y, useXrefStream: isDict(Q.topDict, 'XRef'), }).finally(() => { Q.resetNewTemporaryRef(); }); }, ); l.on('GetOperatorList', function (e, t) { const a = e.pageIndex; i.getPage(a).then(function (i) { const r = new WorkerTask(`GetOperatorList: page ${a}`); startWorkerTask(r); const s = n >= yA.INFOS ? Date.now() : 0; i.getOperatorList({ handler: l, sink: t, task: r, intent: e.intent, cacheKey: e.cacheKey, annotationStorage: e.annotationStorage, }).then( function (e) { finishWorkerTask(r); s && info( `page=${a + 1} - getOperatorList: time=${ Date.now() - s }ms, len=${e.length}`, ); t.close(); }, function (e) { finishWorkerTask(r); r.terminated || t.error(e); }, ); }); }); l.on('GetTextContent', function (e, t) { const { pageIndex: a, includeMarkedContent: r, disableNormalization: s, } = e; i.getPage(a).then(function (e) { const i = new WorkerTask('GetTextContent: page ' + a); startWorkerTask(i); const o = n >= yA.INFOS ? Date.now() : 0; e.extractTextContent({ handler: l, task: i, sink: t, includeMarkedContent: r, disableNormalization: s, }).then( function () { finishWorkerTask(i); o && info( `page=${a + 1} - getTextContent: time=` + (Date.now() - o) + 'ms', ); t.close(); }, function (e) { finishWorkerTask(i); i.terminated || t.error(e); }, ); }); }); l.on('GetStructTree', function (e) { return i.getPage(e.pageIndex).then(function (e) { return i.ensure(e, 'getStructTree'); }); }); l.on('FontFallback', function (e) { return i.fontFallback(e.id, l); }); l.on('Cleanup', function (e) { return i.cleanup(!0); }); l.on('Terminate', function (e) { a = !0; const t = []; if (i) { i.terminate(new AbortException('Worker was terminated.')); const e = i.cleanup(); t.push(e); i = null; } else clearGlobalCaches(); r && r(new AbortException('Worker was terminated.')); for (const e of s) { t.push(e.finished); e.terminate(); } return Promise.all(t).then(function () { l.destroy(); l = null; }); }); l.on('Ready', function (t) { !(function setupDoc(e) { function onSuccess(e) { ensureNotTerminated(); l.send('GetDoc', { pdfInfo: e }); } function onFailure(e) { ensureNotTerminated(); if (e instanceof PasswordException) { const t = new WorkerTask(`PasswordException: response ${e.code}`); startWorkerTask(t); l.sendWithPromise('PasswordRequest', e) .then(function ({ password: e }) { finishWorkerTask(t); i.updatePassword(e); pdfManagerReady(); }) .catch(function () { finishWorkerTask(t); l.send('DocException', e); }); } else e instanceof InvalidPDFException || e instanceof MissingPDFException || e instanceof UnexpectedResponseException || e instanceof UnknownErrorException ? l.send('DocException', e) : l.send( 'DocException', new UnknownErrorException(e.message, e.toString()), ); } function pdfManagerReady() { ensureNotTerminated(); loadDocument(!1).then(onSuccess, function (e) { ensureNotTerminated(); e instanceof XRefParseException ? i.requestLoadedStream().then(function () { ensureNotTerminated(); loadDocument(!0).then(onSuccess, onFailure); }) : onFailure(e); }); } ensureNotTerminated(); getPdfManager(e) .then(function (e) { if (a) { e.terminate(new AbortException('Worker was terminated.')); throw new Error('Worker was terminated'); } i = e; i.requestLoadedStream(!0).then((e) => { l.send('DataLoaded', { length: e.bytes.byteLength }); }); }) .then(pdfManagerReady, onFailure); })(e); e = null; }); return h; } static initializeFromPort(e) { const t = new MessageHandler('worker', 'main', e); WorkerMessageHandler.setup(t, e); t.send('ready', null); } } 'undefined' == typeof window && !i && 'undefined' != typeof self && (function isMessagePort(e) { return 'function' == typeof e.postMessage && 'onmessage' in e; })(self) && WorkerMessageHandler.initializeFromPort(self); var mo = __webpack_exports__.WorkerMessageHandler; export { mo as WorkerMessageHandler };