/*!
* html2canvas 1.4.1
* Copyright (c) 2022 Niklas von Hertzen
* Released under MIT License
*/
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = function (d, b) {
extendStatics =
Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array &&
function (d, b) {
d.__proto__ = b
}) ||
function (d, b) {
for (const p in b)
if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]
}
return extendStatics(d, b)
}
function __extends(d, b) {
if (typeof b !== 'function' && b !== null)
throw new TypeError(
'Class extends value ' + String(b) + ' is not a constructor or null'
)
extendStatics(d, b)
function __() {
this.constructor = d
}
d.prototype =
b === null ? Object.create(b) : ((__.prototype = b.prototype), new __())
}
var __assign = function () {
__assign =
Object.assign ||
function __assign(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i]
for (const p in s)
if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]
}
return t
}
return __assign.apply(this, arguments)
}
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P
? value
: new P(function (resolve) {
resolve(value)
})
}
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value))
} catch (e) {
reject(e)
}
}
function rejected(value) {
try {
step(generator['throw'](value))
} catch (e) {
reject(e)
}
}
function step(result) {
result.done
? resolve(result.value)
: adopt(result.value).then(fulfilled, rejected)
}
step((generator = generator.apply(thisArg, _arguments || [])).next())
})
}
function __generator(thisArg, body) {
let _ = {
label: 0,
sent: function () {
if (t[0] & 1) throw t[1]
return t[1]
},
trys: [],
ops: []
},
f,
y,
t,
g
return (
(g = { next: verb(0), throw: verb(1), return: verb(2) }),
typeof Symbol === 'function' &&
(g[Symbol.iterator] = function () {
return this
}),
g
)
function verb(n) {
return function (v) {
return step([n, v])
}
}
function step(op) {
if (f) throw new TypeError('Generator is already executing.')
while (_)
try {
if (
((f = 1),
y &&
(t =
op[0] & 2
? y['return']
: op[0]
? y['throw'] ||
((t = y['return']) && t.call(y), 0)
: y.next) &&
!(t = t.call(y, op[1])).done)
)
return t
if (((y = 0), t)) op = [op[0] & 2, t.value]
switch (op[0]) {
case 0:
case 1:
t = op
break
case 4:
_.label++
return { value: op[1], done: false }
case 5:
_.label++
y = op[1]
op = [0]
continue
case 7:
op = _.ops.pop()
_.trys.pop()
continue
default:
if (
!((t = _.trys),
(t = t.length > 0 && t[t.length - 1])) &&
(op[0] === 6 || op[0] === 2)
) {
_ = 0
continue
}
if (
op[0] === 3 &&
(!t || (op[1] > t[0] && op[1] < t[3]))
) {
_.label = op[1]
break
}
if (op[0] === 6 && _.label < t[1]) {
_.label = t[1]
t = op
break
}
if (t && _.label < t[2]) {
_.label = t[2]
_.ops.push(op)
break
}
if (t[2]) _.ops.pop()
_.trys.pop()
continue
}
op = body.call(thisArg, _)
} catch (e) {
op = [6, e]
y = 0
} finally {
f = t = 0
}
if (op[0] & 5) throw op[1]
return { value: op[0] ? op[1] : void 0, done: true }
}
}
function __spreadArray(to, from, pack) {
if (pack || arguments.length === 2)
for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i)
ar[i] = from[i]
}
}
return to.concat(ar || from)
}
const Bounds = /** @class */ (function () {
function Bounds(left, top, width, height) {
this.left = left
this.top = top
this.width = width
this.height = height
}
Bounds.prototype.add = function (x, y, w, h) {
return new Bounds(
this.left + x,
this.top + y,
this.width + w,
this.height + h
)
}
Bounds.fromClientRect = function (context, clientRect) {
return new Bounds(
clientRect.left + context.windowBounds.left,
clientRect.top + context.windowBounds.top,
clientRect.width,
clientRect.height
)
}
Bounds.fromDOMRectList = function (context, domRectList) {
const domRect = Array.from(domRectList).find(function (rect) {
return rect.width !== 0
})
return domRect
? new Bounds(
domRect.left + context.windowBounds.left,
domRect.top + context.windowBounds.top,
domRect.width,
domRect.height
)
: Bounds.EMPTY
}
Bounds.EMPTY = new Bounds(0, 0, 0, 0)
return Bounds
})()
const parseBounds = function (context, node) {
return Bounds.fromClientRect(context, node.getBoundingClientRect())
}
const parseDocumentSize = function (document) {
const body = document.body
const documentElement = document.documentElement
if (!body || !documentElement) {
throw new Error('Unable to get document size')
}
const width = Math.max(
Math.max(body.scrollWidth, documentElement.scrollWidth),
Math.max(body.offsetWidth, documentElement.offsetWidth),
Math.max(body.clientWidth, documentElement.clientWidth)
)
const height = Math.max(
Math.max(body.scrollHeight, documentElement.scrollHeight),
Math.max(body.offsetHeight, documentElement.offsetHeight),
Math.max(body.clientHeight, documentElement.clientHeight)
)
return new Bounds(0, 0, width, height)
}
/*
* css-line-break 2.1.0
* Copyright (c) 2022 Niklas von Hertzen
* Released under MIT License
*/
const toCodePoints$1 = function (str) {
const codePoints = []
let i = 0
const length = str.length
while (i < length) {
const value = str.charCodeAt(i++)
if (value >= 0xd800 && value <= 0xdbff && i < length) {
const extra = str.charCodeAt(i++)
if ((extra & 0xfc00) === 0xdc00) {
codePoints.push(
((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000
)
} else {
codePoints.push(value)
i--
}
} else {
codePoints.push(value)
}
}
return codePoints
}
const fromCodePoint$1 = function () {
const codePoints = []
for (let _i = 0; _i < arguments.length; _i++) {
codePoints[_i] = arguments[_i]
}
if (String.fromCodePoint) {
return String.fromCodePoint.apply(String, codePoints)
}
const length = codePoints.length
if (!length) {
return ''
}
const codeUnits = []
let index = -1
let result = ''
while (++index < length) {
let codePoint = codePoints[index]
if (codePoint <= 0xffff) {
codeUnits.push(codePoint)
} else {
codePoint -= 0x10000
codeUnits.push(
(codePoint >> 10) + 0xd800,
(codePoint % 0x400) + 0xdc00
)
}
if (index + 1 === length || codeUnits.length > 0x4000) {
result += String.fromCharCode.apply(String, codeUnits)
codeUnits.length = 0
}
}
return result
}
const chars$2 =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
// Use a lookup table to find the index.
const lookup$2 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256)
for (let i$2 = 0; i$2 < chars$2.length; i$2++) {
lookup$2[chars$2.charCodeAt(i$2)] = i$2
}
/*
* utrie 1.0.2
* Copyright (c) 2022 Niklas von Hertzen
* Released under MIT License
*/
const chars$1$1 =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
// Use a lookup table to find the index.
const lookup$1$1 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256)
for (let i$1$1 = 0; i$1$1 < chars$1$1.length; i$1$1++) {
lookup$1$1[chars$1$1.charCodeAt(i$1$1)] = i$1$1
}
const decode$1 = function (base64) {
let bufferLength = base64.length * 0.75,
len = base64.length,
i,
p = 0,
encoded1,
encoded2,
encoded3,
encoded4
if (base64[base64.length - 1] === '=') {
bufferLength--
if (base64[base64.length - 2] === '=') {
bufferLength--
}
}
const buffer =
typeof ArrayBuffer !== 'undefined' &&
typeof Uint8Array !== 'undefined' &&
typeof Uint8Array.prototype.slice !== 'undefined'
? new ArrayBuffer(bufferLength)
: new Array(bufferLength)
const bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer)
for (i = 0; i < len; i += 4) {
encoded1 = lookup$1$1[base64.charCodeAt(i)]
encoded2 = lookup$1$1[base64.charCodeAt(i + 1)]
encoded3 = lookup$1$1[base64.charCodeAt(i + 2)]
encoded4 = lookup$1$1[base64.charCodeAt(i + 3)]
bytes[p++] = (encoded1 << 2) | (encoded2 >> 4)
bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2)
bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63)
}
return buffer
}
const polyUint16Array$1 = function (buffer) {
const length = buffer.length
const bytes = []
for (let i = 0; i < length; i += 2) {
bytes.push((buffer[i + 1] << 8) | buffer[i])
}
return bytes
}
const polyUint32Array$1 = function (buffer) {
const length = buffer.length
const bytes = []
for (let i = 0; i < length; i += 4) {
bytes.push(
(buffer[i + 3] << 24) |
(buffer[i + 2] << 16) |
(buffer[i + 1] << 8) |
buffer[i]
)
}
return bytes
}
/** Shift size for getting the index-2 table offset. */
const UTRIE2_SHIFT_2$1 = 5
/** Shift size for getting the index-1 table offset. */
const UTRIE2_SHIFT_1$1 = 6 + 5
/**
* Shift size for shifting left the index array values.
* Increases possible data size with 16-bit index values at the cost
* of compactability.
* This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.
*/
const UTRIE2_INDEX_SHIFT$1 = 2
/**
* Difference between the two shift sizes,
* for getting an index-1 offset from an index-2 offset. 6=11-5
*/
const UTRIE2_SHIFT_1_2$1 = UTRIE2_SHIFT_1$1 - UTRIE2_SHIFT_2$1
/**
* The part of the index-2 table for U+D800..U+DBFF stores values for
* lead surrogate code _units_ not code _points_.
* Values for lead surrogate code _points_ are indexed with this portion of the table.
* Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)
*/
const UTRIE2_LSCP_INDEX_2_OFFSET$1 = 0x10000 >> UTRIE2_SHIFT_2$1
/** Number of entries in a data block. 32=0x20 */
const UTRIE2_DATA_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_2$1
/** Mask for getting the lower bits for the in-data-block offset. */
const UTRIE2_DATA_MASK$1 = UTRIE2_DATA_BLOCK_LENGTH$1 - 1
const UTRIE2_LSCP_INDEX_2_LENGTH$1 = 0x400 >> UTRIE2_SHIFT_2$1
/** Count the lengths of both BMP pieces. 2080=0x820 */
const UTRIE2_INDEX_2_BMP_LENGTH$1 =
UTRIE2_LSCP_INDEX_2_OFFSET$1 + UTRIE2_LSCP_INDEX_2_LENGTH$1
/**
* The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.
* Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.
*/
const UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 = UTRIE2_INDEX_2_BMP_LENGTH$1
const UTRIE2_UTF8_2B_INDEX_2_LENGTH$1 =
0x800 >> 6 /* U+0800 is the first code point after 2-byte UTF-8 */
/**
* The index-1 table, only used for supplementary code points, at offset 2112=0x840.
* Variable length, for code points up to highStart, where the last single-value range starts.
* Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.
* (For 0x100000 supplementary code points U+10000..U+10ffff.)
*
* The part of the index-2 table for supplementary code points starts
* after this index-1 table.
*
* Both the index-1 table and the following part of the index-2 table
* are omitted completely if there is only BMP data.
*/
const UTRIE2_INDEX_1_OFFSET$1 =
UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 + UTRIE2_UTF8_2B_INDEX_2_LENGTH$1
/**
* Number of index-1 entries for the BMP. 32=0x20
* This part of the index-1 table is omitted from the serialized form.
*/
const UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 = 0x10000 >> UTRIE2_SHIFT_1$1
/** Number of entries in an index-2 block. 64=0x40 */
const UTRIE2_INDEX_2_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_1_2$1
/** Mask for getting the lower bits for the in-index-2-block offset. */
const UTRIE2_INDEX_2_MASK$1 = UTRIE2_INDEX_2_BLOCK_LENGTH$1 - 1
const slice16$1 = function (view, start, end) {
if (view.slice) {
return view.slice(start, end)
}
return new Uint16Array(Array.prototype.slice.call(view, start, end))
}
const slice32$1 = function (view, start, end) {
if (view.slice) {
return view.slice(start, end)
}
return new Uint32Array(Array.prototype.slice.call(view, start, end))
}
const createTrieFromBase64$1 = function (base64, _byteLength) {
const buffer = decode$1(base64)
const view32 = Array.isArray(buffer)
? polyUint32Array$1(buffer)
: new Uint32Array(buffer)
const view16 = Array.isArray(buffer)
? polyUint16Array$1(buffer)
: new Uint16Array(buffer)
const headerLength = 24
const index = slice16$1(view16, headerLength / 2, view32[4] / 2)
const data =
view32[5] === 2
? slice16$1(view16, (headerLength + view32[4]) / 2)
: slice32$1(view32, Math.ceil((headerLength + view32[4]) / 4))
return new Trie$1(view32[0], view32[1], view32[2], view32[3], index, data)
}
var Trie$1 = /** @class */ (function () {
function Trie(
initialValue,
errorValue,
highStart,
highValueIndex,
index,
data
) {
this.initialValue = initialValue
this.errorValue = errorValue
this.highStart = highStart
this.highValueIndex = highValueIndex
this.index = index
this.data = data
}
/**
* Get the value for a code point as stored in the Trie.
*
* @param codePoint the code point
* @return the value
*/
Trie.prototype.get = function (codePoint) {
let ix
if (codePoint >= 0) {
if (
codePoint < 0x0d800 ||
(codePoint > 0x0dbff && codePoint <= 0x0ffff)
) {
// Ordinary BMP code point, excluding leading surrogates.
// BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.
// 16 bit data is stored in the index array itself.
ix = this.index[codePoint >> UTRIE2_SHIFT_2$1]
ix =
(ix << UTRIE2_INDEX_SHIFT$1) +
(codePoint & UTRIE2_DATA_MASK$1)
return this.data[ix]
}
if (codePoint <= 0xffff) {
// Lead Surrogate Code Point. A Separate index section is stored for
// lead surrogate code units and code points.
// The main index has the code unit data.
// For this function, we need the code point data.
// Note: this expression could be refactored for slightly improved efficiency, but
// surrogate code points will be so rare in practice that it's not worth it.
ix =
this.index[
UTRIE2_LSCP_INDEX_2_OFFSET$1 +
((codePoint - 0xd800) >> UTRIE2_SHIFT_2$1)
]
ix =
(ix << UTRIE2_INDEX_SHIFT$1) +
(codePoint & UTRIE2_DATA_MASK$1)
return this.data[ix]
}
if (codePoint < this.highStart) {
// Supplemental code point, use two-level lookup.
ix =
UTRIE2_INDEX_1_OFFSET$1 -
UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 +
(codePoint >> UTRIE2_SHIFT_1$1)
ix = this.index[ix]
ix += (codePoint >> UTRIE2_SHIFT_2$1) & UTRIE2_INDEX_2_MASK$1
ix = this.index[ix]
ix =
(ix << UTRIE2_INDEX_SHIFT$1) +
(codePoint & UTRIE2_DATA_MASK$1)
return this.data[ix]
}
if (codePoint <= 0x10ffff) {
return this.data[this.highValueIndex]
}
}
// Fall through. The code point is outside of the legal range of 0..0x10ffff.
return this.errorValue
}
return Trie
})()
/*
* base64-arraybuffer 1.0.2
* Copyright (c) 2022 Niklas von Hertzen
* Released under MIT License
*/
const chars$3 =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
// Use a lookup table to find the index.
const lookup$3 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256)
for (let i$3 = 0; i$3 < chars$3.length; i$3++) {
lookup$3[chars$3.charCodeAt(i$3)] = i$3
}
const base64$1 =
'KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA=='
const LETTER_NUMBER_MODIFIER = 50
// Non-tailorable Line Breaking Classes
const BK = 1 // Cause a line break (after)
const CR$1 = 2 // Cause a line break (after), except between CR and LF
const LF$1 = 3 // Cause a line break (after)
const CM = 4 // Prohibit a line break between the character and the preceding character
const NL = 5 // Cause a line break (after)
const WJ = 7 // Prohibit line breaks before and after
const ZW = 8 // Provide a break opportunity
const GL = 9 // Prohibit line breaks before and after
const SP = 10 // Enable indirect line breaks
const ZWJ$1 = 11 // Prohibit line breaks within joiner sequences
// Break Opportunities
const B2 = 12 // Provide a line break opportunity before and after the character
const BA = 13 // Generally provide a line break opportunity after the character
const BB = 14 // Generally provide a line break opportunity before the character
const HY = 15 // Provide a line break opportunity after the character, except in numeric context
const CB = 16 // Provide a line break opportunity contingent on additional information
// Characters Prohibiting Certain Breaks
const CL = 17 // Prohibit line breaks before
const CP = 18 // Prohibit line breaks before
const EX = 19 // Prohibit line breaks before
const IN = 20 // Allow only indirect line breaks between pairs
const NS = 21 // Allow only indirect line breaks before
const OP = 22 // Prohibit line breaks after
const QU = 23 // Act like they are both opening and closing
// Numeric Context
const IS = 24 // Prevent breaks after any and before numeric
const NU = 25 // Form numeric expressions for line breaking purposes
const PO = 26 // Do not break following a numeric expression
const PR = 27 // Do not break in front of a numeric expression
const SY = 28 // Prevent a break before; and allow a break after
// Other Characters
const AI = 29 // Act like AL when the resolvedEAW is N; otherwise; act as ID
const AL = 30 // Are alphabetic characters or symbols that are used with alphabetic characters
const CJ = 31 // Treat as NS or ID for strict or normal breaking.
const EB = 32 // Do not break from following Emoji Modifier
const EM = 33 // Do not break from preceding Emoji Base
const H2 = 34 // Form Korean syllable blocks
const H3 = 35 // Form Korean syllable blocks
const HL = 36 // Do not break around a following hyphen; otherwise act as Alphabetic
const ID = 37 // Break before or after; except in some numeric context
const JL = 38 // Form Korean syllable blocks
const JV = 39 // Form Korean syllable blocks
const JT = 40 // Form Korean syllable blocks
const RI$1 = 41 // Keep pairs together. For pairs; break before and after other classes
const SA = 42 // Provide a line break opportunity contingent on additional, language-specific context analysis
const XX = 43 // Have as yet unknown line breaking behavior or unassigned code positions
const ea_OP = [0x2329, 0xff08]
const BREAK_MANDATORY = '!'
const BREAK_NOT_ALLOWED$1 = '×'
const BREAK_ALLOWED$1 = '÷'
const UnicodeTrie$1 = createTrieFromBase64$1(base64$1)
const ALPHABETICS = [AL, HL]
const HARD_LINE_BREAKS = [BK, CR$1, LF$1, NL]
const SPACE$1 = [SP, ZW]
const PREFIX_POSTFIX = [PR, PO]
const LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE$1)
const KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3]
const HYPHEN = [HY, BA]
const codePointsToCharacterClasses = function (codePoints, lineBreak) {
if (lineBreak === void 0) {
lineBreak = 'strict'
}
const types = []
const indices = []
const categories = []
codePoints.forEach(function (codePoint, index) {
let classType = UnicodeTrie$1.get(codePoint)
if (classType > LETTER_NUMBER_MODIFIER) {
categories.push(true)
classType -= LETTER_NUMBER_MODIFIER
} else {
categories.push(false)
}
if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) {
// U+2010, – U+2013, 〜 U+301C, ゠ U+30A0
if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) {
indices.push(index)
return types.push(CB)
}
}
if (classType === CM || classType === ZWJ$1) {
// LB10 Treat any remaining combining mark or ZWJ as AL.
if (index === 0) {
indices.push(index)
return types.push(AL)
}
// LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of
// the base character in all of the following rules. Treat ZWJ as if it were CM.
const prev = types[index - 1]
if (LINE_BREAKS.indexOf(prev) === -1) {
indices.push(indices[index - 1])
return types.push(prev)
}
indices.push(index)
return types.push(AL)
}
indices.push(index)
if (classType === CJ) {
return types.push(lineBreak === 'strict' ? NS : ID)
}
if (classType === SA) {
return types.push(AL)
}
if (classType === AI) {
return types.push(AL)
}
// For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL
// and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised
// to take into account the actual line breaking properties for these characters.
if (classType === XX) {
if (
(codePoint >= 0x20000 && codePoint <= 0x2fffd) ||
(codePoint >= 0x30000 && codePoint <= 0x3fffd)
) {
return types.push(ID)
} else {
return types.push(AL)
}
}
types.push(classType)
})
return [indices, types, categories]
}
const isAdjacentWithSpaceIgnored = function (a, b, currentIndex, classTypes) {
const current = classTypes[currentIndex]
if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) {
var i = currentIndex
while (i <= classTypes.length) {
i++
var next = classTypes[i]
if (next === b) {
return true
}
if (next !== SP) {
break
}
}
}
if (current === SP) {
var i = currentIndex
while (i > 0) {
i--
const prev = classTypes[i]
if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) {
let n = currentIndex
while (n <= classTypes.length) {
n++
var next = classTypes[n]
if (next === b) {
return true
}
if (next !== SP) {
break
}
}
}
if (prev !== SP) {
break
}
}
}
return false
}
const previousNonSpaceClassType = function (currentIndex, classTypes) {
let i = currentIndex
while (i >= 0) {
const type = classTypes[i]
if (type === SP) {
i--
} else {
return type
}
}
return 0
}
const _lineBreakAtIndex = function (
codePoints,
classTypes,
indicies,
index,
forbiddenBreaks
) {
if (indicies[index] === 0) {
return BREAK_NOT_ALLOWED$1
}
const currentIndex = index - 1
if (
Array.isArray(forbiddenBreaks) &&
forbiddenBreaks[currentIndex] === true
) {
return BREAK_NOT_ALLOWED$1
}
const beforeIndex = currentIndex - 1
const afterIndex = currentIndex + 1
const current = classTypes[currentIndex]
// LB4 Always break after hard line breaks.
// LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks.
const before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0
const next = classTypes[afterIndex]
if (current === CR$1 && next === LF$1) {
return BREAK_NOT_ALLOWED$1
}
if (HARD_LINE_BREAKS.indexOf(current) !== -1) {
return BREAK_MANDATORY
}
// LB6 Do not break before hard line breaks.
if (HARD_LINE_BREAKS.indexOf(next) !== -1) {
return BREAK_NOT_ALLOWED$1
}
// LB7 Do not break before spaces or zero width space.
if (SPACE$1.indexOf(next) !== -1) {
return BREAK_NOT_ALLOWED$1
}
// LB8 Break before any character following a zero-width space, even if one or more spaces intervene.
if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) {
return BREAK_ALLOWED$1
}
// LB8a Do not break after a zero width joiner.
if (UnicodeTrie$1.get(codePoints[currentIndex]) === ZWJ$1) {
return BREAK_NOT_ALLOWED$1
}
// zwj emojis
if (
(current === EB || current === EM) &&
UnicodeTrie$1.get(codePoints[afterIndex]) === ZWJ$1
) {
return BREAK_NOT_ALLOWED$1
}
// LB11 Do not break before or after Word joiner and related characters.
if (current === WJ || next === WJ) {
return BREAK_NOT_ALLOWED$1
}
// LB12 Do not break after NBSP and related characters.
if (current === GL) {
return BREAK_NOT_ALLOWED$1
}
// LB12a Do not break before NBSP and related characters, except after spaces and hyphens.
if ([SP, BA, HY].indexOf(current) === -1 && next === GL) {
return BREAK_NOT_ALLOWED$1
}
// LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces.
if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) {
return BREAK_NOT_ALLOWED$1
}
// LB14 Do not break after ‘[’, even after spaces.
if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {
return BREAK_NOT_ALLOWED$1
}
// LB15 Do not break within ‘”[’, even with intervening spaces.
if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {
return BREAK_NOT_ALLOWED$1
}
// LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces.
if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) {
return BREAK_NOT_ALLOWED$1
}
// LB17 Do not break within ‘——’, even with intervening spaces.
if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {
return BREAK_NOT_ALLOWED$1
}
// LB18 Break after spaces.
if (current === SP) {
return BREAK_ALLOWED$1
}
// LB19 Do not break before or after quotation marks, such as ‘ ” ’.
if (current === QU || next === QU) {
return BREAK_NOT_ALLOWED$1
}
// LB20 Break before and after unresolved CB.
if (next === CB || current === CB) {
return BREAK_ALLOWED$1
}
// LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents.
if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) {
return BREAK_NOT_ALLOWED$1
}
// LB21a Don't break after Hebrew + Hyphen.
if (before === HL && HYPHEN.indexOf(current) !== -1) {
return BREAK_NOT_ALLOWED$1
}
// LB21b Don’t break between Solidus and Hebrew letters.
if (current === SY && next === HL) {
return BREAK_NOT_ALLOWED$1
}
// LB22 Do not break before ellipsis.
if (next === IN) {
return BREAK_NOT_ALLOWED$1
}
// LB23 Do not break between digits and letters.
if (
(ALPHABETICS.indexOf(next) !== -1 && current === NU) ||
(ALPHABETICS.indexOf(current) !== -1 && next === NU)
) {
return BREAK_NOT_ALLOWED$1
}
// LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.
if (
(current === PR && [ID, EB, EM].indexOf(next) !== -1) ||
([ID, EB, EM].indexOf(current) !== -1 && next === PO)
) {
return BREAK_NOT_ALLOWED$1
}
// LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix.
if (
(ALPHABETICS.indexOf(current) !== -1 &&
PREFIX_POSTFIX.indexOf(next) !== -1) ||
(PREFIX_POSTFIX.indexOf(current) !== -1 &&
ALPHABETICS.indexOf(next) !== -1)
) {
return BREAK_NOT_ALLOWED$1
}
// LB25 Do not break between the following pairs of classes relevant to numbers:
if (
// (PR | PO) × ( OP | HY )? NU
([PR, PO].indexOf(current) !== -1 &&
(next === NU ||
([OP, HY].indexOf(next) !== -1 &&
classTypes[afterIndex + 1] === NU))) ||
// ( OP | HY ) × NU
([OP, HY].indexOf(current) !== -1 && next === NU) ||
// NU × (NU | SY | IS)
(current === NU && [NU, SY, IS].indexOf(next) !== -1)
) {
return BREAK_NOT_ALLOWED$1
}
// NU (NU | SY | IS)* × (NU | SY | IS | CL | CP)
if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {
var prevIndex = currentIndex
while (prevIndex >= 0) {
var type = classTypes[prevIndex]
if (type === NU) {
return BREAK_NOT_ALLOWED$1
} else if ([SY, IS].indexOf(type) !== -1) {
prevIndex--
} else {
break
}
}
}
// NU (NU | SY | IS)* (CL | CP)? × (PO | PR))
if ([PR, PO].indexOf(next) !== -1) {
var prevIndex =
[CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex
while (prevIndex >= 0) {
var type = classTypes[prevIndex]
if (type === NU) {
return BREAK_NOT_ALLOWED$1
} else if ([SY, IS].indexOf(type) !== -1) {
prevIndex--
} else {
break
}
}
}
// LB26 Do not break a Korean syllable.
if (
(JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) ||
([JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1) ||
([JT, H3].indexOf(current) !== -1 && next === JT)
) {
return BREAK_NOT_ALLOWED$1
}
// LB27 Treat a Korean Syllable Block the same as ID.
if (
(KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 &&
[IN, PO].indexOf(next) !== -1) ||
(KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)
) {
return BREAK_NOT_ALLOWED$1
}
// LB28 Do not break between alphabetics (“at”).
if (
ALPHABETICS.indexOf(current) !== -1 &&
ALPHABETICS.indexOf(next) !== -1
) {
return BREAK_NOT_ALLOWED$1
}
// LB29 Do not break between numeric punctuation and alphabetics (“e.g.”).
if (current === IS && ALPHABETICS.indexOf(next) !== -1) {
return BREAK_NOT_ALLOWED$1
}
// LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses.
if (
(ALPHABETICS.concat(NU).indexOf(current) !== -1 &&
next === OP &&
ea_OP.indexOf(codePoints[afterIndex]) === -1) ||
(ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)
) {
return BREAK_NOT_ALLOWED$1
}
// LB30a Break between two regional indicator symbols if and only if there are an even number of regional
// indicators preceding the position of the break.
if (current === RI$1 && next === RI$1) {
let i = indicies[currentIndex]
let count = 1
while (i > 0) {
i--
if (classTypes[i] === RI$1) {
count++
} else {
break
}
}
if (count % 2 !== 0) {
return BREAK_NOT_ALLOWED$1
}
}
// LB30b Do not break between an emoji base and an emoji modifier.
if (current === EB && next === EM) {
return BREAK_NOT_ALLOWED$1
}
return BREAK_ALLOWED$1
}
const cssFormattedClasses = function (codePoints, options) {
if (!options) {
options = { lineBreak: 'normal', wordBreak: 'normal' }
}
let _a = codePointsToCharacterClasses(codePoints, options.lineBreak),
indicies = _a[0],
classTypes = _a[1],
isLetterNumber = _a[2]
if (
options.wordBreak === 'break-all' ||
options.wordBreak === 'break-word'
) {
classTypes = classTypes.map(function (type) {
return [NU, AL, SA].indexOf(type) !== -1 ? ID : type
})
}
const forbiddenBreakpoints =
options.wordBreak === 'keep-all'
? isLetterNumber.map(function (letterNumber, i) {
return (
letterNumber &&
codePoints[i] >= 0x4e00 &&
codePoints[i] <= 0x9fff
)
})
: undefined
return [indicies, classTypes, forbiddenBreakpoints]
}
const Break = /** @class */ (function () {
function Break(codePoints, lineBreak, start, end) {
this.codePoints = codePoints
this.required = lineBreak === BREAK_MANDATORY
this.start = start
this.end = end
}
Break.prototype.slice = function () {
return fromCodePoint$1.apply(
void 0,
this.codePoints.slice(this.start, this.end)
)
}
return Break
})()
const LineBreaker = function (str, options) {
const codePoints = toCodePoints$1(str)
const _a = cssFormattedClasses(codePoints, options),
indicies = _a[0],
classTypes = _a[1],
forbiddenBreakpoints = _a[2]
const length = codePoints.length
let lastEnd = 0
let nextIndex = 0
return {
next: function () {
if (nextIndex >= length) {
return { done: true, value: null }
}
let lineBreak = BREAK_NOT_ALLOWED$1
while (
nextIndex < length &&
(lineBreak = _lineBreakAtIndex(
codePoints,
classTypes,
indicies,
++nextIndex,
forbiddenBreakpoints
)) === BREAK_NOT_ALLOWED$1
) {}
if (lineBreak !== BREAK_NOT_ALLOWED$1 || nextIndex === length) {
const value = new Break(
codePoints,
lineBreak,
lastEnd,
nextIndex
)
lastEnd = nextIndex
return { value: value, done: false }
}
return { done: true, value: null }
}
}
}
// https://www.w3.org/TR/css-syntax-3
const FLAG_UNRESTRICTED = 1 << 0
const FLAG_ID = 1 << 1
const FLAG_INTEGER = 1 << 2
const FLAG_NUMBER = 1 << 3
const LINE_FEED = 0x000a
const SOLIDUS = 0x002f
const REVERSE_SOLIDUS = 0x005c
const CHARACTER_TABULATION = 0x0009
const SPACE = 0x0020
const QUOTATION_MARK = 0x0022
const EQUALS_SIGN = 0x003d
const NUMBER_SIGN = 0x0023
const DOLLAR_SIGN = 0x0024
const PERCENTAGE_SIGN = 0x0025
const APOSTROPHE = 0x0027
const LEFT_PARENTHESIS = 0x0028
const RIGHT_PARENTHESIS = 0x0029
const LOW_LINE = 0x005f
const HYPHEN_MINUS = 0x002d
const EXCLAMATION_MARK = 0x0021
const LESS_THAN_SIGN = 0x003c
const GREATER_THAN_SIGN = 0x003e
const COMMERCIAL_AT = 0x0040
const LEFT_SQUARE_BRACKET = 0x005b
const RIGHT_SQUARE_BRACKET = 0x005d
const CIRCUMFLEX_ACCENT = 0x003d
const LEFT_CURLY_BRACKET = 0x007b
const QUESTION_MARK = 0x003f
const RIGHT_CURLY_BRACKET = 0x007d
const VERTICAL_LINE = 0x007c
const TILDE = 0x007e
const CONTROL = 0x0080
const REPLACEMENT_CHARACTER = 0xfffd
const ASTERISK = 0x002a
const PLUS_SIGN = 0x002b
const COMMA = 0x002c
const COLON = 0x003a
const SEMICOLON = 0x003b
const FULL_STOP = 0x002e
const NULL = 0x0000
const BACKSPACE = 0x0008
const LINE_TABULATION = 0x000b
const SHIFT_OUT = 0x000e
const INFORMATION_SEPARATOR_ONE = 0x001f
const DELETE = 0x007f
const EOF = -1
const ZERO = 0x0030
const a = 0x0061
const e = 0x0065
const f = 0x0066
const u = 0x0075
const z = 0x007a
const A = 0x0041
const E = 0x0045
const F = 0x0046
const U = 0x0055
const Z = 0x005a
const isDigit = function (codePoint) {
return codePoint >= ZERO && codePoint <= 0x0039
}
const isSurrogateCodePoint = function (codePoint) {
return codePoint >= 0xd800 && codePoint <= 0xdfff
}
const isHex = function (codePoint) {
return (
isDigit(codePoint) ||
(codePoint >= A && codePoint <= F) ||
(codePoint >= a && codePoint <= f)
)
}
const isLowerCaseLetter = function (codePoint) {
return codePoint >= a && codePoint <= z
}
const isUpperCaseLetter = function (codePoint) {
return codePoint >= A && codePoint <= Z
}
const isLetter = function (codePoint) {
return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint)
}
const isNonASCIICodePoint = function (codePoint) {
return codePoint >= CONTROL
}
const isWhiteSpace = function (codePoint) {
return (
codePoint === LINE_FEED ||
codePoint === CHARACTER_TABULATION ||
codePoint === SPACE
)
}
const isNameStartCodePoint = function (codePoint) {
return (
isLetter(codePoint) ||
isNonASCIICodePoint(codePoint) ||
codePoint === LOW_LINE
)
}
const isNameCodePoint = function (codePoint) {
return (
isNameStartCodePoint(codePoint) ||
isDigit(codePoint) ||
codePoint === HYPHEN_MINUS
)
}
const isNonPrintableCodePoint = function (codePoint) {
return (
(codePoint >= NULL && codePoint <= BACKSPACE) ||
codePoint === LINE_TABULATION ||
(codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) ||
codePoint === DELETE
)
}
const isValidEscape = function (c1, c2) {
if (c1 !== REVERSE_SOLIDUS) {
return false
}
return c2 !== LINE_FEED
}
const isIdentifierStart = function (c1, c2, c3) {
if (c1 === HYPHEN_MINUS) {
return isNameStartCodePoint(c2) || isValidEscape(c2, c3)
} else if (isNameStartCodePoint(c1)) {
return true
} else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {
return true
}
return false
}
const isNumberStart = function (c1, c2, c3) {
if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {
if (isDigit(c2)) {
return true
}
return c2 === FULL_STOP && isDigit(c3)
}
if (c1 === FULL_STOP) {
return isDigit(c2)
}
return isDigit(c1)
}
const stringToNumber = function (codePoints) {
let c = 0
let sign = 1
if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {
if (codePoints[c] === HYPHEN_MINUS) {
sign = -1
}
c++
}
const integers = []
while (isDigit(codePoints[c])) {
integers.push(codePoints[c++])
}
const int = integers.length
? parseInt(fromCodePoint$1.apply(void 0, integers), 10)
: 0
if (codePoints[c] === FULL_STOP) {
c++
}
const fraction = []
while (isDigit(codePoints[c])) {
fraction.push(codePoints[c++])
}
const fracd = fraction.length
const frac = fracd
? parseInt(fromCodePoint$1.apply(void 0, fraction), 10)
: 0
if (codePoints[c] === E || codePoints[c] === e) {
c++
}
let expsign = 1
if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {
if (codePoints[c] === HYPHEN_MINUS) {
expsign = -1
}
c++
}
const exponent = []
while (isDigit(codePoints[c])) {
exponent.push(codePoints[c++])
}
const exp = exponent.length
? parseInt(fromCodePoint$1.apply(void 0, exponent), 10)
: 0
return (
sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp)
)
}
const LEFT_PARENTHESIS_TOKEN = {
type: 2 /* LEFT_PARENTHESIS_TOKEN */
}
const RIGHT_PARENTHESIS_TOKEN = {
type: 3 /* RIGHT_PARENTHESIS_TOKEN */
}
const COMMA_TOKEN = { type: 4 /* COMMA_TOKEN */ }
const SUFFIX_MATCH_TOKEN = { type: 13 /* SUFFIX_MATCH_TOKEN */ }
const PREFIX_MATCH_TOKEN = { type: 8 /* PREFIX_MATCH_TOKEN */ }
const COLUMN_TOKEN = { type: 21 /* COLUMN_TOKEN */ }
const DASH_MATCH_TOKEN = { type: 9 /* DASH_MATCH_TOKEN */ }
const INCLUDE_MATCH_TOKEN = { type: 10 /* INCLUDE_MATCH_TOKEN */ }
const LEFT_CURLY_BRACKET_TOKEN = {
type: 11 /* LEFT_CURLY_BRACKET_TOKEN */
}
const RIGHT_CURLY_BRACKET_TOKEN = {
type: 12 /* RIGHT_CURLY_BRACKET_TOKEN */
}
const SUBSTRING_MATCH_TOKEN = { type: 14 /* SUBSTRING_MATCH_TOKEN */ }
const BAD_URL_TOKEN = { type: 23 /* BAD_URL_TOKEN */ }
const BAD_STRING_TOKEN = { type: 1 /* BAD_STRING_TOKEN */ }
const CDO_TOKEN = { type: 25 /* CDO_TOKEN */ }
const CDC_TOKEN = { type: 24 /* CDC_TOKEN */ }
const COLON_TOKEN = { type: 26 /* COLON_TOKEN */ }
const SEMICOLON_TOKEN = { type: 27 /* SEMICOLON_TOKEN */ }
const LEFT_SQUARE_BRACKET_TOKEN = {
type: 28 /* LEFT_SQUARE_BRACKET_TOKEN */
}
const RIGHT_SQUARE_BRACKET_TOKEN = {
type: 29 /* RIGHT_SQUARE_BRACKET_TOKEN */
}
const WHITESPACE_TOKEN = { type: 31 /* WHITESPACE_TOKEN */ }
const EOF_TOKEN = { type: 32 /* EOF_TOKEN */ }
const Tokenizer = /** @class */ (function () {
function Tokenizer() {
this._value = []
}
Tokenizer.prototype.write = function (chunk) {
this._value = this._value.concat(toCodePoints$1(chunk))
}
Tokenizer.prototype.read = function () {
const tokens = []
let token = this.consumeToken()
while (token !== EOF_TOKEN) {
tokens.push(token)
token = this.consumeToken()
}
return tokens
}
Tokenizer.prototype.consumeToken = function () {
const codePoint = this.consumeCodePoint()
switch (codePoint) {
case QUOTATION_MARK:
return this.consumeStringToken(QUOTATION_MARK)
case NUMBER_SIGN:
var c1 = this.peekCodePoint(0)
var c2 = this.peekCodePoint(1)
var c3 = this.peekCodePoint(2)
if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {
const flags = isIdentifierStart(c1, c2, c3)
? FLAG_ID
: FLAG_UNRESTRICTED
var value = this.consumeName()
return {
type: 5 /* HASH_TOKEN */,
value: value,
flags: flags
}
}
break
case DOLLAR_SIGN:
if (this.peekCodePoint(0) === EQUALS_SIGN) {
this.consumeCodePoint()
return SUFFIX_MATCH_TOKEN
}
break
case APOSTROPHE:
return this.consumeStringToken(APOSTROPHE)
case LEFT_PARENTHESIS:
return LEFT_PARENTHESIS_TOKEN
case RIGHT_PARENTHESIS:
return RIGHT_PARENTHESIS_TOKEN
case ASTERISK:
if (this.peekCodePoint(0) === EQUALS_SIGN) {
this.consumeCodePoint()
return SUBSTRING_MATCH_TOKEN
}
break
case PLUS_SIGN:
if (
isNumberStart(
codePoint,
this.peekCodePoint(0),
this.peekCodePoint(1)
)
) {
this.reconsumeCodePoint(codePoint)
return this.consumeNumericToken()
}
break
case COMMA:
return COMMA_TOKEN
case HYPHEN_MINUS:
var e1 = codePoint
var e2 = this.peekCodePoint(0)
var e3 = this.peekCodePoint(1)
if (isNumberStart(e1, e2, e3)) {
this.reconsumeCodePoint(codePoint)
return this.consumeNumericToken()
}
if (isIdentifierStart(e1, e2, e3)) {
this.reconsumeCodePoint(codePoint)
return this.consumeIdentLikeToken()
}
if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {
this.consumeCodePoint()
this.consumeCodePoint()
return CDC_TOKEN
}
break
case FULL_STOP:
if (
isNumberStart(
codePoint,
this.peekCodePoint(0),
this.peekCodePoint(1)
)
) {
this.reconsumeCodePoint(codePoint)
return this.consumeNumericToken()
}
break
case SOLIDUS:
if (this.peekCodePoint(0) === ASTERISK) {
this.consumeCodePoint()
while (true) {
let c = this.consumeCodePoint()
if (c === ASTERISK) {
c = this.consumeCodePoint()
if (c === SOLIDUS) {
return this.consumeToken()
}
}
if (c === EOF) {
return this.consumeToken()
}
}
}
break
case COLON:
return COLON_TOKEN
case SEMICOLON:
return SEMICOLON_TOKEN
case LESS_THAN_SIGN:
if (
this.peekCodePoint(0) === EXCLAMATION_MARK &&
this.peekCodePoint(1) === HYPHEN_MINUS &&
this.peekCodePoint(2) === HYPHEN_MINUS
) {
this.consumeCodePoint()
this.consumeCodePoint()
return CDO_TOKEN
}
break
case COMMERCIAL_AT:
var a1 = this.peekCodePoint(0)
var a2 = this.peekCodePoint(1)
var a3 = this.peekCodePoint(2)
if (isIdentifierStart(a1, a2, a3)) {
var value = this.consumeName()
return { type: 7 /* AT_KEYWORD_TOKEN */, value: value }
}
break
case LEFT_SQUARE_BRACKET:
return LEFT_SQUARE_BRACKET_TOKEN
case REVERSE_SOLIDUS:
if (isValidEscape(codePoint, this.peekCodePoint(0))) {
this.reconsumeCodePoint(codePoint)
return this.consumeIdentLikeToken()
}
break
case RIGHT_SQUARE_BRACKET:
return RIGHT_SQUARE_BRACKET_TOKEN
case CIRCUMFLEX_ACCENT:
if (this.peekCodePoint(0) === EQUALS_SIGN) {
this.consumeCodePoint()
return PREFIX_MATCH_TOKEN
}
break
case LEFT_CURLY_BRACKET:
return LEFT_CURLY_BRACKET_TOKEN
case RIGHT_CURLY_BRACKET:
return RIGHT_CURLY_BRACKET_TOKEN
case u:
case U:
var u1 = this.peekCodePoint(0)
var u2 = this.peekCodePoint(1)
if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) {
this.consumeCodePoint()
this.consumeUnicodeRangeToken()
}
this.reconsumeCodePoint(codePoint)
return this.consumeIdentLikeToken()
case VERTICAL_LINE:
if (this.peekCodePoint(0) === EQUALS_SIGN) {
this.consumeCodePoint()
return DASH_MATCH_TOKEN
}
if (this.peekCodePoint(0) === VERTICAL_LINE) {
this.consumeCodePoint()
return COLUMN_TOKEN
}
break
case TILDE:
if (this.peekCodePoint(0) === EQUALS_SIGN) {
this.consumeCodePoint()
return INCLUDE_MATCH_TOKEN
}
break
case EOF:
return EOF_TOKEN
}
if (isWhiteSpace(codePoint)) {
this.consumeWhiteSpace()
return WHITESPACE_TOKEN
}
if (isDigit(codePoint)) {
this.reconsumeCodePoint(codePoint)
return this.consumeNumericToken()
}
if (isNameStartCodePoint(codePoint)) {
this.reconsumeCodePoint(codePoint)
return this.consumeIdentLikeToken()
}
return { type: 6 /* DELIM_TOKEN */, value: fromCodePoint$1(codePoint) }
}
Tokenizer.prototype.consumeCodePoint = function () {
const value = this._value.shift()
return typeof value === 'undefined' ? -1 : value
}
Tokenizer.prototype.reconsumeCodePoint = function (codePoint) {
this._value.unshift(codePoint)
}
Tokenizer.prototype.peekCodePoint = function (delta) {
if (delta >= this._value.length) {
return -1
}
return this._value[delta]
}
Tokenizer.prototype.consumeUnicodeRangeToken = function () {
const digits = []
let codePoint = this.consumeCodePoint()
while (isHex(codePoint) && digits.length < 6) {
digits.push(codePoint)
codePoint = this.consumeCodePoint()
}
let questionMarks = false
while (codePoint === QUESTION_MARK && digits.length < 6) {
digits.push(codePoint)
codePoint = this.consumeCodePoint()
questionMarks = true
}
if (questionMarks) {
const start_1 = parseInt(
fromCodePoint$1.apply(
void 0,
digits.map(function (digit) {
return digit === QUESTION_MARK ? ZERO : digit
})
),
16
)
var end = parseInt(
fromCodePoint$1.apply(
void 0,
digits.map(function (digit) {
return digit === QUESTION_MARK ? F : digit
})
),
16
)
return {
type: 30 /* UNICODE_RANGE_TOKEN */,
start: start_1,
end: end
}
}
const start = parseInt(fromCodePoint$1.apply(void 0, digits), 16)
if (
this.peekCodePoint(0) === HYPHEN_MINUS &&
isHex(this.peekCodePoint(1))
) {
this.consumeCodePoint()
codePoint = this.consumeCodePoint()
const endDigits = []
while (isHex(codePoint) && endDigits.length < 6) {
endDigits.push(codePoint)
codePoint = this.consumeCodePoint()
}
var end = parseInt(fromCodePoint$1.apply(void 0, endDigits), 16)
return {
type: 30 /* UNICODE_RANGE_TOKEN */,
start: start,
end: end
}
} else {
return {
type: 30 /* UNICODE_RANGE_TOKEN */,
start: start,
end: start
}
}
}
Tokenizer.prototype.consumeIdentLikeToken = function () {
const value = this.consumeName()
if (
value.toLowerCase() === 'url' &&
this.peekCodePoint(0) === LEFT_PARENTHESIS
) {
this.consumeCodePoint()
return this.consumeUrlToken()
} else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {
this.consumeCodePoint()
return { type: 19 /* FUNCTION_TOKEN */, value: value }
}
return { type: 20 /* IDENT_TOKEN */, value: value }
}
Tokenizer.prototype.consumeUrlToken = function () {
const value = []
this.consumeWhiteSpace()
if (this.peekCodePoint(0) === EOF) {
return { type: 22 /* URL_TOKEN */, value: '' }
}
const next = this.peekCodePoint(0)
if (next === APOSTROPHE || next === QUOTATION_MARK) {
const stringToken = this.consumeStringToken(this.consumeCodePoint())
if (stringToken.type === 0 /* STRING_TOKEN */) {
this.consumeWhiteSpace()
if (
this.peekCodePoint(0) === EOF ||
this.peekCodePoint(0) === RIGHT_PARENTHESIS
) {
this.consumeCodePoint()
return {
type: 22 /* URL_TOKEN */,
value: stringToken.value
}
}
}
this.consumeBadUrlRemnants()
return BAD_URL_TOKEN
}
while (true) {
const codePoint = this.consumeCodePoint()
if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {
return {
type: 22 /* URL_TOKEN */,
value: fromCodePoint$1.apply(void 0, value)
}
} else if (isWhiteSpace(codePoint)) {
this.consumeWhiteSpace()
if (
this.peekCodePoint(0) === EOF ||
this.peekCodePoint(0) === RIGHT_PARENTHESIS
) {
this.consumeCodePoint()
return {
type: 22 /* URL_TOKEN */,
value: fromCodePoint$1.apply(void 0, value)
}
}
this.consumeBadUrlRemnants()
return BAD_URL_TOKEN
} else if (
codePoint === QUOTATION_MARK ||
codePoint === APOSTROPHE ||
codePoint === LEFT_PARENTHESIS ||
isNonPrintableCodePoint(codePoint)
) {
this.consumeBadUrlRemnants()
return BAD_URL_TOKEN
} else if (codePoint === REVERSE_SOLIDUS) {
if (isValidEscape(codePoint, this.peekCodePoint(0))) {
value.push(this.consumeEscapedCodePoint())
} else {
this.consumeBadUrlRemnants()
return BAD_URL_TOKEN
}
} else {
value.push(codePoint)
}
}
}
Tokenizer.prototype.consumeWhiteSpace = function () {
while (isWhiteSpace(this.peekCodePoint(0))) {
this.consumeCodePoint()
}
}
Tokenizer.prototype.consumeBadUrlRemnants = function () {
while (true) {
const codePoint = this.consumeCodePoint()
if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {
return
}
if (isValidEscape(codePoint, this.peekCodePoint(0))) {
this.consumeEscapedCodePoint()
}
}
}
Tokenizer.prototype.consumeStringSlice = function (count) {
const SLICE_STACK_SIZE = 50000
let value = ''
while (count > 0) {
const amount = Math.min(SLICE_STACK_SIZE, count)
value += fromCodePoint$1.apply(
void 0,
this._value.splice(0, amount)
)
count -= amount
}
this._value.shift()
return value
}
Tokenizer.prototype.consumeStringToken = function (endingCodePoint) {
let value = ''
let i = 0
do {
const codePoint = this._value[i]
if (
codePoint === EOF ||
codePoint === undefined ||
codePoint === endingCodePoint
) {
value += this.consumeStringSlice(i)
return { type: 0 /* STRING_TOKEN */, value: value }
}
if (codePoint === LINE_FEED) {
this._value.splice(0, i)
return BAD_STRING_TOKEN
}
if (codePoint === REVERSE_SOLIDUS) {
const next = this._value[i + 1]
if (next !== EOF && next !== undefined) {
if (next === LINE_FEED) {
value += this.consumeStringSlice(i)
i = -1
this._value.shift()
} else if (isValidEscape(codePoint, next)) {
value += this.consumeStringSlice(i)
value += fromCodePoint$1(this.consumeEscapedCodePoint())
i = -1
}
}
}
i++
} while (true)
}
Tokenizer.prototype.consumeNumber = function () {
const repr = []
let type = FLAG_INTEGER
let c1 = this.peekCodePoint(0)
if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {
repr.push(this.consumeCodePoint())
}
while (isDigit(this.peekCodePoint(0))) {
repr.push(this.consumeCodePoint())
}
c1 = this.peekCodePoint(0)
let c2 = this.peekCodePoint(1)
if (c1 === FULL_STOP && isDigit(c2)) {
repr.push(this.consumeCodePoint(), this.consumeCodePoint())
type = FLAG_NUMBER
while (isDigit(this.peekCodePoint(0))) {
repr.push(this.consumeCodePoint())
}
}
c1 = this.peekCodePoint(0)
c2 = this.peekCodePoint(1)
const c3 = this.peekCodePoint(2)
if (
(c1 === E || c1 === e) &&
(((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) ||
isDigit(c2))
) {
repr.push(this.consumeCodePoint(), this.consumeCodePoint())
type = FLAG_NUMBER
while (isDigit(this.peekCodePoint(0))) {
repr.push(this.consumeCodePoint())
}
}
return [stringToNumber(repr), type]
}
Tokenizer.prototype.consumeNumericToken = function () {
const _a = this.consumeNumber(),
number = _a[0],
flags = _a[1]
const c1 = this.peekCodePoint(0)
const c2 = this.peekCodePoint(1)
const c3 = this.peekCodePoint(2)
if (isIdentifierStart(c1, c2, c3)) {
const unit = this.consumeName()
return {
type: 15 /* DIMENSION_TOKEN */,
number: number,
flags: flags,
unit: unit
}
}
if (c1 === PERCENTAGE_SIGN) {
this.consumeCodePoint()
return {
type: 16 /* PERCENTAGE_TOKEN */,
number: number,
flags: flags
}
}
return { type: 17 /* NUMBER_TOKEN */, number: number, flags: flags }
}
Tokenizer.prototype.consumeEscapedCodePoint = function () {
const codePoint = this.consumeCodePoint()
if (isHex(codePoint)) {
let hex = fromCodePoint$1(codePoint)
while (isHex(this.peekCodePoint(0)) && hex.length < 6) {
hex += fromCodePoint$1(this.consumeCodePoint())
}
if (isWhiteSpace(this.peekCodePoint(0))) {
this.consumeCodePoint()
}
const hexCodePoint = parseInt(hex, 16)
if (
hexCodePoint === 0 ||
isSurrogateCodePoint(hexCodePoint) ||
hexCodePoint > 0x10ffff
) {
return REPLACEMENT_CHARACTER
}
return hexCodePoint
}
if (codePoint === EOF) {
return REPLACEMENT_CHARACTER
}
return codePoint
}
Tokenizer.prototype.consumeName = function () {
let result = ''
while (true) {
const codePoint = this.consumeCodePoint()
if (isNameCodePoint(codePoint)) {
result += fromCodePoint$1(codePoint)
} else if (isValidEscape(codePoint, this.peekCodePoint(0))) {
result += fromCodePoint$1(this.consumeEscapedCodePoint())
} else {
this.reconsumeCodePoint(codePoint)
return result
}
}
}
return Tokenizer
})()
const Parser = /** @class */ (function () {
function Parser(tokens) {
this._tokens = tokens
}
Parser.create = function (value) {
const tokenizer = new Tokenizer()
tokenizer.write(value)
return new Parser(tokenizer.read())
}
Parser.parseValue = function (value) {
return Parser.create(value).parseComponentValue()
}
Parser.parseValues = function (value) {
return Parser.create(value).parseComponentValues()
}
Parser.prototype.parseComponentValue = function () {
let token = this.consumeToken()
while (token.type === 31 /* WHITESPACE_TOKEN */) {
token = this.consumeToken()
}
if (token.type === 32 /* EOF_TOKEN */) {
throw new SyntaxError(
'Error parsing CSS component value, unexpected EOF'
)
}
this.reconsumeToken(token)
const value = this.consumeComponentValue()
do {
token = this.consumeToken()
} while (token.type === 31 /* WHITESPACE_TOKEN */)
if (token.type === 32 /* EOF_TOKEN */) {
return value
}
throw new SyntaxError(
'Error parsing CSS component value, multiple values found when expecting only one'
)
}
Parser.prototype.parseComponentValues = function () {
const values = []
while (true) {
const value = this.consumeComponentValue()
if (value.type === 32 /* EOF_TOKEN */) {
return values
}
values.push(value)
values.push()
}
}
Parser.prototype.consumeComponentValue = function () {
const token = this.consumeToken()
switch (token.type) {
case 11 /* LEFT_CURLY_BRACKET_TOKEN */:
case 28 /* LEFT_SQUARE_BRACKET_TOKEN */:
case 2 /* LEFT_PARENTHESIS_TOKEN */:
return this.consumeSimpleBlock(token.type)
case 19 /* FUNCTION_TOKEN */:
return this.consumeFunction(token)
}
return token
}
Parser.prototype.consumeSimpleBlock = function (type) {
const block = { type: type, values: [] }
let token = this.consumeToken()
while (true) {
if (
token.type === 32 /* EOF_TOKEN */ ||
isEndingTokenFor(token, type)
) {
return block
}
this.reconsumeToken(token)
block.values.push(this.consumeComponentValue())
token = this.consumeToken()
}
}
Parser.prototype.consumeFunction = function (functionToken) {
const cssFunction = {
name: functionToken.value,
values: [],
type: 18 /* FUNCTION */
}
while (true) {
const token = this.consumeToken()
if (
token.type === 32 /* EOF_TOKEN */ ||
token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */
) {
return cssFunction
}
this.reconsumeToken(token)
cssFunction.values.push(this.consumeComponentValue())
}
}
Parser.prototype.consumeToken = function () {
const token = this._tokens.shift()
return typeof token === 'undefined' ? EOF_TOKEN : token
}
Parser.prototype.reconsumeToken = function (token) {
this._tokens.unshift(token)
}
return Parser
})()
const isDimensionToken = function (token) {
return token.type === 15 /* DIMENSION_TOKEN */
}
const isNumberToken = function (token) {
return token.type === 17 /* NUMBER_TOKEN */
}
const isIdentToken = function (token) {
return token.type === 20 /* IDENT_TOKEN */
}
const isStringToken = function (token) {
return token.type === 0 /* STRING_TOKEN */
}
const isIdentWithValue = function (token, value) {
return isIdentToken(token) && token.value === value
}
const nonWhiteSpace = function (token) {
return token.type !== 31 /* WHITESPACE_TOKEN */
}
const nonFunctionArgSeparator = function (token) {
return (
token.type !== 31 /* WHITESPACE_TOKEN */ &&
token.type !== 4 /* COMMA_TOKEN */
)
}
const parseFunctionArgs = function (tokens) {
const args = []
let arg = []
tokens.forEach(function (token) {
if (token.type === 4 /* COMMA_TOKEN */) {
if (arg.length === 0) {
throw new Error(
'Error parsing function args, zero tokens for arg'
)
}
args.push(arg)
arg = []
return
}
if (token.type !== 31 /* WHITESPACE_TOKEN */) {
arg.push(token)
}
})
if (arg.length) {
args.push(arg)
}
return args
}
var isEndingTokenFor = function (token, type) {
if (
type === 11 /* LEFT_CURLY_BRACKET_TOKEN */ &&
token.type === 12 /* RIGHT_CURLY_BRACKET_TOKEN */
) {
return true
}
if (
type === 28 /* LEFT_SQUARE_BRACKET_TOKEN */ &&
token.type === 29 /* RIGHT_SQUARE_BRACKET_TOKEN */
) {
return true
}
return (
type === 2 /* LEFT_PARENTHESIS_TOKEN */ &&
token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */
)
}
const isLength = function (token) {
return (
token.type === 17 /* NUMBER_TOKEN */ ||
token.type === 15 /* DIMENSION_TOKEN */
)
}
const isLengthPercentage = function (token) {
return token.type === 16 /* PERCENTAGE_TOKEN */ || isLength(token)
}
const parseLengthPercentageTuple = function (tokens) {
return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]]
}
const ZERO_LENGTH = {
type: 17 /* NUMBER_TOKEN */,
number: 0,
flags: FLAG_INTEGER
}
const FIFTY_PERCENT = {
type: 16 /* PERCENTAGE_TOKEN */,
number: 50,
flags: FLAG_INTEGER
}
const HUNDRED_PERCENT = {
type: 16 /* PERCENTAGE_TOKEN */,
number: 100,
flags: FLAG_INTEGER
}
const getAbsoluteValueForTuple = function (tuple, width, height) {
const x = tuple[0],
y = tuple[1]
return [
getAbsoluteValue(x, width),
getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)
]
}
var getAbsoluteValue = function (token, parent) {
if (token.type === 16 /* PERCENTAGE_TOKEN */) {
return (token.number / 100) * parent
}
if (isDimensionToken(token)) {
switch (token.unit) {
case 'rem':
case 'em':
return 16 * token.number // TODO use correct font-size
case 'px':
default:
return token.number
}
}
return token.number
}
const DEG = 'deg'
const GRAD = 'grad'
const RAD = 'rad'
const TURN = 'turn'
const angle = {
name: 'angle',
parse: function (_context, value) {
if (value.type === 15 /* DIMENSION_TOKEN */) {
switch (value.unit) {
case DEG:
return (Math.PI * value.number) / 180
case GRAD:
return (Math.PI / 200) * value.number
case RAD:
return value.number
case TURN:
return Math.PI * 2 * value.number
}
}
throw new Error('Unsupported angle type')
}
}
const isAngle = function (value) {
if (value.type === 15 /* DIMENSION_TOKEN */) {
if (
value.unit === DEG ||
value.unit === GRAD ||
value.unit === RAD ||
value.unit === TURN
) {
return true
}
}
return false
}
const parseNamedSide = function (tokens) {
const sideOrCorner = tokens
.filter(isIdentToken)
.map(function (ident) {
return ident.value
})
.join(' ')
switch (sideOrCorner) {
case 'to bottom right':
case 'to right bottom':
case 'left top':
case 'top left':
return [ZERO_LENGTH, ZERO_LENGTH]
case 'to top':
case 'bottom':
return deg(0)
case 'to bottom left':
case 'to left bottom':
case 'right top':
case 'top right':
return [ZERO_LENGTH, HUNDRED_PERCENT]
case 'to right':
case 'left':
return deg(90)
case 'to top left':
case 'to left top':
case 'right bottom':
case 'bottom right':
return [HUNDRED_PERCENT, HUNDRED_PERCENT]
case 'to bottom':
case 'top':
return deg(180)
case 'to top right':
case 'to right top':
case 'left bottom':
case 'bottom left':
return [HUNDRED_PERCENT, ZERO_LENGTH]
case 'to left':
case 'right':
return deg(270)
}
return 0
}
var deg = function (deg) {
return (Math.PI * deg) / 180
}
const color$1 = {
name: 'color',
parse: function (context, value) {
if (value.type === 18 /* FUNCTION */) {
const colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name]
if (typeof colorFunction === 'undefined') {
throw new Error(
'Attempting to parse an unsupported color function "' +
value.name +
'"'
)
}
return colorFunction(context, value.values)
}
if (value.type === 5 /* HASH_TOKEN */) {
if (value.value.length === 3) {
var r = value.value.substring(0, 1)
var g = value.value.substring(1, 2)
var b = value.value.substring(2, 3)
return pack(
parseInt(r + r, 16),
parseInt(g + g, 16),
parseInt(b + b, 16),
1
)
}
if (value.value.length === 4) {
var r = value.value.substring(0, 1)
var g = value.value.substring(1, 2)
var b = value.value.substring(2, 3)
var a = value.value.substring(3, 4)
return pack(
parseInt(r + r, 16),
parseInt(g + g, 16),
parseInt(b + b, 16),
parseInt(a + a, 16) / 255
)
}
if (value.value.length === 6) {
var r = value.value.substring(0, 2)
var g = value.value.substring(2, 4)
var b = value.value.substring(4, 6)
return pack(
parseInt(r, 16),
parseInt(g, 16),
parseInt(b, 16),
1
)
}
if (value.value.length === 8) {
var r = value.value.substring(0, 2)
var g = value.value.substring(2, 4)
var b = value.value.substring(4, 6)
var a = value.value.substring(6, 8)
return pack(
parseInt(r, 16),
parseInt(g, 16),
parseInt(b, 16),
parseInt(a, 16) / 255
)
}
}
if (value.type === 20 /* IDENT_TOKEN */) {
const namedColor = COLORS[value.value.toUpperCase()]
if (typeof namedColor !== 'undefined') {
return namedColor
}
}
return COLORS.TRANSPARENT
}
}
const isTransparent = function (color) {
return (0xff & color) === 0
}
const asString = function (color) {
const alpha = 0xff & color
const blue = 0xff & (color >> 8)
const green = 0xff & (color >> 16)
const red = 0xff & (color >> 24)
return alpha < 255
? 'rgba(' + red + ',' + green + ',' + blue + ',' + alpha / 255 + ')'
: 'rgb(' + red + ',' + green + ',' + blue + ')'
}
var pack = function (r, g, b, a) {
return ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0
}
const getTokenColorValue = function (token, i) {
if (token.type === 17 /* NUMBER_TOKEN */) {
return token.number
}
if (token.type === 16 /* PERCENTAGE_TOKEN */) {
const max = i === 3 ? 1 : 255
return i === 3
? (token.number / 100) * max
: Math.round((token.number / 100) * max)
}
return 0
}
const rgb = function (_context, args) {
const tokens = args.filter(nonFunctionArgSeparator)
if (tokens.length === 3) {
var _a = tokens.map(getTokenColorValue),
r = _a[0],
g = _a[1],
b = _a[2]
return pack(r, g, b, 1)
}
if (tokens.length === 4) {
var _b = tokens.map(getTokenColorValue),
r = _b[0],
g = _b[1],
b = _b[2],
a = _b[3]
return pack(r, g, b, a)
}
return 0
}
function hue2rgb(t1, t2, hue) {
if (hue < 0) {
hue += 1
}
if (hue >= 1) {
hue -= 1
}
if (hue < 1 / 6) {
return (t2 - t1) * hue * 6 + t1
} else if (hue < 1 / 2) {
return t2
} else if (hue < 2 / 3) {
return (t2 - t1) * 6 * (2 / 3 - hue) + t1
} else {
return t1
}
}
const hsl = function (context, args) {
const tokens = args.filter(nonFunctionArgSeparator)
const hue = tokens[0],
saturation = tokens[1],
lightness = tokens[2],
alpha = tokens[3]
const h =
(hue.type === 17 /* NUMBER_TOKEN */
? deg(hue.number)
: angle.parse(context, hue)) /
(Math.PI * 2)
const s = isLengthPercentage(saturation) ? saturation.number / 100 : 0
const l = isLengthPercentage(lightness) ? lightness.number / 100 : 0
const a =
typeof alpha !== 'undefined' && isLengthPercentage(alpha)
? getAbsoluteValue(alpha, 1)
: 1
if (s === 0) {
return pack(l * 255, l * 255, l * 255, 1)
}
const t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s
const t1 = l * 2 - t2
const r = hue2rgb(t1, t2, h + 1 / 3)
const g = hue2rgb(t1, t2, h)
const b = hue2rgb(t1, t2, h - 1 / 3)
return pack(r * 255, g * 255, b * 255, a)
}
var SUPPORTED_COLOR_FUNCTIONS = {
hsl: hsl,
hsla: hsl,
rgb: rgb,
rgba: rgb
}
const parseColor = function (context, value) {
return color$1.parse(context, Parser.create(value).parseComponentValue())
}
var COLORS = {
ALICEBLUE: 0xf0f8ffff,
ANTIQUEWHITE: 0xfaebd7ff,
AQUA: 0x00ffffff,
AQUAMARINE: 0x7fffd4ff,
AZURE: 0xf0ffffff,
BEIGE: 0xf5f5dcff,
BISQUE: 0xffe4c4ff,
BLACK: 0x000000ff,
BLANCHEDALMOND: 0xffebcdff,
BLUE: 0x0000ffff,
BLUEVIOLET: 0x8a2be2ff,
BROWN: 0xa52a2aff,
BURLYWOOD: 0xdeb887ff,
CADETBLUE: 0x5f9ea0ff,
CHARTREUSE: 0x7fff00ff,
CHOCOLATE: 0xd2691eff,
CORAL: 0xff7f50ff,
CORNFLOWERBLUE: 0x6495edff,
CORNSILK: 0xfff8dcff,
CRIMSON: 0xdc143cff,
CYAN: 0x00ffffff,
DARKBLUE: 0x00008bff,
DARKCYAN: 0x008b8bff,
DARKGOLDENROD: 0xb886bbff,
DARKGRAY: 0xa9a9a9ff,
DARKGREEN: 0x006400ff,
DARKGREY: 0xa9a9a9ff,
DARKKHAKI: 0xbdb76bff,
DARKMAGENTA: 0x8b008bff,
DARKOLIVEGREEN: 0x556b2fff,
DARKORANGE: 0xff8c00ff,
DARKORCHID: 0x9932ccff,
DARKRED: 0x8b0000ff,
DARKSALMON: 0xe9967aff,
DARKSEAGREEN: 0x8fbc8fff,
DARKSLATEBLUE: 0x483d8bff,
DARKSLATEGRAY: 0x2f4f4fff,
DARKSLATEGREY: 0x2f4f4fff,
DARKTURQUOISE: 0x00ced1ff,
DARKVIOLET: 0x9400d3ff,
DEEPPINK: 0xff1493ff,
DEEPSKYBLUE: 0x00bfffff,
DIMGRAY: 0x696969ff,
DIMGREY: 0x696969ff,
DODGERBLUE: 0x1e90ffff,
FIREBRICK: 0xb22222ff,
FLORALWHITE: 0xfffaf0ff,
FORESTGREEN: 0x228b22ff,
FUCHSIA: 0xff00ffff,
GAINSBORO: 0xdcdcdcff,
GHOSTWHITE: 0xf8f8ffff,
GOLD: 0xffd700ff,
GOLDENROD: 0xdaa520ff,
GRAY: 0x808080ff,
GREEN: 0x008000ff,
GREENYELLOW: 0xadff2fff,
GREY: 0x808080ff,
HONEYDEW: 0xf0fff0ff,
HOTPINK: 0xff69b4ff,
INDIANRED: 0xcd5c5cff,
INDIGO: 0x4b0082ff,
IVORY: 0xfffff0ff,
KHAKI: 0xf0e68cff,
LAVENDER: 0xe6e6faff,
LAVENDERBLUSH: 0xfff0f5ff,
LAWNGREEN: 0x7cfc00ff,
LEMONCHIFFON: 0xfffacdff,
LIGHTBLUE: 0xadd8e6ff,
LIGHTCORAL: 0xf08080ff,
LIGHTCYAN: 0xe0ffffff,
LIGHTGOLDENRODYELLOW: 0xfafad2ff,
LIGHTGRAY: 0xd3d3d3ff,
LIGHTGREEN: 0x90ee90ff,
LIGHTGREY: 0xd3d3d3ff,
LIGHTPINK: 0xffb6c1ff,
LIGHTSALMON: 0xffa07aff,
LIGHTSEAGREEN: 0x20b2aaff,
LIGHTSKYBLUE: 0x87cefaff,
LIGHTSLATEGRAY: 0x778899ff,
LIGHTSLATEGREY: 0x778899ff,
LIGHTSTEELBLUE: 0xb0c4deff,
LIGHTYELLOW: 0xffffe0ff,
LIME: 0x00ff00ff,
LIMEGREEN: 0x32cd32ff,
LINEN: 0xfaf0e6ff,
MAGENTA: 0xff00ffff,
MAROON: 0x800000ff,
MEDIUMAQUAMARINE: 0x66cdaaff,
MEDIUMBLUE: 0x0000cdff,
MEDIUMORCHID: 0xba55d3ff,
MEDIUMPURPLE: 0x9370dbff,
MEDIUMSEAGREEN: 0x3cb371ff,
MEDIUMSLATEBLUE: 0x7b68eeff,
MEDIUMSPRINGGREEN: 0x00fa9aff,
MEDIUMTURQUOISE: 0x48d1ccff,
MEDIUMVIOLETRED: 0xc71585ff,
MIDNIGHTBLUE: 0x191970ff,
MINTCREAM: 0xf5fffaff,
MISTYROSE: 0xffe4e1ff,
MOCCASIN: 0xffe4b5ff,
NAVAJOWHITE: 0xffdeadff,
NAVY: 0x000080ff,
OLDLACE: 0xfdf5e6ff,
OLIVE: 0x808000ff,
OLIVEDRAB: 0x6b8e23ff,
ORANGE: 0xffa500ff,
ORANGERED: 0xff4500ff,
ORCHID: 0xda70d6ff,
PALEGOLDENROD: 0xeee8aaff,
PALEGREEN: 0x98fb98ff,
PALETURQUOISE: 0xafeeeeff,
PALEVIOLETRED: 0xdb7093ff,
PAPAYAWHIP: 0xffefd5ff,
PEACHPUFF: 0xffdab9ff,
PERU: 0xcd853fff,
PINK: 0xffc0cbff,
PLUM: 0xdda0ddff,
POWDERBLUE: 0xb0e0e6ff,
PURPLE: 0x800080ff,
REBECCAPURPLE: 0x663399ff,
RED: 0xff0000ff,
ROSYBROWN: 0xbc8f8fff,
ROYALBLUE: 0x4169e1ff,
SADDLEBROWN: 0x8b4513ff,
SALMON: 0xfa8072ff,
SANDYBROWN: 0xf4a460ff,
SEAGREEN: 0x2e8b57ff,
SEASHELL: 0xfff5eeff,
SIENNA: 0xa0522dff,
SILVER: 0xc0c0c0ff,
SKYBLUE: 0x87ceebff,
SLATEBLUE: 0x6a5acdff,
SLATEGRAY: 0x708090ff,
SLATEGREY: 0x708090ff,
SNOW: 0xfffafaff,
SPRINGGREEN: 0x00ff7fff,
STEELBLUE: 0x4682b4ff,
TAN: 0xd2b48cff,
TEAL: 0x008080ff,
THISTLE: 0xd8bfd8ff,
TOMATO: 0xff6347ff,
TRANSPARENT: 0x00000000,
TURQUOISE: 0x40e0d0ff,
VIOLET: 0xee82eeff,
WHEAT: 0xf5deb3ff,
WHITE: 0xffffffff,
WHITESMOKE: 0xf5f5f5ff,
YELLOW: 0xffff00ff,
YELLOWGREEN: 0x9acd32ff
}
const backgroundClip = {
name: 'background-clip',
initialValue: 'border-box',
prefix: false,
type: 1 /* LIST */,
parse: function (_context, tokens) {
return tokens.map(function (token) {
if (isIdentToken(token)) {
switch (token.value) {
case 'padding-box':
return 1 /* PADDING_BOX */
case 'content-box':
return 2 /* CONTENT_BOX */
}
}
return 0 /* BORDER_BOX */
})
}
}
const backgroundColor = {
name: 'background-color',
initialValue: 'transparent',
prefix: false,
type: 3 /* TYPE_VALUE */,
format: 'color'
}
const parseColorStop = function (context, args) {
const color = color$1.parse(context, args[0])
const stop = args[1]
return stop && isLengthPercentage(stop)
? { color: color, stop: stop }
: { color: color, stop: null }
}
const processColorStops = function (stops, lineLength) {
const first = stops[0]
const last = stops[stops.length - 1]
if (first.stop === null) {
first.stop = ZERO_LENGTH
}
if (last.stop === null) {
last.stop = HUNDRED_PERCENT
}
const processStops = []
let previous = 0
for (var i = 0; i < stops.length; i++) {
const stop_1 = stops[i].stop
if (stop_1 !== null) {
const absoluteValue = getAbsoluteValue(stop_1, lineLength)
if (absoluteValue > previous) {
processStops.push(absoluteValue)
} else {
processStops.push(previous)
}
previous = absoluteValue
} else {
processStops.push(null)
}
}
let gapBegin = null
for (var i = 0; i < processStops.length; i++) {
const stop_2 = processStops[i]
if (stop_2 === null) {
if (gapBegin === null) {
gapBegin = i
}
} else if (gapBegin !== null) {
const gapLength = i - gapBegin
const beforeGap = processStops[gapBegin - 1]
const gapValue = (stop_2 - beforeGap) / (gapLength + 1)
for (let g = 1; g <= gapLength; g++) {
processStops[gapBegin + g - 1] = gapValue * g
}
gapBegin = null
}
}
return stops.map(function (_a, i) {
const color = _a.color
return {
color: color,
stop: Math.max(Math.min(1, processStops[i] / lineLength), 0)
}
})
}
const getAngleFromCorner = function (corner, width, height) {
const centerX = width / 2
const centerY = height / 2
const x = getAbsoluteValue(corner[0], width) - centerX
const y = centerY - getAbsoluteValue(corner[1], height)
return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2)
}
const calculateGradientDirection = function (angle, width, height) {
const radian =
typeof angle === 'number'
? angle
: getAngleFromCorner(angle, width, height)
const lineLength =
Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian))
const halfWidth = width / 2
const halfHeight = height / 2
const halfLineLength = lineLength / 2
const yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength
const xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength
return [
lineLength,
halfWidth - xDiff,
halfWidth + xDiff,
halfHeight - yDiff,
halfHeight + yDiff
]
}
const distance = function (a, b) {
return Math.sqrt(a * a + b * b)
}
const findCorner = function (width, height, x, y, closest) {
const corners = [
[0, 0],
[0, height],
[width, 0],
[width, height]
]
return corners.reduce(
function (stat, corner) {
const cx = corner[0],
cy = corner[1]
const d = distance(x - cx, y - cy)
if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) {
return {
optimumCorner: corner,
optimumDistance: d
}
}
return stat
},
{
optimumDistance: closest ? Infinity : -Infinity,
optimumCorner: null
}
).optimumCorner
}
const calculateRadius = function (gradient, x, y, width, height) {
let rx = 0
let ry = 0
switch (gradient.size) {
case 0 /* CLOSEST_SIDE */:
// The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradient’s center.
// If the shape is an ellipse, it exactly meets the closest side in each dimension.
if (gradient.shape === 0 /* CIRCLE */) {
rx = ry = Math.min(
Math.abs(x),
Math.abs(x - width),
Math.abs(y),
Math.abs(y - height)
)
} else if (gradient.shape === 1 /* ELLIPSE */) {
rx = Math.min(Math.abs(x), Math.abs(x - width))
ry = Math.min(Math.abs(y), Math.abs(y - height))
}
break
case 2 /* CLOSEST_CORNER */:
// The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradient’s center.
// If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified.
if (gradient.shape === 0 /* CIRCLE */) {
rx = ry = Math.min(
distance(x, y),
distance(x, y - height),
distance(x - width, y),
distance(x - width, y - height)
)
} else if (gradient.shape === 1 /* ELLIPSE */) {
// Compute the ratio ry/rx (which is to be the same as for "closest-side")
var c =
Math.min(Math.abs(y), Math.abs(y - height)) /
Math.min(Math.abs(x), Math.abs(x - width))
var _a = findCorner(width, height, x, y, true),
cx = _a[0],
cy = _a[1]
rx = distance(cx - x, (cy - y) / c)
ry = c * rx
}
break
case 1 /* FARTHEST_SIDE */:
// Same as closest-side, except the ending shape is sized based on the farthest side(s)
if (gradient.shape === 0 /* CIRCLE */) {
rx = ry = Math.max(
Math.abs(x),
Math.abs(x - width),
Math.abs(y),
Math.abs(y - height)
)
} else if (gradient.shape === 1 /* ELLIPSE */) {
rx = Math.max(Math.abs(x), Math.abs(x - width))
ry = Math.max(Math.abs(y), Math.abs(y - height))
}
break
case 3 /* FARTHEST_CORNER */:
// Same as closest-corner, except the ending shape is sized based on the farthest corner.
// If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified.
if (gradient.shape === 0 /* CIRCLE */) {
rx = ry = Math.max(
distance(x, y),
distance(x, y - height),
distance(x - width, y),
distance(x - width, y - height)
)
} else if (gradient.shape === 1 /* ELLIPSE */) {
// Compute the ratio ry/rx (which is to be the same as for "farthest-side")
var c =
Math.max(Math.abs(y), Math.abs(y - height)) /
Math.max(Math.abs(x), Math.abs(x - width))
var _b = findCorner(width, height, x, y, false),
cx = _b[0],
cy = _b[1]
rx = distance(cx - x, (cy - y) / c)
ry = c * rx
}
break
}
if (Array.isArray(gradient.size)) {
rx = getAbsoluteValue(gradient.size[0], width)
ry =
gradient.size.length === 2
? getAbsoluteValue(gradient.size[1], height)
: rx
}
return [rx, ry]
}
const linearGradient = function (context, tokens) {
let angle$1 = deg(180)
const stops = []
parseFunctionArgs(tokens).forEach(function (arg, i) {
if (i === 0) {
const firstToken = arg[0]
if (
firstToken.type === 20 /* IDENT_TOKEN */ &&
firstToken.value === 'to'
) {
angle$1 = parseNamedSide(arg)
return
} else if (isAngle(firstToken)) {
angle$1 = angle.parse(context, firstToken)
return
}
}
const colorStop = parseColorStop(context, arg)
stops.push(colorStop)
})
return { angle: angle$1, stops: stops, type: 1 /* LINEAR_GRADIENT */ }
}
const prefixLinearGradient = function (context, tokens) {
let angle$1 = deg(180)
const stops = []
parseFunctionArgs(tokens).forEach(function (arg, i) {
if (i === 0) {
const firstToken = arg[0]
if (
firstToken.type === 20 /* IDENT_TOKEN */ &&
['top', 'left', 'right', 'bottom'].indexOf(firstToken.value) !==
-1
) {
angle$1 = parseNamedSide(arg)
return
} else if (isAngle(firstToken)) {
angle$1 =
(angle.parse(context, firstToken) + deg(270)) % deg(360)
return
}
}
const colorStop = parseColorStop(context, arg)
stops.push(colorStop)
})
return {
angle: angle$1,
stops: stops,
type: 1 /* LINEAR_GRADIENT */
}
}
const webkitGradient = function (context, tokens) {
const angle = deg(180)
const stops = []
let type = 1 /* LINEAR_GRADIENT */
const shape = 0 /* CIRCLE */
const size = 3 /* FARTHEST_CORNER */
const position = []
parseFunctionArgs(tokens).forEach(function (arg, i) {
const firstToken = arg[0]
if (i === 0) {
if (isIdentToken(firstToken) && firstToken.value === 'linear') {
type = 1 /* LINEAR_GRADIENT */
return
} else if (
isIdentToken(firstToken) &&
firstToken.value === 'radial'
) {
type = 2 /* RADIAL_GRADIENT */
return
}
}
if (firstToken.type === 18 /* FUNCTION */) {
if (firstToken.name === 'from') {
var color = color$1.parse(context, firstToken.values[0])
stops.push({ stop: ZERO_LENGTH, color: color })
} else if (firstToken.name === 'to') {
var color = color$1.parse(context, firstToken.values[0])
stops.push({ stop: HUNDRED_PERCENT, color: color })
} else if (firstToken.name === 'color-stop') {
const values = firstToken.values.filter(nonFunctionArgSeparator)
if (values.length === 2) {
var color = color$1.parse(context, values[1])
const stop_1 = values[0]
if (isNumberToken(stop_1)) {
stops.push({
stop: {
type: 16 /* PERCENTAGE_TOKEN */,
number: stop_1.number * 100,
flags: stop_1.flags
},
color: color
})
}
}
}
}
})
return type === 1 /* LINEAR_GRADIENT */
? {
angle: (angle + deg(180)) % deg(360),
stops: stops,
type: type
}
: {
size: size,
shape: shape,
stops: stops,
position: position,
type: type
}
}
const CLOSEST_SIDE = 'closest-side'
const FARTHEST_SIDE = 'farthest-side'
const CLOSEST_CORNER = 'closest-corner'
const FARTHEST_CORNER = 'farthest-corner'
const CIRCLE = 'circle'
const ELLIPSE = 'ellipse'
const COVER = 'cover'
const CONTAIN = 'contain'
const radialGradient = function (context, tokens) {
let shape = 0 /* CIRCLE */
let size = 3 /* FARTHEST_CORNER */
const stops = []
const position = []
parseFunctionArgs(tokens).forEach(function (arg, i) {
let isColorStop = true
if (i === 0) {
let isAtPosition_1 = false
isColorStop = arg.reduce(function (acc, token) {
if (isAtPosition_1) {
if (isIdentToken(token)) {
switch (token.value) {
case 'center':
position.push(FIFTY_PERCENT)
return acc
case 'top':
case 'left':
position.push(ZERO_LENGTH)
return acc
case 'right':
case 'bottom':
position.push(HUNDRED_PERCENT)
return acc
}
} else if (isLengthPercentage(token) || isLength(token)) {
position.push(token)
}
} else if (isIdentToken(token)) {
switch (token.value) {
case CIRCLE:
shape = 0 /* CIRCLE */
return false
case ELLIPSE:
shape = 1 /* ELLIPSE */
return false
case 'at':
isAtPosition_1 = true
return false
case CLOSEST_SIDE:
size = 0 /* CLOSEST_SIDE */
return false
case COVER:
case FARTHEST_SIDE:
size = 1 /* FARTHEST_SIDE */
return false
case CONTAIN:
case CLOSEST_CORNER:
size = 2 /* CLOSEST_CORNER */
return false
case FARTHEST_CORNER:
size = 3 /* FARTHEST_CORNER */
return false
}
} else if (isLength(token) || isLengthPercentage(token)) {
if (!Array.isArray(size)) {
size = []
}
size.push(token)
return false
}
return acc
}, isColorStop)
}
if (isColorStop) {
const colorStop = parseColorStop(context, arg)
stops.push(colorStop)
}
})
return {
size: size,
shape: shape,
stops: stops,
position: position,
type: 2 /* RADIAL_GRADIENT */
}
}
const prefixRadialGradient = function (context, tokens) {
let shape = 0 /* CIRCLE */
let size = 3 /* FARTHEST_CORNER */
const stops = []
const position = []
parseFunctionArgs(tokens).forEach(function (arg, i) {
let isColorStop = true
if (i === 0) {
isColorStop = arg.reduce(function (acc, token) {
if (isIdentToken(token)) {
switch (token.value) {
case 'center':
position.push(FIFTY_PERCENT)
return false
case 'top':
case 'left':
position.push(ZERO_LENGTH)
return false
case 'right':
case 'bottom':
position.push(HUNDRED_PERCENT)
return false
}
} else if (isLengthPercentage(token) || isLength(token)) {
position.push(token)
return false
}
return acc
}, isColorStop)
} else if (i === 1) {
isColorStop = arg.reduce(function (acc, token) {
if (isIdentToken(token)) {
switch (token.value) {
case CIRCLE:
shape = 0 /* CIRCLE */
return false
case ELLIPSE:
shape = 1 /* ELLIPSE */
return false
case CONTAIN:
case CLOSEST_SIDE:
size = 0 /* CLOSEST_SIDE */
return false
case FARTHEST_SIDE:
size = 1 /* FARTHEST_SIDE */
return false
case CLOSEST_CORNER:
size = 2 /* CLOSEST_CORNER */
return false
case COVER:
case FARTHEST_CORNER:
size = 3 /* FARTHEST_CORNER */
return false
}
} else if (isLength(token) || isLengthPercentage(token)) {
if (!Array.isArray(size)) {
size = []
}
size.push(token)
return false
}
return acc
}, isColorStop)
}
if (isColorStop) {
const colorStop = parseColorStop(context, arg)
stops.push(colorStop)
}
})
return {
size: size,
shape: shape,
stops: stops,
position: position,
type: 2 /* RADIAL_GRADIENT */
}
}
const isLinearGradient = function (background) {
return background.type === 1 /* LINEAR_GRADIENT */
}
const isRadialGradient = function (background) {
return background.type === 2 /* RADIAL_GRADIENT */
}
const image = {
name: 'image',
parse: function (context, value) {
if (value.type === 22 /* URL_TOKEN */) {
const image_1 = { url: value.value, type: 0 /* URL */ }
context.cache.addImage(value.value)
return image_1
}
if (value.type === 18 /* FUNCTION */) {
const imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name]
if (typeof imageFunction === 'undefined') {
throw new Error(
'Attempting to parse an unsupported image function "' +
value.name +
'"'
)
}
return imageFunction(context, value.values)
}
throw new Error('Unsupported image type ' + value.type)
}
}
function isSupportedImage(value) {
return (
!(value.type === 20 /* IDENT_TOKEN */ && value.value === 'none') &&
(value.type !== 18 /* FUNCTION */ ||
!!SUPPORTED_IMAGE_FUNCTIONS[value.name])
)
}
var SUPPORTED_IMAGE_FUNCTIONS = {
'linear-gradient': linearGradient,
'-moz-linear-gradient': prefixLinearGradient,
'-ms-linear-gradient': prefixLinearGradient,
'-o-linear-gradient': prefixLinearGradient,
'-webkit-linear-gradient': prefixLinearGradient,
'radial-gradient': radialGradient,
'-moz-radial-gradient': prefixRadialGradient,
'-ms-radial-gradient': prefixRadialGradient,
'-o-radial-gradient': prefixRadialGradient,
'-webkit-radial-gradient': prefixRadialGradient,
'-webkit-gradient': webkitGradient
}
const backgroundImage = {
name: 'background-image',
initialValue: 'none',
type: 1 /* LIST */,
prefix: false,
parse: function (context, tokens) {
if (tokens.length === 0) {
return []
}
const first = tokens[0]
if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {
return []
}
return tokens
.filter(function (value) {
return nonFunctionArgSeparator(value) && isSupportedImage(value)
})
.map(function (value) {
return image.parse(context, value)
})
}
}
const backgroundOrigin = {
name: 'background-origin',
initialValue: 'border-box',
prefix: false,
type: 1 /* LIST */,
parse: function (_context, tokens) {
return tokens.map(function (token) {
if (isIdentToken(token)) {
switch (token.value) {
case 'padding-box':
return 1 /* PADDING_BOX */
case 'content-box':
return 2 /* CONTENT_BOX */
}
}
return 0 /* BORDER_BOX */
})
}
}
const backgroundPosition = {
name: 'background-position',
initialValue: '0% 0%',
type: 1 /* LIST */,
prefix: false,
parse: function (_context, tokens) {
return parseFunctionArgs(tokens)
.map(function (values) {
return values.filter(isLengthPercentage)
})
.map(parseLengthPercentageTuple)
}
}
const backgroundRepeat = {
name: 'background-repeat',
initialValue: 'repeat',
prefix: false,
type: 1 /* LIST */,
parse: function (_context, tokens) {
return parseFunctionArgs(tokens)
.map(function (values) {
return values
.filter(isIdentToken)
.map(function (token) {
return token.value
})
.join(' ')
})
.map(parseBackgroundRepeat)
}
}
var parseBackgroundRepeat = function (value) {
switch (value) {
case 'no-repeat':
return 1 /* NO_REPEAT */
case 'repeat-x':
case 'repeat no-repeat':
return 2 /* REPEAT_X */
case 'repeat-y':
case 'no-repeat repeat':
return 3 /* REPEAT_Y */
case 'repeat':
default:
return 0 /* REPEAT */
}
}
let BACKGROUND_SIZE
;(function (BACKGROUND_SIZE) {
BACKGROUND_SIZE['AUTO'] = 'auto'
BACKGROUND_SIZE['CONTAIN'] = 'contain'
BACKGROUND_SIZE['COVER'] = 'cover'
})(BACKGROUND_SIZE || (BACKGROUND_SIZE = {}))
const backgroundSize = {
name: 'background-size',
initialValue: '0',
prefix: false,
type: 1 /* LIST */,
parse: function (_context, tokens) {
return parseFunctionArgs(tokens).map(function (values) {
return values.filter(isBackgroundSizeInfoToken)
})
}
}
var isBackgroundSizeInfoToken = function (value) {
return isIdentToken(value) || isLengthPercentage(value)
}
const borderColorForSide = function (side) {
return {
name: 'border-' + side + '-color',
initialValue: 'transparent',
prefix: false,
type: 3 /* TYPE_VALUE */,
format: 'color'
}
}
const borderTopColor = borderColorForSide('top')
const borderRightColor = borderColorForSide('right')
const borderBottomColor = borderColorForSide('bottom')
const borderLeftColor = borderColorForSide('left')
const borderRadiusForSide = function (side) {
return {
name: 'border-radius-' + side,
initialValue: '0 0',
prefix: false,
type: 1 /* LIST */,
parse: function (_context, tokens) {
return parseLengthPercentageTuple(tokens.filter(isLengthPercentage))
}
}
}
const borderTopLeftRadius = borderRadiusForSide('top-left')
const borderTopRightRadius = borderRadiusForSide('top-right')
const borderBottomRightRadius = borderRadiusForSide('bottom-right')
const borderBottomLeftRadius = borderRadiusForSide('bottom-left')
const borderStyleForSide = function (side) {
return {
name: 'border-' + side + '-style',
initialValue: 'solid',
prefix: false,
type: 2 /* IDENT_VALUE */,
parse: function (_context, style) {
switch (style) {
case 'none':
return 0 /* NONE */
case 'dashed':
return 2 /* DASHED */
case 'dotted':
return 3 /* DOTTED */
case 'double':
return 4 /* DOUBLE */
}
return 1 /* SOLID */
}
}
}
const borderTopStyle = borderStyleForSide('top')
const borderRightStyle = borderStyleForSide('right')
const borderBottomStyle = borderStyleForSide('bottom')
const borderLeftStyle = borderStyleForSide('left')
const borderWidthForSide = function (side) {
return {
name: 'border-' + side + '-width',
initialValue: '0',
type: 0 /* VALUE */,
prefix: false,
parse: function (_context, token) {
if (isDimensionToken(token)) {
return token.number
}
return 0
}
}
}
const borderTopWidth = borderWidthForSide('top')
const borderRightWidth = borderWidthForSide('right')
const borderBottomWidth = borderWidthForSide('bottom')
const borderLeftWidth = borderWidthForSide('left')
const color = {
name: 'color',
initialValue: 'transparent',
prefix: false,
type: 3 /* TYPE_VALUE */,
format: 'color'
}
const direction = {
name: 'direction',
initialValue: 'ltr',
prefix: false,
type: 2 /* IDENT_VALUE */,
parse: function (_context, direction) {
switch (direction) {
case 'rtl':
return 1 /* RTL */
case 'ltr':
default:
return 0 /* LTR */
}
}
}
const display = {
name: 'display',
initialValue: 'inline-block',
prefix: false,
type: 1 /* LIST */,
parse: function (_context, tokens) {
return tokens.filter(isIdentToken).reduce(function (bit, token) {
return bit | parseDisplayValue(token.value)
}, 0 /* NONE */)
}
}
var parseDisplayValue = function (display) {
switch (display) {
case 'block':
case '-webkit-box':
return 2 /* BLOCK */
case 'inline':
return 4 /* INLINE */
case 'run-in':
return 8 /* RUN_IN */
case 'flow':
return 16 /* FLOW */
case 'flow-root':
return 32 /* FLOW_ROOT */
case 'table':
return 64 /* TABLE */
case 'flex':
case '-webkit-flex':
return 128 /* FLEX */
case 'grid':
case '-ms-grid':
return 256 /* GRID */
case 'ruby':
return 512 /* RUBY */
case 'subgrid':
return 1024 /* SUBGRID */
case 'list-item':
return 2048 /* LIST_ITEM */
case 'table-row-group':
return 4096 /* TABLE_ROW_GROUP */
case 'table-header-group':
return 8192 /* TABLE_HEADER_GROUP */
case 'table-footer-group':
return 16384 /* TABLE_FOOTER_GROUP */
case 'table-row':
return 32768 /* TABLE_ROW */
case 'table-cell':
return 65536 /* TABLE_CELL */
case 'table-column-group':
return 131072 /* TABLE_COLUMN_GROUP */
case 'table-column':
return 262144 /* TABLE_COLUMN */
case 'table-caption':
return 524288 /* TABLE_CAPTION */
case 'ruby-base':
return 1048576 /* RUBY_BASE */
case 'ruby-text':
return 2097152 /* RUBY_TEXT */
case 'ruby-base-container':
return 4194304 /* RUBY_BASE_CONTAINER */
case 'ruby-text-container':
return 8388608 /* RUBY_TEXT_CONTAINER */
case 'contents':
return 16777216 /* CONTENTS */
case 'inline-block':
return 33554432 /* INLINE_BLOCK */
case 'inline-list-item':
return 67108864 /* INLINE_LIST_ITEM */
case 'inline-table':
return 134217728 /* INLINE_TABLE */
case 'inline-flex':
return 268435456 /* INLINE_FLEX */
case 'inline-grid':
return 536870912 /* INLINE_GRID */
}
return 0 /* NONE */
}
const float = {
name: 'float',
initialValue: 'none',
prefix: false,
type: 2 /* IDENT_VALUE */,
parse: function (_context, float) {
switch (float) {
case 'left':
return 1 /* LEFT */
case 'right':
return 2 /* RIGHT */
case 'inline-start':
return 3 /* INLINE_START */
case 'inline-end':
return 4 /* INLINE_END */
}
return 0 /* NONE */
}
}
const letterSpacing = {
name: 'letter-spacing',
initialValue: '0',
prefix: false,
type: 0 /* VALUE */,
parse: function (_context, token) {
if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'normal') {
return 0
}
if (token.type === 17 /* NUMBER_TOKEN */) {
return token.number
}
if (token.type === 15 /* DIMENSION_TOKEN */) {
return token.number
}
return 0
}
}
let LINE_BREAK
;(function (LINE_BREAK) {
LINE_BREAK['NORMAL'] = 'normal'
LINE_BREAK['STRICT'] = 'strict'
})(LINE_BREAK || (LINE_BREAK = {}))
const lineBreak = {
name: 'line-break',
initialValue: 'normal',
prefix: false,
type: 2 /* IDENT_VALUE */,
parse: function (_context, lineBreak) {
switch (lineBreak) {
case 'strict':
return LINE_BREAK.STRICT
case 'normal':
default:
return LINE_BREAK.NORMAL
}
}
}
const lineHeight = {
name: 'line-height',
initialValue: 'normal',
prefix: false,
type: 4 /* TOKEN_VALUE */
}
const computeLineHeight = function (token, fontSize) {
if (isIdentToken(token) && token.value === 'normal') {
return 1.2 * fontSize
} else if (token.type === 17 /* NUMBER_TOKEN */) {
return fontSize * token.number
} else if (isLengthPercentage(token)) {
return getAbsoluteValue(token, fontSize)
}
return fontSize
}
const listStyleImage = {
name: 'list-style-image',
initialValue: 'none',
type: 0 /* VALUE */,
prefix: false,
parse: function (context, token) {
if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') {
return null
}
return image.parse(context, token)
}
}
const listStylePosition = {
name: 'list-style-position',
initialValue: 'outside',
prefix: false,
type: 2 /* IDENT_VALUE */,
parse: function (_context, position) {
switch (position) {
case 'inside':
return 0 /* INSIDE */
case 'outside':
default:
return 1 /* OUTSIDE */
}
}
}
const listStyleType = {
name: 'list-style-type',
initialValue: 'none',
prefix: false,
type: 2 /* IDENT_VALUE */,
parse: function (_context, type) {
switch (type) {
case 'disc':
return 0 /* DISC */
case 'circle':
return 1 /* CIRCLE */
case 'square':
return 2 /* SQUARE */
case 'decimal':
return 3 /* DECIMAL */
case 'cjk-decimal':
return 4 /* CJK_DECIMAL */
case 'decimal-leading-zero':
return 5 /* DECIMAL_LEADING_ZERO */
case 'lower-roman':
return 6 /* LOWER_ROMAN */
case 'upper-roman':
return 7 /* UPPER_ROMAN */
case 'lower-greek':
return 8 /* LOWER_GREEK */
case 'lower-alpha':
return 9 /* LOWER_ALPHA */
case 'upper-alpha':
return 10 /* UPPER_ALPHA */
case 'arabic-indic':
return 11 /* ARABIC_INDIC */
case 'armenian':
return 12 /* ARMENIAN */
case 'bengali':
return 13 /* BENGALI */
case 'cambodian':
return 14 /* CAMBODIAN */
case 'cjk-earthly-branch':
return 15 /* CJK_EARTHLY_BRANCH */
case 'cjk-heavenly-stem':
return 16 /* CJK_HEAVENLY_STEM */
case 'cjk-ideographic':
return 17 /* CJK_IDEOGRAPHIC */
case 'devanagari':
return 18 /* DEVANAGARI */
case 'ethiopic-numeric':
return 19 /* ETHIOPIC_NUMERIC */
case 'georgian':
return 20 /* GEORGIAN */
case 'gujarati':
return 21 /* GUJARATI */
case 'gurmukhi':
return 22 /* GURMUKHI */
case 'hebrew':
return 22 /* HEBREW */
case 'hiragana':
return 23 /* HIRAGANA */
case 'hiragana-iroha':
return 24 /* HIRAGANA_IROHA */
case 'japanese-formal':
return 25 /* JAPANESE_FORMAL */
case 'japanese-informal':
return 26 /* JAPANESE_INFORMAL */
case 'kannada':
return 27 /* KANNADA */
case 'katakana':
return 28 /* KATAKANA */
case 'katakana-iroha':
return 29 /* KATAKANA_IROHA */
case 'khmer':
return 30 /* KHMER */
case 'korean-hangul-formal':
return 31 /* KOREAN_HANGUL_FORMAL */
case 'korean-hanja-formal':
return 32 /* KOREAN_HANJA_FORMAL */
case 'korean-hanja-informal':
return 33 /* KOREAN_HANJA_INFORMAL */
case 'lao':
return 34 /* LAO */
case 'lower-armenian':
return 35 /* LOWER_ARMENIAN */
case 'malayalam':
return 36 /* MALAYALAM */
case 'mongolian':
return 37 /* MONGOLIAN */
case 'myanmar':
return 38 /* MYANMAR */
case 'oriya':
return 39 /* ORIYA */
case 'persian':
return 40 /* PERSIAN */
case 'simp-chinese-formal':
return 41 /* SIMP_CHINESE_FORMAL */
case 'simp-chinese-informal':
return 42 /* SIMP_CHINESE_INFORMAL */
case 'tamil':
return 43 /* TAMIL */
case 'telugu':
return 44 /* TELUGU */
case 'thai':
return 45 /* THAI */
case 'tibetan':
return 46 /* TIBETAN */
case 'trad-chinese-formal':
return 47 /* TRAD_CHINESE_FORMAL */
case 'trad-chinese-informal':
return 48 /* TRAD_CHINESE_INFORMAL */
case 'upper-armenian':
return 49 /* UPPER_ARMENIAN */
case 'disclosure-open':
return 50 /* DISCLOSURE_OPEN */
case 'disclosure-closed':
return 51 /* DISCLOSURE_CLOSED */
case 'none':
default:
return -1 /* NONE */
}
}
}
const marginForSide = function (side) {
return {
name: 'margin-' + side,
initialValue: '0',
prefix: false,
type: 4 /* TOKEN_VALUE */
}
}
const marginTop = marginForSide('top')
const marginRight = marginForSide('right')
const marginBottom = marginForSide('bottom')
const marginLeft = marginForSide('left')
const overflow = {
name: 'overflow',
initialValue: 'visible',
prefix: false,
type: 1 /* LIST */,
parse: function (_context, tokens) {
return tokens.filter(isIdentToken).map(function (overflow) {
switch (overflow.value) {
case 'hidden':
return 1 /* HIDDEN */
case 'scroll':
return 2 /* SCROLL */
case 'clip':
return 3 /* CLIP */
case 'auto':
return 4 /* AUTO */
case 'visible':
default:
return 0 /* VISIBLE */
}
})
}
}
const overflowWrap = {
name: 'overflow-wrap',
initialValue: 'normal',
prefix: false,
type: 2 /* IDENT_VALUE */,
parse: function (_context, overflow) {
switch (overflow) {
case 'break-word':
return 'break-word' /* BREAK_WORD */
case 'normal':
default:
return 'normal' /* NORMAL */
}
}
}
const paddingForSide = function (side) {
return {
name: 'padding-' + side,
initialValue: '0',
prefix: false,
type: 3 /* TYPE_VALUE */,
format: 'length-percentage'
}
}
const paddingTop = paddingForSide('top')
const paddingRight = paddingForSide('right')
const paddingBottom = paddingForSide('bottom')
const paddingLeft = paddingForSide('left')
const textAlign = {
name: 'text-align',
initialValue: 'left',
prefix: false,
type: 2 /* IDENT_VALUE */,
parse: function (_context, textAlign) {
switch (textAlign) {
case 'right':
return 2 /* RIGHT */
case 'center':
case 'justify':
return 1 /* CENTER */
case 'left':
default:
return 0 /* LEFT */
}
}
}
const position = {
name: 'position',
initialValue: 'static',
prefix: false,
type: 2 /* IDENT_VALUE */,
parse: function (_context, position) {
switch (position) {
case 'relative':
return 1 /* RELATIVE */
case 'absolute':
return 2 /* ABSOLUTE */
case 'fixed':
return 3 /* FIXED */
case 'sticky':
return 4 /* STICKY */
}
return 0 /* STATIC */
}
}
const textShadow = {
name: 'text-shadow',
initialValue: 'none',
type: 1 /* LIST */,
prefix: false,
parse: function (context, tokens) {
if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {
return []
}
return parseFunctionArgs(tokens).map(function (values) {
const shadow = {
color: COLORS.TRANSPARENT,
offsetX: ZERO_LENGTH,
offsetY: ZERO_LENGTH,
blur: ZERO_LENGTH
}
let c = 0
for (let i = 0; i < values.length; i++) {
const token = values[i]
if (isLength(token)) {
if (c === 0) {
shadow.offsetX = token
} else if (c === 1) {
shadow.offsetY = token
} else {
shadow.blur = token
}
c++
} else {
shadow.color = color$1.parse(context, token)
}
}
return shadow
})
}
}
const textTransform = {
name: 'text-transform',
initialValue: 'none',
prefix: false,
type: 2 /* IDENT_VALUE */,
parse: function (_context, textTransform) {
switch (textTransform) {
case 'uppercase':
return 2 /* UPPERCASE */
case 'lowercase':
return 1 /* LOWERCASE */
case 'capitalize':
return 3 /* CAPITALIZE */
}
return 0 /* NONE */
}
}
const transform$1 = {
name: 'transform',
initialValue: 'none',
prefix: true,
type: 0 /* VALUE */,
parse: function (_context, token) {
if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') {
return null
}
if (token.type === 18 /* FUNCTION */) {
const transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name]
if (typeof transformFunction === 'undefined') {
throw new Error(
'Attempting to parse an unsupported transform function "' +
token.name +
'"'
)
}
return transformFunction(token.values)
}
return null
}
}
const matrix = function (args) {
const values = args
.filter(function (arg) {
return arg.type === 17 /* NUMBER_TOKEN */
})
.map(function (arg) {
return arg.number
})
return values.length === 6 ? values : null
}
// doesn't support 3D transforms at the moment
const matrix3d = function (args) {
const values = args
.filter(function (arg) {
return arg.type === 17 /* NUMBER_TOKEN */
})
.map(function (arg) {
return arg.number
})
const a1 = values[0],
b1 = values[1]
values[2]
values[3]
const a2 = values[4],
b2 = values[5]
values[6]
values[7]
values[8]
values[9]
values[10]
values[11]
const a4 = values[12],
b4 = values[13]
values[14]
values[15]
return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null
}
var SUPPORTED_TRANSFORM_FUNCTIONS = {
matrix: matrix,
matrix3d: matrix3d
}
const DEFAULT_VALUE = {
type: 16 /* PERCENTAGE_TOKEN */,
number: 50,
flags: FLAG_INTEGER
}
const DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE]
const transformOrigin = {
name: 'transform-origin',
initialValue: '50% 50%',
prefix: true,
type: 1 /* LIST */,
parse: function (_context, tokens) {
const origins = tokens.filter(isLengthPercentage)
if (origins.length !== 2) {
return DEFAULT
}
return [origins[0], origins[1]]
}
}
const visibility = {
name: 'visible',
initialValue: 'none',
prefix: false,
type: 2 /* IDENT_VALUE */,
parse: function (_context, visibility) {
switch (visibility) {
case 'hidden':
return 1 /* HIDDEN */
case 'collapse':
return 2 /* COLLAPSE */
case 'visible':
default:
return 0 /* VISIBLE */
}
}
}
let WORD_BREAK
;(function (WORD_BREAK) {
WORD_BREAK['NORMAL'] = 'normal'
WORD_BREAK['BREAK_ALL'] = 'break-all'
WORD_BREAK['KEEP_ALL'] = 'keep-all'
})(WORD_BREAK || (WORD_BREAK = {}))
const wordBreak = {
name: 'word-break',
initialValue: 'normal',
prefix: false,
type: 2 /* IDENT_VALUE */,
parse: function (_context, wordBreak) {
switch (wordBreak) {
case 'break-all':
return WORD_BREAK.BREAK_ALL
case 'keep-all':
return WORD_BREAK.KEEP_ALL
case 'normal':
default:
return WORD_BREAK.NORMAL
}
}
}
const zIndex = {
name: 'z-index',
initialValue: 'auto',
prefix: false,
type: 0 /* VALUE */,
parse: function (_context, token) {
if (token.type === 20 /* IDENT_TOKEN */) {
return { auto: true, order: 0 }
}
if (isNumberToken(token)) {
return { auto: false, order: token.number }
}
throw new Error('Invalid z-index number parsed')
}
}
const time = {
name: 'time',
parse: function (_context, value) {
if (value.type === 15 /* DIMENSION_TOKEN */) {
switch (value.unit.toLowerCase()) {
case 's':
return 1000 * value.number
case 'ms':
return value.number
}
}
throw new Error('Unsupported time type')
}
}
const opacity = {
name: 'opacity',
initialValue: '1',
type: 0 /* VALUE */,
prefix: false,
parse: function (_context, token) {
if (isNumberToken(token)) {
return token.number
}
return 1
}
}
const textDecorationColor = {
name: 'text-decoration-color',
initialValue: 'transparent',
prefix: false,
type: 3 /* TYPE_VALUE */,
format: 'color'
}
const textDecorationLine = {
name: 'text-decoration-line',
initialValue: 'none',
prefix: false,
type: 1 /* LIST */,
parse: function (_context, tokens) {
return tokens
.filter(isIdentToken)
.map(function (token) {
switch (token.value) {
case 'underline':
return 1 /* UNDERLINE */
case 'overline':
return 2 /* OVERLINE */
case 'line-through':
return 3 /* LINE_THROUGH */
case 'none':
return 4 /* BLINK */
}
return 0 /* NONE */
})
.filter(function (line) {
return line !== 0 /* NONE */
})
}
}
const fontFamily = {
name: 'font-family',
initialValue: '',
prefix: false,
type: 1 /* LIST */,
parse: function (_context, tokens) {
const accumulator = []
const results = []
tokens.forEach(function (token) {
switch (token.type) {
case 20 /* IDENT_TOKEN */:
case 0 /* STRING_TOKEN */:
accumulator.push(token.value)
break
case 17 /* NUMBER_TOKEN */:
accumulator.push(token.number.toString())
break
case 4 /* COMMA_TOKEN */:
results.push(accumulator.join(' '))
accumulator.length = 0
break
}
})
if (accumulator.length) {
results.push(accumulator.join(' '))
}
return results.map(function (result) {
return result.indexOf(' ') === -1 ? result : "'" + result + "'"
})
}
}
const fontSize = {
name: 'font-size',
initialValue: '0',
prefix: false,
type: 3 /* TYPE_VALUE */,
format: 'length'
}
const fontWeight = {
name: 'font-weight',
initialValue: 'normal',
type: 0 /* VALUE */,
prefix: false,
parse: function (_context, token) {
if (isNumberToken(token)) {
return token.number
}
if (isIdentToken(token)) {
switch (token.value) {
case 'bold':
return 700
case 'normal':
default:
return 400
}
}
return 400
}
}
const fontVariant = {
name: 'font-variant',
initialValue: 'none',
type: 1 /* LIST */,
prefix: false,
parse: function (_context, tokens) {
return tokens.filter(isIdentToken).map(function (token) {
return token.value
})
}
}
const fontStyle = {
name: 'font-style',
initialValue: 'normal',
prefix: false,
type: 2 /* IDENT_VALUE */,
parse: function (_context, overflow) {
switch (overflow) {
case 'oblique':
return 'oblique' /* OBLIQUE */
case 'italic':
return 'italic' /* ITALIC */
case 'normal':
default:
return 'normal' /* NORMAL */
}
}
}
const contains = function (bit, value) {
return (bit & value) !== 0
}
const content = {
name: 'content',
initialValue: 'none',
type: 1 /* LIST */,
prefix: false,
parse: function (_context, tokens) {
if (tokens.length === 0) {
return []
}
const first = tokens[0]
if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {
return []
}
return tokens
}
}
const counterIncrement = {
name: 'counter-increment',
initialValue: 'none',
prefix: true,
type: 1 /* LIST */,
parse: function (_context, tokens) {
if (tokens.length === 0) {
return null
}
const first = tokens[0]
if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {
return null
}
const increments = []
const filtered = tokens.filter(nonWhiteSpace)
for (let i = 0; i < filtered.length; i++) {
const counter = filtered[i]
const next = filtered[i + 1]
if (counter.type === 20 /* IDENT_TOKEN */) {
const increment = next && isNumberToken(next) ? next.number : 1
increments.push({
counter: counter.value,
increment: increment
})
}
}
return increments
}
}
const counterReset = {
name: 'counter-reset',
initialValue: 'none',
prefix: true,
type: 1 /* LIST */,
parse: function (_context, tokens) {
if (tokens.length === 0) {
return []
}
const resets = []
const filtered = tokens.filter(nonWhiteSpace)
for (let i = 0; i < filtered.length; i++) {
const counter = filtered[i]
const next = filtered[i + 1]
if (isIdentToken(counter) && counter.value !== 'none') {
const reset = next && isNumberToken(next) ? next.number : 0
resets.push({ counter: counter.value, reset: reset })
}
}
return resets
}
}
const duration = {
name: 'duration',
initialValue: '0s',
prefix: false,
type: 1 /* LIST */,
parse: function (context, tokens) {
return tokens.filter(isDimensionToken).map(function (token) {
return time.parse(context, token)
})
}
}
const quotes = {
name: 'quotes',
initialValue: 'none',
prefix: true,
type: 1 /* LIST */,
parse: function (_context, tokens) {
if (tokens.length === 0) {
return null
}
const first = tokens[0]
if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {
return null
}
const quotes = []
const filtered = tokens.filter(isStringToken)
if (filtered.length % 2 !== 0) {
return null
}
for (let i = 0; i < filtered.length; i += 2) {
const open_1 = filtered[i].value
const close_1 = filtered[i + 1].value
quotes.push({ open: open_1, close: close_1 })
}
return quotes
}
}
const getQuote = function (quotes, depth, open) {
if (!quotes) {
return ''
}
const quote = quotes[Math.min(depth, quotes.length - 1)]
if (!quote) {
return ''
}
return open ? quote.open : quote.close
}
const boxShadow = {
name: 'box-shadow',
initialValue: 'none',
type: 1 /* LIST */,
prefix: false,
parse: function (context, tokens) {
if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {
return []
}
return parseFunctionArgs(tokens).map(function (values) {
const shadow = {
color: 0x000000ff,
offsetX: ZERO_LENGTH,
offsetY: ZERO_LENGTH,
blur: ZERO_LENGTH,
spread: ZERO_LENGTH,
inset: false
}
let c = 0
for (let i = 0; i < values.length; i++) {
const token = values[i]
if (isIdentWithValue(token, 'inset')) {
shadow.inset = true
} else if (isLength(token)) {
if (c === 0) {
shadow.offsetX = token
} else if (c === 1) {
shadow.offsetY = token
} else if (c === 2) {
shadow.blur = token
} else {
shadow.spread = token
}
c++
} else {
shadow.color = color$1.parse(context, token)
}
}
return shadow
})
}
}
const paintOrder = {
name: 'paint-order',
initialValue: 'normal',
prefix: false,
type: 1 /* LIST */,
parse: function (_context, tokens) {
const DEFAULT_VALUE = [0 /* FILL */, 1 /* STROKE */, 2 /* MARKERS */]
const layers = []
tokens.filter(isIdentToken).forEach(function (token) {
switch (token.value) {
case 'stroke':
layers.push(1 /* STROKE */)
break
case 'fill':
layers.push(0 /* FILL */)
break
case 'markers':
layers.push(2 /* MARKERS */)
break
}
})
DEFAULT_VALUE.forEach(function (value) {
if (layers.indexOf(value) === -1) {
layers.push(value)
}
})
return layers
}
}
const webkitTextStrokeColor = {
name: '-webkit-text-stroke-color',
initialValue: 'currentcolor',
prefix: false,
type: 3 /* TYPE_VALUE */,
format: 'color'
}
const webkitTextStrokeWidth = {
name: '-webkit-text-stroke-width',
initialValue: '0',
type: 0 /* VALUE */,
prefix: false,
parse: function (_context, token) {
if (isDimensionToken(token)) {
return token.number
}
return 0
}
}
const CSSParsedDeclaration = /** @class */ (function () {
function CSSParsedDeclaration(context, declaration) {
let _a, _b
this.animationDuration = parse(
context,
duration,
declaration.animationDuration
)
this.backgroundClip = parse(
context,
backgroundClip,
declaration.backgroundClip
)
this.backgroundColor = parse(
context,
backgroundColor,
declaration.backgroundColor
)
this.backgroundImage = parse(
context,
backgroundImage,
declaration.backgroundImage
)
this.backgroundOrigin = parse(
context,
backgroundOrigin,
declaration.backgroundOrigin
)
this.backgroundPosition = parse(
context,
backgroundPosition,
declaration.backgroundPosition
)
this.backgroundRepeat = parse(
context,
backgroundRepeat,
declaration.backgroundRepeat
)
this.backgroundSize = parse(
context,
backgroundSize,
declaration.backgroundSize
)
this.borderTopColor = parse(
context,
borderTopColor,
declaration.borderTopColor
)
this.borderRightColor = parse(
context,
borderRightColor,
declaration.borderRightColor
)
this.borderBottomColor = parse(
context,
borderBottomColor,
declaration.borderBottomColor
)
this.borderLeftColor = parse(
context,
borderLeftColor,
declaration.borderLeftColor
)
this.borderTopLeftRadius = parse(
context,
borderTopLeftRadius,
declaration.borderTopLeftRadius
)
this.borderTopRightRadius = parse(
context,
borderTopRightRadius,
declaration.borderTopRightRadius
)
this.borderBottomRightRadius = parse(
context,
borderBottomRightRadius,
declaration.borderBottomRightRadius
)
this.borderBottomLeftRadius = parse(
context,
borderBottomLeftRadius,
declaration.borderBottomLeftRadius
)
this.borderTopStyle = parse(
context,
borderTopStyle,
declaration.borderTopStyle
)
this.borderRightStyle = parse(
context,
borderRightStyle,
declaration.borderRightStyle
)
this.borderBottomStyle = parse(
context,
borderBottomStyle,
declaration.borderBottomStyle
)
this.borderLeftStyle = parse(
context,
borderLeftStyle,
declaration.borderLeftStyle
)
this.borderTopWidth = parse(
context,
borderTopWidth,
declaration.borderTopWidth
)
this.borderRightWidth = parse(
context,
borderRightWidth,
declaration.borderRightWidth
)
this.borderBottomWidth = parse(
context,
borderBottomWidth,
declaration.borderBottomWidth
)
this.borderLeftWidth = parse(
context,
borderLeftWidth,
declaration.borderLeftWidth
)
this.boxShadow = parse(context, boxShadow, declaration.boxShadow)
this.color = parse(context, color, declaration.color)
this.direction = parse(context, direction, declaration.direction)
this.display = parse(context, display, declaration.display)
this.float = parse(context, float, declaration.cssFloat)
this.fontFamily = parse(context, fontFamily, declaration.fontFamily)
this.fontSize = parse(context, fontSize, declaration.fontSize)
this.fontStyle = parse(context, fontStyle, declaration.fontStyle)
this.fontVariant = parse(context, fontVariant, declaration.fontVariant)
this.fontWeight = parse(context, fontWeight, declaration.fontWeight)
this.letterSpacing = parse(
context,
letterSpacing,
declaration.letterSpacing
)
this.lineBreak = parse(context, lineBreak, declaration.lineBreak)
this.lineHeight = parse(context, lineHeight, declaration.lineHeight)
this.listStyleImage = parse(
context,
listStyleImage,
declaration.listStyleImage
)
this.listStylePosition = parse(
context,
listStylePosition,
declaration.listStylePosition
)
this.listStyleType = parse(
context,
listStyleType,
declaration.listStyleType
)
this.marginTop = parse(context, marginTop, declaration.marginTop)
this.marginRight = parse(context, marginRight, declaration.marginRight)
this.marginBottom = parse(
context,
marginBottom,
declaration.marginBottom
)
this.marginLeft = parse(context, marginLeft, declaration.marginLeft)
this.opacity = parse(context, opacity, declaration.opacity)
const overflowTuple = parse(context, overflow, declaration.overflow)
this.overflowX = overflowTuple[0]
this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0]
this.overflowWrap = parse(
context,
overflowWrap,
declaration.overflowWrap
)
this.paddingTop = parse(context, paddingTop, declaration.paddingTop)
this.paddingRight = parse(
context,
paddingRight,
declaration.paddingRight
)
this.paddingBottom = parse(
context,
paddingBottom,
declaration.paddingBottom
)
this.paddingLeft = parse(context, paddingLeft, declaration.paddingLeft)
this.paintOrder = parse(context, paintOrder, declaration.paintOrder)
this.position = parse(context, position, declaration.position)
this.textAlign = parse(context, textAlign, declaration.textAlign)
this.textDecorationColor = parse(
context,
textDecorationColor,
(_a = declaration.textDecorationColor) !== null && _a !== void 0
? _a
: declaration.color
)
this.textDecorationLine = parse(
context,
textDecorationLine,
(_b = declaration.textDecorationLine) !== null && _b !== void 0
? _b
: declaration.textDecoration
)
this.textShadow = parse(context, textShadow, declaration.textShadow)
this.textTransform = parse(
context,
textTransform,
declaration.textTransform
)
this.transform = parse(context, transform$1, declaration.transform)
this.transformOrigin = parse(
context,
transformOrigin,
declaration.transformOrigin
)
this.visibility = parse(context, visibility, declaration.visibility)
this.webkitTextStrokeColor = parse(
context,
webkitTextStrokeColor,
declaration.webkitTextStrokeColor
)
this.webkitTextStrokeWidth = parse(
context,
webkitTextStrokeWidth,
declaration.webkitTextStrokeWidth
)
this.wordBreak = parse(context, wordBreak, declaration.wordBreak)
this.zIndex = parse(context, zIndex, declaration.zIndex)
}
CSSParsedDeclaration.prototype.isVisible = function () {
return (
this.display > 0 &&
this.opacity > 0 &&
this.visibility === 0 /* VISIBLE */
)
}
CSSParsedDeclaration.prototype.isTransparent = function () {
return isTransparent(this.backgroundColor)
}
CSSParsedDeclaration.prototype.isTransformed = function () {
return this.transform !== null
}
CSSParsedDeclaration.prototype.isPositioned = function () {
return this.position !== 0 /* STATIC */
}
CSSParsedDeclaration.prototype.isPositionedWithZIndex = function () {
return this.isPositioned() && !this.zIndex.auto
}
CSSParsedDeclaration.prototype.isFloating = function () {
return this.float !== 0 /* NONE */
}
CSSParsedDeclaration.prototype.isInlineLevel = function () {
return (
contains(this.display, 4 /* INLINE */) ||
contains(this.display, 33554432 /* INLINE_BLOCK */) ||
contains(this.display, 268435456 /* INLINE_FLEX */) ||
contains(this.display, 536870912 /* INLINE_GRID */) ||
contains(this.display, 67108864 /* INLINE_LIST_ITEM */) ||
contains(this.display, 134217728 /* INLINE_TABLE */)
)
}
return CSSParsedDeclaration
})()
const CSSParsedPseudoDeclaration = /** @class */ (function () {
function CSSParsedPseudoDeclaration(context, declaration) {
this.content = parse(context, content, declaration.content)
this.quotes = parse(context, quotes, declaration.quotes)
}
return CSSParsedPseudoDeclaration
})()
const CSSParsedCounterDeclaration = /** @class */ (function () {
function CSSParsedCounterDeclaration(context, declaration) {
this.counterIncrement = parse(
context,
counterIncrement,
declaration.counterIncrement
)
this.counterReset = parse(
context,
counterReset,
declaration.counterReset
)
}
return CSSParsedCounterDeclaration
})()
// eslint-disable-next-line @typescript-eslint/no-explicit-any
var parse = function (context, descriptor, style) {
const tokenizer = new Tokenizer()
const value =
style !== null && typeof style !== 'undefined'
? style.toString()
: descriptor.initialValue
tokenizer.write(value)
const parser = new Parser(tokenizer.read())
switch (descriptor.type) {
case 2 /* IDENT_VALUE */:
var token = parser.parseComponentValue()
return descriptor.parse(
context,
isIdentToken(token) ? token.value : descriptor.initialValue
)
case 0 /* VALUE */:
return descriptor.parse(context, parser.parseComponentValue())
case 1 /* LIST */:
return descriptor.parse(context, parser.parseComponentValues())
case 4 /* TOKEN_VALUE */:
return parser.parseComponentValue()
case 3 /* TYPE_VALUE */:
switch (descriptor.format) {
case 'angle':
return angle.parse(context, parser.parseComponentValue())
case 'color':
return color$1.parse(context, parser.parseComponentValue())
case 'image':
return image.parse(context, parser.parseComponentValue())
case 'length':
var length_1 = parser.parseComponentValue()
return isLength(length_1) ? length_1 : ZERO_LENGTH
case 'length-percentage':
var value_1 = parser.parseComponentValue()
return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH
case 'time':
return time.parse(context, parser.parseComponentValue())
}
break
}
}
const elementDebuggerAttribute = 'data-html2canvas-debug'
const getElementDebugType = function (element) {
const attribute = element.getAttribute(elementDebuggerAttribute)
switch (attribute) {
case 'all':
return 1 /* ALL */
case 'clone':
return 2 /* CLONE */
case 'parse':
return 3 /* PARSE */
case 'render':
return 4 /* RENDER */
default:
return 0 /* NONE */
}
}
const isDebugging = function (element, type) {
const elementType = getElementDebugType(element)
return elementType === 1 /* ALL */ || type === elementType
}
const ElementContainer = /** @class */ (function () {
function ElementContainer(context, element) {
this.context = context
this.textNodes = []
this.elements = []
this.flags = 0
if (isDebugging(element, 3 /* PARSE */)) {
debugger
}
this.styles = new CSSParsedDeclaration(
context,
window.getComputedStyle(element, null)
)
if (isHTMLElementNode(element)) {
if (
this.styles.animationDuration.some(function (duration) {
return duration > 0
})
) {
element.style.animationDuration = '0s'
}
if (this.styles.transform !== null) {
// getBoundingClientRect takes transforms into account
element.style.transform = 'none'
}
}
this.bounds = parseBounds(this.context, element)
if (isDebugging(element, 4 /* RENDER */)) {
this.flags |= 16 /* DEBUG_RENDER */
}
}
return ElementContainer
})()
/*
* text-segmentation 1.0.3
* Copyright (c) 2022 Niklas von Hertzen
* Released under MIT License
*/
const base64 =
'AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA='
/*
* utrie 1.0.2
* Copyright (c) 2022 Niklas von Hertzen
* Released under MIT License
*/
const chars$1 =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
// Use a lookup table to find the index.
const lookup$1 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256)
for (let i$1 = 0; i$1 < chars$1.length; i$1++) {
lookup$1[chars$1.charCodeAt(i$1)] = i$1
}
const decode = function (base64) {
let bufferLength = base64.length * 0.75,
len = base64.length,
i,
p = 0,
encoded1,
encoded2,
encoded3,
encoded4
if (base64[base64.length - 1] === '=') {
bufferLength--
if (base64[base64.length - 2] === '=') {
bufferLength--
}
}
const buffer =
typeof ArrayBuffer !== 'undefined' &&
typeof Uint8Array !== 'undefined' &&
typeof Uint8Array.prototype.slice !== 'undefined'
? new ArrayBuffer(bufferLength)
: new Array(bufferLength)
const bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer)
for (i = 0; i < len; i += 4) {
encoded1 = lookup$1[base64.charCodeAt(i)]
encoded2 = lookup$1[base64.charCodeAt(i + 1)]
encoded3 = lookup$1[base64.charCodeAt(i + 2)]
encoded4 = lookup$1[base64.charCodeAt(i + 3)]
bytes[p++] = (encoded1 << 2) | (encoded2 >> 4)
bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2)
bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63)
}
return buffer
}
const polyUint16Array = function (buffer) {
const length = buffer.length
const bytes = []
for (let i = 0; i < length; i += 2) {
bytes.push((buffer[i + 1] << 8) | buffer[i])
}
return bytes
}
const polyUint32Array = function (buffer) {
const length = buffer.length
const bytes = []
for (let i = 0; i < length; i += 4) {
bytes.push(
(buffer[i + 3] << 24) |
(buffer[i + 2] << 16) |
(buffer[i + 1] << 8) |
buffer[i]
)
}
return bytes
}
/** Shift size for getting the index-2 table offset. */
const UTRIE2_SHIFT_2 = 5
/** Shift size for getting the index-1 table offset. */
const UTRIE2_SHIFT_1 = 6 + 5
/**
* Shift size for shifting left the index array values.
* Increases possible data size with 16-bit index values at the cost
* of compactability.
* This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.
*/
const UTRIE2_INDEX_SHIFT = 2
/**
* Difference between the two shift sizes,
* for getting an index-1 offset from an index-2 offset. 6=11-5
*/
const UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2
/**
* The part of the index-2 table for U+D800..U+DBFF stores values for
* lead surrogate code _units_ not code _points_.
* Values for lead surrogate code _points_ are indexed with this portion of the table.
* Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)
*/
const UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2
/** Number of entries in a data block. 32=0x20 */
const UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2
/** Mask for getting the lower bits for the in-data-block offset. */
const UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1
const UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2
/** Count the lengths of both BMP pieces. 2080=0x820 */
const UTRIE2_INDEX_2_BMP_LENGTH =
UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH
/**
* The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.
* Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.
*/
const UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH
const UTRIE2_UTF8_2B_INDEX_2_LENGTH =
0x800 >> 6 /* U+0800 is the first code point after 2-byte UTF-8 */
/**
* The index-1 table, only used for supplementary code points, at offset 2112=0x840.
* Variable length, for code points up to highStart, where the last single-value range starts.
* Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.
* (For 0x100000 supplementary code points U+10000..U+10ffff.)
*
* The part of the index-2 table for supplementary code points starts
* after this index-1 table.
*
* Both the index-1 table and the following part of the index-2 table
* are omitted completely if there is only BMP data.
*/
const UTRIE2_INDEX_1_OFFSET =
UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH
/**
* Number of index-1 entries for the BMP. 32=0x20
* This part of the index-1 table is omitted from the serialized form.
*/
const UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1
/** Number of entries in an index-2 block. 64=0x40 */
const UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2
/** Mask for getting the lower bits for the in-index-2-block offset. */
const UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1
const slice16 = function (view, start, end) {
if (view.slice) {
return view.slice(start, end)
}
return new Uint16Array(Array.prototype.slice.call(view, start, end))
}
const slice32 = function (view, start, end) {
if (view.slice) {
return view.slice(start, end)
}
return new Uint32Array(Array.prototype.slice.call(view, start, end))
}
const createTrieFromBase64 = function (base64, _byteLength) {
const buffer = decode(base64)
const view32 = Array.isArray(buffer)
? polyUint32Array(buffer)
: new Uint32Array(buffer)
const view16 = Array.isArray(buffer)
? polyUint16Array(buffer)
: new Uint16Array(buffer)
const headerLength = 24
const index = slice16(view16, headerLength / 2, view32[4] / 2)
const data =
view32[5] === 2
? slice16(view16, (headerLength + view32[4]) / 2)
: slice32(view32, Math.ceil((headerLength + view32[4]) / 4))
return new Trie(view32[0], view32[1], view32[2], view32[3], index, data)
}
var Trie = /** @class */ (function () {
function Trie(
initialValue,
errorValue,
highStart,
highValueIndex,
index,
data
) {
this.initialValue = initialValue
this.errorValue = errorValue
this.highStart = highStart
this.highValueIndex = highValueIndex
this.index = index
this.data = data
}
/**
* Get the value for a code point as stored in the Trie.
*
* @param codePoint the code point
* @return the value
*/
Trie.prototype.get = function (codePoint) {
let ix
if (codePoint >= 0) {
if (
codePoint < 0x0d800 ||
(codePoint > 0x0dbff && codePoint <= 0x0ffff)
) {
// Ordinary BMP code point, excluding leading surrogates.
// BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.
// 16 bit data is stored in the index array itself.
ix = this.index[codePoint >> UTRIE2_SHIFT_2]
ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK)
return this.data[ix]
}
if (codePoint <= 0xffff) {
// Lead Surrogate Code Point. A Separate index section is stored for
// lead surrogate code units and code points.
// The main index has the code unit data.
// For this function, we need the code point data.
// Note: this expression could be refactored for slightly improved efficiency, but
// surrogate code points will be so rare in practice that it's not worth it.
ix =
this.index[
UTRIE2_LSCP_INDEX_2_OFFSET +
((codePoint - 0xd800) >> UTRIE2_SHIFT_2)
]
ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK)
return this.data[ix]
}
if (codePoint < this.highStart) {
// Supplemental code point, use two-level lookup.
ix =
UTRIE2_INDEX_1_OFFSET -
UTRIE2_OMITTED_BMP_INDEX_1_LENGTH +
(codePoint >> UTRIE2_SHIFT_1)
ix = this.index[ix]
ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK
ix = this.index[ix]
ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK)
return this.data[ix]
}
if (codePoint <= 0x10ffff) {
return this.data[this.highValueIndex]
}
}
// Fall through. The code point is outside of the legal range of 0..0x10ffff.
return this.errorValue
}
return Trie
})()
/*
* base64-arraybuffer 1.0.2
* Copyright (c) 2022 Niklas von Hertzen
* Released under MIT License
*/
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
// Use a lookup table to find the index.
const lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256)
for (let i = 0; i < chars.length; i++) {
lookup[chars.charCodeAt(i)] = i
}
const Prepend = 1
const CR = 2
const LF = 3
const Control = 4
const Extend = 5
const SpacingMark = 7
const L = 8
const V = 9
const T = 10
const LV = 11
const LVT = 12
const ZWJ = 13
const Extended_Pictographic = 14
const RI = 15
const toCodePoints = function (str) {
const codePoints = []
let i = 0
const length = str.length
while (i < length) {
const value = str.charCodeAt(i++)
if (value >= 0xd800 && value <= 0xdbff && i < length) {
const extra = str.charCodeAt(i++)
if ((extra & 0xfc00) === 0xdc00) {
codePoints.push(
((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000
)
} else {
codePoints.push(value)
i--
}
} else {
codePoints.push(value)
}
}
return codePoints
}
const fromCodePoint = function () {
const codePoints = []
for (let _i = 0; _i < arguments.length; _i++) {
codePoints[_i] = arguments[_i]
}
if (String.fromCodePoint) {
return String.fromCodePoint.apply(String, codePoints)
}
const length = codePoints.length
if (!length) {
return ''
}
const codeUnits = []
let index = -1
let result = ''
while (++index < length) {
let codePoint = codePoints[index]
if (codePoint <= 0xffff) {
codeUnits.push(codePoint)
} else {
codePoint -= 0x10000
codeUnits.push(
(codePoint >> 10) + 0xd800,
(codePoint % 0x400) + 0xdc00
)
}
if (index + 1 === length || codeUnits.length > 0x4000) {
result += String.fromCharCode.apply(String, codeUnits)
codeUnits.length = 0
}
}
return result
}
const UnicodeTrie = createTrieFromBase64(base64)
const BREAK_NOT_ALLOWED = '×'
const BREAK_ALLOWED = '÷'
const codePointToClass = function (codePoint) {
return UnicodeTrie.get(codePoint)
}
const _graphemeBreakAtIndex = function (_codePoints, classTypes, index) {
let prevIndex = index - 2
let prev = classTypes[prevIndex]
const current = classTypes[index - 1]
const next = classTypes[index]
// GB3 Do not break between a CR and LF
if (current === CR && next === LF) {
return BREAK_NOT_ALLOWED
}
// GB4 Otherwise, break before and after controls.
if (current === CR || current === LF || current === Control) {
return BREAK_ALLOWED
}
// GB5
if (next === CR || next === LF || next === Control) {
return BREAK_ALLOWED
}
// Do not break Hangul syllable sequences.
// GB6
if (current === L && [L, V, LV, LVT].indexOf(next) !== -1) {
return BREAK_NOT_ALLOWED
}
// GB7
if ((current === LV || current === V) && (next === V || next === T)) {
return BREAK_NOT_ALLOWED
}
// GB8
if ((current === LVT || current === T) && next === T) {
return BREAK_NOT_ALLOWED
}
// GB9 Do not break before extending characters or ZWJ.
if (next === ZWJ || next === Extend) {
return BREAK_NOT_ALLOWED
}
// Do not break before SpacingMarks, or after Prepend characters.
// GB9a
if (next === SpacingMark) {
return BREAK_NOT_ALLOWED
}
// GB9a
if (current === Prepend) {
return BREAK_NOT_ALLOWED
}
// GB11 Do not break within emoji modifier sequences or emoji zwj sequences.
if (current === ZWJ && next === Extended_Pictographic) {
while (prev === Extend) {
prev = classTypes[--prevIndex]
}
if (prev === Extended_Pictographic) {
return BREAK_NOT_ALLOWED
}
}
// GB12 Do not break within emoji flag sequences.
// That is, do not break between regional indicator (RI) symbols
// if there is an odd number of RI characters before the break point.
if (current === RI && next === RI) {
let countRI = 0
while (prev === RI) {
countRI++
prev = classTypes[--prevIndex]
}
if (countRI % 2 === 0) {
return BREAK_NOT_ALLOWED
}
}
return BREAK_ALLOWED
}
const GraphemeBreaker = function (str) {
const codePoints = toCodePoints(str)
const length = codePoints.length
let index = 0
let lastEnd = 0
const classTypes = codePoints.map(codePointToClass)
return {
next: function () {
if (index >= length) {
return { done: true, value: null }
}
let graphemeBreak = BREAK_NOT_ALLOWED
while (
index < length &&
(graphemeBreak = _graphemeBreakAtIndex(
codePoints,
classTypes,
++index
)) === BREAK_NOT_ALLOWED
) {}
if (graphemeBreak !== BREAK_NOT_ALLOWED || index === length) {
const value = fromCodePoint.apply(
null,
codePoints.slice(lastEnd, index)
)
lastEnd = index
return { value: value, done: false }
}
return { done: true, value: null }
}
}
}
const splitGraphemes = function (str) {
const breaker = GraphemeBreaker(str)
const graphemes = []
let bk
while (!(bk = breaker.next()).done) {
if (bk.value) {
graphemes.push(bk.value.slice())
}
}
return graphemes
}
const testRangeBounds = function (document) {
const TEST_HEIGHT = 123
if (document.createRange) {
const range = document.createRange()
if (range.getBoundingClientRect) {
const testElement = document.createElement('boundtest')
testElement.style.height = TEST_HEIGHT + 'px'
testElement.style.display = 'block'
document.body.appendChild(testElement)
range.selectNode(testElement)
const rangeBounds = range.getBoundingClientRect()
const rangeHeight = Math.round(rangeBounds.height)
document.body.removeChild(testElement)
if (rangeHeight === TEST_HEIGHT) {
return true
}
}
}
return false
}
const testIOSLineBreak = function (document) {
const testElement = document.createElement('boundtest')
testElement.style.width = '50px'
testElement.style.display = 'block'
testElement.style.fontSize = '12px'
testElement.style.letterSpacing = '0px'
testElement.style.wordSpacing = '0px'
document.body.appendChild(testElement)
const range = document.createRange()
testElement.innerHTML =
typeof ''.repeat === 'function' ? '👨'.repeat(10) : ''
const node = testElement.firstChild
const textList = toCodePoints$1(node.data).map(function (i) {
return fromCodePoint$1(i)
})
let offset = 0
let prev = {}
// ios 13 does not handle range getBoundingClientRect line changes correctly #2177
const supports = textList.every(function (text, i) {
range.setStart(node, offset)
range.setEnd(node, offset + text.length)
const rect = range.getBoundingClientRect()
offset += text.length
const boundAhead = rect.x > prev.x || rect.y > prev.y
prev = rect
if (i === 0) {
return true
}
return boundAhead
})
document.body.removeChild(testElement)
return supports
}
const testCORS = function () {
return typeof new Image().crossOrigin !== 'undefined'
}
const testResponseType = function () {
return typeof new XMLHttpRequest().responseType === 'string'
}
const testSVG = function (document) {
const img = new Image()
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
if (!ctx) {
return false
}
img.src =
"data:image/svg+xml,"
try {
ctx.drawImage(img, 0, 0)
canvas.toDataURL()
} catch (e) {
return false
}
return true
}
const isGreenPixel = function (data) {
return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255
}
const testForeignObject = function (document) {
const canvas = document.createElement('canvas')
const size = 100
canvas.width = size
canvas.height = size
const ctx = canvas.getContext('2d')
if (!ctx) {
return Promise.reject(false)
}
ctx.fillStyle = 'rgb(0, 255, 0)'
ctx.fillRect(0, 0, size, size)
const img = new Image()
const greenImageSrc = canvas.toDataURL()
img.src = greenImageSrc
const svg = createForeignObjectSVG(size, size, 0, 0, img)
ctx.fillStyle = 'red'
ctx.fillRect(0, 0, size, size)
return loadSerializedSVG$1(svg)
.then(function (img) {
ctx.drawImage(img, 0, 0)
const data = ctx.getImageData(0, 0, size, size).data
ctx.fillStyle = 'red'
ctx.fillRect(0, 0, size, size)
const node = document.createElement('div')
node.style.backgroundImage = 'url(' + greenImageSrc + ')'
node.style.height = size + 'px'
// Firefox 55 does not render inline
tags
return isGreenPixel(data)
? loadSerializedSVG$1(
createForeignObjectSVG(size, size, 0, 0, node)
)
: Promise.reject(false)
})
.then(function (img) {
ctx.drawImage(img, 0, 0)
// Edge does not render background-images
return isGreenPixel(ctx.getImageData(0, 0, size, size).data)
})
.catch(function () {
return false
})
}
var createForeignObjectSVG = function (width, height, x, y, node) {
const xmlns = 'http://www.w3.org/2000/svg'
const svg = document.createElementNS(xmlns, 'svg')
const foreignObject = document.createElementNS(xmlns, 'foreignObject')
svg.setAttributeNS(null, 'width', width.toString())
svg.setAttributeNS(null, 'height', height.toString())
foreignObject.setAttributeNS(null, 'width', '100%')
foreignObject.setAttributeNS(null, 'height', '100%')
foreignObject.setAttributeNS(null, 'x', x.toString())
foreignObject.setAttributeNS(null, 'y', y.toString())
foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true')
svg.appendChild(foreignObject)
foreignObject.appendChild(node)
return svg
}
var loadSerializedSVG$1 = function (svg) {
return new Promise(function (resolve, reject) {
const img = new Image()
img.onload = function () {
return resolve(img)
}
img.onerror = reject
img.src =
'data:image/svg+xml;charset=utf-8,' +
encodeURIComponent(new XMLSerializer().serializeToString(svg))
})
}
var FEATURES = {
get SUPPORT_RANGE_BOUNDS() {
const value = testRangeBounds(document)
Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', {
value: value
})
return value
},
get SUPPORT_WORD_BREAKING() {
const value =
FEATURES.SUPPORT_RANGE_BOUNDS && testIOSLineBreak(document)
Object.defineProperty(FEATURES, 'SUPPORT_WORD_BREAKING', {
value: value
})
return value
},
get SUPPORT_SVG_DRAWING() {
const value = testSVG(document)
Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', { value: value })
return value
},
get SUPPORT_FOREIGNOBJECT_DRAWING() {
const value =
typeof Array.from === 'function' &&
typeof window.fetch === 'function'
? testForeignObject(document)
: Promise.resolve(false)
Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', {
value: value
})
return value
},
get SUPPORT_CORS_IMAGES() {
const value = testCORS()
Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', { value: value })
return value
},
get SUPPORT_RESPONSE_TYPE() {
const value = testResponseType()
Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', {
value: value
})
return value
},
get SUPPORT_CORS_XHR() {
const value = 'withCredentials' in new XMLHttpRequest()
Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', { value: value })
return value
},
get SUPPORT_NATIVE_TEXT_SEGMENTATION() {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const value = !!(typeof Intl !== 'undefined' && Intl.Segmenter)
Object.defineProperty(FEATURES, 'SUPPORT_NATIVE_TEXT_SEGMENTATION', {
value: value
})
return value
}
}
const TextBounds = /** @class */ (function () {
function TextBounds(text, bounds) {
this.text = text
this.bounds = bounds
}
return TextBounds
})()
const parseTextBounds = function (context, value, styles, node) {
const textList = breakText(value, styles)
const textBounds = []
let offset = 0
textList.forEach(function (text) {
if (styles.textDecorationLine.length || text.trim().length > 0) {
if (FEATURES.SUPPORT_RANGE_BOUNDS) {
const clientRects = createRange(
node,
offset,
text.length
).getClientRects()
if (clientRects.length > 1) {
const subSegments = segmentGraphemes(text)
let subOffset_1 = 0
subSegments.forEach(function (subSegment) {
textBounds.push(
new TextBounds(
subSegment,
Bounds.fromDOMRectList(
context,
createRange(
node,
subOffset_1 + offset,
subSegment.length
).getClientRects()
)
)
)
subOffset_1 += subSegment.length
})
} else {
textBounds.push(
new TextBounds(
text,
Bounds.fromDOMRectList(context, clientRects)
)
)
}
} else {
const replacementNode = node.splitText(text.length)
textBounds.push(
new TextBounds(text, getWrapperBounds(context, node))
)
node = replacementNode
}
} else if (!FEATURES.SUPPORT_RANGE_BOUNDS) {
node = node.splitText(text.length)
}
offset += text.length
})
return textBounds
}
var getWrapperBounds = function (context, node) {
const ownerDocument = node.ownerDocument
if (ownerDocument) {
const wrapper = ownerDocument.createElement('html2canvaswrapper')
wrapper.appendChild(node.cloneNode(true))
const parentNode = node.parentNode
if (parentNode) {
parentNode.replaceChild(wrapper, node)
const bounds = parseBounds(context, wrapper)
if (wrapper.firstChild) {
parentNode.replaceChild(wrapper.firstChild, wrapper)
}
return bounds
}
}
return Bounds.EMPTY
}
var createRange = function (node, offset, length) {
const ownerDocument = node.ownerDocument
if (!ownerDocument) {
throw new Error('Node has no owner document')
}
const range = ownerDocument.createRange()
range.setStart(node, offset)
range.setEnd(node, offset + length)
return range
}
var segmentGraphemes = function (value) {
if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const segmenter = new Intl.Segmenter(void 0, {
granularity: 'grapheme'
})
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return Array.from(segmenter.segment(value)).map(function (segment) {
return segment.segment
})
}
return splitGraphemes(value)
}
const segmentWords = function (value, styles) {
if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const segmenter = new Intl.Segmenter(void 0, {
granularity: 'word'
})
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return Array.from(segmenter.segment(value)).map(function (segment) {
return segment.segment
})
}
return breakWords(value, styles)
}
var breakText = function (value, styles) {
return styles.letterSpacing !== 0
? segmentGraphemes(value)
: segmentWords(value, styles)
}
// https://drafts.csswg.org/css-text/#word-separator
const wordSeparators = [
0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091
]
var breakWords = function (str, styles) {
const breaker = LineBreaker(str, {
lineBreak: styles.lineBreak,
wordBreak:
styles.overflowWrap === 'break-word' /* BREAK_WORD */
? 'break-word'
: styles.wordBreak
})
const words = []
let bk
const _loop_1 = function () {
if (bk.value) {
const value = bk.value.slice()
const codePoints = toCodePoints$1(value)
let word_1 = ''
codePoints.forEach(function (codePoint) {
if (wordSeparators.indexOf(codePoint) === -1) {
word_1 += fromCodePoint$1(codePoint)
} else {
if (word_1.length) {
words.push(word_1)
}
words.push(fromCodePoint$1(codePoint))
word_1 = ''
}
})
if (word_1.length) {
words.push(word_1)
}
}
}
while (!(bk = breaker.next()).done) {
_loop_1()
}
return words
}
const TextContainer = /** @class */ (function () {
function TextContainer(context, node, styles) {
this.text = transform(node.data, styles.textTransform)
this.textBounds = parseTextBounds(context, this.text, styles, node)
}
return TextContainer
})()
var transform = function (text, transform) {
switch (transform) {
case 1 /* LOWERCASE */:
return text.toLowerCase()
case 3 /* CAPITALIZE */:
return text.replace(CAPITALIZE, capitalize)
case 2 /* UPPERCASE */:
return text.toUpperCase()
default:
return text
}
}
var CAPITALIZE = /(^|\s|:|-|\(|\))([a-z])/g
var capitalize = function (m, p1, p2) {
if (m.length > 0) {
return p1 + p2.toUpperCase()
}
return m
}
const ImageElementContainer = /** @class */ (function (_super) {
__extends(ImageElementContainer, _super)
function ImageElementContainer(context, img) {
const _this = _super.call(this, context, img) || this
_this.src = img.currentSrc || img.src
_this.intrinsicWidth = img.naturalWidth
_this.intrinsicHeight = img.naturalHeight
_this.context.cache.addImage(_this.src)
return _this
}
return ImageElementContainer
})(ElementContainer)
const CanvasElementContainer = /** @class */ (function (_super) {
__extends(CanvasElementContainer, _super)
function CanvasElementContainer(context, canvas) {
const _this = _super.call(this, context, canvas) || this
_this.canvas = canvas
_this.intrinsicWidth = canvas.width
_this.intrinsicHeight = canvas.height
return _this
}
return CanvasElementContainer
})(ElementContainer)
const SVGElementContainer = /** @class */ (function (_super) {
__extends(SVGElementContainer, _super)
function SVGElementContainer(context, img) {
const _this = _super.call(this, context, img) || this
const s = new XMLSerializer()
const bounds = parseBounds(context, img)
img.setAttribute('width', bounds.width + 'px')
img.setAttribute('height', bounds.height + 'px')
_this.svg =
'data:image/svg+xml,' + encodeURIComponent(s.serializeToString(img))
_this.intrinsicWidth = img.width.baseVal.value
_this.intrinsicHeight = img.height.baseVal.value
_this.context.cache.addImage(_this.svg)
return _this
}
return SVGElementContainer
})(ElementContainer)
const LIElementContainer = /** @class */ (function (_super) {
__extends(LIElementContainer, _super)
function LIElementContainer(context, element) {
const _this = _super.call(this, context, element) || this
_this.value = element.value
return _this
}
return LIElementContainer
})(ElementContainer)
const OLElementContainer = /** @class */ (function (_super) {
__extends(OLElementContainer, _super)
function OLElementContainer(context, element) {
const _this = _super.call(this, context, element) || this
_this.start = element.start
_this.reversed =
typeof element.reversed === 'boolean' && element.reversed === true
return _this
}
return OLElementContainer
})(ElementContainer)
const CHECKBOX_BORDER_RADIUS = [
{
type: 15 /* DIMENSION_TOKEN */,
flags: 0,
unit: 'px',
number: 3
}
]
const RADIO_BORDER_RADIUS = [
{
type: 16 /* PERCENTAGE_TOKEN */,
flags: 0,
number: 50
}
]
const reformatInputBounds = function (bounds) {
if (bounds.width > bounds.height) {
return new Bounds(
bounds.left + (bounds.width - bounds.height) / 2,
bounds.top,
bounds.height,
bounds.height
)
} else if (bounds.width < bounds.height) {
return new Bounds(
bounds.left,
bounds.top + (bounds.height - bounds.width) / 2,
bounds.width,
bounds.width
)
}
return bounds
}
const getInputValue = function (node) {
const value =
node.type === PASSWORD
? new Array(node.value.length + 1).join('\u2022')
: node.value
return value.length === 0 ? node.placeholder || '' : value
}
const CHECKBOX = 'checkbox'
const RADIO = 'radio'
var PASSWORD = 'password'
const INPUT_COLOR = 0x2a2a2aff
const InputElementContainer = /** @class */ (function (_super) {
__extends(InputElementContainer, _super)
function InputElementContainer(context, input) {
const _this = _super.call(this, context, input) || this
_this.type = input.type.toLowerCase()
_this.checked = input.checked
_this.value = getInputValue(input)
if (_this.type === CHECKBOX || _this.type === RADIO) {
_this.styles.backgroundColor = 0xdededeff
_this.styles.borderTopColor =
_this.styles.borderRightColor =
_this.styles.borderBottomColor =
_this.styles.borderLeftColor =
0xa5a5a5ff
_this.styles.borderTopWidth =
_this.styles.borderRightWidth =
_this.styles.borderBottomWidth =
_this.styles.borderLeftWidth =
1
_this.styles.borderTopStyle =
_this.styles.borderRightStyle =
_this.styles.borderBottomStyle =
_this.styles.borderLeftStyle =
1 /* SOLID */
_this.styles.backgroundClip = [0 /* BORDER_BOX */]
_this.styles.backgroundOrigin = [0 /* BORDER_BOX */]
_this.bounds = reformatInputBounds(_this.bounds)
}
switch (_this.type) {
case CHECKBOX:
_this.styles.borderTopRightRadius =
_this.styles.borderTopLeftRadius =
_this.styles.borderBottomRightRadius =
_this.styles.borderBottomLeftRadius =
CHECKBOX_BORDER_RADIUS
break
case RADIO:
_this.styles.borderTopRightRadius =
_this.styles.borderTopLeftRadius =
_this.styles.borderBottomRightRadius =
_this.styles.borderBottomLeftRadius =
RADIO_BORDER_RADIUS
break
}
return _this
}
return InputElementContainer
})(ElementContainer)
const SelectElementContainer = /** @class */ (function (_super) {
__extends(SelectElementContainer, _super)
function SelectElementContainer(context, element) {
const _this = _super.call(this, context, element) || this
const option = element.options[element.selectedIndex || 0]
_this.value = option ? option.text || '' : ''
return _this
}
return SelectElementContainer
})(ElementContainer)
const TextareaElementContainer = /** @class */ (function (_super) {
__extends(TextareaElementContainer, _super)
function TextareaElementContainer(context, element) {
const _this = _super.call(this, context, element) || this
_this.value = element.value
return _this
}
return TextareaElementContainer
})(ElementContainer)
const IFrameElementContainer = /** @class */ (function (_super) {
__extends(IFrameElementContainer, _super)
function IFrameElementContainer(context, iframe) {
const _this = _super.call(this, context, iframe) || this
_this.src = iframe.src
_this.width = parseInt(iframe.width, 10) || 0
_this.height = parseInt(iframe.height, 10) || 0
_this.backgroundColor = _this.styles.backgroundColor
try {
if (
iframe.contentWindow &&
iframe.contentWindow.document &&
iframe.contentWindow.document.documentElement
) {
_this.tree = parseTree(
context,
iframe.contentWindow.document.documentElement
)
// http://www.w3.org/TR/css3-background/#special-backgrounds
const documentBackgroundColor = iframe.contentWindow.document
.documentElement
? parseColor(
context,
getComputedStyle(
iframe.contentWindow.document.documentElement
).backgroundColor
)
: COLORS.TRANSPARENT
const bodyBackgroundColor = iframe.contentWindow.document.body
? parseColor(
context,
getComputedStyle(iframe.contentWindow.document.body)
.backgroundColor
)
: COLORS.TRANSPARENT
_this.backgroundColor = isTransparent(documentBackgroundColor)
? isTransparent(bodyBackgroundColor)
? _this.styles.backgroundColor
: bodyBackgroundColor
: documentBackgroundColor
}
} catch (e) {}
return _this
}
return IFrameElementContainer
})(ElementContainer)
const LIST_OWNERS = ['OL', 'UL', 'MENU']
var parseNodeTree = function (context, node, parent, root) {
for (
let childNode = node.firstChild, nextNode = void 0;
childNode;
childNode = nextNode
) {
nextNode = childNode.nextSibling
if (isTextNode(childNode) && childNode.data.trim().length > 0) {
parent.textNodes.push(
new TextContainer(context, childNode, parent.styles)
)
} else if (isElementNode(childNode)) {
if (isSlotElement(childNode) && childNode.assignedNodes) {
childNode.assignedNodes().forEach(function (childNode) {
return parseNodeTree(context, childNode, parent, root)
})
} else {
const container = createContainer(context, childNode)
if (container.styles.isVisible()) {
if (
createsRealStackingContext(childNode, container, root)
) {
container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */
} else if (createsStackingContext(container.styles)) {
container.flags |= 2 /* CREATES_STACKING_CONTEXT */
}
if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {
container.flags |= 8 /* IS_LIST_OWNER */
}
parent.elements.push(container)
childNode.slot
if (childNode.shadowRoot) {
parseNodeTree(
context,
childNode.shadowRoot,
container,
root
)
} else if (
!isTextareaElement(childNode) &&
!isSVGElement(childNode) &&
!isSelectElement(childNode)
) {
parseNodeTree(context, childNode, container, root)
}
}
}
}
}
}
var createContainer = function (context, element) {
if (isImageElement(element)) {
return new ImageElementContainer(context, element)
}
if (isCanvasElement(element)) {
return new CanvasElementContainer(context, element)
}
if (isSVGElement(element)) {
return new SVGElementContainer(context, element)
}
if (isLIElement(element)) {
return new LIElementContainer(context, element)
}
if (isOLElement(element)) {
return new OLElementContainer(context, element)
}
if (isInputElement(element)) {
return new InputElementContainer(context, element)
}
if (isSelectElement(element)) {
return new SelectElementContainer(context, element)
}
if (isTextareaElement(element)) {
return new TextareaElementContainer(context, element)
}
if (isIFrameElement(element)) {
return new IFrameElementContainer(context, element)
}
return new ElementContainer(context, element)
}
var parseTree = function (context, element) {
const container = createContainer(context, element)
container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */
parseNodeTree(context, element, container, container)
return container
}
var createsRealStackingContext = function (node, container, root) {
return (
container.styles.isPositionedWithZIndex() ||
container.styles.opacity < 1 ||
container.styles.isTransformed() ||
(isBodyElement(node) && root.styles.isTransparent())
)
}
var createsStackingContext = function (styles) {
return styles.isPositioned() || styles.isFloating()
}
var isTextNode = function (node) {
return node.nodeType === Node.TEXT_NODE
}
var isElementNode = function (node) {
return node.nodeType === Node.ELEMENT_NODE
}
var isHTMLElementNode = function (node) {
return (
isElementNode(node) &&
typeof node.style !== 'undefined' &&
!isSVGElementNode(node)
)
}
var isSVGElementNode = function (element) {
return typeof element.className === 'object'
}
var isLIElement = function (node) {
return node.tagName === 'LI'
}
var isOLElement = function (node) {
return node.tagName === 'OL'
}
var isInputElement = function (node) {
return node.tagName === 'INPUT'
}
const isHTMLElement = function (node) {
return node.tagName === 'HTML'
}
var isSVGElement = function (node) {
return node.tagName === 'svg'
}
var isBodyElement = function (node) {
return node.tagName === 'BODY'
}
var isCanvasElement = function (node) {
return node.tagName === 'CANVAS'
}
const isVideoElement = function (node) {
return node.tagName === 'VIDEO'
}
var isImageElement = function (node) {
return node.tagName === 'IMG'
}
var isIFrameElement = function (node) {
return node.tagName === 'IFRAME'
}
const isStyleElement = function (node) {
return node.tagName === 'STYLE'
}
const isScriptElement = function (node) {
return node.tagName === 'SCRIPT'
}
var isTextareaElement = function (node) {
return node.tagName === 'TEXTAREA'
}
var isSelectElement = function (node) {
return node.tagName === 'SELECT'
}
var isSlotElement = function (node) {
return node.tagName === 'SLOT'
}
// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name
const isCustomElement = function (node) {
return node.tagName.indexOf('-') > 0
}
const CounterState = /** @class */ (function () {
function CounterState() {
this.counters = {}
}
CounterState.prototype.getCounterValue = function (name) {
const counter = this.counters[name]
if (counter && counter.length) {
return counter[counter.length - 1]
}
return 1
}
CounterState.prototype.getCounterValues = function (name) {
const counter = this.counters[name]
return counter ? counter : []
}
CounterState.prototype.pop = function (counters) {
const _this = this
counters.forEach(function (counter) {
return _this.counters[counter].pop()
})
}
CounterState.prototype.parse = function (style) {
const _this = this
const counterIncrement = style.counterIncrement
const counterReset = style.counterReset
let canReset = true
if (counterIncrement !== null) {
counterIncrement.forEach(function (entry) {
const counter = _this.counters[entry.counter]
if (counter && entry.increment !== 0) {
canReset = false
if (!counter.length) {
counter.push(1)
}
counter[Math.max(0, counter.length - 1)] += entry.increment
}
})
}
const counterNames = []
if (canReset) {
counterReset.forEach(function (entry) {
let counter = _this.counters[entry.counter]
counterNames.push(entry.counter)
if (!counter) {
counter = _this.counters[entry.counter] = []
}
counter.push(entry.reset)
})
}
return counterNames
}
return CounterState
})()
const ROMAN_UPPER = {
integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],
values: [
'M',
'CM',
'D',
'CD',
'C',
'XC',
'L',
'XL',
'X',
'IX',
'V',
'IV',
'I'
]
}
const ARMENIAN = {
integers: [
9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700,
600, 500, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 9, 8,
7, 6, 5, 4, 3, 2, 1
],
values: [
'Ք',
'Փ',
'Ւ',
'Ց',
'Ր',
'Տ',
'Վ',
'Ս',
'Ռ',
'Ջ',
'Պ',
'Չ',
'Ո',
'Շ',
'Ն',
'Յ',
'Մ',
'Ճ',
'Ղ',
'Ձ',
'Հ',
'Կ',
'Ծ',
'Խ',
'Լ',
'Ի',
'Ժ',
'Թ',
'Ը',
'Է',
'Զ',
'Ե',
'Դ',
'Գ',
'Բ',
'Ա'
]
}
const HEBREW = {
integers: [
10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 400, 300,
200, 100, 90, 80, 70, 60, 50, 40, 30, 20, 19, 18, 17, 16, 15, 10, 9, 8,
7, 6, 5, 4, 3, 2, 1
],
values: [
'י׳',
'ט׳',
'ח׳',
'ז׳',
'ו׳',
'ה׳',
'ד׳',
'ג׳',
'ב׳',
'א׳',
'ת',
'ש',
'ר',
'ק',
'צ',
'פ',
'ע',
'ס',
'נ',
'מ',
'ל',
'כ',
'יט',
'יח',
'יז',
'טז',
'טו',
'י',
'ט',
'ח',
'ז',
'ו',
'ה',
'ד',
'ג',
'ב',
'א'
]
}
const GEORGIAN = {
integers: [
10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800,
700, 600, 500, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10,
9, 8, 7, 6, 5, 4, 3, 2, 1
],
values: [
'ჵ',
'ჰ',
'ჯ',
'ჴ',
'ხ',
'ჭ',
'წ',
'ძ',
'ც',
'ჩ',
'შ',
'ყ',
'ღ',
'ქ',
'ფ',
'ჳ',
'ტ',
'ს',
'რ',
'ჟ',
'პ',
'ო',
'ჲ',
'ნ',
'მ',
'ლ',
'კ',
'ი',
'თ',
'ჱ',
'ზ',
'ვ',
'ე',
'დ',
'გ',
'ბ',
'ა'
]
}
const createAdditiveCounter = function (
value,
min,
max,
symbols,
fallback,
suffix
) {
if (value < min || value > max) {
return createCounterText(value, fallback, suffix.length > 0)
}
return (
symbols.integers.reduce(function (string, integer, index) {
while (value >= integer) {
value -= integer
string += symbols.values[index]
}
return string
}, '') + suffix
)
}
const createCounterStyleWithSymbolResolver = function (
value,
codePointRangeLength,
isNumeric,
resolver
) {
let string = ''
do {
if (!isNumeric) {
value--
}
string = resolver(value) + string
value /= codePointRangeLength
} while (value * codePointRangeLength >= codePointRangeLength)
return string
}
const createCounterStyleFromRange = function (
value,
codePointRangeStart,
codePointRangeEnd,
isNumeric,
suffix
) {
const codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1
return (
(value < 0 ? '-' : '') +
(createCounterStyleWithSymbolResolver(
Math.abs(value),
codePointRangeLength,
isNumeric,
function (codePoint) {
return fromCodePoint$1(
Math.floor(codePoint % codePointRangeLength) +
codePointRangeStart
)
}
) +
suffix)
)
}
const createCounterStyleFromSymbols = function (value, symbols, suffix) {
if (suffix === void 0) {
suffix = '. '
}
const codePointRangeLength = symbols.length
return (
createCounterStyleWithSymbolResolver(
Math.abs(value),
codePointRangeLength,
false,
function (codePoint) {
return symbols[Math.floor(codePoint % codePointRangeLength)]
}
) + suffix
)
}
const CJK_ZEROS = 1 << 0
const CJK_TEN_COEFFICIENTS = 1 << 1
const CJK_TEN_HIGH_COEFFICIENTS = 1 << 2
const CJK_HUNDRED_COEFFICIENTS = 1 << 3
const createCJKCounter = function (
value,
numbers,
multipliers,
negativeSign,
suffix,
flags
) {
if (value < -9999 || value > 9999) {
return createCounterText(value, 4 /* CJK_DECIMAL */, suffix.length > 0)
}
let tmp = Math.abs(value)
let string = suffix
if (tmp === 0) {
return numbers[0] + string
}
for (let digit = 0; tmp > 0 && digit <= 4; digit++) {
const coefficient = tmp % 10
if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== '') {
string = numbers[coefficient] + string
} else if (
coefficient > 1 ||
(coefficient === 1 && digit === 0) ||
(coefficient === 1 &&
digit === 1 &&
contains(flags, CJK_TEN_COEFFICIENTS)) ||
(coefficient === 1 &&
digit === 1 &&
contains(flags, CJK_TEN_HIGH_COEFFICIENTS) &&
value > 100) ||
(coefficient === 1 &&
digit > 1 &&
contains(flags, CJK_HUNDRED_COEFFICIENTS))
) {
string =
numbers[coefficient] +
(digit > 0 ? multipliers[digit - 1] : '') +
string
} else if (coefficient === 1 && digit > 0) {
string = multipliers[digit - 1] + string
}
tmp = Math.floor(tmp / 10)
}
return (value < 0 ? negativeSign : '') + string
}
const CHINESE_INFORMAL_MULTIPLIERS = '十百千萬'
const CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬'
const JAPANESE_NEGATIVE = 'マイナス'
const KOREAN_NEGATIVE = '마이너스'
var createCounterText = function (value, type, appendSuffix) {
const defaultSuffix = appendSuffix ? '. ' : ''
const cjkSuffix = appendSuffix ? '、' : ''
const koreanSuffix = appendSuffix ? ', ' : ''
const spaceSuffix = appendSuffix ? ' ' : ''
switch (type) {
case 0 /* DISC */:
return '•' + spaceSuffix
case 1 /* CIRCLE */:
return '◦' + spaceSuffix
case 2 /* SQUARE */:
return '◾' + spaceSuffix
case 5 /* DECIMAL_LEADING_ZERO */:
var string = createCounterStyleFromRange(
value,
48,
57,
true,
defaultSuffix
)
return string.length < 4 ? '0' + string : string
case 4 /* CJK_DECIMAL */:
return createCounterStyleFromSymbols(
value,
'〇一二三四五六七八九',
cjkSuffix
)
case 6 /* LOWER_ROMAN */:
return createAdditiveCounter(
value,
1,
3999,
ROMAN_UPPER,
3 /* DECIMAL */,
defaultSuffix
).toLowerCase()
case 7 /* UPPER_ROMAN */:
return createAdditiveCounter(
value,
1,
3999,
ROMAN_UPPER,
3 /* DECIMAL */,
defaultSuffix
)
case 8 /* LOWER_GREEK */:
return createCounterStyleFromRange(
value,
945,
969,
false,
defaultSuffix
)
case 9 /* LOWER_ALPHA */:
return createCounterStyleFromRange(
value,
97,
122,
false,
defaultSuffix
)
case 10 /* UPPER_ALPHA */:
return createCounterStyleFromRange(
value,
65,
90,
false,
defaultSuffix
)
case 11 /* ARABIC_INDIC */:
return createCounterStyleFromRange(
value,
1632,
1641,
true,
defaultSuffix
)
case 12 /* ARMENIAN */:
case 49 /* UPPER_ARMENIAN */:
return createAdditiveCounter(
value,
1,
9999,
ARMENIAN,
3 /* DECIMAL */,
defaultSuffix
)
case 35 /* LOWER_ARMENIAN */:
return createAdditiveCounter(
value,
1,
9999,
ARMENIAN,
3 /* DECIMAL */,
defaultSuffix
).toLowerCase()
case 13 /* BENGALI */:
return createCounterStyleFromRange(
value,
2534,
2543,
true,
defaultSuffix
)
case 14 /* CAMBODIAN */:
case 30 /* KHMER */:
return createCounterStyleFromRange(
value,
6112,
6121,
true,
defaultSuffix
)
case 15 /* CJK_EARTHLY_BRANCH */:
return createCounterStyleFromSymbols(
value,
'子丑寅卯辰巳午未申酉戌亥',
cjkSuffix
)
case 16 /* CJK_HEAVENLY_STEM */:
return createCounterStyleFromSymbols(
value,
'甲乙丙丁戊己庚辛壬癸',
cjkSuffix
)
case 17 /* CJK_IDEOGRAPHIC */:
case 48 /* TRAD_CHINESE_INFORMAL */:
return createCJKCounter(
value,
'零一二三四五六七八九',
CHINESE_INFORMAL_MULTIPLIERS,
'負',
cjkSuffix,
CJK_TEN_COEFFICIENTS |
CJK_TEN_HIGH_COEFFICIENTS |
CJK_HUNDRED_COEFFICIENTS
)
case 47 /* TRAD_CHINESE_FORMAL */:
return createCJKCounter(
value,
'零壹貳參肆伍陸柒捌玖',
CHINESE_FORMAL_MULTIPLIERS,
'負',
cjkSuffix,
CJK_ZEROS |
CJK_TEN_COEFFICIENTS |
CJK_TEN_HIGH_COEFFICIENTS |
CJK_HUNDRED_COEFFICIENTS
)
case 42 /* SIMP_CHINESE_INFORMAL */:
return createCJKCounter(
value,
'零一二三四五六七八九',
CHINESE_INFORMAL_MULTIPLIERS,
'负',
cjkSuffix,
CJK_TEN_COEFFICIENTS |
CJK_TEN_HIGH_COEFFICIENTS |
CJK_HUNDRED_COEFFICIENTS
)
case 41 /* SIMP_CHINESE_FORMAL */:
return createCJKCounter(
value,
'零壹贰叁肆伍陆柒捌玖',
CHINESE_FORMAL_MULTIPLIERS,
'负',
cjkSuffix,
CJK_ZEROS |
CJK_TEN_COEFFICIENTS |
CJK_TEN_HIGH_COEFFICIENTS |
CJK_HUNDRED_COEFFICIENTS
)
case 26 /* JAPANESE_INFORMAL */:
return createCJKCounter(
value,
'〇一二三四五六七八九',
'十百千万',
JAPANESE_NEGATIVE,
cjkSuffix,
0
)
case 25 /* JAPANESE_FORMAL */:
return createCJKCounter(
value,
'零壱弐参四伍六七八九',
'拾百千万',
JAPANESE_NEGATIVE,
cjkSuffix,
CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS
)
case 31 /* KOREAN_HANGUL_FORMAL */:
return createCJKCounter(
value,
'영일이삼사오육칠팔구',
'십백천만',
KOREAN_NEGATIVE,
koreanSuffix,
CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS
)
case 33 /* KOREAN_HANJA_INFORMAL */:
return createCJKCounter(
value,
'零一二三四五六七八九',
'十百千萬',
KOREAN_NEGATIVE,
koreanSuffix,
0
)
case 32 /* KOREAN_HANJA_FORMAL */:
return createCJKCounter(
value,
'零壹貳參四五六七八九',
'拾百千',
KOREAN_NEGATIVE,
koreanSuffix,
CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS
)
case 18 /* DEVANAGARI */:
return createCounterStyleFromRange(
value,
0x966,
0x96f,
true,
defaultSuffix
)
case 20 /* GEORGIAN */:
return createAdditiveCounter(
value,
1,
19999,
GEORGIAN,
3 /* DECIMAL */,
defaultSuffix
)
case 21 /* GUJARATI */:
return createCounterStyleFromRange(
value,
0xae6,
0xaef,
true,
defaultSuffix
)
case 22 /* GURMUKHI */:
return createCounterStyleFromRange(
value,
0xa66,
0xa6f,
true,
defaultSuffix
)
case 22 /* HEBREW */:
return createAdditiveCounter(
value,
1,
10999,
HEBREW,
3 /* DECIMAL */,
defaultSuffix
)
case 23 /* HIRAGANA */:
return createCounterStyleFromSymbols(
value,
'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん'
)
case 24 /* HIRAGANA_IROHA */:
return createCounterStyleFromSymbols(
value,
'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす'
)
case 27 /* KANNADA */:
return createCounterStyleFromRange(
value,
0xce6,
0xcef,
true,
defaultSuffix
)
case 28 /* KATAKANA */:
return createCounterStyleFromSymbols(
value,
'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン',
cjkSuffix
)
case 29 /* KATAKANA_IROHA */:
return createCounterStyleFromSymbols(
value,
'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス',
cjkSuffix
)
case 34 /* LAO */:
return createCounterStyleFromRange(
value,
0xed0,
0xed9,
true,
defaultSuffix
)
case 37 /* MONGOLIAN */:
return createCounterStyleFromRange(
value,
0x1810,
0x1819,
true,
defaultSuffix
)
case 38 /* MYANMAR */:
return createCounterStyleFromRange(
value,
0x1040,
0x1049,
true,
defaultSuffix
)
case 39 /* ORIYA */:
return createCounterStyleFromRange(
value,
0xb66,
0xb6f,
true,
defaultSuffix
)
case 40 /* PERSIAN */:
return createCounterStyleFromRange(
value,
0x6f0,
0x6f9,
true,
defaultSuffix
)
case 43 /* TAMIL */:
return createCounterStyleFromRange(
value,
0xbe6,
0xbef,
true,
defaultSuffix
)
case 44 /* TELUGU */:
return createCounterStyleFromRange(
value,
0xc66,
0xc6f,
true,
defaultSuffix
)
case 45 /* THAI */:
return createCounterStyleFromRange(
value,
0xe50,
0xe59,
true,
defaultSuffix
)
case 46 /* TIBETAN */:
return createCounterStyleFromRange(
value,
0xf20,
0xf29,
true,
defaultSuffix
)
case 3 /* DECIMAL */:
default:
return createCounterStyleFromRange(
value,
48,
57,
true,
defaultSuffix
)
}
}
const IGNORE_ATTRIBUTE = 'data-html2canvas-ignore'
const DocumentCloner = /** @class */ (function () {
function DocumentCloner(context, element, options) {
this.context = context
this.options = options
this.scrolledElements = []
this.referenceElement = element
this.counters = new CounterState()
this.quoteDepth = 0
if (!element.ownerDocument) {
throw new Error('Cloned element does not have an owner document')
}
this.documentElement = this.cloneNode(
element.ownerDocument.documentElement,
false
)
}
DocumentCloner.prototype.toIFrame = function (ownerDocument, windowSize) {
const _this = this
const iframe = createIFrameContainer(ownerDocument, windowSize)
if (!iframe.contentWindow) {
return Promise.reject('Unable to find iframe window')
}
const scrollX = ownerDocument.defaultView.pageXOffset
const scrollY = ownerDocument.defaultView.pageYOffset
const cloneWindow = iframe.contentWindow
const documentClone = cloneWindow.document
/* Chrome doesn't detect relative background-images assigned in inline